rzk 0.8.0 → 0.9.0
raw patch · 131 files changed
+10368/−7514 lines, 131 filesdep +doctest-paralleldep −doctestdep ~aesondep ~filepathdep ~lenssetup-changed
Dependencies added: doctest-parallel
Dependencies removed: doctest
Dependency ranges changed: aeson, filepath, lens, lsp, lsp-types, optparse-generic, stm, with-utf8
Files
- ChangeLog.md +48/−0
- Setup.hs +0/−41
- app/Main.hs +45/−11
- grammar/Syntax.cf +25/−7
- rzk.cabal +108/−42
- src/Language/Rzk/Free/Syntax.hs +331/−73
- src/Language/Rzk/Syntax.hs +4/−0
- src/Language/Rzk/Syntax/Abs.hs +45/−7
- src/Language/Rzk/Syntax/Layout.hs +5/−5
- src/Language/Rzk/Syntax/Lex.hs +147/−127
- src/Language/Rzk/Syntax/Lex.x +0/−315
- src/Language/Rzk/Syntax/Par.hs +2645/−2489
- src/Language/Rzk/Syntax/Par.y +0/−575
- src/Language/Rzk/Syntax/Print.hs +24/−7
- src/Language/Rzk/VSCode/Env.hs +2/−2
- src/Language/Rzk/VSCode/Handlers.hs +49/−26
- src/Language/Rzk/VSCode/Lsp.hs +2/−2
- src/Language/Rzk/VSCode/Tokenize.hs +25/−15
- src/Rzk/Diagnostic.hs +235/−0
- src/Rzk/Format.hs +6/−0
- src/Rzk/Main.hs +3/−2
- src/Rzk/TypeCheck.hs +4809/−3661
- test/Rzk/DiagnosticSpec.hs +98/−0
- test/Rzk/HolesSpec.hs +502/−0
- test/Rzk/TypeCheckSpec.hs +5/−23
- test/doctests.hs +3/−5
- test/typecheck/SCHEMA.md +1/−1
- test/typecheck/cases/happy-flip-unflip.expect.yaml +3/−0
- test/typecheck/cases/happy-flip-unflip.rzk +29/−0
- test/typecheck/cases/happy-interval-basics.expect.yaml +5/−0
- test/typecheck/cases/happy-interval-basics.rzk +68/−0
- test/typecheck/cases/happy-interval-subtyping.expect.yaml +3/−0
- test/typecheck/cases/happy-interval-subtyping.rzk +16/−0
- test/typecheck/cases/happy-modal-basics.rzk +281/−24
- test/typecheck/cases/happy-modal-flat-recOR-under-op.expect.yaml +1/−0
- test/typecheck/cases/happy-modal-flat-recOR-under-op.rzk +9/−0
- test/typecheck/cases/happy-modal-flat-under-op.expect.yaml +1/−0
- test/typecheck/cases/happy-modal-flat-under-op.rzk +7/−0
- test/typecheck/cases/happy-modal-inv.rzk +47/−4
- test/typecheck/cases/happy-modal-tope-unwrap.expect.yaml +6/−0
- test/typecheck/cases/happy-modal-tope-unwrap.rzk +33/−0
- test/typecheck/cases/happy-modal-topes.expect.yaml +1/−0
- test/typecheck/cases/happy-modal-topes.rzk +195/−0
- test/typecheck/cases/happy-op-hom-to-hom.expect.yaml +1/−0
- test/typecheck/cases/happy-op-hom-to-hom.rzk +13/−0
- test/typecheck/cases/happy-recbot-term-wellformed.expect.yaml +3/−0
- test/typecheck/cases/happy-recbot-term-wellformed.rzk +12/−0
- test/typecheck/cases/happy-recor-guard-exceeds-context.expect.yaml +3/−0
- test/typecheck/cases/happy-recor-guard-exceeds-context.rzk +12/−0
- test/typecheck/cases/happy-recor-split-simplex-overhang.expect.yaml +3/−0
- test/typecheck/cases/happy-recor-split-simplex-overhang.rzk +22/−0
- test/typecheck/cases/happy-restrict-face-not-contained.expect.yaml +3/−0
- test/typecheck/cases/happy-restrict-face-not-contained.rzk +16/−0
- test/typecheck/cases/happy-tope-rec-and-restrict.expect.yaml +1/−1
- test/typecheck/cases/happy-tope-rec-and-restrict.rzk +3/−2
- test/typecheck/cases/ill-hole-infer.expect.yaml +6/−0
- test/typecheck/cases/ill-hole-infer.rzk +6/−0
- test/typecheck/cases/ill-hole-pattern-binder-names.expect.yaml +8/−0
- test/typecheck/cases/ill-hole-pattern-binder-names.rzk +9/−0
- test/typecheck/cases/ill-hole-recor-branch.expect.yaml +7/−0
- test/typecheck/cases/ill-hole-recor-branch.rzk +10/−0
- test/typecheck/cases/ill-hole-unsolved.expect.yaml +6/−0
- test/typecheck/cases/ill-hole-unsolved.rzk +6/−0
- test/typecheck/cases/ill-interval-no-totality.expect.yaml +4/−0
- test/typecheck/cases/ill-interval-no-totality.rzk +10/−0
- test/typecheck/cases/ill-interval-subtyping.expect.yaml +4/−0
- test/typecheck/cases/ill-interval-subtyping.rzk +15/−0
- test/typecheck/cases/ill-modal-b-no-dist.expect.yaml +1/−1
- test/typecheck/cases/ill-modal-b-no-dist.rzk +3/−3
- test/typecheck/cases/ill-modal-flat-no-commute.expect.yaml +2/−0
- test/typecheck/cases/ill-modal-flat-no-commute.rzk +12/−0
- test/typecheck/cases/ill-modal-op-at-plain.expect.yaml +2/−0
- test/typecheck/cases/ill-modal-op-at-plain.rzk +7/−0
- test/typecheck/cases/ill-modal-op-unaccessible.expect.yaml +0/−4
- test/typecheck/cases/ill-modal-op-unaccessible.rzk +0/−5
- test/typecheck/cases/ill-modal-op-under-flat.expect.yaml +2/−0
- test/typecheck/cases/ill-modal-op-under-flat.rzk +7/−0
- test/typecheck/cases/ill-modal-plain-under-flat.expect.yaml +2/−0
- test/typecheck/cases/ill-modal-plain-under-flat.rzk +7/−0
- test/typecheck/cases/ill-modal-plain-under-op.expect.yaml +2/−0
- test/typecheck/cases/ill-modal-plain-under-op.rzk +7/−0
- test/typecheck/cases/ill-modal-recBOT-under-op-no-contradiction.expect.yaml +2/−0
- test/typecheck/cases/ill-modal-recBOT-under-op-no-contradiction.rzk +7/−0
- test/typecheck/cases/ill-modal-sharp-at-plain.expect.yaml +2/−0
- test/typecheck/cases/ill-modal-sharp-at-plain.rzk +7/−0
- test/typecheck/cases/ill-modal-sharp-bot-not-bot.expect.yaml +2/−0
- test/typecheck/cases/ill-modal-sharp-bot-not-bot.rzk +7/−0
- test/typecheck/cases/ill-modal-sharp-recOR-plain-var.expect.yaml +2/−0
- test/typecheck/cases/ill-modal-sharp-recOR-plain-var.rzk +9/−0
- test/typecheck/cases/ill-modal-sharp-under-flat.expect.yaml +2/−0
- test/typecheck/cases/ill-modal-sharp-under-flat.rzk +7/−0
- test/typecheck/cases/ill-modal-sharp-under-op.expect.yaml +2/−0
- test/typecheck/cases/ill-modal-sharp-under-op.rzk +7/−0
- test/typecheck/cases/ill-modal-tope-cross-modality.expect.yaml +2/−0
- test/typecheck/cases/ill-modal-tope-cross-modality.rzk +12/−0
- test/typecheck/cases/ill-modal-unaccessible.expect.yaml +0/−4
- test/typecheck/cases/ill-modal-unaccessible.rzk +0/−5
- test/typecheck/cases/ill-recbot-term-not-function.expect.yaml +4/−0
- test/typecheck/cases/ill-recbot-term-not-function.rzk +8/−0
- test/typecheck/cases/ill-recbot-term-undefined.expect.yaml +4/−0
- test/typecheck/cases/ill-recbot-term-undefined.rzk +6/−0
- test/typecheck/cases/ill-recor-as-tope.expect.yaml +6/−0
- test/typecheck/cases/ill-recor-as-tope.rzk +8/−0
- test/typecheck/cases/ill-recor-coverage-required.expect.yaml +6/−0
- test/typecheck/cases/ill-recor-coverage-required.rzk +12/−0
- test/typecheck/cases/ill-recor-guard-disjoint.expect.yaml +4/−0
- test/typecheck/cases/ill-recor-guard-disjoint.rzk +9/−0
- test/typecheck/cases/ill-restrict-face-disjoint.expect.yaml +4/−0
- test/typecheck/cases/ill-restrict-face-disjoint.rzk +8/−0
- test/typecheck/cases/ill-tope-nested-rec-or-inner-singleton-d4.expect.yaml +1/−1
- test/typecheck/cases/ill-tope-nested-rec-or-inner-singleton-d4.rzk +2/−2
- test/typecheck/cases/ill-tope-nested-rec-or-inner-singleton-d5.expect.yaml +1/−1
- test/typecheck/cases/ill-tope-nested-rec-or-inner-singleton-d5.rzk +2/−2
- test/typecheck/cases/ill-tope-nested-rec-or-inner-singleton-d6.expect.yaml +1/−1
- test/typecheck/cases/ill-tope-nested-rec-or-inner-singleton-d6.rzk +2/−2
- test/typecheck/cases/ill-tope-nested-rec-or-inner-singleton.expect.yaml +2/−2
- test/typecheck/cases/ill-tope-nested-rec-or-inner-singleton.rzk +1/−1
- test/typecheck/cases/ill-tope-not-satisfied-rec-or-boundary-equiv.expect.yaml +2/−2
- test/typecheck/cases/ill-tope-not-satisfied-rec-or-boundary-equiv.rzk +5/−3
- test/typecheck/cases/ill-tope-not-satisfied-rec-or-open-singleton.expect.yaml +2/−2
- test/typecheck/cases/ill-tope-not-satisfied-rec-or-open-singleton.rzk +2/−2
- test/typecheck/cases/ill-tope-pattern-binder-bare.expect.yaml +7/−0
- test/typecheck/cases/ill-tope-pattern-binder-bare.rzk +11/−0
- test/typecheck/cases/ill-tope-recOR-non-discrete.expect.yaml +2/−0
- test/typecheck/cases/ill-tope-recOR-non-discrete.rzk +13/−0
- test/typecheck/cases/ill-tope-subtle-rec-or-5d-boundary.expect.yaml +2/−2
- test/typecheck/cases/ill-tope-subtle-rec-or-5d-boundary.rzk +2/−2
- test/typecheck/cases/uses-whnf-discarded.expect.yaml +3/−0
- test/typecheck/cases/uses-whnf-discarded.rzk +18/−0
- test/typecheck/cases/uses-whnf-masked-transitive.expect.yaml +7/−0
- test/typecheck/cases/uses-whnf-masked-transitive.rzk +22/−0
ChangeLog.md view
@@ -6,6 +6,54 @@ and this project adheres to the [Haskell Package Versioning Policy](https://pvp.haskell.org/). +## v0.9.0 — 2026-06-24++Added:++- **Typed holes and a structured goal/context query.** Write `?` (or a named `?goal`) for an unfilled subterm. By default `rzk typecheck` reports any hole as an error, so finished work and CI never admit holes. With `rzk typecheck --allow-holes` it instead prints, for each hole, its expected type (the goal) and its local context. The local context lists the term variables, cube variables, and tope assumptions in scope; the global environment is excluded. The same data is available to library consumers (the playground/game and the LSP) through `typecheckModulesWithHoles`, which returns structured `HoleInfo` values. Holes are checked only where their type is known, that is, in checking position. A hole in inference position is reported rather than guessed. When a hole is the argument of a shape-restricted function, its goal is shown as the shape `(s : I | ψ s ∧ φ s)` (the membership tope), and extension-type goals show their boundary `A [φ ↦ a]` (see [#237](https://github.com/rzk-lang/rzk/pull/237), [#240](https://github.com/rzk-lang/rzk/pull/240)).++- **Hint inventory for a hole.** Alongside the goal and context, the query records the moves that fit. It offers three kinds of move. The first is type-directed *elimination candidates* over the hypotheses (a function applied to holes, a projection of a Σ, or path induction by `idJ`, see [#244](https://github.com/rzk-lang/rzk/pull/244)). The second is *introduction forms* that build the goal from its head (a λ, a pair, `refl`, or a tope constructor). The third, in a shape setting, is the context-driven `recBOT` (ex falso) and `recOR` case-splits (see [#245](https://github.com/rzk-lang/rzk/pull/245)). A caller may additionally allow-list named lemmas in scope, so they surface as candidates applied to holes (see [#256](https://github.com/rzk-lang/rzk/pull/256)). Pattern binders are restored throughout goals, errors, and candidates, so a goal reads `\ (t , s) → ?` rather than in terms of projections (see [#242](https://github.com/rzk-lang/rzk/pull/242), [#246](https://github.com/rzk-lang/rzk/pull/246)).++- **Structured diagnostics.** Type errors and holes are now available as structured data, not only as a formatted string. A diagnostic in `Rzk.Diagnostic` carries a severity, a stable code, a source location, and a message. `rzk typecheck --json` emits all diagnostics (both type errors and holes) as JSON on stdout, for editor-agnostic tooling and CI (see [#238](https://github.com/rzk-lang/rzk/pull/238), [#243](https://github.com/rzk-lang/rzk/pull/243)). The language server consumes the same structured diagnostics. It shows each hole's goal and context as a warning rather than a hard error, in the spirit of Agda's yellow "unsolved" highlight, and it now reports all diagnostics for a file together. Source spans remain line-level.++- **Goal-cell diagrams.** When a hole's goal is a shape (an arrow, triangle, or square), the query exposes an SVG of the cell the hole must inhabit, drawn from an abstract inhabitant of the goal. A new `render-hide-term` option draws the shape with the proof term hidden, keeping only the given boundary labels (see [#253](https://github.com/rzk-lang/rzk/pull/253)).++- Experimental **cubical interval** `#!rzk II` (`#!rzk 𝕀`), a lattice cube added on top of the modal type system. This is the intended sound home for an amazing right adjoint `#!rzk √`, as flagged in the v0.8.0 release notes (see [#228](https://github.com/rzk-lang/rzk/pull/228)).++Changed:++- Experimental **modal syntax** is less noisy. A modal type is now written `#!rzk m A` instead of `#!rzk <| m | A |>`, and a modal binding is `#!rzk (x :m A)` (see [#227](https://github.com/rzk-lang/rzk/pull/227)). Modal bindings on Π-, Σ-, and λ-types are now primitive rather than sugar for `#!rzk let mod`, and modal extraction is restricted to the right-adjoint modalities (`#!rzk ♯`, `#!rzk ᵒᵖ`, `#!rzk _id`) (see [#248](https://github.com/rzk-lang/rzk/pull/248)).++- Experimental: modalities are tracked through the tope layer, so the tope solver knows which topes are accessible under which modality (see [#230](https://github.com/rzk-lang/rzk/pull/230)).++- The `#!rzk uses`/unused-variable check now keys off the definition as written rather than its weak head normal form. Reduction can drop or expose a variable occurrence, so a genuine use could be reported as unused, or a transitive dependency on an assumption hidden. Both are now classified from the written term (see [#255](https://github.com/rzk-lang/rzk/pull/255)).++Other changes:++- In lenient (`--allow-holes`) mode, we tolerate diagnostics that only a finished term must satisfy, so an in-progress sketch still typechecks. These are an unused `#!rzk uses`-variable (see [#249](https://github.com/rzk-lang/rzk/pull/249)), a hole-introduction binder that would shadow a name in scope (see [#250](https://github.com/rzk-lang/rzk/pull/250)), and a term whose type fails only around a hole (see [#251](https://github.com/rzk-lang/rzk/pull/251)). We also show the boundary in a `#!rzk recOR` branch goal (see [#252](https://github.com/rzk-lang/rzk/pull/252)) and accept holes in more positions (see [#239](https://github.com/rzk-lang/rzk/pull/239)).++- Build `rzk` with `build-type: Simple` instead of `Custom`. Thus the package now builds under the **GHC WebAssembly backend** (a `Custom` `Setup.hs` cannot run there) and no longer requires BNFC, `alex`, or `happy` to install (e.g. from Hackage). The parser and lexer are still generated from `grammar/Syntax.cf`, but out of band: run `make -C rzk regen-parser` after editing the grammar. A new `Parser up-to-date` CI workflow regenerates from the grammar and fails on drift, and the WASM/GHCJS CI lanes no longer patch the package before building (see [#236](https://github.com/rzk-lang/rzk/pull/236)).++Fixes:++- A `#!rzk recOR` in the cube or tope layer is now a type error instead of a panic (see [#254](https://github.com/rzk-lang/rzk/pull/254)).+- Check each `#!rzk recOR` branch against the expected type (see [#247](https://github.com/rzk-lang/rzk/pull/247)).+- Warn about overhanging `#!rzk recOR` faces and reject disjoint (vacuous) ones, replacing two checks that were silently vacuous (see [#233](https://github.com/rzk-lang/rzk/pull/233)).+- Check a term even under an absurd (`#!rzk recBOT`) context, so an ill-formed body is no longer admitted under a false hypothesis (see [#234](https://github.com/rzk-lang/rzk/pull/234)).+- Experimental modal layer: several corrections (see [#258](https://github.com/rzk-lang/rzk/pull/258)). The coercion relation is completed with `#!rzk ♭ ⇒ ᵒᵖ` and `#!rzk ᵒᵖ ⇒ ♯`, so a flat variable is now accessible under `#!rzk ᵒᵖ`. The normal form of `#!rzk let mod` extracts only for the right-adjoint modalities, matching the typechecker. And `#!rzk unflipᵒᵖ` now expects an interval cube under `#!rzk ᵒᵖ` (i.e. `#!rzk ᵒᵖ 2` or `#!rzk ᵒᵖ 𝕀`) rather than a bare cube, mirroring `#!rzk flipᵒᵖ`.++Documentation:++- Remove a malicious `polyfill.io` dependency from the docs (see [#231](https://github.com/rzk-lang/rzk/pull/231)).++CI / infrastructure:++- Add a CI job that builds the `rzk` library with the GHC WebAssembly backend (see [#235](https://github.com/rzk-lang/rzk/pull/235)).+- Import `RzkConfig` qualified (see [#232](https://github.com/rzk-lang/rzk/pull/232)).+- Deploy the docs and the playground reliably on tag pushes, so a release publishes both (past releases sometimes skipped them).+- Move the MkDocs typecheck and deploy into the GHC workflow and reuse the `rzk` binary built in the same run, so the docs are checked with the version they document rather than with an older release.+- Build all four OS only on pull requests, tags, and `main`. A `develop` push, already validated by its pull request, builds Linux only. A per-ref concurrency group cancels a superseded pull-request run, but never a push or tag run that may be deploying.+ ## v0.8.0 — 2026-06-04 Major changes:
− Setup.hs
@@ -1,41 +0,0 @@-{-# LANGUAGE CPP #-}--- Source: https://github.com/haskell/cabal/issues/6726#issuecomment-918663262---- | Custom Setup that runs bnfc to generate the language sub-libraries--- for the parsers included in Ogma.-module Main (main) where--import Distribution.Simple (defaultMainWithHooks,- hookedPrograms, postConf,- preBuild, simpleUserHooks)-import Distribution.Simple.Program (Program (..), findProgramVersion,- simpleProgram)-import System.Process (system)---- | Run BNFC on the grammar before the actual build step.------ All options for bnfc are hard-coded here.-main :: IO ()-main = defaultMainWithHooks $ simpleUserHooks- { hookedPrograms = [ bnfcProgram ]- , postConf = \args flags packageDesc localBuildInfo -> do-#ifndef mingw32_HOST_OS- _ <- system "bnfc -d -p Language.Rzk --generic --functor --text-token -o src/ grammar/Syntax.cf"- _ <- system "alex --ghc src/Language/Rzk/Syntax/Lex.x"- _ <- system "happy --array --info --ghc --coerce src/Language/Rzk/Syntax/Par.y"-#endif- postConf simpleUserHooks args flags packageDesc localBuildInfo- , preBuild = \args flags -> do-#ifndef mingw32_HOST_OS- _ <- system "bnfc -d -p Language.Rzk --generic --functor --text-token -o src/ grammar/Syntax.cf"- _ <- system "alex --ghc src/Language/Rzk/Syntax/Lex.x"- _ <- system "happy --array --info --ghc --coerce src/Language/Rzk/Syntax/Par.y"-#endif- preBuild simpleUserHooks args flags- }---- | TODO: This should be in Cabal.Distribution.Simple.Program.Builtin.-bnfcProgram :: Program-bnfcProgram = (simpleProgram "bnfc")- { programFindVersion = findProgramVersion "--version" id- }
app/Main.hs view
@@ -22,10 +22,15 @@ import Options.Generic import System.Exit (exitFailure, exitSuccess) +import Data.Aeson (encode)+import qualified Data.ByteString.Lazy.Char8 as BL8 import Data.Functor (void, (<&>)) import qualified Data.Text.IO as T import Paths_rzk (version)+import Rzk.Diagnostic (Diagnostic (..), Severity (..),+ diagnoseHole, diagnoseTypeError,+ ppHoleInfo) import Rzk.Format (formatFile, formatFileWrite, isWellFormattedFile) import Rzk.Main@@ -41,8 +46,18 @@ <$> parseFields (Just "Check if the files are correctly formatted") (Just "check") (Just 'c') Nothing <*> parseFields (Just "Write formatted file to disk") (Just "write") (Just 'w') Nothing +data TypecheckOptions = TypecheckOptions+ { typecheckAllowHoles :: Bool+ , typecheckJson :: Bool+ } deriving (Generic, Show, ParseRecord, Read, ParseField)++instance ParseFields TypecheckOptions where+ parseFields _ _ _ _ = TypecheckOptions+ <$> parseFields (Just "Allow unsolved holes: report each hole's goal and local context instead of failing") (Just "allow-holes") (Just 'H') Nothing+ <*> parseFields (Just "Output diagnostics (type errors and holes) as JSON on stdout") (Just "json") (Just 'j') Nothing+ data Command- = Typecheck [FilePath]+ = Typecheck TypecheckOptions [FilePath] | Lsp | Format FormatOptions [FilePath] | Version@@ -54,17 +69,36 @@ withUtf8 $ #endif getRecord "rzk: an experimental proof assistant for synthetic ∞-categories" >>= \case- Typecheck paths -> do+ Typecheck (TypecheckOptions {typecheckAllowHoles = allowHolesFlag, typecheckJson = jsonFlag}) paths -> do modules <- parseRzkFilesOrStdin paths- case defaultTypeCheck (typecheckModulesWithLocation modules) of- Left err -> do- putStrLn "An error occurred when typechecking!"- putStrLn $ unlines- [ "Type Error:"- , ppTypeErrorInScopedContext' BottomUp err- ]- exitFailure- Right _decls -> putStrLn "Everything is ok!"+ let reportError err = do+ putStrLn "An error occurred when typechecking!"+ putStrLn $ unlines+ [ "Type Error:"+ , ppTypeErrorInScopedContext' BottomUp err+ ]+ if jsonFlag+ -- Machine-readable mode: emit every diagnostic (type errors as errors,+ -- holes as hints) as a JSON array on stdout; progress goes to stderr.+ -- Exit non-zero iff there is an error-severity diagnostic.+ then do+ let diagnostics = case typecheckModulesWithHoles modules of+ Left err -> [diagnoseTypeError BottomUp err]+ Right (_decls, errors, holes) ->+ map (diagnoseTypeError BottomUp) errors ++ map diagnoseHole holes+ BL8.putStrLn (encode diagnostics)+ when (any ((== SeverityError) . diagnosticSeverity) diagnostics) exitFailure+ else if allowHolesFlag+ then case typecheckModulesWithHoles modules of+ Left err -> reportError err >> exitFailure+ Right (_decls, errors, holes) -> do+ forM_ holes (putStr . ppHoleInfo)+ case errors of+ [] -> putStrLn ("Everything is ok! (" <> show (length holes) <> " hole(s))")+ _ -> do forM_ errors reportError; exitFailure+ else case defaultTypeCheck (typecheckModulesWithLocation modules) of+ Left err -> reportError err >> exitFailure+ Right _decls -> putStrLn "Everything is ok!" Lsp -> #ifdef LSP_ENABLED
grammar/Syntax.cf view
@@ -5,7 +5,7 @@ token VarIdentToken ((char - ["-?!.\\;,#\"][)(}{><| \t\n\r"]) (char - ["\\;,#\"][)(}{><| \t\n\r"])*) ; -token HoleIdentToken '?' ;+token HoleIdentToken ('?' (char - ["\\;,#\"][)(}{><| \t\n\r"])*) ; Module. Module ::= LanguageDecl [Command] ; @@ -70,7 +70,8 @@ ParamPatternType. Param ::= "(" [Pattern] ":" Term ")" ; ParamPatternShape. Param ::= "(" [Pattern] ":" Term "|" Term ")" ; ParamPatternShapeDeprecated. Param ::= "{" Pattern ":" Term "|" Term "}" ;-ParamPatternModalType. Param ::= "(" [Pattern] ":" Modality Term ")" ;+ParamPatternModalType. Param ::= "(" [Pattern] ModalColon Term ")" ;+ParamPatternModalShape. Param ::= "(" [Pattern] ModalColon Term "|" Term ")" ; separator nonempty Param "" ; -- Name introduction for let bindings@@ -85,11 +86,12 @@ ParamVarShapeDeprecated. ParamDecl ::= "{" "(" Pattern ":" Term ")" "|" Term "}" ; paramVarShapeDeprecated. ParamDecl ::= "{" Pattern ":" Term "|" Term "}" ; define paramVarShapeDeprecated pat cube tope = ParamVarShapeDeprecated pat cube tope ;-ParamTermModalType. ParamDecl ::= "(" Term ":" Modality Term ")" ;+ParamTermModalType. ParamDecl ::= "(" Term ModalColon Term ")" ;+ParamTermModalShape. ParamDecl ::= "(" Term ModalColon Term "|" Term ")" ; -- Parameter declaration for Sigma types SigmaParam. SigmaParam ::= Pattern ":" Term ;-SigmaParamModal. SigmaParam ::= Pattern ":" Modality Term ;+SigmaParamModal. SigmaParam ::= Pattern ModalColon Term ; separator nonempty SigmaParam "," ; Restriction. Restriction ::= Term "↦" Term ;@@ -108,6 +110,15 @@ Single. ModComp ::= Modality ; Comp. ModComp ::= Modality "/" Modality ; +-- Modal colon (combined : with modality, no space between : and modality)+ModalColonFlat. ModalColon ::= ":♭" ;+ModalColonSharp. ModalColon ::= ":♯" ;+ModalColonOp. ModalColon ::= ":ᵒᵖ" ;+ModalColonId. ModalColon ::= ":_id" ;+ASCII_ModalColonFlat. ModalColon ::= ":_b" ;+ASCII_ModalColonSharp. ModalColon ::= ":_#" ;+ASCII_ModalColonOp. ModalColon ::= ":_op" ;+ -- Universes Universe. Term7 ::= "U" ; UniverseCube. Term7 ::= "CUBE" ;@@ -118,6 +129,9 @@ Cube2. Term7 ::= "2" ; Cube2_0. Term7 ::= "0₂" ; Cube2_1. Term7 ::= "1₂" ;+CubeI. Term7 ::= "𝕀" ;+CubeI_0. Term7 ::= "0ᵢ" ;+CubeI_1. Term7 ::= "1ᵢ" ; CubeProduct. Term5 ::= Term5 "×" Term6 ; -- Topes TopeTop. Term7 ::= "⊤" ;@@ -145,7 +159,7 @@ -- Types TypeFun. Term1 ::= ParamDecl "→" Term1 ; TypeSigma. Term1 ::= "Σ" "(" Pattern ":" Term ")" "," Term1 ;-TypeSigmaModal. Term1 ::= "Σ" "(" Pattern ":" Modality Term ")" "," Term1 ;+TypeSigmaModal. Term1 ::= "Σ" "(" Pattern ModalColon Term ")" "," Term1 ; TypeSigmaTuple. Term1 ::= "Σ" "(" SigmaParam "," [SigmaParam] ")" "," Term1 ; TypeUnit. Term7 ::= "Unit" ; TypeId. Term1 ::= Term2 "=_{" Term "}" Term2 ;@@ -159,7 +173,7 @@ Pair. Term7 ::= "(" Term "," Term ")" ; Tuple. Term7 ::= "(" Term "," Term "," [Term] ")" ; ModApp. Term7 ::= "mod" Modality Term7 ;-ModType. Term7 ::= "<|" Modality "|" Term "|>" ;+ModType. Term7 ::= Modality Term7 ; ModExtract. Term6 ::= "$extract$" ModComp Term7 ; LetMod. Term1 ::= "let" "mod" ModComp Bind ":=" Term "in" Term ; First. Term6 ::= "π₁" Term7 ;@@ -186,6 +200,9 @@ ASCII_CubeUnitStar. Term7 ::= "*_1" ; ASCII_Cube2_0. Term7 ::= "0_2" ; ASCII_Cube2_1. Term7 ::= "1_2" ;+ASCII_CubeI. Term7 ::= "II" ;+ASCII_CubeI_0. Term7 ::= "0_I" ;+ASCII_CubeI_1. Term7 ::= "1_I" ; ASCII_TopeTop. Term7 ::= "TOP" ; ASCII_TopeBottom. Term7 ::= "BOT" ;@@ -196,7 +213,8 @@ ASCII_TypeFun. Term1 ::= ParamDecl "->" Term1 ; ASCII_TypeSigma. Term1 ::= "Sigma" "(" Pattern ":" Term ")" "," Term1 ;-ASCII_TypeSigmaModal. Term1 ::= "Sigma" "(" Pattern ":" Modality Term ")" "," Term1 ;+ascii_TypeSigmaModal. Term1 ::= "Sigma" "(" Pattern ModalColon Term ")" "," Term1 ;+define ascii_TypeSigmaModal p mc t r = TypeSigmaModal p mc t r ; ASCII_TypeSigmaTuple. Term1 ::= "Sigma" "(" SigmaParam "," [SigmaParam] ")" "," Term1 ; ASCII_Lambda. Term1 ::= "\\" [Param] "->" Term1 ;
rzk.cabal view
@@ -1,11 +1,11 @@-cabal-version: 1.24+cabal-version: 2.0 --- This file has been generated from package.yaml by hpack version 0.39.1.+-- This file has been generated from package.yaml by hpack version 0.39.6. -- -- see: https://github.com/sol/hpack name: rzk-version: 0.8.0+version: 0.9.0 synopsis: An experimental proof assistant for synthetic ∞-categories description: Please see the README on GitHub at <https://github.com/rzk-lang/rzk#readme> category: Dependent Types@@ -16,15 +16,27 @@ copyright: 2023-2025 Nikolai Kudasov license: BSD3 license-file: LICENSE-build-type: Custom+build-type: Simple extra-source-files: grammar/Syntax.cf test/typecheck/SCHEMA.md test/typecheck/cases/happy-check.rzk+ test/typecheck/cases/happy-flip-unflip.rzk+ test/typecheck/cases/happy-interval-basics.rzk+ test/typecheck/cases/happy-interval-subtyping.rzk test/typecheck/cases/happy-issue-9-relfunext2-id.rzk test/typecheck/cases/happy-modal-basics.rzk+ test/typecheck/cases/happy-modal-flat-recOR-under-op.rzk+ test/typecheck/cases/happy-modal-flat-under-op.rzk test/typecheck/cases/happy-modal-inv.rzk+ test/typecheck/cases/happy-modal-tope-unwrap.rzk+ test/typecheck/cases/happy-modal-topes.rzk+ test/typecheck/cases/happy-op-hom-to-hom.rzk+ test/typecheck/cases/happy-recbot-term-wellformed.rzk+ test/typecheck/cases/happy-recor-guard-exceeds-context.rzk+ test/typecheck/cases/happy-recor-split-simplex-overhang.rzk test/typecheck/cases/happy-refl-path.rzk+ test/typecheck/cases/happy-restrict-face-not-contained.rzk test/typecheck/cases/happy-shott-simplicial-subcomplexes.rzk test/typecheck/cases/happy-tope-high-dim-cubes.rzk test/typecheck/cases/happy-tope-nested-rec-or-d4.rzk@@ -36,21 +48,43 @@ test/typecheck/cases/ill-bare-lambda-compute.rzk test/typecheck/cases/ill-bare-refl-compute.rzk test/typecheck/cases/ill-duplicate.rzk+ test/typecheck/cases/ill-hole-infer.rzk+ test/typecheck/cases/ill-hole-pattern-binder-names.rzk+ test/typecheck/cases/ill-hole-recor-branch.rzk+ test/typecheck/cases/ill-hole-unsolved.rzk test/typecheck/cases/ill-implicit.rzk+ test/typecheck/cases/ill-interval-no-totality.rzk+ test/typecheck/cases/ill-interval-subtyping.rzk test/typecheck/cases/ill-invalid-arg-type-bot.rzk test/typecheck/cases/ill-issue-13-flip-flip-wrong.rzk test/typecheck/cases/ill-issue-206-families-of-extension.rzk test/typecheck/cases/ill-issue-33-restriction-coherence.rzk test/typecheck/cases/ill-modal-b-no-dist.rzk+ test/typecheck/cases/ill-modal-flat-no-commute.rzk test/typecheck/cases/ill-modal-not-modal.rzk- test/typecheck/cases/ill-modal-op-unaccessible.rzk- test/typecheck/cases/ill-modal-unaccessible.rzk+ test/typecheck/cases/ill-modal-op-at-plain.rzk+ test/typecheck/cases/ill-modal-op-under-flat.rzk+ test/typecheck/cases/ill-modal-plain-under-flat.rzk+ test/typecheck/cases/ill-modal-plain-under-op.rzk+ test/typecheck/cases/ill-modal-recBOT-under-op-no-contradiction.rzk+ test/typecheck/cases/ill-modal-sharp-at-plain.rzk+ test/typecheck/cases/ill-modal-sharp-bot-not-bot.rzk+ test/typecheck/cases/ill-modal-sharp-recOR-plain-var.rzk+ test/typecheck/cases/ill-modal-sharp-under-flat.rzk+ test/typecheck/cases/ill-modal-sharp-under-op.rzk+ test/typecheck/cases/ill-modal-tope-cross-modality.rzk test/typecheck/cases/ill-not-function.rzk test/typecheck/cases/ill-not-pair-first-unit.rzk test/typecheck/cases/ill-not-pair-second-unit.rzk test/typecheck/cases/ill-param-untyped-pattern.rzk test/typecheck/cases/ill-rec-or-overlap-incoherent.rzk+ test/typecheck/cases/ill-recbot-term-not-function.rzk+ test/typecheck/cases/ill-recbot-term-undefined.rzk+ test/typecheck/cases/ill-recor-as-tope.rzk+ test/typecheck/cases/ill-recor-coverage-required.rzk+ test/typecheck/cases/ill-recor-guard-disjoint.rzk test/typecheck/cases/ill-render-latex-define.rzk+ test/typecheck/cases/ill-restrict-face-disjoint.rzk test/typecheck/cases/ill-section-end-mismatch.rzk test/typecheck/cases/ill-section-not-closed.rzk test/typecheck/cases/ill-section-unexpected-end.rzk@@ -68,6 +102,8 @@ test/typecheck/cases/ill-tope-not-satisfied-tope-family-subtyping.rzk test/typecheck/cases/ill-tope-param-lambda.rzk test/typecheck/cases/ill-tope-param-typefun.rzk+ test/typecheck/cases/ill-tope-pattern-binder-bare.rzk+ test/typecheck/cases/ill-tope-recOR-non-discrete.rzk test/typecheck/cases/ill-tope-subtle-app-shape-5d.rzk test/typecheck/cases/ill-tope-subtle-rec-or-5d-boundary.rzk test/typecheck/cases/ill-tope-subtle-tope-family-4d.rzk@@ -84,11 +120,25 @@ test/typecheck/cases/multimodule-first-error/lib.rzk test/typecheck/cases/multimodule-two-ok/lib.rzk test/typecheck/cases/multimodule-two-ok/user.rzk+ test/typecheck/cases/uses-whnf-discarded.rzk+ test/typecheck/cases/uses-whnf-masked-transitive.rzk test/typecheck/cases/happy-check.expect.yaml+ test/typecheck/cases/happy-flip-unflip.expect.yaml+ test/typecheck/cases/happy-interval-basics.expect.yaml+ test/typecheck/cases/happy-interval-subtyping.expect.yaml test/typecheck/cases/happy-issue-9-relfunext2-id.expect.yaml test/typecheck/cases/happy-modal-basics.expect.yaml+ test/typecheck/cases/happy-modal-flat-recOR-under-op.expect.yaml+ test/typecheck/cases/happy-modal-flat-under-op.expect.yaml test/typecheck/cases/happy-modal-inv.expect.yaml+ test/typecheck/cases/happy-modal-tope-unwrap.expect.yaml+ test/typecheck/cases/happy-modal-topes.expect.yaml+ test/typecheck/cases/happy-op-hom-to-hom.expect.yaml+ test/typecheck/cases/happy-recbot-term-wellformed.expect.yaml+ test/typecheck/cases/happy-recor-guard-exceeds-context.expect.yaml+ test/typecheck/cases/happy-recor-split-simplex-overhang.expect.yaml test/typecheck/cases/happy-refl-path.expect.yaml+ test/typecheck/cases/happy-restrict-face-not-contained.expect.yaml test/typecheck/cases/happy-shott-simplicial-subcomplexes.expect.yaml test/typecheck/cases/happy-tope-high-dim-cubes.expect.yaml test/typecheck/cases/happy-tope-nested-rec-or-d4.expect.yaml@@ -100,21 +150,43 @@ test/typecheck/cases/ill-bare-lambda-compute.expect.yaml test/typecheck/cases/ill-bare-refl-compute.expect.yaml test/typecheck/cases/ill-duplicate.expect.yaml+ test/typecheck/cases/ill-hole-infer.expect.yaml+ test/typecheck/cases/ill-hole-pattern-binder-names.expect.yaml+ test/typecheck/cases/ill-hole-recor-branch.expect.yaml+ test/typecheck/cases/ill-hole-unsolved.expect.yaml test/typecheck/cases/ill-implicit.expect.yaml+ test/typecheck/cases/ill-interval-no-totality.expect.yaml+ test/typecheck/cases/ill-interval-subtyping.expect.yaml test/typecheck/cases/ill-invalid-arg-type-bot.expect.yaml test/typecheck/cases/ill-issue-13-flip-flip-wrong.expect.yaml test/typecheck/cases/ill-issue-206-families-of-extension.expect.yaml test/typecheck/cases/ill-issue-33-restriction-coherence.expect.yaml test/typecheck/cases/ill-modal-b-no-dist.expect.yaml+ test/typecheck/cases/ill-modal-flat-no-commute.expect.yaml test/typecheck/cases/ill-modal-not-modal.expect.yaml- test/typecheck/cases/ill-modal-op-unaccessible.expect.yaml- test/typecheck/cases/ill-modal-unaccessible.expect.yaml+ test/typecheck/cases/ill-modal-op-at-plain.expect.yaml+ test/typecheck/cases/ill-modal-op-under-flat.expect.yaml+ test/typecheck/cases/ill-modal-plain-under-flat.expect.yaml+ test/typecheck/cases/ill-modal-plain-under-op.expect.yaml+ test/typecheck/cases/ill-modal-recBOT-under-op-no-contradiction.expect.yaml+ test/typecheck/cases/ill-modal-sharp-at-plain.expect.yaml+ test/typecheck/cases/ill-modal-sharp-bot-not-bot.expect.yaml+ test/typecheck/cases/ill-modal-sharp-recOR-plain-var.expect.yaml+ test/typecheck/cases/ill-modal-sharp-under-flat.expect.yaml+ test/typecheck/cases/ill-modal-sharp-under-op.expect.yaml+ test/typecheck/cases/ill-modal-tope-cross-modality.expect.yaml test/typecheck/cases/ill-not-function.expect.yaml test/typecheck/cases/ill-not-pair-first-unit.expect.yaml test/typecheck/cases/ill-not-pair-second-unit.expect.yaml test/typecheck/cases/ill-param-untyped-pattern.expect.yaml test/typecheck/cases/ill-rec-or-overlap-incoherent.expect.yaml+ test/typecheck/cases/ill-recbot-term-not-function.expect.yaml+ test/typecheck/cases/ill-recbot-term-undefined.expect.yaml+ test/typecheck/cases/ill-recor-as-tope.expect.yaml+ test/typecheck/cases/ill-recor-coverage-required.expect.yaml+ test/typecheck/cases/ill-recor-guard-disjoint.expect.yaml test/typecheck/cases/ill-render-latex-define.expect.yaml+ test/typecheck/cases/ill-restrict-face-disjoint.expect.yaml test/typecheck/cases/ill-section-end-mismatch.expect.yaml test/typecheck/cases/ill-section-not-closed.expect.yaml test/typecheck/cases/ill-section-unexpected-end.expect.yaml@@ -132,6 +204,8 @@ test/typecheck/cases/ill-tope-not-satisfied-tope-family-subtyping.expect.yaml test/typecheck/cases/ill-tope-param-lambda.expect.yaml test/typecheck/cases/ill-tope-param-typefun.expect.yaml+ test/typecheck/cases/ill-tope-pattern-binder-bare.expect.yaml+ test/typecheck/cases/ill-tope-recOR-non-discrete.expect.yaml test/typecheck/cases/ill-tope-subtle-app-shape-5d.expect.yaml test/typecheck/cases/ill-tope-subtle-rec-or-5d-boundary.expect.yaml test/typecheck/cases/ill-tope-subtle-tope-family-4d.expect.yaml@@ -144,6 +218,8 @@ test/typecheck/cases/ill-unify.expect.yaml test/typecheck/cases/ill-unset-option-unknown.expect.yaml test/typecheck/cases/ill-unused-assumption.expect.yaml+ test/typecheck/cases/uses-whnf-discarded.expect.yaml+ test/typecheck/cases/uses-whnf-masked-transitive.expect.yaml test/typecheck/cases/literate-fence/expect.yaml test/typecheck/cases/multimodule-first-error/expect.yaml test/typecheck/cases/multimodule-two-ok/expect.yaml@@ -156,12 +232,6 @@ type: git location: https://github.com/rzk-lang/rzk -custom-setup- setup-depends:- Cabal >=2.4.0.1 && <4.0- , base >=4.11.0.0 && <5.0- , process >=1.6.3.0- flag lsp description: Build with LSP support (only available with GHC, not GHCJS). manual: True@@ -179,24 +249,23 @@ Language.Rzk.Syntax.Par Language.Rzk.Syntax.Print Rzk+ Rzk.Diagnostic Rzk.Format Rzk.Main Rzk.Project.Config Rzk.TypeCheck other-modules: Paths_rzk+ autogen-modules:+ Paths_rzk hs-source-dirs: src default-extensions: DeriveDataTypeable ghc-options: -Wall -Wcompat -Widentities -Werror=missing-fields -Wincomplete-record-updates -Wincomplete-uni-patterns -Wmissing-home-modules -Wpartial-fields -Wredundant-constraints -optP-Wno-nonportable-include-path- build-tools:- alex >=3.2.4- , happy >=1.19.9- build-tool-depends:- BNFC:bnfc >=2.9.6.2 build-depends: Glob >=0.9.3+ , aeson >=1.4 , array >=0.5.3.0 , base >=4.7 && <5 , bifunctors >=5.5.3@@ -218,31 +287,30 @@ Language.Rzk.VSCode.Lsp Language.Rzk.VSCode.Tokenize build-depends:- aeson >=1.4.2.0+ aeson >=2.0.0.0 , co-log-core >=0.3.2.0 , data-default-class >=0.1.2.0- , filepath >=1.4.2.1- , lens >=4.17- , lsp >=2.2.0.0- , lsp-types >=2.0.2.0- , stm >=2.5.0.0+ , filepath >=1.4.100.0+ , lens >=5.0.1+ , lsp >=2.4.0.0+ , lsp-types >=2.1.1.0+ , mtl >=2.3.1+ , stm >=2.5.1.0 executable rzk main-is: Main.hs other-modules: Paths_rzk+ autogen-modules:+ Paths_rzk hs-source-dirs: app default-extensions: DeriveDataTypeable ghc-options: -Wall -Wcompat -Widentities -Werror=missing-fields -Wincomplete-record-updates -Wincomplete-uni-patterns -Wmissing-home-modules -Wpartial-fields -Wredundant-constraints -optP-Wno-nonportable-include-path -threaded -rtsopts -with-rtsopts=-N- build-tools:- alex >=3.2.4- , happy >=1.19.9- build-tool-depends:- BNFC:bnfc >=2.9.6.2 build-depends: Glob >=0.9.3+ , aeson >=1.4 , array >=0.5.3.0 , base >=4.7 && <5 , bifunctors >=5.5.3@@ -258,8 +326,8 @@ cpp-options: -DLSP_ENABLED if !impl(ghcjs) build-depends:- optparse-generic >=1.4.0- , with-utf8 >=1.0.2.4+ optparse-generic >=1.4.7+ , with-utf8 >=1.0.3.0 test-suite doctests type: exitcode-stdio-1.0@@ -269,21 +337,18 @@ default-extensions: DeriveDataTypeable ghc-options: -Wall -Wcompat -Widentities -Werror=missing-fields -Wincomplete-record-updates -Wincomplete-uni-patterns -Wmissing-home-modules -Wpartial-fields -Wredundant-constraints -optP-Wno-nonportable-include-path- build-tools:- alex >=3.2.4- , happy >=1.19.9- build-tool-depends:- BNFC:bnfc >=2.9.6.2 build-depends: Glob >=0.9.3 , QuickCheck >=2.14+ , aeson >=1.4 , array >=0.5.3.0 , base >=4.11.0.0 && <5.0 , bifunctors >=5.5.3 , bytestring >=0.10.8.2 , directory >=1.2.7.0- , doctest >=0.21.0+ , doctest-parallel >=0.3 , mtl >=2.3.1+ , rzk , template-haskell >=2.14.0.0 , text >=1.2.3.1 , yaml >=0.11.0.0@@ -295,19 +360,20 @@ type: exitcode-stdio-1.0 main-is: Spec.hs other-modules:+ Rzk.DiagnosticSpec Rzk.FormatSpec+ Rzk.HolesSpec Rzk.TypeCheckSpec Paths_rzk+ autogen-modules:+ Paths_rzk hs-source-dirs: test default-extensions: DeriveDataTypeable ghc-options: -Wall -Wcompat -Widentities -Werror=missing-fields -Wincomplete-record-updates -Wincomplete-uni-patterns -Wmissing-home-modules -Wpartial-fields -Wredundant-constraints -optP-Wno-nonportable-include-path -threaded -rtsopts -with-rtsopts=-N- build-tools:- alex >=3.2.4- , happy >=1.19.9 build-tool-depends:- BNFC:bnfc >=2.9.6.2+ hspec-discover:hspec-discover build-depends: Glob >=0.9.3 , aeson
src/Language/Rzk/Free/Syntax.hs view
@@ -11,6 +11,7 @@ {-# LANGUAGE TypeSynonymInstances #-} module Language.Rzk.Free.Syntax where +import Data.Bifunctor (bimap) import Data.Bifunctor.TH import Data.Char (chr, ord) import Data.Coerce@@ -63,6 +64,41 @@ fromVarIdent :: VarIdent -> Rzk.VarIdent fromVarIdent (VarIdent (Rzk.VarIdent (RzkPosition _file pos) ident)) = Rzk.VarIdent pos ident +-- | The display name of a hole from its surface token text. The token includes+-- the leading @?@; an anonymous hole (bare @?@) has no name.+holeName :: T.Text -> Maybe VarIdent+holeName tok =+ case T.drop 1 tok of+ name | T.null name -> Nothing+ | otherwise -> Just (fromString (T.unpack name))++-- | The surface token text (including the leading @?@) for a hole name.+holeIdentToken :: Maybe VarIdent -> T.Text+holeIdentToken Nothing = "?"+holeIdentToken (Just x) = "?" <> T.pack (show x)++-- | The name(s) a binder introduces. A binder may name a single (possibly+-- anonymous) variable, or destructure a pair\/tuple via a pattern. The pattern+-- structure is kept around purely so that goals, holes and error messages can+-- show the user's original names (e.g. @t@ and @s@ for @\\ (t , s) -> …@)+-- instead of projections of a fresh variable (e.g. @π₁ x₄@ and @π₂ x₄@).+--+-- Operationally a pair pattern still binds a /single/ variable; the components+-- are projections of it (see 'toScopePattern'). 'Binder' only records the names+-- so they can be restored when rendering.+data Binder+ = BinderVar (Maybe VarIdent) -- ^ a single variable (@Nothing@ for @_@)+ | BinderPair Binder Binder -- ^ a pair pattern @(l , r)@+ | BinderUnit -- ^ the unit pattern @unit@+ deriving (Eq)++-- | The single name of a binder, if it binds exactly one named variable.+-- A pair\/unit pattern has no single name, so this is 'Nothing' for them.+-- Used wherever the old @Maybe VarIdent@ binder name is still sufficient.+binderName :: Binder -> Maybe VarIdent+binderName (BinderVar mname) = mname+binderName _ = Nothing+ data TModality = Sharp | Flat | Op | Id deriving (Eq, Show) toModality :: Rzk.Modality -> TModality@@ -97,6 +133,9 @@ | Cube2F | Cube2_0F | Cube2_1F+ | CubeIF + | CubeI_0F + | CubeI_1F | CubeProductF term term | CubeFlipF term | CubeUnflipF term@@ -110,12 +149,12 @@ | TopeUninvF term | RecBottomF | RecOrF [(term, term)]- | TypeFunF (Maybe VarIdent) term (Maybe scope) scope- | TypeSigmaF (Maybe VarIdent) term scope+ | TypeFunF Binder TModality term (Maybe scope) scope+ | TypeSigmaF Binder TModality term scope | TypeIdF term (Maybe term) term | AppF term term- | LetF (Maybe VarIdent) (Maybe term) term scope- | LambdaF (Maybe VarIdent) (Maybe (term, Maybe scope)) scope+ | LetF Binder (Maybe term) term scope+ | LambdaF Binder (Maybe (TModality, term, Maybe scope)) scope | PairF term term | FirstF term | SecondF term@@ -128,7 +167,8 @@ | TypeModalF TModality term | ModAppF TModality term | ModExtractF TModality TModality term- | LetModF (Maybe VarIdent) TModality TModality (Maybe term) term scope+ | LetModF Binder TModality TModality (Maybe term) term scope+ | HoleF (Maybe VarIdent) deriving (Eq, Functor, Foldable, Traversable) deriveBifunctor ''TermF deriveBifoldable ''TermF@@ -263,7 +303,6 @@ Rzk.ASCII_TypeFun loc param ret -> go (Rzk.TypeFun loc param ret) Rzk.ASCII_TypeSigma loc pat ty ret -> go (Rzk.TypeSigma loc pat ty ret)- Rzk.ASCII_TypeSigmaModal _loc pat md ty body -> go (Rzk.TypeSigmaModal _loc pat md ty body) Rzk.ASCII_TypeSigmaTuple loc p ps tN -> go (Rzk.TypeSigmaTuple loc p ps tN) Rzk.ASCII_Lambda loc pat ret -> go (Rzk.Lambda loc pat ret) Rzk.ASCII_TypeExtensionDeprecated loc shape type_ -> go (Rzk.TypeExtensionDeprecated loc shape type_)@@ -281,6 +320,12 @@ Rzk.Cube2 _loc -> Cube2 Rzk.Cube2_0 _loc -> Cube2_0 Rzk.Cube2_1 _loc -> Cube2_1+ Rzk.CubeI _loc -> CubeI+ Rzk.CubeI_0 _loc -> CubeI_0+ Rzk.CubeI_1 _loc -> CubeI_1+ Rzk.ASCII_CubeI _loc -> CubeI+ Rzk.ASCII_CubeI_0 _loc -> CubeI_0+ Rzk.ASCII_CubeI_1 _loc -> CubeI_1 Rzk.CubeProduct _loc l r -> CubeProduct (go l) (go r) Rzk.TopeTop _loc -> TopeTop Rzk.TopeBottom _loc -> TopeBottom@@ -311,41 +356,41 @@ Rzk.ReflTermType _loc x tA -> Refl (Just (go x, Just (go tA))) Rzk.IdJ _loc a b c d e f -> IdJ (go a) (go b) (go c) (go d) (go e) (go f) Rzk.TypeAsc _loc x t -> TypeAsc (go x) (go t)- Rzk.TypeFun _loc (Rzk.ParamTermModalType loc' patTerm md ty) ret ->- let pat = unsafeTermToPattern patTerm- letRet = Rzk.LetMod loc' (Rzk.Single loc' md)- (Rzk.BindPattern loc' pat) (patternToTerm pat) ret- in go (Rzk.TypeFun _loc (Rzk.ParamTermType loc' patTerm (Rzk.ModType loc' md ty)) letRet)+ Rzk.TypeFun _loc (Rzk.ParamTermModalType _loc' patTerm mc ty) ret ->+ let pat = unsafeTermToPattern patTerm+ md = modalColonToTModality mc+ in TypeFun (toBinder pat) md (go ty) Nothing (toScopePattern pat bvars ret)+ Rzk.TypeFun _loc (Rzk.ParamTermModalShape _loc' patTerm mc cube tope) ret ->+ let pat = unsafeTermToPattern patTerm+ md = modalColonToTModality mc+ in TypeFun (toBinder pat) md (go cube) (Just (toScopePattern pat bvars tope)) (toScopePattern pat bvars ret) Rzk.TypeFun _loc (Rzk.ParamTermType _ patTerm arg) ret -> let pat = unsafeTermToPattern patTerm- in TypeFun (patternVar pat) (go arg) Nothing (toScopePattern pat bvars ret)+ in TypeFun (toBinder pat) Id (go arg) Nothing (toScopePattern pat bvars ret) t@(Rzk.TypeFun loc (Rzk.ParamTermShape loc' patTerm cube tope) ret) -> let lint' = case tope of Rzk.App _loc fun arg | void arg == void patTerm -> lint t (Rzk.TypeFun loc (Rzk.ParamTermType loc' patTerm fun) ret) _ -> id pat = unsafeTermToPattern patTerm- in lint' $ TypeFun (patternVar pat) (go cube) (Just (toScopePattern pat bvars tope)) (toScopePattern pat bvars ret)+ in lint' $ TypeFun (toBinder pat) Id (go cube) (Just (toScopePattern pat bvars tope)) (toScopePattern pat bvars ret) Rzk.TypeFun _loc (Rzk.ParamType _ arg) ret ->- TypeFun Nothing (go arg) Nothing (toTerm (fmap S <$> bvars) ret)+ TypeFun (BinderVar Nothing) Id (go arg) Nothing (toTerm (fmap S <$> bvars) ret) Rzk.TypeSigma _loc pat tA tB ->- TypeSigma (patternVar pat) (go tA) (toScopePattern pat bvars tB)-- Rzk.TypeSigmaModal _loc pat md ty body ->- let letBody = Rzk.LetMod _loc (Rzk.Single _loc md)- (Rzk.BindPattern _loc pat) (patternToTerm pat) body- in go (Rzk.TypeSigma _loc pat (Rzk.ModType _loc md ty) letBody)+ TypeSigma (toBinder pat) Id (go tA) (toScopePattern pat bvars tB) + Rzk.TypeSigmaModal _loc pat mc ty body ->+ let md = modalColonToTModality mc+ in TypeSigma (toBinder pat) md (go ty) (toScopePattern pat bvars body) - Rzk.TypeSigmaTuple _loc (Rzk.SigmaParamModal loc' pat md ty) rest body ->- let tailSigma = case rest of+ Rzk.TypeSigmaTuple _loc (Rzk.SigmaParamModal _loc' pat mc ty) rest body ->+ let md = modalColonToTModality mc+ tailSigma = case rest of [] -> body [sp] -> sigmaParamToTypeSigma _loc sp body (sp:sps) -> Rzk.TypeSigmaTuple _loc sp sps body- letTail = Rzk.LetMod loc' (Rzk.Single loc' md)- (Rzk.BindPattern loc' pat) (patternToTerm pat) tailSigma- in go (Rzk.TypeSigma _loc pat (Rzk.ModType loc' md ty) letTail)+ in TypeSigma (toBinder pat) md (go ty) (toScopePattern pat bvars tailSigma) Rzk.TypeSigmaTuple _loc (Rzk.SigmaParam _ patA tA) (mp@(Rzk.SigmaParamModal{}) : rest) body -> go (Rzk.TypeSigma _loc patA tA (case rest of [] -> sigmaParamToTypeSigma _loc mp body@@ -356,23 +401,25 @@ patX = Rzk.PatternPair _loc patA patB tX = Rzk.TypeSigma _loc patA tA tB Rzk.TypeSigmaTuple _loc (Rzk.SigmaParam _ pat tA) [] tB -> go (Rzk.TypeSigma _loc pat tA tB)- Rzk.Lambda _loc (Rzk.ParamPatternModalType _ [] _md _ty : params) body ->+ Rzk.Lambda _loc (Rzk.ParamPatternModalType _ [] _mc _ty : params) body -> go (Rzk.Lambda _loc params body)- Rzk.Lambda _loc (Rzk.ParamPatternModalType loc' (pat:pats) md ty : params) body ->- let inner = Rzk.Lambda _loc- (if null pats then params- else Rzk.ParamPatternModalType loc' pats md ty : params)- body- letBody = Rzk.LetMod loc' (Rzk.Single loc' md)- (Rzk.BindPattern loc' pat) (patternToTerm pat) inner- in go (Rzk.Lambda _loc [Rzk.ParamPatternType loc' [pat] (Rzk.ModType loc' md ty)] letBody)+ Rzk.Lambda _loc (Rzk.ParamPatternModalType loc' (pat:pats) mc ty : params) body ->+ let md = modalColonToTModality mc+ in Lambda (toBinder pat) (Just (md, go ty, Nothing))+ (toScopePattern pat bvars (Rzk.Lambda _loc (if null pats then params else Rzk.ParamPatternModalType loc' pats mc ty : params) body))+ Rzk.Lambda _loc (Rzk.ParamPatternModalShape _ [] _mc _cube _tope : params) body ->+ go (Rzk.Lambda _loc params body)+ Rzk.Lambda _loc (Rzk.ParamPatternModalShape loc' (pat:pats) mc cube tope : params) body ->+ let md = modalColonToTModality mc+ in Lambda (toBinder pat) (Just (md, go cube, Just (toScopePattern pat bvars tope)))+ (toScopePattern pat bvars (Rzk.Lambda _loc (if null pats then params else Rzk.ParamPatternModalShape loc' pats mc cube tope : params) body)) Rzk.Lambda _loc [] body -> go body Rzk.Lambda _loc (Rzk.ParamPattern _ pat : params) body ->- Lambda (patternVar pat) Nothing (toScopePattern pat bvars (Rzk.Lambda _loc params body))+ Lambda (toBinder pat) Nothing (toScopePattern pat bvars (Rzk.Lambda _loc params body)) Rzk.Lambda _loc (Rzk.ParamPatternType _ [] _ty : params) body -> go (Rzk.Lambda _loc params body) Rzk.Lambda _loc (Rzk.ParamPatternType _ (pat:pats) ty : params) body ->- Lambda (patternVar pat) (Just (go ty, Nothing))+ Lambda (toBinder pat) (Just (Id, go ty, Nothing)) (toScopePattern pat bvars (Rzk.Lambda _loc (Rzk.ParamPatternType _loc pats ty : params) body)) Rzk.Lambda _loc (Rzk.ParamPatternShape _ [] _cube _tope : params) body -> go (Rzk.Lambda _loc params body)@@ -382,31 +429,36 @@ | null pats && void arg == void (patternToTerm pat) -> lint t (Rzk.Lambda _loc (Rzk.ParamPatternType _loc' [pat] fun : params) body) _ -> id- in lint' $ Lambda (patternVar pat) (Just (go cube, Just (toScopePattern pat bvars tope)))+ in lint' $ Lambda (toBinder pat) (Just (Id, go cube, Just (toScopePattern pat bvars tope))) (toScopePattern pat bvars (Rzk.Lambda _loc (Rzk.ParamPatternShape _loc' pats cube tope : params) body)) Rzk.Let _loc (Rzk.BindPattern _ pat) val expr ->- Let (patternVar pat) Nothing (go val) (toScopePattern pat bvars expr)+ Let (toBinder pat) Nothing (go val) (toScopePattern pat bvars expr) Rzk.Let _loc (Rzk.BindPatternType _ pat ty) val expr -> - Let (patternVar pat) (Just (go ty)) (go val) (toScopePattern pat bvars expr)+ Let (toBinder pat) (Just (go ty)) (go val) (toScopePattern pat bvars expr) Rzk.TypeRestricted _loc ty rs -> TypeRestricted (go ty) $ flip map rs $ \case Rzk.Restriction _loc tope term -> (go tope, go term) Rzk.ASCII_Restriction _loc tope term -> (go tope, go term) - Rzk.Hole _loc _ident -> error "holes are not supported"+ Rzk.Hole _loc (Rzk.HoleIdent _ (Rzk.HoleIdentToken tok)) ->+ Hole (holeName tok) Rzk.ModApp _loc md body -> ModApp (toModality md) (go body) Rzk.ModType _loc md ty -> TypeModal (toModality md) (go ty) Rzk.ModExtract{} -> error "$extract$ is an internal term and cannot appear in source" Rzk.LetMod _loc comp (Rzk.BindPattern _ pat) val body -> let (ext, inn) = modCompToMods comp- in LetMod (patternVar pat) ext inn Nothing (go val) (toScopePattern pat bvars body)+ in LetMod (toBinder pat) ext inn Nothing (go val) (toScopePattern pat bvars body) Rzk.LetMod _loc comp (Rzk.BindPatternType _ pat ty) val body -> let (ext, inn) = modCompToMods comp- in LetMod (patternVar pat) ext inn (Just (go ty)) (go val) (toScopePattern pat bvars body)+ in LetMod (toBinder pat) ext inn (Just (go ty)) (go val) (toScopePattern pat bvars body) - patternVar (Rzk.PatternVar _loc (Rzk.VarIdent _ "_")) = Nothing- patternVar (Rzk.PatternVar _loc x) = Just (varIdent x)- patternVar _ = Nothing+ -- Translate a surface pattern into a 'Binder', keeping the pair\/tuple+ -- structure so the component names can be restored when rendering.+ toBinder (Rzk.PatternVar _loc (Rzk.VarIdent _ "_")) = BinderVar Nothing+ toBinder (Rzk.PatternVar _loc x) = BinderVar (Just (varIdent x))+ toBinder (Rzk.PatternUnit _loc) = BinderUnit+ toBinder (Rzk.PatternPair _loc l r) = BinderPair (toBinder l) (toBinder r)+ toBinder (Rzk.PatternTuple loc p1 p2 ps) = toBinder (desugarTuple loc (reverse ps) p2 p1) patternToTerm :: Rzk.Pattern -> Rzk.Term patternToTerm = ptt@@ -418,6 +470,26 @@ Rzk.PatternTuple loc p1 p2 ps -> patternToTerm (desugarTuple loc (reverse ps) p2 p1) +modalColonModality :: Rzk.ModalColon -> Rzk.Modality+modalColonModality = \case+ Rzk.ModalColonFlat loc -> Rzk.Flat loc+ Rzk.ModalColonSharp loc -> Rzk.Sharp loc+ Rzk.ModalColonOp loc -> Rzk.Op loc+ Rzk.ModalColonId loc -> Rzk.Id loc+ Rzk.ASCII_ModalColonFlat loc -> Rzk.Flat loc+ Rzk.ASCII_ModalColonSharp loc -> Rzk.Sharp loc+ Rzk.ASCII_ModalColonOp loc -> Rzk.Op loc++modalColonToTModality :: Rzk.ModalColon -> TModality+modalColonToTModality = toModality . modalColonModality++fromTModalityToModalColon :: TModality -> Rzk.ModalColon+fromTModalityToModalColon = \case+ Sharp -> Rzk.ModalColonSharp Nothing+ Flat -> Rzk.ModalColonFlat Nothing+ Op -> Rzk.ModalColonOp Nothing+ Id -> Rzk.ModalColonId Nothing+ unsafeTermToPattern :: Rzk.Term -> Rzk.Pattern unsafeTermToPattern = ttp where@@ -431,8 +503,138 @@ sigmaParamToTypeSigma :: Rzk.BNFC'Position -> Rzk.SigmaParam -> Rzk.Term -> Rzk.Term sigmaParamToTypeSigma loc sp body = case sp of Rzk.SigmaParam _ pat ty -> Rzk.TypeSigma loc pat ty body- Rzk.SigmaParamModal _ pat md ty -> Rzk.TypeSigmaModal loc pat md ty body+ Rzk.SigmaParamModal _ pat mc ty -> Rzk.TypeSigmaModal loc pat mc ty body +-- | A projection step: first (@π₁@) or second (@π₂@) component.+data Proj = PFst | PSnd+ deriving (Eq)++-- | Render a 'Binder' as a surface pattern (used to display the binder itself,+-- e.g. @(t , s)@). Anonymous variables become @_@.+binderToPattern :: Binder -> Rzk.Pattern+binderToPattern (BinderVar Nothing) = Rzk.PatternVar Nothing (fromVarIdent "_")+binderToPattern (BinderVar (Just x)) = Rzk.PatternVar Nothing (fromVarIdent x)+binderToPattern (BinderPair l r) = Rzk.PatternPair Nothing (binderToPattern l) (binderToPattern r)+binderToPattern BinderUnit = Rzk.PatternUnit Nothing++-- | A term that prints as the binder's surface pattern, e.g. the point+-- @(t , s)@. Used to render a /bare/ occurrence of a pattern binder's variable+-- (one not under a projection, e.g. the point in a shape tope @Δ² (t , s)@) as+-- the pattern itself rather than the underlying single variable. A+-- single-variable binder yields that variable.+binderToTerm :: Binder -> Term VarIdent+binderToTerm (BinderVar Nothing) = Pure (fromString "_")+binderToTerm (BinderVar (Just x)) = Pure x+binderToTerm (BinderPair l r) = Pair (binderToTerm l) (binderToTerm r)+binderToTerm BinderUnit = Unit++-- | A 'VarIdent' that prints as the binder's surface pattern, e.g. @(t , s)@.+-- Used to display a pattern binder in a hole's local context as the pattern+-- itself rather than as the underlying single variable.+binderDisplayName :: Binder -> VarIdent+binderDisplayName = fromString . Rzk.printTree . binderToPattern++-- | The named leaves of a binder, each paired with the projection path that+-- reaches it from the bound variable. For example @(t , (a , b))@ yields+-- @[([PFst], t), ([PSnd, PFst], a), ([PSnd, PSnd], b)]@.+binderPaths :: Binder -> [([Proj], VarIdent)]+binderPaths (BinderVar (Just x)) = [([], x)]+binderPaths (BinderVar Nothing) = []+binderPaths BinderUnit = []+binderPaths (BinderPair l r) =+ [ (PFst : p, n) | (p, n) <- binderPaths l ] +++ [ (PSnd : p, n) | (p, n) <- binderPaths r ]++-- | The names appearing in a binder.+binderLeaves :: Binder -> [VarIdent]+binderLeaves = map snd . binderPaths++-- | Does this binder destructure a pair\/tuple (as opposed to naming a single+-- variable or @_@)?+binderIsCompound :: Binder -> Bool+binderIsCompound BinderVar{} = False+binderIsCompound _ = True++-- | Refresh the named leaves of a binder so they avoid the given names (and one+-- another). Anonymous leaves and the unit pattern are left unchanged.+freshenBinderLeaves :: [VarIdent] -> Binder -> Binder+freshenBinderLeaves used = snd . go used+ where+ go u (BinderVar (Just x)) = let x' = refreshVar u x in (x' : u, BinderVar (Just x'))+ go u b@(BinderVar Nothing) = (u, b)+ go u BinderUnit = (u, BinderUnit)+ go u (BinderPair l r) =+ let (u1, l') = go u l+ (u2, r') = go u1 r+ in (u2, BinderPair l' r')++-- | Decompose a chain of projections applied to a variable into the projection+-- path /from the variable outwards/, matching 'binderPaths'. The outermost+-- projection is applied last, so it goes at the /end/ of the path: e.g.+-- @π₂ (π₁ x)@ (select @π₁@ first, then @π₂@) becomes @Just ([PFst, PSnd], x)@.+projChain :: Term a -> Maybe ([Proj], a)+projChain (First t) = (\(ps, r) -> (ps ++ [PFst], r)) <$> projChain t+projChain (Second t) = (\(ps, r) -> (ps ++ [PSnd], r)) <$> projChain t+projChain (Pure x) = Just ([], x)+projChain _ = Nothing++-- | Replace projection chains rooted at a pattern binder with the binder's+-- component name. Given a map from a (bound) variable to the named leaves of+-- its binder, every @π₁/π₂@ chain that reaches a named leaf is rewritten to+-- that name. Ordinary projections (of variables not bound by a pattern, or+-- chains that do not reach a named leaf) are left untouched.+foldBinderProjections :: Eq a => [(a, [([Proj], a)])] -> Term a -> Term a+foldBinderProjections m = go+ where+ go t+ | Just (ps, root) <- projChain t+ , not (null ps)+ , Just leaves <- lookup root m+ , Just nm <- lookup ps leaves+ = Pure nm+ go (Free f) = Free (bimap goScope go f)+ go (Pure x) = Pure x+ goScope = foldBinderProjections (map liftEntry m)+ liftEntry (k, leaves) = (S k, map (fmap S) leaves)++-- | Replace bare uses of a pattern binder's variable with the pattern term+-- (e.g. a whole point @(t , s)@ rather than the underlying single variable, in+-- a tope @Δ² (t , s)@). Given a map from each (already display-named) variable+-- to its binder, every free occurrence of a /compound/ binder's variable is+-- expanded to its pattern. Complements 'foldBinderProjections', which folds+-- /projections/ of such a variable; run this /after/ folding, so projections+-- have already become component names and only bare uses remain.+restorePatternVars :: [(VarIdent, Binder)] -> Term VarIdent -> Term VarIdent+restorePatternVars binders = (>>= expand)+ where+ expand v = case lookup v binders of+ Just b | binderIsCompound b -> binderToTerm b+ _ -> Pure v++-- | Like 'projChain', but for type-annotated terms.+projChainT :: TermT a -> Maybe ([Proj], a)+projChainT (FirstT _ t) = (\(ps, r) -> (ps ++ [PFst], r)) <$> projChainT t+projChainT (SecondT _ t) = (\(ps, r) -> (ps ++ [PSnd], r)) <$> projChainT t+projChainT (Pure x) = Just ([], x)+projChainT _ = Nothing++-- | Like 'foldBinderProjections', but for type-annotated terms (e.g. those+-- embedded in type errors). The annotation of a folded leaf is dropped, which+-- is harmless: the result is only rendered, and a bare variable needs none.+foldBinderProjectionsT :: Eq a => [(a, [([Proj], a)])] -> TermT a -> TermT a+foldBinderProjectionsT m = go+ where+ go t+ | Just (ps, root) <- projChainT t+ , not (null ps)+ , Just leaves <- lookup root m+ , Just nm <- lookup ps leaves+ = Pure nm+ go (Free (AnnF info f)) = Free (AnnF (fmap go info) (bimap goScope go f))+ go (Pure x) = Pure x+ goScope = foldBinderProjectionsT (map liftEntry m)+ liftEntry (k, leaves) = (S k, map (fmap S) leaves)+ fromTerm' :: Term' -> Rzk.Term fromTerm' t = fromTermWith' vars (defaultVarIdents \\ vars) t where vars = freeVars t@@ -443,16 +645,53 @@ f Z = Pure x f (S z) = Pure z +-- | Like 'fromScope'', but additionally restores pattern-binder component names+-- inside the scope: projections of the bound variable @x@ are folded back to+-- the names recorded in @binder@ (e.g. @π₁ x@ becomes @t@). For a binder that+-- names a single variable this is exactly 'fromScope''.+fromScopeBinder' :: Binder -> VarIdent -> [VarIdent] -> [VarIdent] -> Scope Term VarIdent -> Rzk.Term+fromScopeBinder' binder x used xs scope =+ fromTermWith' (x : used) xs+ (restorePattern (foldBinderProjections [(x, binderPaths binder)] (scope >>= f)))+ where+ f Z = Pure x+ f (S z) = Pure z+ -- After projection chains have been folded to their component names, a bare+ -- use of a pattern binder's variable (the whole point, e.g. in a shape tope+ -- @Δ² (t , s)@) still reads as the placeholder; show it as the pattern.+ restorePattern+ | binderIsCompound binder = (>>= \v -> if v == x then binderToTerm binder else Pure v)+ | otherwise = id+ fromTermWith' :: [VarIdent] -> [VarIdent] -> Term' -> Rzk.Term fromTermWith' used vars = go where- withFresh Nothing f =- case vars of- x:xs -> f (x, xs)+ -- Refresh a binder's named leaves against the names already in use and draw+ -- fresh names for anonymous leaves from the remaining supply.+ freshenBinder _ stream (BinderVar Nothing) =+ case stream of+ x:xs -> (BinderVar (Just x), xs) _ -> error "not enough fresh variables!"- withFresh (Just z) f = f (z', filter (/= z') vars) -- FIXME: very inefficient filter+ freshenBinder used' stream (BinderVar (Just z)) =+ (BinderVar (Just z'), filter (/= z') stream)+ where z' = refreshVar used' z+ freshenBinder _ stream BinderUnit = (BinderUnit, stream)+ freshenBinder used' stream (BinderPair l r) =+ let (l', s1) = freshenBinder used' stream l+ (r', s2) = freshenBinder (used' ++ binderLeaves l') s1 r+ in (BinderPair l' r', s2)++ -- Pick fresh names for a binder. Yields the bound variable's display name+ -- (used as the De Bruijn placeholder), the freshened binder (for the+ -- displayed pattern and for projection folding), and the remaining supply.+ withFreshBinder z f =+ case binder' of+ BinderVar (Just x) -> f (x, binder', stream)+ _ -> case stream of+ x:xs -> f (x, binder', xs)+ _ -> error "not enough fresh variables!" where- z' = refreshVar used z+ (binder', stream) = freshenBinder used vars z loc = Nothing @@ -475,6 +714,9 @@ Cube2 -> Rzk.Cube2 loc Cube2_0 -> Rzk.Cube2_0 loc Cube2_1 -> Rzk.Cube2_1 loc+ CubeI -> Rzk.CubeI loc+ CubeI_0 -> Rzk.CubeI_0 loc+ CubeI_1 -> Rzk.CubeI_1 loc CubeProduct l r -> Rzk.CubeProduct loc (go l) (go r) TopeTop -> Rzk.TopeTop loc TopeBottom -> Rzk.TopeBottom loc@@ -489,28 +731,40 @@ RecBottom -> Rzk.RecBottom loc RecOr rs -> Rzk.RecOr loc [ Rzk.Restriction loc (go tope) (go term) | (tope, term) <- rs ] - TypeFun z arg Nothing ret -> withFresh z $ \(x, xs) ->- Rzk.TypeFun loc (Rzk.ParamTermType loc (Rzk.Var loc (fromVarIdent x)) (go arg)) (fromScope' x used xs ret)- TypeFun z arg (Just tope) ret -> withFresh z $ \(x, xs) ->- Rzk.TypeFun loc (Rzk.ParamTermShape loc (Rzk.Var loc (fromVarIdent x)) (go arg) (fromScope' x used xs tope)) (fromScope' x used xs ret)+ Hole mname -> Rzk.Hole loc (Rzk.HoleIdent loc (Rzk.HoleIdentToken (holeIdentToken mname))) - TypeSigma z a b -> withFresh z $ \(x, xs) ->- Rzk.TypeSigma loc (Rzk.PatternVar loc (fromVarIdent x)) (go a) (fromScope' x used xs b)+ TypeFun z Id arg Nothing ret -> withFreshBinder z $ \(x, z', xs) ->+ Rzk.TypeFun loc (Rzk.ParamTermType loc (patternToTerm (binderToPattern z')) (go arg)) (fromScopeBinder' z' x used xs ret)+ TypeFun z Id arg (Just tope) ret -> withFreshBinder z $ \(x, z', xs) ->+ Rzk.TypeFun loc (Rzk.ParamTermShape loc (patternToTerm (binderToPattern z')) (go arg) (fromScopeBinder' z' x used xs tope)) (fromScopeBinder' z' x used xs ret)+ TypeFun z md arg Nothing ret -> withFreshBinder z $ \(x, z', xs) ->+ Rzk.TypeFun loc (Rzk.ParamTermModalType loc (patternToTerm (binderToPattern z')) (fromTModalityToModalColon md) (go arg)) (fromScopeBinder' z' x used xs ret)+ TypeFun z md arg (Just tope) ret -> withFreshBinder z $ \(x, z', xs) ->+ Rzk.TypeFun loc (Rzk.ParamTermModalShape loc (patternToTerm (binderToPattern z')) (fromTModalityToModalColon md) (go arg) (fromScopeBinder' z' x used xs tope)) (fromScopeBinder' z' x used xs ret)++ TypeSigma z Id a b -> withFreshBinder z $ \(x, z', xs) ->+ Rzk.TypeSigma loc (binderToPattern z') (go a) (fromScopeBinder' z' x used xs b)+ TypeSigma z md a b -> withFreshBinder z $ \(x, z', xs) ->+ Rzk.TypeSigmaModal loc (binderToPattern z') (fromTModalityToModalColon md) (go a) (fromScopeBinder' z' x used xs b) TypeId l (Just tA) r -> Rzk.TypeId loc (go l) (go tA) (go r) TypeId l Nothing r -> Rzk.TypeIdSimple loc (go l) (go r) App l r -> Rzk.App loc (go l) (go r) - Lambda z Nothing scope -> withFresh z $ \(x, xs) ->- Rzk.Lambda loc [Rzk.ParamPattern loc (Rzk.PatternVar loc (fromVarIdent x))] (fromScope' x used xs scope)- Lambda z (Just (ty, Nothing)) scope -> withFresh z $ \(x, xs) ->- Rzk.Lambda loc [Rzk.ParamPatternType loc [Rzk.PatternVar loc (fromVarIdent x)] (go ty)] (fromScope' x used xs scope)- Lambda z (Just (cube, Just tope)) scope -> withFresh z $ \(x, xs) ->- Rzk.Lambda loc [Rzk.ParamPatternShape loc [Rzk.PatternVar loc (fromVarIdent x)] (go cube) (fromScope' x used xs tope)] (fromScope' x used xs scope)+ Lambda z Nothing scope -> withFreshBinder z $ \(x, z', xs) ->+ Rzk.Lambda loc [Rzk.ParamPattern loc (binderToPattern z')] (fromScopeBinder' z' x used xs scope)+ Lambda z (Just (Id, ty, Nothing)) scope -> withFreshBinder z $ \(x, z', xs) ->+ Rzk.Lambda loc [Rzk.ParamPatternType loc [binderToPattern z'] (go ty)] (fromScopeBinder' z' x used xs scope)+ Lambda z (Just (Id, cube, Just tope)) scope -> withFreshBinder z $ \(x, z', xs) ->+ Rzk.Lambda loc [Rzk.ParamPatternShape loc [binderToPattern z'] (go cube) (fromScopeBinder' z' x used xs tope)] (fromScopeBinder' z' x used xs scope)+ Lambda z (Just (md, ty, Nothing)) scope -> withFreshBinder z $ \(x, z', xs) ->+ Rzk.Lambda loc [Rzk.ParamPatternModalType loc [binderToPattern z'] (fromTModalityToModalColon md) (go ty)] (fromScopeBinder' z' x used xs scope)+ Lambda z (Just (md, cube, Just tope)) scope -> withFreshBinder z $ \(x, z', xs) ->+ Rzk.Lambda loc [Rzk.ParamPatternModalShape loc [binderToPattern z'] (fromTModalityToModalColon md) (go cube) (fromScopeBinder' z' x used xs tope)] (fromScopeBinder' z' x used xs scope) -- Lambda (Maybe (term, Maybe scope)) scope -> Rzk.Lambda loc (Maybe (term, Maybe scope)) scope- Let z Nothing val scope -> withFresh z $ \(x, xs) -> - Rzk.Let loc (Rzk.BindPattern loc (Rzk.PatternVar loc (fromVarIdent x))) (go val) (fromScope' x used xs scope)- Let z (Just ty) val scope -> withFresh z $ \(x, xs) -> - Rzk.Let loc (Rzk.BindPatternType loc (Rzk.PatternVar loc (fromVarIdent x)) (go ty)) (go val) (fromScope' x used xs scope)+ Let z Nothing val scope -> withFreshBinder z $ \(x, z', xs) ->+ Rzk.Let loc (Rzk.BindPattern loc (binderToPattern z')) (go val) (fromScopeBinder' z' x used xs scope)+ Let z (Just ty) val scope -> withFreshBinder z $ \(x, z', xs) ->+ Rzk.Let loc (Rzk.BindPatternType loc (binderToPattern z') (go ty)) (go val) (fromScopeBinder' z' x used xs scope) Pair l r -> Rzk.Pair loc (go l) (go r) First term -> Rzk.First loc (go term) Second term -> Rzk.Second loc (go term)@@ -526,14 +780,14 @@ TypeModal m ty -> Rzk.ModType loc (goMod m) (go ty) ModApp m ty -> Rzk.ModApp loc (goMod m) (go ty) ModExtract ma mb t -> Rzk.ModExtract loc (Rzk.Comp loc (goMod ma) (goMod mb)) (go t)- LetMod z ext inn Nothing val scope -> withFresh z $ \(x, xs) ->+ LetMod z ext inn Nothing val scope -> withFreshBinder z $ \(x, z', xs) -> Rzk.LetMod loc (modsToModComp ext inn)- (Rzk.BindPattern loc (Rzk.PatternVar loc (fromVarIdent x)))- (go val) (fromScope' x used xs scope)- LetMod z ext inn (Just ty) val scope -> withFresh z $ \(x, xs) ->+ (Rzk.BindPattern loc (binderToPattern z'))+ (go val) (fromScopeBinder' z' x used xs scope)+ LetMod z ext inn (Just ty) val scope -> withFreshBinder z $ \(x, z', xs) -> Rzk.LetMod loc (modsToModComp ext inn)- (Rzk.BindPatternType loc (Rzk.PatternVar loc (fromVarIdent x)) (go ty))- (go val) (fromScope' x used xs scope)+ (Rzk.BindPatternType loc (binderToPattern z') (go ty))+ (go val) (fromScopeBinder' z' x used xs scope) defaultVarIdents :: [VarIdent]@@ -543,6 +797,10 @@ , let name = "x" <> map digitToSub (show n) ] where digitToSub c = chr ((ord c - ord '0') + ord '₀')++-- $setup+-- >>> :set -XOverloadedStrings+-- >>> import qualified Data.Text as T -- | Given a list of used variable names in the current context, -- generate a unique fresh name based on a given one.
src/Language/Rzk/Syntax.hs view
@@ -65,6 +65,10 @@ data LineType = NonCode | CodeOf T.Text +-- $setup+-- >>> :set -XOverloadedStrings+-- >>> import qualified Data.Text as T+ -- | Extract code for a given alias (e.g. "rzk" or "haskell") from a Markdown file -- by replacing any lines that do not belong to the code in that language with blank lines. -- This way the line numbers are preserved correctly from the original file.
src/Language/Rzk/Syntax/Abs.hs view
@@ -1,4 +1,4 @@--- File generated by the BNF Converter (bnfc 2.9.6.2).+-- File generated by the BNF Converter (bnfc 2.9.6.3). {-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE DeriveGeneric #-}@@ -83,7 +83,8 @@ | ParamPatternType a [Pattern' a] (Term' a) | ParamPatternShape a [Pattern' a] (Term' a) (Term' a) | ParamPatternShapeDeprecated a (Pattern' a) (Term' a) (Term' a)- | ParamPatternModalType a [Pattern' a] (Modality' a) (Term' a)+ | ParamPatternModalType a [Pattern' a] (ModalColon' a) (Term' a)+ | ParamPatternModalShape a [Pattern' a] (ModalColon' a) (Term' a) (Term' a) deriving (C.Eq, C.Ord, C.Show, C.Read, C.Functor, C.Foldable, C.Traversable, C.Data, C.Generic) type Bind = Bind' BNFC'Position@@ -99,13 +100,14 @@ | ParamTermShape a (Term' a) (Term' a) (Term' a) | ParamTermTypeDeprecated a (Pattern' a) (Term' a) | ParamVarShapeDeprecated a (Pattern' a) (Term' a) (Term' a)- | ParamTermModalType a (Term' a) (Modality' a) (Term' a)+ | ParamTermModalType a (Term' a) (ModalColon' a) (Term' a)+ | ParamTermModalShape a (Term' a) (ModalColon' a) (Term' a) (Term' a) deriving (C.Eq, C.Ord, C.Show, C.Read, C.Functor, C.Foldable, C.Traversable, C.Data, C.Generic) type SigmaParam = SigmaParam' BNFC'Position data SigmaParam' a = SigmaParam a (Pattern' a) (Term' a)- | SigmaParamModal a (Pattern' a) (Modality' a) (Term' a)+ | SigmaParamModal a (Pattern' a) (ModalColon' a) (Term' a) deriving (C.Eq, C.Ord, C.Show, C.Read, C.Functor, C.Foldable, C.Traversable, C.Data, C.Generic) type Restriction = Restriction' BNFC'Position@@ -130,6 +132,17 @@ = Single a (Modality' a) | Comp a (Modality' a) (Modality' a) deriving (C.Eq, C.Ord, C.Show, C.Read, C.Functor, C.Foldable, C.Traversable, C.Data, C.Generic) +type ModalColon = ModalColon' BNFC'Position+data ModalColon' a+ = ModalColonFlat a+ | ModalColonSharp a+ | ModalColonOp a+ | ModalColonId a+ | ASCII_ModalColonFlat a+ | ASCII_ModalColonSharp a+ | ASCII_ModalColonOp a+ deriving (C.Eq, C.Ord, C.Show, C.Read, C.Functor, C.Foldable, C.Traversable, C.Data, C.Generic)+ type Term = Term' BNFC'Position data Term' a = Universe a@@ -140,6 +153,9 @@ | Cube2 a | Cube2_0 a | Cube2_1 a+ | CubeI a+ | CubeI_0 a+ | CubeI_1 a | CubeProduct a (Term' a) (Term' a) | TopeTop a | TopeBottom a@@ -156,7 +172,7 @@ | RecOrDeprecated a (Term' a) (Term' a) (Term' a) (Term' a) | TypeFun a (ParamDecl' a) (Term' a) | TypeSigma a (Pattern' a) (Term' a) (Term' a)- | TypeSigmaModal a (Pattern' a) (Modality' a) (Term' a) (Term' a)+ | TypeSigmaModal a (Pattern' a) (ModalColon' a) (Term' a) (Term' a) | TypeSigmaTuple a (SigmaParam' a) [SigmaParam' a] (Term' a) | TypeUnit a | TypeId a (Term' a) (Term' a) (Term' a)@@ -185,6 +201,9 @@ | ASCII_CubeUnitStar a | ASCII_Cube2_0 a | ASCII_Cube2_1 a+ | ASCII_CubeI a+ | ASCII_CubeI_0 a+ | ASCII_CubeI_1 a | ASCII_TopeTop a | ASCII_TopeBottom a | ASCII_TopeEQ a (Term' a) (Term' a)@@ -193,7 +212,6 @@ | ASCII_TopeOr a (Term' a) (Term' a) | ASCII_TypeFun a (ParamDecl' a) (Term' a) | ASCII_TypeSigma a (Pattern' a) (Term' a) (Term' a)- | ASCII_TypeSigmaModal a (Pattern' a) (Modality' a) (Term' a) (Term' a) | ASCII_TypeSigmaTuple a (SigmaParam' a) [SigmaParam' a] (Term' a) | ASCII_Lambda a [Param' a] (Term' a) | ASCII_TypeExtensionDeprecated a (ParamDecl' a) (Term' a)@@ -240,6 +258,9 @@ ascii_CubeProduct :: a -> Term' a -> Term' a -> Term' a ascii_CubeProduct = \ _a l r -> CubeProduct _a l r +ascii_TypeSigmaModal :: a -> Pattern' a -> ModalColon' a -> Term' a -> Term' a -> Term' a+ascii_TypeSigmaModal = \ _a p mc t r -> TypeSigmaModal _a p mc t r+ unicode_TypeSigmaAlt :: a -> Pattern' a -> Term' a -> Term' a -> Term' a unicode_TypeSigmaAlt = \ _a pat fst snd -> TypeSigma _a pat fst snd @@ -324,6 +345,7 @@ ParamPatternShape p _ _ _ -> p ParamPatternShapeDeprecated p _ _ _ -> p ParamPatternModalType p _ _ _ -> p+ ParamPatternModalShape p _ _ _ _ -> p instance HasPosition Bind where hasPosition = \case@@ -338,6 +360,7 @@ ParamTermTypeDeprecated p _ _ -> p ParamVarShapeDeprecated p _ _ _ -> p ParamTermModalType p _ _ _ -> p+ ParamTermModalShape p _ _ _ _ -> p instance HasPosition SigmaParam where hasPosition = \case@@ -364,6 +387,16 @@ Single p _ -> p Comp p _ _ -> p +instance HasPosition ModalColon where+ hasPosition = \case+ ModalColonFlat p -> p+ ModalColonSharp p -> p+ ModalColonOp p -> p+ ModalColonId p -> p+ ASCII_ModalColonFlat p -> p+ ASCII_ModalColonSharp p -> p+ ASCII_ModalColonOp p -> p+ instance HasPosition Term where hasPosition = \case Universe p -> p@@ -374,6 +407,9 @@ Cube2 p -> p Cube2_0 p -> p Cube2_1 p -> p+ CubeI p -> p+ CubeI_0 p -> p+ CubeI_1 p -> p CubeProduct p _ _ -> p TopeTop p -> p TopeBottom p -> p@@ -419,6 +455,9 @@ ASCII_CubeUnitStar p -> p ASCII_Cube2_0 p -> p ASCII_Cube2_1 p -> p+ ASCII_CubeI p -> p+ ASCII_CubeI_0 p -> p+ ASCII_CubeI_1 p -> p ASCII_TopeTop p -> p ASCII_TopeBottom p -> p ASCII_TopeEQ p _ _ -> p@@ -427,7 +466,6 @@ ASCII_TopeOr p _ _ -> p ASCII_TypeFun p _ _ -> p ASCII_TypeSigma p _ _ _ -> p- ASCII_TypeSigmaModal p _ _ _ _ -> p ASCII_TypeSigmaTuple p _ _ _ -> p ASCII_Lambda p _ _ -> p ASCII_TypeExtensionDeprecated p _ _ -> p
src/Language/Rzk/Syntax/Layout.hs view
@@ -1,4 +1,4 @@--- File generated by the BNF Converter (bnfc 2.9.6.2).+-- File generated by the BNF Converter (bnfc 2.9.6.3). {-# OPTIONS_GHC -Wno-incomplete-patterns #-} @@ -37,16 +37,16 @@ layoutOpen, layoutClose, layoutSep :: [TokSymbol] layoutOpen = List.nub $ mapMaybe (delimOpen . snd) layoutWords layoutClose = List.nub $ mapMaybe (delimClose . snd) layoutWords-layoutSep = List.nub $ TokSymbol ";" 34 : map (delimSep . snd) layoutWords+layoutSep = List.nub $ TokSymbol ";" 45 : map (delimSep . snd) layoutWords parenOpen, parenClose :: [TokSymbol] parenOpen = [ TokSymbol "(" 17- , TokSymbol "[" 49+ , TokSymbol "[" 60 ] parenClose = [ TokSymbol ")" 18- , TokSymbol "]" 52+ , TokSymbol "]" 63 ] -- | Report an error during layout resolution.@@ -74,7 +74,7 @@ res Nothing [if topLayout then Implicit topDelim Definitive 1 else Explicit] where topDelim :: LayoutDelimiters- topDelim = LayoutDelimiters (TokSymbol ";" 34) Nothing Nothing+ topDelim = LayoutDelimiters (TokSymbol ";" 45) Nothing Nothing res :: Maybe Token -- ^ The previous token, if any. -> [Block] -- ^ A stack of layout blocks.
src/Language/Rzk/Syntax/Lex.hs view
@@ -29,21 +29,21 @@ alex_tab_size = 8 alex_base :: AlexAddr alex_base = AlexA#- "\xf8\xff\xff\xff\x98\xff\xff\xff\xa0\xff\xff\xff\x9a\xff\xff\xff\xf8\x00\x00\x00\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x95\xff\xff\xff\xa5\xff\xff\xff\xa6\xff\xff\xff\xa2\xff\xff\xff\x9d\xff\xff\xff\xa8\xff\xff\xff\xa1\xff\xff\xff\xac\xff\xff\xff\xe5\xff\xff\xff\xd3\xff\xff\xff\xb8\x01\x00\x00\x91\xff\xff\xff\x85\xff\xff\xff\x7e\xff\xff\xff\x2f\x02\x00\x00\x26\x03\x00\x00\x1d\x04\x00\x00\x14\x05\x00\x00\x71\xff\xff\xff\x54\x05\x00\x00\x9e\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xc5\x05\x00\x00\x06\x06\x00\x00\x9b\xff\xff\xff\x00\x00\x00\x00\x7f\xff\xff\xff\x7c\xff\xff\xff\x8c\xff\xff\xff\xa3\xff\xff\xff\xb3\xff\xff\xff\xa7\xff\xff\xff\xfd\x06\x00\x00\xad\xff\xff\xff\xbd\xff\xff\xff\xaf\xff\xff\xff\xfd\x01\x00\x00\xf4\x07\x00\x00\xeb\x08\x00\x00\xe2\x09\x00\x00\xd9\x0a\x00\x00\xbf\xff\xff\xff\xcc\xff\xff\xff\xcf\xff\xff\xff\xce\xff\xff\xff\xd1\xff\xff\xff\xd2\xff\xff\xff\xd4\xff\xff\xff\xd7\xff\xff\xff\xdb\xff\xff\xff\xe0\xff\xff\xff\xe1\xff\xff\xff\xe6\xff\xff\xff\xe8\xff\xff\xff\xeb\xff\xff\xff\xee\xff\xff\xff\xef\xff\xff\xff\xf5\xff\xff\xff\xe0\x01\x00\x00\xd0\x0b\x00\x00\xc7\x0c\x00\x00\xbe\x0d\x00\x00\xb5\x0e\x00\x00\xac\x0f\x00\x00\x2b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xec\x0f\x00\x00\xe2\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x53\x11\x00\x00\x94\x11\x00\x00\xd4\x11\x00\x00\xa7\x12\x00\x00\x18\x13\x00\x00\x16\x12\x00\x00\x00\x00\x00\x00\x59\x13\x00\x00\xca\x13\x00\x00\x9d\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x94\x15\x00\x00\x8b\x16\x00\x00\x82\x17\x00\x00\x79\x18\x00\x00\x70\x19\x00\x00\x67\x1a\x00\x00\x5e\x1b\x00\x00\x55\x1c\x00\x00\x4c\x1d\x00\x00\x43\x1e\x00\x00\x3a\x1f\x00\x00\x31\x20\x00\x00\x28\x21\x00\x00\x1f\x22\x00\x00\x16\x23\x00\x00\x0d\x24\x00\x00\xea\xff\xff\xff\x04\x25\x00\x00\xfb\x25\x00\x00\xf2\x26\x00\x00\x00\x00\x00\x00\xe7\xff\xff\xff\xe9\x27\x00\x00\x2c\x00\x00\x00\xf3\xff\xff\xff\x30\x00\x00\x00\x32\x00\x00\x00\x33\x00\x00\x00\xe0\x28\x00\x00\x3d\x02\x00\x00\x00\x00\x00\x00\xd6\x29\x00\x00\x1b\x02\x00\x00\x01\x00\x00\x00\x03\x00\x00\x00\xfd\xff\xff\xff\xff\xff\xff\xff\xfa\xff\xff\xff\xfc\xff\xff\xff\xf4\xff\xff\xff\xb6\xff\xff\xff\xcd\x2a\x00\x00\xda\xff\xff\xff\xba\xff\xff\xff\xc4\x2b\x00\x00\xbb\x2c\x00\x00\xb2\x2d\x00\x00\xa9\x2e\x00\x00\x04\x00\x00\x00\x08\x00\x00\x00\x10\x00\x00\x00\xdd\x01\x00\x00\x07\x00\x00\x00\xce\x01\x00\x00\xcf\x01\x00\x00\xd1\x01\x00\x00\xcc\x01\x00\x00\xec\x01\x00\x00\xda\x01\x00\x00\xf4\x01\x00\x00\xe6\x01\x00\x00\xe8\x01\x00\x00\xea\x01\x00\x00\xa9\x2f\x00\x00\x29\x30\x00\x00\x2a\x30\x00\x00\xaa\x30\x00\x00\x2a\x31\x00\x00\xaa\x31\x00\x00\x2a\x32\x00\x00\xaa\x32\x00\x00\x2a\x33\x00\x00\xaa\x33\x00\x00\xfa\x01\x00\x00\xfb\x01\x00\x00"#+ "\xf8\xff\xff\xff\x9f\xff\xff\xff\xa2\xff\xff\xff\x94\xff\xff\xff\xa4\xff\xff\xff\x78\x00\x00\x00\xf8\x00\x00\x00\x78\x01\x00\x00\xf8\x01\x00\x00\x78\x02\x00\x00\xf8\x02\x00\x00\x78\x03\x00\x00\xf8\x03\x00\x00\x78\x04\x00\x00\xf8\x04\x00\x00\x78\x05\x00\x00\x78\x06\x00\x00\xf8\x06\x00\x00\x96\xff\xff\xff\x97\xff\xff\xff\x98\xff\xff\xff\xa8\xff\xff\xff\x9a\xff\xff\xff\xae\xff\xff\xff\x9e\xff\xff\xff\xa3\xff\xff\xff\xa1\xff\xff\xff\x7e\xff\xff\xff\x6f\x07\x00\x00\x66\x08\x00\x00\x5d\x09\x00\x00\x54\x0a\x00\x00\x5f\xff\xff\xff\x83\xff\xff\xff\x4b\x0b\x00\x00\x61\xff\xff\xff\xaa\xff\xff\xff\xad\xff\xff\xff\xf1\xff\xff\xff\xb5\xff\xff\xff\xbe\xff\xff\xff\xbd\xff\xff\xff\xbf\xff\xff\xff\xb9\xff\xff\xff\xc3\xff\xff\xff\xc4\xff\xff\xff\xc9\xff\xff\xff\xd1\xff\xff\xff\xd9\xff\xff\xff\xda\xff\xff\xff\x5b\x07\x00\x00\x41\x0c\x00\x00\x00\x00\x00\x00\x36\x00\x00\x00\x38\x0d\x00\x00\x0e\x00\x00\x00\x10\x00\x00\x00\xd5\xff\xff\xff\x15\x00\x00\x00\x2f\x0e\x00\x00\xd2\xff\xff\xff\x00\x00\x00\x00\x26\x0f\x00\x00\xd7\xff\xff\xff\x1d\x10\x00\x00\x14\x11\x00\x00\x0b\x12\x00\x00\x02\x13\x00\x00\xf9\x13\x00\x00\xf0\x14\x00\x00\xe7\x15\x00\x00\xde\x16\x00\x00\xd5\x17\x00\x00\xcc\x18\x00\x00\xc3\x19\x00\x00\xba\x1a\x00\x00\xb1\x1b\x00\x00\xa8\x1c\x00\x00\x9f\x1d\x00\x00\x96\x1e\x00\x00\x8d\x1f\x00\x00\x84\x20\x00\x00\x7b\x21\x00\x00\x00\x00\x00\x00\x4e\x22\x00\x00\xbd\x0b\x00\x00\xbd\x21\x00\x00\x00\x00\x00\x00\x8f\x22\x00\x00\x00\x23\x00\x00\xd3\x23\x00\x00\x41\x23\x00\x00\x14\x24\x00\x00\x85\x24\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7b\x25\x00\x00\xbb\x25\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb2\x26\x00\x00\xa9\x27\x00\x00\xa0\x28\x00\x00\x97\x29\x00\x00\x8e\x2a\x00\x00\x1a\x00\x00\x00\xed\xff\xff\xff\xe7\xff\xff\xff\xe6\xff\xff\xff\xe8\xff\xff\xff\xe5\xff\xff\xff\xea\xff\xff\xff\xf3\xff\xff\xff\xe3\xff\xff\xff\xe4\xff\xff\xff\xee\xff\xff\xff\xeb\xff\xff\xff\xec\xff\xff\xff\xf2\xff\xff\xff\xf4\xff\xff\xff\xef\xff\xff\xff\x85\x2b\x00\x00\x7c\x2c\x00\x00\x73\x2d\x00\x00\x6a\x2e\x00\x00\x29\x00\x00\x00\xf5\xff\xff\xff\xf6\xff\xff\xff\x00\x00\x00\x00\xab\x2e\x00\x00\x1c\x2f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5c\x2f\x00\x00\x5c\x30\x00\x00\xf0\xff\xff\xff\xf9\x06\x00\x00\xfd\x06\x00\x00\xfe\x06\x00\x00\xd3\x30\x00\x00\xf2\x06\x00\x00\x03\x07\x00\x00\xd8\xff\xff\xff\xc8\xff\xff\xff\xcb\xff\xff\xff\xd7\x06\x00\x00\xdd\xff\xff\xff\x00\x00\x00\x00\xff\x06\x00\x00\x14\x31\x00\x00\x85\x31\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf7\xff\xff\xff\xc5\x31\x00\x00\xe3\x06\x00\x00\xbc\x32\x00\x00\xb3\x33\x00\x00\xaa\x34\x00\x00\xa1\x35\x00\x00\xce\xff\xff\xff\xc5\x06\x00\x00\xdc\xff\xff\xff\xfc\x06\x00\x00\x08\x07\x00\x00\x05\x07\x00\x00\xa1\x36\x00\x00\x52\x07\x00\x00\x66\x07\x00\x00\x30\x07\x00\x00\x27\x07\x00\x00\x37\x07\x00\x00\x28\x07\x00\x00\x33\x07\x00\x00\x39\x07\x00\x00\x32\x07\x00\x00\x3c\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x61\x36\x00\x00\x61\x37\x00\x00\x35\x07\x00\x00"# alex_table :: AlexAddr alex_table = AlexA#- "\x00\x00\x7b\x00\x7b\x00\x7a\x00\x7a\x00\x7b\x00\x02\x00\x72\x00\x72\x00\x09\x00\x77\x00\x0d\x00\x76\x00\x72\x00\x72\x00\x0f\x00\x72\x00\x72\x00\x7d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x7b\x00\xff\xff\x4e\x00\x43\x00\x6b\x00\x13\x00\x29\x00\x6d\x00\x72\x00\x72\x00\x70\x00\x72\x00\x72\x00\x10\x00\xff\xff\x74\x00\x63\x00\x6f\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x2b\x00\x6d\x00\x32\x00\x71\x00\x72\x00\x2d\x00\x6c\x00\x72\x00\x5d\x00\x6d\x00\x14\x00\x6d\x00\x28\x00\x25\x00\x1a\x00\x6d\x00\x6d\x00\x6d\x00\x08\x00\x35\x00\x3a\x00\x34\x00\x9c\x00\x03\x00\x99\x00\xa7\x00\x80\x00\x39\x00\x41\x00\x23\x00\x40\x00\x6d\x00\x6d\x00\x0a\x00\x9a\x00\x0b\x00\x72\x00\x75\x00\x72\x00\x9b\x00\x61\x00\x95\x00\x37\x00\x72\x00\x72\x00\x8f\x00\x91\x00\x8d\x00\x11\x00\x55\x00\x18\x00\x49\x00\x83\x00\x7f\x00\x0c\x00\xa8\x00\x3d\x00\x42\x00\x84\x00\x44\x00\x15\x00\x87\x00\x16\x00\x93\x00\x88\x00\x72\x00\x01\x00\x38\x00\x79\x00\x78\x00\x72\x00\xa7\x00\x33\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\x12\x00\x26\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x24\x00\x1c\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x1b\x00\xa1\x00\x89\x00\x27\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x57\x00\xa2\x00\x06\x00\x06\x00\x06\x00\x5a\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x72\x00\x92\x00\xff\xff\x4e\x00\x3b\x00\x9a\x00\x94\x00\x36\x00\x4e\x00\x82\x00\x3f\x00\x0e\x00\x7b\x00\x7b\x00\x7b\x00\x7b\x00\x7b\x00\x0d\x00\x90\x00\x96\x00\x49\x00\xff\xff\x6e\x00\xff\xff\xff\xff\x3e\x00\x81\x00\x8e\x00\x97\x00\xff\xff\xff\xff\x98\x00\x3c\x00\xff\xff\xa7\x00\x7b\x00\x85\x00\x72\x00\x73\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4e\x00\x00\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4e\x00\xff\xff\xff\xff\xff\xff\x4e\x00\x00\x00\x4e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x1b\x00\xa1\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x57\x00\xa2\x00\x06\x00\x06\x00\x06\x00\x5a\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\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\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8d\x00\x00\x00\x00\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x1b\x00\xa1\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x57\x00\xa2\x00\x06\x00\x06\x00\x06\x00\x5a\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\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\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\x19\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x1b\x00\xa1\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x57\x00\xa2\x00\x06\x00\x06\x00\x06\x00\x5a\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\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\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x8a\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x1b\x00\xa1\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x57\x00\xa2\x00\x06\x00\x06\x00\x06\x00\x5a\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\x20\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\x05\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\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\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x1b\x00\xa1\x00\x58\x00\x2a\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x57\x00\xa2\x00\x06\x00\x06\x00\x06\x00\x5a\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\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\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x1b\x00\xa1\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x57\x00\xa2\x00\x06\x00\x06\x00\x06\x00\x5a\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\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\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x1b\x00\xa1\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x57\x00\xa2\x00\x06\x00\x06\x00\x06\x00\x5a\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\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\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\x00\x00\x31\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x1b\x00\xa1\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x57\x00\xa2\x00\x06\x00\x06\x00\x06\x00\x5a\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\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\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x1b\x00\xa1\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x57\x00\xa2\x00\x06\x00\x06\x00\x06\x00\x5a\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\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\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x45\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x1b\x00\xa1\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x57\x00\xa2\x00\x06\x00\x06\x00\x06\x00\x5a\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\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\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\x46\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x1b\x00\xa1\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x57\x00\xa2\x00\x06\x00\x06\x00\x06\x00\x5a\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\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\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x47\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x1b\x00\xa1\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x57\x00\xa2\x00\x06\x00\x06\x00\x06\x00\x5a\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\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\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x6d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x1b\x00\xa1\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x57\x00\xa2\x00\x06\x00\x06\x00\x06\x00\x5a\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\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\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\xff\xff\xff\xff\x6d\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x1b\x00\xa1\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x57\x00\xa2\x00\x06\x00\x06\x00\x06\x00\x5a\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x9e\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4d\x00\xa4\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x53\x00\xa3\x00\x4a\x00\x4a\x00\x4a\x00\x52\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x53\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\x4d\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\x5b\x00\x1b\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x9d\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x54\x00\xa6\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x59\x00\xa5\x00\x4f\x00\x4f\x00\x4f\x00\x56\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x59\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\x54\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\x57\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\x5b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7c\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x9d\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x54\x00\xa6\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x59\x00\xa5\x00\x4f\x00\x4f\x00\x4f\x00\x56\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\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\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x1b\x00\xa1\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x57\x00\xa2\x00\x06\x00\x06\x00\x06\x00\x5a\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\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\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\x6d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x1b\x00\xa1\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x57\x00\xa2\x00\x06\x00\x06\x00\x06\x00\x5a\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\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\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x1b\x00\xa1\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x57\x00\xa2\x00\x06\x00\x06\x00\x06\x00\x5a\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\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\xff\xff\x00\x00\xff\xff\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x6d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x60\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x1b\x00\xa1\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x57\x00\xa2\x00\x06\x00\x06\x00\x06\x00\x5a\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\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\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x1b\x00\xa1\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x57\x00\xa2\x00\x06\x00\x06\x00\x06\x00\x5a\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\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\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\x00\x00\x62\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x1b\x00\xa1\x00\x58\x00\x21\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x57\x00\xa2\x00\x06\x00\x06\x00\x06\x00\x5a\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\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\xff\xff\x00\x00\xff\xff\xff\xff\x6d\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x1b\x00\xa1\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x57\x00\xa2\x00\x06\x00\x06\x00\x06\x00\x5a\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\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\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\x00\x00\x64\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x1b\x00\xa1\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x57\x00\xa2\x00\x06\x00\x06\x00\x06\x00\x5a\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\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\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x1b\x00\xa1\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x57\x00\xa2\x00\x06\x00\x06\x00\x06\x00\x5a\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\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\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x66\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x1b\x00\xa1\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x57\x00\xa2\x00\x06\x00\x06\x00\x06\x00\x5a\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\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\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\x67\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x1b\x00\xa1\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x57\x00\xa2\x00\x06\x00\x06\x00\x06\x00\x5a\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\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\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\x00\x00\x68\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x1b\x00\xa1\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x57\x00\xa2\x00\x06\x00\x06\x00\x06\x00\x5a\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\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\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x69\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x1b\x00\xa1\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x57\x00\xa2\x00\x06\x00\x06\x00\x06\x00\x5a\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\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\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x1b\x00\xa1\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x57\x00\xa2\x00\x06\x00\x06\x00\x06\x00\x5a\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\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\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\xff\xff\xff\xff\x48\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\x00\x00\x31\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x1b\x00\xa1\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x57\x00\xa2\x00\x06\x00\x06\x00\x06\x00\x5a\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\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\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x1b\x00\xa1\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x57\x00\xa2\x00\x06\x00\x06\x00\x06\x00\x5a\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\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\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\x00\x00\x62\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x1b\x00\xa1\x00\x58\x00\x21\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x57\x00\xa2\x00\x06\x00\x06\x00\x06\x00\x5a\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\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\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\x00\x00\x47\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x1b\x00\xa1\x00\x58\x00\x2c\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x57\x00\xa2\x00\x06\x00\x06\x00\x06\x00\x5a\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\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\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\xff\xff\xff\xff\x6d\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x1b\x00\xa1\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x57\x00\xa2\x00\x06\x00\x06\x00\x06\x00\x5a\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\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\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x72\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x1b\x00\xa1\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x57\x00\xa2\x00\x06\x00\x06\x00\x06\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7b\x00\x7b\x00\x7a\x00\x7a\x00\x7b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7b\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x1b\x00\xa1\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x57\x00\xa2\x00\x06\x00\x06\x00\x06\x00\x5a\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x04\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x05\x00\x9f\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x20\x00\xa0\x00\x1d\x00\x1d\x00\x1d\x00\x1f\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\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\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x1b\x00\xa1\x00\x86\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x57\x00\xa2\x00\x06\x00\x06\x00\x06\x00\x5a\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\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\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x1b\x00\xa1\x00\x89\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x57\x00\xa2\x00\x06\x00\x06\x00\x06\x00\x5a\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\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\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\x8a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x1b\x00\xa1\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x57\x00\xa2\x00\x06\x00\x06\x00\x06\x00\x5a\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\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\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x1b\x00\xa1\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x57\x00\xa2\x00\x06\x00\x06\x00\x06\x00\x5a\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\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\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\x8c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x1b\x00\xa1\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x57\x00\xa2\x00\x06\x00\x06\x00\x06\x00\x5a\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x04\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x9f\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x12\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\xa1\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\xa4\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x9e\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\xa6\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x9d\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00"#+ "\x00\x00\x35\x00\x35\x00\x36\x00\x36\x00\x35\x00\x3d\x00\x3c\x00\x04\x00\x3d\x00\x2b\x00\xb2\x00\x73\x00\x16\x00\x6b\x00\x18\x00\x74\x00\x14\x00\x1a\x00\xa7\x00\x21\x00\x22\x00\xa4\x00\x25\x00\x35\x00\xff\xff\x61\x00\x6c\x00\x44\x00\x81\x00\x27\x00\x29\x00\x3d\x00\x3d\x00\x40\x00\xad\x00\x3d\x00\xaa\x00\xff\xff\x3b\x00\x4c\x00\x41\x00\x42\x00\x01\x00\x2f\x00\x77\x00\x2c\x00\x6d\x00\x02\x00\x72\x00\x3e\x00\x3d\x00\x7f\x00\x43\x00\x3d\x00\x52\x00\x24\x00\xae\x00\x31\x00\x5a\x00\x2d\x00\xa9\x00\xb1\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x3d\x00\x3d\x00\x78\x00\x19\x00\x03\x00\xaf\x00\xb0\x00\x14\x00\x76\x00\x30\x00\x79\x00\x6f\x00\x2e\x00\x70\x00\xac\x00\x3d\x00\x3a\x00\x3d\x00\x35\x00\x4e\x00\x6e\x00\x28\x00\xb7\x00\x04\x00\x6b\x00\x3f\x00\x1c\x00\x15\x00\x71\x00\x9f\x00\x2a\x00\x17\x00\x75\x00\x12\x00\x3d\x00\x80\x00\x7a\x00\x42\x00\x6a\x00\x13\x00\x42\x00\xa1\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x37\x00\x38\x00\x3d\x00\x93\x00\x8d\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\xa8\x00\x90\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x92\x00\x9b\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x9c\x00\x0c\x00\x20\x00\x8f\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x58\x00\x0e\x00\xb4\x00\xb4\x00\xb4\x00\x59\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x11\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x05\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x10\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x07\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x88\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x09\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x0c\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\xa8\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x0f\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x0c\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x1b\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\xb6\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa2\x00\x89\x00\xff\xff\x61\x00\x42\x00\x42\x00\x8b\x00\xa6\x00\x61\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\xa5\x00\x42\x00\x8e\x00\x91\x00\x9d\x00\x42\x00\xff\xff\x3d\x00\xff\xff\xff\xff\x33\x00\x3d\x00\xab\x00\xad\x00\xff\xff\xff\xff\x42\x00\x42\x00\xff\xff\x93\x00\x3d\x00\x3d\x00\x39\x00\x04\x00\x26\x00\x42\x00\x3d\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x61\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x61\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x61\x00\xff\xff\xff\xff\xff\xff\x61\x00\x00\x00\x61\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa8\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x9c\x00\x0c\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x58\x00\x0b\x00\xb4\x00\xb4\x00\xb4\x00\x59\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\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\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa8\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x9c\x00\x0c\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x58\x00\x0b\x00\xb4\x00\xb4\x00\xb4\x00\x59\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\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\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa8\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x9c\x00\x0c\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x58\x00\x0b\x00\xb4\x00\xb4\x00\xb4\x00\x59\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\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\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa8\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x9c\x00\x0c\x00\x20\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x58\x00\x0b\x00\xb4\x00\xb4\x00\xb4\x00\x59\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\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\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa8\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x9c\x00\x0c\x00\x23\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x58\x00\x0b\x00\xb4\x00\xb4\x00\xb4\x00\x59\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\x56\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\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xb6\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb5\x00\x0f\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x97\x00\x0d\x00\x9a\x00\x9a\x00\x9a\x00\x98\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x35\x00\x35\x00\x36\x00\x36\x00\x35\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa8\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x9c\x00\x0c\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x58\x00\x0b\x00\xb4\x00\xb4\x00\xb4\x00\x59\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\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\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x3d\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa8\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x9c\x00\x0c\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x58\x00\x0b\x00\xb4\x00\xb4\x00\xb4\x00\x59\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\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\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\xff\xff\xff\xff\x42\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\x00\x00\x4e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa8\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x9c\x00\x0c\x00\x20\x00\x94\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x58\x00\x0b\x00\xb4\x00\xb4\x00\xb4\x00\x59\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\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\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\x00\x00\x67\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa8\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x9c\x00\x0c\x00\x57\x00\x8a\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x58\x00\x0b\x00\xb4\x00\xb4\x00\xb4\x00\x59\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\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\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\x00\x00\x4d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa8\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x9c\x00\x0c\x00\xa3\x00\x96\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x58\x00\x0b\x00\xb4\x00\xb4\x00\xb4\x00\x59\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\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\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa8\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x9c\x00\x0c\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x58\x00\x0b\x00\xb4\x00\xb4\x00\xb4\x00\x59\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\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\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\xff\xff\xff\xff\x66\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\x00\x00\x7b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa8\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x9c\x00\x0c\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x58\x00\x0b\x00\xb4\x00\xb4\x00\xb4\x00\x59\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\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\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x45\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa8\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x9c\x00\x0c\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x58\x00\x0b\x00\xb4\x00\xb4\x00\xb4\x00\x59\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\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\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x46\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa8\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x9c\x00\x0c\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x58\x00\x0b\x00\xb4\x00\xb4\x00\xb4\x00\x59\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\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\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\x00\x00\x47\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa8\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x9c\x00\x0c\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x58\x00\x0b\x00\xb4\x00\xb4\x00\xb4\x00\x59\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\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\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\x48\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa8\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x9c\x00\x0c\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x58\x00\x0b\x00\xb4\x00\xb4\x00\xb4\x00\x59\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\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\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x49\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa8\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x9c\x00\x0c\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x58\x00\x0b\x00\xb4\x00\xb4\x00\xb4\x00\x59\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\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\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa8\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x9c\x00\x0c\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x58\x00\x0b\x00\xb4\x00\xb4\x00\xb4\x00\x59\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\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\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\x00\x00\x4b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa8\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x9c\x00\x0c\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x58\x00\x0b\x00\xb4\x00\xb4\x00\xb4\x00\x59\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\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\xff\xff\x00\x00\xff\xff\xff\xff\x42\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa8\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x9c\x00\x0c\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x58\x00\x0b\x00\xb4\x00\xb4\x00\xb4\x00\x59\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\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\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\x00\x00\x4d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa8\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x9c\x00\x0c\x00\xa3\x00\x96\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x58\x00\x0b\x00\xb4\x00\xb4\x00\xb4\x00\x59\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\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\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa8\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x9c\x00\x0c\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x58\x00\x0b\x00\xb4\x00\xb4\x00\xb4\x00\x59\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\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\xff\xff\x00\x00\xff\xff\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x50\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa8\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x9c\x00\x0c\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x58\x00\x0b\x00\xb4\x00\xb4\x00\xb4\x00\x59\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\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\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa8\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x9c\x00\x0c\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x58\x00\x0b\x00\xb4\x00\xb4\x00\xb4\x00\x59\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\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\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\x42\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa8\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x9c\x00\x0c\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x58\x00\x0b\x00\xb4\x00\xb4\x00\xb4\x00\x59\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\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\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa8\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x9c\x00\x0c\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x58\x00\x0b\x00\xb4\x00\xb4\x00\xb4\x00\x59\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\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\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x88\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x87\x00\x09\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x83\x00\x0a\x00\x86\x00\x86\x00\x86\x00\x84\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x54\x00\x5b\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x11\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5b\x00\x05\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x56\x00\x06\x00\x60\x00\x60\x00\x60\x00\x55\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x9c\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\x58\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\x54\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x11\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5b\x00\x05\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x56\x00\x06\x00\x60\x00\x60\x00\x60\x00\x55\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x62\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\x5c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x53\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x32\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x10\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x62\x00\x07\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x5c\x00\x08\x00\x65\x00\x65\x00\x65\x00\x5d\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\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\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\xff\xff\xff\xff\x42\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa8\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x9c\x00\x0c\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x58\x00\x0b\x00\xb4\x00\xb4\x00\xb4\x00\x59\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\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\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa8\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x9c\x00\x0c\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x58\x00\x0b\x00\xb4\x00\xb4\x00\xb4\x00\x59\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\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\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x67\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa8\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x9c\x00\x0c\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x58\x00\x0b\x00\xb4\x00\xb4\x00\xb4\x00\x59\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\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\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\x68\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa8\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x9c\x00\x0c\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x58\x00\x0b\x00\xb4\x00\xb4\x00\xb4\x00\x59\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\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\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x69\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa8\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x9c\x00\x0c\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x58\x00\x0b\x00\xb4\x00\xb4\x00\xb4\x00\x59\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\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\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa8\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x9c\x00\x0c\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x58\x00\x0b\x00\xb4\x00\xb4\x00\xb4\x00\x59\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\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\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\x00\x00\x7b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa8\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x9c\x00\x0c\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x58\x00\x0b\x00\xb4\x00\xb4\x00\xb4\x00\x59\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\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\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\x7c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa8\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x9c\x00\x0c\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x58\x00\x0b\x00\xb4\x00\xb4\x00\xb4\x00\x59\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\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\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa8\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x9c\x00\x0c\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x58\x00\x0b\x00\xb4\x00\xb4\x00\xb4\x00\x59\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x87\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\x83\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa8\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x9c\x00\x0c\x00\x57\x00\x8c\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x58\x00\x0b\x00\xb4\x00\xb4\x00\xb4\x00\x59\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xb5\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\x97\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\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\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa8\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x9c\x00\x0c\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x58\x00\x0b\x00\xb4\x00\xb4\x00\xb4\x00\x59\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\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\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\x9e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa8\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x9c\x00\x0c\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x58\x00\x0b\x00\xb4\x00\xb4\x00\xb4\x00\x59\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\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\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x00\x00\x00\x00\x9f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa8\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x9c\x00\x0c\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x58\x00\x0b\x00\xb4\x00\xb4\x00\xb4\x00\x59\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\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\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\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\xa0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa8\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x9c\x00\x0c\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x58\x00\x0b\x00\xb4\x00\xb4\x00\xb4\x00\x59\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x6e\x00\x67\x00\x6e\x00\x74\x00\x65\x00\x6e\x00\x66\x00\x6b\x00\x66\x00\x6e\x00\x64\x00\x3e\x00\x2d\x00\x82\x00\x96\x00\xa4\x00\xa5\x00\x92\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x82\x00\x80\x00\xa3\x00\x28\x00\x29\x00\x2a\x00\x3e\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\xa6\x00\xad\x00\xa1\x00\xaf\x00\x82\x00\xa4\x00\x82\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x91\x00\x86\x00\x97\x00\x88\x00\x89\x00\x8a\x00\x81\x00\x82\x00\x81\x00\x75\x00\x73\x00\x75\x00\x73\x00\x73\x00\x6f\x00\x73\x00\x6d\x00\x69\x00\x69\x00\x65\x00\x99\x00\x65\x00\xa7\x00\xa8\x00\x65\x00\x63\x00\x63\x00\x5b\x00\x5c\x00\x5d\x00\x61\x00\x5f\x00\x2d\x00\x6f\x00\x73\x00\x2f\x00\x69\x00\x2d\x00\x66\x00\x2d\x00\x2d\x00\x69\x00\x74\x00\x62\x00\x61\x00\x68\x00\x6c\x00\x68\x00\x6c\x00\x75\x00\x72\x00\xb5\x00\x92\x00\x75\x00\x6f\x00\xb5\x00\x3e\x00\x61\x00\x6e\x00\x7b\x00\x7c\x00\x7d\x00\x6e\x00\x70\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\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\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\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\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\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\x09\x00\x0a\x00\x3d\x00\x6d\x00\x0d\x00\x22\x00\x72\x00\x70\x00\x6f\x00\x61\x00\x27\x00\x63\x00\x64\x00\x65\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x6e\x00\x6c\x00\x61\x00\x74\x00\x20\x00\x70\x00\x22\x00\x23\x00\x73\x00\x77\x00\x75\x00\x76\x00\x28\x00\x29\x00\x65\x00\x74\x00\x2c\x00\x74\x00\x20\x00\x74\x00\x65\x00\x65\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\xff\xff\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\x7c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x66\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6e\x00\x5b\x00\x5c\x00\x5d\x00\x72\x00\xff\xff\x74\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\x6e\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\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\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\x20\x00\xff\xff\x22\x00\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\x2c\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\x3b\x00\x3c\x00\xff\xff\x3e\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\x5b\x00\x5c\x00\x5d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x66\x00\xff\xff\xff\xff\x69\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\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\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\x20\x00\xff\xff\x22\x00\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\x2c\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\x3b\x00\x3c\x00\xff\xff\x3e\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\x5b\x00\x5c\x00\x5d\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\x6e\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\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\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\x20\x00\xff\xff\x22\x00\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\x2c\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\x3b\x00\x3c\x00\xff\xff\x3e\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\x5b\x00\x5c\x00\x5d\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\x76\x00\xff\xff\xff\xff\xff\xff\xff\xff\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\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\x20\x00\xff\xff\x22\x00\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\x2c\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\x3b\x00\x3c\x00\xff\xff\x3e\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\x5b\x00\x5c\x00\x5d\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\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\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\x20\x00\xff\xff\x22\x00\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\x2c\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\x3b\x00\x3c\x00\xff\xff\x3e\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\x5b\x00\x5c\x00\x5d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x66\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\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\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\x20\x00\xff\xff\x22\x00\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\x2c\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\x3b\x00\x3c\x00\xff\xff\x3e\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\x5b\x00\x5c\x00\x5d\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\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\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\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\x20\x00\xff\xff\x22\x00\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\x2c\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\x3b\x00\x3c\x00\xff\xff\x3e\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\x5b\x00\x5c\x00\x5d\x00\xff\xff\x5f\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\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\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\x20\x00\xff\xff\x22\x00\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\x2c\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\x3b\x00\x3c\x00\xff\xff\x3e\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\x5b\x00\x5c\x00\x5d\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\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\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\x20\x00\xff\xff\x22\x00\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\x2c\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\x3b\x00\x3c\x00\xff\xff\x3e\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\x5b\x00\x5c\x00\x5d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x65\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\x7a\x00\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\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\x20\x00\xff\xff\x22\x00\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\x2c\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\x3b\x00\x3c\x00\xff\xff\x3e\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\x5b\x00\x5c\x00\x5d\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\x6b\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\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\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\x20\x00\xff\xff\x22\x00\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\x2c\x00\x2d\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\x3b\x00\x3c\x00\xff\xff\x3e\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\x5b\x00\x5c\x00\x5d\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\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\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\x20\x00\xff\xff\x22\x00\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\x2c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x31\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\xff\xff\x3e\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\x5b\x00\x5c\x00\x5d\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\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\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\x20\x00\xff\xff\x22\x00\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\x2c\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\x3b\x00\x3c\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\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\xff\xff\xff\xff\x22\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\x5c\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\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x2d\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\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\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x2d\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\x7d\x00\xff\xff\xff\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\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\x20\x00\xff\xff\x22\x00\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\x2c\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\x3b\x00\x3c\x00\xff\xff\x3e\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\x5b\x00\x5c\x00\x5d\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\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\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\x20\x00\xff\xff\x22\x00\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\x2c\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\x3b\x00\x3c\x00\xff\xff\x3e\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\x5b\x00\x5c\x00\x5d\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\x70\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\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\x20\x00\xff\xff\x22\x00\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\x2c\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\x3b\x00\x3c\x00\xff\xff\x3e\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\x5b\x00\x5c\x00\x5d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x64\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\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\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\x20\x00\xff\xff\x22\x00\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\x2c\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\x3b\x00\x3c\x00\xff\xff\x3e\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\x5b\x00\x5c\x00\x5d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x62\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x69\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\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\x20\x00\xff\xff\x22\x00\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\x2c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x32\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\xff\xff\x3e\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\x5b\x00\x5c\x00\x5d\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\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\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\x20\x00\xff\xff\x22\x00\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\x2c\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\x3b\x00\x3c\x00\xff\xff\x3e\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\x5b\x00\x5c\x00\x5d\x00\xff\xff\x5f\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\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\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\x20\x00\xff\xff\x22\x00\x23\x00\x24\x00\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\x2c\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\x3b\x00\x3c\x00\xff\xff\x3e\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\x5b\x00\x5c\x00\x5d\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\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\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\x20\x00\xff\xff\x22\x00\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\x2c\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\x3b\x00\x3c\x00\xff\xff\x3e\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\x5b\x00\x5c\x00\x5d\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\x74\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\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\x20\x00\xff\xff\x22\x00\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\x2c\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\x3b\x00\x3c\x00\xff\xff\x3e\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\x5b\x00\x5c\x00\x5d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x63\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\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\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\x20\x00\xff\xff\x22\x00\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\x2c\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\x3b\x00\x3c\x00\xff\xff\x3e\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\x5b\x00\x5c\x00\x5d\x00\xff\xff\xff\xff\xff\xff\x61\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\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\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\x20\x00\xff\xff\x22\x00\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\x2c\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\x3b\x00\x3c\x00\xff\xff\x3e\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\x5b\x00\x5c\x00\x5d\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\x72\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\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\x20\x00\xff\xff\x22\x00\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\x2c\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\x3b\x00\x3c\x00\xff\xff\x3e\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\x5b\x00\x5c\x00\x5d\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\x74\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\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\x20\x00\xff\xff\x22\x00\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\x2c\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\x3b\x00\x3c\x00\xff\xff\x3e\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\x5b\x00\x5c\x00\x5d\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\x78\x00\xff\xff\xff\xff\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\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\x20\x00\xff\xff\x22\x00\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\x2c\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\x3b\x00\x3c\x00\xff\xff\x3e\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\x5b\x00\x5c\x00\x5d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x65\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\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\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\x20\x00\xff\xff\x22\x00\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\x2c\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\x3b\x00\x3c\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\x5f\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\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\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\x20\x00\xff\xff\x22\x00\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\x2c\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\x3b\x00\x3c\x00\xff\xff\x3e\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\x5b\x00\x5c\x00\x5d\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\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\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\x20\x00\xff\xff\x22\x00\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\x2c\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\x3b\x00\x3c\x00\xff\xff\x3e\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\x5b\x00\x5c\x00\x5d\x00\xff\xff\x5f\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\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\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\x20\x00\xff\xff\x22\x00\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\x2c\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\x3b\x00\x3c\x00\xff\xff\x3e\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\x5b\x00\x5c\x00\x5d\x00\xff\xff\x5f\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\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\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\x20\x00\xff\xff\x22\x00\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\x2c\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\x3b\x00\x3c\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\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\x20\x00\xff\xff\x22\x00\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\x2c\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\x3b\x00\x3c\x00\xff\xff\x3e\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\x5b\x00\x5c\x00\x5d\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\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\x22\x00\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\x2c\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\x3b\x00\x3c\x00\xff\xff\x3e\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\x5b\x00\x5c\x00\x5d\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\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\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\x20\x00\xff\xff\x22\x00\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\x2c\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\x3b\x00\x3c\x00\xff\xff\x3e\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\x5b\x00\x5c\x00\x5d\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\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\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\x20\x00\xff\xff\x22\x00\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\x2c\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\x3b\x00\x3c\x00\xff\xff\x3e\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\x5b\x00\x5c\x00\x5d\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\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\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\x20\x00\xff\xff\x22\x00\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\x2c\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\x3b\x00\x3c\x00\xff\xff\x3e\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\x5b\x00\x5c\x00\x5d\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\x70\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\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\x20\x00\xff\xff\x22\x00\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\x2c\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\x3b\x00\x3c\x00\xff\xff\x3e\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\x5b\x00\x5c\x00\x5d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x69\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\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\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\x20\x00\xff\xff\x22\x00\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\x2c\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\x3b\x00\x3c\x00\xff\xff\x3e\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\x5b\x00\x5c\x00\x5d\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\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\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\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\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\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\x00\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\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\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\xff\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00"#+ "\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x67\x00\x65\x00\x74\x00\x65\x00\x74\x00\x74\x00\x74\x00\x65\x00\x74\x00\x61\x00\x72\x00\x70\x00\x6f\x00\x95\x00\xb5\x00\x92\x00\xb5\x00\x6d\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x70\x00\x2d\x00\x61\x00\x28\x00\x29\x00\x2a\x00\x6e\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x6e\x00\x77\x00\x6e\x00\x75\x00\x6c\x00\x6c\x00\x68\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x6f\x00\x68\x00\x61\x00\x2d\x00\x62\x00\x2d\x00\x69\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x2f\x00\x73\x00\x6f\x00\x2d\x00\x61\x00\x63\x00\x65\x00\x63\x00\x69\x00\x69\x00\x61\x00\x65\x00\x63\x00\x64\x00\x65\x00\x5b\x00\x5c\x00\x5d\x00\x20\x00\x5f\x00\x65\x00\x6c\x00\x6f\x00\x6d\x00\x74\x00\x70\x00\x66\x00\x73\x00\x73\x00\x69\x00\x75\x00\x76\x00\x75\x00\x73\x00\x3d\x00\x73\x00\x73\x00\xa1\x00\x72\x00\x75\x00\xa4\x00\x75\x00\xa3\x00\x97\x00\xa2\x00\x81\x00\x96\x00\x7b\x00\x7c\x00\x7d\x00\x99\x00\x80\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\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\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\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\x00\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\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\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\x09\x00\x0a\x00\xb5\x00\x82\x00\x0d\x00\x22\x00\x81\x00\x82\x00\x82\x00\x82\x00\x27\x00\x91\x00\xad\x00\x80\x00\xaf\x00\xa4\x00\xa5\x00\x86\x00\x82\x00\x88\x00\x89\x00\x8a\x00\x92\x00\x20\x00\x3e\x00\x22\x00\x23\x00\x2d\x00\x64\x00\x6e\x00\x6e\x00\x28\x00\x29\x00\xa7\x00\xa8\x00\x2c\x00\x99\x00\x66\x00\x6b\x00\x66\x00\x6e\x00\x65\x00\xa6\x00\x6e\x00\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\xff\xff\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x66\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6e\x00\x5b\x00\x5c\x00\x5d\x00\x72\x00\xff\xff\x74\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\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\x20\x00\xff\xff\x22\x00\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\x2c\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\x3b\x00\x3c\x00\xff\xff\x3e\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\x5b\x00\x5c\x00\x5d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x69\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\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\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\x20\x00\xff\xff\x22\x00\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\x2c\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\x3b\x00\x3c\x00\xff\xff\x3e\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\x5b\x00\x5c\x00\x5d\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\x70\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\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\x20\x00\xff\xff\x22\x00\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\x2c\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\x3b\x00\x3c\x00\xff\xff\x3e\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\x5b\x00\x5c\x00\x5d\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\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\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\x20\x00\xff\xff\x22\x00\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\x2c\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\x3b\x00\x3c\x00\xff\xff\x3e\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\x5b\x00\x5c\x00\x5d\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\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\x22\x00\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\x2c\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\x3b\x00\x3c\x00\xff\xff\x3e\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\x5b\x00\x5c\x00\x5d\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\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\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\x20\x00\xff\xff\x22\x00\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\x2c\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\x3b\x00\x3c\x00\xff\xff\x3e\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\x5b\x00\x5c\x00\x5d\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\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\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\x20\x00\xff\xff\x22\x00\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\x2c\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\x3b\x00\x3c\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\x5f\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\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\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\x20\x00\xff\xff\x22\x00\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\x2c\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\x3b\x00\x3c\x00\xff\xff\x3e\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\x5b\x00\x5c\x00\x5d\x00\xff\xff\x5f\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\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\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\x20\x00\xff\xff\x22\x00\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\x2c\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\x3b\x00\x3c\x00\xff\xff\x3e\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\x5b\x00\x5c\x00\x5d\x00\xff\xff\x5f\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\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\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\x20\x00\xff\xff\x22\x00\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\x2c\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\x3b\x00\x3c\x00\xff\xff\x3e\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\x5b\x00\x5c\x00\x5d\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\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\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\x20\x00\xff\xff\x22\x00\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\x2c\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\x3b\x00\x3c\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\x5f\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\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\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\x20\x00\xff\xff\x22\x00\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\x2c\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\x3b\x00\x3c\x00\xff\xff\x3e\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\x5b\x00\x5c\x00\x5d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x65\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\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\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\x20\x00\xff\xff\x22\x00\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\x2c\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\x3b\x00\x3c\x00\xff\xff\x3e\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\x5b\x00\x5c\x00\x5d\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\x78\x00\xff\xff\xff\xff\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\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\x20\x00\xff\xff\x22\x00\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\x2c\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\x3b\x00\x3c\x00\xff\xff\x3e\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\x5b\x00\x5c\x00\x5d\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\x74\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\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\x20\x00\xff\xff\x22\x00\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\x2c\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\x3b\x00\x3c\x00\xff\xff\x3e\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\x5b\x00\x5c\x00\x5d\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\x72\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\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\x20\x00\xff\xff\x22\x00\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\x2c\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\x3b\x00\x3c\x00\xff\xff\x3e\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\x5b\x00\x5c\x00\x5d\x00\xff\xff\xff\xff\xff\xff\x61\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\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\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\x20\x00\xff\xff\x22\x00\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\x2c\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\x3b\x00\x3c\x00\xff\xff\x3e\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\x5b\x00\x5c\x00\x5d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x63\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\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\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\x20\x00\xff\xff\x22\x00\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\x2c\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\x3b\x00\x3c\x00\xff\xff\x3e\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\x5b\x00\x5c\x00\x5d\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\x74\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\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\x20\x00\xff\xff\x22\x00\x23\x00\x24\x00\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\x2c\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\x3b\x00\x3c\x00\xff\xff\x3e\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\x5b\x00\x5c\x00\x5d\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\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\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\x20\x00\xff\xff\x22\x00\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\x2c\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\x3b\x00\x3c\x00\xff\xff\x3e\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\x5b\x00\x5c\x00\x5d\x00\xff\xff\x5f\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\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\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\x20\x00\xff\xff\x22\x00\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\x2c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x32\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\xff\xff\x3e\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5b\x00\x5c\x00\x5d\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\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\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\x20\x00\xff\xff\x22\x00\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\x2c\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\x3b\x00\x3c\x00\xff\xff\x3e\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\x5b\x00\x5c\x00\x5d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x62\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x69\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\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\x20\x00\xff\xff\x22\x00\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\x2c\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\x3b\x00\x3c\x00\xff\xff\x3e\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\x5b\x00\x5c\x00\x5d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x64\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\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\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\x20\x00\xff\xff\x22\x00\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\x2c\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\x3b\x00\x3c\x00\xff\xff\x3e\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\x5b\x00\x5c\x00\x5d\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\x70\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\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\x20\x00\xff\xff\x22\x00\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\x2c\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\x3b\x00\x3c\x00\xff\xff\x3e\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\x5b\x00\x5c\x00\x5d\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\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\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\x20\x00\xff\xff\x22\x00\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\x2c\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\x3b\x00\x3c\x00\xff\xff\x3e\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\x5b\x00\x5c\x00\x5d\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\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x2d\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\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\x7d\x00\xff\xff\xff\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x2d\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\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\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\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\xff\xff\xff\xff\x22\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\x5c\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\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\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\x20\x00\xff\xff\x22\x00\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\x2c\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\x3b\x00\x3c\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\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\x20\x00\xff\xff\x22\x00\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\x2c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x31\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\xff\xff\x3e\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\x5b\x00\x5c\x00\x5d\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\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\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\x20\x00\xff\xff\x22\x00\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\x2c\x00\x2d\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\x3b\x00\x3c\x00\xff\xff\x3e\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\x5b\x00\x5c\x00\x5d\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\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\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\x20\x00\xff\xff\x22\x00\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\x2c\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\x3b\x00\x3c\x00\xff\xff\x3e\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\x5b\x00\x5c\x00\x5d\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\x6b\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\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\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\x20\x00\xff\xff\x22\x00\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\x2c\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\x3b\x00\x3c\x00\xff\xff\x3e\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\x5b\x00\x5c\x00\x5d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x65\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\x7a\x00\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\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\x20\x00\xff\xff\x22\x00\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\x2c\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\x3b\x00\x3c\x00\xff\xff\x3e\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\x5b\x00\x5c\x00\x5d\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\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\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\x20\x00\xff\xff\x22\x00\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\x2c\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\x3b\x00\x3c\x00\xff\xff\x3e\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\x5b\x00\x5c\x00\x5d\x00\xff\xff\x5f\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\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\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\x20\x00\xff\xff\x22\x00\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\x2c\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\x3b\x00\x3c\x00\xff\xff\x3e\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\x5b\x00\x5c\x00\x5d\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\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\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\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\x20\x00\xff\xff\x22\x00\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\x2c\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\x3b\x00\x3c\x00\xff\xff\x3e\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\x5b\x00\x5c\x00\x5d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x66\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\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\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\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\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\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\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\x20\x00\xff\xff\x22\x00\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\x2c\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\x3b\x00\x3c\x00\xff\xff\x3e\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\x5b\x00\x5c\x00\x5d\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\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\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\x20\x00\xff\xff\x22\x00\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\x2c\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\x3b\x00\x3c\x00\xff\xff\x3e\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\x5b\x00\x5c\x00\x5d\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\x76\x00\xff\xff\xff\xff\xff\xff\xff\xff\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\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\x20\x00\xff\xff\x22\x00\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\x2c\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\x3b\x00\x3c\x00\xff\xff\x3e\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\x5b\x00\x5c\x00\x5d\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\x6e\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\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\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\x20\x00\xff\xff\x22\x00\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\x2c\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\x3b\x00\x3c\x00\xff\xff\x3e\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\x5b\x00\x5c\x00\x5d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x66\x00\xff\xff\xff\xff\x69\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\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\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\x20\x00\xff\xff\x22\x00\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\x2c\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\x3b\x00\x3c\x00\xff\xff\x3e\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\x5b\x00\x5c\x00\x5d\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\x6e\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\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\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\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\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\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\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\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\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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#- "\x5e\x00\xff\xff\xff\xff\xff\xff\x7d\x00\x7d\x00\x58\x00\x7d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x1e\x00\x07\x00\x1e\x00\x07\x00\x22\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x22\x00\x5e\x00\x5e\x00\x22\x00\x5e\x00\x22\x00\xff\xff\x5e\x00\x5e\x00\x5e\x00\x5e\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\xff\xff\x4b\x00\x4c\x00\x4e\x00\x4e\x00\x4e\x00\x50\x00\x51\x00\x55\x00\x4b\x00\x4c\x00\x55\x00\x55\x00\x50\x00\x22\x00\x22\x00\x51\x00\x58\x00\x55\x00\xff\xff\xff\xff\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\xff\xff\x5e\x00\x5e\x00\x5e\x00\xff\xff\xff\xff\x5e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5e\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x22\x00\x5e\x00\x5e\x00\x22\x00\x5e\x00\x5e\x00\x5e\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\xff\xff\xff\xff\xff\xff\x55\x00\x4e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"#+ "\x51\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\x61\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x95\x00\x51\x00\x51\x00\x51\x00\x51\x00\x95\x00\x51\x00\x51\x00\x95\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\x33\x00\xff\xff\xff\xff\x51\x00\xff\xff\xff\xff\xff\xff\xff\xff\x51\x00\xff\xff\xff\xff\x51\x00\xff\xff\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x52\x00\xff\xff\x5a\x00\x5f\x00\x5e\x00\x95\x00\x95\x00\x57\x00\x5a\x00\x5a\x00\x63\x00\x64\x00\x5a\x00\x5e\x00\x5f\x00\x61\x00\x61\x00\x61\x00\x63\x00\x64\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\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\x51\x00\x51\x00\x51\x00\x51\x00\xff\xff\xff\xff\xff\xff\x52\x00\x82\x00\x85\x00\x82\x00\x85\x00\x52\x00\x52\x00\x51\x00\x95\x00\x51\x00\x95\x00\x51\x00\x51\x00\x95\x00\x51\x00\x51\x00\x51\x00\x51\x00\x95\x00\x51\x00\x95\x00\xb3\x00\x99\x00\xb3\x00\x99\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x95\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x33\x00\x57\x00\x33\x00\x33\x00\xff\xff"# -alex_accept = Data.Array.listArray (0 :: Int, 168)+alex_accept = Data.Array.listArray (0 :: Int, 183) [ AlexAccNone , AlexAccNone , AlexAccNone@@ -66,15 +66,23 @@ , AlexAccNone , AlexAccNone , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone , AlexAcc 48 , AlexAcc 47 , AlexAcc 46 , AlexAcc 45 , AlexAccNone , AlexAccNone+ , AlexAcc 44 , AlexAccNone , AlexAccNone , AlexAccNone+ , AlexAcc 43 , AlexAccNone , AlexAccNone , AlexAccNone@@ -85,16 +93,41 @@ , AlexAccNone , AlexAccNone , AlexAccNone- , AlexAcc 44 , AlexAccNone , AlexAccNone- , AlexAccNone- , AlexAcc 43+ , AlexAccSkip+ , AlexAccSkip+ , AlexAccSkip+ , AlexAccSkip , AlexAcc 42 , AlexAcc 41 , AlexAcc 40 , AlexAcc 39+ , AlexAcc 38+ , AlexAcc 37+ , AlexAcc 36+ , AlexAcc 35 , AlexAccNone+ , AlexAcc 34+ , AlexAcc 33+ , AlexAcc 32+ , AlexAcc 31+ , AlexAcc 30+ , AlexAcc 29+ , AlexAcc 28+ , AlexAcc 27+ , AlexAcc 26+ , AlexAcc 25+ , AlexAcc 24+ , AlexAcc 23+ , AlexAcc 22+ , AlexAcc 21+ , AlexAcc 20+ , AlexAcc 19+ , AlexAcc 18+ , AlexAcc 17+ , AlexAcc 16+ , AlexAcc 15 , AlexAccNone , AlexAccNone , AlexAccNone@@ -112,14 +145,12 @@ , AlexAccNone , AlexAccNone , AlexAccNone- , AlexAcc 38- , AlexAcc 37- , AlexAcc 36- , AlexAcc 35- , AlexAcc 34 , AlexAccNone- , AlexAccNone- , AlexAccNone+ , AlexAcc 14+ , AlexAcc 13+ , AlexAcc 12+ , AlexAcc 11+ , AlexAcc 10 , AlexAccNone , AlexAccNone , AlexAccNone@@ -136,40 +167,11 @@ , AlexAccNone , AlexAccNone , AlexAccNone- , AlexAcc 33- , AlexAcc 32- , AlexAcc 31- , AlexAcc 30- , AlexAcc 29- , AlexAcc 28- , AlexAcc 27- , AlexAcc 26- , AlexAcc 25- , AlexAcc 24- , AlexAcc 23- , AlexAcc 22- , AlexAcc 21- , AlexAcc 20- , AlexAcc 19- , AlexAcc 18- , AlexAcc 17- , AlexAcc 16- , AlexAccNone- , AlexAcc 15- , AlexAcc 14- , AlexAcc 13- , AlexAcc 12- , AlexAcc 11- , AlexAcc 10 , AlexAcc 9 , AlexAcc 8 , AlexAcc 7 , AlexAcc 6 , AlexAcc 5- , AlexAccSkip- , AlexAccSkip- , AlexAccSkip- , AlexAccSkip , AlexAccNone , AlexAccNone , AlexAccNone@@ -179,13 +181,13 @@ , AlexAccNone , AlexAccNone , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone , AlexAcc 4 , AlexAccNone , AlexAccNone- , AlexAcc 3- , AlexAcc 2- , AlexAcc 1- , AlexAcc 0 , AlexAccNone , AlexAccNone , AlexAccNone@@ -200,6 +202,10 @@ , AlexAccNone , AlexAccNone , AlexAccNone+ , AlexAcc 3+ , AlexAcc 2+ , AlexAcc 1+ , AlexAcc 0 , AlexAccNone , AlexAccNone , AlexAccNone@@ -213,6 +219,15 @@ , AlexAccNone , AlexAccNone , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone ] alex_actions = Data.Array.array (0 :: Int, 49)@@ -222,18 +237,18 @@ , (45,alex_action_4) , (44,alex_action_4) , (43,alex_action_3)- , (42,alex_action_4)- , (41,alex_action_4)- , (40,alex_action_4)- , (39,alex_action_4)- , (38,alex_action_4)- , (37,alex_action_4)- , (36,alex_action_4)- , (35,alex_action_4)- , (34,alex_action_4)- , (33,alex_action_7)- , (32,alex_action_5)- , (31,alex_action_4)+ , (42,alex_action_3)+ , (41,alex_action_3)+ , (40,alex_action_3)+ , (39,alex_action_3)+ , (38,alex_action_3)+ , (37,alex_action_3)+ , (36,alex_action_3)+ , (35,alex_action_3)+ , (34,alex_action_3)+ , (33,alex_action_3)+ , (32,alex_action_3)+ , (31,alex_action_3) , (30,alex_action_4) , (29,alex_action_4) , (28,alex_action_4)@@ -247,18 +262,18 @@ , (20,alex_action_4) , (19,alex_action_4) , (18,alex_action_4)- , (17,alex_action_3)- , (16,alex_action_3)- , (15,alex_action_3)- , (14,alex_action_3)- , (13,alex_action_3)- , (12,alex_action_3)- , (11,alex_action_3)- , (10,alex_action_3)- , (9,alex_action_3)- , (8,alex_action_3)- , (7,alex_action_3)- , (6,alex_action_3)+ , (17,alex_action_4)+ , (16,alex_action_5)+ , (15,alex_action_7)+ , (14,alex_action_4)+ , (13,alex_action_4)+ , (12,alex_action_4)+ , (11,alex_action_4)+ , (10,alex_action_4)+ , (9,alex_action_4)+ , (8,alex_action_4)+ , (7,alex_action_4)+ , (6,alex_action_4) , (5,alex_action_3) , (4,alex_action_4) , (3,alex_action_4)@@ -610,65 +625,70 @@ -- | The keywords and symbols of the language organized as binary search tree. resWords :: BTree resWords =- b "\\" 50- (b "/\\" 25- (b "#unset-option" 13+ b "TOP" 56+ (b "0\7522" 28+ (b "#variable" 14 (b "#define" 7 (b "#compute-nf" 4 (b "#check" 2 (b "#assume" 1 N N) (b "#compute" 3 N N)) (b "#def" 6 (b "#compute-whnf" 5 N N) N))- (b "#postulate" 10- (b "#lang" 9 (b "#end" 8 N N) N)- (b "#set-option" 12 (b "#section" 11 N N) N)))- (b "*" 19- (b "$extract$" 16- (b "#variables" 15 (b "#variable" 14 N N) N)- (b ")" 18 (b "(" 17 N N) N))- (b "," 22- (b "*\8321" 21 (b "*_1" 20 N N) N) (b "/" 24 (b "->" 23 N N) N))))- (b "=" 38- (b ":" 32- (b "1_2" 29- (b "0\8322" 27 (b "0_2" 26 N N) (b "1" 28 N N))- (b "2" 31 (b "1\8322" 30 N N) N))- (b "<" 35- (b ";" 34 (b ":=" 33 N N) N) (b "<|" 37 (b "<=" 36 N N) N)))- (b "Sigma" 44- (b ">" 41- (b "=_{" 40 (b "===" 39 N N) N) (b "CUBE" 43 (b "BOT" 42 N N) N))- (b "U" 47- (b "TOPE" 46 (b "TOP" 45 N N) N) (b "[" 49 (b "Unit" 48 N N) N)))))- (b "uninv_op" 75- (b "inv_op" 63- (b "as" 57- (b "_b" 54- (b "]" 52 (b "\\/" 51 N N) (b "_#" 53 N N))- (b "_op" 56 (b "_id" 55 N N) N))- (b "flip\7506\7510" 60- (b "flip_op" 59 (b "first" 58 N N) N)- (b "in" 62 (b "idJ" 61 N N) N)))- (b "refl" 69- (b "mod" 66- (b "let" 65 (b "inv\7506\7510" 64 N N) N)- (b "recOR" 68 (b "recBOT" 67 N N) N))- (b "second" 72- (b "rzk-1" 71 (b "refl_{" 70 N N) N)- (b "unflip\7506\7510" 74 (b "unflip_op" 73 N N) N))))- (b "\7506\7510" 88- (b "|>" 82- (b "{" 79- (b "unit" 77 (b "uninv\7506\7510" 76 N N) (b "uses" 78 N N))- (b "|->" 81 (b "|" 80 N N) N))- (b "\931" 85- (b "\215" 84 (b "}" 83 N N) N)- (b "\960\8322" 87 (b "\960\8321" 86 N N) N)))- (b "\8801" 94- (b "\8721" 91- (b "\8614" 90 (b "\8594" 89 N N) N)- (b "\8744" 93 (b "\8743" 92 N N) N))- (b "\8869" 97- (b "\8868" 96 (b "\8804" 95 N N) N)- (b "\9839" 99 (b "\9837" 98 N N) N)))))+ (b "#section" 11+ (b "#lang" 9 (b "#end" 8 N N) (b "#postulate" 10 N N))+ (b "#unset-option" 13 (b "#set-option" 12 N N) N)))+ (b "*\8321" 21+ (b ")" 18+ (b "$extract$" 16 (b "#variables" 15 N N) (b "(" 17 N N))+ (b "*_1" 20 (b "*" 19 N N) N))+ (b "/\\" 25+ (b "->" 23 (b "," 22 N N) (b "/" 24 N N))+ (b "0_I" 27 (b "0_2" 26 N N) N))))+ (b ":\7506\7510" 42+ (b "2" 35+ (b "1_I" 32+ (b "1" 30 (b "0\8322" 29 N N) (b "1_2" 31 N N))+ (b "1\8322" 34 (b "1\7522" 33 N N) N))+ (b ":_b" 39+ (b ":=" 37 (b ":" 36 N N) (b ":_#" 38 N N))+ (b ":_op" 41 (b ":_id" 40 N N) N)))+ (b "===" 49+ (b "<" 46+ (b ":\9839" 44 (b ":\9837" 43 N N) (b ";" 45 N N))+ (b "=" 48 (b "<=" 47 N N) N))+ (b "CUBE" 53+ (b ">" 51 (b "=_{" 50 N N) (b "BOT" 52 N N))+ (b "Sigma" 55 (b "II" 54 N N) N)))))+ (b "unflip_op" 84+ (b "flip_op" 70+ (b "]" 63+ (b "[" 60+ (b "U" 58 (b "TOPE" 57 N N) (b "Unit" 59 N N))+ (b "\\/" 62 (b "\\" 61 N N) N))+ (b "_op" 67+ (b "_b" 65 (b "_#" 64 N N) (b "_id" 66 N N))+ (b "first" 69 (b "as" 68 N N) N)))+ (b "mod" 77+ (b "inv_op" 74+ (b "idJ" 72 (b "flip\7506\7510" 71 N N) (b "in" 73 N N))+ (b "let" 76 (b "inv\7506\7510" 75 N N) N))+ (b "refl_{" 81+ (b "recOR" 79 (b "recBOT" 78 N N) (b "refl" 80 N N))+ (b "second" 83 (b "rzk-1" 82 N N) N))))+ (b "\7506\7510" 98+ (b "|" 91+ (b "unit" 88+ (b "uninv_op" 86+ (b "unflip\7506\7510" 85 N N) (b "uninv\7506\7510" 87 N N))+ (b "{" 90 (b "uses" 89 N N) N))+ (b "\931" 95+ (b "}" 93 (b "|->" 92 N N) (b "\215" 94 N N))+ (b "\960\8322" 97 (b "\960\8321" 96 N N) N)))+ (b "\8804" 105+ (b "\8743" 102+ (b "\8614" 100 (b "\8594" 99 N N) (b "\8721" 101 N N))+ (b "\8801" 104 (b "\8744" 103 N N) N))+ (b "\9837" 108+ (b "\8869" 107 (b "\8868" 106 N N) N)+ (b "\120128" 110 (b "\9839" 109 N N) N))))) where b s n = B bs (TS bs n) where
− src/Language/Rzk/Syntax/Lex.x
@@ -1,315 +0,0 @@--- -*- haskell -*- File generated by the BNF Converter (bnfc 2.9.6.2).---- Lexer definition for use with Alex 3-{-{-# OPTIONS -Wno-incomplete-patterns #-}-{-# OPTIONS_GHC -w #-}--{-# LANGUAGE PatternSynonyms #-}--module Language.Rzk.Syntax.Lex where--import Prelude--import qualified Data.Text-import qualified Data.Bits-import Data.Char (ord)-import Data.Function (on)-import Data.Word (Word8)-}---- Predefined character classes--$c = [A-Z\192-\222] # [\215] -- capital isolatin1 letter (215 = \times)-$s = [a-z\223-\255] # [\247] -- small isolatin1 letter (247 = \div )-$l = [$c $s] -- letter-$d = [0-9] -- digit-$i = [$l $d _ '] -- identifier character-$u = [. \n] -- universal: any character---- Symbols and non-identifier-like reserved words--@rsyms = \ᵒ \ᵖ | "inv" \ᵒ \ᵖ | "uninv" \ᵒ \ᵖ | "flip" \ᵒ \ᵖ | "unflip" \ᵒ \ᵖ | \Σ | \π \₁ | \π \₂ | \# "lang" | \; | "rzk" \- "1" | \# "set" \- "option" | \= | \# "unset" \- "option" | \# "check" | \: | \# "compute" | \# "compute" \- "whnf" | \# "compute" \- "nf" | \# "postulate" | \# "assume" | \# "variable" | \# "variables" | \# "section" | \# "end" | \# "define" | \: \= | \# "def" | \( | \) | \, | \| | \{ | \} | \↦ | \♭ | \_ "b" | \♯ | \_ \# | \_ "op" | \_ "id" | \/ | "1" | \* \₁ | "2" | "0" \₂ | "1" \₂ | \× | \⊤ | \⊥ | \≡ | \≤ | \∧ | \∨ | \→ | \= \_ \{ | \[ | \] | \< | \> | \\ | \< \| | \| \> | \$ "extract" \$ | "refl" \_ \{ | \* | \* \_ "1" | "0" \_ "2" | "1" \_ "2" | \= \= \= | \< \= | \/ \\ | \\ \/ | \- \> | \| \- \> | \∑--:----- Line comment "--"-"--" [.]* ;---- Block comment "{-" "-}"-\{ \- [$u # \-]* \- ([$u # [\- \}]] [$u # \-]* \- | \-)* \} ;---- Whitespace (skipped)-$white+ ;---- Symbols-@rsyms- { tok (eitherResIdent TV) }---- token VarIdentToken-[$u # [\t \n \r \ \! \" \# \( \) \, \- \. \; \< \> \? \[ \\ \] \{ \| \}]] [$u # [\t \n \r \ \" \# \( \) \, \; \< \> \[ \\ \] \{ \| \}]] *- { tok (eitherResIdent T_VarIdentToken) }---- token HoleIdentToken-\?- { tok (eitherResIdent T_HoleIdentToken) }---- Keywords and Ident-$l $i*- { tok (eitherResIdent TV) }---- String-\" ([$u # [\" \\ \n]] | (\\ (\" | \\ | \' | n | t | r | f)))* \"- { tok (TL . unescapeInitTail) }--{--- | Create a token with position.-tok :: (Data.Text.Text -> Tok) -> (Posn -> Data.Text.Text -> Token)-tok f p = PT p . f---- | Token without position.-data Tok- = TK {-# UNPACK #-} !TokSymbol -- ^ Reserved word or symbol.- | TL !Data.Text.Text -- ^ String literal.- | TI !Data.Text.Text -- ^ Integer literal.- | TV !Data.Text.Text -- ^ Identifier.- | TD !Data.Text.Text -- ^ Float literal.- | TC !Data.Text.Text -- ^ Character literal.- | T_VarIdentToken !Data.Text.Text- | T_HoleIdentToken !Data.Text.Text- deriving (Eq, Show, Ord)---- | Smart constructor for 'Tok' for the sake of backwards compatibility.-pattern TS :: Data.Text.Text -> Int -> Tok-pattern TS t i = TK (TokSymbol t i)---- | Keyword or symbol tokens have a unique ID.-data TokSymbol = TokSymbol- { tsText :: Data.Text.Text- -- ^ Keyword or symbol text.- , tsID :: !Int- -- ^ Unique ID.- } deriving (Show)---- | Keyword/symbol equality is determined by the unique ID.-instance Eq TokSymbol where (==) = (==) `on` tsID---- | Keyword/symbol ordering is determined by the unique ID.-instance Ord TokSymbol where compare = compare `on` tsID---- | Token with position.-data Token- = PT Posn Tok- | Err Posn- deriving (Eq, Show, Ord)---- | Pretty print a position.-printPosn :: Posn -> String-printPosn (Pn _ l c) = "line " ++ show l ++ ", column " ++ show c---- | Pretty print the position of the first token in the list.-tokenPos :: [Token] -> String-tokenPos (t:_) = printPosn (tokenPosn t)-tokenPos [] = "end of file"---- | Get the position of a token.-tokenPosn :: Token -> Posn-tokenPosn (PT p _) = p-tokenPosn (Err p) = p---- | Get line and column of a token.-tokenLineCol :: Token -> (Int, Int)-tokenLineCol = posLineCol . tokenPosn---- | Get line and column of a position.-posLineCol :: Posn -> (Int, Int)-posLineCol (Pn _ l c) = (l,c)---- | Convert a token into "position token" form.-mkPosToken :: Token -> ((Int, Int), Data.Text.Text)-mkPosToken t = (tokenLineCol t, tokenText t)---- | Convert a token to its text.-tokenText :: Token -> Data.Text.Text-tokenText t = case t of- PT _ (TS s _) -> s- PT _ (TL s) -> Data.Text.pack (show s)- PT _ (TI s) -> s- PT _ (TV s) -> s- PT _ (TD s) -> s- PT _ (TC s) -> s- Err _ -> Data.Text.pack "#error"- PT _ (T_VarIdentToken s) -> s- PT _ (T_HoleIdentToken s) -> s---- | Convert a token to a string.-prToken :: Token -> String-prToken t = Data.Text.unpack (tokenText t)---- | Finite map from text to token organized as binary search tree.-data BTree- = N -- ^ Nil (leaf).- | B Data.Text.Text Tok BTree BTree- -- ^ Binary node.- deriving (Show)---- | Convert potential keyword into token or use fallback conversion.-eitherResIdent :: (Data.Text.Text -> Tok) -> Data.Text.Text -> Tok-eitherResIdent tv s = treeFind resWords- where- treeFind N = tv s- treeFind (B a t left right) =- case compare s a of- LT -> treeFind left- GT -> treeFind right- EQ -> t---- | The keywords and symbols of the language organized as binary search tree.-resWords :: BTree-resWords =- b "\\" 50- (b "/\\" 25- (b "#unset-option" 13- (b "#define" 7- (b "#compute-nf" 4- (b "#check" 2 (b "#assume" 1 N N) (b "#compute" 3 N N))- (b "#def" 6 (b "#compute-whnf" 5 N N) N))- (b "#postulate" 10- (b "#lang" 9 (b "#end" 8 N N) N)- (b "#set-option" 12 (b "#section" 11 N N) N)))- (b "*" 19- (b "$extract$" 16- (b "#variables" 15 (b "#variable" 14 N N) N)- (b ")" 18 (b "(" 17 N N) N))- (b "," 22- (b "*\8321" 21 (b "*_1" 20 N N) N) (b "/" 24 (b "->" 23 N N) N))))- (b "=" 38- (b ":" 32- (b "1_2" 29- (b "0\8322" 27 (b "0_2" 26 N N) (b "1" 28 N N))- (b "2" 31 (b "1\8322" 30 N N) N))- (b "<" 35- (b ";" 34 (b ":=" 33 N N) N) (b "<|" 37 (b "<=" 36 N N) N)))- (b "Sigma" 44- (b ">" 41- (b "=_{" 40 (b "===" 39 N N) N) (b "CUBE" 43 (b "BOT" 42 N N) N))- (b "U" 47- (b "TOPE" 46 (b "TOP" 45 N N) N) (b "[" 49 (b "Unit" 48 N N) N)))))- (b "uninv_op" 75- (b "inv_op" 63- (b "as" 57- (b "_b" 54- (b "]" 52 (b "\\/" 51 N N) (b "_#" 53 N N))- (b "_op" 56 (b "_id" 55 N N) N))- (b "flip\7506\7510" 60- (b "flip_op" 59 (b "first" 58 N N) N)- (b "in" 62 (b "idJ" 61 N N) N)))- (b "refl" 69- (b "mod" 66- (b "let" 65 (b "inv\7506\7510" 64 N N) N)- (b "recOR" 68 (b "recBOT" 67 N N) N))- (b "second" 72- (b "rzk-1" 71 (b "refl_{" 70 N N) N)- (b "unflip\7506\7510" 74 (b "unflip_op" 73 N N) N))))- (b "\7506\7510" 88- (b "|>" 82- (b "{" 79- (b "unit" 77 (b "uninv\7506\7510" 76 N N) (b "uses" 78 N N))- (b "|->" 81 (b "|" 80 N N) N))- (b "\931" 85- (b "\215" 84 (b "}" 83 N N) N)- (b "\960\8322" 87 (b "\960\8321" 86 N N) N)))- (b "\8801" 94- (b "\8721" 91- (b "\8614" 90 (b "\8594" 89 N N) N)- (b "\8744" 93 (b "\8743" 92 N N) N))- (b "\8869" 97- (b "\8868" 96 (b "\8804" 95 N N) N)- (b "\9839" 99 (b "\9837" 98 N N) N)))))- where- b s n = B bs (TS bs n)- where- bs = Data.Text.pack s---- | Unquote string literal.-unescapeInitTail :: Data.Text.Text -> Data.Text.Text-unescapeInitTail = Data.Text.pack . unesc . tail . Data.Text.unpack- where- unesc s = case s of- '\\':c:cs | elem c ['\"', '\\', '\''] -> c : unesc cs- '\\':'n':cs -> '\n' : unesc cs- '\\':'t':cs -> '\t' : unesc cs- '\\':'r':cs -> '\r' : unesc cs- '\\':'f':cs -> '\f' : unesc cs- '"':[] -> []- c:cs -> c : unesc cs- _ -> []------------------------------------------------------------------------ Alex wrapper code.--- A modified "posn" wrapper.----------------------------------------------------------------------data Posn = Pn !Int !Int !Int- deriving (Eq, Show, Ord)--alexStartPos :: Posn-alexStartPos = Pn 0 1 1--alexMove :: Posn -> Char -> Posn-alexMove (Pn a l c) '\t' = Pn (a+1) l (((c+7) `div` 8)*8+1)-alexMove (Pn a l c) '\n' = Pn (a+1) (l+1) 1-alexMove (Pn a l c) _ = Pn (a+1) l (c+1)--type Byte = Word8--type AlexInput = (Posn, -- current position,- Char, -- previous char- [Byte], -- pending bytes on the current char- Data.Text.Text) -- current input string--tokens :: Data.Text.Text -> [Token]-tokens str = go (alexStartPos, '\n', [], str)- where- go :: AlexInput -> [Token]- go inp@(pos, _, _, str) =- case alexScan inp 0 of- AlexEOF -> []- AlexError (pos, _, _, _) -> [Err pos]- AlexSkip inp' len -> go inp'- AlexToken inp' len act -> act pos (Data.Text.take len str) : (go inp')--alexGetByte :: AlexInput -> Maybe (Byte,AlexInput)-alexGetByte (p, c, (b:bs), s) = Just (b, (p, c, bs, s))-alexGetByte (p, _, [], s) =- case Data.Text.uncons s of- Nothing -> Nothing- Just (c,s) ->- let p' = alexMove p c- (b:bs) = utf8Encode c- in p' `seq` Just (b, (p', c, bs, s))--alexInputPrevChar :: AlexInput -> Char-alexInputPrevChar (p, c, bs, s) = c---- | Encode a Haskell String to a list of Word8 values, in UTF8 format.-utf8Encode :: Char -> [Word8]-utf8Encode = map fromIntegral . go . ord- where- go oc- | oc <= 0x7f = [oc]-- | oc <= 0x7ff = [ 0xc0 + (oc `Data.Bits.shiftR` 6)- , 0x80 + oc Data.Bits..&. 0x3f- ]-- | oc <= 0xffff = [ 0xe0 + (oc `Data.Bits.shiftR` 12)- , 0x80 + ((oc `Data.Bits.shiftR` 6) Data.Bits..&. 0x3f)- , 0x80 + oc Data.Bits..&. 0x3f- ]- | otherwise = [ 0xf0 + (oc `Data.Bits.shiftR` 18)- , 0x80 + ((oc `Data.Bits.shiftR` 12) Data.Bits..&. 0x3f)- , 0x80 + ((oc `Data.Bits.shiftR` 6) Data.Bits..&. 0x3f)- , 0x80 + oc Data.Bits..&. 0x3f- ]-}
src/Language/Rzk/Syntax/Par.hs view
@@ -38,2495 +38,2651 @@ , pListRestriction , pModality , pModComp- , pTerm7- , pTerm5- , pTerm4- , pTerm3- , pTerm2- , pTerm6- , pTerm1- , pTerm- , pListTerm- ) where--import Prelude--import qualified Language.Rzk.Syntax.Abs-import Language.Rzk.Syntax.Lex-import qualified Data.Text-import qualified Control.Monad as Happy_Prelude-import qualified Data.Bool as Happy_Prelude-import qualified Data.Function as Happy_Prelude-import qualified Data.Int as Happy_Prelude-import qualified Data.List as Happy_Prelude-import qualified Data.Maybe as Happy_Prelude-import qualified Data.String as Happy_Prelude-import qualified Data.Tuple as Happy_Prelude-import qualified GHC.Err as Happy_Prelude-import qualified GHC.Num as Happy_Prelude-import qualified Text.Show as Happy_Prelude-import qualified Data.Array as Happy_Data_Array-import qualified Data.Bits as Bits-import qualified GHC.Exts as Happy_GHC_Exts-import Control.Applicative(Applicative(..))-import Control.Monad (ap)---- parser produced by Happy Version 2.1.7--newtype HappyAbsSyn = HappyAbsSyn HappyAny-#if __GLASGOW_HASKELL__ >= 607-type HappyAny = Happy_GHC_Exts.Any-#else-type HappyAny = forall a . a-#endif-newtype HappyWrap37 = HappyWrap37 ((Language.Rzk.Syntax.Abs.BNFC'Position, String))-happyIn37 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, String)) -> (HappyAbsSyn )-happyIn37 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap37 x)-{-# INLINE happyIn37 #-}-happyOut37 :: (HappyAbsSyn ) -> HappyWrap37-happyOut37 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut37 #-}-newtype HappyWrap38 = HappyWrap38 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.VarIdentToken))-happyIn38 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.VarIdentToken)) -> (HappyAbsSyn )-happyIn38 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap38 x)-{-# INLINE happyIn38 #-}-happyOut38 :: (HappyAbsSyn ) -> HappyWrap38-happyOut38 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut38 #-}-newtype HappyWrap39 = HappyWrap39 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.HoleIdentToken))-happyIn39 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.HoleIdentToken)) -> (HappyAbsSyn )-happyIn39 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap39 x)-{-# INLINE happyIn39 #-}-happyOut39 :: (HappyAbsSyn ) -> HappyWrap39-happyOut39 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut39 #-}-newtype HappyWrap40 = HappyWrap40 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Module))-happyIn40 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Module)) -> (HappyAbsSyn )-happyIn40 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap40 x)-{-# INLINE happyIn40 #-}-happyOut40 :: (HappyAbsSyn ) -> HappyWrap40-happyOut40 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut40 #-}-newtype HappyWrap41 = HappyWrap41 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.HoleIdent))-happyIn41 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.HoleIdent)) -> (HappyAbsSyn )-happyIn41 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap41 x)-{-# INLINE happyIn41 #-}-happyOut41 :: (HappyAbsSyn ) -> HappyWrap41-happyOut41 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut41 #-}-newtype HappyWrap42 = HappyWrap42 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.VarIdent))-happyIn42 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.VarIdent)) -> (HappyAbsSyn )-happyIn42 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap42 x)-{-# INLINE happyIn42 #-}-happyOut42 :: (HappyAbsSyn ) -> HappyWrap42-happyOut42 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut42 #-}-newtype HappyWrap43 = HappyWrap43 ((Language.Rzk.Syntax.Abs.BNFC'Position, [Language.Rzk.Syntax.Abs.VarIdent]))-happyIn43 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, [Language.Rzk.Syntax.Abs.VarIdent])) -> (HappyAbsSyn )-happyIn43 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap43 x)-{-# INLINE happyIn43 #-}-happyOut43 :: (HappyAbsSyn ) -> HappyWrap43-happyOut43 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut43 #-}-newtype HappyWrap44 = HappyWrap44 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.LanguageDecl))-happyIn44 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.LanguageDecl)) -> (HappyAbsSyn )-happyIn44 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap44 x)-{-# INLINE happyIn44 #-}-happyOut44 :: (HappyAbsSyn ) -> HappyWrap44-happyOut44 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut44 #-}-newtype HappyWrap45 = HappyWrap45 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Language))-happyIn45 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Language)) -> (HappyAbsSyn )-happyIn45 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap45 x)-{-# INLINE happyIn45 #-}-happyOut45 :: (HappyAbsSyn ) -> HappyWrap45-happyOut45 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut45 #-}-newtype HappyWrap46 = HappyWrap46 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Command))-happyIn46 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Command)) -> (HappyAbsSyn )-happyIn46 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap46 x)-{-# INLINE happyIn46 #-}-happyOut46 :: (HappyAbsSyn ) -> HappyWrap46-happyOut46 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut46 #-}-newtype HappyWrap47 = HappyWrap47 ((Language.Rzk.Syntax.Abs.BNFC'Position, [Language.Rzk.Syntax.Abs.Command]))-happyIn47 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, [Language.Rzk.Syntax.Abs.Command])) -> (HappyAbsSyn )-happyIn47 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap47 x)-{-# INLINE happyIn47 #-}-happyOut47 :: (HappyAbsSyn ) -> HappyWrap47-happyOut47 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut47 #-}-newtype HappyWrap48 = HappyWrap48 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.DeclUsedVars))-happyIn48 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.DeclUsedVars)) -> (HappyAbsSyn )-happyIn48 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap48 x)-{-# INLINE happyIn48 #-}-happyOut48 :: (HappyAbsSyn ) -> HappyWrap48-happyOut48 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut48 #-}-newtype HappyWrap49 = HappyWrap49 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.SectionName))-happyIn49 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.SectionName)) -> (HappyAbsSyn )-happyIn49 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap49 x)-{-# INLINE happyIn49 #-}-happyOut49 :: (HappyAbsSyn ) -> HappyWrap49-happyOut49 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut49 #-}-newtype HappyWrap50 = HappyWrap50 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Pattern))-happyIn50 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Pattern)) -> (HappyAbsSyn )-happyIn50 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap50 x)-{-# INLINE happyIn50 #-}-happyOut50 :: (HappyAbsSyn ) -> HappyWrap50-happyOut50 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut50 #-}-newtype HappyWrap51 = HappyWrap51 ((Language.Rzk.Syntax.Abs.BNFC'Position, [Language.Rzk.Syntax.Abs.Pattern]))-happyIn51 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, [Language.Rzk.Syntax.Abs.Pattern])) -> (HappyAbsSyn )-happyIn51 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap51 x)-{-# INLINE happyIn51 #-}-happyOut51 :: (HappyAbsSyn ) -> HappyWrap51-happyOut51 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut51 #-}-newtype HappyWrap52 = HappyWrap52 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Pattern))-happyIn52 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Pattern)) -> (HappyAbsSyn )-happyIn52 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap52 x)-{-# INLINE happyIn52 #-}-happyOut52 :: (HappyAbsSyn ) -> HappyWrap52-happyOut52 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut52 #-}-newtype HappyWrap53 = HappyWrap53 ((Language.Rzk.Syntax.Abs.BNFC'Position, [Language.Rzk.Syntax.Abs.Pattern]))-happyIn53 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, [Language.Rzk.Syntax.Abs.Pattern])) -> (HappyAbsSyn )-happyIn53 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap53 x)-{-# INLINE happyIn53 #-}-happyOut53 :: (HappyAbsSyn ) -> HappyWrap53-happyOut53 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut53 #-}-newtype HappyWrap54 = HappyWrap54 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Param))-happyIn54 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Param)) -> (HappyAbsSyn )-happyIn54 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap54 x)-{-# INLINE happyIn54 #-}-happyOut54 :: (HappyAbsSyn ) -> HappyWrap54-happyOut54 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut54 #-}-newtype HappyWrap55 = HappyWrap55 ((Language.Rzk.Syntax.Abs.BNFC'Position, [Language.Rzk.Syntax.Abs.Param]))-happyIn55 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, [Language.Rzk.Syntax.Abs.Param])) -> (HappyAbsSyn )-happyIn55 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap55 x)-{-# INLINE happyIn55 #-}-happyOut55 :: (HappyAbsSyn ) -> HappyWrap55-happyOut55 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut55 #-}-newtype HappyWrap56 = HappyWrap56 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Bind))-happyIn56 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Bind)) -> (HappyAbsSyn )-happyIn56 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap56 x)-{-# INLINE happyIn56 #-}-happyOut56 :: (HappyAbsSyn ) -> HappyWrap56-happyOut56 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut56 #-}-newtype HappyWrap57 = HappyWrap57 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.ParamDecl))-happyIn57 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.ParamDecl)) -> (HappyAbsSyn )-happyIn57 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap57 x)-{-# INLINE happyIn57 #-}-happyOut57 :: (HappyAbsSyn ) -> HappyWrap57-happyOut57 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut57 #-}-newtype HappyWrap58 = HappyWrap58 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.SigmaParam))-happyIn58 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.SigmaParam)) -> (HappyAbsSyn )-happyIn58 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap58 x)-{-# INLINE happyIn58 #-}-happyOut58 :: (HappyAbsSyn ) -> HappyWrap58-happyOut58 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut58 #-}-newtype HappyWrap59 = HappyWrap59 ((Language.Rzk.Syntax.Abs.BNFC'Position, [Language.Rzk.Syntax.Abs.SigmaParam]))-happyIn59 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, [Language.Rzk.Syntax.Abs.SigmaParam])) -> (HappyAbsSyn )-happyIn59 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap59 x)-{-# INLINE happyIn59 #-}-happyOut59 :: (HappyAbsSyn ) -> HappyWrap59-happyOut59 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut59 #-}-newtype HappyWrap60 = HappyWrap60 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Restriction))-happyIn60 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Restriction)) -> (HappyAbsSyn )-happyIn60 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap60 x)-{-# INLINE happyIn60 #-}-happyOut60 :: (HappyAbsSyn ) -> HappyWrap60-happyOut60 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut60 #-}-newtype HappyWrap61 = HappyWrap61 ((Language.Rzk.Syntax.Abs.BNFC'Position, [Language.Rzk.Syntax.Abs.Restriction]))-happyIn61 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, [Language.Rzk.Syntax.Abs.Restriction])) -> (HappyAbsSyn )-happyIn61 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap61 x)-{-# INLINE happyIn61 #-}-happyOut61 :: (HappyAbsSyn ) -> HappyWrap61-happyOut61 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut61 #-}-newtype HappyWrap62 = HappyWrap62 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Modality))-happyIn62 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Modality)) -> (HappyAbsSyn )-happyIn62 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap62 x)-{-# INLINE happyIn62 #-}-happyOut62 :: (HappyAbsSyn ) -> HappyWrap62-happyOut62 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut62 #-}-newtype HappyWrap63 = HappyWrap63 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.ModComp))-happyIn63 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.ModComp)) -> (HappyAbsSyn )-happyIn63 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap63 x)-{-# INLINE happyIn63 #-}-happyOut63 :: (HappyAbsSyn ) -> HappyWrap63-happyOut63 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut63 #-}-newtype HappyWrap64 = HappyWrap64 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Term))-happyIn64 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Term)) -> (HappyAbsSyn )-happyIn64 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap64 x)-{-# INLINE happyIn64 #-}-happyOut64 :: (HappyAbsSyn ) -> HappyWrap64-happyOut64 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut64 #-}-newtype HappyWrap65 = HappyWrap65 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Term))-happyIn65 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Term)) -> (HappyAbsSyn )-happyIn65 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap65 x)-{-# INLINE happyIn65 #-}-happyOut65 :: (HappyAbsSyn ) -> HappyWrap65-happyOut65 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut65 #-}-newtype HappyWrap66 = HappyWrap66 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Term))-happyIn66 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Term)) -> (HappyAbsSyn )-happyIn66 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap66 x)-{-# INLINE happyIn66 #-}-happyOut66 :: (HappyAbsSyn ) -> HappyWrap66-happyOut66 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut66 #-}-newtype HappyWrap67 = HappyWrap67 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Term))-happyIn67 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Term)) -> (HappyAbsSyn )-happyIn67 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap67 x)-{-# INLINE happyIn67 #-}-happyOut67 :: (HappyAbsSyn ) -> HappyWrap67-happyOut67 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut67 #-}-newtype HappyWrap68 = HappyWrap68 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Term))-happyIn68 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Term)) -> (HappyAbsSyn )-happyIn68 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap68 x)-{-# INLINE happyIn68 #-}-happyOut68 :: (HappyAbsSyn ) -> HappyWrap68-happyOut68 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut68 #-}-newtype HappyWrap69 = HappyWrap69 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Term))-happyIn69 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Term)) -> (HappyAbsSyn )-happyIn69 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap69 x)-{-# INLINE happyIn69 #-}-happyOut69 :: (HappyAbsSyn ) -> HappyWrap69-happyOut69 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut69 #-}-newtype HappyWrap70 = HappyWrap70 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Term))-happyIn70 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Term)) -> (HappyAbsSyn )-happyIn70 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap70 x)-{-# INLINE happyIn70 #-}-happyOut70 :: (HappyAbsSyn ) -> HappyWrap70-happyOut70 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut70 #-}-newtype HappyWrap71 = HappyWrap71 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Term))-happyIn71 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Term)) -> (HappyAbsSyn )-happyIn71 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap71 x)-{-# INLINE happyIn71 #-}-happyOut71 :: (HappyAbsSyn ) -> HappyWrap71-happyOut71 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut71 #-}-newtype HappyWrap72 = HappyWrap72 ((Language.Rzk.Syntax.Abs.BNFC'Position, [Language.Rzk.Syntax.Abs.Term]))-happyIn72 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, [Language.Rzk.Syntax.Abs.Term])) -> (HappyAbsSyn )-happyIn72 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap72 x)-{-# INLINE happyIn72 #-}-happyOut72 :: (HappyAbsSyn ) -> HappyWrap72-happyOut72 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut72 #-}-happyInTok :: (Token) -> (HappyAbsSyn )-happyInTok x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyInTok #-}-happyOutTok :: (HappyAbsSyn ) -> (Token)-happyOutTok x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOutTok #-}---{-# NOINLINE happyTokenStrings #-}-happyTokenStrings = ["'#assume'","'#check'","'#compute'","'#compute-nf'","'#compute-whnf'","'#def'","'#define'","'#end'","'#lang'","'#postulate'","'#section'","'#set-option'","'#unset-option'","'#variable'","'#variables'","'$extract$'","'('","')'","'*'","'*_1'","'*\8321'","','","'->'","'/'","'/\\\\'","'0_2'","'0\8322'","'1'","'1_2'","'1\8322'","'2'","':'","':='","';'","'<'","'<='","'<|'","'='","'==='","'=_{'","'>'","'BOT'","'CUBE'","'Sigma'","'TOP'","'TOPE'","'U'","'Unit'","'['","'\\\\'","'\\\\/'","']'","'_#'","'_b'","'_id'","'_op'","'as'","'first'","'flip_op'","'flip\7506\7510'","'idJ'","'in'","'inv_op'","'inv\7506\7510'","'let'","'mod'","'recBOT'","'recOR'","'refl'","'refl_{'","'rzk-1'","'second'","'unflip_op'","'unflip\7506\7510'","'uninv_op'","'uninv\7506\7510'","'unit'","'uses'","'{'","'|'","'|->'","'|>'","'}'","'\215'","'\931'","'\960\8321'","'\960\8322'","'\7506\7510'","'\8594'","'\8614'","'\8721'","'\8743'","'\8744'","'\8801'","'\8804'","'\8868'","'\8869'","'\9837'","'\9839'","L_quoted","L_VarIdentToken","L_HoleIdentToken","%eof"]--happyActOffsets :: HappyAddr-happyActOffsets = HappyA# "\xf9\xff\xff\xff\xac\xff\xff\xff\xb2\xff\xff\xff\xb2\xff\xff\xff\x2e\x00\x00\x00\x34\x00\x00\x00\x65\x09\x00\x00\x65\x09\x00\x00\x37\x00\x00\x00\x33\x00\x00\x00\x30\x00\x00\x00\x30\x00\x00\x00\x30\x00\x00\x00\x30\x00\x00\x00\xf5\xff\xff\xff\xf5\xff\xff\xff\x30\x00\x00\x00\x95\x00\x00\x00\x30\x00\x00\x00\x30\x00\x00\x00\x47\x00\x00\x00\x47\x00\x00\x00\xb2\x00\x00\x00\xb2\x00\x00\x00\xee\x01\x00\x00\xe3\x00\x00\x00\xe3\x00\x00\x00\xe3\x00\x00\x00\xe3\x00\x00\x00\xe3\x00\x00\x00\x47\x00\x00\x00\x47\x00\x00\x00\x47\x00\x00\x00\x36\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17\x00\x00\x00\x00\x00\x00\x00\x4d\x01\x00\x00\xf8\xff\xff\xff\xe3\xff\xff\xff\x45\x00\x00\x00\x61\x01\x00\x00\x00\x00\x00\x00\x8b\x00\x00\x00\x3c\x00\x00\x00\xb2\x00\x00\x00\x47\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x95\x00\x00\x00\xb2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf5\xff\xff\xff\xee\x01\x00\x00\xee\x01\x00\x00\xee\x01\x00\x00\xad\x00\x00\x00\xee\x01\x00\x00\xee\x01\x00\x00\x57\x00\x00\x00\xb2\x00\x00\x00\x00\x00\x00\x00\xd2\x00\x00\x00\x00\x00\x00\x00\x47\x00\x00\x00\xee\x01\x00\x00\xee\x01\x00\x00\xee\x01\x00\x00\xee\x01\x00\x00\xee\x01\x00\x00\x00\x00\x00\x00\x69\x00\x00\x00\xde\x00\x00\x00\xee\x01\x00\x00\xee\x01\x00\x00\xe1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5f\x00\x00\x00\x41\x00\x00\x00\x5f\x00\x00\x00\x22\x01\x00\x00\x47\x00\x00\x00\x5f\x00\x00\x00\xaf\x01\x00\x00\x5f\x00\x00\x00\x5f\x00\x00\x00\xf6\xff\xff\xff\x5f\x00\x00\x00\xe4\x00\x00\x00\x92\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x92\x00\x00\x00\xf9\x00\x00\x00\xb0\x00\x00\x00\x46\x00\x00\x00\xb0\x00\x00\x00\x00\x00\x00\x00\x0a\x01\x00\x00\x03\x01\x00\x00\xd1\x00\x00\x00\xb7\x00\x00\x00\x00\x00\x00\x00\xd1\x00\x00\x00\xd1\x00\x00\x00\xaf\x01\x00\x00\x1b\x01\x00\x00\xee\x00\x00\x00\x00\x00\x00\x00\x07\x01\x00\x00\xee\x00\x00\x00\xb7\x00\x00\x00\xb7\x00\x00\x00\xee\x00\x00\x00\x00\x00\x00\x00\x34\x01\x00\x00\xf1\x00\x00\x00\xf1\x00\x00\x00\xb7\x00\x00\x00\xf1\x00\x00\x00\xf1\x00\x00\x00\x00\x00\x00\x00\xf1\x00\x00\x00\xf1\x00\x00\x00\x50\x01\x00\x00\x55\x01\x00\x00\x23\x01\x00\x00\x2f\x01\x00\x00\x47\x00\x00\x00\x47\x00\x00\x00\x47\x00\x00\x00\x47\x00\x00\x00\x2f\x01\x00\x00\x2f\x01\x00\x00\x2f\x01\x00\x00\x2f\x01\x00\x00\x2f\x01\x00\x00\x36\x01\x00\x00\x36\x01\x00\x00\x38\x01\x00\x00\x38\x01\x00\x00\x43\x01\x00\x00\x43\x01\x00\x00\x00\x00\x00\x00\x43\x01\x00\x00\x58\x01\x00\x00\x53\x01\x00\x00\x86\x01\x00\x00\x86\x01\x00\x00\x86\x01\x00\x00\x86\x01\x00\x00\x65\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa6\x01\x00\x00\xb8\x01\x00\x00\xce\x01\x00\x00\x00\x00\x00\x00\xc2\x01\x00\x00\x00\x00\x00\x00\xa2\x01\x00\x00\x00\x00\x00\x00\xa2\x01\x00\x00\xa2\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd6\x01\x00\x00\xd8\x01\x00\x00\x65\x09\x00\x00\x9c\x01\x00\x00\x00\x00\x00\x00\xb7\x00\x00\x00\xe4\x01\x00\x00\x13\x00\x00\x00\xe7\x01\x00\x00\x00\x00\x00\x00\x47\x00\x00\x00\x00\x00\x00\x00\x47\x00\x00\x00\xfc\x01\x00\x00\xb7\x00\x00\x00\xf0\xff\xff\xff\x47\x00\x00\x00\x47\x00\x00\x00\x47\x00\x00\x00\xb2\x00\x00\x00\xe3\x00\x00\x00\xe3\x00\x00\x00\xf1\xff\xff\xff\xe3\x00\x00\x00\x47\x00\x00\x00\xb7\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb7\x00\x00\x00\xf7\x01\x00\x00\xb7\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x47\x00\x00\x00\xee\x01\x00\x00\xfe\x01\x00\x00\xb2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x47\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x27\x00\x00\x00\xb7\x00\x00\x00\xd7\x01\x00\x00\x42\x00\x00\x00\x04\x01\x00\x00\xee\x01\x00\x00\x47\x00\x00\x00\x47\x00\x00\x00\xe3\x00\x00\x00\xe3\x00\x00\x00\xe3\x00\x00\x00\xe3\x00\x00\x00\xe3\x00\x00\x00\xe3\x00\x00\x00\xe3\x00\x00\x00\xe3\x00\x00\x00\x47\x00\x00\x00\x47\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4b\x00\x00\x00\x4b\x00\x00\x00\x4b\x00\x00\x00\x4b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x47\x00\x00\x00\xf0\xff\xff\xff\x47\x00\x00\x00\x47\x00\x00\x00\x47\x00\x00\x00\x08\x02\x00\x00\x14\x02\x00\x00\x47\x00\x00\x00\x47\x00\x00\x00\x34\x02\x00\x00\xb7\x00\x00\x00\x47\x00\x00\x00\x00\x00\x00\x00\x26\x02\x00\x00\xf2\xff\xff\xff\x47\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x47\x00\x00\x00\x2d\x02\x00\x00\x46\x02\x00\x00\x3b\x02\x00\x00\x48\x02\x00\x00\x0a\x02\x00\x00\x00\x00\x00\x00\xaf\x01\x00\x00\xaf\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x47\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb7\x00\x00\x00\x37\x02\x00\x00\x00\x00\x00\x00\xf0\xff\xff\xff\x47\x00\x00\x00\x00\x00\x00\x00\x6e\x02\x00\x00\x00\x00\x00\x00\x47\x00\x00\x00\x47\x00\x00\x00\x6e\x00\x00\x00\xb6\x00\x00\x00\xbc\x00\x00\x00\x04\x02\x00\x00\x47\x00\x00\x00\x47\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x65\x02\x00\x00\x47\x00\x00\x00\x67\x02\x00\x00\x47\x00\x00\x00\x70\x02\x00\x00\x47\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x41\x02\x00\x00\x47\x00\x00\x00\xfe\xff\xff\xff\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\xe3\x00\x00\x00\xb7\x00\x00\x00\xf0\xff\xff\xff\xb7\x00\x00\x00\xf0\xff\xff\xff\x5b\x00\x00\x00\x47\x00\x00\x00\x4e\x02\x00\x00\x47\x00\x00\x00\x00\x00\x00\x00\x64\x02\x00\x00\x91\x02\x00\x00\x47\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb7\x00\x00\x00\xf0\xff\xff\xff\x61\x02\x00\x00\x99\x02\x00\x00\x9b\x02\x00\x00\x47\x00\x00\x00\x0f\x00\x00\x00\x8a\x01\x00\x00\x00\x00\x00\x00\x47\x00\x00\x00\x00\x00\x00\x00\x47\x00\x00\x00\xb1\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x47\x00\x00\x00\xc0\x02\x00\x00\xc1\x02\x00\x00\xbf\x02\x00\x00\x47\x00\x00\x00\x47\x00\x00\x00\xce\x02\x00\x00\x00\x00\x00\x00\xd1\x02\x00\x00\x47\x00\x00\x00\x00\x00\x00\x00\x47\x00\x00\x00\xd4\x02\x00\x00\xe2\x02\x00\x00\xe3\x02\x00\x00\xe5\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb7\x00\x00\x00\x00\x00\x00\x00\x47\x00\x00\x00\xf3\x02\x00\x00\x47\x00\x00\x00\xe7\x02\x00\x00\x47\x00\x00\x00\xf5\x02\x00\x00\x47\x00\x00\x00\x00\x00\x00\x00\x47\x00\x00\x00\x00\x00\x00\x00\xf6\x02\x00\x00\x47\x00\x00\x00\xf8\x02\x00\x00\x47\x00\x00\x00\xb3\x02\x00\x00\x00\x00\x00\x00\x15\x03\x00\x00\x16\x03\x00\x00\x14\x03\x00\x00\x23\x03\x00\x00\x24\x03\x00\x00\x25\x03\x00\x00\x26\x03\x00\x00\xf7\x02\x00\x00\xf9\x02\x00\x00\x47\x00\x00\x00\x00\x00\x00\x00\x0d\x03\x00\x00\x47\x00\x00\x00\x36\x03\x00\x00\x45\x03\x00\x00\x48\x03\x00\x00\x00\x00\x00\x00\x4a\x03\x00\x00\x4b\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x56\x03\x00\x00\x47\x00\x00\x00\x47\x00\x00\x00\x57\x03\x00\x00\x47\x00\x00\x00\x58\x03\x00\x00\x47\x00\x00\x00\x00\x00\x00\x00\x67\x03\x00\x00\x47\x00\x00\x00\x47\x00\x00\x00\x47\x00\x00\x00\x47\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x47\x00\x00\x00\x00\x00\x00\x00\x47\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x47\x00\x00\x00\x18\x03\x00\x00\x47\x00\x00\x00\x00\x00\x00\x00\x47\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x47\x00\x00\x00\x00\x00\x00\x00\x68\x03\x00\x00\x6a\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x47\x00\x00\x00\x69\x03\x00\x00\x47\x00\x00\x00\x7b\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#--happyGotoOffsets :: HappyAddr-happyGotoOffsets = HappyA# "\xa7\x01\x00\x00\x4c\x00\x00\x00\x29\x02\x00\x00\x69\x01\x00\x00\x89\x03\x00\x00\x87\x03\x00\x00\x96\x03\x00\x00\x66\x00\x00\x00\x86\x03\x00\x00\x97\x01\x00\x00\x42\x01\x00\x00\x75\x09\x00\x00\x7a\x02\x00\x00\x20\x02\x00\x00\x4c\x09\x00\x00\x1d\x09\x00\x00\x5e\x01\x00\x00\xe6\x01\x00\x00\x57\x01\x00\x00\xb5\x00\x00\x00\xab\x02\x00\x00\x56\x02\x00\x00\x97\x03\x00\x00\xb3\x00\x00\x00\x31\x01\x00\x00\x59\x08\x00\x00\x36\x02\x00\x00\x29\x08\x00\x00\xd9\x07\x00\x00\xed\x00\x00\x00\xeb\x06\x00\x00\x22\x03\x00\x00\x95\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\x59\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcd\x00\x00\x00\x33\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\x69\x08\x00\x00\x98\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\x2f\x09\x00\x00\xbb\x01\x00\x00\xe1\x01\x00\x00\xaf\x08\x00\x00\x00\x00\x00\x00\xb7\x08\x00\x00\xca\x08\x00\x00\x81\x01\x00\x00\x9a\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x44\x03\x00\x00\xcf\x08\x00\x00\xd4\x08\x00\x00\xd9\x08\x00\x00\xde\x08\x00\x00\xe7\x08\x00\x00\x00\x00\x00\x00\xb9\x01\x00\x00\x00\x00\x00\x00\xec\x08\x00\x00\xf1\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\x00\x00\x00\x00\x00\x00\x00\x00\xf6\x08\x00\x00\x55\x03\x00\x00\x00\x00\x00\x00\xf6\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf6\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x31\x09\x00\x00\x00\x00\x00\x00\x77\x09\x00\x00\x57\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7a\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x47\x02\x00\x00\x66\x03\x00\x00\x77\x03\x00\x00\x88\x03\x00\x00\x99\x03\x00\x00\xeb\x07\x00\x00\xee\x07\x00\x00\x16\x02\x00\x00\xfb\x07\x00\x00\x8b\x08\x00\x00\xa0\x03\x00\x00\xa1\x03\x00\x00\xfe\x07\x00\x00\x6a\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x03\x00\x00\x7d\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x71\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\xa7\x03\x00\x00\x00\x00\x00\x00\xb7\x03\x00\x00\xb8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc8\x01\x00\x00\x7f\x02\x00\x00\x00\x00\x00\x00\x51\x09\x00\x00\x00\x00\x00\x00\x7a\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xaa\x03\x00\x00\x00\x00\x00\x00\x78\x02\x00\x00\x00\x00\x00\x00\x3b\x08\x00\x00\xbc\x02\x00\x00\xbb\x03\x00\x00\xcc\x03\x00\x00\x89\x02\x00\x00\xab\x03\x00\x00\xa3\x08\x00\x00\xa9\x08\x00\x00\x00\x00\x00\x00\xe9\x07\x00\x00\xdd\x03\x00\x00\xcf\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfa\x01\x00\x00\x00\x00\x00\x00\x7c\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9a\x02\x00\x00\xfb\x08\x00\x00\x00\x00\x00\x00\xbe\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xee\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x09\x00\x00\x22\x02\x00\x00\xfc\x06\x00\x00\xf9\x07\x00\x00\x09\x08\x00\x00\x39\x08\x00\x00\x49\x08\x00\x00\x76\x08\x00\x00\x7d\x08\x00\x00\x86\x08\x00\x00\x9a\x08\x00\x00\x0d\x07\x00\x00\x1e\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\x03\x00\x00\xcd\x02\x00\x00\x10\x04\x00\x00\x21\x04\x00\x00\x32\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2f\x07\x00\x00\x40\x07\x00\x00\x00\x00\x00\x00\xeb\x01\x00\x00\x43\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x54\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x65\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\x09\x09\x00\x00\x09\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x76\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x85\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\x02\x00\x00\x87\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x98\x04\x00\x00\xa9\x04\x00\x00\x38\x09\x00\x00\x3a\x09\x00\x00\x43\x09\x00\x00\xa2\x03\x00\x00\xba\x04\x00\x00\xcb\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdc\x04\x00\x00\x00\x00\x00\x00\xed\x04\x00\x00\x00\x00\x00\x00\xfe\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0f\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x08\x00\x00\x5b\x08\x00\x00\xef\x02\x00\x00\x13\x09\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x20\x05\x00\x00\x00\x00\x00\x00\x31\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16\x09\x00\x00\x11\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x53\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x45\x02\x00\x00\x00\x00\x00\x00\x64\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x75\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x86\x05\x00\x00\x97\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa8\x05\x00\x00\x00\x00\x00\x00\xb9\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x56\x09\x00\x00\x00\x00\x00\x00\xca\x05\x00\x00\x00\x00\x00\x00\xdb\x05\x00\x00\x00\x00\x00\x00\xec\x05\x00\x00\x00\x00\x00\x00\xfd\x05\x00\x00\x00\x00\x00\x00\x0e\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1f\x06\x00\x00\x00\x00\x00\x00\x30\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x41\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x52\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x07\x00\x00\x62\x07\x00\x00\x00\x00\x00\x00\x63\x06\x00\x00\x00\x00\x00\x00\x74\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x73\x07\x00\x00\x84\x07\x00\x00\x95\x07\x00\x00\xa6\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x85\x06\x00\x00\x00\x00\x00\x00\x96\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb7\x07\x00\x00\x00\x00\x00\x00\xa7\x06\x00\x00\x00\x00\x00\x00\xb8\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc8\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc9\x06\x00\x00\x00\x00\x00\x00\xda\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#--happyDefActions :: HappyAddr-happyDefActions = HappyA# "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc3\xff\xff\xff\xc0\xff\xff\xff\xbf\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\xff\xff\xff\xd9\xff\xff\xff\xda\xff\xff\xff\x7b\xff\xff\xff\x7a\xff\xff\xff\x00\x00\x00\x00\x57\xff\xff\xff\x6d\xff\xff\xff\x69\xff\xff\xff\x66\xff\xff\xff\x4b\xff\xff\xff\x71\xff\xff\xff\x42\xff\xff\xff\x41\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x78\xff\xff\xff\x8f\xff\xff\xff\x77\xff\xff\xff\x8d\xff\xff\xff\x90\xff\xff\xff\x76\xff\xff\xff\x8c\xff\xff\xff\x8e\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x74\xff\xff\xff\x92\xff\xff\xff\x00\x00\x00\x00\x75\xff\xff\xff\x91\xff\xff\xff\x93\xff\xff\xff\x86\xff\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\x89\xff\xff\xff\x00\x00\x00\x00\x7f\xff\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\x80\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8b\xff\xff\xff\x8a\xff\xff\xff\xdd\xff\xff\xff\xdc\xff\xff\xff\x00\x00\x00\x00\x4b\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x71\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x95\xff\xff\xff\x00\x00\x00\x00\x99\xff\xff\xff\x9b\xff\xff\xff\x96\xff\xff\xff\x97\xff\xff\xff\x98\xff\xff\xff\x9c\xff\xff\xff\x9a\xff\xff\xff\x00\x00\x00\x00\x9e\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbc\xff\xff\xff\x00\x00\x00\x00\xa2\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xbd\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xab\xff\xff\xff\xad\xff\xff\xff\x00\x00\x00\x00\xb4\xff\xff\xff\xaf\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb7\xff\xff\xff\xb6\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xb9\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xbe\xff\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\x00\x00\x00\x00\x00\x00\xbf\xff\xff\xff\x00\x00\x00\x00\xbf\xff\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\xd5\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xd8\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc3\xff\xff\xff\xdb\xff\xff\xff\xd7\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd3\xff\xff\xff\x00\x00\x00\x00\xc9\xff\xff\xff\xc0\xff\xff\xff\xc8\xff\xff\xff\xc0\xff\xff\xff\xc0\xff\xff\xff\xd0\xff\xff\xff\xcf\xff\xff\xff\xd1\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xc3\xff\xff\xff\x00\x00\x00\x00\xb8\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xb9\xff\xff\xff\x00\x00\x00\x00\xae\xff\xff\xff\x00\x00\x00\x00\x5b\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x58\xff\xff\xff\x59\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x62\xff\xff\xff\x61\xff\xff\xff\x5e\xff\xff\xff\x5d\xff\xff\xff\x55\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x64\xff\xff\xff\x63\xff\xff\xff\x00\x00\x00\x00\x60\xff\xff\xff\x5f\xff\xff\xff\x56\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x54\xff\xff\xff\x4a\xff\xff\xff\x6e\xff\xff\xff\x6f\xff\xff\xff\x6c\xff\xff\xff\x6b\xff\xff\xff\x6a\xff\xff\xff\x68\xff\xff\xff\x67\xff\xff\xff\x65\xff\xff\xff\x43\xff\xff\xff\x40\xff\xff\xff\x5a\xff\xff\xff\x79\xff\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\x00\x00\x00\x00\x00\x00\x82\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7e\xff\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\x4f\xff\xff\xff\x72\xff\xff\xff\x70\xff\xff\xff\x94\xff\xff\xff\x9d\xff\xff\xff\xa0\xff\xff\xff\x9f\xff\xff\xff\x00\x00\x00\x00\xa4\xff\xff\xff\xa1\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xac\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xb5\xff\xff\xff\x00\x00\x00\x00\xc2\xff\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\xd6\xff\xff\xff\xca\xff\xff\xff\xcb\xff\xff\xff\xd4\xff\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\xd2\xff\xff\xff\xcc\xff\xff\xff\xc1\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5c\xff\xff\xff\x00\x00\x00\x00\xa3\xff\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\x88\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4d\xff\xff\xff\x46\xff\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\x84\xff\xff\xff\x00\x00\x00\x00\xaa\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x73\xff\xff\xff\x85\xff\xff\xff\x81\xff\xff\xff\x00\x00\x00\x00\xa4\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7d\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xa8\xff\xff\xff\x00\x00\x00\x00\xa4\xff\xff\xff\x00\x00\x00\x00\xa4\xff\xff\xff\x00\x00\x00\x00\x50\xff\xff\xff\xbb\xff\xff\xff\x00\x00\x00\x00\xb3\xff\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\xcd\xff\xff\xff\x00\x00\x00\x00\xce\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb0\xff\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\xa3\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4e\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa3\xff\xff\xff\xa5\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x83\xff\xff\xff\xa9\xff\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\xa6\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xba\xff\xff\xff\xb2\xff\xff\xff\xb1\xff\xff\xff\xc4\xff\xff\xff\x00\x00\x00\x00\xc6\xff\xff\xff\x00\x00\x00\x00\xc7\xff\xff\xff\xc5\xff\xff\xff\x44\xff\xff\xff\x45\xff\xff\xff\x51\xff\xff\xff\x53\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4c\xff\xff\xff\x00\x00\x00\x00\x47\xff\xff\xff\x49\xff\xff\xff\x00\x00\x00\x00\x48\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xa7\xff\xff\xff\x52\xff\xff\xff\x87\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7c\xff\xff\xff"#--happyCheck :: HappyAddr-happyCheck = HappyA# "\xff\xff\xff\xff\x11\x00\x00\x00\x12\x00\x00\x00\x0a\x00\x00\x00\x13\x00\x00\x00\x15\x00\x00\x00\x16\x00\x00\x00\x12\x00\x00\x00\x17\x00\x00\x00\x17\x00\x00\x00\x14\x00\x00\x00\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x13\x00\x00\x00\x1a\x00\x00\x00\x67\x00\x00\x00\x24\x00\x00\x00\x13\x00\x00\x00\x26\x00\x00\x00\x34\x00\x00\x00\x66\x00\x00\x00\x17\x00\x00\x00\x17\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x31\x00\x00\x00\x13\x00\x00\x00\x33\x00\x00\x00\x21\x00\x00\x00\x12\x00\x00\x00\x36\x00\x00\x00\x37\x00\x00\x00\x38\x00\x00\x00\x39\x00\x00\x00\x17\x00\x00\x00\x3b\x00\x00\x00\x3c\x00\x00\x00\x3d\x00\x00\x00\x3e\x00\x00\x00\x18\x00\x00\x00\x40\x00\x00\x00\x41\x00\x00\x00\x42\x00\x00\x00\x43\x00\x00\x00\x44\x00\x00\x00\x45\x00\x00\x00\x46\x00\x00\x00\x47\x00\x00\x00\x0a\x00\x00\x00\x49\x00\x00\x00\x4a\x00\x00\x00\x4b\x00\x00\x00\x4c\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x00\x00\x18\x00\x00\x00\x50\x00\x00\x00\x5e\x00\x00\x00\x12\x00\x00\x00\x4e\x00\x00\x00\x52\x00\x00\x00\x50\x00\x00\x00\x56\x00\x00\x00\x57\x00\x00\x00\x58\x00\x00\x00\x59\x00\x00\x00\x21\x00\x00\x00\x55\x00\x00\x00\x5c\x00\x00\x00\x5b\x00\x00\x00\x02\x00\x00\x00\x51\x00\x00\x00\x04\x00\x00\x00\x61\x00\x00\x00\x62\x00\x00\x00\x63\x00\x00\x00\x64\x00\x00\x00\x5d\x00\x00\x00\x66\x00\x00\x00\x67\x00\x00\x00\x11\x00\x00\x00\x12\x00\x00\x00\x18\x00\x00\x00\x66\x00\x00\x00\x15\x00\x00\x00\x16\x00\x00\x00\x68\x00\x00\x00\x14\x00\x00\x00\x51\x00\x00\x00\x4e\x00\x00\x00\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x27\x00\x00\x00\x12\x00\x00\x00\x29\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x26\x00\x00\x00\x29\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x5a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x31\x00\x00\x00\x66\x00\x00\x00\x33\x00\x00\x00\x12\x00\x00\x00\x48\x00\x00\x00\x54\x00\x00\x00\x4e\x00\x00\x00\x3a\x00\x00\x00\x12\x00\x00\x00\x5a\x00\x00\x00\x3b\x00\x00\x00\x3c\x00\x00\x00\x3d\x00\x00\x00\x3e\x00\x00\x00\x4f\x00\x00\x00\x40\x00\x00\x00\x41\x00\x00\x00\x42\x00\x00\x00\x43\x00\x00\x00\x44\x00\x00\x00\x45\x00\x00\x00\x46\x00\x00\x00\x47\x00\x00\x00\x21\x00\x00\x00\x49\x00\x00\x00\x4a\x00\x00\x00\x4b\x00\x00\x00\x4c\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x00\x00\x66\x00\x00\x00\x50\x00\x00\x00\x52\x00\x00\x00\x66\x00\x00\x00\x43\x00\x00\x00\x65\x00\x00\x00\x5a\x00\x00\x00\x56\x00\x00\x00\x57\x00\x00\x00\x58\x00\x00\x00\x55\x00\x00\x00\x5b\x00\x00\x00\x17\x00\x00\x00\x5c\x00\x00\x00\x68\x00\x00\x00\x4e\x00\x00\x00\x11\x00\x00\x00\x12\x00\x00\x00\x61\x00\x00\x00\x62\x00\x00\x00\x15\x00\x00\x00\x16\x00\x00\x00\x51\x00\x00\x00\x66\x00\x00\x00\x67\x00\x00\x00\x54\x00\x00\x00\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x01\x00\x00\x00\x4e\x00\x00\x00\x12\x00\x00\x00\x24\x00\x00\x00\x05\x00\x00\x00\x26\x00\x00\x00\x4e\x00\x00\x00\x66\x00\x00\x00\x50\x00\x00\x00\x12\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x0d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x31\x00\x00\x00\x68\x00\x00\x00\x12\x00\x00\x00\x12\x00\x00\x00\x15\x00\x00\x00\x16\x00\x00\x00\x19\x00\x00\x00\x1a\x00\x00\x00\x12\x00\x00\x00\x66\x00\x00\x00\x3b\x00\x00\x00\x3c\x00\x00\x00\x3d\x00\x00\x00\x3e\x00\x00\x00\x66\x00\x00\x00\x40\x00\x00\x00\x41\x00\x00\x00\x21\x00\x00\x00\x43\x00\x00\x00\x44\x00\x00\x00\x45\x00\x00\x00\x46\x00\x00\x00\x47\x00\x00\x00\x21\x00\x00\x00\x49\x00\x00\x00\x4a\x00\x00\x00\x4b\x00\x00\x00\x4c\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x00\x00\x12\x00\x00\x00\x50\x00\x00\x00\x19\x00\x00\x00\x1a\x00\x00\x00\x36\x00\x00\x00\x37\x00\x00\x00\x38\x00\x00\x00\x39\x00\x00\x00\x57\x00\x00\x00\x58\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x12\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x12\x00\x00\x00\x11\x00\x00\x00\x12\x00\x00\x00\x61\x00\x00\x00\x62\x00\x00\x00\x15\x00\x00\x00\x16\x00\x00\x00\x68\x00\x00\x00\x66\x00\x00\x00\x67\x00\x00\x00\x19\x00\x00\x00\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x4e\x00\x00\x00\x4e\x00\x00\x00\x50\x00\x00\x00\x24\x00\x00\x00\x1b\x00\x00\x00\x26\x00\x00\x00\x4e\x00\x00\x00\x59\x00\x00\x00\x50\x00\x00\x00\x20\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x17\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x31\x00\x00\x00\x63\x00\x00\x00\x64\x00\x00\x00\x13\x00\x00\x00\x68\x00\x00\x00\x12\x00\x00\x00\x17\x00\x00\x00\x17\x00\x00\x00\x66\x00\x00\x00\x66\x00\x00\x00\x3b\x00\x00\x00\x3c\x00\x00\x00\x3d\x00\x00\x00\x3e\x00\x00\x00\x66\x00\x00\x00\x40\x00\x00\x00\x41\x00\x00\x00\x21\x00\x00\x00\x43\x00\x00\x00\x44\x00\x00\x00\x45\x00\x00\x00\x46\x00\x00\x00\x47\x00\x00\x00\x21\x00\x00\x00\x49\x00\x00\x00\x4a\x00\x00\x00\x4b\x00\x00\x00\x4c\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x12\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x15\x00\x00\x00\x16\x00\x00\x00\x68\x00\x00\x00\x57\x00\x00\x00\x58\x00\x00\x00\x21\x00\x00\x00\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x01\x00\x00\x00\x61\x00\x00\x00\x62\x00\x00\x00\x24\x00\x00\x00\x05\x00\x00\x00\x26\x00\x00\x00\x66\x00\x00\x00\x67\x00\x00\x00\x17\x00\x00\x00\x1b\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x0d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x31\x00\x00\x00\x32\x00\x00\x00\x4e\x00\x00\x00\x68\x00\x00\x00\x50\x00\x00\x00\x01\x00\x00\x00\x68\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x01\x00\x00\x00\x3e\x00\x00\x00\x14\x00\x00\x00\x12\x00\x00\x00\x05\x00\x00\x00\x0d\x00\x00\x00\x43\x00\x00\x00\x44\x00\x00\x00\x45\x00\x00\x00\x46\x00\x00\x00\x47\x00\x00\x00\x01\x00\x00\x00\x0d\x00\x00\x00\x15\x00\x00\x00\x66\x00\x00\x00\x05\x00\x00\x00\x06\x00\x00\x00\x4e\x00\x00\x00\x13\x00\x00\x00\x25\x00\x00\x00\x12\x00\x00\x00\x1b\x00\x00\x00\x28\x00\x00\x00\x15\x00\x00\x00\x16\x00\x00\x00\x23\x00\x00\x00\x18\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x01\x00\x00\x00\x61\x00\x00\x00\x62\x00\x00\x00\x24\x00\x00\x00\x05\x00\x00\x00\x26\x00\x00\x00\x66\x00\x00\x00\x67\x00\x00\x00\x68\x00\x00\x00\x68\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x0d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x31\x00\x00\x00\x32\x00\x00\x00\x13\x00\x00\x00\x66\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x65\x00\x00\x00\x05\x00\x00\x00\x13\x00\x00\x00\x66\x00\x00\x00\x3e\x00\x00\x00\x48\x00\x00\x00\x17\x00\x00\x00\x55\x00\x00\x00\x0c\x00\x00\x00\x43\x00\x00\x00\x44\x00\x00\x00\x45\x00\x00\x00\x46\x00\x00\x00\x47\x00\x00\x00\x14\x00\x00\x00\x03\x00\x00\x00\x68\x00\x00\x00\x5f\x00\x00\x00\x60\x00\x00\x00\x07\x00\x00\x00\x4e\x00\x00\x00\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\x66\x00\x00\x00\x01\x00\x00\x00\x5a\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x12\x00\x00\x00\x61\x00\x00\x00\x62\x00\x00\x00\x15\x00\x00\x00\x16\x00\x00\x00\x0d\x00\x00\x00\x66\x00\x00\x00\x67\x00\x00\x00\x23\x00\x00\x00\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x01\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x24\x00\x00\x00\x05\x00\x00\x00\x26\x00\x00\x00\x1b\x00\x00\x00\x19\x00\x00\x00\x1a\x00\x00\x00\x21\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x0d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x31\x00\x00\x00\x32\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x15\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x27\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x01\x00\x00\x00\x3e\x00\x00\x00\x68\x00\x00\x00\x21\x00\x00\x00\x05\x00\x00\x00\x4f\x00\x00\x00\x43\x00\x00\x00\x44\x00\x00\x00\x45\x00\x00\x00\x46\x00\x00\x00\x47\x00\x00\x00\x21\x00\x00\x00\x0d\x00\x00\x00\x21\x00\x00\x00\x14\x00\x00\x00\x01\x00\x00\x00\x1b\x00\x00\x00\x4e\x00\x00\x00\x13\x00\x00\x00\x05\x00\x00\x00\x12\x00\x00\x00\x1b\x00\x00\x00\x66\x00\x00\x00\x15\x00\x00\x00\x16\x00\x00\x00\x21\x00\x00\x00\x20\x00\x00\x00\x0d\x00\x00\x00\x21\x00\x00\x00\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x15\x00\x00\x00\x61\x00\x00\x00\x62\x00\x00\x00\x24\x00\x00\x00\x17\x00\x00\x00\x26\x00\x00\x00\x66\x00\x00\x00\x67\x00\x00\x00\x01\x00\x00\x00\x21\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x05\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x31\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x0c\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x51\x00\x00\x00\x21\x00\x00\x00\x01\x00\x00\x00\x17\x00\x00\x00\x3e\x00\x00\x00\x0d\x00\x00\x00\x05\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x43\x00\x00\x00\x44\x00\x00\x00\x45\x00\x00\x00\x46\x00\x00\x00\x47\x00\x00\x00\x14\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x13\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x4e\x00\x00\x00\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x17\x00\x00\x00\x05\x00\x00\x00\x06\x00\x00\x00\x21\x00\x00\x00\x61\x00\x00\x00\x62\x00\x00\x00\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x66\x00\x00\x00\x67\x00\x00\x00\x20\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x21\x00\x00\x00\x17\x00\x00\x00\x54\x00\x00\x00\x17\x00\x00\x00\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\x65\x00\x00\x00\x14\x00\x00\x00\x01\x00\x00\x00\x35\x00\x00\x00\x17\x00\x00\x00\x18\x00\x00\x00\x05\x00\x00\x00\x06\x00\x00\x00\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x01\x00\x00\x00\x05\x00\x00\x00\x01\x00\x00\x00\x13\x00\x00\x00\x05\x00\x00\x00\x06\x00\x00\x00\x05\x00\x00\x00\x06\x00\x00\x00\x21\x00\x00\x00\x0d\x00\x00\x00\x21\x00\x00\x00\x0f\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x17\x00\x00\x00\x18\x00\x00\x00\x21\x00\x00\x00\x51\x00\x00\x00\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x17\x00\x00\x00\x18\x00\x00\x00\x54\x00\x00\x00\x3f\x00\x00\x00\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x17\x00\x00\x00\x18\x00\x00\x00\x22\x00\x00\x00\x53\x00\x00\x00\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x17\x00\x00\x00\x2a\x00\x00\x00\x13\x00\x00\x00\x2a\x00\x00\x00\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x13\x00\x00\x00\x13\x00\x00\x00\x19\x00\x00\x00\x17\x00\x00\x00\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x13\x00\x00\x00\x17\x00\x00\x00\x19\x00\x00\x00\x13\x00\x00\x00\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x13\x00\x00\x00\x13\x00\x00\x00\x19\x00\x00\x00\x13\x00\x00\x00\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x13\x00\x00\x00\x54\x00\x00\x00\x19\x00\x00\x00\x22\x00\x00\x00\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x22\x00\x00\x00\x22\x00\x00\x00\x19\x00\x00\x00\x22\x00\x00\x00\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x13\x00\x00\x00\x13\x00\x00\x00\x19\x00\x00\x00\x17\x00\x00\x00\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x13\x00\x00\x00\x17\x00\x00\x00\x17\x00\x00\x00\x17\x00\x00\x00\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x51\x00\x00\x00\x54\x00\x00\x00\x3f\x00\x00\x00\x17\x00\x00\x00\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x13\x00\x00\x00\x17\x00\x00\x00\x13\x00\x00\x00\x13\x00\x00\x00\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x54\x00\x00\x00\x17\x00\x00\x00\x17\x00\x00\x00\x17\x00\x00\x00\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x13\x00\x00\x00\x17\x00\x00\x00\x17\x00\x00\x00\x17\x00\x00\x00\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x13\x00\x00\x00\x08\x00\x00\x00\x07\x00\x00\x00\x0b\x00\x00\x00\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x19\x00\x00\x00\x19\x00\x00\x00\x0b\x00\x00\x00\x19\x00\x00\x00\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x08\x00\x00\x00\x0b\x00\x00\x00\x0b\x00\x00\x00\x19\x00\x00\x00\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x01\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x05\x00\x00\x00\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x01\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x05\x00\x00\x00\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\xff\xff\xff\xff\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\xff\xff\xff\xff\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\xff\xff\xff\xff\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x0d\x00\x00\x00\x20\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\xff\xff\xff\xff\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\x15\x00\x00\x00\x16\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\xff\xff\xff\xff\x20\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x0d\x00\x00\x00\x20\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\xff\xff\xff\xff\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\x15\x00\x00\x00\x16\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x20\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\x14\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\xff\xff\xff\xff\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\x1b\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x20\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x01\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x05\x00\x00\x00\x1b\x00\x00\x00\x1c\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\x00\x00\x0c\x00\x00\x00\x1b\x00\x00\x00\x1c\x00\x00\x00\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x20\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x20\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\xff\xff\xff\xff\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\xff\xff\xff\xff\x04\x00\x00\x00\x05\x00\x00\x00\x1b\x00\x00\x00\x1c\x00\x00\x00\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x20\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\x1b\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\xff\xff\xff\xff\x20\x00\x00\x00\x1b\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\x00\x00\x1b\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x0d\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x1b\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\xff\xff\xff\xff\x04\x00\x00\x00\x05\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\xff\xff\xff\xff\x04\x00\x00\x00\x05\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\xff\xff\xff\xff\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\x1b\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x1b\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x1b\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x1b\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x1b\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\xff\xff\xff\xff\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\x1b\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x1b\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x1b\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\xff\xff\xff\xff\x1b\x00\x00\x00\x01\x00\x00\x00\x05\x00\x00\x00\x01\x00\x00\x00\xff\xff\xff\xff\x05\x00\x00\x00\xff\xff\xff\xff\x05\x00\x00\x00\x01\x00\x00\x00\x1b\x00\x00\x00\x0d\x00\x00\x00\xff\xff\xff\xff\x05\x00\x00\x00\x0d\x00\x00\x00\x1b\x00\x00\x00\x0d\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x15\x00\x00\x00\x16\x00\x00\x00\x0d\x00\x00\x00\x15\x00\x00\x00\x16\x00\x00\x00\x15\x00\x00\x00\x11\x00\x00\x00\x12\x00\x00\x00\x01\x00\x00\x00\xff\xff\xff\xff\x01\x00\x00\x00\xff\xff\xff\xff\x05\x00\x00\x00\xff\xff\xff\xff\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\xff\xff\xff\xff\x01\x00\x00\x00\x0d\x00\x00\x00\x05\x00\x00\x00\x0d\x00\x00\x00\x05\x00\x00\x00\x11\x00\x00\x00\x12\x00\x00\x00\x11\x00\x00\x00\x12\x00\x00\x00\x01\x00\x00\x00\x0d\x00\x00\x00\xff\xff\xff\xff\x0d\x00\x00\x00\x05\x00\x00\x00\x11\x00\x00\x00\x12\x00\x00\x00\x11\x00\x00\x00\x12\x00\x00\x00\x01\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x0d\x00\x00\x00\x05\x00\x00\x00\x01\x00\x00\x00\xff\xff\xff\xff\x11\x00\x00\x00\x12\x00\x00\x00\x05\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x0d\x00\x00\x00\xff\xff\xff\xff\x05\x00\x00\x00\x05\x00\x00\x00\x11\x00\x00\x00\x0d\x00\x00\x00\xff\xff\xff\xff\x0f\x00\x00\x00\x10\x00\x00\x00\xff\xff\xff\xff\x0d\x00\x00\x00\x0d\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x02\x00\x00\x00\x03\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x06\x00\x00\x00\x07\x00\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\xff\xff\xff\xff\x0b\x00\x00\x00\x0c\x00\x00\x00\x0d\x00\x00\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x01\x00\x00\x00\xff\xff\xff\xff\x01\x00\x00\x00\xff\xff\xff\xff\x05\x00\x00\x00\x01\x00\x00\x00\x05\x00\x00\x00\x01\x00\x00\x00\xff\xff\xff\xff\x05\x00\x00\x00\xff\xff\xff\xff\x05\x00\x00\x00\x0d\x00\x00\x00\x0e\x00\x00\x00\x0d\x00\x00\x00\x0e\x00\x00\x00\x01\x00\x00\x00\x0d\x00\x00\x00\x0e\x00\x00\x00\x0d\x00\x00\x00\x05\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\x0d\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x00\x00\x32\x00\x00\x00\x33\x00\x00\x00\xaa\x00\x00\x00\x0e\x01\x00\x00\x34\x00\x00\x00\x35\x00\x00\x00\x88\x00\x00\x00\x0f\x01\x00\x00\x5c\x01\x00\x00\xd4\x00\x00\x00\x36\x00\x00\x00\x37\x00\x00\x00\x38\x00\x00\x00\x39\x00\x00\x00\x3a\x00\x00\x00\x3b\x00\x00\x00\x86\x01\x00\x00\xf9\x00\x00\x00\x60\x00\x00\x00\x3c\x00\x00\x00\x84\x01\x00\x00\x3d\x00\x00\x00\xf7\x00\x00\x00\x5f\x00\x00\x00\x85\x01\x00\x00\x31\x01\x00\x00\x3e\x00\x00\x00\x3f\x00\x00\x00\x40\x00\x00\x00\x41\x00\x00\x00\x42\x00\x00\x00\x43\x00\x00\x00\x44\x00\x00\x00\x6d\x01\x00\x00\x45\x00\x00\x00\x5a\x01\x00\x00\x7e\x00\x00\x00\x6e\x00\x00\x00\x6f\x00\x00\x00\x70\x00\x00\x00\x71\x00\x00\x00\x31\x01\x00\x00\x46\x00\x00\x00\x47\x00\x00\x00\x48\x00\x00\x00\x49\x00\x00\x00\xff\x00\x00\x00\x4a\x00\x00\x00\x4b\x00\x00\x00\x4c\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x00\x00\x4f\x00\x00\x00\x50\x00\x00\x00\x51\x00\x00\x00\xaa\x00\x00\x00\x52\x00\x00\x00\x53\x00\x00\x00\x54\x00\x00\x00\x55\x00\x00\x00\x56\x00\x00\x00\x57\x00\x00\x00\x16\x01\x00\x00\x58\x00\x00\x00\xf8\x00\x00\x00\x7e\x00\x00\x00\x7f\x00\x00\x00\xd0\x00\x00\x00\x89\x00\x00\x00\x59\x00\x00\x00\x5a\x00\x00\x00\x5b\x00\x00\x00\x72\x00\x00\x00\x1e\x01\x00\x00\xd5\x00\x00\x00\x5c\x00\x00\x00\xd1\x00\x00\x00\x24\x00\x00\x00\x87\x01\x00\x00\xad\x00\x00\x00\x5d\x00\x00\x00\x5e\x00\x00\x00\x73\x00\x00\x00\x74\x00\x00\x00\xfa\x00\x00\x00\x5f\x00\x00\x00\x60\x00\x00\x00\x32\x00\x00\x00\x33\x00\x00\x00\x11\x01\x00\x00\x5f\x00\x00\x00\x34\x00\x00\x00\x35\x00\x00\x00\xff\xff\xff\xff\xd4\x00\x00\x00\x6e\x01\x00\x00\x7f\x00\x00\x00\x36\x00\x00\x00\x37\x00\x00\x00\x38\x00\x00\x00\x39\x00\x00\x00\x3a\x00\x00\x00\x3b\x00\x00\x00\xd7\x00\x00\x00\x7e\x00\x00\x00\xd8\x00\x00\x00\x3c\x00\x00\x00\xd7\x00\x00\x00\x3d\x00\x00\x00\xd8\x00\x00\x00\x95\x00\x00\x00\x96\x00\x00\x00\x00\x01\x00\x00\x3e\x00\x00\x00\x3f\x00\x00\x00\x40\x00\x00\x00\x41\x00\x00\x00\x42\x00\x00\x00\x43\x00\x00\x00\x44\x00\x00\x00\x5f\x00\x00\x00\x45\x00\x00\x00\xde\x00\x00\x00\xa8\x00\x00\x00\x1f\x01\x00\x00\x7f\x00\x00\x00\xf6\x00\x00\x00\x88\x00\x00\x00\x17\x01\x00\x00\x46\x00\x00\x00\x47\x00\x00\x00\x48\x00\x00\x00\x49\x00\x00\x00\x95\x00\x00\x00\x4a\x00\x00\x00\x4b\x00\x00\x00\x4c\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x00\x00\x4f\x00\x00\x00\x50\x00\x00\x00\x51\x00\x00\x00\x4a\x01\x00\x00\x52\x00\x00\x00\x53\x00\x00\x00\x54\x00\x00\x00\x55\x00\x00\x00\x56\x00\x00\x00\x57\x00\x00\x00\x5f\x00\x00\x00\x58\x00\x00\x00\xd0\x00\x00\x00\x5f\x00\x00\x00\xe8\x00\x00\x00\x23\x00\x00\x00\x12\x01\x00\x00\x59\x00\x00\x00\x5a\x00\x00\x00\x5b\x00\x00\x00\xd5\x00\x00\x00\xd1\x00\x00\x00\xf5\x00\x00\x00\x5c\x00\x00\x00\xff\xff\xff\xff\x7f\x00\x00\x00\x32\x00\x00\x00\x33\x00\x00\x00\x5d\x00\x00\x00\x5e\x00\x00\x00\x34\x00\x00\x00\x35\x00\x00\x00\x7c\x01\x00\x00\x5f\x00\x00\x00\x60\x00\x00\x00\x7d\x01\x00\x00\x36\x00\x00\x00\x37\x00\x00\x00\x38\x00\x00\x00\x39\x00\x00\x00\x3a\x00\x00\x00\x3b\x00\x00\x00\x23\x00\x00\x00\x7f\x00\x00\x00\xf0\x00\x00\x00\x3c\x00\x00\x00\x79\x00\x00\x00\x3d\x00\x00\x00\x7f\x00\x00\x00\x5f\x00\x00\x00\x89\x00\x00\x00\xeb\x00\x00\x00\x3e\x00\x00\x00\x3f\x00\x00\x00\x7a\x00\x00\x00\x41\x00\x00\x00\x42\x00\x00\x00\x43\x00\x00\x00\x44\x00\x00\x00\xff\xff\xff\xff\x88\x00\x00\x00\x7e\x00\x00\x00\x7b\x00\x00\x00\x7c\x00\x00\x00\x6b\x00\x00\x00\x6c\x00\x00\x00\x88\x00\x00\x00\x5f\x00\x00\x00\x46\x00\x00\x00\x47\x00\x00\x00\x48\x00\x00\x00\x49\x00\x00\x00\x5f\x00\x00\x00\x4a\x00\x00\x00\x4b\x00\x00\x00\x48\x01\x00\x00\x4d\x00\x00\x00\x4e\x00\x00\x00\x4f\x00\x00\x00\x50\x00\x00\x00\x51\x00\x00\x00\x46\x01\x00\x00\x52\x00\x00\x00\x53\x00\x00\x00\x54\x00\x00\x00\x55\x00\x00\x00\x56\x00\x00\x00\x57\x00\x00\x00\xe5\x00\x00\x00\x58\x00\x00\x00\x6b\x00\x00\x00\xf3\x00\x00\x00\x6e\x00\x00\x00\x6f\x00\x00\x00\x70\x00\x00\x00\x71\x00\x00\x00\x5a\x00\x00\x00\x5b\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\xdc\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\xd9\x00\x00\x00\x32\x00\x00\x00\x65\x00\x00\x00\x5d\x00\x00\x00\x5e\x00\x00\x00\x34\x00\x00\x00\x35\x00\x00\x00\xff\xff\xff\xff\x5f\x00\x00\x00\x60\x00\x00\x00\xd3\x00\x00\x00\x36\x00\x00\x00\x37\x00\x00\x00\x38\x00\x00\x00\x39\x00\x00\x00\x3a\x00\x00\x00\x3b\x00\x00\x00\x7f\x00\x00\x00\x7f\x00\x00\x00\x89\x00\x00\x00\x3c\x00\x00\x00\x28\x00\x00\x00\x3d\x00\x00\x00\x7f\x00\x00\x00\x72\x00\x00\x00\x89\x00\x00\x00\x63\x00\x00\x00\x3e\x00\x00\x00\x3f\x00\x00\x00\xd2\x00\x00\x00\x41\x00\x00\x00\x42\x00\x00\x00\x43\x00\x00\x00\x44\x00\x00\x00\x73\x00\x00\x00\x74\x00\x00\x00\x0e\x01\x00\x00\xff\xff\xff\xff\x88\x00\x00\x00\xce\x00\x00\x00\x0f\x01\x00\x00\x5f\x00\x00\x00\x5f\x00\x00\x00\x46\x00\x00\x00\x47\x00\x00\x00\x48\x00\x00\x00\x49\x00\x00\x00\x5f\x00\x00\x00\x4a\x00\x00\x00\x4b\x00\x00\x00\x10\x01\x00\x00\x4d\x00\x00\x00\x4e\x00\x00\x00\x4f\x00\x00\x00\x50\x00\x00\x00\x51\x00\x00\x00\xcf\x00\x00\x00\x52\x00\x00\x00\x53\x00\x00\x00\x54\x00\x00\x00\x55\x00\x00\x00\x56\x00\x00\x00\x57\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x65\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x34\x00\x00\x00\x35\x00\x00\x00\xff\xff\xff\xff\x5a\x00\x00\x00\x5b\x00\x00\x00\xca\x00\x00\x00\x36\x00\x00\x00\x37\x00\x00\x00\x38\x00\x00\x00\x39\x00\x00\x00\x3a\x00\x00\x00\x3b\x00\x00\x00\x23\x00\x00\x00\x5d\x00\x00\x00\x5e\x00\x00\x00\x3c\x00\x00\x00\x79\x00\x00\x00\x3d\x00\x00\x00\x5f\x00\x00\x00\x60\x00\x00\x00\xc5\x00\x00\x00\x6a\x00\x00\x00\x3e\x00\x00\x00\x3f\x00\x00\x00\x90\x00\x00\x00\x41\x00\x00\x00\x42\x00\x00\x00\x43\x00\x00\x00\x44\x00\x00\x00\xcc\x00\x00\x00\x7f\x00\x00\x00\xff\xff\xff\xff\x89\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\x23\x00\x00\x00\x24\x00\x00\x00\x79\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x23\x00\x00\x00\x49\x00\x00\x00\xd4\x00\x00\x00\xc3\x00\x00\x00\x79\x00\x00\x00\x7a\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x00\x00\x4f\x00\x00\x00\x50\x00\x00\x00\x51\x00\x00\x00\x23\x00\x00\x00\x82\x00\x00\x00\x7f\x00\x00\x00\x5f\x00\x00\x00\xaa\x00\x00\x00\xab\x00\x00\x00\x57\x00\x00\x00\x83\x00\x00\x00\xfb\x00\x00\x00\x65\x00\x00\x00\xca\x00\x00\x00\xfc\x00\x00\x00\x34\x00\x00\x00\x35\x00\x00\x00\xc2\x00\x00\x00\xab\xff\xff\xff\x95\x00\x00\x00\xb0\x00\x00\x00\x36\x00\x00\x00\x37\x00\x00\x00\x38\x00\x00\x00\x39\x00\x00\x00\x3a\x00\x00\x00\x3b\x00\x00\x00\x23\x00\x00\x00\x5d\x00\x00\x00\x5e\x00\x00\x00\x3c\x00\x00\x00\x79\x00\x00\x00\x3d\x00\x00\x00\x5f\x00\x00\x00\x60\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x3e\x00\x00\x00\x3f\x00\x00\x00\x82\x00\x00\x00\x41\x00\x00\x00\x42\x00\x00\x00\x43\x00\x00\x00\x44\x00\x00\x00\xcc\x00\x00\x00\xe6\x00\x00\x00\x5f\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x23\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x23\x00\x00\x00\x91\x00\x00\x00\x6b\x01\x00\x00\x5f\x00\x00\x00\x49\x00\x00\x00\xa8\x00\x00\x00\x6c\x01\x00\x00\xd5\x00\x00\x00\x92\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x00\x00\x4f\x00\x00\x00\x50\x00\x00\x00\x51\x00\x00\x00\x27\x00\x00\x00\xae\x00\x00\x00\xff\xff\xff\xff\xfd\x00\x00\x00\xfe\x00\x00\x00\xaf\x00\x00\x00\x57\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x5f\x00\x00\x00\x23\x00\x00\x00\xab\xff\xff\xff\x23\x00\x00\x00\x24\x00\x00\x00\x79\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x65\x00\x00\x00\x5d\x00\x00\x00\x5e\x00\x00\x00\x34\x00\x00\x00\x35\x00\x00\x00\xdc\x00\x00\x00\x5f\x00\x00\x00\x60\x00\x00\x00\x41\x01\x00\x00\x36\x00\x00\x00\x37\x00\x00\x00\x38\x00\x00\x00\x39\x00\x00\x00\x3a\x00\x00\x00\x3b\x00\x00\x00\x23\x00\x00\x00\x95\x00\x00\x00\x37\x01\x00\x00\x3c\x00\x00\x00\x79\x00\x00\x00\x3d\x00\x00\x00\xed\x00\x00\x00\x6b\x00\x00\x00\x18\x01\x00\x00\x40\x01\x00\x00\x3e\x00\x00\x00\x3f\x00\x00\x00\x23\x01\x00\x00\x41\x00\x00\x00\x42\x00\x00\x00\x43\x00\x00\x00\x44\x00\x00\x00\xcc\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x24\x01\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x3e\x01\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x23\x00\x00\x00\x49\x00\x00\x00\xff\xff\xff\xff\x3f\x01\x00\x00\x79\x00\x00\x00\x95\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x00\x00\x4f\x00\x00\x00\x50\x00\x00\x00\x51\x00\x00\x00\x3a\x01\x00\x00\x82\x00\x00\x00\x39\x01\x00\x00\x80\x00\x00\x00\x23\x00\x00\x00\xec\x00\x00\x00\x57\x00\x00\x00\x5e\x01\x00\x00\x79\x00\x00\x00\x65\x00\x00\x00\x28\x00\x00\x00\x5f\x00\x00\x00\x34\x00\x00\x00\x35\x00\x00\x00\x35\x01\x00\x00\x81\x00\x00\x00\x21\x01\x00\x00\x34\x01\x00\x00\x36\x00\x00\x00\x37\x00\x00\x00\x38\x00\x00\x00\x39\x00\x00\x00\x3a\x00\x00\x00\x3b\x00\x00\x00\x22\x01\x00\x00\x5d\x00\x00\x00\x5e\x00\x00\x00\x3c\x00\x00\x00\x31\x01\x00\x00\x3d\x00\x00\x00\x5f\x00\x00\x00\x60\x00\x00\x00\x23\x00\x00\x00\x21\x01\x00\x00\x3e\x00\x00\x00\x3f\x00\x00\x00\x91\x00\x00\x00\x41\x00\x00\x00\x42\x00\x00\x00\x43\x00\x00\x00\x44\x00\x00\x00\x1a\x01\x00\x00\x23\x00\x00\x00\xb9\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x79\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x13\x01\x00\x00\x64\x01\x00\x00\x23\x00\x00\x00\x63\x01\x00\x00\x49\x00\x00\x00\x8a\x00\x00\x00\xac\x00\x00\x00\x8b\x00\x00\x00\x8c\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x00\x00\x4f\x00\x00\x00\x50\x00\x00\x00\x51\x00\x00\x00\x27\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x5d\x01\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x57\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x0b\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x23\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x60\x01\x00\x00\xaa\x00\x00\x00\xc0\x00\x00\x00\x58\x01\x00\x00\x5d\x00\x00\x00\x5e\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x68\x00\x00\x00\x5f\x00\x00\x00\x60\x00\x00\x00\x66\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x56\x01\x00\x00\x57\x01\x00\x00\x54\x01\x00\x00\x55\x01\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\xa8\x01\x00\x00\x23\x00\x00\x00\x27\x00\x00\x00\x23\x00\x00\x00\x51\x01\x00\x00\x75\x00\x00\x00\x76\x00\x00\x00\xaa\x00\x00\x00\xb3\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x77\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x23\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x23\x00\x00\x00\x79\x00\x00\x00\x23\x00\x00\x00\x4d\x01\x00\x00\xaa\x00\x00\x00\xb1\x00\x00\x00\xaa\x00\x00\x00\x36\x01\x00\x00\x8f\x01\x00\x00\x8a\x00\x00\x00\x8d\x01\x00\x00\x8d\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x75\x00\x00\x00\x31\x01\x00\x00\x8b\x01\x00\x00\x89\x01\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x77\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x75\x00\x00\x00\x2a\x01\x00\x00\x7a\x01\x00\x00\x78\x01\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x77\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x75\x00\x00\x00\x1b\x01\x00\x00\x77\x01\x00\x00\x72\x01\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x1c\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x78\x00\x00\x00\x71\x01\x00\x00\xa7\x01\x00\x00\x70\x01\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x77\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\xa5\x01\x00\x00\xa4\x01\x00\x00\x2d\x01\x00\x00\xa3\x01\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2e\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x9f\x01\x00\x00\xa0\x01\x00\x00\x67\x01\x00\x00\x9c\x01\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x68\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x9b\x01\x00\x00\x9a\x01\x00\x00\x4e\x01\x00\x00\x99\x01\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x4f\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x96\x01\x00\x00\xbb\x01\x00\x00\x2d\x01\x00\x00\x94\x01\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x80\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x92\x01\x00\x00\xbf\x01\x00\x00\x7d\x01\x00\x00\xbd\x01\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x7e\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\xba\x01\x00\x00\xb9\x01\x00\x00\x72\x01\x00\x00\xb8\x01\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x73\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\xb4\x01\x00\x00\xb7\x01\x00\x00\xb6\x01\x00\x00\xb5\x01\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x60\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\xb2\x01\x00\x00\xb3\x01\x00\x00\xb0\x01\x00\x00\xae\x01\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\xf2\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\xac\x01\x00\x00\xad\x01\x00\x00\xab\x01\x00\x00\xaa\x01\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\xe3\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\xd1\x01\x00\x00\xcd\x01\x00\x00\xca\x01\x00\x00\xc8\x01\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\xd5\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\xd3\x01\x00\x00\xc6\x01\x00\x00\xd4\x01\x00\x00\xd6\x01\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\xbf\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\xd8\x01\x00\x00\xa6\x00\x00\x00\xa8\x00\x00\x00\x93\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\xbe\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\xa5\x00\x00\x00\xb6\x00\x00\x00\xb5\x00\x00\x00\x43\x01\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\xbd\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x74\x00\x00\x00\xf0\x00\x00\x00\x3c\x01\x00\x00\xe5\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\xbc\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\xb2\x00\x00\x00\x3b\x01\x00\x00\x3a\x01\x00\x00\x29\x01\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x32\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2c\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2b\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x25\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x17\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x69\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x66\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x65\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x64\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x5d\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x5a\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x58\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x52\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x4d\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x4b\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x4a\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x42\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x41\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x8d\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x8b\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x89\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x87\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x7a\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x78\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x75\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x6e\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\xa7\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\xa5\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\xa1\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\xa0\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x9d\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x9c\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x96\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x94\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x92\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x90\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x8f\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\xbd\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\xbb\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\xb0\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\xae\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\xc8\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\xc6\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\xc0\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\xbf\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\xcf\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\xce\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\xd4\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\xd6\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x61\x00\x00\x00\x2d\x00\x00\x00\x62\x00\x00\x00\x00\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x61\x00\x00\x00\x2d\x00\x00\x00\x0a\x01\x00\x00\x00\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x61\x00\x00\x00\x2d\x00\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x61\x00\x00\x00\x2d\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x61\x00\x00\x00\x2d\x00\x00\x00\x61\x01\x00\x00\x00\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x61\x00\x00\x00\x2d\x00\x00\x00\x60\x01\x00\x00\x00\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x61\x00\x00\x00\x2d\x00\x00\x00\xcb\x01\x00\x00\x00\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x61\x00\x00\x00\x2d\x00\x00\x00\xca\x01\x00\x00\x00\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x61\x00\x00\x00\x2d\x00\x00\x00\xc4\x01\x00\x00\x00\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x61\x00\x00\x00\x2d\x00\x00\x00\xc3\x01\x00\x00\x00\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x61\x00\x00\x00\x2d\x00\x00\x00\xc2\x01\x00\x00\x00\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x61\x00\x00\x00\x2d\x00\x00\x00\xc1\x01\x00\x00\x00\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x61\x00\x00\x00\x2d\x00\x00\x00\xd1\x01\x00\x00\x00\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x61\x00\x00\x00\x2d\x00\x00\x00\xcd\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x23\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x23\x00\x00\x00\xbb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xba\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x65\x00\x00\x00\x66\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x23\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x23\x00\x00\x00\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb4\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x26\x01\x00\x00\x66\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x00\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x09\x01\x00\x00\x66\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x00\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x08\x01\x00\x00\x66\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x00\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x82\x01\x00\x00\x66\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x23\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x79\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x67\x00\x00\x00\x7a\x00\x00\x00\x66\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x00\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x7b\x00\x00\x00\x2f\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x07\x01\x00\x00\x00\x00\x00\x00\x66\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x23\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x79\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x06\x01\x00\x00\x7a\x00\x00\x00\x66\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x00\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x7b\x00\x00\x00\x81\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x69\x00\x00\x00\x00\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x66\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\xf1\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x00\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x81\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x23\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x91\x00\x00\x00\x28\x00\x00\x00\x05\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x66\x00\x00\x00\xb7\x00\x00\x00\x28\x00\x00\x00\x04\x01\x00\x00\x00\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x66\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x03\x01\x00\x00\x00\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x66\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x00\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x00\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x28\x00\x00\x00\x02\x01\x00\x00\x00\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x66\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x00\x00\x00\x00\x00\x00\x28\x01\x00\x00\x28\x00\x00\x00\x79\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x27\x01\x00\x00\xeb\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\xcc\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\xe9\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x00\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x00\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x00\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\xe8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\xe2\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\xe1\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\xe0\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\xdf\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x00\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\xde\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\xda\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\xd9\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xca\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x00\x00\x00\x00\x00\x00\x1a\x01\x00\x00\x23\x00\x00\x00\x79\x00\x00\x00\x23\x00\x00\x00\x00\x00\x00\x00\x79\x00\x00\x00\x00\x00\x00\x00\x79\x00\x00\x00\x23\x00\x00\x00\x0c\x01\x00\x00\x7a\x00\x00\x00\x00\x00\x00\x00\x79\x00\x00\x00\x7a\x00\x00\x00\xca\x00\x00\x00\x13\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7b\x00\x00\x00\x7f\x01\x00\x00\x84\x00\x00\x00\x7b\x00\x00\x00\x74\x01\x00\x00\x14\x01\x00\x00\x85\x00\x00\x00\x86\x00\x00\x00\x23\x00\x00\x00\x00\x00\x00\x00\x23\x00\x00\x00\x00\x00\x00\x00\x79\x00\x00\x00\x00\x00\x00\x00\x79\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x00\x00\x00\x00\x00\x00\x23\x00\x00\x00\x84\x00\x00\x00\x79\x00\x00\x00\x84\x00\x00\x00\x79\x00\x00\x00\x85\x00\x00\x00\xee\x00\x00\x00\x85\x00\x00\x00\xc8\x00\x00\x00\x23\x00\x00\x00\x84\x00\x00\x00\x00\x00\x00\x00\x84\x00\x00\x00\x79\x00\x00\x00\x85\x00\x00\x00\x48\x01\x00\x00\x85\x00\x00\x00\x46\x01\x00\x00\x23\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x84\x00\x00\x00\x79\x00\x00\x00\x23\x00\x00\x00\x00\x00\x00\x00\x85\x00\x00\x00\x44\x01\x00\x00\x79\x00\x00\x00\x23\x00\x00\x00\x23\x00\x00\x00\x84\x00\x00\x00\x00\x00\x00\x00\x79\x00\x00\x00\x79\x00\x00\x00\x89\x00\x00\x00\x8a\x00\x00\x00\x00\x00\x00\x00\x8b\x00\x00\x00\x35\x01\x00\x00\x00\x00\x00\x00\x8a\x00\x00\x00\xc5\x00\x00\x00\x8b\x00\x00\x00\x97\x01\x00\x00\x98\x00\x00\x00\x99\x00\x00\x00\x9a\x00\x00\x00\x9b\x00\x00\x00\x9c\x00\x00\x00\x9d\x00\x00\x00\x9e\x00\x00\x00\x9f\x00\x00\x00\x00\x00\x00\x00\xa0\x00\x00\x00\xa1\x00\x00\x00\xa2\x00\x00\x00\xa3\x00\x00\x00\xa4\x00\x00\x00\xa5\x00\x00\x00\x23\x00\x00\x00\x00\x00\x00\x00\x23\x00\x00\x00\x00\x00\x00\x00\x79\x00\x00\x00\x23\x00\x00\x00\x79\x00\x00\x00\x23\x00\x00\x00\x00\x00\x00\x00\x79\x00\x00\x00\x00\x00\x00\x00\x79\x00\x00\x00\x8e\x00\x00\x00\x8f\x00\x00\x00\xc6\x00\x00\x00\xc7\x00\x00\x00\x23\x00\x00\x00\x8e\x00\x00\x00\xc3\x00\x00\x00\x1f\x01\x00\x00\x79\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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 (33, 191) [- (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)- ]--happyRuleArr :: HappyAddr-happyRuleArr = HappyA# "\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x03\x00\x00\x00\x02\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x00\x05\x00\x00\x00\x01\x00\x00\x00\x06\x00\x00\x00\x01\x00\x00\x00\x06\x00\x00\x00\x02\x00\x00\x00\x07\x00\x00\x00\x03\x00\x00\x00\x08\x00\x00\x00\x01\x00\x00\x00\x09\x00\x00\x00\x04\x00\x00\x00\x09\x00\x00\x00\x02\x00\x00\x00\x09\x00\x00\x00\x04\x00\x00\x00\x09\x00\x00\x00\x02\x00\x00\x00\x09\x00\x00\x00\x02\x00\x00\x00\x09\x00\x00\x00\x02\x00\x00\x00\x09\x00\x00\x00\x06\x00\x00\x00\x09\x00\x00\x00\x05\x00\x00\x00\x09\x00\x00\x00\x04\x00\x00\x00\x09\x00\x00\x00\x04\x00\x00\x00\x09\x00\x00\x00\x04\x00\x00\x00\x09\x00\x00\x00\x02\x00\x00\x00\x09\x00\x00\x00\x02\x00\x00\x00\x09\x00\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\x07\x00\x00\x00\x09\x00\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\x07\x00\x00\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x03\x00\x00\x00\x0b\x00\x00\x00\x04\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x0c\x00\x00\x00\x01\x00\x00\x00\x0d\x00\x00\x00\x01\x00\x00\x00\x0d\x00\x00\x00\x01\x00\x00\x00\x0d\x00\x00\x00\x05\x00\x00\x00\x0d\x00\x00\x00\x07\x00\x00\x00\x0e\x00\x00\x00\x01\x00\x00\x00\x0e\x00\x00\x00\x02\x00\x00\x00\x0f\x00\x00\x00\x01\x00\x00\x00\x10\x00\x00\x00\x01\x00\x00\x00\x10\x00\x00\x00\x03\x00\x00\x00\x11\x00\x00\x00\x01\x00\x00\x00\x11\x00\x00\x00\x05\x00\x00\x00\x11\x00\x00\x00\x07\x00\x00\x00\x11\x00\x00\x00\x07\x00\x00\x00\x11\x00\x00\x00\x06\x00\x00\x00\x12\x00\x00\x00\x01\x00\x00\x00\x12\x00\x00\x00\x02\x00\x00\x00\x13\x00\x00\x00\x01\x00\x00\x00\x13\x00\x00\x00\x03\x00\x00\x00\x14\x00\x00\x00\x01\x00\x00\x00\x14\x00\x00\x00\x05\x00\x00\x00\x14\x00\x00\x00\x07\x00\x00\x00\x14\x00\x00\x00\x05\x00\x00\x00\x14\x00\x00\x00\x09\x00\x00\x00\x14\x00\x00\x00\x07\x00\x00\x00\x14\x00\x00\x00\x06\x00\x00\x00\x15\x00\x00\x00\x03\x00\x00\x00\x15\x00\x00\x00\x04\x00\x00\x00\x16\x00\x00\x00\x01\x00\x00\x00\x16\x00\x00\x00\x03\x00\x00\x00\x17\x00\x00\x00\x03\x00\x00\x00\x17\x00\x00\x00\x03\x00\x00\x00\x18\x00\x00\x00\x01\x00\x00\x00\x18\x00\x00\x00\x03\x00\x00\x00\x19\x00\x00\x00\x01\x00\x00\x00\x19\x00\x00\x00\x01\x00\x00\x00\x19\x00\x00\x00\x01\x00\x00\x00\x19\x00\x00\x00\x01\x00\x00\x00\x19\x00\x00\x00\x01\x00\x00\x00\x19\x00\x00\x00\x01\x00\x00\x00\x19\x00\x00\x00\x01\x00\x00\x00\x1a\x00\x00\x00\x01\x00\x00\x00\x1a\x00\x00\x00\x03\x00\x00\x00\x1b\x00\x00\x00\x01\x00\x00\x00\x1b\x00\x00\x00\x01\x00\x00\x00\x1b\x00\x00\x00\x01\x00\x00\x00\x1b\x00\x00\x00\x01\x00\x00\x00\x1b\x00\x00\x00\x01\x00\x00\x00\x1b\x00\x00\x00\x01\x00\x00\x00\x1b\x00\x00\x00\x01\x00\x00\x00\x1b\x00\x00\x00\x01\x00\x00\x00\x1b\x00\x00\x00\x01\x00\x00\x00\x1b\x00\x00\x00\x01\x00\x00\x00\x1b\x00\x00\x00\x01\x00\x00\x00\x1b\x00\x00\x00\x04\x00\x00\x00\x1b\x00\x00\x00\x0a\x00\x00\x00\x1b\x00\x00\x00\x01\x00\x00\x00\x1b\x00\x00\x00\x05\x00\x00\x00\x1b\x00\x00\x00\x05\x00\x00\x00\x1b\x00\x00\x00\x07\x00\x00\x00\x1b\x00\x00\x00\x03\x00\x00\x00\x1b\x00\x00\x00\x05\x00\x00\x00\x1b\x00\x00\x00\x01\x00\x00\x00\x1b\x00\x00\x00\x01\x00\x00\x00\x1b\x00\x00\x00\x03\x00\x00\x00\x1b\x00\x00\x00\x05\x00\x00\x00\x1b\x00\x00\x00\x0e\x00\x00\x00\x1b\x00\x00\x00\x01\x00\x00\x00\x1b\x00\x00\x00\x01\x00\x00\x00\x1b\x00\x00\x00\x03\x00\x00\x00\x1b\x00\x00\x00\x01\x00\x00\x00\x1b\x00\x00\x00\x01\x00\x00\x00\x1b\x00\x00\x00\x01\x00\x00\x00\x1b\x00\x00\x00\x01\x00\x00\x00\x1b\x00\x00\x00\x01\x00\x00\x00\x1b\x00\x00\x00\x05\x00\x00\x00\x1c\x00\x00\x00\x03\x00\x00\x00\x1c\x00\x00\x00\x01\x00\x00\x00\x1c\x00\x00\x00\x03\x00\x00\x00\x1d\x00\x00\x00\x03\x00\x00\x00\x1d\x00\x00\x00\x03\x00\x00\x00\x1d\x00\x00\x00\x01\x00\x00\x00\x1d\x00\x00\x00\x03\x00\x00\x00\x1d\x00\x00\x00\x03\x00\x00\x00\x1e\x00\x00\x00\x03\x00\x00\x00\x1e\x00\x00\x00\x01\x00\x00\x00\x1e\x00\x00\x00\x03\x00\x00\x00\x1f\x00\x00\x00\x03\x00\x00\x00\x1f\x00\x00\x00\x01\x00\x00\x00\x1f\x00\x00\x00\x03\x00\x00\x00\x20\x00\x00\x00\x02\x00\x00\x00\x20\x00\x00\x00\x02\x00\x00\x00\x20\x00\x00\x00\x02\x00\x00\x00\x20\x00\x00\x00\x02\x00\x00\x00\x20\x00\x00\x00\x02\x00\x00\x00\x20\x00\x00\x00\x02\x00\x00\x00\x20\x00\x00\x00\x02\x00\x00\x00\x20\x00\x00\x00\x02\x00\x00\x00\x20\x00\x00\x00\x04\x00\x00\x00\x20\x00\x00\x00\x02\x00\x00\x00\x20\x00\x00\x00\x03\x00\x00\x00\x20\x00\x00\x00\x02\x00\x00\x00\x20\x00\x00\x00\x02\x00\x00\x00\x20\x00\x00\x00\x01\x00\x00\x00\x20\x00\x00\x00\x02\x00\x00\x00\x20\x00\x00\x00\x02\x00\x00\x00\x21\x00\x00\x00\x03\x00\x00\x00\x21\x00\x00\x00\x08\x00\x00\x00\x21\x00\x00\x00\x09\x00\x00\x00\x21\x00\x00\x00\x08\x00\x00\x00\x21\x00\x00\x00\x05\x00\x00\x00\x21\x00\x00\x00\x03\x00\x00\x00\x21\x00\x00\x00\x06\x00\x00\x00\x21\x00\x00\x00\x04\x00\x00\x00\x21\x00\x00\x00\x08\x00\x00\x00\x21\x00\x00\x00\x01\x00\x00\x00\x21\x00\x00\x00\x03\x00\x00\x00\x21\x00\x00\x00\x08\x00\x00\x00\x21\x00\x00\x00\x09\x00\x00\x00\x21\x00\x00\x00\x08\x00\x00\x00\x21\x00\x00\x00\x04\x00\x00\x00\x21\x00\x00\x00\x08\x00\x00\x00\x21\x00\x00\x00\x08\x00\x00\x00\x22\x00\x00\x00\x03\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x23\x00\x00\x00\x01\x00\x00\x00\x23\x00\x00\x00\x03\x00\x00\x00"#--happyCatchStates :: [Happy_Prelude.Int]-happyCatchStates = []--happy_n_terms = 105 :: Happy_Prelude.Int-happy_n_nonterms = 36 :: Happy_Prelude.Int--happy_n_starts = 33 :: Happy_Prelude.Int--happyReduce_33 = happySpecReduce_1 0# happyReduction_33-happyReduction_33 happy_x_1- = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn37- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), (Data.Text.unpack ((\(PT _ (TL s)) -> s) happy_var_1)))- )}--happyReduce_34 = happySpecReduce_1 1# happyReduction_34-happyReduction_34 happy_x_1- = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn38- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.VarIdentToken (tokenText happy_var_1))- )}--happyReduce_35 = happySpecReduce_1 2# happyReduction_35-happyReduction_35 happy_x_1- = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn39- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.HoleIdentToken (tokenText happy_var_1))- )}--happyReduce_36 = happySpecReduce_2 3# happyReduction_36-happyReduction_36 happy_x_2- happy_x_1- = case happyOut44 happy_x_1 of { (HappyWrap44 happy_var_1) -> - case happyOut47 happy_x_2 of { (HappyWrap47 happy_var_2) -> - happyIn40- ((fst happy_var_1, Language.Rzk.Syntax.Abs.Module (fst happy_var_1) (snd happy_var_1) (snd happy_var_2))- )}}--happyReduce_37 = happySpecReduce_1 4# happyReduction_37-happyReduction_37 happy_x_1- = case happyOut39 happy_x_1 of { (HappyWrap39 happy_var_1) -> - happyIn41- ((fst happy_var_1, Language.Rzk.Syntax.Abs.HoleIdent (fst happy_var_1) (snd happy_var_1))- )}--happyReduce_38 = happySpecReduce_1 5# happyReduction_38-happyReduction_38 happy_x_1- = case happyOut38 happy_x_1 of { (HappyWrap38 happy_var_1) -> - happyIn42- ((fst happy_var_1, Language.Rzk.Syntax.Abs.VarIdent (fst happy_var_1) (snd happy_var_1))- )}--happyReduce_39 = happySpecReduce_1 6# happyReduction_39-happyReduction_39 happy_x_1- = case happyOut42 happy_x_1 of { (HappyWrap42 happy_var_1) -> - happyIn43- ((fst happy_var_1, (:[]) (snd happy_var_1))- )}--happyReduce_40 = happySpecReduce_2 6# happyReduction_40-happyReduction_40 happy_x_2- happy_x_1- = case happyOut42 happy_x_1 of { (HappyWrap42 happy_var_1) -> - case happyOut43 happy_x_2 of { (HappyWrap43 happy_var_2) -> - happyIn43- ((fst happy_var_1, (:) (snd happy_var_1) (snd happy_var_2))- )}}--happyReduce_41 = happySpecReduce_3 7# happyReduction_41-happyReduction_41 happy_x_3- happy_x_2- happy_x_1- = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut45 happy_x_2 of { (HappyWrap45 happy_var_2) -> - happyIn44- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.LanguageDecl (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2))- )}}--happyReduce_42 = happySpecReduce_1 8# happyReduction_42-happyReduction_42 happy_x_1- = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn45- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.Rzk1 (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))- )}--happyReduce_43 = happyReduce 4# 9# happyReduction_43-happyReduction_43 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut37 happy_x_2 of { (HappyWrap37 happy_var_2) -> - case happyOut37 happy_x_4 of { (HappyWrap37 happy_var_4) -> - happyIn46- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.CommandSetOption (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4))- ) `HappyStk` happyRest}}}--happyReduce_44 = happySpecReduce_2 9# happyReduction_44-happyReduction_44 happy_x_2- happy_x_1- = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut37 happy_x_2 of { (HappyWrap37 happy_var_2) -> - happyIn46- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.CommandUnsetOption (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2))- )}}--happyReduce_45 = happyReduce 4# 9# happyReduction_45-happyReduction_45 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut71 happy_x_2 of { (HappyWrap71 happy_var_2) -> - case happyOut71 happy_x_4 of { (HappyWrap71 happy_var_4) -> - happyIn46- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.CommandCheck (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4))- ) `HappyStk` happyRest}}}--happyReduce_46 = happySpecReduce_2 9# happyReduction_46-happyReduction_46 happy_x_2- happy_x_1- = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut71 happy_x_2 of { (HappyWrap71 happy_var_2) -> - happyIn46- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.CommandCompute (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2))- )}}--happyReduce_47 = happySpecReduce_2 9# happyReduction_47-happyReduction_47 happy_x_2- happy_x_1- = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut71 happy_x_2 of { (HappyWrap71 happy_var_2) -> - happyIn46- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.CommandComputeWHNF (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2))- )}}--happyReduce_48 = happySpecReduce_2 9# happyReduction_48-happyReduction_48 happy_x_2- happy_x_1- = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut71 happy_x_2 of { (HappyWrap71 happy_var_2) -> - happyIn46- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.CommandComputeNF (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2))- )}}--happyReduce_49 = happyReduce 6# 9# happyReduction_49-happyReduction_49 (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 { happy_var_1 -> - case happyOut42 happy_x_2 of { (HappyWrap42 happy_var_2) -> - case happyOut48 happy_x_3 of { (HappyWrap48 happy_var_3) -> - case happyOut55 happy_x_4 of { (HappyWrap55 happy_var_4) -> - case happyOut71 happy_x_6 of { (HappyWrap71 happy_var_6) -> - happyIn46- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.CommandPostulate (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_3) (snd happy_var_4) (snd happy_var_6))- ) `HappyStk` happyRest}}}}}--happyReduce_50 = happyReduce 5# 9# happyReduction_50-happyReduction_50 (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 { happy_var_1 -> - case happyOut42 happy_x_2 of { (HappyWrap42 happy_var_2) -> - case happyOut48 happy_x_3 of { (HappyWrap48 happy_var_3) -> - case happyOut71 happy_x_5 of { (HappyWrap71 happy_var_5) -> - happyIn46- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.commandPostulateNoParams (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_3) (snd happy_var_5))- ) `HappyStk` happyRest}}}}--happyReduce_51 = happyReduce 4# 9# happyReduction_51-happyReduction_51 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut43 happy_x_2 of { (HappyWrap43 happy_var_2) -> - case happyOut71 happy_x_4 of { (HappyWrap71 happy_var_4) -> - happyIn46- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.CommandAssume (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4))- ) `HappyStk` happyRest}}}--happyReduce_52 = happyReduce 4# 9# happyReduction_52-happyReduction_52 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut42 happy_x_2 of { (HappyWrap42 happy_var_2) -> - case happyOut71 happy_x_4 of { (HappyWrap71 happy_var_4) -> - happyIn46- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.commandVariable (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4))- ) `HappyStk` happyRest}}}--happyReduce_53 = happyReduce 4# 9# happyReduction_53-happyReduction_53 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut43 happy_x_2 of { (HappyWrap43 happy_var_2) -> - case happyOut71 happy_x_4 of { (HappyWrap71 happy_var_4) -> - happyIn46- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.commandVariables (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4))- ) `HappyStk` happyRest}}}--happyReduce_54 = happySpecReduce_2 9# happyReduction_54-happyReduction_54 happy_x_2- happy_x_1- = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut49 happy_x_2 of { (HappyWrap49 happy_var_2) -> - happyIn46- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.CommandSection (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2))- )}}--happyReduce_55 = happySpecReduce_2 9# happyReduction_55-happyReduction_55 happy_x_2- happy_x_1- = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut49 happy_x_2 of { (HappyWrap49 happy_var_2) -> - happyIn46- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.CommandSectionEnd (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2))- )}}--happyReduce_56 = happyReduce 8# 9# happyReduction_56-happyReduction_56 (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 happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut42 happy_x_2 of { (HappyWrap42 happy_var_2) -> - case happyOut48 happy_x_3 of { (HappyWrap48 happy_var_3) -> - case happyOut55 happy_x_4 of { (HappyWrap55 happy_var_4) -> - case happyOut71 happy_x_6 of { (HappyWrap71 happy_var_6) -> - case happyOut71 happy_x_8 of { (HappyWrap71 happy_var_8) -> - happyIn46- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.CommandDefine (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_3) (snd happy_var_4) (snd happy_var_6) (snd happy_var_8))- ) `HappyStk` happyRest}}}}}}--happyReduce_57 = happyReduce 7# 9# happyReduction_57-happyReduction_57 (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 { happy_var_1 -> - case happyOut42 happy_x_2 of { (HappyWrap42 happy_var_2) -> - case happyOut48 happy_x_3 of { (HappyWrap48 happy_var_3) -> - case happyOut71 happy_x_5 of { (HappyWrap71 happy_var_5) -> - case happyOut71 happy_x_7 of { (HappyWrap71 happy_var_7) -> - happyIn46- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.commandDefineNoParams (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_3) (snd happy_var_5) (snd happy_var_7))- ) `HappyStk` happyRest}}}}}--happyReduce_58 = happyReduce 8# 9# happyReduction_58-happyReduction_58 (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 happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut42 happy_x_2 of { (HappyWrap42 happy_var_2) -> - case happyOut48 happy_x_3 of { (HappyWrap48 happy_var_3) -> - case happyOut55 happy_x_4 of { (HappyWrap55 happy_var_4) -> - case happyOut71 happy_x_6 of { (HappyWrap71 happy_var_6) -> - case happyOut71 happy_x_8 of { (HappyWrap71 happy_var_8) -> - happyIn46- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.commandDef (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_3) (snd happy_var_4) (snd happy_var_6) (snd happy_var_8))- ) `HappyStk` happyRest}}}}}}--happyReduce_59 = happyReduce 7# 9# happyReduction_59-happyReduction_59 (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 { happy_var_1 -> - case happyOut42 happy_x_2 of { (HappyWrap42 happy_var_2) -> - case happyOut48 happy_x_3 of { (HappyWrap48 happy_var_3) -> - case happyOut71 happy_x_5 of { (HappyWrap71 happy_var_5) -> - case happyOut71 happy_x_7 of { (HappyWrap71 happy_var_7) -> - happyIn46- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.commandDefNoParams (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_3) (snd happy_var_5) (snd happy_var_7))- ) `HappyStk` happyRest}}}}}--happyReduce_60 = happySpecReduce_0 10# happyReduction_60-happyReduction_60 = happyIn47- ((Language.Rzk.Syntax.Abs.BNFC'NoPosition, [])- )--happyReduce_61 = happySpecReduce_3 10# happyReduction_61-happyReduction_61 happy_x_3- happy_x_2- happy_x_1- = case happyOut46 happy_x_1 of { (HappyWrap46 happy_var_1) -> - case happyOut47 happy_x_3 of { (HappyWrap47 happy_var_3) -> - happyIn47- ((fst happy_var_1, (:) (snd happy_var_1) (snd happy_var_3))- )}}--happyReduce_62 = happyReduce 4# 11# happyReduction_62-happyReduction_62 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut43 happy_x_3 of { (HappyWrap43 happy_var_3) -> - happyIn48- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.DeclUsedVars (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_3))- ) `HappyStk` happyRest}}--happyReduce_63 = happySpecReduce_0 11# happyReduction_63-happyReduction_63 = happyIn48- ((Language.Rzk.Syntax.Abs.BNFC'NoPosition, Language.Rzk.Syntax.Abs.noDeclUsedVars Language.Rzk.Syntax.Abs.BNFC'NoPosition)- )--happyReduce_64 = happySpecReduce_0 12# happyReduction_64-happyReduction_64 = happyIn49- ((Language.Rzk.Syntax.Abs.BNFC'NoPosition, Language.Rzk.Syntax.Abs.NoSectionName Language.Rzk.Syntax.Abs.BNFC'NoPosition)- )--happyReduce_65 = happySpecReduce_1 12# happyReduction_65-happyReduction_65 happy_x_1- = case happyOut42 happy_x_1 of { (HappyWrap42 happy_var_1) -> - happyIn49- ((fst happy_var_1, Language.Rzk.Syntax.Abs.SomeSectionName (fst happy_var_1) (snd happy_var_1))- )}--happyReduce_66 = happySpecReduce_1 13# happyReduction_66-happyReduction_66 happy_x_1- = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn50- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.PatternUnit (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))- )}--happyReduce_67 = happySpecReduce_1 13# happyReduction_67-happyReduction_67 happy_x_1- = case happyOut42 happy_x_1 of { (HappyWrap42 happy_var_1) -> - happyIn50- ((fst happy_var_1, Language.Rzk.Syntax.Abs.PatternVar (fst happy_var_1) (snd happy_var_1))- )}--happyReduce_68 = happyReduce 5# 13# happyReduction_68-happyReduction_68 (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 { happy_var_1 -> - case happyOut50 happy_x_2 of { (HappyWrap50 happy_var_2) -> - case happyOut50 happy_x_4 of { (HappyWrap50 happy_var_4) -> - happyIn50- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.PatternPair (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4))- ) `HappyStk` happyRest}}}--happyReduce_69 = happyReduce 7# 13# happyReduction_69-happyReduction_69 (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 { happy_var_1 -> - case happyOut50 happy_x_2 of { (HappyWrap50 happy_var_2) -> - case happyOut50 happy_x_4 of { (HappyWrap50 happy_var_4) -> - case happyOut53 happy_x_6 of { (HappyWrap53 happy_var_6) -> - happyIn50- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.PatternTuple (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4) (snd happy_var_6))- ) `HappyStk` happyRest}}}}--happyReduce_70 = happySpecReduce_1 14# happyReduction_70-happyReduction_70 happy_x_1- = case happyOut50 happy_x_1 of { (HappyWrap50 happy_var_1) -> - happyIn51- ((fst happy_var_1, (:[]) (snd happy_var_1))- )}--happyReduce_71 = happySpecReduce_2 14# happyReduction_71-happyReduction_71 happy_x_2- happy_x_1- = case happyOut50 happy_x_1 of { (HappyWrap50 happy_var_1) -> - case happyOut51 happy_x_2 of { (HappyWrap51 happy_var_2) -> - happyIn51- ((fst happy_var_1, (:) (snd happy_var_1) (snd happy_var_2))- )}}--happyReduce_72 = happySpecReduce_1 15# happyReduction_72-happyReduction_72 happy_x_1- = case happyOut50 happy_x_1 of { (HappyWrap50 happy_var_1) -> - happyIn52- ((fst happy_var_1, (snd happy_var_1))- )}--happyReduce_73 = happySpecReduce_1 16# happyReduction_73-happyReduction_73 happy_x_1- = case happyOut52 happy_x_1 of { (HappyWrap52 happy_var_1) -> - happyIn53- ((fst happy_var_1, (:[]) (snd happy_var_1))- )}--happyReduce_74 = happySpecReduce_3 16# happyReduction_74-happyReduction_74 happy_x_3- happy_x_2- happy_x_1- = case happyOut52 happy_x_1 of { (HappyWrap52 happy_var_1) -> - case happyOut53 happy_x_3 of { (HappyWrap53 happy_var_3) -> - happyIn53- ((fst happy_var_1, (:) (snd happy_var_1) (snd happy_var_3))- )}}--happyReduce_75 = happySpecReduce_1 17# happyReduction_75-happyReduction_75 happy_x_1- = case happyOut50 happy_x_1 of { (HappyWrap50 happy_var_1) -> - happyIn54- ((fst happy_var_1, Language.Rzk.Syntax.Abs.ParamPattern (fst happy_var_1) (snd happy_var_1))- )}--happyReduce_76 = happyReduce 5# 17# happyReduction_76-happyReduction_76 (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 { happy_var_1 -> - case happyOut51 happy_x_2 of { (HappyWrap51 happy_var_2) -> - case happyOut71 happy_x_4 of { (HappyWrap71 happy_var_4) -> - happyIn54- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ParamPatternType (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4))- ) `HappyStk` happyRest}}}--happyReduce_77 = happyReduce 7# 17# happyReduction_77-happyReduction_77 (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 { happy_var_1 -> - case happyOut51 happy_x_2 of { (HappyWrap51 happy_var_2) -> - case happyOut71 happy_x_4 of { (HappyWrap71 happy_var_4) -> - case happyOut71 happy_x_6 of { (HappyWrap71 happy_var_6) -> - happyIn54- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ParamPatternShape (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4) (snd happy_var_6))- ) `HappyStk` happyRest}}}}--happyReduce_78 = happyReduce 7# 17# happyReduction_78-happyReduction_78 (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 { happy_var_1 -> - case happyOut50 happy_x_2 of { (HappyWrap50 happy_var_2) -> - case happyOut71 happy_x_4 of { (HappyWrap71 happy_var_4) -> - case happyOut71 happy_x_6 of { (HappyWrap71 happy_var_6) -> - happyIn54- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ParamPatternShapeDeprecated (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4) (snd happy_var_6))- ) `HappyStk` happyRest}}}}--happyReduce_79 = happyReduce 6# 17# happyReduction_79-happyReduction_79 (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 { happy_var_1 -> - case happyOut51 happy_x_2 of { (HappyWrap51 happy_var_2) -> - case happyOut62 happy_x_4 of { (HappyWrap62 happy_var_4) -> - case happyOut71 happy_x_5 of { (HappyWrap71 happy_var_5) -> - happyIn54- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ParamPatternModalType (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4) (snd happy_var_5))- ) `HappyStk` happyRest}}}}--happyReduce_80 = happySpecReduce_1 18# happyReduction_80-happyReduction_80 happy_x_1- = case happyOut54 happy_x_1 of { (HappyWrap54 happy_var_1) -> - happyIn55- ((fst happy_var_1, (:[]) (snd happy_var_1))- )}--happyReduce_81 = happySpecReduce_2 18# happyReduction_81-happyReduction_81 happy_x_2- happy_x_1- = case happyOut54 happy_x_1 of { (HappyWrap54 happy_var_1) -> - case happyOut55 happy_x_2 of { (HappyWrap55 happy_var_2) -> - happyIn55- ((fst happy_var_1, (:) (snd happy_var_1) (snd happy_var_2))- )}}--happyReduce_82 = happySpecReduce_1 19# happyReduction_82-happyReduction_82 happy_x_1- = case happyOut50 happy_x_1 of { (HappyWrap50 happy_var_1) -> - happyIn56- ((fst happy_var_1, Language.Rzk.Syntax.Abs.BindPattern (fst happy_var_1) (snd happy_var_1))- )}--happyReduce_83 = happySpecReduce_3 19# happyReduction_83-happyReduction_83 happy_x_3- happy_x_2- happy_x_1- = case happyOut50 happy_x_1 of { (HappyWrap50 happy_var_1) -> - case happyOut71 happy_x_3 of { (HappyWrap71 happy_var_3) -> - happyIn56- ((fst happy_var_1, Language.Rzk.Syntax.Abs.BindPatternType (fst happy_var_1) (snd happy_var_1) (snd happy_var_3))- )}}--happyReduce_84 = happySpecReduce_1 20# happyReduction_84-happyReduction_84 happy_x_1- = case happyOut69 happy_x_1 of { (HappyWrap69 happy_var_1) -> - happyIn57- ((fst happy_var_1, Language.Rzk.Syntax.Abs.ParamType (fst happy_var_1) (snd happy_var_1))- )}--happyReduce_85 = happyReduce 5# 20# happyReduction_85-happyReduction_85 (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 { happy_var_1 -> - case happyOut71 happy_x_2 of { (HappyWrap71 happy_var_2) -> - case happyOut71 happy_x_4 of { (HappyWrap71 happy_var_4) -> - happyIn57- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ParamTermType (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4))- ) `HappyStk` happyRest}}}--happyReduce_86 = happyReduce 7# 20# happyReduction_86-happyReduction_86 (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 { happy_var_1 -> - case happyOut71 happy_x_2 of { (HappyWrap71 happy_var_2) -> - case happyOut71 happy_x_4 of { (HappyWrap71 happy_var_4) -> - case happyOut71 happy_x_6 of { (HappyWrap71 happy_var_6) -> - happyIn57- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ParamTermShape (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4) (snd happy_var_6))- ) `HappyStk` happyRest}}}}--happyReduce_87 = happyReduce 5# 20# happyReduction_87-happyReduction_87 (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 { happy_var_1 -> - case happyOut50 happy_x_2 of { (HappyWrap50 happy_var_2) -> - case happyOut71 happy_x_4 of { (HappyWrap71 happy_var_4) -> - happyIn57- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ParamTermTypeDeprecated (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4))- ) `HappyStk` happyRest}}}--happyReduce_88 = happyReduce 9# 20# happyReduction_88-happyReduction_88 (happy_x_9 `HappyStk`- 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 happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut50 happy_x_3 of { (HappyWrap50 happy_var_3) -> - case happyOut71 happy_x_5 of { (HappyWrap71 happy_var_5) -> - case happyOut71 happy_x_8 of { (HappyWrap71 happy_var_8) -> - happyIn57- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ParamVarShapeDeprecated (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_3) (snd happy_var_5) (snd happy_var_8))- ) `HappyStk` happyRest}}}}--happyReduce_89 = happyReduce 7# 20# happyReduction_89-happyReduction_89 (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 { happy_var_1 -> - case happyOut50 happy_x_2 of { (HappyWrap50 happy_var_2) -> - case happyOut71 happy_x_4 of { (HappyWrap71 happy_var_4) -> - case happyOut71 happy_x_6 of { (HappyWrap71 happy_var_6) -> - happyIn57- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.paramVarShapeDeprecated (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4) (snd happy_var_6))- ) `HappyStk` happyRest}}}}--happyReduce_90 = happyReduce 6# 20# happyReduction_90-happyReduction_90 (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 { happy_var_1 -> - case happyOut71 happy_x_2 of { (HappyWrap71 happy_var_2) -> - case happyOut62 happy_x_4 of { (HappyWrap62 happy_var_4) -> - case happyOut71 happy_x_5 of { (HappyWrap71 happy_var_5) -> - happyIn57- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ParamTermModalType (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4) (snd happy_var_5))- ) `HappyStk` happyRest}}}}--happyReduce_91 = happySpecReduce_3 21# happyReduction_91-happyReduction_91 happy_x_3- happy_x_2- happy_x_1- = case happyOut50 happy_x_1 of { (HappyWrap50 happy_var_1) -> - case happyOut71 happy_x_3 of { (HappyWrap71 happy_var_3) -> - happyIn58- ((fst happy_var_1, Language.Rzk.Syntax.Abs.SigmaParam (fst happy_var_1) (snd happy_var_1) (snd happy_var_3))- )}}--happyReduce_92 = happyReduce 4# 21# happyReduction_92-happyReduction_92 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut50 happy_x_1 of { (HappyWrap50 happy_var_1) -> - case happyOut62 happy_x_3 of { (HappyWrap62 happy_var_3) -> - case happyOut71 happy_x_4 of { (HappyWrap71 happy_var_4) -> - happyIn58- ((fst happy_var_1, Language.Rzk.Syntax.Abs.SigmaParamModal (fst happy_var_1) (snd happy_var_1) (snd happy_var_3) (snd happy_var_4))- ) `HappyStk` happyRest}}}--happyReduce_93 = happySpecReduce_1 22# happyReduction_93-happyReduction_93 happy_x_1- = case happyOut58 happy_x_1 of { (HappyWrap58 happy_var_1) -> - happyIn59- ((fst happy_var_1, (:[]) (snd happy_var_1))- )}--happyReduce_94 = happySpecReduce_3 22# happyReduction_94-happyReduction_94 happy_x_3- happy_x_2- happy_x_1- = case happyOut58 happy_x_1 of { (HappyWrap58 happy_var_1) -> - case happyOut59 happy_x_3 of { (HappyWrap59 happy_var_3) -> - happyIn59- ((fst happy_var_1, (:) (snd happy_var_1) (snd happy_var_3))- )}}--happyReduce_95 = happySpecReduce_3 23# happyReduction_95-happyReduction_95 happy_x_3- happy_x_2- happy_x_1- = case happyOut71 happy_x_1 of { (HappyWrap71 happy_var_1) -> - case happyOut71 happy_x_3 of { (HappyWrap71 happy_var_3) -> - happyIn60- ((fst happy_var_1, Language.Rzk.Syntax.Abs.Restriction (fst happy_var_1) (snd happy_var_1) (snd happy_var_3))- )}}--happyReduce_96 = happySpecReduce_3 23# happyReduction_96-happyReduction_96 happy_x_3- happy_x_2- happy_x_1- = case happyOut71 happy_x_1 of { (HappyWrap71 happy_var_1) -> - case happyOut71 happy_x_3 of { (HappyWrap71 happy_var_3) -> - happyIn60- ((fst happy_var_1, Language.Rzk.Syntax.Abs.ASCII_Restriction (fst happy_var_1) (snd happy_var_1) (snd happy_var_3))- )}}--happyReduce_97 = happySpecReduce_1 24# happyReduction_97-happyReduction_97 happy_x_1- = case happyOut60 happy_x_1 of { (HappyWrap60 happy_var_1) -> - happyIn61- ((fst happy_var_1, (:[]) (snd happy_var_1))- )}--happyReduce_98 = happySpecReduce_3 24# happyReduction_98-happyReduction_98 happy_x_3- happy_x_2- happy_x_1- = case happyOut60 happy_x_1 of { (HappyWrap60 happy_var_1) -> - case happyOut61 happy_x_3 of { (HappyWrap61 happy_var_3) -> - happyIn61- ((fst happy_var_1, (:) (snd happy_var_1) (snd happy_var_3))- )}}--happyReduce_99 = happySpecReduce_1 25# happyReduction_99-happyReduction_99 happy_x_1- = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn62- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.Flat (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))- )}--happyReduce_100 = happySpecReduce_1 25# happyReduction_100-happyReduction_100 happy_x_1- = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn62- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ASCII_Flat (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))- )}--happyReduce_101 = happySpecReduce_1 25# happyReduction_101-happyReduction_101 happy_x_1- = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn62- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.Sharp (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))- )}--happyReduce_102 = happySpecReduce_1 25# happyReduction_102-happyReduction_102 happy_x_1- = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn62- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ASCII_Sharp (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))- )}--happyReduce_103 = happySpecReduce_1 25# happyReduction_103-happyReduction_103 happy_x_1- = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn62- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.Op (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))- )}--happyReduce_104 = happySpecReduce_1 25# happyReduction_104-happyReduction_104 happy_x_1- = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn62- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ASCII_Op (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))- )}--happyReduce_105 = happySpecReduce_1 25# happyReduction_105-happyReduction_105 happy_x_1- = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn62- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.Id (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))- )}--happyReduce_106 = happySpecReduce_1 26# happyReduction_106-happyReduction_106 happy_x_1- = case happyOut62 happy_x_1 of { (HappyWrap62 happy_var_1) -> - happyIn63- ((fst happy_var_1, Language.Rzk.Syntax.Abs.Single (fst happy_var_1) (snd happy_var_1))- )}--happyReduce_107 = happySpecReduce_3 26# happyReduction_107-happyReduction_107 happy_x_3- happy_x_2- happy_x_1- = case happyOut62 happy_x_1 of { (HappyWrap62 happy_var_1) -> - case happyOut62 happy_x_3 of { (HappyWrap62 happy_var_3) -> - happyIn63- ((fst happy_var_1, Language.Rzk.Syntax.Abs.Comp (fst happy_var_1) (snd happy_var_1) (snd happy_var_3))- )}}--happyReduce_108 = happySpecReduce_1 27# happyReduction_108-happyReduction_108 happy_x_1- = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn64- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.Universe (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))- )}--happyReduce_109 = happySpecReduce_1 27# happyReduction_109-happyReduction_109 happy_x_1- = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn64- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.UniverseCube (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))- )}--happyReduce_110 = happySpecReduce_1 27# happyReduction_110-happyReduction_110 happy_x_1- = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn64- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.UniverseTope (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))- )}--happyReduce_111 = happySpecReduce_1 27# happyReduction_111-happyReduction_111 happy_x_1- = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn64- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.CubeUnit (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))- )}--happyReduce_112 = happySpecReduce_1 27# happyReduction_112-happyReduction_112 happy_x_1- = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn64- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.CubeUnitStar (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))- )}--happyReduce_113 = happySpecReduce_1 27# happyReduction_113-happyReduction_113 happy_x_1- = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn64- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.Cube2 (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))- )}--happyReduce_114 = happySpecReduce_1 27# happyReduction_114-happyReduction_114 happy_x_1- = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn64- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.Cube2_0 (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))- )}--happyReduce_115 = happySpecReduce_1 27# happyReduction_115-happyReduction_115 happy_x_1- = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn64- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.Cube2_1 (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))- )}--happyReduce_116 = happySpecReduce_1 27# happyReduction_116-happyReduction_116 happy_x_1- = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn64- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.TopeTop (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))- )}--happyReduce_117 = happySpecReduce_1 27# happyReduction_117-happyReduction_117 happy_x_1- = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn64- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.TopeBottom (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))- )}--happyReduce_118 = happySpecReduce_1 27# happyReduction_118-happyReduction_118 happy_x_1- = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn64- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.RecBottom (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))- )}--happyReduce_119 = happyReduce 4# 27# happyReduction_119-happyReduction_119 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut61 happy_x_3 of { (HappyWrap61 happy_var_3) -> - happyIn64- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.RecOr (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_3))- ) `HappyStk` happyRest}}--happyReduce_120 = happyReduce 10# 27# happyReduction_120-happyReduction_120 (happy_x_10 `HappyStk`- happy_x_9 `HappyStk`- 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 happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut71 happy_x_3 of { (HappyWrap71 happy_var_3) -> - case happyOut71 happy_x_5 of { (HappyWrap71 happy_var_5) -> - case happyOut71 happy_x_7 of { (HappyWrap71 happy_var_7) -> - case happyOut71 happy_x_9 of { (HappyWrap71 happy_var_9) -> - happyIn64- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.RecOrDeprecated (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_3) (snd happy_var_5) (snd happy_var_7) (snd happy_var_9))- ) `HappyStk` happyRest}}}}}--happyReduce_121 = happySpecReduce_1 27# happyReduction_121-happyReduction_121 happy_x_1- = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn64- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.TypeUnit (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))- )}--happyReduce_122 = happyReduce 5# 27# happyReduction_122-happyReduction_122 (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 { happy_var_1 -> - case happyOut57 happy_x_2 of { (HappyWrap57 happy_var_2) -> - case happyOut71 happy_x_4 of { (HappyWrap71 happy_var_4) -> - happyIn64- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.TypeExtensionDeprecated (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4))- ) `HappyStk` happyRest}}}--happyReduce_123 = happyReduce 5# 27# happyReduction_123-happyReduction_123 (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 { happy_var_1 -> - case happyOut71 happy_x_2 of { (HappyWrap71 happy_var_2) -> - case happyOut71 happy_x_4 of { (HappyWrap71 happy_var_4) -> - happyIn64- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.Pair (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4))- ) `HappyStk` happyRest}}}--happyReduce_124 = happyReduce 7# 27# happyReduction_124-happyReduction_124 (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 { happy_var_1 -> - case happyOut71 happy_x_2 of { (HappyWrap71 happy_var_2) -> - case happyOut71 happy_x_4 of { (HappyWrap71 happy_var_4) -> - case happyOut72 happy_x_6 of { (HappyWrap72 happy_var_6) -> - happyIn64- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.Tuple (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4) (snd happy_var_6))- ) `HappyStk` happyRest}}}}--happyReduce_125 = happySpecReduce_3 27# happyReduction_125-happyReduction_125 happy_x_3- happy_x_2- happy_x_1- = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut62 happy_x_2 of { (HappyWrap62 happy_var_2) -> - case happyOut64 happy_x_3 of { (HappyWrap64 happy_var_3) -> - happyIn64- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ModApp (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_3))- )}}}--happyReduce_126 = happyReduce 5# 27# happyReduction_126-happyReduction_126 (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 { happy_var_1 -> - case happyOut62 happy_x_2 of { (HappyWrap62 happy_var_2) -> - case happyOut71 happy_x_4 of { (HappyWrap71 happy_var_4) -> - happyIn64- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ModType (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4))- ) `HappyStk` happyRest}}}--happyReduce_127 = happySpecReduce_1 27# happyReduction_127-happyReduction_127 happy_x_1- = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn64- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.Unit (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))- )}--happyReduce_128 = happySpecReduce_1 27# happyReduction_128-happyReduction_128 happy_x_1- = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn64- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.Refl (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))- )}--happyReduce_129 = happySpecReduce_3 27# happyReduction_129-happyReduction_129 happy_x_3- happy_x_2- happy_x_1- = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut71 happy_x_2 of { (HappyWrap71 happy_var_2) -> - happyIn64- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ReflTerm (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2))- )}}--happyReduce_130 = happyReduce 5# 27# happyReduction_130-happyReduction_130 (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 { happy_var_1 -> - case happyOut71 happy_x_2 of { (HappyWrap71 happy_var_2) -> - case happyOut71 happy_x_4 of { (HappyWrap71 happy_var_4) -> - happyIn64- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ReflTermType (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4))- ) `HappyStk` happyRest}}}--happyReduce_131 = happyReduce 14# 27# happyReduction_131-happyReduction_131 (happy_x_14 `HappyStk`- happy_x_13 `HappyStk`- happy_x_12 `HappyStk`- happy_x_11 `HappyStk`- happy_x_10 `HappyStk`- happy_x_9 `HappyStk`- 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 happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut71 happy_x_3 of { (HappyWrap71 happy_var_3) -> - case happyOut71 happy_x_5 of { (HappyWrap71 happy_var_5) -> - case happyOut71 happy_x_7 of { (HappyWrap71 happy_var_7) -> - case happyOut71 happy_x_9 of { (HappyWrap71 happy_var_9) -> - case happyOut71 happy_x_11 of { (HappyWrap71 happy_var_11) -> - case happyOut71 happy_x_13 of { (HappyWrap71 happy_var_13) -> - happyIn64- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.IdJ (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_3) (snd happy_var_5) (snd happy_var_7) (snd happy_var_9) (snd happy_var_11) (snd happy_var_13))- ) `HappyStk` happyRest}}}}}}}--happyReduce_132 = happySpecReduce_1 27# happyReduction_132-happyReduction_132 happy_x_1- = case happyOut41 happy_x_1 of { (HappyWrap41 happy_var_1) -> - happyIn64- ((fst happy_var_1, Language.Rzk.Syntax.Abs.Hole (fst happy_var_1) (snd happy_var_1))- )}--happyReduce_133 = happySpecReduce_1 27# happyReduction_133-happyReduction_133 happy_x_1- = case happyOut42 happy_x_1 of { (HappyWrap42 happy_var_1) -> - happyIn64- ((fst happy_var_1, Language.Rzk.Syntax.Abs.Var (fst happy_var_1) (snd happy_var_1))- )}--happyReduce_134 = happySpecReduce_3 27# happyReduction_134-happyReduction_134 happy_x_3- happy_x_2- happy_x_1- = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut71 happy_x_2 of { (HappyWrap71 happy_var_2) -> - happyIn64- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), (snd happy_var_2))- )}}--happyReduce_135 = happySpecReduce_1 27# happyReduction_135-happyReduction_135 happy_x_1- = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn64- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ASCII_CubeUnitStar (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))- )}--happyReduce_136 = happySpecReduce_1 27# happyReduction_136-happyReduction_136 happy_x_1- = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn64- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ASCII_Cube2_0 (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))- )}--happyReduce_137 = happySpecReduce_1 27# happyReduction_137-happyReduction_137 happy_x_1- = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn64- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ASCII_Cube2_1 (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))- )}--happyReduce_138 = happySpecReduce_1 27# happyReduction_138-happyReduction_138 happy_x_1- = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn64- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ASCII_TopeTop (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))- )}--happyReduce_139 = happySpecReduce_1 27# happyReduction_139-happyReduction_139 happy_x_1- = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn64- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ASCII_TopeBottom (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))- )}--happyReduce_140 = happyReduce 5# 27# happyReduction_140-happyReduction_140 (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 { happy_var_1 -> - case happyOut57 happy_x_2 of { (HappyWrap57 happy_var_2) -> - case happyOut71 happy_x_4 of { (HappyWrap71 happy_var_4) -> - happyIn64- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ASCII_TypeExtensionDeprecated (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4))- ) `HappyStk` happyRest}}}--happyReduce_141 = happySpecReduce_3 28# happyReduction_141-happyReduction_141 happy_x_3- happy_x_2- happy_x_1- = case happyOut65 happy_x_1 of { (HappyWrap65 happy_var_1) -> - case happyOut69 happy_x_3 of { (HappyWrap69 happy_var_3) -> - happyIn65- ((fst happy_var_1, Language.Rzk.Syntax.Abs.CubeProduct (fst happy_var_1) (snd happy_var_1) (snd happy_var_3))- )}}--happyReduce_142 = happySpecReduce_1 28# happyReduction_142-happyReduction_142 happy_x_1- = case happyOut69 happy_x_1 of { (HappyWrap69 happy_var_1) -> - happyIn65- ((fst happy_var_1, (snd happy_var_1))- )}--happyReduce_143 = happySpecReduce_3 28# happyReduction_143-happyReduction_143 happy_x_3- happy_x_2- happy_x_1- = case happyOut65 happy_x_1 of { (HappyWrap65 happy_var_1) -> - case happyOut69 happy_x_3 of { (HappyWrap69 happy_var_3) -> - happyIn65- ((fst happy_var_1, Language.Rzk.Syntax.Abs.ascii_CubeProduct (fst happy_var_1) (snd happy_var_1) (snd happy_var_3))- )}}--happyReduce_144 = happySpecReduce_3 29# happyReduction_144-happyReduction_144 happy_x_3- happy_x_2- happy_x_1- = case happyOut65 happy_x_1 of { (HappyWrap65 happy_var_1) -> - case happyOut65 happy_x_3 of { (HappyWrap65 happy_var_3) -> - happyIn66- ((fst happy_var_1, Language.Rzk.Syntax.Abs.TopeEQ (fst happy_var_1) (snd happy_var_1) (snd happy_var_3))- )}}--happyReduce_145 = happySpecReduce_3 29# happyReduction_145-happyReduction_145 happy_x_3- happy_x_2- happy_x_1- = case happyOut65 happy_x_1 of { (HappyWrap65 happy_var_1) -> - case happyOut65 happy_x_3 of { (HappyWrap65 happy_var_3) -> - happyIn66- ((fst happy_var_1, Language.Rzk.Syntax.Abs.TopeLEQ (fst happy_var_1) (snd happy_var_1) (snd happy_var_3))- )}}--happyReduce_146 = happySpecReduce_1 29# happyReduction_146-happyReduction_146 happy_x_1- = case happyOut65 happy_x_1 of { (HappyWrap65 happy_var_1) -> - happyIn66- ((fst happy_var_1, (snd happy_var_1))- )}--happyReduce_147 = happySpecReduce_3 29# happyReduction_147-happyReduction_147 happy_x_3- happy_x_2- happy_x_1- = case happyOut65 happy_x_1 of { (HappyWrap65 happy_var_1) -> - case happyOut65 happy_x_3 of { (HappyWrap65 happy_var_3) -> - happyIn66- ((fst happy_var_1, Language.Rzk.Syntax.Abs.ASCII_TopeEQ (fst happy_var_1) (snd happy_var_1) (snd happy_var_3))- )}}--happyReduce_148 = happySpecReduce_3 29# happyReduction_148-happyReduction_148 happy_x_3- happy_x_2- happy_x_1- = case happyOut65 happy_x_1 of { (HappyWrap65 happy_var_1) -> - case happyOut65 happy_x_3 of { (HappyWrap65 happy_var_3) -> - happyIn66- ((fst happy_var_1, Language.Rzk.Syntax.Abs.ASCII_TopeLEQ (fst happy_var_1) (snd happy_var_1) (snd happy_var_3))- )}}--happyReduce_149 = happySpecReduce_3 30# happyReduction_149-happyReduction_149 happy_x_3- happy_x_2- happy_x_1- = case happyOut66 happy_x_1 of { (HappyWrap66 happy_var_1) -> - case happyOut67 happy_x_3 of { (HappyWrap67 happy_var_3) -> - happyIn67- ((fst happy_var_1, Language.Rzk.Syntax.Abs.TopeAnd (fst happy_var_1) (snd happy_var_1) (snd happy_var_3))- )}}--happyReduce_150 = happySpecReduce_1 30# happyReduction_150-happyReduction_150 happy_x_1- = case happyOut66 happy_x_1 of { (HappyWrap66 happy_var_1) -> - happyIn67- ((fst happy_var_1, (snd happy_var_1))- )}--happyReduce_151 = happySpecReduce_3 30# happyReduction_151-happyReduction_151 happy_x_3- happy_x_2- happy_x_1- = case happyOut66 happy_x_1 of { (HappyWrap66 happy_var_1) -> - case happyOut67 happy_x_3 of { (HappyWrap67 happy_var_3) -> - happyIn67- ((fst happy_var_1, Language.Rzk.Syntax.Abs.ASCII_TopeAnd (fst happy_var_1) (snd happy_var_1) (snd happy_var_3))- )}}--happyReduce_152 = happySpecReduce_3 31# happyReduction_152-happyReduction_152 happy_x_3- happy_x_2- happy_x_1- = case happyOut67 happy_x_1 of { (HappyWrap67 happy_var_1) -> - case happyOut68 happy_x_3 of { (HappyWrap68 happy_var_3) -> - happyIn68- ((fst happy_var_1, Language.Rzk.Syntax.Abs.TopeOr (fst happy_var_1) (snd happy_var_1) (snd happy_var_3))- )}}--happyReduce_153 = happySpecReduce_1 31# happyReduction_153-happyReduction_153 happy_x_1- = case happyOut67 happy_x_1 of { (HappyWrap67 happy_var_1) -> - happyIn68- ((fst happy_var_1, (snd happy_var_1))- )}--happyReduce_154 = happySpecReduce_3 31# happyReduction_154-happyReduction_154 happy_x_3- happy_x_2- happy_x_1- = case happyOut67 happy_x_1 of { (HappyWrap67 happy_var_1) -> - case happyOut68 happy_x_3 of { (HappyWrap68 happy_var_3) -> - happyIn68- ((fst happy_var_1, Language.Rzk.Syntax.Abs.ASCII_TopeOr (fst happy_var_1) (snd happy_var_1) (snd happy_var_3))- )}}--happyReduce_155 = happySpecReduce_2 32# happyReduction_155-happyReduction_155 happy_x_2- happy_x_1- = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut64 happy_x_2 of { (HappyWrap64 happy_var_2) -> - happyIn69- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.TopeInv (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2))- )}}--happyReduce_156 = happySpecReduce_2 32# happyReduction_156-happyReduction_156 happy_x_2- happy_x_1- = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut64 happy_x_2 of { (HappyWrap64 happy_var_2) -> - happyIn69- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ascii_TopeInv (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2))- )}}--happyReduce_157 = happySpecReduce_2 32# happyReduction_157-happyReduction_157 happy_x_2- happy_x_1- = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut64 happy_x_2 of { (HappyWrap64 happy_var_2) -> - happyIn69- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.TopeUninv (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2))- )}}--happyReduce_158 = happySpecReduce_2 32# happyReduction_158-happyReduction_158 happy_x_2- happy_x_1- = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut64 happy_x_2 of { (HappyWrap64 happy_var_2) -> - happyIn69- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ascii_TopeUninv (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2))- )}}--happyReduce_159 = happySpecReduce_2 32# happyReduction_159-happyReduction_159 happy_x_2- happy_x_1- = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut64 happy_x_2 of { (HappyWrap64 happy_var_2) -> - happyIn69- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.CubeFlip (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2))- )}}--happyReduce_160 = happySpecReduce_2 32# happyReduction_160-happyReduction_160 happy_x_2- happy_x_1- = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut64 happy_x_2 of { (HappyWrap64 happy_var_2) -> - happyIn69- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ascii_CubeFlip (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2))- )}}--happyReduce_161 = happySpecReduce_2 32# happyReduction_161-happyReduction_161 happy_x_2- happy_x_1- = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut64 happy_x_2 of { (HappyWrap64 happy_var_2) -> - happyIn69- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.CubeUnflip (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2))- )}}--happyReduce_162 = happySpecReduce_2 32# happyReduction_162-happyReduction_162 happy_x_2- happy_x_1- = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut64 happy_x_2 of { (HappyWrap64 happy_var_2) -> - happyIn69- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ascii_CubeUnflip (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2))- )}}--happyReduce_163 = happyReduce 4# 32# happyReduction_163-happyReduction_163 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut69 happy_x_1 of { (HappyWrap69 happy_var_1) -> - case happyOut61 happy_x_3 of { (HappyWrap61 happy_var_3) -> - happyIn69- ((fst happy_var_1, Language.Rzk.Syntax.Abs.TypeRestricted (fst happy_var_1) (snd happy_var_1) (snd happy_var_3))- ) `HappyStk` happyRest}}--happyReduce_164 = happySpecReduce_2 32# happyReduction_164-happyReduction_164 happy_x_2- happy_x_1- = case happyOut69 happy_x_1 of { (HappyWrap69 happy_var_1) -> - case happyOut64 happy_x_2 of { (HappyWrap64 happy_var_2) -> - happyIn69- ((fst happy_var_1, Language.Rzk.Syntax.Abs.App (fst happy_var_1) (snd happy_var_1) (snd happy_var_2))- )}}--happyReduce_165 = happySpecReduce_3 32# happyReduction_165-happyReduction_165 happy_x_3- happy_x_2- happy_x_1- = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut63 happy_x_2 of { (HappyWrap63 happy_var_2) -> - case happyOut64 happy_x_3 of { (HappyWrap64 happy_var_3) -> - happyIn69- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ModExtract (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_3))- )}}}--happyReduce_166 = happySpecReduce_2 32# happyReduction_166-happyReduction_166 happy_x_2- happy_x_1- = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut64 happy_x_2 of { (HappyWrap64 happy_var_2) -> - happyIn69- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.First (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2))- )}}--happyReduce_167 = happySpecReduce_2 32# happyReduction_167-happyReduction_167 happy_x_2- happy_x_1- = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut64 happy_x_2 of { (HappyWrap64 happy_var_2) -> - happyIn69- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.Second (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2))- )}}--happyReduce_168 = happySpecReduce_1 32# happyReduction_168-happyReduction_168 happy_x_1- = case happyOut64 happy_x_1 of { (HappyWrap64 happy_var_1) -> - happyIn69- ((fst happy_var_1, (snd happy_var_1))- )}--happyReduce_169 = happySpecReduce_2 32# happyReduction_169-happyReduction_169 happy_x_2- happy_x_1- = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut64 happy_x_2 of { (HappyWrap64 happy_var_2) -> - happyIn69- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ASCII_First (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2))- )}}--happyReduce_170 = happySpecReduce_2 32# happyReduction_170-happyReduction_170 happy_x_2- happy_x_1- = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut64 happy_x_2 of { (HappyWrap64 happy_var_2) -> - happyIn69- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ASCII_Second (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2))- )}}--happyReduce_171 = happySpecReduce_3 33# happyReduction_171-happyReduction_171 happy_x_3- happy_x_2- happy_x_1- = case happyOut57 happy_x_1 of { (HappyWrap57 happy_var_1) -> - case happyOut70 happy_x_3 of { (HappyWrap70 happy_var_3) -> - happyIn70- ((fst happy_var_1, Language.Rzk.Syntax.Abs.TypeFun (fst happy_var_1) (snd happy_var_1) (snd happy_var_3))- )}}--happyReduce_172 = happyReduce 8# 33# happyReduction_172-happyReduction_172 (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 happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut50 happy_x_3 of { (HappyWrap50 happy_var_3) -> - case happyOut71 happy_x_5 of { (HappyWrap71 happy_var_5) -> - case happyOut70 happy_x_8 of { (HappyWrap70 happy_var_8) -> - happyIn70- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.TypeSigma (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_3) (snd happy_var_5) (snd happy_var_8))- ) `HappyStk` happyRest}}}}--happyReduce_173 = happyReduce 9# 33# happyReduction_173-happyReduction_173 (happy_x_9 `HappyStk`- 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 happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut50 happy_x_3 of { (HappyWrap50 happy_var_3) -> - case happyOut62 happy_x_5 of { (HappyWrap62 happy_var_5) -> - case happyOut71 happy_x_6 of { (HappyWrap71 happy_var_6) -> - case happyOut70 happy_x_9 of { (HappyWrap70 happy_var_9) -> - happyIn70- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.TypeSigmaModal (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_3) (snd happy_var_5) (snd happy_var_6) (snd happy_var_9))- ) `HappyStk` happyRest}}}}}--happyReduce_174 = happyReduce 8# 33# happyReduction_174-happyReduction_174 (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 happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut58 happy_x_3 of { (HappyWrap58 happy_var_3) -> - case happyOut59 happy_x_5 of { (HappyWrap59 happy_var_5) -> - case happyOut70 happy_x_8 of { (HappyWrap70 happy_var_8) -> - happyIn70- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.TypeSigmaTuple (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_3) (snd happy_var_5) (snd happy_var_8))- ) `HappyStk` happyRest}}}}--happyReduce_175 = happyReduce 5# 33# happyReduction_175-happyReduction_175 (happy_x_5 `HappyStk`- happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut68 happy_x_1 of { (HappyWrap68 happy_var_1) -> - case happyOut71 happy_x_3 of { (HappyWrap71 happy_var_3) -> - case happyOut68 happy_x_5 of { (HappyWrap68 happy_var_5) -> - happyIn70- ((fst happy_var_1, Language.Rzk.Syntax.Abs.TypeId (fst happy_var_1) (snd happy_var_1) (snd happy_var_3) (snd happy_var_5))- ) `HappyStk` happyRest}}}--happyReduce_176 = happySpecReduce_3 33# happyReduction_176-happyReduction_176 happy_x_3- happy_x_2- happy_x_1- = case happyOut68 happy_x_1 of { (HappyWrap68 happy_var_1) -> - case happyOut68 happy_x_3 of { (HappyWrap68 happy_var_3) -> - happyIn70- ((fst happy_var_1, Language.Rzk.Syntax.Abs.TypeIdSimple (fst happy_var_1) (snd happy_var_1) (snd happy_var_3))- )}}--happyReduce_177 = happyReduce 6# 33# happyReduction_177-happyReduction_177 (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 { happy_var_1 -> - case happyOut56 happy_x_2 of { (HappyWrap56 happy_var_2) -> - case happyOut71 happy_x_4 of { (HappyWrap71 happy_var_4) -> - case happyOut71 happy_x_6 of { (HappyWrap71 happy_var_6) -> - happyIn70- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.Let (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4) (snd happy_var_6))- ) `HappyStk` happyRest}}}}--happyReduce_178 = happyReduce 4# 33# 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_1 of { happy_var_1 -> - case happyOut55 happy_x_2 of { (HappyWrap55 happy_var_2) -> - case happyOut70 happy_x_4 of { (HappyWrap70 happy_var_4) -> - happyIn70- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.Lambda (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4))- ) `HappyStk` happyRest}}}--happyReduce_179 = happyReduce 8# 33# happyReduction_179-happyReduction_179 (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 happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut63 happy_x_3 of { (HappyWrap63 happy_var_3) -> - case happyOut56 happy_x_4 of { (HappyWrap56 happy_var_4) -> - case happyOut71 happy_x_6 of { (HappyWrap71 happy_var_6) -> - case happyOut71 happy_x_8 of { (HappyWrap71 happy_var_8) -> - happyIn70- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.LetMod (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_3) (snd happy_var_4) (snd happy_var_6) (snd happy_var_8))- ) `HappyStk` happyRest}}}}}--happyReduce_180 = happySpecReduce_1 33# happyReduction_180-happyReduction_180 happy_x_1- = case happyOut68 happy_x_1 of { (HappyWrap68 happy_var_1) -> - happyIn70- ((fst happy_var_1, (snd happy_var_1))- )}--happyReduce_181 = happySpecReduce_3 33# happyReduction_181-happyReduction_181 happy_x_3- happy_x_2- happy_x_1- = case happyOut57 happy_x_1 of { (HappyWrap57 happy_var_1) -> - case happyOut70 happy_x_3 of { (HappyWrap70 happy_var_3) -> - happyIn70- ((fst happy_var_1, Language.Rzk.Syntax.Abs.ASCII_TypeFun (fst happy_var_1) (snd happy_var_1) (snd happy_var_3))- )}}--happyReduce_182 = happyReduce 8# 33# happyReduction_182-happyReduction_182 (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 happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut50 happy_x_3 of { (HappyWrap50 happy_var_3) -> - case happyOut71 happy_x_5 of { (HappyWrap71 happy_var_5) -> - case happyOut70 happy_x_8 of { (HappyWrap70 happy_var_8) -> - happyIn70- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ASCII_TypeSigma (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_3) (snd happy_var_5) (snd happy_var_8))- ) `HappyStk` happyRest}}}}--happyReduce_183 = happyReduce 9# 33# happyReduction_183-happyReduction_183 (happy_x_9 `HappyStk`- 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 happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut50 happy_x_3 of { (HappyWrap50 happy_var_3) -> - case happyOut62 happy_x_5 of { (HappyWrap62 happy_var_5) -> - case happyOut71 happy_x_6 of { (HappyWrap71 happy_var_6) -> - case happyOut70 happy_x_9 of { (HappyWrap70 happy_var_9) -> - happyIn70- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ASCII_TypeSigmaModal (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_3) (snd happy_var_5) (snd happy_var_6) (snd happy_var_9))- ) `HappyStk` happyRest}}}}}--happyReduce_184 = happyReduce 8# 33# happyReduction_184-happyReduction_184 (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 happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut58 happy_x_3 of { (HappyWrap58 happy_var_3) -> - case happyOut59 happy_x_5 of { (HappyWrap59 happy_var_5) -> - case happyOut70 happy_x_8 of { (HappyWrap70 happy_var_8) -> - happyIn70- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ASCII_TypeSigmaTuple (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_3) (snd happy_var_5) (snd happy_var_8))- ) `HappyStk` happyRest}}}}--happyReduce_185 = happyReduce 4# 33# 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 { happy_var_1 -> - case happyOut55 happy_x_2 of { (HappyWrap55 happy_var_2) -> - case happyOut70 happy_x_4 of { (HappyWrap70 happy_var_4) -> - happyIn70- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ASCII_Lambda (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4))- ) `HappyStk` happyRest}}}--happyReduce_186 = happyReduce 8# 33# happyReduction_186-happyReduction_186 (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 happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut50 happy_x_3 of { (HappyWrap50 happy_var_3) -> - case happyOut71 happy_x_5 of { (HappyWrap71 happy_var_5) -> - case happyOut70 happy_x_8 of { (HappyWrap70 happy_var_8) -> - happyIn70- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.unicode_TypeSigmaAlt (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_3) (snd happy_var_5) (snd happy_var_8))- ) `HappyStk` happyRest}}}}--happyReduce_187 = happyReduce 8# 33# happyReduction_187-happyReduction_187 (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 happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut58 happy_x_3 of { (HappyWrap58 happy_var_3) -> - case happyOut59 happy_x_5 of { (HappyWrap59 happy_var_5) -> - case happyOut70 happy_x_8 of { (HappyWrap70 happy_var_8) -> - happyIn70- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.unicode_TypeSigmaTupleAlt (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_3) (snd happy_var_5) (snd happy_var_8))- ) `HappyStk` happyRest}}}}--happyReduce_188 = happySpecReduce_3 34# happyReduction_188-happyReduction_188 happy_x_3- happy_x_2- happy_x_1- = case happyOut68 happy_x_1 of { (HappyWrap68 happy_var_1) -> - case happyOut70 happy_x_3 of { (HappyWrap70 happy_var_3) -> - happyIn71- ((fst happy_var_1, Language.Rzk.Syntax.Abs.TypeAsc (fst happy_var_1) (snd happy_var_1) (snd happy_var_3))- )}}--happyReduce_189 = happySpecReduce_1 34# happyReduction_189-happyReduction_189 happy_x_1- = case happyOut70 happy_x_1 of { (HappyWrap70 happy_var_1) -> - happyIn71- ((fst happy_var_1, (snd happy_var_1))- )}--happyReduce_190 = happySpecReduce_1 35# happyReduction_190-happyReduction_190 happy_x_1- = case happyOut71 happy_x_1 of { (HappyWrap71 happy_var_1) -> - happyIn72- ((fst happy_var_1, (:[]) (snd happy_var_1))- )}--happyReduce_191 = happySpecReduce_3 35# happyReduction_191-happyReduction_191 happy_x_3- happy_x_2- happy_x_1- = case happyOut71 happy_x_1 of { (HappyWrap71 happy_var_1) -> - case happyOut72 happy_x_3 of { (HappyWrap72 happy_var_3) -> - happyIn72- ((fst happy_var_1, (:) (snd happy_var_1) (snd happy_var_3))- )}}--happyTerminalToTok term = case term of {- PT _ (TS _ 1) -> 2#;- PT _ (TS _ 2) -> 3#;- PT _ (TS _ 3) -> 4#;- PT _ (TS _ 4) -> 5#;- PT _ (TS _ 5) -> 6#;- PT _ (TS _ 6) -> 7#;- PT _ (TS _ 7) -> 8#;- PT _ (TS _ 8) -> 9#;- PT _ (TS _ 9) -> 10#;- PT _ (TS _ 10) -> 11#;- PT _ (TS _ 11) -> 12#;- PT _ (TS _ 12) -> 13#;- PT _ (TS _ 13) -> 14#;- PT _ (TS _ 14) -> 15#;- PT _ (TS _ 15) -> 16#;- PT _ (TS _ 16) -> 17#;- PT _ (TS _ 17) -> 18#;- PT _ (TS _ 18) -> 19#;- PT _ (TS _ 19) -> 20#;- PT _ (TS _ 20) -> 21#;- PT _ (TS _ 21) -> 22#;- PT _ (TS _ 22) -> 23#;- PT _ (TS _ 23) -> 24#;- PT _ (TS _ 24) -> 25#;- PT _ (TS _ 25) -> 26#;- PT _ (TS _ 26) -> 27#;- PT _ (TS _ 27) -> 28#;- PT _ (TS _ 28) -> 29#;- PT _ (TS _ 29) -> 30#;- PT _ (TS _ 30) -> 31#;- PT _ (TS _ 31) -> 32#;- PT _ (TS _ 32) -> 33#;- PT _ (TS _ 33) -> 34#;- PT _ (TS _ 34) -> 35#;- PT _ (TS _ 35) -> 36#;- PT _ (TS _ 36) -> 37#;- PT _ (TS _ 37) -> 38#;- PT _ (TS _ 38) -> 39#;- PT _ (TS _ 39) -> 40#;- PT _ (TS _ 40) -> 41#;- PT _ (TS _ 41) -> 42#;- PT _ (TS _ 42) -> 43#;- PT _ (TS _ 43) -> 44#;- PT _ (TS _ 44) -> 45#;- PT _ (TS _ 45) -> 46#;- PT _ (TS _ 46) -> 47#;- PT _ (TS _ 47) -> 48#;- PT _ (TS _ 48) -> 49#;- PT _ (TS _ 49) -> 50#;- PT _ (TS _ 50) -> 51#;- PT _ (TS _ 51) -> 52#;- PT _ (TS _ 52) -> 53#;- PT _ (TS _ 53) -> 54#;- PT _ (TS _ 54) -> 55#;- PT _ (TS _ 55) -> 56#;- PT _ (TS _ 56) -> 57#;- PT _ (TS _ 57) -> 58#;- PT _ (TS _ 58) -> 59#;- PT _ (TS _ 59) -> 60#;- PT _ (TS _ 60) -> 61#;- PT _ (TS _ 61) -> 62#;- PT _ (TS _ 62) -> 63#;- PT _ (TS _ 63) -> 64#;- PT _ (TS _ 64) -> 65#;- PT _ (TS _ 65) -> 66#;- PT _ (TS _ 66) -> 67#;- PT _ (TS _ 67) -> 68#;- PT _ (TS _ 68) -> 69#;- PT _ (TS _ 69) -> 70#;- PT _ (TS _ 70) -> 71#;- PT _ (TS _ 71) -> 72#;- PT _ (TS _ 72) -> 73#;- PT _ (TS _ 73) -> 74#;- PT _ (TS _ 74) -> 75#;- PT _ (TS _ 75) -> 76#;- PT _ (TS _ 76) -> 77#;- PT _ (TS _ 77) -> 78#;- PT _ (TS _ 78) -> 79#;- PT _ (TS _ 79) -> 80#;- PT _ (TS _ 80) -> 81#;- PT _ (TS _ 81) -> 82#;- PT _ (TS _ 82) -> 83#;- PT _ (TS _ 83) -> 84#;- PT _ (TS _ 84) -> 85#;- PT _ (TS _ 85) -> 86#;- PT _ (TS _ 86) -> 87#;- PT _ (TS _ 87) -> 88#;- PT _ (TS _ 88) -> 89#;- PT _ (TS _ 89) -> 90#;- PT _ (TS _ 90) -> 91#;- PT _ (TS _ 91) -> 92#;- PT _ (TS _ 92) -> 93#;- PT _ (TS _ 93) -> 94#;- PT _ (TS _ 94) -> 95#;- PT _ (TS _ 95) -> 96#;- PT _ (TS _ 96) -> 97#;- PT _ (TS _ 97) -> 98#;- PT _ (TS _ 98) -> 99#;- PT _ (TS _ 99) -> 100#;- PT _ (TL _) -> 101#;- PT _ (T_VarIdentToken _) -> 102#;- PT _ (T_HoleIdentToken _) -> 103#;- _ -> -1#;- }-{-# NOINLINE happyTerminalToTok #-}--happyLex kend _kmore [] = kend notHappyAtAll []-happyLex _kend kmore (tk:tks) = kmore (happyTerminalToTok tk) tk tks-{-# INLINE happyLex #-}--happyNewToken action sts stk = happyLex (\tk -> happyDoAction 104# notHappyAtAll action sts stk) (\i tk -> happyDoAction i tk action sts stk)--happyReport 104# tk explist resume tks = happyReport' tks explist resume-happyReport _ tk explist resume tks = happyReport' (tk:tks) explist (\tks -> resume (Happy_Prelude.tail tks))---happyThen :: () => (Err a) -> (a -> (Err b)) -> (Err b)-happyThen = ((>>=))-happyReturn :: () => a -> (Err a)-happyReturn = (return)-happyThen1 m k tks = ((>>=)) m (\a -> k a tks)-happyFmap1 f m tks = happyThen (m tks) (\a -> happyReturn (f a))-happyReturn1 :: () => a -> b -> (Err a)-happyReturn1 = \a tks -> (return) a-happyReport' :: () => [(Token)] -> [Happy_Prelude.String] -> ([(Token)] -> (Err a)) -> (Err a)-happyReport' = (\tokens expected resume -> happyError tokens)--happyAbort :: () => [(Token)] -> (Err a)-happyAbort = Happy_Prelude.error "Called abort handler in non-resumptive parser"--pModule_internal tks = happySomeParser where- happySomeParser = happyThen (happyDoParse 0# tks) (\x -> happyReturn (let {(HappyWrap40 x') = happyOut40 x} in x'))--pHoleIdent_internal tks = happySomeParser where- happySomeParser = happyThen (happyDoParse 1# tks) (\x -> happyReturn (let {(HappyWrap41 x') = happyOut41 x} in x'))--pVarIdent_internal tks = happySomeParser where- happySomeParser = happyThen (happyDoParse 2# tks) (\x -> happyReturn (let {(HappyWrap42 x') = happyOut42 x} in x'))--pListVarIdent_internal tks = happySomeParser where- happySomeParser = happyThen (happyDoParse 3# tks) (\x -> happyReturn (let {(HappyWrap43 x') = happyOut43 x} in x'))--pLanguageDecl_internal tks = happySomeParser where- happySomeParser = happyThen (happyDoParse 4# tks) (\x -> happyReturn (let {(HappyWrap44 x') = happyOut44 x} in x'))--pLanguage_internal tks = happySomeParser where- happySomeParser = happyThen (happyDoParse 5# tks) (\x -> happyReturn (let {(HappyWrap45 x') = happyOut45 x} in x'))--pCommand_internal tks = happySomeParser where- happySomeParser = happyThen (happyDoParse 6# tks) (\x -> happyReturn (let {(HappyWrap46 x') = happyOut46 x} in x'))--pListCommand_internal tks = happySomeParser where- happySomeParser = happyThen (happyDoParse 7# tks) (\x -> happyReturn (let {(HappyWrap47 x') = happyOut47 x} in x'))--pDeclUsedVars_internal tks = happySomeParser where- happySomeParser = happyThen (happyDoParse 8# tks) (\x -> happyReturn (let {(HappyWrap48 x') = happyOut48 x} in x'))--pSectionName_internal tks = happySomeParser where- happySomeParser = happyThen (happyDoParse 9# tks) (\x -> happyReturn (let {(HappyWrap49 x') = happyOut49 x} in x'))--pPattern_internal tks = happySomeParser where- happySomeParser = happyThen (happyDoParse 10# tks) (\x -> happyReturn (let {(HappyWrap50 x') = happyOut50 x} in x'))--pListPattern_internal tks = happySomeParser where- happySomeParser = happyThen (happyDoParse 11# tks) (\x -> happyReturn (let {(HappyWrap51 x') = happyOut51 x} in x'))--pPattern1_internal tks = happySomeParser where- happySomeParser = happyThen (happyDoParse 12# tks) (\x -> happyReturn (let {(HappyWrap52 x') = happyOut52 x} in x'))--pListPattern1_internal tks = happySomeParser where- happySomeParser = happyThen (happyDoParse 13# tks) (\x -> happyReturn (let {(HappyWrap53 x') = happyOut53 x} in x'))--pParam_internal tks = happySomeParser where- happySomeParser = happyThen (happyDoParse 14# tks) (\x -> happyReturn (let {(HappyWrap54 x') = happyOut54 x} in x'))--pListParam_internal tks = happySomeParser where- happySomeParser = happyThen (happyDoParse 15# tks) (\x -> happyReturn (let {(HappyWrap55 x') = happyOut55 x} in x'))--pBind_internal tks = happySomeParser where- happySomeParser = happyThen (happyDoParse 16# tks) (\x -> happyReturn (let {(HappyWrap56 x') = happyOut56 x} in x'))--pParamDecl_internal tks = happySomeParser where- happySomeParser = happyThen (happyDoParse 17# tks) (\x -> happyReturn (let {(HappyWrap57 x') = happyOut57 x} in x'))--pSigmaParam_internal tks = happySomeParser where- happySomeParser = happyThen (happyDoParse 18# tks) (\x -> happyReturn (let {(HappyWrap58 x') = happyOut58 x} in x'))--pListSigmaParam_internal tks = happySomeParser where- happySomeParser = happyThen (happyDoParse 19# tks) (\x -> happyReturn (let {(HappyWrap59 x') = happyOut59 x} in x'))--pRestriction_internal tks = happySomeParser where- happySomeParser = happyThen (happyDoParse 20# tks) (\x -> happyReturn (let {(HappyWrap60 x') = happyOut60 x} in x'))--pListRestriction_internal tks = happySomeParser where- happySomeParser = happyThen (happyDoParse 21# tks) (\x -> happyReturn (let {(HappyWrap61 x') = happyOut61 x} in x'))--pModality_internal tks = happySomeParser where- happySomeParser = happyThen (happyDoParse 22# tks) (\x -> happyReturn (let {(HappyWrap62 x') = happyOut62 x} in x'))--pModComp_internal tks = happySomeParser where- happySomeParser = happyThen (happyDoParse 23# tks) (\x -> happyReturn (let {(HappyWrap63 x') = happyOut63 x} in x'))--pTerm7_internal tks = happySomeParser where- happySomeParser = happyThen (happyDoParse 24# tks) (\x -> happyReturn (let {(HappyWrap64 x') = happyOut64 x} in x'))--pTerm5_internal tks = happySomeParser where- happySomeParser = happyThen (happyDoParse 25# tks) (\x -> happyReturn (let {(HappyWrap65 x') = happyOut65 x} in x'))--pTerm4_internal tks = happySomeParser where- happySomeParser = happyThen (happyDoParse 26# tks) (\x -> happyReturn (let {(HappyWrap66 x') = happyOut66 x} in x'))--pTerm3_internal tks = happySomeParser where- happySomeParser = happyThen (happyDoParse 27# tks) (\x -> happyReturn (let {(HappyWrap67 x') = happyOut67 x} in x'))--pTerm2_internal tks = happySomeParser where- happySomeParser = happyThen (happyDoParse 28# tks) (\x -> happyReturn (let {(HappyWrap68 x') = happyOut68 x} in x'))--pTerm6_internal tks = happySomeParser where- happySomeParser = happyThen (happyDoParse 29# tks) (\x -> happyReturn (let {(HappyWrap69 x') = happyOut69 x} in x'))--pTerm1_internal tks = happySomeParser where- happySomeParser = happyThen (happyDoParse 30# tks) (\x -> happyReturn (let {(HappyWrap70 x') = happyOut70 x} in x'))--pTerm_internal tks = happySomeParser where- happySomeParser = happyThen (happyDoParse 31# tks) (\x -> happyReturn (let {(HappyWrap71 x') = happyOut71 x} in x'))--pListTerm_internal tks = happySomeParser where- happySomeParser = happyThen (happyDoParse 32# tks) (\x -> happyReturn (let {(HappyWrap72 x') = happyOut72 x} in x'))--happySeq = happyDontSeq---type Err = Either String--happyError :: [Token] -> Err a-happyError ts = Left $- "syntax error at " ++ tokenPos ts ++- case ts of- [] -> []- [Err _] -> " due to lexer error"- t:_ -> " before `" ++ (prToken t) ++ "'"--myLexer :: Data.Text.Text -> [Token]-myLexer = tokens---- Entrypoints--pModule :: [Token] -> Err Language.Rzk.Syntax.Abs.Module-pModule = fmap snd . pModule_internal--pHoleIdent :: [Token] -> Err Language.Rzk.Syntax.Abs.HoleIdent-pHoleIdent = fmap snd . pHoleIdent_internal--pVarIdent :: [Token] -> Err Language.Rzk.Syntax.Abs.VarIdent-pVarIdent = fmap snd . pVarIdent_internal--pListVarIdent :: [Token] -> Err [Language.Rzk.Syntax.Abs.VarIdent]-pListVarIdent = fmap snd . pListVarIdent_internal--pLanguageDecl :: [Token] -> Err Language.Rzk.Syntax.Abs.LanguageDecl-pLanguageDecl = fmap snd . pLanguageDecl_internal--pLanguage :: [Token] -> Err Language.Rzk.Syntax.Abs.Language-pLanguage = fmap snd . pLanguage_internal--pCommand :: [Token] -> Err Language.Rzk.Syntax.Abs.Command-pCommand = fmap snd . pCommand_internal--pListCommand :: [Token] -> Err [Language.Rzk.Syntax.Abs.Command]-pListCommand = fmap snd . pListCommand_internal--pDeclUsedVars :: [Token] -> Err Language.Rzk.Syntax.Abs.DeclUsedVars-pDeclUsedVars = fmap snd . pDeclUsedVars_internal--pSectionName :: [Token] -> Err Language.Rzk.Syntax.Abs.SectionName-pSectionName = fmap snd . pSectionName_internal--pPattern :: [Token] -> Err Language.Rzk.Syntax.Abs.Pattern-pPattern = fmap snd . pPattern_internal--pListPattern :: [Token] -> Err [Language.Rzk.Syntax.Abs.Pattern]-pListPattern = fmap snd . pListPattern_internal--pPattern1 :: [Token] -> Err Language.Rzk.Syntax.Abs.Pattern-pPattern1 = fmap snd . pPattern1_internal--pListPattern1 :: [Token] -> Err [Language.Rzk.Syntax.Abs.Pattern]-pListPattern1 = fmap snd . pListPattern1_internal--pParam :: [Token] -> Err Language.Rzk.Syntax.Abs.Param-pParam = fmap snd . pParam_internal--pListParam :: [Token] -> Err [Language.Rzk.Syntax.Abs.Param]-pListParam = fmap snd . pListParam_internal--pBind :: [Token] -> Err Language.Rzk.Syntax.Abs.Bind-pBind = fmap snd . pBind_internal--pParamDecl :: [Token] -> Err Language.Rzk.Syntax.Abs.ParamDecl-pParamDecl = fmap snd . pParamDecl_internal--pSigmaParam :: [Token] -> Err Language.Rzk.Syntax.Abs.SigmaParam-pSigmaParam = fmap snd . pSigmaParam_internal--pListSigmaParam :: [Token] -> Err [Language.Rzk.Syntax.Abs.SigmaParam]-pListSigmaParam = fmap snd . pListSigmaParam_internal--pRestriction :: [Token] -> Err Language.Rzk.Syntax.Abs.Restriction-pRestriction = fmap snd . pRestriction_internal--pListRestriction :: [Token] -> Err [Language.Rzk.Syntax.Abs.Restriction]-pListRestriction = fmap snd . pListRestriction_internal--pModality :: [Token] -> Err Language.Rzk.Syntax.Abs.Modality-pModality = fmap snd . pModality_internal--pModComp :: [Token] -> Err Language.Rzk.Syntax.Abs.ModComp-pModComp = fmap snd . pModComp_internal+ , pModalColon+ , pTerm7+ , pTerm5+ , pTerm4+ , pTerm3+ , pTerm2+ , pTerm6+ , pTerm1+ , pTerm+ , pListTerm+ ) where++import Prelude++import qualified Language.Rzk.Syntax.Abs+import Language.Rzk.Syntax.Lex+import qualified Data.Text+import qualified Control.Monad as Happy_Prelude+import qualified Data.Bool as Happy_Prelude+import qualified Data.Function as Happy_Prelude+import qualified Data.Int as Happy_Prelude+import qualified Data.List as Happy_Prelude+import qualified Data.Maybe as Happy_Prelude+import qualified Data.String as Happy_Prelude+import qualified Data.Tuple as Happy_Prelude+import qualified GHC.Err as Happy_Prelude+import qualified GHC.Num as Happy_Prelude+import qualified Text.Show as Happy_Prelude+import qualified Data.Array as Happy_Data_Array+import qualified Data.Bits as Bits+import qualified GHC.Exts as Happy_GHC_Exts+import Control.Applicative(Applicative(..))+import Control.Monad (ap)++-- parser produced by Happy Version 2.2++newtype HappyAbsSyn = HappyAbsSyn HappyAny+#if __GLASGOW_HASKELL__ >= 607+type HappyAny = Happy_GHC_Exts.Any+#else+type HappyAny = forall a . a+#endif+newtype HappyWrap38 = HappyWrap38 ((Language.Rzk.Syntax.Abs.BNFC'Position, String))+happyIn38 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, String)) -> (HappyAbsSyn )+happyIn38 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap38 x)+{-# INLINE happyIn38 #-}+happyOut38 :: (HappyAbsSyn ) -> HappyWrap38+happyOut38 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut38 #-}+newtype HappyWrap39 = HappyWrap39 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.VarIdentToken))+happyIn39 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.VarIdentToken)) -> (HappyAbsSyn )+happyIn39 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap39 x)+{-# INLINE happyIn39 #-}+happyOut39 :: (HappyAbsSyn ) -> HappyWrap39+happyOut39 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut39 #-}+newtype HappyWrap40 = HappyWrap40 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.HoleIdentToken))+happyIn40 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.HoleIdentToken)) -> (HappyAbsSyn )+happyIn40 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap40 x)+{-# INLINE happyIn40 #-}+happyOut40 :: (HappyAbsSyn ) -> HappyWrap40+happyOut40 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut40 #-}+newtype HappyWrap41 = HappyWrap41 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Module))+happyIn41 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Module)) -> (HappyAbsSyn )+happyIn41 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap41 x)+{-# INLINE happyIn41 #-}+happyOut41 :: (HappyAbsSyn ) -> HappyWrap41+happyOut41 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut41 #-}+newtype HappyWrap42 = HappyWrap42 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.HoleIdent))+happyIn42 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.HoleIdent)) -> (HappyAbsSyn )+happyIn42 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap42 x)+{-# INLINE happyIn42 #-}+happyOut42 :: (HappyAbsSyn ) -> HappyWrap42+happyOut42 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut42 #-}+newtype HappyWrap43 = HappyWrap43 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.VarIdent))+happyIn43 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.VarIdent)) -> (HappyAbsSyn )+happyIn43 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap43 x)+{-# INLINE happyIn43 #-}+happyOut43 :: (HappyAbsSyn ) -> HappyWrap43+happyOut43 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut43 #-}+newtype HappyWrap44 = HappyWrap44 ((Language.Rzk.Syntax.Abs.BNFC'Position, [Language.Rzk.Syntax.Abs.VarIdent]))+happyIn44 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, [Language.Rzk.Syntax.Abs.VarIdent])) -> (HappyAbsSyn )+happyIn44 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap44 x)+{-# INLINE happyIn44 #-}+happyOut44 :: (HappyAbsSyn ) -> HappyWrap44+happyOut44 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut44 #-}+newtype HappyWrap45 = HappyWrap45 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.LanguageDecl))+happyIn45 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.LanguageDecl)) -> (HappyAbsSyn )+happyIn45 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap45 x)+{-# INLINE happyIn45 #-}+happyOut45 :: (HappyAbsSyn ) -> HappyWrap45+happyOut45 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut45 #-}+newtype HappyWrap46 = HappyWrap46 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Language))+happyIn46 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Language)) -> (HappyAbsSyn )+happyIn46 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap46 x)+{-# INLINE happyIn46 #-}+happyOut46 :: (HappyAbsSyn ) -> HappyWrap46+happyOut46 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut46 #-}+newtype HappyWrap47 = HappyWrap47 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Command))+happyIn47 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Command)) -> (HappyAbsSyn )+happyIn47 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap47 x)+{-# INLINE happyIn47 #-}+happyOut47 :: (HappyAbsSyn ) -> HappyWrap47+happyOut47 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut47 #-}+newtype HappyWrap48 = HappyWrap48 ((Language.Rzk.Syntax.Abs.BNFC'Position, [Language.Rzk.Syntax.Abs.Command]))+happyIn48 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, [Language.Rzk.Syntax.Abs.Command])) -> (HappyAbsSyn )+happyIn48 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap48 x)+{-# INLINE happyIn48 #-}+happyOut48 :: (HappyAbsSyn ) -> HappyWrap48+happyOut48 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut48 #-}+newtype HappyWrap49 = HappyWrap49 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.DeclUsedVars))+happyIn49 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.DeclUsedVars)) -> (HappyAbsSyn )+happyIn49 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap49 x)+{-# INLINE happyIn49 #-}+happyOut49 :: (HappyAbsSyn ) -> HappyWrap49+happyOut49 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut49 #-}+newtype HappyWrap50 = HappyWrap50 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.SectionName))+happyIn50 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.SectionName)) -> (HappyAbsSyn )+happyIn50 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap50 x)+{-# INLINE happyIn50 #-}+happyOut50 :: (HappyAbsSyn ) -> HappyWrap50+happyOut50 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut50 #-}+newtype HappyWrap51 = HappyWrap51 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Pattern))+happyIn51 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Pattern)) -> (HappyAbsSyn )+happyIn51 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap51 x)+{-# INLINE happyIn51 #-}+happyOut51 :: (HappyAbsSyn ) -> HappyWrap51+happyOut51 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut51 #-}+newtype HappyWrap52 = HappyWrap52 ((Language.Rzk.Syntax.Abs.BNFC'Position, [Language.Rzk.Syntax.Abs.Pattern]))+happyIn52 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, [Language.Rzk.Syntax.Abs.Pattern])) -> (HappyAbsSyn )+happyIn52 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap52 x)+{-# INLINE happyIn52 #-}+happyOut52 :: (HappyAbsSyn ) -> HappyWrap52+happyOut52 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut52 #-}+newtype HappyWrap53 = HappyWrap53 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Pattern))+happyIn53 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Pattern)) -> (HappyAbsSyn )+happyIn53 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap53 x)+{-# INLINE happyIn53 #-}+happyOut53 :: (HappyAbsSyn ) -> HappyWrap53+happyOut53 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut53 #-}+newtype HappyWrap54 = HappyWrap54 ((Language.Rzk.Syntax.Abs.BNFC'Position, [Language.Rzk.Syntax.Abs.Pattern]))+happyIn54 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, [Language.Rzk.Syntax.Abs.Pattern])) -> (HappyAbsSyn )+happyIn54 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap54 x)+{-# INLINE happyIn54 #-}+happyOut54 :: (HappyAbsSyn ) -> HappyWrap54+happyOut54 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut54 #-}+newtype HappyWrap55 = HappyWrap55 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Param))+happyIn55 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Param)) -> (HappyAbsSyn )+happyIn55 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap55 x)+{-# INLINE happyIn55 #-}+happyOut55 :: (HappyAbsSyn ) -> HappyWrap55+happyOut55 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut55 #-}+newtype HappyWrap56 = HappyWrap56 ((Language.Rzk.Syntax.Abs.BNFC'Position, [Language.Rzk.Syntax.Abs.Param]))+happyIn56 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, [Language.Rzk.Syntax.Abs.Param])) -> (HappyAbsSyn )+happyIn56 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap56 x)+{-# INLINE happyIn56 #-}+happyOut56 :: (HappyAbsSyn ) -> HappyWrap56+happyOut56 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut56 #-}+newtype HappyWrap57 = HappyWrap57 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Bind))+happyIn57 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Bind)) -> (HappyAbsSyn )+happyIn57 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap57 x)+{-# INLINE happyIn57 #-}+happyOut57 :: (HappyAbsSyn ) -> HappyWrap57+happyOut57 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut57 #-}+newtype HappyWrap58 = HappyWrap58 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.ParamDecl))+happyIn58 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.ParamDecl)) -> (HappyAbsSyn )+happyIn58 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap58 x)+{-# INLINE happyIn58 #-}+happyOut58 :: (HappyAbsSyn ) -> HappyWrap58+happyOut58 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut58 #-}+newtype HappyWrap59 = HappyWrap59 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.SigmaParam))+happyIn59 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.SigmaParam)) -> (HappyAbsSyn )+happyIn59 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap59 x)+{-# INLINE happyIn59 #-}+happyOut59 :: (HappyAbsSyn ) -> HappyWrap59+happyOut59 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut59 #-}+newtype HappyWrap60 = HappyWrap60 ((Language.Rzk.Syntax.Abs.BNFC'Position, [Language.Rzk.Syntax.Abs.SigmaParam]))+happyIn60 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, [Language.Rzk.Syntax.Abs.SigmaParam])) -> (HappyAbsSyn )+happyIn60 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap60 x)+{-# INLINE happyIn60 #-}+happyOut60 :: (HappyAbsSyn ) -> HappyWrap60+happyOut60 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut60 #-}+newtype HappyWrap61 = HappyWrap61 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Restriction))+happyIn61 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Restriction)) -> (HappyAbsSyn )+happyIn61 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap61 x)+{-# INLINE happyIn61 #-}+happyOut61 :: (HappyAbsSyn ) -> HappyWrap61+happyOut61 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut61 #-}+newtype HappyWrap62 = HappyWrap62 ((Language.Rzk.Syntax.Abs.BNFC'Position, [Language.Rzk.Syntax.Abs.Restriction]))+happyIn62 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, [Language.Rzk.Syntax.Abs.Restriction])) -> (HappyAbsSyn )+happyIn62 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap62 x)+{-# INLINE happyIn62 #-}+happyOut62 :: (HappyAbsSyn ) -> HappyWrap62+happyOut62 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut62 #-}+newtype HappyWrap63 = HappyWrap63 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Modality))+happyIn63 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Modality)) -> (HappyAbsSyn )+happyIn63 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap63 x)+{-# INLINE happyIn63 #-}+happyOut63 :: (HappyAbsSyn ) -> HappyWrap63+happyOut63 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut63 #-}+newtype HappyWrap64 = HappyWrap64 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.ModComp))+happyIn64 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.ModComp)) -> (HappyAbsSyn )+happyIn64 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap64 x)+{-# INLINE happyIn64 #-}+happyOut64 :: (HappyAbsSyn ) -> HappyWrap64+happyOut64 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut64 #-}+newtype HappyWrap65 = HappyWrap65 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.ModalColon))+happyIn65 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.ModalColon)) -> (HappyAbsSyn )+happyIn65 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap65 x)+{-# INLINE happyIn65 #-}+happyOut65 :: (HappyAbsSyn ) -> HappyWrap65+happyOut65 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut65 #-}+newtype HappyWrap66 = HappyWrap66 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Term))+happyIn66 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Term)) -> (HappyAbsSyn )+happyIn66 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap66 x)+{-# INLINE happyIn66 #-}+happyOut66 :: (HappyAbsSyn ) -> HappyWrap66+happyOut66 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut66 #-}+newtype HappyWrap67 = HappyWrap67 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Term))+happyIn67 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Term)) -> (HappyAbsSyn )+happyIn67 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap67 x)+{-# INLINE happyIn67 #-}+happyOut67 :: (HappyAbsSyn ) -> HappyWrap67+happyOut67 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut67 #-}+newtype HappyWrap68 = HappyWrap68 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Term))+happyIn68 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Term)) -> (HappyAbsSyn )+happyIn68 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap68 x)+{-# INLINE happyIn68 #-}+happyOut68 :: (HappyAbsSyn ) -> HappyWrap68+happyOut68 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut68 #-}+newtype HappyWrap69 = HappyWrap69 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Term))+happyIn69 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Term)) -> (HappyAbsSyn )+happyIn69 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap69 x)+{-# INLINE happyIn69 #-}+happyOut69 :: (HappyAbsSyn ) -> HappyWrap69+happyOut69 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut69 #-}+newtype HappyWrap70 = HappyWrap70 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Term))+happyIn70 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Term)) -> (HappyAbsSyn )+happyIn70 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap70 x)+{-# INLINE happyIn70 #-}+happyOut70 :: (HappyAbsSyn ) -> HappyWrap70+happyOut70 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut70 #-}+newtype HappyWrap71 = HappyWrap71 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Term))+happyIn71 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Term)) -> (HappyAbsSyn )+happyIn71 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap71 x)+{-# INLINE happyIn71 #-}+happyOut71 :: (HappyAbsSyn ) -> HappyWrap71+happyOut71 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut71 #-}+newtype HappyWrap72 = HappyWrap72 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Term))+happyIn72 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Term)) -> (HappyAbsSyn )+happyIn72 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap72 x)+{-# INLINE happyIn72 #-}+happyOut72 :: (HappyAbsSyn ) -> HappyWrap72+happyOut72 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut72 #-}+newtype HappyWrap73 = HappyWrap73 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Term))+happyIn73 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Term)) -> (HappyAbsSyn )+happyIn73 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap73 x)+{-# INLINE happyIn73 #-}+happyOut73 :: (HappyAbsSyn ) -> HappyWrap73+happyOut73 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut73 #-}+newtype HappyWrap74 = HappyWrap74 ((Language.Rzk.Syntax.Abs.BNFC'Position, [Language.Rzk.Syntax.Abs.Term]))+happyIn74 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, [Language.Rzk.Syntax.Abs.Term])) -> (HappyAbsSyn )+happyIn74 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap74 x)+{-# INLINE happyIn74 #-}+happyOut74 :: (HappyAbsSyn ) -> HappyWrap74+happyOut74 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut74 #-}+happyInTok :: (Token) -> (HappyAbsSyn )+happyInTok x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyInTok #-}+happyOutTok :: (HappyAbsSyn ) -> (Token)+happyOutTok x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOutTok #-}+++{-# NOINLINE happyTokenStrings #-}+happyTokenStrings = ["'#assume'","'#check'","'#compute'","'#compute-nf'","'#compute-whnf'","'#def'","'#define'","'#end'","'#lang'","'#postulate'","'#section'","'#set-option'","'#unset-option'","'#variable'","'#variables'","'$extract$'","'('","')'","'*'","'*_1'","'*\8321'","','","'->'","'/'","'/\\\\'","'0_2'","'0_I'","'0\7522'","'0\8322'","'1'","'1_2'","'1_I'","'1\7522'","'1\8322'","'2'","':'","':='","':_#'","':_b'","':_id'","':_op'","':\7506\7510'","':\9837'","':\9839'","';'","'<'","'<='","'='","'==='","'=_{'","'>'","'BOT'","'CUBE'","'II'","'Sigma'","'TOP'","'TOPE'","'U'","'Unit'","'['","'\\\\'","'\\\\/'","']'","'_#'","'_b'","'_id'","'_op'","'as'","'first'","'flip_op'","'flip\7506\7510'","'idJ'","'in'","'inv_op'","'inv\7506\7510'","'let'","'mod'","'recBOT'","'recOR'","'refl'","'refl_{'","'rzk-1'","'second'","'unflip_op'","'unflip\7506\7510'","'uninv_op'","'uninv\7506\7510'","'unit'","'uses'","'{'","'|'","'|->'","'}'","'\215'","'\931'","'\960\8321'","'\960\8322'","'\7506\7510'","'\8594'","'\8614'","'\8721'","'\8743'","'\8744'","'\8801'","'\8804'","'\8868'","'\8869'","'\9837'","'\9839'","'\120128'","L_quoted","L_VarIdentToken","L_HoleIdentToken","%eof"]++happyActOffsets :: HappyAddr+happyActOffsets = HappyA# "\xf9\xff\xff\xff\xae\xff\xff\xff\xbe\xff\xff\xff\xbe\xff\xff\xff\x2b\x00\x00\x00\x06\x00\x00\x00\xaa\x0a\x00\x00\xaa\x0a\x00\x00\x30\x00\x00\x00\x48\x00\x00\x00\xf5\xff\xff\xff\xf5\xff\xff\xff\xf5\xff\xff\xff\xf5\xff\xff\xff\x11\x00\x00\x00\x11\x00\x00\x00\xf5\xff\xff\xff\x52\x00\x00\x00\xf5\xff\xff\xff\xf5\xff\xff\xff\xf0\xff\xff\xff\xf0\xff\xff\xff\xfb\x00\x00\x00\xfb\x00\x00\x00\xc5\x0a\x00\x00\x30\x02\x00\x00\xb4\x00\x00\x00\xb4\x00\x00\x00\xb4\x00\x00\x00\xb4\x00\x00\x00\xb4\x00\x00\x00\xf0\xff\xff\xff\xf0\xff\xff\xff\xf0\xff\xff\xff\x70\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x22\x00\x00\x00\x30\x02\x00\x00\x00\x00\x00\x00\x08\x01\x00\x00\x13\x00\x00\x00\xe2\xff\xff\xff\xd7\xff\xff\xff\x74\x01\x00\x00\x00\x00\x00\x00\xe2\x00\x00\x00\x8b\x00\x00\x00\xfb\x00\x00\x00\xf0\xff\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\x00\x00\x00\x00\x00\x00\x52\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xef\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x30\x02\x00\x00\x30\x02\x00\x00\x30\x02\x00\x00\x17\x01\x00\x00\x30\x02\x00\x00\x30\x02\x00\x00\x07\x00\x00\x00\xfb\x00\x00\x00\x00\x00\x00\x00\x18\x01\x00\x00\x00\x00\x00\x00\xf0\xff\xff\xff\x30\x02\x00\x00\x30\x02\x00\x00\x30\x02\x00\x00\x30\x02\x00\x00\x30\x02\x00\x00\x00\x00\x00\x00\x0c\x00\x00\x00\x19\x01\x00\x00\x30\x02\x00\x00\x30\x02\x00\x00\x00\x00\x00\x00\x1a\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\xa5\x00\x00\x00\x27\x00\x00\x00\xa5\x00\x00\x00\x12\x01\x00\x00\xf0\xff\xff\xff\xa5\x00\x00\x00\xd2\x01\x00\x00\xa5\x00\x00\x00\xa5\x00\x00\x00\xa8\x00\x00\x00\xa5\x00\x00\x00\xa5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x01\x00\x00\xd7\x00\x00\x00\xd7\x00\x00\x00\x39\x01\x00\x00\xde\x00\x00\x00\xb8\xff\xff\xff\xde\x00\x00\x00\x00\x00\x00\x00\x99\x0a\x00\x00\x3b\x01\x00\x00\xe4\x00\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00\xe4\x00\x00\x00\xe4\x00\x00\x00\xd2\x01\x00\x00\x34\x01\x00\x00\xec\x00\x00\x00\x00\x00\x00\x00\x73\x00\x00\x00\xec\x00\x00\x00\x12\x00\x00\x00\x12\x00\x00\x00\xec\x00\x00\x00\x00\x00\x00\x00\x4e\x01\x00\x00\xf3\x00\x00\x00\xf3\x00\x00\x00\x12\x00\x00\x00\xf3\x00\x00\x00\xf3\x00\x00\x00\x00\x00\x00\x00\xf3\x00\x00\x00\xf3\x00\x00\x00\x5b\x01\x00\x00\x4b\x01\x00\x00\x09\x01\x00\x00\x11\x01\x00\x00\xf0\xff\xff\xff\xf0\xff\xff\xff\xf0\xff\xff\xff\xf0\xff\xff\xff\x11\x01\x00\x00\x11\x01\x00\x00\x11\x01\x00\x00\x11\x01\x00\x00\x11\x01\x00\x00\x1d\x01\x00\x00\x1d\x01\x00\x00\x16\x01\x00\x00\x16\x01\x00\x00\x15\x01\x00\x00\x15\x01\x00\x00\x00\x00\x00\x00\x15\x01\x00\x00\x5f\x01\x00\x00\x42\x01\x00\x00\x4d\x01\x00\x00\x4d\x01\x00\x00\x4d\x01\x00\x00\x4d\x01\x00\x00\xaa\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9d\x01\x00\x00\xa4\x01\x00\x00\xb5\x01\x00\x00\x00\x00\x00\x00\xaa\x01\x00\x00\x00\x00\x00\x00\x82\x01\x00\x00\x00\x00\x00\x00\x82\x01\x00\x00\x82\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc5\x01\x00\x00\xc6\x01\x00\x00\xaa\x0a\x00\x00\x89\x01\x00\x00\x00\x00\x00\x00\x12\x00\x00\x00\xd9\x01\x00\x00\x69\x00\x00\x00\xa3\x0a\x00\x00\x00\x00\x00\x00\xf0\xff\xff\xff\x00\x00\x00\x00\xf0\xff\xff\xff\xf9\x01\x00\x00\x12\x00\x00\x00\xf0\xff\xff\xff\xf0\xff\xff\xff\xf0\xff\xff\xff\xf0\xff\xff\xff\xf0\xff\xff\xff\xfb\x00\x00\x00\xb4\x00\x00\x00\xb4\x00\x00\x00\x06\x01\x00\x00\xb4\x00\x00\x00\xf0\xff\xff\xff\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00\x00\x00\xec\x01\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf6\xff\xff\xff\xf0\xff\xff\xff\x30\x02\x00\x00\xf2\x01\x00\x00\xfb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x67\x00\x00\x00\x12\x00\x00\x00\x78\x00\x00\x00\x32\x0a\x00\x00\x30\x02\x00\x00\xf0\xff\xff\xff\xf0\xff\xff\xff\xb4\x00\x00\x00\xb4\x00\x00\x00\xb4\x00\x00\x00\xb4\x00\x00\x00\xb4\x00\x00\x00\xb4\x00\x00\x00\xb4\x00\x00\x00\xb4\x00\x00\x00\x00\x00\x00\x00\xf0\xff\xff\xff\xf0\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x38\x00\x00\x00\x38\x00\x00\x00\x38\x00\x00\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0\xff\xff\xff\x00\x00\x00\x00\xf0\xff\xff\xff\xf0\xff\xff\xff\xf0\xff\xff\xff\xf0\xff\xff\xff\xac\x0a\x00\x00\x05\x02\x00\x00\xf0\xff\xff\xff\xf0\xff\xff\xff\x07\x02\x00\x00\x12\x00\x00\x00\xf0\xff\xff\xff\x00\x00\x00\x00\x14\x02\x00\x00\xf2\xff\xff\xff\xf0\xff\xff\xff\x00\x00\x00\x00\x7a\x00\x00\x00\xf0\xff\xff\xff\xb5\x0a\x00\x00\x12\x02\x00\x00\xbe\x0a\x00\x00\x20\x02\x00\x00\xda\x01\x00\x00\x00\x00\x00\x00\xd2\x01\x00\x00\xd2\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\x12\x00\x00\x00\x08\x02\x00\x00\x00\x00\x00\x00\xf0\xff\xff\xff\xf0\xff\xff\xff\xf0\xff\xff\xff\x00\x00\x00\x00\x26\x02\x00\x00\x00\x00\x00\x00\xf0\xff\xff\xff\xf0\xff\xff\xff\x1e\x00\x00\x00\x57\x00\x00\x00\x80\x00\x00\x00\xea\x01\x00\x00\xf0\xff\xff\xff\xf0\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x02\x00\x00\xf0\xff\xff\xff\x38\x02\x00\x00\xf0\xff\xff\xff\x39\x02\x00\x00\xf0\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x02\x00\x00\xf1\xff\xff\xff\x6b\x00\x00\x00\x00\x00\x00\x00\x24\x01\x00\x00\xb4\x00\x00\x00\x12\x00\x00\x00\xf0\xff\xff\xff\x12\x00\x00\x00\xf0\xff\xff\xff\xf0\xff\xff\xff\x50\x00\x00\x00\xf0\xff\xff\xff\x03\x02\x00\x00\xf0\xff\xff\xff\x00\x00\x00\x00\x2c\x02\x00\x00\x49\x02\x00\x00\xf0\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00\x00\x00\xf0\xff\xff\xff\xf0\xff\xff\xff\x48\x02\x00\x00\x4f\x02\x00\x00\x71\x00\x00\x00\x2d\x01\x00\x00\x89\x00\x00\x00\x00\x00\x00\x00\xf0\xff\xff\xff\x00\x00\x00\x00\xf0\xff\xff\xff\x00\x00\x00\x00\xf0\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x02\x00\x00\x71\x02\x00\x00\x72\x02\x00\x00\x6f\x02\x00\x00\xf0\xff\xff\xff\xf0\xff\xff\xff\x70\x02\x00\x00\x00\x00\x00\x00\x77\x02\x00\x00\xf0\xff\xff\xff\x00\x00\x00\x00\x78\x02\x00\x00\x82\x02\x00\x00\x83\x02\x00\x00\x9e\x02\x00\x00\x9f\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00\xf0\xff\xff\xff\x00\x00\x00\x00\xf0\xff\xff\xff\xf0\xff\xff\xff\x74\x02\x00\x00\xf0\xff\xff\xff\x8d\x02\x00\x00\xf0\xff\xff\xff\x00\x00\x00\x00\xf0\xff\xff\xff\x00\x00\x00\x00\x93\x02\x00\x00\xf0\xff\xff\xff\x94\x02\x00\x00\xf0\xff\xff\xff\x5e\x02\x00\x00\xaa\x02\x00\x00\xb5\x02\x00\x00\xb6\x02\x00\x00\xc1\x02\x00\x00\xc2\x02\x00\x00\xc3\x02\x00\x00\xcc\x02\x00\x00\xcd\x02\x00\x00\x8f\x02\x00\x00\x98\x02\x00\x00\xf0\xff\xff\xff\x00\x00\x00\x00\xa5\x02\x00\x00\xf0\xff\xff\xff\xd9\x02\x00\x00\xde\x02\x00\x00\xec\x02\x00\x00\xf2\x02\x00\x00\xf3\x02\x00\x00\xf4\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0\xff\xff\xff\xf0\xff\xff\xff\xf0\xff\xff\xff\xf1\x02\x00\x00\xf0\xff\xff\xff\xf7\x02\x00\x00\xf0\xff\xff\xff\x00\x00\x00\x00\xf0\xff\xff\xff\xf0\xff\xff\xff\xf0\xff\xff\xff\xf0\xff\xff\xff\xf0\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0\xff\xff\xff\x00\x00\x00\x00\xf0\xff\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\xb9\x02\x00\x00\xf0\xff\xff\xff\x00\x00\x00\x00\xf0\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x03\x00\x00\x10\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0\xff\xff\xff\x11\x03\x00\x00\xf0\xff\xff\xff\x21\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#++happyGotoOffsets :: HappyAddr+happyGotoOffsets = HappyA# "\x55\x01\x00\x00\xad\x00\x00\x00\x98\x01\x00\x00\xb5\x00\x00\x00\x30\x03\x00\x00\x32\x03\x00\x00\x2f\x03\x00\x00\x0e\x00\x00\x00\x2e\x03\x00\x00\xc7\x01\x00\x00\x15\x00\x00\x00\x9a\x01\x00\x00\xba\x0a\x00\x00\x6b\x01\x00\x00\x0d\x01\x00\x00\x87\x02\x00\x00\x99\x01\x00\x00\xa0\x01\x00\x00\xc9\x01\x00\x00\xba\x01\x00\x00\x31\x03\x00\x00\xc9\x02\x00\x00\x22\x03\x00\x00\x9e\x00\x00\x00\x24\x03\x00\x00\x41\x01\x00\x00\x9f\x09\x00\x00\x99\x09\x00\x00\x68\x09\x00\x00\x15\x09\x00\x00\x54\x02\x00\x00\x22\x08\x00\x00\x42\x03\x00\x00\x8c\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\x72\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd0\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc5\x00\x00\x00\x58\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\xfe\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\x79\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2e\x02\x00\x00\x3c\x03\x00\x00\xdb\x09\x00\x00\x00\x00\x00\x00\xec\x09\x00\x00\xf1\x09\x00\x00\xf7\x01\x00\x00\x23\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x69\x03\x00\x00\xf7\x09\x00\x00\xfc\x09\x00\x00\x02\x0a\x00\x00\x0a\x0a\x00\x00\x15\x0a\x00\x00\x00\x00\x00\x00\xe7\x00\x00\x00\x00\x00\x00\x00\x1b\x0a\x00\x00\x20\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x26\x0a\x00\x00\x7f\x03\x00\x00\x00\x00\x00\x00\x26\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x27\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8b\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x26\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7b\x0a\x00\x00\x00\x00\x00\x00\xf8\x01\x00\x00\xac\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x56\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\xdc\x00\x00\x00\x90\x03\x00\x00\xa6\x03\x00\x00\xb7\x03\x00\x00\xcd\x03\x00\x00\x9b\x01\x00\x00\xb9\x01\x00\x00\x25\x02\x00\x00\xd8\x01\x00\x00\xff\x02\x00\x00\x49\x03\x00\x00\x4b\x03\x00\x00\xf6\x01\x00\x00\x0e\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x44\x03\x00\x00\x69\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4c\x03\x00\x00\x00\x00\x00\x00\x5b\x03\x00\x00\x5c\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe9\x00\x00\x00\x35\x02\x00\x00\x00\x00\x00\x00\x96\x0a\x00\x00\x00\x00\x00\x00\x56\x02\x00\x00\x4d\x03\x00\x00\x00\x00\x00\x00\xde\x03\x00\x00\x00\x00\x00\x00\xda\x02\x00\x00\x00\x00\x00\x00\x18\x02\x00\x00\xf4\x03\x00\x00\x05\x04\x00\x00\x1b\x04\x00\x00\x2c\x04\x00\x00\xfd\x02\x00\x00\x50\x03\x00\x00\x76\x02\x00\x00\x08\x03\x00\x00\x00\x00\x00\x00\x26\x09\x00\x00\x42\x04\x00\x00\x27\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x66\x0a\x00\x00\x00\x00\x00\x00\xd6\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0e\x03\x00\x00\x2b\x0a\x00\x00\x00\x00\x00\x00\xf7\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x53\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x68\x0a\x00\x00\x00\x00\x00\x00\x54\x03\x00\x00\x31\x0a\x00\x00\xa2\x02\x00\x00\x38\x08\x00\x00\x36\x09\x00\x00\x47\x09\x00\x00\x78\x09\x00\x00\x89\x09\x00\x00\xaa\x09\x00\x00\xbd\x09\x00\x00\xc8\x09\x00\x00\xce\x09\x00\x00\x00\x00\x00\x00\x49\x08\x00\x00\x5a\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x69\x04\x00\x00\x00\x00\x00\x00\x7a\x04\x00\x00\x90\x04\x00\x00\xa1\x04\x00\x00\xb7\x04\x00\x00\x55\x03\x00\x00\x00\x00\x00\x00\x6b\x08\x00\x00\x7c\x08\x00\x00\x00\x00\x00\x00\x5b\x02\x00\x00\xc8\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xef\x04\x00\x00\x57\x03\x00\x00\x00\x00\x00\x00\x61\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x0a\x00\x00\x39\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9c\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x05\x00\x00\x16\x05\x00\x00\x2c\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x05\x00\x00\x53\x05\x00\x00\x82\x0a\x00\x00\x84\x0a\x00\x00\x8d\x0a\x00\x00\x73\x03\x00\x00\x64\x05\x00\x00\x7a\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8b\x05\x00\x00\x00\x00\x00\x00\xa1\x05\x00\x00\x00\x00\x00\x00\xb2\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x09\x00\x00\x4b\x0a\x00\x00\xc8\x05\x00\x00\x61\x0a\x00\x00\xd9\x05\x00\x00\xef\x05\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x16\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x27\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x63\x0a\x00\x00\x3d\x06\x00\x00\x4e\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x64\x06\x00\x00\x00\x00\x00\x00\xb3\x02\x00\x00\x00\x00\x00\x00\x75\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8b\x06\x00\x00\x9c\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb2\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9b\x0a\x00\x00\x00\x00\x00\x00\xc3\x06\x00\x00\x00\x00\x00\x00\xd9\x06\x00\x00\xea\x06\x00\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x11\x07\x00\x00\x00\x00\x00\x00\x27\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x38\x07\x00\x00\x00\x00\x00\x00\x4e\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5f\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x75\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8d\x08\x00\x00\x9e\x08\x00\x00\xaf\x08\x00\x00\x00\x00\x00\x00\x86\x07\x00\x00\x00\x00\x00\x00\x9c\x07\x00\x00\x00\x00\x00\x00\xc0\x08\x00\x00\xd1\x08\x00\x00\xe2\x08\x00\x00\xf3\x08\x00\x00\x04\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xad\x07\x00\x00\x00\x00\x00\x00\xc3\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd4\x07\x00\x00\x00\x00\x00\x00\xea\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfb\x07\x00\x00\x00\x00\x00\x00\x11\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#++happyDefActions :: HappyAddr+happyDefActions = HappyA# "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc2\xff\xff\xff\xbf\xff\xff\xff\xbe\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdd\xff\xff\xff\xd8\xff\xff\xff\xd9\xff\xff\xff\x6e\xff\xff\xff\x6d\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x47\xff\xff\xff\x5d\xff\xff\xff\x59\xff\xff\xff\x56\xff\xff\xff\x3b\xff\xff\xff\x61\xff\xff\xff\x32\xff\xff\xff\x31\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6b\xff\xff\xff\x85\xff\xff\xff\x6a\xff\xff\xff\x67\xff\xff\xff\x80\xff\xff\xff\x83\xff\xff\xff\x86\xff\xff\xff\x69\xff\xff\xff\x66\xff\xff\xff\x7f\xff\xff\xff\x82\xff\xff\xff\x84\xff\xff\xff\x00\x00\x00\x00\x64\xff\xff\xff\x88\xff\xff\xff\x68\xff\xff\xff\x00\x00\x00\x00\x65\xff\xff\xff\x87\xff\xff\xff\x89\xff\xff\xff\x79\xff\xff\xff\x00\x00\x00\x00\x96\xff\xff\xff\x98\xff\xff\xff\x93\xff\xff\xff\x94\xff\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\x7c\xff\xff\xff\x00\x00\x00\x00\x72\xff\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\x73\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x95\xff\xff\xff\x00\x00\x00\x00\x7e\xff\xff\xff\x7d\xff\xff\xff\x99\xff\xff\xff\x97\xff\xff\xff\x81\xff\xff\xff\xdc\xff\xff\xff\xdb\xff\xff\xff\x00\x00\x00\x00\x3b\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x61\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8b\xff\xff\xff\x8c\xff\xff\xff\x8d\xff\xff\xff\x8a\xff\xff\xff\x8e\xff\xff\xff\x90\xff\xff\xff\x8f\xff\xff\xff\x92\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x9b\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbb\xff\xff\xff\x00\x00\x00\x00\x9f\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xbc\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xa9\xff\xff\xff\xab\xff\xff\xff\x00\x00\x00\x00\xb3\xff\xff\xff\xad\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb6\xff\xff\xff\xb5\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xb8\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xbd\xff\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\x00\x00\x00\x00\x00\x00\xbe\xff\xff\xff\x00\x00\x00\x00\xbe\xff\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\xd4\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xd7\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc2\xff\xff\xff\xda\xff\xff\xff\xd6\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd2\xff\xff\xff\x00\x00\x00\x00\xc8\xff\xff\xff\xbf\xff\xff\xff\xc7\xff\xff\xff\xbf\xff\xff\xff\xbf\xff\xff\xff\xcf\xff\xff\xff\xce\xff\xff\xff\xd0\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xc2\xff\xff\xff\x00\x00\x00\x00\xb7\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xb8\xff\xff\xff\x00\x00\x00\x00\xac\xff\xff\xff\x00\x00\x00\x00\x4b\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\xff\xff\xff\x49\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x52\xff\xff\xff\x51\xff\xff\xff\x4e\xff\xff\xff\x4d\xff\xff\xff\x45\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x54\xff\xff\xff\x53\xff\xff\xff\x00\x00\x00\x00\x50\xff\xff\xff\x4f\xff\xff\xff\x46\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x74\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x44\xff\xff\xff\x3a\xff\xff\xff\x5e\xff\xff\xff\x5f\xff\xff\xff\x5c\xff\xff\xff\x5b\xff\xff\xff\x5a\xff\xff\xff\x58\xff\xff\xff\x57\xff\xff\xff\x55\xff\xff\xff\x33\xff\xff\xff\x30\xff\xff\xff\x4a\xff\xff\xff\x00\x00\x00\x00\x6c\xff\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\x00\x00\x75\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x71\xff\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\x3f\xff\xff\xff\x62\xff\xff\xff\x60\xff\xff\xff\x91\xff\xff\xff\x9a\xff\xff\xff\x9d\xff\xff\xff\x9c\xff\xff\xff\xa1\xff\xff\xff\xa0\xff\xff\xff\x9e\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xaa\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb4\xff\xff\xff\x00\x00\x00\x00\xc1\xff\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\xd5\xff\xff\xff\xc9\xff\xff\xff\xca\xff\xff\xff\xd3\xff\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\xd1\xff\xff\xff\xcb\xff\xff\xff\xc0\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4c\xff\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\x00\x00\x7b\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\xff\xff\xff\x36\xff\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\xa3\xff\xff\xff\x00\x00\x00\x00\x77\xff\xff\xff\x00\x00\x00\x00\xa8\xff\xff\xff\x00\x00\x00\x00\x63\xff\xff\xff\x78\xff\xff\xff\xa1\xff\xff\xff\xa0\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x70\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xa6\xff\xff\xff\xa1\xff\xff\xff\xa0\xff\xff\xff\x00\x00\x00\x00\xa1\xff\xff\xff\x00\x00\x00\x00\x40\xff\xff\xff\xba\xff\xff\xff\x00\x00\x00\x00\xaf\xff\xff\xff\x00\x00\x00\x00\xb2\xff\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\xcc\xff\xff\xff\x00\x00\x00\x00\xcd\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\xff\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\xa2\xff\xff\xff\x76\xff\xff\xff\xa7\xff\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\xa4\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\xff\xff\xff\xae\xff\xff\xff\xb1\xff\xff\xff\xb0\xff\xff\xff\xc3\xff\xff\xff\x00\x00\x00\x00\xc5\xff\xff\xff\x00\x00\x00\x00\xc6\xff\xff\xff\xc4\xff\xff\xff\x34\xff\xff\xff\x35\xff\xff\xff\x41\xff\xff\xff\x42\xff\xff\xff\x43\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x3c\xff\xff\xff\x00\x00\x00\x00\x37\xff\xff\xff\x38\xff\xff\xff\x39\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xa5\xff\xff\xff\x7a\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6f\xff\xff\xff"#++happyCheck :: HappyAddr+happyCheck = HappyA# "\xff\xff\xff\xff\x11\x00\x00\x00\x12\x00\x00\x00\x0a\x00\x00\x00\x13\x00\x00\x00\x15\x00\x00\x00\x16\x00\x00\x00\x12\x00\x00\x00\x31\x00\x00\x00\x17\x00\x00\x00\x33\x00\x00\x00\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x5d\x00\x00\x00\x01\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x12\x00\x00\x00\x05\x00\x00\x00\x25\x00\x00\x00\x45\x00\x00\x00\x65\x00\x00\x00\x12\x00\x00\x00\x2f\x00\x00\x00\x72\x00\x00\x00\x3f\x00\x00\x00\x0d\x00\x00\x00\x12\x00\x00\x00\x12\x00\x00\x00\x35\x00\x00\x00\x36\x00\x00\x00\x37\x00\x00\x00\x38\x00\x00\x00\x39\x00\x00\x00\x3a\x00\x00\x00\x3b\x00\x00\x00\x3c\x00\x00\x00\x1a\x00\x00\x00\x3e\x00\x00\x00\x71\x00\x00\x00\x12\x00\x00\x00\x41\x00\x00\x00\x42\x00\x00\x00\x43\x00\x00\x00\x44\x00\x00\x00\x0a\x00\x00\x00\x46\x00\x00\x00\x47\x00\x00\x00\x48\x00\x00\x00\x49\x00\x00\x00\x18\x00\x00\x00\x4b\x00\x00\x00\x4c\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x00\x00\x4f\x00\x00\x00\x50\x00\x00\x00\x51\x00\x00\x00\x52\x00\x00\x00\x25\x00\x00\x00\x54\x00\x00\x00\x55\x00\x00\x00\x56\x00\x00\x00\x57\x00\x00\x00\x58\x00\x00\x00\x59\x00\x00\x00\x68\x00\x00\x00\x5b\x00\x00\x00\x14\x00\x00\x00\x5c\x00\x00\x00\x59\x00\x00\x00\x5d\x00\x00\x00\x60\x00\x00\x00\x61\x00\x00\x00\x62\x00\x00\x00\x63\x00\x00\x00\x5e\x00\x00\x00\x4e\x00\x00\x00\x66\x00\x00\x00\x65\x00\x00\x00\x31\x00\x00\x00\x53\x00\x00\x00\x33\x00\x00\x00\x6b\x00\x00\x00\x6c\x00\x00\x00\x6d\x00\x00\x00\x6e\x00\x00\x00\x6f\x00\x00\x00\x59\x00\x00\x00\x71\x00\x00\x00\x72\x00\x00\x00\x11\x00\x00\x00\x12\x00\x00\x00\x59\x00\x00\x00\x71\x00\x00\x00\x15\x00\x00\x00\x16\x00\x00\x00\x12\x00\x00\x00\x59\x00\x00\x00\x59\x00\x00\x00\x5b\x00\x00\x00\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x59\x00\x00\x00\x71\x00\x00\x00\x5b\x00\x00\x00\x67\x00\x00\x00\x12\x00\x00\x00\x25\x00\x00\x00\x71\x00\x00\x00\x13\x00\x00\x00\x18\x00\x00\x00\x17\x00\x00\x00\x2f\x00\x00\x00\x71\x00\x00\x00\x71\x00\x00\x00\x13\x00\x00\x00\x12\x00\x00\x00\x64\x00\x00\x00\x35\x00\x00\x00\x36\x00\x00\x00\x37\x00\x00\x00\x5a\x00\x00\x00\x39\x00\x00\x00\x3a\x00\x00\x00\x3b\x00\x00\x00\x3c\x00\x00\x00\x71\x00\x00\x00\x18\x00\x00\x00\x17\x00\x00\x00\x12\x00\x00\x00\x41\x00\x00\x00\x42\x00\x00\x00\x43\x00\x00\x00\x44\x00\x00\x00\x5f\x00\x00\x00\x46\x00\x00\x00\x47\x00\x00\x00\x48\x00\x00\x00\x49\x00\x00\x00\x13\x00\x00\x00\x4b\x00\x00\x00\x4c\x00\x00\x00\x25\x00\x00\x00\x4e\x00\x00\x00\x4f\x00\x00\x00\x50\x00\x00\x00\x51\x00\x00\x00\x52\x00\x00\x00\x25\x00\x00\x00\x54\x00\x00\x00\x55\x00\x00\x00\x56\x00\x00\x00\x57\x00\x00\x00\x58\x00\x00\x00\x59\x00\x00\x00\x5c\x00\x00\x00\x5b\x00\x00\x00\x5e\x00\x00\x00\x02\x00\x00\x00\x59\x00\x00\x00\x04\x00\x00\x00\x5b\x00\x00\x00\x61\x00\x00\x00\x62\x00\x00\x00\x63\x00\x00\x00\x01\x00\x00\x00\x19\x00\x00\x00\x1a\x00\x00\x00\x71\x00\x00\x00\x05\x00\x00\x00\x06\x00\x00\x00\x14\x00\x00\x00\x6b\x00\x00\x00\x6c\x00\x00\x00\x6d\x00\x00\x00\x6e\x00\x00\x00\x6f\x00\x00\x00\x59\x00\x00\x00\x71\x00\x00\x00\x72\x00\x00\x00\x11\x00\x00\x00\x12\x00\x00\x00\x5c\x00\x00\x00\x71\x00\x00\x00\x15\x00\x00\x00\x16\x00\x00\x00\x64\x00\x00\x00\x59\x00\x00\x00\x5c\x00\x00\x00\x5b\x00\x00\x00\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x59\x00\x00\x00\x71\x00\x00\x00\x5b\x00\x00\x00\x64\x00\x00\x00\x01\x00\x00\x00\x19\x00\x00\x00\x1a\x00\x00\x00\x70\x00\x00\x00\x05\x00\x00\x00\x06\x00\x00\x00\x2f\x00\x00\x00\x71\x00\x00\x00\x5c\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x01\x00\x00\x00\x35\x00\x00\x00\x36\x00\x00\x00\x37\x00\x00\x00\x05\x00\x00\x00\x39\x00\x00\x00\x3a\x00\x00\x00\x3b\x00\x00\x00\x3c\x00\x00\x00\x71\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0d\x00\x00\x00\x41\x00\x00\x00\x42\x00\x00\x00\x43\x00\x00\x00\x44\x00\x00\x00\x17\x00\x00\x00\x46\x00\x00\x00\x47\x00\x00\x00\x48\x00\x00\x00\x49\x00\x00\x00\x73\x00\x00\x00\x4b\x00\x00\x00\x4c\x00\x00\x00\x12\x00\x00\x00\x4e\x00\x00\x00\x4f\x00\x00\x00\x50\x00\x00\x00\x51\x00\x00\x00\x52\x00\x00\x00\x5f\x00\x00\x00\x54\x00\x00\x00\x55\x00\x00\x00\x56\x00\x00\x00\x57\x00\x00\x00\x58\x00\x00\x00\x59\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x19\x00\x00\x00\x1a\x00\x00\x00\x05\x00\x00\x00\x05\x00\x00\x00\x06\x00\x00\x00\x61\x00\x00\x00\x62\x00\x00\x00\x63\x00\x00\x00\x73\x00\x00\x00\x13\x00\x00\x00\x0d\x00\x00\x00\x73\x00\x00\x00\x14\x00\x00\x00\x17\x00\x00\x00\x11\x00\x00\x00\x6b\x00\x00\x00\x6c\x00\x00\x00\x6d\x00\x00\x00\x6e\x00\x00\x00\x6f\x00\x00\x00\x12\x00\x00\x00\x71\x00\x00\x00\x72\x00\x00\x00\x15\x00\x00\x00\x16\x00\x00\x00\x12\x00\x00\x00\x12\x00\x00\x00\x12\x00\x00\x00\x12\x00\x00\x00\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x13\x00\x00\x00\x30\x00\x00\x00\x19\x00\x00\x00\x32\x00\x00\x00\x17\x00\x00\x00\x41\x00\x00\x00\x42\x00\x00\x00\x43\x00\x00\x00\x44\x00\x00\x00\x13\x00\x00\x00\x2f\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x17\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x35\x00\x00\x00\x36\x00\x00\x00\x37\x00\x00\x00\x73\x00\x00\x00\x39\x00\x00\x00\x3a\x00\x00\x00\x3b\x00\x00\x00\x3c\x00\x00\x00\x3d\x00\x00\x00\x17\x00\x00\x00\x73\x00\x00\x00\x17\x00\x00\x00\x41\x00\x00\x00\x42\x00\x00\x00\x43\x00\x00\x00\x44\x00\x00\x00\x73\x00\x00\x00\x03\x00\x00\x00\x25\x00\x00\x00\x19\x00\x00\x00\x49\x00\x00\x00\x07\x00\x00\x00\x1c\x00\x00\x00\x63\x00\x00\x00\x73\x00\x00\x00\x4e\x00\x00\x00\x4f\x00\x00\x00\x50\x00\x00\x00\x51\x00\x00\x00\x52\x00\x00\x00\x17\x00\x00\x00\x73\x00\x00\x00\x5f\x00\x00\x00\x6d\x00\x00\x00\x6e\x00\x00\x00\x01\x00\x00\x00\x59\x00\x00\x00\x01\x00\x00\x00\x12\x00\x00\x00\x05\x00\x00\x00\x06\x00\x00\x00\x05\x00\x00\x00\x69\x00\x00\x00\x6a\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x63\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x0d\x00\x00\x00\x2e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x73\x00\x00\x00\x6b\x00\x00\x00\x6c\x00\x00\x00\x6d\x00\x00\x00\x6e\x00\x00\x00\x6f\x00\x00\x00\x71\x00\x00\x00\x71\x00\x00\x00\x72\x00\x00\x00\x73\x00\x00\x00\x12\x00\x00\x00\x71\x00\x00\x00\x73\x00\x00\x00\x15\x00\x00\x00\x16\x00\x00\x00\x19\x00\x00\x00\x18\x00\x00\x00\x70\x00\x00\x00\x1c\x00\x00\x00\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x05\x00\x00\x00\x05\x00\x00\x00\x05\x00\x00\x00\x05\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x2f\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x0d\x00\x00\x00\x0d\x00\x00\x00\x0e\x00\x00\x00\x35\x00\x00\x00\x36\x00\x00\x00\x37\x00\x00\x00\x13\x00\x00\x00\x39\x00\x00\x00\x3a\x00\x00\x00\x3b\x00\x00\x00\x3c\x00\x00\x00\x3d\x00\x00\x00\x53\x00\x00\x00\x71\x00\x00\x00\x14\x00\x00\x00\x41\x00\x00\x00\x42\x00\x00\x00\x43\x00\x00\x00\x44\x00\x00\x00\x19\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x1c\x00\x00\x00\x49\x00\x00\x00\x05\x00\x00\x00\x05\x00\x00\x00\x73\x00\x00\x00\x21\x00\x00\x00\x4e\x00\x00\x00\x4f\x00\x00\x00\x50\x00\x00\x00\x51\x00\x00\x00\x52\x00\x00\x00\x0d\x00\x00\x00\x01\x00\x00\x00\x25\x00\x00\x00\x01\x00\x00\x00\x2e\x00\x00\x00\x05\x00\x00\x00\x59\x00\x00\x00\x05\x00\x00\x00\x15\x00\x00\x00\x16\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x0c\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x0d\x00\x00\x00\x63\x00\x00\x00\x64\x00\x00\x00\x01\x00\x00\x00\x25\x00\x00\x00\x31\x00\x00\x00\x5a\x00\x00\x00\x05\x00\x00\x00\x15\x00\x00\x00\x6b\x00\x00\x00\x6c\x00\x00\x00\x6d\x00\x00\x00\x6e\x00\x00\x00\x6f\x00\x00\x00\x12\x00\x00\x00\x71\x00\x00\x00\x72\x00\x00\x00\x15\x00\x00\x00\x16\x00\x00\x00\x19\x00\x00\x00\x25\x00\x00\x00\x25\x00\x00\x00\x1c\x00\x00\x00\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x71\x00\x00\x00\x05\x00\x00\x00\x05\x00\x00\x00\x05\x00\x00\x00\x25\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x2f\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x0d\x00\x00\x00\x0d\x00\x00\x00\x0e\x00\x00\x00\x35\x00\x00\x00\x36\x00\x00\x00\x37\x00\x00\x00\x13\x00\x00\x00\x39\x00\x00\x00\x3a\x00\x00\x00\x3b\x00\x00\x00\x3c\x00\x00\x00\x3d\x00\x00\x00\x17\x00\x00\x00\x25\x00\x00\x00\x14\x00\x00\x00\x41\x00\x00\x00\x42\x00\x00\x00\x43\x00\x00\x00\x44\x00\x00\x00\x19\x00\x00\x00\x26\x00\x00\x00\x01\x00\x00\x00\x1c\x00\x00\x00\x49\x00\x00\x00\x17\x00\x00\x00\x05\x00\x00\x00\x17\x00\x00\x00\x21\x00\x00\x00\x4e\x00\x00\x00\x4f\x00\x00\x00\x50\x00\x00\x00\x51\x00\x00\x00\x52\x00\x00\x00\x0d\x00\x00\x00\x01\x00\x00\x00\x13\x00\x00\x00\x01\x00\x00\x00\x17\x00\x00\x00\x05\x00\x00\x00\x59\x00\x00\x00\x05\x00\x00\x00\x15\x00\x00\x00\x16\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x0c\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x0d\x00\x00\x00\x63\x00\x00\x00\x01\x00\x00\x00\x17\x00\x00\x00\x5e\x00\x00\x00\x13\x00\x00\x00\x05\x00\x00\x00\x06\x00\x00\x00\x15\x00\x00\x00\x6b\x00\x00\x00\x6c\x00\x00\x00\x6d\x00\x00\x00\x6e\x00\x00\x00\x6f\x00\x00\x00\x12\x00\x00\x00\x71\x00\x00\x00\x72\x00\x00\x00\x15\x00\x00\x00\x16\x00\x00\x00\x19\x00\x00\x00\x40\x00\x00\x00\x25\x00\x00\x00\x1c\x00\x00\x00\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x70\x00\x00\x00\x05\x00\x00\x00\x01\x00\x00\x00\x25\x00\x00\x00\x25\x00\x00\x00\x2f\x00\x00\x00\x05\x00\x00\x00\x5e\x00\x00\x00\x5c\x00\x00\x00\x0d\x00\x00\x00\x0e\x00\x00\x00\x35\x00\x00\x00\x36\x00\x00\x00\x37\x00\x00\x00\x0d\x00\x00\x00\x39\x00\x00\x00\x3a\x00\x00\x00\x3b\x00\x00\x00\x3c\x00\x00\x00\x19\x00\x00\x00\x13\x00\x00\x00\x26\x00\x00\x00\x1c\x00\x00\x00\x41\x00\x00\x00\x42\x00\x00\x00\x43\x00\x00\x00\x44\x00\x00\x00\x21\x00\x00\x00\x4a\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x49\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x34\x00\x00\x00\x13\x00\x00\x00\x4e\x00\x00\x00\x4f\x00\x00\x00\x50\x00\x00\x00\x51\x00\x00\x00\x52\x00\x00\x00\x34\x00\x00\x00\x13\x00\x00\x00\x13\x00\x00\x00\x17\x00\x00\x00\x17\x00\x00\x00\x01\x00\x00\x00\x59\x00\x00\x00\x13\x00\x00\x00\x13\x00\x00\x00\x05\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x19\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x1c\x00\x00\x00\x63\x00\x00\x00\x0d\x00\x00\x00\x13\x00\x00\x00\x13\x00\x00\x00\x21\x00\x00\x00\x11\x00\x00\x00\x12\x00\x00\x00\x26\x00\x00\x00\x6b\x00\x00\x00\x6c\x00\x00\x00\x6d\x00\x00\x00\x6e\x00\x00\x00\x6f\x00\x00\x00\x14\x00\x00\x00\x71\x00\x00\x00\x72\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x19\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x13\x00\x00\x00\x13\x00\x00\x00\x26\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x26\x00\x00\x00\x26\x00\x00\x00\x19\x00\x00\x00\x5e\x00\x00\x00\x13\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x14\x00\x00\x00\x13\x00\x00\x00\x13\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x19\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x17\x00\x00\x00\x17\x00\x00\x00\x17\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x17\x00\x00\x00\x18\x00\x00\x00\x19\x00\x00\x00\x17\x00\x00\x00\x17\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\x5e\x00\x00\x00\x14\x00\x00\x00\x4a\x00\x00\x00\x17\x00\x00\x00\x17\x00\x00\x00\x18\x00\x00\x00\x19\x00\x00\x00\x5c\x00\x00\x00\x17\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x17\x00\x00\x00\x05\x00\x00\x00\x13\x00\x00\x00\x13\x00\x00\x00\x13\x00\x00\x00\x17\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x0c\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x17\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x17\x00\x00\x00\x18\x00\x00\x00\x19\x00\x00\x00\x5e\x00\x00\x00\x17\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\x19\x00\x00\x00\x14\x00\x00\x00\x13\x00\x00\x00\x1c\x00\x00\x00\x17\x00\x00\x00\x18\x00\x00\x00\x19\x00\x00\x00\x17\x00\x00\x00\x21\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x13\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x07\x00\x00\x00\x09\x00\x00\x00\x0b\x00\x00\x00\x08\x00\x00\x00\x19\x00\x00\x00\x19\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x1b\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x1b\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x17\x00\x00\x00\x00\x00\x00\x00\x19\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\x19\x00\x00\x00\x14\x00\x00\x00\x0b\x00\x00\x00\x1c\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x19\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\x0b\x00\x00\x00\x0b\x00\x00\x00\x1b\x00\x00\x00\x19\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x1b\x00\x00\x00\x1b\x00\x00\x00\x19\x00\x00\x00\x1b\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\x1b\x00\x00\x00\x14\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x19\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\x14\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x19\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\x14\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x19\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\x14\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x19\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\x14\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x19\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\x14\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x19\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\x14\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x19\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\x14\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x19\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\x14\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x19\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\x14\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x19\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\x14\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x19\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\x14\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x19\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\x14\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x19\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\x14\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x19\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\x14\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x19\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\x14\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x19\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\x14\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x19\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\x14\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x19\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\x14\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x19\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\x14\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x19\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\x14\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x19\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\x14\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x19\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\x14\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x19\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\x14\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x19\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\x14\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x19\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\x14\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x19\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\x14\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x19\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\x14\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x19\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\x14\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x19\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\x14\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x19\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\x14\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x19\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\x14\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x19\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\xff\xff\xff\xff\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\xff\xff\xff\xff\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\xff\xff\xff\xff\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\xff\xff\xff\xff\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\xff\xff\xff\xff\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\xff\xff\xff\xff\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\xff\xff\xff\xff\x21\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\x05\x00\x00\x00\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x0d\x00\x00\x00\x21\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\xff\xff\xff\xff\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x19\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\xff\xff\xff\xff\x21\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\x05\x00\x00\x00\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x19\x00\x00\x00\x0d\x00\x00\x00\x21\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x21\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x21\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\xff\xff\xff\xff\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\x01\x00\x00\x00\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x05\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x21\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x19\x00\x00\x00\xff\xff\xff\xff\x0d\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\x21\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x21\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x19\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x1c\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\xff\xff\xff\xff\x04\x00\x00\x00\x05\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\xff\xff\xff\xff\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x19\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x1c\x00\x00\x00\xff\xff\xff\xff\x19\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x1c\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\xff\xff\xff\xff\x19\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x1c\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x19\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x1c\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x19\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x1c\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\xff\xff\xff\xff\x04\x00\x00\x00\x05\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x19\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x1c\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x19\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x1c\x00\x00\x00\xff\xff\xff\xff\x19\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x1c\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\xff\xff\xff\xff\x19\x00\x00\x00\x13\x00\x00\x00\xff\xff\xff\xff\x1c\x00\x00\x00\xff\xff\xff\xff\x17\x00\x00\x00\x19\x00\x00\x00\xff\xff\xff\xff\x01\x00\x00\x00\x1c\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x05\x00\x00\x00\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\xff\xff\xff\xff\x25\x00\x00\x00\x0d\x00\x00\x00\x27\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x15\x00\x00\x00\x16\x00\x00\x00\x01\x00\x00\x00\xff\xff\xff\xff\x01\x00\x00\x00\xff\xff\xff\xff\x05\x00\x00\x00\x01\x00\x00\x00\x05\x00\x00\x00\x01\x00\x00\x00\xff\xff\xff\xff\x05\x00\x00\x00\xff\xff\xff\xff\x05\x00\x00\x00\x0d\x00\x00\x00\xff\xff\xff\xff\x0d\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x0d\x00\x00\x00\xff\xff\xff\xff\x0d\x00\x00\x00\x15\x00\x00\x00\x16\x00\x00\x00\x15\x00\x00\x00\x16\x00\x00\x00\x01\x00\x00\x00\x15\x00\x00\x00\x01\x00\x00\x00\x15\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\xff\xff\xff\xff\x01\x00\x00\x00\x0d\x00\x00\x00\x05\x00\x00\x00\x0d\x00\x00\x00\x05\x00\x00\x00\x11\x00\x00\x00\x12\x00\x00\x00\x11\x00\x00\x00\x12\x00\x00\x00\x01\x00\x00\x00\x0d\x00\x00\x00\xff\xff\xff\xff\x0d\x00\x00\x00\x05\x00\x00\x00\x11\x00\x00\x00\x12\x00\x00\x00\x11\x00\x00\x00\x12\x00\x00\x00\x01\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x0d\x00\x00\x00\x05\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x11\x00\x00\x00\x12\x00\x00\x00\x05\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\x0d\x00\x00\x00\xff\xff\xff\xff\x0f\x00\x00\x00\x10\x00\x00\x00\xff\xff\xff\xff\x0d\x00\x00\x00\x0d\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x02\x00\x00\x00\x03\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x06\x00\x00\x00\x07\x00\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\xff\xff\xff\xff\x0b\x00\x00\x00\x0c\x00\x00\x00\x0d\x00\x00\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x01\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x25\x00\x00\x00\x05\x00\x00\x00\x27\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x0d\x00\x00\x00\x25\x00\x00\x00\x0f\x00\x00\x00\x27\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x25\x00\x00\x00\xff\xff\xff\xff\x27\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x25\x00\x00\x00\xff\xff\xff\xff\x27\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x25\x00\x00\x00\xff\xff\xff\xff\x27\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x27\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x00\x00\x34\x00\x00\x00\x35\x00\x00\x00\xb9\x00\x00\x00\x99\x01\x00\x00\x36\x00\x00\x00\x37\x00\x00\x00\x8d\x00\x00\x00\xe7\x00\x00\x00\x6d\x01\x00\x00\xe8\x00\x00\x00\x38\x00\x00\x00\x39\x00\x00\x00\x3a\x00\x00\x00\x3b\x00\x00\x00\x3c\x00\x00\x00\x3d\x00\x00\x00\x3e\x00\x00\x00\x3f\x00\x00\x00\x40\x00\x00\x00\x41\x00\x00\x00\xe0\x00\x00\x00\x24\x00\x00\x00\xa4\x00\x00\x00\xa5\x00\x00\x00\x8d\x00\x00\x00\x88\x00\x00\x00\x2e\x01\x00\x00\x05\x01\x00\x00\xe1\x00\x00\x00\xee\x00\x00\x00\x42\x00\x00\x00\x6e\x00\x00\x00\x06\x01\x00\x00\x9f\x00\x00\x00\x97\x00\x00\x00\x8d\x00\x00\x00\x43\x00\x00\x00\x44\x00\x00\x00\x45\x00\x00\x00\x46\x00\x00\x00\x47\x00\x00\x00\x48\x00\x00\x00\x49\x00\x00\x00\x4a\x00\x00\x00\x08\x01\x00\x00\x4b\x00\x00\x00\x6d\x00\x00\x00\x97\x00\x00\x00\x4c\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x00\x00\x4f\x00\x00\x00\xb9\x00\x00\x00\x50\x00\x00\x00\x51\x00\x00\x00\x52\x00\x00\x00\x53\x00\x00\x00\x0f\x01\x00\x00\x54\x00\x00\x00\x55\x00\x00\x00\x56\x00\x00\x00\x57\x00\x00\x00\x58\x00\x00\x00\x59\x00\x00\x00\x5a\x00\x00\x00\x5b\x00\x00\x00\x5b\x01\x00\x00\x5c\x00\x00\x00\x5d\x00\x00\x00\x5e\x00\x00\x00\x5f\x00\x00\x00\x60\x00\x00\x00\x61\x00\x00\x00\x07\x01\x00\x00\x62\x00\x00\x00\xe4\x00\x00\x00\x9a\x01\x00\x00\x8e\x00\x00\x00\xe0\x00\x00\x00\x63\x00\x00\x00\x64\x00\x00\x00\x65\x00\x00\x00\x66\x00\x00\x00\x2f\x01\x00\x00\xf8\x00\x00\x00\x67\x00\x00\x00\xe1\x00\x00\x00\xe7\x00\x00\x00\xb7\x00\x00\x00\xe8\x00\x00\x00\x68\x00\x00\x00\x69\x00\x00\x00\x6a\x00\x00\x00\x6b\x00\x00\x00\x6c\x00\x00\x00\x8e\x00\x00\x00\x6d\x00\x00\x00\x6e\x00\x00\x00\x34\x00\x00\x00\x35\x00\x00\x00\x8e\x00\x00\x00\x6d\x00\x00\x00\x36\x00\x00\x00\x37\x00\x00\x00\x97\x00\x00\x00\x8e\x00\x00\x00\x8e\x00\x00\x00\x98\x00\x00\x00\x38\x00\x00\x00\x39\x00\x00\x00\x3a\x00\x00\x00\x3b\x00\x00\x00\x3c\x00\x00\x00\x3d\x00\x00\x00\x3e\x00\x00\x00\x3f\x00\x00\x00\x40\x00\x00\x00\x41\x00\x00\x00\x8e\x00\x00\x00\x6d\x00\x00\x00\x98\x00\x00\x00\x09\x01\x00\x00\x8d\x00\x00\x00\x59\x01\x00\x00\x6d\x00\x00\x00\x97\x01\x00\x00\x26\x01\x00\x00\x41\x01\x00\x00\x42\x00\x00\x00\x6d\x00\x00\x00\x6d\x00\x00\x00\x80\x01\x00\x00\x97\x00\x00\x00\x10\x01\x00\x00\x43\x00\x00\x00\x44\x00\x00\x00\x45\x00\x00\x00\xa4\x00\x00\x00\x47\x00\x00\x00\x48\x00\x00\x00\x49\x00\x00\x00\x4a\x00\x00\x00\x6d\x00\x00\x00\x22\x01\x00\x00\x41\x01\x00\x00\x97\x00\x00\x00\x4c\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x00\x00\x4f\x00\x00\x00\xe5\x00\x00\x00\x50\x00\x00\x00\x51\x00\x00\x00\x52\x00\x00\x00\x53\x00\x00\x00\x7c\x01\x00\x00\x54\x00\x00\x00\x55\x00\x00\x00\x6b\x01\x00\x00\x57\x00\x00\x00\x58\x00\x00\x00\x59\x00\x00\x00\x5a\x00\x00\x00\x5b\x00\x00\x00\x57\x01\x00\x00\x5c\x00\x00\x00\x5d\x00\x00\x00\x5e\x00\x00\x00\x5f\x00\x00\x00\x60\x00\x00\x00\x61\x00\x00\x00\x8d\x01\x00\x00\x62\x00\x00\x00\x8e\x01\x00\x00\x25\x00\x00\x00\x8e\x00\x00\x00\xbc\x00\x00\x00\x98\x00\x00\x00\x64\x00\x00\x00\x65\x00\x00\x00\x66\x00\x00\x00\x24\x00\x00\x00\x81\x00\x00\x00\x82\x00\x00\x00\x6d\x00\x00\x00\xb9\x00\x00\x00\xba\x00\x00\x00\xe4\x00\x00\x00\x68\x00\x00\x00\x69\x00\x00\x00\x6a\x00\x00\x00\x6b\x00\x00\x00\x6c\x00\x00\x00\x8e\x00\x00\x00\x6d\x00\x00\x00\x6e\x00\x00\x00\x34\x00\x00\x00\x73\x00\x00\x00\x98\x01\x00\x00\x6d\x00\x00\x00\x36\x00\x00\x00\x37\x00\x00\x00\x27\x01\x00\x00\x8e\x00\x00\x00\x81\x01\x00\x00\x98\x00\x00\x00\x38\x00\x00\x00\x39\x00\x00\x00\x3a\x00\x00\x00\x3b\x00\x00\x00\x3c\x00\x00\x00\x3d\x00\x00\x00\x3e\x00\x00\x00\x3f\x00\x00\x00\x40\x00\x00\x00\x41\x00\x00\x00\x8e\x00\x00\x00\x6d\x00\x00\x00\x98\x00\x00\x00\x23\x01\x00\x00\x24\x00\x00\x00\x81\x00\x00\x00\x02\x01\x00\x00\x24\x00\x00\x00\xb9\x00\x00\x00\xcf\x00\x00\x00\x42\x00\x00\x00\x6d\x00\x00\x00\x7d\x01\x00\x00\xa4\x00\x00\x00\xbf\x00\x00\x00\x24\x00\x00\x00\x43\x00\x00\x00\x44\x00\x00\x00\x45\x00\x00\x00\x88\x00\x00\x00\x47\x00\x00\x00\x48\x00\x00\x00\x49\x00\x00\x00\x4a\x00\x00\x00\x6d\x00\x00\x00\xa4\x00\x00\x00\x48\x01\x00\x00\xec\x00\x00\x00\x4c\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x00\x00\x4f\x00\x00\x00\x04\x01\x00\x00\x50\x00\x00\x00\x51\x00\x00\x00\x52\x00\x00\x00\x53\x00\x00\x00\xff\xff\xff\xff\x54\x00\x00\x00\x55\x00\x00\x00\x00\x01\x00\x00\x57\x00\x00\x00\x58\x00\x00\x00\x59\x00\x00\x00\x5a\x00\x00\x00\x5b\x00\x00\x00\xe5\x00\x00\x00\x5c\x00\x00\x00\x5d\x00\x00\x00\x5e\x00\x00\x00\x5f\x00\x00\x00\x60\x00\x00\x00\x61\x00\x00\x00\x24\x00\x00\x00\x24\x00\x00\x00\x81\x00\x00\x00\x28\x01\x00\x00\x88\x00\x00\x00\xb9\x00\x00\x00\xc2\x00\x00\x00\x64\x00\x00\x00\x65\x00\x00\x00\x66\x00\x00\x00\xff\xff\xff\xff\x1f\x01\x00\x00\x93\x00\x00\x00\xff\xff\xff\xff\xe4\x00\x00\x00\x20\x01\x00\x00\x98\x00\x00\x00\x68\x00\x00\x00\x69\x00\x00\x00\x6a\x00\x00\x00\x6b\x00\x00\x00\x6c\x00\x00\x00\x73\x00\x00\x00\x6d\x00\x00\x00\x6e\x00\x00\x00\x36\x00\x00\x00\x37\x00\x00\x00\xfb\x00\x00\x00\xf5\x00\x00\x00\xec\x00\x00\x00\xe9\x00\x00\x00\x38\x00\x00\x00\x39\x00\x00\x00\x3a\x00\x00\x00\x3b\x00\x00\x00\x3c\x00\x00\x00\x3d\x00\x00\x00\x3e\x00\x00\x00\x3f\x00\x00\x00\x40\x00\x00\x00\x41\x00\x00\x00\x95\x01\x00\x00\x0a\x01\x00\x00\xe3\x00\x00\x00\x0b\x01\x00\x00\x96\x01\x00\x00\x4c\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x00\x00\x4f\x00\x00\x00\x7e\x01\x00\x00\x42\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x7f\x01\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x43\x00\x00\x00\x44\x00\x00\x00\x45\x00\x00\x00\xff\xff\xff\xff\x47\x00\x00\x00\x48\x00\x00\x00\x49\x00\x00\x00\x4a\x00\x00\x00\xdb\x00\x00\x00\xe2\x00\x00\x00\xff\xff\xff\xff\xdd\x00\x00\x00\x4c\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x00\x00\x4f\x00\x00\x00\xff\xff\xff\xff\xbd\x00\x00\x00\xd9\x00\x00\x00\x29\x00\x00\x00\x53\x00\x00\x00\xbe\x00\x00\x00\x78\x00\x00\x00\x66\x00\x00\x00\xff\xff\xff\xff\x57\x00\x00\x00\x58\x00\x00\x00\x59\x00\x00\x00\x5a\x00\x00\x00\x5b\x00\x00\x00\xd4\x00\x00\x00\xff\xff\xff\xff\xe5\x00\x00\x00\x6a\x00\x00\x00\x6b\x00\x00\x00\x24\x00\x00\x00\x61\x00\x00\x00\x24\x00\x00\x00\xd2\x00\x00\x00\xb9\x00\x00\x00\xc0\x00\x00\x00\x88\x00\x00\x00\x0c\x01\x00\x00\x0d\x01\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x66\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x99\x00\x00\x00\xd1\x00\x00\x00\x9a\x00\x00\x00\x9b\x00\x00\x00\xff\xff\xff\xff\x68\x00\x00\x00\x69\x00\x00\x00\x6a\x00\x00\x00\x6b\x00\x00\x00\x6c\x00\x00\x00\x6d\x00\x00\x00\x6d\x00\x00\x00\x6e\x00\x00\x00\xff\xff\xff\xff\x73\x00\x00\x00\x6d\x00\x00\x00\xff\xff\xff\xff\x36\x00\x00\x00\x37\x00\x00\x00\x29\x00\x00\x00\xa9\xff\xff\xff\x24\x00\x00\x00\x0d\x01\x00\x00\x38\x00\x00\x00\x39\x00\x00\x00\x3a\x00\x00\x00\x3b\x00\x00\x00\x3c\x00\x00\x00\x3d\x00\x00\x00\x3e\x00\x00\x00\x3f\x00\x00\x00\x40\x00\x00\x00\x41\x00\x00\x00\x24\x00\x00\x00\x24\x00\x00\x00\x24\x00\x00\x00\x24\x00\x00\x00\xbb\x00\x00\x00\x88\x00\x00\x00\x88\x00\x00\x00\xca\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x42\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x91\x00\x00\x00\x9d\x00\x00\x00\x9e\x00\x00\x00\x43\x00\x00\x00\x44\x00\x00\x00\x45\x00\x00\x00\x92\x00\x00\x00\x47\x00\x00\x00\x48\x00\x00\x00\x49\x00\x00\x00\x4a\x00\x00\x00\xdb\x00\x00\x00\xb7\x00\x00\x00\x6d\x00\x00\x00\x8f\x00\x00\x00\x4c\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x00\x00\x4f\x00\x00\x00\x29\x00\x00\x00\x24\x00\x00\x00\x24\x00\x00\x00\x2a\x00\x00\x00\x53\x00\x00\x00\xc9\x00\x00\x00\x88\x00\x00\x00\xff\xff\xff\xff\x90\x00\x00\x00\x57\x00\x00\x00\x58\x00\x00\x00\x59\x00\x00\x00\x5a\x00\x00\x00\x5b\x00\x00\x00\x89\x00\x00\x00\x24\x00\x00\x00\x51\x01\x00\x00\x24\x00\x00\x00\x52\x01\x00\x00\xa0\x00\x00\x00\x61\x00\x00\x00\x88\x00\x00\x00\x8a\x00\x00\x00\x8b\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\xa1\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x89\x00\x00\x00\x66\x00\x00\x00\xa9\xff\xff\xff\x24\x00\x00\x00\x50\x01\x00\x00\x4f\x01\x00\x00\xa4\x00\x00\x00\xc7\x00\x00\x00\x8e\x00\x00\x00\x68\x00\x00\x00\x69\x00\x00\x00\x6a\x00\x00\x00\x6b\x00\x00\x00\x6c\x00\x00\x00\x73\x00\x00\x00\x6d\x00\x00\x00\x6e\x00\x00\x00\x36\x00\x00\x00\x37\x00\x00\x00\x29\x00\x00\x00\x4b\x01\x00\x00\x4a\x01\x00\x00\xd9\x00\x00\x00\x38\x00\x00\x00\x39\x00\x00\x00\x3a\x00\x00\x00\x3b\x00\x00\x00\x3c\x00\x00\x00\x3d\x00\x00\x00\x3e\x00\x00\x00\x3f\x00\x00\x00\x40\x00\x00\x00\x41\x00\x00\x00\x24\x00\x00\x00\x24\x00\x00\x00\x24\x00\x00\x00\x6d\x00\x00\x00\xc3\x00\x00\x00\x88\x00\x00\x00\x88\x00\x00\x00\x46\x01\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x42\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x91\x00\x00\x00\xd5\x00\x00\x00\xd6\x00\x00\x00\x43\x00\x00\x00\x44\x00\x00\x00\x45\x00\x00\x00\xf6\x00\x00\x00\x47\x00\x00\x00\x48\x00\x00\x00\x49\x00\x00\x00\x4a\x00\x00\x00\xdb\x00\x00\x00\x41\x01\x00\x00\x31\x01\x00\x00\x00\x01\x00\x00\x4c\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x00\x00\x4f\x00\x00\x00\x29\x00\x00\x00\x2a\x01\x00\x00\x24\x00\x00\x00\x2a\x00\x00\x00\x53\x00\x00\x00\x74\x01\x00\x00\x88\x00\x00\x00\x71\x01\x00\x00\x90\x00\x00\x00\x57\x00\x00\x00\x58\x00\x00\x00\x59\x00\x00\x00\x5a\x00\x00\x00\x5b\x00\x00\x00\x89\x00\x00\x00\x24\x00\x00\x00\x6e\x01\x00\x00\x24\x00\x00\x00\x67\x01\x00\x00\xa0\x00\x00\x00\x61\x00\x00\x00\x88\x00\x00\x00\x8a\x00\x00\x00\x3f\x01\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\xc8\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x33\x01\x00\x00\x66\x00\x00\x00\x24\x00\x00\x00\x65\x01\x00\x00\x64\x01\x00\x00\x5e\x01\x00\x00\xb9\x00\x00\x00\x47\x01\x00\x00\x34\x01\x00\x00\x68\x00\x00\x00\x69\x00\x00\x00\x6a\x00\x00\x00\x6b\x00\x00\x00\x6c\x00\x00\x00\x73\x00\x00\x00\x6d\x00\x00\x00\x6e\x00\x00\x00\x36\x00\x00\x00\x37\x00\x00\x00\x29\x00\x00\x00\x62\x01\x00\x00\xa1\x01\x00\x00\xfd\x00\x00\x00\x38\x00\x00\x00\x39\x00\x00\x00\x3a\x00\x00\x00\x3b\x00\x00\x00\x3c\x00\x00\x00\x3d\x00\x00\x00\x3e\x00\x00\x00\x3f\x00\x00\x00\x40\x00\x00\x00\x41\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x24\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x24\x00\x00\x00\x88\x00\x00\x00\x24\x00\x00\x00\x9f\x01\x00\x00\x9d\x01\x00\x00\x42\x00\x00\x00\x88\x00\x00\x00\x8b\x01\x00\x00\x9b\x01\x00\x00\x9d\x00\x00\x00\xd2\x00\x00\x00\x43\x00\x00\x00\x44\x00\x00\x00\x45\x00\x00\x00\x91\x00\x00\x00\x47\x00\x00\x00\x48\x00\x00\x00\x49\x00\x00\x00\x4a\x00\x00\x00\x29\x00\x00\x00\x6f\x01\x00\x00\x88\x01\x00\x00\x2a\x00\x00\x00\x4c\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x00\x00\x4f\x00\x00\x00\x71\x00\x00\x00\x89\x01\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x53\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x83\x01\x00\x00\xb8\x01\x00\x00\x57\x00\x00\x00\x58\x00\x00\x00\x59\x00\x00\x00\x5a\x00\x00\x00\x5b\x00\x00\x00\x82\x01\x00\x00\xb7\x01\x00\x00\xb6\x01\x00\x00\xb5\x01\x00\x00\xb2\x01\x00\x00\x24\x00\x00\x00\x61\x00\x00\x00\xb1\x01\x00\x00\xaf\x01\x00\x00\x88\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x29\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x2a\x00\x00\x00\x66\x00\x00\x00\x93\x00\x00\x00\xae\x01\x00\x00\xad\x01\x00\x00\x38\x01\x00\x00\x94\x00\x00\x00\x95\x00\x00\x00\xa6\x01\x00\x00\x68\x00\x00\x00\x69\x00\x00\x00\x6a\x00\x00\x00\x6b\x00\x00\x00\x6c\x00\x00\x00\x28\x00\x00\x00\x6d\x00\x00\x00\x6e\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x29\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x31\x00\x00\x00\x32\x00\x00\x00\xac\x01\x00\x00\xab\x01\x00\x00\xa4\x01\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x28\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\xd3\x01\x00\x00\xd1\x01\x00\x00\x29\x00\x00\x00\xcf\x01\x00\x00\xce\x01\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x31\x00\x00\x00\x1b\x01\x00\x00\x28\x00\x00\x00\xcd\x01\x00\x00\xcc\x01\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x29\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x31\x00\x00\x00\xb9\x01\x00\x00\xcb\x01\x00\x00\xca\x01\x00\x00\xc9\x01\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x28\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x84\x00\x00\x00\x85\x00\x00\x00\x29\x00\x00\x00\xc8\x01\x00\x00\xc7\x01\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x86\x00\x00\x00\xc6\x01\x00\x00\x28\x00\x00\x00\xc3\x01\x00\x00\xc1\x01\x00\x00\x84\x00\x00\x00\x41\x01\x00\x00\x29\x00\x00\x00\xc5\x01\x00\x00\xc0\x01\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x86\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x24\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\xbf\x01\x00\x00\xa0\x00\x00\x00\xbe\x01\x00\x00\xbd\x01\x00\x00\xbc\x01\x00\x00\xde\x01\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\xc6\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\xdc\x01\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x28\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x84\x00\x00\x00\x3a\x01\x00\x00\x29\x00\x00\x00\xe4\x01\x00\x00\xe6\x01\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x86\x00\x00\x00\x29\x00\x00\x00\x28\x00\x00\x00\xe5\x01\x00\x00\x2a\x00\x00\x00\x84\x00\x00\x00\x2b\x01\x00\x00\x29\x00\x00\x00\xe8\x01\x00\x00\x37\x01\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x2c\x01\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\xea\x01\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\xb7\x00\x00\x00\xb4\x00\x00\x00\xa2\x00\x00\x00\xb5\x00\x00\x00\x83\x00\x00\x00\xf5\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x79\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\xdd\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x28\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x87\x00\x00\x00\xc5\x00\x00\x00\x29\x00\x00\x00\xc4\x00\x00\x00\xc1\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x86\x00\x00\x00\x29\x00\x00\x00\x28\x00\x00\x00\x4d\x01\x00\x00\xfc\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x29\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x6e\x00\x00\x00\x4c\x01\x00\x00\x4b\x01\x00\x00\x43\x01\x00\x00\x39\x01\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x28\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x1d\x01\x00\x00\x74\x01\x00\x00\x29\x00\x00\x00\x67\x01\x00\x00\x54\x01\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x01\x01\x00\x00\xdd\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x29\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\xf3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x28\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\xe5\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x29\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\xce\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x28\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\xcd\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x29\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\xcc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x28\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\xcb\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x29\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x42\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x28\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x3e\x01\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x29\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x3d\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x28\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x3c\x01\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x29\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x3b\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x28\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x35\x01\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x29\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x27\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x28\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x7a\x01\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x29\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x79\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x28\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x78\x01\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x29\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x77\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x28\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x76\x01\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x29\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x6e\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x28\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x6b\x01\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x29\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x69\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x28\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x60\x01\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x29\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x5f\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x28\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x5e\x01\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x29\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x5c\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x28\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x5b\x01\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x29\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x53\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x28\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x52\x01\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x29\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x9f\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x28\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x9d\x01\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x29\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x9b\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x28\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x91\x01\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x29\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x8f\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x28\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x8e\x01\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x29\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x8b\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x28\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x89\x01\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x29\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x86\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x28\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x84\x01\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x29\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x83\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x28\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\xba\x01\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x29\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\xb8\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x28\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\xb3\x01\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x29\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\xb2\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x28\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\xaf\x01\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x29\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\xa8\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x28\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\xa7\x01\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x29\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\xa6\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x28\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\xa4\x01\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x29\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\xa2\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x28\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\xa1\x01\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x29\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\xd1\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x28\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\xcf\x01\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x29\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\xc3\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x28\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\xc1\x01\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x29\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\xdc\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x28\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\xda\x01\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x29\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\xd4\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x28\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\xd3\x01\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x29\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\xe2\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x28\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\xe1\x01\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x29\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\xe6\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x28\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\xe8\x01\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x29\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x6f\x00\x00\x00\x2f\x00\x00\x00\x70\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x28\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x6f\x00\x00\x00\x2f\x00\x00\x00\x1a\x01\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x28\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x6f\x00\x00\x00\x2f\x00\x00\x00\x11\x01\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x28\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x6f\x00\x00\x00\x2f\x00\x00\x00\x10\x01\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x28\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x6f\x00\x00\x00\x2f\x00\x00\x00\x72\x01\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x28\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x6f\x00\x00\x00\x2f\x00\x00\x00\x71\x01\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x28\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x6f\x00\x00\x00\x2f\x00\x00\x00\xe0\x01\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x28\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x6f\x00\x00\x00\x2f\x00\x00\x00\xdf\x01\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x28\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x6f\x00\x00\x00\x2f\x00\x00\x00\xde\x01\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x28\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x6f\x00\x00\x00\x2f\x00\x00\x00\xd9\x01\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x28\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x6f\x00\x00\x00\x2f\x00\x00\x00\xd8\x01\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x28\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x6f\x00\x00\x00\x2f\x00\x00\x00\xd7\x01\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x28\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x6f\x00\x00\x00\x2f\x00\x00\x00\xd6\x01\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x28\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x6f\x00\x00\x00\x2f\x00\x00\x00\xd5\x01\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x00\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x73\x00\x00\x00\x74\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x00\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x36\x01\x00\x00\x74\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x00\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x19\x01\x00\x00\x74\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x00\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x18\x01\x00\x00\x74\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x00\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x93\x01\x00\x00\x74\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x00\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x75\x00\x00\x00\x00\x00\x00\x00\x74\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x24\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x88\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x17\x01\x00\x00\xdb\x00\x00\x00\x74\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x00\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x29\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x16\x01\x00\x00\x00\x00\x00\x00\x74\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x24\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x88\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x76\x00\x00\x00\x29\x00\x00\x00\xd4\x00\x00\x00\x74\x00\x00\x00\x2a\x00\x00\x00\x77\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x74\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x15\x01\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x74\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x00\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x24\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x14\x01\x00\x00\x88\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x74\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x2f\x01\x00\x00\x2a\x00\x00\x00\x13\x01\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x74\x00\x00\x00\x2a\x00\x00\x00\x12\x01\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x74\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x29\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\xfb\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x00\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x00\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x29\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\xf9\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\xf8\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf2\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\xf1\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x29\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\xf0\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x29\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\xef\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x00\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x29\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\xee\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x29\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\xea\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\xe9\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd9\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x1f\x01\x00\x00\x00\x00\x00\x00\x2a\x01\x00\x00\x00\x00\x00\x00\x20\x01\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x1c\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x88\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd9\x00\x00\x00\x00\x00\x00\x00\x21\x01\x00\x00\x89\x00\x00\x00\x7b\x00\x00\x00\x7c\x00\x00\x00\x7d\x00\x00\x00\x7e\x00\x00\x00\x7f\x00\x00\x00\x80\x00\x00\x00\x81\x00\x00\x00\x8a\x00\x00\x00\x92\x01\x00\x00\x24\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x00\x00\x00\x00\x88\x00\x00\x00\x24\x00\x00\x00\x88\x00\x00\x00\x24\x00\x00\x00\x00\x00\x00\x00\x88\x00\x00\x00\x00\x00\x00\x00\x88\x00\x00\x00\x89\x00\x00\x00\x00\x00\x00\x00\x89\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x31\x01\x00\x00\x00\x00\x00\x00\x23\x01\x00\x00\x8a\x00\x00\x00\x90\x01\x00\x00\x8a\x00\x00\x00\x85\x01\x00\x00\x24\x00\x00\x00\x32\x01\x00\x00\x24\x00\x00\x00\x24\x01\x00\x00\x88\x00\x00\x00\x00\x00\x00\x00\x88\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x93\x00\x00\x00\x88\x00\x00\x00\x93\x00\x00\x00\x88\x00\x00\x00\x94\x00\x00\x00\xfe\x00\x00\x00\x94\x00\x00\x00\xd7\x00\x00\x00\x24\x00\x00\x00\x93\x00\x00\x00\x00\x00\x00\x00\x93\x00\x00\x00\x88\x00\x00\x00\x94\x00\x00\x00\x59\x01\x00\x00\x94\x00\x00\x00\x57\x01\x00\x00\x24\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x93\x00\x00\x00\x88\x00\x00\x00\x24\x00\x00\x00\x24\x00\x00\x00\x94\x00\x00\x00\x55\x01\x00\x00\x88\x00\x00\x00\x88\x00\x00\x00\x00\x00\x00\x00\x99\x00\x00\x00\x00\x00\x00\x00\x9a\x00\x00\x00\x46\x01\x00\x00\x00\x00\x00\x00\x99\x00\x00\x00\x62\x01\x00\x00\x9a\x00\x00\x00\xa9\x01\x00\x00\xa7\x00\x00\x00\xa8\x00\x00\x00\xa9\x00\x00\x00\xaa\x00\x00\x00\xab\x00\x00\x00\xac\x00\x00\x00\xad\x00\x00\x00\xae\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\xb0\x00\x00\x00\xb1\x00\x00\x00\xb2\x00\x00\x00\xb3\x00\x00\x00\xb4\x00\x00\x00\x24\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdf\x00\x00\x00\x88\x00\x00\x00\x7b\x00\x00\x00\x7c\x00\x00\x00\x7d\x00\x00\x00\x7e\x00\x00\x00\x7f\x00\x00\x00\x80\x00\x00\x00\x81\x00\x00\x00\x99\x00\x00\x00\x45\x01\x00\x00\x9c\x00\x00\x00\x7b\x00\x00\x00\x7c\x00\x00\x00\x7d\x00\x00\x00\x7e\x00\x00\x00\x7f\x00\x00\x00\x80\x00\x00\x00\x81\x00\x00\x00\x76\x01\x00\x00\x00\x00\x00\x00\x7b\x00\x00\x00\x7c\x00\x00\x00\x7d\x00\x00\x00\x7e\x00\x00\x00\x7f\x00\x00\x00\x80\x00\x00\x00\x81\x00\x00\x00\x69\x01\x00\x00\x00\x00\x00\x00\x7b\x00\x00\x00\x7c\x00\x00\x00\x7d\x00\x00\x00\x7e\x00\x00\x00\x7f\x00\x00\x00\x80\x00\x00\x00\x81\x00\x00\x00\x66\x01\x00\x00\x00\x00\x00\x00\x7b\x00\x00\x00\x7c\x00\x00\x00\x7d\x00\x00\x00\x7e\x00\x00\x00\x7f\x00\x00\x00\x80\x00\x00\x00\x81\x00\x00\x00\x7b\x00\x00\x00\x7c\x00\x00\x00\x7d\x00\x00\x00\x7e\x00\x00\x00\x7f\x00\x00\x00\x80\x00\x00\x00\x81\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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 (34, 207) [+ (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)+ ]++happyRuleArr :: HappyAddr+happyRuleArr = HappyA# "\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x03\x00\x00\x00\x02\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x00\x05\x00\x00\x00\x01\x00\x00\x00\x06\x00\x00\x00\x01\x00\x00\x00\x06\x00\x00\x00\x02\x00\x00\x00\x07\x00\x00\x00\x03\x00\x00\x00\x08\x00\x00\x00\x01\x00\x00\x00\x09\x00\x00\x00\x04\x00\x00\x00\x09\x00\x00\x00\x02\x00\x00\x00\x09\x00\x00\x00\x04\x00\x00\x00\x09\x00\x00\x00\x02\x00\x00\x00\x09\x00\x00\x00\x02\x00\x00\x00\x09\x00\x00\x00\x02\x00\x00\x00\x09\x00\x00\x00\x06\x00\x00\x00\x09\x00\x00\x00\x05\x00\x00\x00\x09\x00\x00\x00\x04\x00\x00\x00\x09\x00\x00\x00\x04\x00\x00\x00\x09\x00\x00\x00\x04\x00\x00\x00\x09\x00\x00\x00\x02\x00\x00\x00\x09\x00\x00\x00\x02\x00\x00\x00\x09\x00\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\x07\x00\x00\x00\x09\x00\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\x07\x00\x00\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x03\x00\x00\x00\x0b\x00\x00\x00\x04\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x0c\x00\x00\x00\x01\x00\x00\x00\x0d\x00\x00\x00\x01\x00\x00\x00\x0d\x00\x00\x00\x01\x00\x00\x00\x0d\x00\x00\x00\x05\x00\x00\x00\x0d\x00\x00\x00\x07\x00\x00\x00\x0e\x00\x00\x00\x01\x00\x00\x00\x0e\x00\x00\x00\x02\x00\x00\x00\x0f\x00\x00\x00\x01\x00\x00\x00\x10\x00\x00\x00\x01\x00\x00\x00\x10\x00\x00\x00\x03\x00\x00\x00\x11\x00\x00\x00\x01\x00\x00\x00\x11\x00\x00\x00\x05\x00\x00\x00\x11\x00\x00\x00\x07\x00\x00\x00\x11\x00\x00\x00\x07\x00\x00\x00\x11\x00\x00\x00\x05\x00\x00\x00\x11\x00\x00\x00\x07\x00\x00\x00\x12\x00\x00\x00\x01\x00\x00\x00\x12\x00\x00\x00\x02\x00\x00\x00\x13\x00\x00\x00\x01\x00\x00\x00\x13\x00\x00\x00\x03\x00\x00\x00\x14\x00\x00\x00\x01\x00\x00\x00\x14\x00\x00\x00\x05\x00\x00\x00\x14\x00\x00\x00\x07\x00\x00\x00\x14\x00\x00\x00\x05\x00\x00\x00\x14\x00\x00\x00\x09\x00\x00\x00\x14\x00\x00\x00\x07\x00\x00\x00\x14\x00\x00\x00\x05\x00\x00\x00\x14\x00\x00\x00\x07\x00\x00\x00\x15\x00\x00\x00\x03\x00\x00\x00\x15\x00\x00\x00\x03\x00\x00\x00\x16\x00\x00\x00\x01\x00\x00\x00\x16\x00\x00\x00\x03\x00\x00\x00\x17\x00\x00\x00\x03\x00\x00\x00\x17\x00\x00\x00\x03\x00\x00\x00\x18\x00\x00\x00\x01\x00\x00\x00\x18\x00\x00\x00\x03\x00\x00\x00\x19\x00\x00\x00\x01\x00\x00\x00\x19\x00\x00\x00\x01\x00\x00\x00\x19\x00\x00\x00\x01\x00\x00\x00\x19\x00\x00\x00\x01\x00\x00\x00\x19\x00\x00\x00\x01\x00\x00\x00\x19\x00\x00\x00\x01\x00\x00\x00\x19\x00\x00\x00\x01\x00\x00\x00\x1a\x00\x00\x00\x01\x00\x00\x00\x1a\x00\x00\x00\x03\x00\x00\x00\x1b\x00\x00\x00\x01\x00\x00\x00\x1b\x00\x00\x00\x01\x00\x00\x00\x1b\x00\x00\x00\x01\x00\x00\x00\x1b\x00\x00\x00\x01\x00\x00\x00\x1b\x00\x00\x00\x01\x00\x00\x00\x1b\x00\x00\x00\x01\x00\x00\x00\x1b\x00\x00\x00\x01\x00\x00\x00\x1c\x00\x00\x00\x01\x00\x00\x00\x1c\x00\x00\x00\x01\x00\x00\x00\x1c\x00\x00\x00\x01\x00\x00\x00\x1c\x00\x00\x00\x01\x00\x00\x00\x1c\x00\x00\x00\x01\x00\x00\x00\x1c\x00\x00\x00\x01\x00\x00\x00\x1c\x00\x00\x00\x01\x00\x00\x00\x1c\x00\x00\x00\x01\x00\x00\x00\x1c\x00\x00\x00\x01\x00\x00\x00\x1c\x00\x00\x00\x01\x00\x00\x00\x1c\x00\x00\x00\x01\x00\x00\x00\x1c\x00\x00\x00\x01\x00\x00\x00\x1c\x00\x00\x00\x01\x00\x00\x00\x1c\x00\x00\x00\x01\x00\x00\x00\x1c\x00\x00\x00\x04\x00\x00\x00\x1c\x00\x00\x00\x0a\x00\x00\x00\x1c\x00\x00\x00\x01\x00\x00\x00\x1c\x00\x00\x00\x05\x00\x00\x00\x1c\x00\x00\x00\x05\x00\x00\x00\x1c\x00\x00\x00\x07\x00\x00\x00\x1c\x00\x00\x00\x03\x00\x00\x00\x1c\x00\x00\x00\x02\x00\x00\x00\x1c\x00\x00\x00\x01\x00\x00\x00\x1c\x00\x00\x00\x01\x00\x00\x00\x1c\x00\x00\x00\x03\x00\x00\x00\x1c\x00\x00\x00\x05\x00\x00\x00\x1c\x00\x00\x00\x0e\x00\x00\x00\x1c\x00\x00\x00\x01\x00\x00\x00\x1c\x00\x00\x00\x01\x00\x00\x00\x1c\x00\x00\x00\x03\x00\x00\x00\x1c\x00\x00\x00\x01\x00\x00\x00\x1c\x00\x00\x00\x01\x00\x00\x00\x1c\x00\x00\x00\x01\x00\x00\x00\x1c\x00\x00\x00\x01\x00\x00\x00\x1c\x00\x00\x00\x01\x00\x00\x00\x1c\x00\x00\x00\x01\x00\x00\x00\x1c\x00\x00\x00\x01\x00\x00\x00\x1c\x00\x00\x00\x01\x00\x00\x00\x1c\x00\x00\x00\x05\x00\x00\x00\x1d\x00\x00\x00\x03\x00\x00\x00\x1d\x00\x00\x00\x01\x00\x00\x00\x1d\x00\x00\x00\x03\x00\x00\x00\x1e\x00\x00\x00\x03\x00\x00\x00\x1e\x00\x00\x00\x03\x00\x00\x00\x1e\x00\x00\x00\x01\x00\x00\x00\x1e\x00\x00\x00\x03\x00\x00\x00\x1e\x00\x00\x00\x03\x00\x00\x00\x1f\x00\x00\x00\x03\x00\x00\x00\x1f\x00\x00\x00\x01\x00\x00\x00\x1f\x00\x00\x00\x03\x00\x00\x00\x20\x00\x00\x00\x03\x00\x00\x00\x20\x00\x00\x00\x01\x00\x00\x00\x20\x00\x00\x00\x03\x00\x00\x00\x21\x00\x00\x00\x02\x00\x00\x00\x21\x00\x00\x00\x02\x00\x00\x00\x21\x00\x00\x00\x02\x00\x00\x00\x21\x00\x00\x00\x02\x00\x00\x00\x21\x00\x00\x00\x02\x00\x00\x00\x21\x00\x00\x00\x02\x00\x00\x00\x21\x00\x00\x00\x02\x00\x00\x00\x21\x00\x00\x00\x02\x00\x00\x00\x21\x00\x00\x00\x04\x00\x00\x00\x21\x00\x00\x00\x02\x00\x00\x00\x21\x00\x00\x00\x03\x00\x00\x00\x21\x00\x00\x00\x02\x00\x00\x00\x21\x00\x00\x00\x02\x00\x00\x00\x21\x00\x00\x00\x01\x00\x00\x00\x21\x00\x00\x00\x02\x00\x00\x00\x21\x00\x00\x00\x02\x00\x00\x00\x22\x00\x00\x00\x03\x00\x00\x00\x22\x00\x00\x00\x08\x00\x00\x00\x22\x00\x00\x00\x08\x00\x00\x00\x22\x00\x00\x00\x08\x00\x00\x00\x22\x00\x00\x00\x05\x00\x00\x00\x22\x00\x00\x00\x03\x00\x00\x00\x22\x00\x00\x00\x06\x00\x00\x00\x22\x00\x00\x00\x04\x00\x00\x00\x22\x00\x00\x00\x08\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x22\x00\x00\x00\x03\x00\x00\x00\x22\x00\x00\x00\x08\x00\x00\x00\x22\x00\x00\x00\x08\x00\x00\x00\x22\x00\x00\x00\x08\x00\x00\x00\x22\x00\x00\x00\x04\x00\x00\x00\x22\x00\x00\x00\x08\x00\x00\x00\x22\x00\x00\x00\x08\x00\x00\x00\x23\x00\x00\x00\x03\x00\x00\x00\x23\x00\x00\x00\x01\x00\x00\x00\x24\x00\x00\x00\x01\x00\x00\x00\x24\x00\x00\x00\x03\x00\x00\x00"#++happyCatchStates :: [Happy_Prelude.Int]+happyCatchStates = []++happy_n_terms = 116 :: Happy_Prelude.Int+happy_n_nonterms = 37 :: Happy_Prelude.Int++happy_n_starts = 34 :: Happy_Prelude.Int++happyReduce_34 = happySpecReduce_1 0# happyReduction_34+happyReduction_34 happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn38+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), (Data.Text.unpack ((\(PT _ (TL s)) -> s) happy_var_1)))+ )}++happyReduce_35 = happySpecReduce_1 1# happyReduction_35+happyReduction_35 happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn39+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.VarIdentToken (tokenText happy_var_1))+ )}++happyReduce_36 = happySpecReduce_1 2# happyReduction_36+happyReduction_36 happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn40+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.HoleIdentToken (tokenText happy_var_1))+ )}++happyReduce_37 = happySpecReduce_2 3# happyReduction_37+happyReduction_37 happy_x_2+ happy_x_1+ = case happyOut45 happy_x_1 of { (HappyWrap45 happy_var_1) -> + case happyOut48 happy_x_2 of { (HappyWrap48 happy_var_2) -> + happyIn41+ ((fst happy_var_1, Language.Rzk.Syntax.Abs.Module (fst happy_var_1) (snd happy_var_1) (snd happy_var_2))+ )}}++happyReduce_38 = happySpecReduce_1 4# happyReduction_38+happyReduction_38 happy_x_1+ = case happyOut40 happy_x_1 of { (HappyWrap40 happy_var_1) -> + happyIn42+ ((fst happy_var_1, Language.Rzk.Syntax.Abs.HoleIdent (fst happy_var_1) (snd happy_var_1))+ )}++happyReduce_39 = happySpecReduce_1 5# happyReduction_39+happyReduction_39 happy_x_1+ = case happyOut39 happy_x_1 of { (HappyWrap39 happy_var_1) -> + happyIn43+ ((fst happy_var_1, Language.Rzk.Syntax.Abs.VarIdent (fst happy_var_1) (snd happy_var_1))+ )}++happyReduce_40 = happySpecReduce_1 6# happyReduction_40+happyReduction_40 happy_x_1+ = case happyOut43 happy_x_1 of { (HappyWrap43 happy_var_1) -> + happyIn44+ ((fst happy_var_1, (:[]) (snd happy_var_1))+ )}++happyReduce_41 = happySpecReduce_2 6# happyReduction_41+happyReduction_41 happy_x_2+ happy_x_1+ = case happyOut43 happy_x_1 of { (HappyWrap43 happy_var_1) -> + case happyOut44 happy_x_2 of { (HappyWrap44 happy_var_2) -> + happyIn44+ ((fst happy_var_1, (:) (snd happy_var_1) (snd happy_var_2))+ )}}++happyReduce_42 = happySpecReduce_3 7# happyReduction_42+happyReduction_42 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut46 happy_x_2 of { (HappyWrap46 happy_var_2) -> + happyIn45+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.LanguageDecl (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2))+ )}}++happyReduce_43 = happySpecReduce_1 8# happyReduction_43+happyReduction_43 happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn46+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.Rzk1 (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))+ )}++happyReduce_44 = happyReduce 4# 9# happyReduction_44+happyReduction_44 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut38 happy_x_2 of { (HappyWrap38 happy_var_2) -> + case happyOut38 happy_x_4 of { (HappyWrap38 happy_var_4) -> + happyIn47+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.CommandSetOption (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4))+ ) `HappyStk` happyRest}}}++happyReduce_45 = happySpecReduce_2 9# happyReduction_45+happyReduction_45 happy_x_2+ happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut38 happy_x_2 of { (HappyWrap38 happy_var_2) -> + happyIn47+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.CommandUnsetOption (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2))+ )}}++happyReduce_46 = happyReduce 4# 9# happyReduction_46+happyReduction_46 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut73 happy_x_2 of { (HappyWrap73 happy_var_2) -> + case happyOut73 happy_x_4 of { (HappyWrap73 happy_var_4) -> + happyIn47+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.CommandCheck (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4))+ ) `HappyStk` happyRest}}}++happyReduce_47 = happySpecReduce_2 9# happyReduction_47+happyReduction_47 happy_x_2+ happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut73 happy_x_2 of { (HappyWrap73 happy_var_2) -> + happyIn47+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.CommandCompute (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2))+ )}}++happyReduce_48 = happySpecReduce_2 9# happyReduction_48+happyReduction_48 happy_x_2+ happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut73 happy_x_2 of { (HappyWrap73 happy_var_2) -> + happyIn47+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.CommandComputeWHNF (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2))+ )}}++happyReduce_49 = happySpecReduce_2 9# happyReduction_49+happyReduction_49 happy_x_2+ happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut73 happy_x_2 of { (HappyWrap73 happy_var_2) -> + happyIn47+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.CommandComputeNF (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2))+ )}}++happyReduce_50 = happyReduce 6# 9# happyReduction_50+happyReduction_50 (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 { happy_var_1 -> + case happyOut43 happy_x_2 of { (HappyWrap43 happy_var_2) -> + case happyOut49 happy_x_3 of { (HappyWrap49 happy_var_3) -> + case happyOut56 happy_x_4 of { (HappyWrap56 happy_var_4) -> + case happyOut73 happy_x_6 of { (HappyWrap73 happy_var_6) -> + happyIn47+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.CommandPostulate (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_3) (snd happy_var_4) (snd happy_var_6))+ ) `HappyStk` happyRest}}}}}++happyReduce_51 = happyReduce 5# 9# happyReduction_51+happyReduction_51 (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 { happy_var_1 -> + case happyOut43 happy_x_2 of { (HappyWrap43 happy_var_2) -> + case happyOut49 happy_x_3 of { (HappyWrap49 happy_var_3) -> + case happyOut73 happy_x_5 of { (HappyWrap73 happy_var_5) -> + happyIn47+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.commandPostulateNoParams (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_3) (snd happy_var_5))+ ) `HappyStk` happyRest}}}}++happyReduce_52 = happyReduce 4# 9# happyReduction_52+happyReduction_52 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut44 happy_x_2 of { (HappyWrap44 happy_var_2) -> + case happyOut73 happy_x_4 of { (HappyWrap73 happy_var_4) -> + happyIn47+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.CommandAssume (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4))+ ) `HappyStk` happyRest}}}++happyReduce_53 = happyReduce 4# 9# happyReduction_53+happyReduction_53 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut43 happy_x_2 of { (HappyWrap43 happy_var_2) -> + case happyOut73 happy_x_4 of { (HappyWrap73 happy_var_4) -> + happyIn47+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.commandVariable (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4))+ ) `HappyStk` happyRest}}}++happyReduce_54 = happyReduce 4# 9# happyReduction_54+happyReduction_54 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut44 happy_x_2 of { (HappyWrap44 happy_var_2) -> + case happyOut73 happy_x_4 of { (HappyWrap73 happy_var_4) -> + happyIn47+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.commandVariables (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4))+ ) `HappyStk` happyRest}}}++happyReduce_55 = happySpecReduce_2 9# happyReduction_55+happyReduction_55 happy_x_2+ happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut50 happy_x_2 of { (HappyWrap50 happy_var_2) -> + happyIn47+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.CommandSection (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2))+ )}}++happyReduce_56 = happySpecReduce_2 9# happyReduction_56+happyReduction_56 happy_x_2+ happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut50 happy_x_2 of { (HappyWrap50 happy_var_2) -> + happyIn47+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.CommandSectionEnd (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2))+ )}}++happyReduce_57 = happyReduce 8# 9# happyReduction_57+happyReduction_57 (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 happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut43 happy_x_2 of { (HappyWrap43 happy_var_2) -> + case happyOut49 happy_x_3 of { (HappyWrap49 happy_var_3) -> + case happyOut56 happy_x_4 of { (HappyWrap56 happy_var_4) -> + case happyOut73 happy_x_6 of { (HappyWrap73 happy_var_6) -> + case happyOut73 happy_x_8 of { (HappyWrap73 happy_var_8) -> + happyIn47+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.CommandDefine (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_3) (snd happy_var_4) (snd happy_var_6) (snd happy_var_8))+ ) `HappyStk` happyRest}}}}}}++happyReduce_58 = happyReduce 7# 9# happyReduction_58+happyReduction_58 (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 { happy_var_1 -> + case happyOut43 happy_x_2 of { (HappyWrap43 happy_var_2) -> + case happyOut49 happy_x_3 of { (HappyWrap49 happy_var_3) -> + case happyOut73 happy_x_5 of { (HappyWrap73 happy_var_5) -> + case happyOut73 happy_x_7 of { (HappyWrap73 happy_var_7) -> + happyIn47+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.commandDefineNoParams (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_3) (snd happy_var_5) (snd happy_var_7))+ ) `HappyStk` happyRest}}}}}++happyReduce_59 = happyReduce 8# 9# happyReduction_59+happyReduction_59 (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 happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut43 happy_x_2 of { (HappyWrap43 happy_var_2) -> + case happyOut49 happy_x_3 of { (HappyWrap49 happy_var_3) -> + case happyOut56 happy_x_4 of { (HappyWrap56 happy_var_4) -> + case happyOut73 happy_x_6 of { (HappyWrap73 happy_var_6) -> + case happyOut73 happy_x_8 of { (HappyWrap73 happy_var_8) -> + happyIn47+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.commandDef (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_3) (snd happy_var_4) (snd happy_var_6) (snd happy_var_8))+ ) `HappyStk` happyRest}}}}}}++happyReduce_60 = happyReduce 7# 9# happyReduction_60+happyReduction_60 (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 { happy_var_1 -> + case happyOut43 happy_x_2 of { (HappyWrap43 happy_var_2) -> + case happyOut49 happy_x_3 of { (HappyWrap49 happy_var_3) -> + case happyOut73 happy_x_5 of { (HappyWrap73 happy_var_5) -> + case happyOut73 happy_x_7 of { (HappyWrap73 happy_var_7) -> + happyIn47+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.commandDefNoParams (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_3) (snd happy_var_5) (snd happy_var_7))+ ) `HappyStk` happyRest}}}}}++happyReduce_61 = happySpecReduce_0 10# happyReduction_61+happyReduction_61 = happyIn48+ ((Language.Rzk.Syntax.Abs.BNFC'NoPosition, [])+ )++happyReduce_62 = happySpecReduce_3 10# happyReduction_62+happyReduction_62 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut47 happy_x_1 of { (HappyWrap47 happy_var_1) -> + case happyOut48 happy_x_3 of { (HappyWrap48 happy_var_3) -> + happyIn48+ ((fst happy_var_1, (:) (snd happy_var_1) (snd happy_var_3))+ )}}++happyReduce_63 = happyReduce 4# 11# happyReduction_63+happyReduction_63 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut44 happy_x_3 of { (HappyWrap44 happy_var_3) -> + happyIn49+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.DeclUsedVars (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_3))+ ) `HappyStk` happyRest}}++happyReduce_64 = happySpecReduce_0 11# happyReduction_64+happyReduction_64 = happyIn49+ ((Language.Rzk.Syntax.Abs.BNFC'NoPosition, Language.Rzk.Syntax.Abs.noDeclUsedVars Language.Rzk.Syntax.Abs.BNFC'NoPosition)+ )++happyReduce_65 = happySpecReduce_0 12# happyReduction_65+happyReduction_65 = happyIn50+ ((Language.Rzk.Syntax.Abs.BNFC'NoPosition, Language.Rzk.Syntax.Abs.NoSectionName Language.Rzk.Syntax.Abs.BNFC'NoPosition)+ )++happyReduce_66 = happySpecReduce_1 12# happyReduction_66+happyReduction_66 happy_x_1+ = case happyOut43 happy_x_1 of { (HappyWrap43 happy_var_1) -> + happyIn50+ ((fst happy_var_1, Language.Rzk.Syntax.Abs.SomeSectionName (fst happy_var_1) (snd happy_var_1))+ )}++happyReduce_67 = happySpecReduce_1 13# happyReduction_67+happyReduction_67 happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn51+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.PatternUnit (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))+ )}++happyReduce_68 = happySpecReduce_1 13# happyReduction_68+happyReduction_68 happy_x_1+ = case happyOut43 happy_x_1 of { (HappyWrap43 happy_var_1) -> + happyIn51+ ((fst happy_var_1, Language.Rzk.Syntax.Abs.PatternVar (fst happy_var_1) (snd happy_var_1))+ )}++happyReduce_69 = happyReduce 5# 13# happyReduction_69+happyReduction_69 (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 { happy_var_1 -> + case happyOut51 happy_x_2 of { (HappyWrap51 happy_var_2) -> + case happyOut51 happy_x_4 of { (HappyWrap51 happy_var_4) -> + happyIn51+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.PatternPair (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4))+ ) `HappyStk` happyRest}}}++happyReduce_70 = happyReduce 7# 13# happyReduction_70+happyReduction_70 (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 { happy_var_1 -> + case happyOut51 happy_x_2 of { (HappyWrap51 happy_var_2) -> + case happyOut51 happy_x_4 of { (HappyWrap51 happy_var_4) -> + case happyOut54 happy_x_6 of { (HappyWrap54 happy_var_6) -> + happyIn51+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.PatternTuple (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4) (snd happy_var_6))+ ) `HappyStk` happyRest}}}}++happyReduce_71 = happySpecReduce_1 14# happyReduction_71+happyReduction_71 happy_x_1+ = case happyOut51 happy_x_1 of { (HappyWrap51 happy_var_1) -> + happyIn52+ ((fst happy_var_1, (:[]) (snd happy_var_1))+ )}++happyReduce_72 = happySpecReduce_2 14# happyReduction_72+happyReduction_72 happy_x_2+ happy_x_1+ = case happyOut51 happy_x_1 of { (HappyWrap51 happy_var_1) -> + case happyOut52 happy_x_2 of { (HappyWrap52 happy_var_2) -> + happyIn52+ ((fst happy_var_1, (:) (snd happy_var_1) (snd happy_var_2))+ )}}++happyReduce_73 = happySpecReduce_1 15# happyReduction_73+happyReduction_73 happy_x_1+ = case happyOut51 happy_x_1 of { (HappyWrap51 happy_var_1) -> + happyIn53+ ((fst happy_var_1, (snd happy_var_1))+ )}++happyReduce_74 = happySpecReduce_1 16# happyReduction_74+happyReduction_74 happy_x_1+ = case happyOut53 happy_x_1 of { (HappyWrap53 happy_var_1) -> + happyIn54+ ((fst happy_var_1, (:[]) (snd happy_var_1))+ )}++happyReduce_75 = happySpecReduce_3 16# happyReduction_75+happyReduction_75 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut53 happy_x_1 of { (HappyWrap53 happy_var_1) -> + case happyOut54 happy_x_3 of { (HappyWrap54 happy_var_3) -> + happyIn54+ ((fst happy_var_1, (:) (snd happy_var_1) (snd happy_var_3))+ )}}++happyReduce_76 = happySpecReduce_1 17# happyReduction_76+happyReduction_76 happy_x_1+ = case happyOut51 happy_x_1 of { (HappyWrap51 happy_var_1) -> + happyIn55+ ((fst happy_var_1, Language.Rzk.Syntax.Abs.ParamPattern (fst happy_var_1) (snd happy_var_1))+ )}++happyReduce_77 = happyReduce 5# 17# happyReduction_77+happyReduction_77 (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 { happy_var_1 -> + case happyOut52 happy_x_2 of { (HappyWrap52 happy_var_2) -> + case happyOut73 happy_x_4 of { (HappyWrap73 happy_var_4) -> + happyIn55+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ParamPatternType (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4))+ ) `HappyStk` happyRest}}}++happyReduce_78 = happyReduce 7# 17# happyReduction_78+happyReduction_78 (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 { happy_var_1 -> + case happyOut52 happy_x_2 of { (HappyWrap52 happy_var_2) -> + case happyOut73 happy_x_4 of { (HappyWrap73 happy_var_4) -> + case happyOut73 happy_x_6 of { (HappyWrap73 happy_var_6) -> + happyIn55+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ParamPatternShape (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4) (snd happy_var_6))+ ) `HappyStk` happyRest}}}}++happyReduce_79 = happyReduce 7# 17# happyReduction_79+happyReduction_79 (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 { happy_var_1 -> + case happyOut51 happy_x_2 of { (HappyWrap51 happy_var_2) -> + case happyOut73 happy_x_4 of { (HappyWrap73 happy_var_4) -> + case happyOut73 happy_x_6 of { (HappyWrap73 happy_var_6) -> + happyIn55+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ParamPatternShapeDeprecated (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4) (snd happy_var_6))+ ) `HappyStk` happyRest}}}}++happyReduce_80 = happyReduce 5# 17# happyReduction_80+happyReduction_80 (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 { happy_var_1 -> + case happyOut52 happy_x_2 of { (HappyWrap52 happy_var_2) -> + case happyOut65 happy_x_3 of { (HappyWrap65 happy_var_3) -> + case happyOut73 happy_x_4 of { (HappyWrap73 happy_var_4) -> + happyIn55+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ParamPatternModalType (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_3) (snd happy_var_4))+ ) `HappyStk` happyRest}}}}++happyReduce_81 = happyReduce 7# 17# happyReduction_81+happyReduction_81 (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 { happy_var_1 -> + case happyOut52 happy_x_2 of { (HappyWrap52 happy_var_2) -> + case happyOut65 happy_x_3 of { (HappyWrap65 happy_var_3) -> + case happyOut73 happy_x_4 of { (HappyWrap73 happy_var_4) -> + case happyOut73 happy_x_6 of { (HappyWrap73 happy_var_6) -> + happyIn55+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ParamPatternModalShape (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_3) (snd happy_var_4) (snd happy_var_6))+ ) `HappyStk` happyRest}}}}}++happyReduce_82 = happySpecReduce_1 18# happyReduction_82+happyReduction_82 happy_x_1+ = case happyOut55 happy_x_1 of { (HappyWrap55 happy_var_1) -> + happyIn56+ ((fst happy_var_1, (:[]) (snd happy_var_1))+ )}++happyReduce_83 = happySpecReduce_2 18# happyReduction_83+happyReduction_83 happy_x_2+ happy_x_1+ = case happyOut55 happy_x_1 of { (HappyWrap55 happy_var_1) -> + case happyOut56 happy_x_2 of { (HappyWrap56 happy_var_2) -> + happyIn56+ ((fst happy_var_1, (:) (snd happy_var_1) (snd happy_var_2))+ )}}++happyReduce_84 = happySpecReduce_1 19# happyReduction_84+happyReduction_84 happy_x_1+ = case happyOut51 happy_x_1 of { (HappyWrap51 happy_var_1) -> + happyIn57+ ((fst happy_var_1, Language.Rzk.Syntax.Abs.BindPattern (fst happy_var_1) (snd happy_var_1))+ )}++happyReduce_85 = happySpecReduce_3 19# happyReduction_85+happyReduction_85 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut51 happy_x_1 of { (HappyWrap51 happy_var_1) -> + case happyOut73 happy_x_3 of { (HappyWrap73 happy_var_3) -> + happyIn57+ ((fst happy_var_1, Language.Rzk.Syntax.Abs.BindPatternType (fst happy_var_1) (snd happy_var_1) (snd happy_var_3))+ )}}++happyReduce_86 = happySpecReduce_1 20# happyReduction_86+happyReduction_86 happy_x_1+ = case happyOut71 happy_x_1 of { (HappyWrap71 happy_var_1) -> + happyIn58+ ((fst happy_var_1, Language.Rzk.Syntax.Abs.ParamType (fst happy_var_1) (snd happy_var_1))+ )}++happyReduce_87 = happyReduce 5# 20# happyReduction_87+happyReduction_87 (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 { happy_var_1 -> + case happyOut73 happy_x_2 of { (HappyWrap73 happy_var_2) -> + case happyOut73 happy_x_4 of { (HappyWrap73 happy_var_4) -> + happyIn58+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ParamTermType (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4))+ ) `HappyStk` happyRest}}}++happyReduce_88 = happyReduce 7# 20# happyReduction_88+happyReduction_88 (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 { happy_var_1 -> + case happyOut73 happy_x_2 of { (HappyWrap73 happy_var_2) -> + case happyOut73 happy_x_4 of { (HappyWrap73 happy_var_4) -> + case happyOut73 happy_x_6 of { (HappyWrap73 happy_var_6) -> + happyIn58+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ParamTermShape (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4) (snd happy_var_6))+ ) `HappyStk` happyRest}}}}++happyReduce_89 = happyReduce 5# 20# happyReduction_89+happyReduction_89 (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 { happy_var_1 -> + case happyOut51 happy_x_2 of { (HappyWrap51 happy_var_2) -> + case happyOut73 happy_x_4 of { (HappyWrap73 happy_var_4) -> + happyIn58+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ParamTermTypeDeprecated (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4))+ ) `HappyStk` happyRest}}}++happyReduce_90 = happyReduce 9# 20# happyReduction_90+happyReduction_90 (happy_x_9 `HappyStk`+ 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 happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut51 happy_x_3 of { (HappyWrap51 happy_var_3) -> + case happyOut73 happy_x_5 of { (HappyWrap73 happy_var_5) -> + case happyOut73 happy_x_8 of { (HappyWrap73 happy_var_8) -> + happyIn58+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ParamVarShapeDeprecated (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_3) (snd happy_var_5) (snd happy_var_8))+ ) `HappyStk` happyRest}}}}++happyReduce_91 = happyReduce 7# 20# happyReduction_91+happyReduction_91 (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 { happy_var_1 -> + case happyOut51 happy_x_2 of { (HappyWrap51 happy_var_2) -> + case happyOut73 happy_x_4 of { (HappyWrap73 happy_var_4) -> + case happyOut73 happy_x_6 of { (HappyWrap73 happy_var_6) -> + happyIn58+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.paramVarShapeDeprecated (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4) (snd happy_var_6))+ ) `HappyStk` happyRest}}}}++happyReduce_92 = happyReduce 5# 20# happyReduction_92+happyReduction_92 (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 { happy_var_1 -> + case happyOut73 happy_x_2 of { (HappyWrap73 happy_var_2) -> + case happyOut65 happy_x_3 of { (HappyWrap65 happy_var_3) -> + case happyOut73 happy_x_4 of { (HappyWrap73 happy_var_4) -> + happyIn58+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ParamTermModalType (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_3) (snd happy_var_4))+ ) `HappyStk` happyRest}}}}++happyReduce_93 = happyReduce 7# 20# happyReduction_93+happyReduction_93 (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 { happy_var_1 -> + case happyOut73 happy_x_2 of { (HappyWrap73 happy_var_2) -> + case happyOut65 happy_x_3 of { (HappyWrap65 happy_var_3) -> + case happyOut73 happy_x_4 of { (HappyWrap73 happy_var_4) -> + case happyOut73 happy_x_6 of { (HappyWrap73 happy_var_6) -> + happyIn58+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ParamTermModalShape (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_3) (snd happy_var_4) (snd happy_var_6))+ ) `HappyStk` happyRest}}}}}++happyReduce_94 = happySpecReduce_3 21# happyReduction_94+happyReduction_94 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut51 happy_x_1 of { (HappyWrap51 happy_var_1) -> + case happyOut73 happy_x_3 of { (HappyWrap73 happy_var_3) -> + happyIn59+ ((fst happy_var_1, Language.Rzk.Syntax.Abs.SigmaParam (fst happy_var_1) (snd happy_var_1) (snd happy_var_3))+ )}}++happyReduce_95 = happySpecReduce_3 21# happyReduction_95+happyReduction_95 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut51 happy_x_1 of { (HappyWrap51 happy_var_1) -> + case happyOut65 happy_x_2 of { (HappyWrap65 happy_var_2) -> + case happyOut73 happy_x_3 of { (HappyWrap73 happy_var_3) -> + happyIn59+ ((fst happy_var_1, Language.Rzk.Syntax.Abs.SigmaParamModal (fst happy_var_1) (snd happy_var_1) (snd happy_var_2) (snd happy_var_3))+ )}}}++happyReduce_96 = happySpecReduce_1 22# happyReduction_96+happyReduction_96 happy_x_1+ = case happyOut59 happy_x_1 of { (HappyWrap59 happy_var_1) -> + happyIn60+ ((fst happy_var_1, (:[]) (snd happy_var_1))+ )}++happyReduce_97 = happySpecReduce_3 22# happyReduction_97+happyReduction_97 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut59 happy_x_1 of { (HappyWrap59 happy_var_1) -> + case happyOut60 happy_x_3 of { (HappyWrap60 happy_var_3) -> + happyIn60+ ((fst happy_var_1, (:) (snd happy_var_1) (snd happy_var_3))+ )}}++happyReduce_98 = happySpecReduce_3 23# happyReduction_98+happyReduction_98 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut73 happy_x_1 of { (HappyWrap73 happy_var_1) -> + case happyOut73 happy_x_3 of { (HappyWrap73 happy_var_3) -> + happyIn61+ ((fst happy_var_1, Language.Rzk.Syntax.Abs.Restriction (fst happy_var_1) (snd happy_var_1) (snd happy_var_3))+ )}}++happyReduce_99 = happySpecReduce_3 23# happyReduction_99+happyReduction_99 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut73 happy_x_1 of { (HappyWrap73 happy_var_1) -> + case happyOut73 happy_x_3 of { (HappyWrap73 happy_var_3) -> + happyIn61+ ((fst happy_var_1, Language.Rzk.Syntax.Abs.ASCII_Restriction (fst happy_var_1) (snd happy_var_1) (snd happy_var_3))+ )}}++happyReduce_100 = happySpecReduce_1 24# happyReduction_100+happyReduction_100 happy_x_1+ = case happyOut61 happy_x_1 of { (HappyWrap61 happy_var_1) -> + happyIn62+ ((fst happy_var_1, (:[]) (snd happy_var_1))+ )}++happyReduce_101 = happySpecReduce_3 24# happyReduction_101+happyReduction_101 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut61 happy_x_1 of { (HappyWrap61 happy_var_1) -> + case happyOut62 happy_x_3 of { (HappyWrap62 happy_var_3) -> + happyIn62+ ((fst happy_var_1, (:) (snd happy_var_1) (snd happy_var_3))+ )}}++happyReduce_102 = happySpecReduce_1 25# happyReduction_102+happyReduction_102 happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn63+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.Flat (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))+ )}++happyReduce_103 = happySpecReduce_1 25# happyReduction_103+happyReduction_103 happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn63+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ASCII_Flat (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))+ )}++happyReduce_104 = happySpecReduce_1 25# happyReduction_104+happyReduction_104 happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn63+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.Sharp (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))+ )}++happyReduce_105 = happySpecReduce_1 25# happyReduction_105+happyReduction_105 happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn63+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ASCII_Sharp (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))+ )}++happyReduce_106 = happySpecReduce_1 25# happyReduction_106+happyReduction_106 happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn63+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.Op (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))+ )}++happyReduce_107 = happySpecReduce_1 25# happyReduction_107+happyReduction_107 happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn63+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ASCII_Op (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))+ )}++happyReduce_108 = happySpecReduce_1 25# happyReduction_108+happyReduction_108 happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn63+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.Id (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))+ )}++happyReduce_109 = happySpecReduce_1 26# happyReduction_109+happyReduction_109 happy_x_1+ = case happyOut63 happy_x_1 of { (HappyWrap63 happy_var_1) -> + happyIn64+ ((fst happy_var_1, Language.Rzk.Syntax.Abs.Single (fst happy_var_1) (snd happy_var_1))+ )}++happyReduce_110 = happySpecReduce_3 26# happyReduction_110+happyReduction_110 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut63 happy_x_1 of { (HappyWrap63 happy_var_1) -> + case happyOut63 happy_x_3 of { (HappyWrap63 happy_var_3) -> + happyIn64+ ((fst happy_var_1, Language.Rzk.Syntax.Abs.Comp (fst happy_var_1) (snd happy_var_1) (snd happy_var_3))+ )}}++happyReduce_111 = happySpecReduce_1 27# happyReduction_111+happyReduction_111 happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn65+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ModalColonFlat (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))+ )}++happyReduce_112 = happySpecReduce_1 27# happyReduction_112+happyReduction_112 happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn65+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ModalColonSharp (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))+ )}++happyReduce_113 = happySpecReduce_1 27# happyReduction_113+happyReduction_113 happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn65+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ModalColonOp (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))+ )}++happyReduce_114 = happySpecReduce_1 27# happyReduction_114+happyReduction_114 happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn65+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ModalColonId (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))+ )}++happyReduce_115 = happySpecReduce_1 27# happyReduction_115+happyReduction_115 happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn65+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ASCII_ModalColonFlat (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))+ )}++happyReduce_116 = happySpecReduce_1 27# happyReduction_116+happyReduction_116 happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn65+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ASCII_ModalColonSharp (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))+ )}++happyReduce_117 = happySpecReduce_1 27# happyReduction_117+happyReduction_117 happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn65+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ASCII_ModalColonOp (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))+ )}++happyReduce_118 = happySpecReduce_1 28# happyReduction_118+happyReduction_118 happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn66+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.Universe (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))+ )}++happyReduce_119 = happySpecReduce_1 28# happyReduction_119+happyReduction_119 happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn66+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.UniverseCube (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))+ )}++happyReduce_120 = happySpecReduce_1 28# happyReduction_120+happyReduction_120 happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn66+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.UniverseTope (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))+ )}++happyReduce_121 = happySpecReduce_1 28# happyReduction_121+happyReduction_121 happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn66+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.CubeUnit (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))+ )}++happyReduce_122 = happySpecReduce_1 28# happyReduction_122+happyReduction_122 happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn66+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.CubeUnitStar (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))+ )}++happyReduce_123 = happySpecReduce_1 28# happyReduction_123+happyReduction_123 happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn66+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.Cube2 (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))+ )}++happyReduce_124 = happySpecReduce_1 28# happyReduction_124+happyReduction_124 happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn66+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.Cube2_0 (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))+ )}++happyReduce_125 = happySpecReduce_1 28# happyReduction_125+happyReduction_125 happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn66+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.Cube2_1 (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))+ )}++happyReduce_126 = happySpecReduce_1 28# happyReduction_126+happyReduction_126 happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn66+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.CubeI (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))+ )}++happyReduce_127 = happySpecReduce_1 28# happyReduction_127+happyReduction_127 happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn66+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.CubeI_0 (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))+ )}++happyReduce_128 = happySpecReduce_1 28# happyReduction_128+happyReduction_128 happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn66+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.CubeI_1 (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))+ )}++happyReduce_129 = happySpecReduce_1 28# happyReduction_129+happyReduction_129 happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn66+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.TopeTop (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))+ )}++happyReduce_130 = happySpecReduce_1 28# happyReduction_130+happyReduction_130 happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn66+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.TopeBottom (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))+ )}++happyReduce_131 = happySpecReduce_1 28# happyReduction_131+happyReduction_131 happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn66+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.RecBottom (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))+ )}++happyReduce_132 = happyReduce 4# 28# happyReduction_132+happyReduction_132 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut62 happy_x_3 of { (HappyWrap62 happy_var_3) -> + happyIn66+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.RecOr (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_3))+ ) `HappyStk` happyRest}}++happyReduce_133 = happyReduce 10# 28# happyReduction_133+happyReduction_133 (happy_x_10 `HappyStk`+ happy_x_9 `HappyStk`+ 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 happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut73 happy_x_3 of { (HappyWrap73 happy_var_3) -> + case happyOut73 happy_x_5 of { (HappyWrap73 happy_var_5) -> + case happyOut73 happy_x_7 of { (HappyWrap73 happy_var_7) -> + case happyOut73 happy_x_9 of { (HappyWrap73 happy_var_9) -> + happyIn66+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.RecOrDeprecated (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_3) (snd happy_var_5) (snd happy_var_7) (snd happy_var_9))+ ) `HappyStk` happyRest}}}}}++happyReduce_134 = happySpecReduce_1 28# happyReduction_134+happyReduction_134 happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn66+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.TypeUnit (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))+ )}++happyReduce_135 = happyReduce 5# 28# happyReduction_135+happyReduction_135 (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 { happy_var_1 -> + case happyOut58 happy_x_2 of { (HappyWrap58 happy_var_2) -> + case happyOut73 happy_x_4 of { (HappyWrap73 happy_var_4) -> + happyIn66+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.TypeExtensionDeprecated (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4))+ ) `HappyStk` happyRest}}}++happyReduce_136 = happyReduce 5# 28# happyReduction_136+happyReduction_136 (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 { happy_var_1 -> + case happyOut73 happy_x_2 of { (HappyWrap73 happy_var_2) -> + case happyOut73 happy_x_4 of { (HappyWrap73 happy_var_4) -> + happyIn66+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.Pair (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4))+ ) `HappyStk` happyRest}}}++happyReduce_137 = happyReduce 7# 28# happyReduction_137+happyReduction_137 (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 { happy_var_1 -> + case happyOut73 happy_x_2 of { (HappyWrap73 happy_var_2) -> + case happyOut73 happy_x_4 of { (HappyWrap73 happy_var_4) -> + case happyOut74 happy_x_6 of { (HappyWrap74 happy_var_6) -> + happyIn66+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.Tuple (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4) (snd happy_var_6))+ ) `HappyStk` happyRest}}}}++happyReduce_138 = happySpecReduce_3 28# happyReduction_138+happyReduction_138 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut63 happy_x_2 of { (HappyWrap63 happy_var_2) -> + case happyOut66 happy_x_3 of { (HappyWrap66 happy_var_3) -> + happyIn66+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ModApp (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_3))+ )}}}++happyReduce_139 = happySpecReduce_2 28# happyReduction_139+happyReduction_139 happy_x_2+ happy_x_1+ = case happyOut63 happy_x_1 of { (HappyWrap63 happy_var_1) -> + case happyOut66 happy_x_2 of { (HappyWrap66 happy_var_2) -> + happyIn66+ ((fst happy_var_1, Language.Rzk.Syntax.Abs.ModType (fst happy_var_1) (snd happy_var_1) (snd happy_var_2))+ )}}++happyReduce_140 = happySpecReduce_1 28# happyReduction_140+happyReduction_140 happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn66+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.Unit (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))+ )}++happyReduce_141 = happySpecReduce_1 28# happyReduction_141+happyReduction_141 happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn66+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.Refl (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))+ )}++happyReduce_142 = happySpecReduce_3 28# happyReduction_142+happyReduction_142 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut73 happy_x_2 of { (HappyWrap73 happy_var_2) -> + happyIn66+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ReflTerm (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2))+ )}}++happyReduce_143 = happyReduce 5# 28# 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 { happy_var_1 -> + case happyOut73 happy_x_2 of { (HappyWrap73 happy_var_2) -> + case happyOut73 happy_x_4 of { (HappyWrap73 happy_var_4) -> + happyIn66+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ReflTermType (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4))+ ) `HappyStk` happyRest}}}++happyReduce_144 = happyReduce 14# 28# happyReduction_144+happyReduction_144 (happy_x_14 `HappyStk`+ happy_x_13 `HappyStk`+ happy_x_12 `HappyStk`+ happy_x_11 `HappyStk`+ happy_x_10 `HappyStk`+ happy_x_9 `HappyStk`+ 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 happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut73 happy_x_3 of { (HappyWrap73 happy_var_3) -> + case happyOut73 happy_x_5 of { (HappyWrap73 happy_var_5) -> + case happyOut73 happy_x_7 of { (HappyWrap73 happy_var_7) -> + case happyOut73 happy_x_9 of { (HappyWrap73 happy_var_9) -> + case happyOut73 happy_x_11 of { (HappyWrap73 happy_var_11) -> + case happyOut73 happy_x_13 of { (HappyWrap73 happy_var_13) -> + happyIn66+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.IdJ (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_3) (snd happy_var_5) (snd happy_var_7) (snd happy_var_9) (snd happy_var_11) (snd happy_var_13))+ ) `HappyStk` happyRest}}}}}}}++happyReduce_145 = happySpecReduce_1 28# happyReduction_145+happyReduction_145 happy_x_1+ = case happyOut42 happy_x_1 of { (HappyWrap42 happy_var_1) -> + happyIn66+ ((fst happy_var_1, Language.Rzk.Syntax.Abs.Hole (fst happy_var_1) (snd happy_var_1))+ )}++happyReduce_146 = happySpecReduce_1 28# happyReduction_146+happyReduction_146 happy_x_1+ = case happyOut43 happy_x_1 of { (HappyWrap43 happy_var_1) -> + happyIn66+ ((fst happy_var_1, Language.Rzk.Syntax.Abs.Var (fst happy_var_1) (snd happy_var_1))+ )}++happyReduce_147 = happySpecReduce_3 28# happyReduction_147+happyReduction_147 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut73 happy_x_2 of { (HappyWrap73 happy_var_2) -> + happyIn66+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), (snd happy_var_2))+ )}}++happyReduce_148 = happySpecReduce_1 28# happyReduction_148+happyReduction_148 happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn66+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ASCII_CubeUnitStar (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))+ )}++happyReduce_149 = happySpecReduce_1 28# happyReduction_149+happyReduction_149 happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn66+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ASCII_Cube2_0 (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))+ )}++happyReduce_150 = happySpecReduce_1 28# happyReduction_150+happyReduction_150 happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn66+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ASCII_Cube2_1 (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))+ )}++happyReduce_151 = happySpecReduce_1 28# happyReduction_151+happyReduction_151 happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn66+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ASCII_CubeI (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))+ )}++happyReduce_152 = happySpecReduce_1 28# happyReduction_152+happyReduction_152 happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn66+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ASCII_CubeI_0 (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))+ )}++happyReduce_153 = happySpecReduce_1 28# happyReduction_153+happyReduction_153 happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn66+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ASCII_CubeI_1 (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))+ )}++happyReduce_154 = happySpecReduce_1 28# happyReduction_154+happyReduction_154 happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn66+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ASCII_TopeTop (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))+ )}++happyReduce_155 = happySpecReduce_1 28# happyReduction_155+happyReduction_155 happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn66+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ASCII_TopeBottom (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))+ )}++happyReduce_156 = happyReduce 5# 28# 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 { happy_var_1 -> + case happyOut58 happy_x_2 of { (HappyWrap58 happy_var_2) -> + case happyOut73 happy_x_4 of { (HappyWrap73 happy_var_4) -> + happyIn66+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ASCII_TypeExtensionDeprecated (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4))+ ) `HappyStk` happyRest}}}++happyReduce_157 = happySpecReduce_3 29# happyReduction_157+happyReduction_157 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut67 happy_x_1 of { (HappyWrap67 happy_var_1) -> + case happyOut71 happy_x_3 of { (HappyWrap71 happy_var_3) -> + happyIn67+ ((fst happy_var_1, Language.Rzk.Syntax.Abs.CubeProduct (fst happy_var_1) (snd happy_var_1) (snd happy_var_3))+ )}}++happyReduce_158 = happySpecReduce_1 29# happyReduction_158+happyReduction_158 happy_x_1+ = case happyOut71 happy_x_1 of { (HappyWrap71 happy_var_1) -> + happyIn67+ ((fst happy_var_1, (snd happy_var_1))+ )}++happyReduce_159 = happySpecReduce_3 29# happyReduction_159+happyReduction_159 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut67 happy_x_1 of { (HappyWrap67 happy_var_1) -> + case happyOut71 happy_x_3 of { (HappyWrap71 happy_var_3) -> + happyIn67+ ((fst happy_var_1, Language.Rzk.Syntax.Abs.ascii_CubeProduct (fst happy_var_1) (snd happy_var_1) (snd happy_var_3))+ )}}++happyReduce_160 = happySpecReduce_3 30# happyReduction_160+happyReduction_160 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut67 happy_x_1 of { (HappyWrap67 happy_var_1) -> + case happyOut67 happy_x_3 of { (HappyWrap67 happy_var_3) -> + happyIn68+ ((fst happy_var_1, Language.Rzk.Syntax.Abs.TopeEQ (fst happy_var_1) (snd happy_var_1) (snd happy_var_3))+ )}}++happyReduce_161 = happySpecReduce_3 30# happyReduction_161+happyReduction_161 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut67 happy_x_1 of { (HappyWrap67 happy_var_1) -> + case happyOut67 happy_x_3 of { (HappyWrap67 happy_var_3) -> + happyIn68+ ((fst happy_var_1, Language.Rzk.Syntax.Abs.TopeLEQ (fst happy_var_1) (snd happy_var_1) (snd happy_var_3))+ )}}++happyReduce_162 = happySpecReduce_1 30# happyReduction_162+happyReduction_162 happy_x_1+ = case happyOut67 happy_x_1 of { (HappyWrap67 happy_var_1) -> + happyIn68+ ((fst happy_var_1, (snd happy_var_1))+ )}++happyReduce_163 = happySpecReduce_3 30# happyReduction_163+happyReduction_163 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut67 happy_x_1 of { (HappyWrap67 happy_var_1) -> + case happyOut67 happy_x_3 of { (HappyWrap67 happy_var_3) -> + happyIn68+ ((fst happy_var_1, Language.Rzk.Syntax.Abs.ASCII_TopeEQ (fst happy_var_1) (snd happy_var_1) (snd happy_var_3))+ )}}++happyReduce_164 = happySpecReduce_3 30# happyReduction_164+happyReduction_164 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut67 happy_x_1 of { (HappyWrap67 happy_var_1) -> + case happyOut67 happy_x_3 of { (HappyWrap67 happy_var_3) -> + happyIn68+ ((fst happy_var_1, Language.Rzk.Syntax.Abs.ASCII_TopeLEQ (fst happy_var_1) (snd happy_var_1) (snd happy_var_3))+ )}}++happyReduce_165 = happySpecReduce_3 31# happyReduction_165+happyReduction_165 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut68 happy_x_1 of { (HappyWrap68 happy_var_1) -> + case happyOut69 happy_x_3 of { (HappyWrap69 happy_var_3) -> + happyIn69+ ((fst happy_var_1, Language.Rzk.Syntax.Abs.TopeAnd (fst happy_var_1) (snd happy_var_1) (snd happy_var_3))+ )}}++happyReduce_166 = happySpecReduce_1 31# happyReduction_166+happyReduction_166 happy_x_1+ = case happyOut68 happy_x_1 of { (HappyWrap68 happy_var_1) -> + happyIn69+ ((fst happy_var_1, (snd happy_var_1))+ )}++happyReduce_167 = happySpecReduce_3 31# happyReduction_167+happyReduction_167 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut68 happy_x_1 of { (HappyWrap68 happy_var_1) -> + case happyOut69 happy_x_3 of { (HappyWrap69 happy_var_3) -> + happyIn69+ ((fst happy_var_1, Language.Rzk.Syntax.Abs.ASCII_TopeAnd (fst happy_var_1) (snd happy_var_1) (snd happy_var_3))+ )}}++happyReduce_168 = happySpecReduce_3 32# happyReduction_168+happyReduction_168 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut69 happy_x_1 of { (HappyWrap69 happy_var_1) -> + case happyOut70 happy_x_3 of { (HappyWrap70 happy_var_3) -> + happyIn70+ ((fst happy_var_1, Language.Rzk.Syntax.Abs.TopeOr (fst happy_var_1) (snd happy_var_1) (snd happy_var_3))+ )}}++happyReduce_169 = happySpecReduce_1 32# happyReduction_169+happyReduction_169 happy_x_1+ = case happyOut69 happy_x_1 of { (HappyWrap69 happy_var_1) -> + happyIn70+ ((fst happy_var_1, (snd happy_var_1))+ )}++happyReduce_170 = happySpecReduce_3 32# happyReduction_170+happyReduction_170 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut69 happy_x_1 of { (HappyWrap69 happy_var_1) -> + case happyOut70 happy_x_3 of { (HappyWrap70 happy_var_3) -> + happyIn70+ ((fst happy_var_1, Language.Rzk.Syntax.Abs.ASCII_TopeOr (fst happy_var_1) (snd happy_var_1) (snd happy_var_3))+ )}}++happyReduce_171 = happySpecReduce_2 33# happyReduction_171+happyReduction_171 happy_x_2+ happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut66 happy_x_2 of { (HappyWrap66 happy_var_2) -> + happyIn71+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.TopeInv (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2))+ )}}++happyReduce_172 = happySpecReduce_2 33# happyReduction_172+happyReduction_172 happy_x_2+ happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut66 happy_x_2 of { (HappyWrap66 happy_var_2) -> + happyIn71+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ascii_TopeInv (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2))+ )}}++happyReduce_173 = happySpecReduce_2 33# happyReduction_173+happyReduction_173 happy_x_2+ happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut66 happy_x_2 of { (HappyWrap66 happy_var_2) -> + happyIn71+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.TopeUninv (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2))+ )}}++happyReduce_174 = happySpecReduce_2 33# happyReduction_174+happyReduction_174 happy_x_2+ happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut66 happy_x_2 of { (HappyWrap66 happy_var_2) -> + happyIn71+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ascii_TopeUninv (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2))+ )}}++happyReduce_175 = happySpecReduce_2 33# happyReduction_175+happyReduction_175 happy_x_2+ happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut66 happy_x_2 of { (HappyWrap66 happy_var_2) -> + happyIn71+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.CubeFlip (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2))+ )}}++happyReduce_176 = happySpecReduce_2 33# happyReduction_176+happyReduction_176 happy_x_2+ happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut66 happy_x_2 of { (HappyWrap66 happy_var_2) -> + happyIn71+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ascii_CubeFlip (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2))+ )}}++happyReduce_177 = happySpecReduce_2 33# happyReduction_177+happyReduction_177 happy_x_2+ happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut66 happy_x_2 of { (HappyWrap66 happy_var_2) -> + happyIn71+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.CubeUnflip (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2))+ )}}++happyReduce_178 = happySpecReduce_2 33# happyReduction_178+happyReduction_178 happy_x_2+ happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut66 happy_x_2 of { (HappyWrap66 happy_var_2) -> + happyIn71+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ascii_CubeUnflip (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2))+ )}}++happyReduce_179 = happyReduce 4# 33# happyReduction_179+happyReduction_179 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut71 happy_x_1 of { (HappyWrap71 happy_var_1) -> + case happyOut62 happy_x_3 of { (HappyWrap62 happy_var_3) -> + happyIn71+ ((fst happy_var_1, Language.Rzk.Syntax.Abs.TypeRestricted (fst happy_var_1) (snd happy_var_1) (snd happy_var_3))+ ) `HappyStk` happyRest}}++happyReduce_180 = happySpecReduce_2 33# happyReduction_180+happyReduction_180 happy_x_2+ happy_x_1+ = case happyOut71 happy_x_1 of { (HappyWrap71 happy_var_1) -> + case happyOut66 happy_x_2 of { (HappyWrap66 happy_var_2) -> + happyIn71+ ((fst happy_var_1, Language.Rzk.Syntax.Abs.App (fst happy_var_1) (snd happy_var_1) (snd happy_var_2))+ )}}++happyReduce_181 = happySpecReduce_3 33# happyReduction_181+happyReduction_181 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut64 happy_x_2 of { (HappyWrap64 happy_var_2) -> + case happyOut66 happy_x_3 of { (HappyWrap66 happy_var_3) -> + happyIn71+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ModExtract (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_3))+ )}}}++happyReduce_182 = happySpecReduce_2 33# happyReduction_182+happyReduction_182 happy_x_2+ happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut66 happy_x_2 of { (HappyWrap66 happy_var_2) -> + happyIn71+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.First (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2))+ )}}++happyReduce_183 = happySpecReduce_2 33# happyReduction_183+happyReduction_183 happy_x_2+ happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut66 happy_x_2 of { (HappyWrap66 happy_var_2) -> + happyIn71+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.Second (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2))+ )}}++happyReduce_184 = happySpecReduce_1 33# happyReduction_184+happyReduction_184 happy_x_1+ = case happyOut66 happy_x_1 of { (HappyWrap66 happy_var_1) -> + happyIn71+ ((fst happy_var_1, (snd happy_var_1))+ )}++happyReduce_185 = happySpecReduce_2 33# happyReduction_185+happyReduction_185 happy_x_2+ happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut66 happy_x_2 of { (HappyWrap66 happy_var_2) -> + happyIn71+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ASCII_First (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2))+ )}}++happyReduce_186 = happySpecReduce_2 33# happyReduction_186+happyReduction_186 happy_x_2+ happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut66 happy_x_2 of { (HappyWrap66 happy_var_2) -> + happyIn71+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ASCII_Second (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2))+ )}}++happyReduce_187 = happySpecReduce_3 34# happyReduction_187+happyReduction_187 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut58 happy_x_1 of { (HappyWrap58 happy_var_1) -> + case happyOut72 happy_x_3 of { (HappyWrap72 happy_var_3) -> + happyIn72+ ((fst happy_var_1, Language.Rzk.Syntax.Abs.TypeFun (fst happy_var_1) (snd happy_var_1) (snd happy_var_3))+ )}}++happyReduce_188 = happyReduce 8# 34# happyReduction_188+happyReduction_188 (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 happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut51 happy_x_3 of { (HappyWrap51 happy_var_3) -> + case happyOut73 happy_x_5 of { (HappyWrap73 happy_var_5) -> + case happyOut72 happy_x_8 of { (HappyWrap72 happy_var_8) -> + happyIn72+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.TypeSigma (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_3) (snd happy_var_5) (snd happy_var_8))+ ) `HappyStk` happyRest}}}}++happyReduce_189 = happyReduce 8# 34# happyReduction_189+happyReduction_189 (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 happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut51 happy_x_3 of { (HappyWrap51 happy_var_3) -> + case happyOut65 happy_x_4 of { (HappyWrap65 happy_var_4) -> + case happyOut73 happy_x_5 of { (HappyWrap73 happy_var_5) -> + case happyOut72 happy_x_8 of { (HappyWrap72 happy_var_8) -> + happyIn72+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.TypeSigmaModal (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_3) (snd happy_var_4) (snd happy_var_5) (snd happy_var_8))+ ) `HappyStk` happyRest}}}}}++happyReduce_190 = happyReduce 8# 34# happyReduction_190+happyReduction_190 (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 happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut59 happy_x_3 of { (HappyWrap59 happy_var_3) -> + case happyOut60 happy_x_5 of { (HappyWrap60 happy_var_5) -> + case happyOut72 happy_x_8 of { (HappyWrap72 happy_var_8) -> + happyIn72+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.TypeSigmaTuple (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_3) (snd happy_var_5) (snd happy_var_8))+ ) `HappyStk` happyRest}}}}++happyReduce_191 = happyReduce 5# 34# happyReduction_191+happyReduction_191 (happy_x_5 `HappyStk`+ happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut70 happy_x_1 of { (HappyWrap70 happy_var_1) -> + case happyOut73 happy_x_3 of { (HappyWrap73 happy_var_3) -> + case happyOut70 happy_x_5 of { (HappyWrap70 happy_var_5) -> + happyIn72+ ((fst happy_var_1, Language.Rzk.Syntax.Abs.TypeId (fst happy_var_1) (snd happy_var_1) (snd happy_var_3) (snd happy_var_5))+ ) `HappyStk` happyRest}}}++happyReduce_192 = happySpecReduce_3 34# happyReduction_192+happyReduction_192 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut70 happy_x_1 of { (HappyWrap70 happy_var_1) -> + case happyOut70 happy_x_3 of { (HappyWrap70 happy_var_3) -> + happyIn72+ ((fst happy_var_1, Language.Rzk.Syntax.Abs.TypeIdSimple (fst happy_var_1) (snd happy_var_1) (snd happy_var_3))+ )}}++happyReduce_193 = happyReduce 6# 34# happyReduction_193+happyReduction_193 (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 { happy_var_1 -> + case happyOut57 happy_x_2 of { (HappyWrap57 happy_var_2) -> + case happyOut73 happy_x_4 of { (HappyWrap73 happy_var_4) -> + case happyOut73 happy_x_6 of { (HappyWrap73 happy_var_6) -> + happyIn72+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.Let (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4) (snd happy_var_6))+ ) `HappyStk` happyRest}}}}++happyReduce_194 = happyReduce 4# 34# happyReduction_194+happyReduction_194 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut56 happy_x_2 of { (HappyWrap56 happy_var_2) -> + case happyOut72 happy_x_4 of { (HappyWrap72 happy_var_4) -> + happyIn72+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.Lambda (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4))+ ) `HappyStk` happyRest}}}++happyReduce_195 = happyReduce 8# 34# happyReduction_195+happyReduction_195 (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 happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut64 happy_x_3 of { (HappyWrap64 happy_var_3) -> + case happyOut57 happy_x_4 of { (HappyWrap57 happy_var_4) -> + case happyOut73 happy_x_6 of { (HappyWrap73 happy_var_6) -> + case happyOut73 happy_x_8 of { (HappyWrap73 happy_var_8) -> + happyIn72+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.LetMod (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_3) (snd happy_var_4) (snd happy_var_6) (snd happy_var_8))+ ) `HappyStk` happyRest}}}}}++happyReduce_196 = happySpecReduce_1 34# happyReduction_196+happyReduction_196 happy_x_1+ = case happyOut70 happy_x_1 of { (HappyWrap70 happy_var_1) -> + happyIn72+ ((fst happy_var_1, (snd happy_var_1))+ )}++happyReduce_197 = happySpecReduce_3 34# happyReduction_197+happyReduction_197 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut58 happy_x_1 of { (HappyWrap58 happy_var_1) -> + case happyOut72 happy_x_3 of { (HappyWrap72 happy_var_3) -> + happyIn72+ ((fst happy_var_1, Language.Rzk.Syntax.Abs.ASCII_TypeFun (fst happy_var_1) (snd happy_var_1) (snd happy_var_3))+ )}}++happyReduce_198 = happyReduce 8# 34# happyReduction_198+happyReduction_198 (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 happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut51 happy_x_3 of { (HappyWrap51 happy_var_3) -> + case happyOut73 happy_x_5 of { (HappyWrap73 happy_var_5) -> + case happyOut72 happy_x_8 of { (HappyWrap72 happy_var_8) -> + happyIn72+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ASCII_TypeSigma (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_3) (snd happy_var_5) (snd happy_var_8))+ ) `HappyStk` happyRest}}}}++happyReduce_199 = happyReduce 8# 34# happyReduction_199+happyReduction_199 (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 happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut51 happy_x_3 of { (HappyWrap51 happy_var_3) -> + case happyOut65 happy_x_4 of { (HappyWrap65 happy_var_4) -> + case happyOut73 happy_x_5 of { (HappyWrap73 happy_var_5) -> + case happyOut72 happy_x_8 of { (HappyWrap72 happy_var_8) -> + happyIn72+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ascii_TypeSigmaModal (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_3) (snd happy_var_4) (snd happy_var_5) (snd happy_var_8))+ ) `HappyStk` happyRest}}}}}++happyReduce_200 = happyReduce 8# 34# happyReduction_200+happyReduction_200 (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 happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut59 happy_x_3 of { (HappyWrap59 happy_var_3) -> + case happyOut60 happy_x_5 of { (HappyWrap60 happy_var_5) -> + case happyOut72 happy_x_8 of { (HappyWrap72 happy_var_8) -> + happyIn72+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ASCII_TypeSigmaTuple (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_3) (snd happy_var_5) (snd happy_var_8))+ ) `HappyStk` happyRest}}}}++happyReduce_201 = happyReduce 4# 34# happyReduction_201+happyReduction_201 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut56 happy_x_2 of { (HappyWrap56 happy_var_2) -> + case happyOut72 happy_x_4 of { (HappyWrap72 happy_var_4) -> + happyIn72+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ASCII_Lambda (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4))+ ) `HappyStk` happyRest}}}++happyReduce_202 = happyReduce 8# 34# happyReduction_202+happyReduction_202 (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 happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut51 happy_x_3 of { (HappyWrap51 happy_var_3) -> + case happyOut73 happy_x_5 of { (HappyWrap73 happy_var_5) -> + case happyOut72 happy_x_8 of { (HappyWrap72 happy_var_8) -> + happyIn72+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.unicode_TypeSigmaAlt (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_3) (snd happy_var_5) (snd happy_var_8))+ ) `HappyStk` happyRest}}}}++happyReduce_203 = happyReduce 8# 34# happyReduction_203+happyReduction_203 (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 happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut59 happy_x_3 of { (HappyWrap59 happy_var_3) -> + case happyOut60 happy_x_5 of { (HappyWrap60 happy_var_5) -> + case happyOut72 happy_x_8 of { (HappyWrap72 happy_var_8) -> + happyIn72+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.unicode_TypeSigmaTupleAlt (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_3) (snd happy_var_5) (snd happy_var_8))+ ) `HappyStk` happyRest}}}}++happyReduce_204 = happySpecReduce_3 35# happyReduction_204+happyReduction_204 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut70 happy_x_1 of { (HappyWrap70 happy_var_1) -> + case happyOut72 happy_x_3 of { (HappyWrap72 happy_var_3) -> + happyIn73+ ((fst happy_var_1, Language.Rzk.Syntax.Abs.TypeAsc (fst happy_var_1) (snd happy_var_1) (snd happy_var_3))+ )}}++happyReduce_205 = happySpecReduce_1 35# happyReduction_205+happyReduction_205 happy_x_1+ = case happyOut72 happy_x_1 of { (HappyWrap72 happy_var_1) -> + happyIn73+ ((fst happy_var_1, (snd happy_var_1))+ )}++happyReduce_206 = happySpecReduce_1 36# happyReduction_206+happyReduction_206 happy_x_1+ = case happyOut73 happy_x_1 of { (HappyWrap73 happy_var_1) -> + happyIn74+ ((fst happy_var_1, (:[]) (snd happy_var_1))+ )}++happyReduce_207 = happySpecReduce_3 36# happyReduction_207+happyReduction_207 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut73 happy_x_1 of { (HappyWrap73 happy_var_1) -> + case happyOut74 happy_x_3 of { (HappyWrap74 happy_var_3) -> + happyIn74+ ((fst happy_var_1, (:) (snd happy_var_1) (snd happy_var_3))+ )}}++happyTerminalToTok term = case term of {+ PT _ (TS _ 1) -> 2#;+ PT _ (TS _ 2) -> 3#;+ PT _ (TS _ 3) -> 4#;+ PT _ (TS _ 4) -> 5#;+ PT _ (TS _ 5) -> 6#;+ PT _ (TS _ 6) -> 7#;+ PT _ (TS _ 7) -> 8#;+ PT _ (TS _ 8) -> 9#;+ PT _ (TS _ 9) -> 10#;+ PT _ (TS _ 10) -> 11#;+ PT _ (TS _ 11) -> 12#;+ PT _ (TS _ 12) -> 13#;+ PT _ (TS _ 13) -> 14#;+ PT _ (TS _ 14) -> 15#;+ PT _ (TS _ 15) -> 16#;+ PT _ (TS _ 16) -> 17#;+ PT _ (TS _ 17) -> 18#;+ PT _ (TS _ 18) -> 19#;+ PT _ (TS _ 19) -> 20#;+ PT _ (TS _ 20) -> 21#;+ PT _ (TS _ 21) -> 22#;+ PT _ (TS _ 22) -> 23#;+ PT _ (TS _ 23) -> 24#;+ PT _ (TS _ 24) -> 25#;+ PT _ (TS _ 25) -> 26#;+ PT _ (TS _ 26) -> 27#;+ PT _ (TS _ 27) -> 28#;+ PT _ (TS _ 28) -> 29#;+ PT _ (TS _ 29) -> 30#;+ PT _ (TS _ 30) -> 31#;+ PT _ (TS _ 31) -> 32#;+ PT _ (TS _ 32) -> 33#;+ PT _ (TS _ 33) -> 34#;+ PT _ (TS _ 34) -> 35#;+ PT _ (TS _ 35) -> 36#;+ PT _ (TS _ 36) -> 37#;+ PT _ (TS _ 37) -> 38#;+ PT _ (TS _ 38) -> 39#;+ PT _ (TS _ 39) -> 40#;+ PT _ (TS _ 40) -> 41#;+ PT _ (TS _ 41) -> 42#;+ PT _ (TS _ 42) -> 43#;+ PT _ (TS _ 43) -> 44#;+ PT _ (TS _ 44) -> 45#;+ PT _ (TS _ 45) -> 46#;+ PT _ (TS _ 46) -> 47#;+ PT _ (TS _ 47) -> 48#;+ PT _ (TS _ 48) -> 49#;+ PT _ (TS _ 49) -> 50#;+ PT _ (TS _ 50) -> 51#;+ PT _ (TS _ 51) -> 52#;+ PT _ (TS _ 52) -> 53#;+ PT _ (TS _ 53) -> 54#;+ PT _ (TS _ 54) -> 55#;+ PT _ (TS _ 55) -> 56#;+ PT _ (TS _ 56) -> 57#;+ PT _ (TS _ 57) -> 58#;+ PT _ (TS _ 58) -> 59#;+ PT _ (TS _ 59) -> 60#;+ PT _ (TS _ 60) -> 61#;+ PT _ (TS _ 61) -> 62#;+ PT _ (TS _ 62) -> 63#;+ PT _ (TS _ 63) -> 64#;+ PT _ (TS _ 64) -> 65#;+ PT _ (TS _ 65) -> 66#;+ PT _ (TS _ 66) -> 67#;+ PT _ (TS _ 67) -> 68#;+ PT _ (TS _ 68) -> 69#;+ PT _ (TS _ 69) -> 70#;+ PT _ (TS _ 70) -> 71#;+ PT _ (TS _ 71) -> 72#;+ PT _ (TS _ 72) -> 73#;+ PT _ (TS _ 73) -> 74#;+ PT _ (TS _ 74) -> 75#;+ PT _ (TS _ 75) -> 76#;+ PT _ (TS _ 76) -> 77#;+ PT _ (TS _ 77) -> 78#;+ PT _ (TS _ 78) -> 79#;+ PT _ (TS _ 79) -> 80#;+ PT _ (TS _ 80) -> 81#;+ PT _ (TS _ 81) -> 82#;+ PT _ (TS _ 82) -> 83#;+ PT _ (TS _ 83) -> 84#;+ PT _ (TS _ 84) -> 85#;+ PT _ (TS _ 85) -> 86#;+ PT _ (TS _ 86) -> 87#;+ PT _ (TS _ 87) -> 88#;+ PT _ (TS _ 88) -> 89#;+ PT _ (TS _ 89) -> 90#;+ PT _ (TS _ 90) -> 91#;+ PT _ (TS _ 91) -> 92#;+ PT _ (TS _ 92) -> 93#;+ PT _ (TS _ 93) -> 94#;+ PT _ (TS _ 94) -> 95#;+ PT _ (TS _ 95) -> 96#;+ PT _ (TS _ 96) -> 97#;+ PT _ (TS _ 97) -> 98#;+ PT _ (TS _ 98) -> 99#;+ PT _ (TS _ 99) -> 100#;+ PT _ (TS _ 100) -> 101#;+ PT _ (TS _ 101) -> 102#;+ PT _ (TS _ 102) -> 103#;+ PT _ (TS _ 103) -> 104#;+ PT _ (TS _ 104) -> 105#;+ PT _ (TS _ 105) -> 106#;+ PT _ (TS _ 106) -> 107#;+ PT _ (TS _ 107) -> 108#;+ PT _ (TS _ 108) -> 109#;+ PT _ (TS _ 109) -> 110#;+ PT _ (TS _ 110) -> 111#;+ PT _ (TL _) -> 112#;+ PT _ (T_VarIdentToken _) -> 113#;+ PT _ (T_HoleIdentToken _) -> 114#;+ _ -> -1#;+ }+{-# NOINLINE happyTerminalToTok #-}++happyLex kend _kmore [] = kend notHappyAtAll []+happyLex _kend kmore (tk:tks) = kmore (happyTerminalToTok tk) tk tks+{-# INLINE happyLex #-}++happyNewToken action sts stk = happyLex (\tk -> happyDoAction 115# notHappyAtAll action sts stk) (\i tk -> happyDoAction i tk action sts stk)++happyReport 115# tk explist resume tks = happyReport' tks explist resume+happyReport _ tk explist resume tks = happyReport' (tk:tks) explist (\tks -> resume (Happy_Prelude.tail tks))+++happyThen :: () => (Err a) -> (a -> (Err b)) -> (Err b)+happyThen = ((>>=))+happyReturn :: () => a -> (Err a)+happyReturn = (return)+happyThen1 m k tks = ((>>=)) m (\a -> k a tks)+happyFmap1 f m tks = happyThen (m tks) (\a -> happyReturn (f a))+happyReturn1 :: () => a -> b -> (Err a)+happyReturn1 = \a tks -> (return) a+happyReport' :: () => [(Token)] -> [Happy_Prelude.String] -> ([(Token)] -> (Err a)) -> (Err a)+happyReport' = (\tokens expected resume -> happyError tokens)++happyAbort :: () => [(Token)] -> (Err a)+happyAbort = Happy_Prelude.error "Called abort handler in non-resumptive parser"++pModule_internal tks = happySomeParser where+ happySomeParser = happyThen (happyDoParse 0# tks) (\x -> happyReturn (let {(HappyWrap41 x') = happyOut41 x} in x'))++pHoleIdent_internal tks = happySomeParser where+ happySomeParser = happyThen (happyDoParse 1# tks) (\x -> happyReturn (let {(HappyWrap42 x') = happyOut42 x} in x'))++pVarIdent_internal tks = happySomeParser where+ happySomeParser = happyThen (happyDoParse 2# tks) (\x -> happyReturn (let {(HappyWrap43 x') = happyOut43 x} in x'))++pListVarIdent_internal tks = happySomeParser where+ happySomeParser = happyThen (happyDoParse 3# tks) (\x -> happyReturn (let {(HappyWrap44 x') = happyOut44 x} in x'))++pLanguageDecl_internal tks = happySomeParser where+ happySomeParser = happyThen (happyDoParse 4# tks) (\x -> happyReturn (let {(HappyWrap45 x') = happyOut45 x} in x'))++pLanguage_internal tks = happySomeParser where+ happySomeParser = happyThen (happyDoParse 5# tks) (\x -> happyReturn (let {(HappyWrap46 x') = happyOut46 x} in x'))++pCommand_internal tks = happySomeParser where+ happySomeParser = happyThen (happyDoParse 6# tks) (\x -> happyReturn (let {(HappyWrap47 x') = happyOut47 x} in x'))++pListCommand_internal tks = happySomeParser where+ happySomeParser = happyThen (happyDoParse 7# tks) (\x -> happyReturn (let {(HappyWrap48 x') = happyOut48 x} in x'))++pDeclUsedVars_internal tks = happySomeParser where+ happySomeParser = happyThen (happyDoParse 8# tks) (\x -> happyReturn (let {(HappyWrap49 x') = happyOut49 x} in x'))++pSectionName_internal tks = happySomeParser where+ happySomeParser = happyThen (happyDoParse 9# tks) (\x -> happyReturn (let {(HappyWrap50 x') = happyOut50 x} in x'))++pPattern_internal tks = happySomeParser where+ happySomeParser = happyThen (happyDoParse 10# tks) (\x -> happyReturn (let {(HappyWrap51 x') = happyOut51 x} in x'))++pListPattern_internal tks = happySomeParser where+ happySomeParser = happyThen (happyDoParse 11# tks) (\x -> happyReturn (let {(HappyWrap52 x') = happyOut52 x} in x'))++pPattern1_internal tks = happySomeParser where+ happySomeParser = happyThen (happyDoParse 12# tks) (\x -> happyReturn (let {(HappyWrap53 x') = happyOut53 x} in x'))++pListPattern1_internal tks = happySomeParser where+ happySomeParser = happyThen (happyDoParse 13# tks) (\x -> happyReturn (let {(HappyWrap54 x') = happyOut54 x} in x'))++pParam_internal tks = happySomeParser where+ happySomeParser = happyThen (happyDoParse 14# tks) (\x -> happyReturn (let {(HappyWrap55 x') = happyOut55 x} in x'))++pListParam_internal tks = happySomeParser where+ happySomeParser = happyThen (happyDoParse 15# tks) (\x -> happyReturn (let {(HappyWrap56 x') = happyOut56 x} in x'))++pBind_internal tks = happySomeParser where+ happySomeParser = happyThen (happyDoParse 16# tks) (\x -> happyReturn (let {(HappyWrap57 x') = happyOut57 x} in x'))++pParamDecl_internal tks = happySomeParser where+ happySomeParser = happyThen (happyDoParse 17# tks) (\x -> happyReturn (let {(HappyWrap58 x') = happyOut58 x} in x'))++pSigmaParam_internal tks = happySomeParser where+ happySomeParser = happyThen (happyDoParse 18# tks) (\x -> happyReturn (let {(HappyWrap59 x') = happyOut59 x} in x'))++pListSigmaParam_internal tks = happySomeParser where+ happySomeParser = happyThen (happyDoParse 19# tks) (\x -> happyReturn (let {(HappyWrap60 x') = happyOut60 x} in x'))++pRestriction_internal tks = happySomeParser where+ happySomeParser = happyThen (happyDoParse 20# tks) (\x -> happyReturn (let {(HappyWrap61 x') = happyOut61 x} in x'))++pListRestriction_internal tks = happySomeParser where+ happySomeParser = happyThen (happyDoParse 21# tks) (\x -> happyReturn (let {(HappyWrap62 x') = happyOut62 x} in x'))++pModality_internal tks = happySomeParser where+ happySomeParser = happyThen (happyDoParse 22# tks) (\x -> happyReturn (let {(HappyWrap63 x') = happyOut63 x} in x'))++pModComp_internal tks = happySomeParser where+ happySomeParser = happyThen (happyDoParse 23# tks) (\x -> happyReturn (let {(HappyWrap64 x') = happyOut64 x} in x'))++pModalColon_internal tks = happySomeParser where+ happySomeParser = happyThen (happyDoParse 24# tks) (\x -> happyReturn (let {(HappyWrap65 x') = happyOut65 x} in x'))++pTerm7_internal tks = happySomeParser where+ happySomeParser = happyThen (happyDoParse 25# tks) (\x -> happyReturn (let {(HappyWrap66 x') = happyOut66 x} in x'))++pTerm5_internal tks = happySomeParser where+ happySomeParser = happyThen (happyDoParse 26# tks) (\x -> happyReturn (let {(HappyWrap67 x') = happyOut67 x} in x'))++pTerm4_internal tks = happySomeParser where+ happySomeParser = happyThen (happyDoParse 27# tks) (\x -> happyReturn (let {(HappyWrap68 x') = happyOut68 x} in x'))++pTerm3_internal tks = happySomeParser where+ happySomeParser = happyThen (happyDoParse 28# tks) (\x -> happyReturn (let {(HappyWrap69 x') = happyOut69 x} in x'))++pTerm2_internal tks = happySomeParser where+ happySomeParser = happyThen (happyDoParse 29# tks) (\x -> happyReturn (let {(HappyWrap70 x') = happyOut70 x} in x'))++pTerm6_internal tks = happySomeParser where+ happySomeParser = happyThen (happyDoParse 30# tks) (\x -> happyReturn (let {(HappyWrap71 x') = happyOut71 x} in x'))++pTerm1_internal tks = happySomeParser where+ happySomeParser = happyThen (happyDoParse 31# tks) (\x -> happyReturn (let {(HappyWrap72 x') = happyOut72 x} in x'))++pTerm_internal tks = happySomeParser where+ happySomeParser = happyThen (happyDoParse 32# tks) (\x -> happyReturn (let {(HappyWrap73 x') = happyOut73 x} in x'))++pListTerm_internal tks = happySomeParser where+ happySomeParser = happyThen (happyDoParse 33# tks) (\x -> happyReturn (let {(HappyWrap74 x') = happyOut74 x} in x'))++happySeq = happyDontSeq+++type Err = Either String++happyError :: [Token] -> Err a+happyError ts = Left $+ "syntax error at " ++ tokenPos ts +++ case ts of+ [] -> []+ [Err _] -> " due to lexer error"+ t:_ -> " before `" ++ (prToken t) ++ "'"++myLexer :: Data.Text.Text -> [Token]+myLexer = tokens++-- Entrypoints++pModule :: [Token] -> Err Language.Rzk.Syntax.Abs.Module+pModule = fmap snd . pModule_internal++pHoleIdent :: [Token] -> Err Language.Rzk.Syntax.Abs.HoleIdent+pHoleIdent = fmap snd . pHoleIdent_internal++pVarIdent :: [Token] -> Err Language.Rzk.Syntax.Abs.VarIdent+pVarIdent = fmap snd . pVarIdent_internal++pListVarIdent :: [Token] -> Err [Language.Rzk.Syntax.Abs.VarIdent]+pListVarIdent = fmap snd . pListVarIdent_internal++pLanguageDecl :: [Token] -> Err Language.Rzk.Syntax.Abs.LanguageDecl+pLanguageDecl = fmap snd . pLanguageDecl_internal++pLanguage :: [Token] -> Err Language.Rzk.Syntax.Abs.Language+pLanguage = fmap snd . pLanguage_internal++pCommand :: [Token] -> Err Language.Rzk.Syntax.Abs.Command+pCommand = fmap snd . pCommand_internal++pListCommand :: [Token] -> Err [Language.Rzk.Syntax.Abs.Command]+pListCommand = fmap snd . pListCommand_internal++pDeclUsedVars :: [Token] -> Err Language.Rzk.Syntax.Abs.DeclUsedVars+pDeclUsedVars = fmap snd . pDeclUsedVars_internal++pSectionName :: [Token] -> Err Language.Rzk.Syntax.Abs.SectionName+pSectionName = fmap snd . pSectionName_internal++pPattern :: [Token] -> Err Language.Rzk.Syntax.Abs.Pattern+pPattern = fmap snd . pPattern_internal++pListPattern :: [Token] -> Err [Language.Rzk.Syntax.Abs.Pattern]+pListPattern = fmap snd . pListPattern_internal++pPattern1 :: [Token] -> Err Language.Rzk.Syntax.Abs.Pattern+pPattern1 = fmap snd . pPattern1_internal++pListPattern1 :: [Token] -> Err [Language.Rzk.Syntax.Abs.Pattern]+pListPattern1 = fmap snd . pListPattern1_internal++pParam :: [Token] -> Err Language.Rzk.Syntax.Abs.Param+pParam = fmap snd . pParam_internal++pListParam :: [Token] -> Err [Language.Rzk.Syntax.Abs.Param]+pListParam = fmap snd . pListParam_internal++pBind :: [Token] -> Err Language.Rzk.Syntax.Abs.Bind+pBind = fmap snd . pBind_internal++pParamDecl :: [Token] -> Err Language.Rzk.Syntax.Abs.ParamDecl+pParamDecl = fmap snd . pParamDecl_internal++pSigmaParam :: [Token] -> Err Language.Rzk.Syntax.Abs.SigmaParam+pSigmaParam = fmap snd . pSigmaParam_internal++pListSigmaParam :: [Token] -> Err [Language.Rzk.Syntax.Abs.SigmaParam]+pListSigmaParam = fmap snd . pListSigmaParam_internal++pRestriction :: [Token] -> Err Language.Rzk.Syntax.Abs.Restriction+pRestriction = fmap snd . pRestriction_internal++pListRestriction :: [Token] -> Err [Language.Rzk.Syntax.Abs.Restriction]+pListRestriction = fmap snd . pListRestriction_internal++pModality :: [Token] -> Err Language.Rzk.Syntax.Abs.Modality+pModality = fmap snd . pModality_internal++pModComp :: [Token] -> Err Language.Rzk.Syntax.Abs.ModComp+pModComp = fmap snd . pModComp_internal++pModalColon :: [Token] -> Err Language.Rzk.Syntax.Abs.ModalColon+pModalColon = fmap snd . pModalColon_internal pTerm7 :: [Token] -> Err Language.Rzk.Syntax.Abs.Term pTerm7 = fmap snd . pTerm7_internal
− src/Language/Rzk/Syntax/Par.y
@@ -1,575 +0,0 @@--- -*- haskell -*- File generated by the BNF Converter (bnfc 2.9.6.2).---- Parser definition for use with Happy-{-{-# OPTIONS_GHC -Wno-incomplete-patterns -Wno-overlapping-patterns #-}-{-# LANGUAGE PatternSynonyms #-}--module Language.Rzk.Syntax.Par- ( happyError- , myLexer- , pModule- , pHoleIdent- , pVarIdent- , pListVarIdent- , pLanguageDecl- , pLanguage- , pCommand- , pListCommand- , pDeclUsedVars- , pSectionName- , pPattern- , pListPattern- , pPattern1- , pListPattern1- , pParam- , pListParam- , pBind- , pParamDecl- , pSigmaParam- , pListSigmaParam- , pRestriction- , pListRestriction- , pModality- , pModComp- , pTerm7- , pTerm5- , pTerm4- , pTerm3- , pTerm2- , pTerm6- , pTerm1- , pTerm- , pListTerm- ) where--import Prelude--import qualified Language.Rzk.Syntax.Abs-import Language.Rzk.Syntax.Lex-import qualified Data.Text--}--%name pModule_internal Module-%name pHoleIdent_internal HoleIdent-%name pVarIdent_internal VarIdent-%name pListVarIdent_internal ListVarIdent-%name pLanguageDecl_internal LanguageDecl-%name pLanguage_internal Language-%name pCommand_internal Command-%name pListCommand_internal ListCommand-%name pDeclUsedVars_internal DeclUsedVars-%name pSectionName_internal SectionName-%name pPattern_internal Pattern-%name pListPattern_internal ListPattern-%name pPattern1_internal Pattern1-%name pListPattern1_internal ListPattern1-%name pParam_internal Param-%name pListParam_internal ListParam-%name pBind_internal Bind-%name pParamDecl_internal ParamDecl-%name pSigmaParam_internal SigmaParam-%name pListSigmaParam_internal ListSigmaParam-%name pRestriction_internal Restriction-%name pListRestriction_internal ListRestriction-%name pModality_internal Modality-%name pModComp_internal ModComp-%name pTerm7_internal Term7-%name pTerm5_internal Term5-%name pTerm4_internal Term4-%name pTerm3_internal Term3-%name pTerm2_internal Term2-%name pTerm6_internal Term6-%name pTerm1_internal Term1-%name pTerm_internal Term-%name pListTerm_internal ListTerm--- no lexer declaration-%monad { Err } { (>>=) } { return }-%tokentype {Token}-%token- '#assume' { PT _ (TS _ 1) }- '#check' { PT _ (TS _ 2) }- '#compute' { PT _ (TS _ 3) }- '#compute-nf' { PT _ (TS _ 4) }- '#compute-whnf' { PT _ (TS _ 5) }- '#def' { PT _ (TS _ 6) }- '#define' { PT _ (TS _ 7) }- '#end' { PT _ (TS _ 8) }- '#lang' { PT _ (TS _ 9) }- '#postulate' { PT _ (TS _ 10) }- '#section' { PT _ (TS _ 11) }- '#set-option' { PT _ (TS _ 12) }- '#unset-option' { PT _ (TS _ 13) }- '#variable' { PT _ (TS _ 14) }- '#variables' { PT _ (TS _ 15) }- '$extract$' { PT _ (TS _ 16) }- '(' { PT _ (TS _ 17) }- ')' { PT _ (TS _ 18) }- '*' { PT _ (TS _ 19) }- '*_1' { PT _ (TS _ 20) }- '*₁' { PT _ (TS _ 21) }- ',' { PT _ (TS _ 22) }- '->' { PT _ (TS _ 23) }- '/' { PT _ (TS _ 24) }- '/\\' { PT _ (TS _ 25) }- '0_2' { PT _ (TS _ 26) }- '0₂' { PT _ (TS _ 27) }- '1' { PT _ (TS _ 28) }- '1_2' { PT _ (TS _ 29) }- '1₂' { PT _ (TS _ 30) }- '2' { PT _ (TS _ 31) }- ':' { PT _ (TS _ 32) }- ':=' { PT _ (TS _ 33) }- ';' { PT _ (TS _ 34) }- '<' { PT _ (TS _ 35) }- '<=' { PT _ (TS _ 36) }- '<|' { PT _ (TS _ 37) }- '=' { PT _ (TS _ 38) }- '===' { PT _ (TS _ 39) }- '=_{' { PT _ (TS _ 40) }- '>' { PT _ (TS _ 41) }- 'BOT' { PT _ (TS _ 42) }- 'CUBE' { PT _ (TS _ 43) }- 'Sigma' { PT _ (TS _ 44) }- 'TOP' { PT _ (TS _ 45) }- 'TOPE' { PT _ (TS _ 46) }- 'U' { PT _ (TS _ 47) }- 'Unit' { PT _ (TS _ 48) }- '[' { PT _ (TS _ 49) }- '\\' { PT _ (TS _ 50) }- '\\/' { PT _ (TS _ 51) }- ']' { PT _ (TS _ 52) }- '_#' { PT _ (TS _ 53) }- '_b' { PT _ (TS _ 54) }- '_id' { PT _ (TS _ 55) }- '_op' { PT _ (TS _ 56) }- 'as' { PT _ (TS _ 57) }- 'first' { PT _ (TS _ 58) }- 'flip_op' { PT _ (TS _ 59) }- 'flipᵒᵖ' { PT _ (TS _ 60) }- 'idJ' { PT _ (TS _ 61) }- 'in' { PT _ (TS _ 62) }- 'inv_op' { PT _ (TS _ 63) }- 'invᵒᵖ' { PT _ (TS _ 64) }- 'let' { PT _ (TS _ 65) }- 'mod' { PT _ (TS _ 66) }- 'recBOT' { PT _ (TS _ 67) }- 'recOR' { PT _ (TS _ 68) }- 'refl' { PT _ (TS _ 69) }- 'refl_{' { PT _ (TS _ 70) }- 'rzk-1' { PT _ (TS _ 71) }- 'second' { PT _ (TS _ 72) }- 'unflip_op' { PT _ (TS _ 73) }- 'unflipᵒᵖ' { PT _ (TS _ 74) }- 'uninv_op' { PT _ (TS _ 75) }- 'uninvᵒᵖ' { PT _ (TS _ 76) }- 'unit' { PT _ (TS _ 77) }- 'uses' { PT _ (TS _ 78) }- '{' { PT _ (TS _ 79) }- '|' { PT _ (TS _ 80) }- '|->' { PT _ (TS _ 81) }- '|>' { PT _ (TS _ 82) }- '}' { PT _ (TS _ 83) }- '×' { PT _ (TS _ 84) }- 'Σ' { PT _ (TS _ 85) }- 'π₁' { PT _ (TS _ 86) }- 'π₂' { PT _ (TS _ 87) }- 'ᵒᵖ' { PT _ (TS _ 88) }- '→' { PT _ (TS _ 89) }- '↦' { PT _ (TS _ 90) }- '∑' { PT _ (TS _ 91) }- '∧' { PT _ (TS _ 92) }- '∨' { PT _ (TS _ 93) }- '≡' { PT _ (TS _ 94) }- '≤' { PT _ (TS _ 95) }- '⊤' { PT _ (TS _ 96) }- '⊥' { PT _ (TS _ 97) }- '♭' { PT _ (TS _ 98) }- '♯' { PT _ (TS _ 99) }- L_quoted { PT _ (TL _) }- L_VarIdentToken { PT _ (T_VarIdentToken _) }- L_HoleIdentToken { PT _ (T_HoleIdentToken _) }--%%--String :: { (Language.Rzk.Syntax.Abs.BNFC'Position, String) }-String : L_quoted { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), (Data.Text.unpack ((\(PT _ (TL s)) -> s) $1))) }--VarIdentToken :: { (Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.VarIdentToken) }-VarIdentToken : L_VarIdentToken { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.VarIdentToken (tokenText $1)) }--HoleIdentToken :: { (Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.HoleIdentToken) }-HoleIdentToken : L_HoleIdentToken { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.HoleIdentToken (tokenText $1)) }--Module :: { (Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Module) }-Module- : LanguageDecl ListCommand { (fst $1, Language.Rzk.Syntax.Abs.Module (fst $1) (snd $1) (snd $2)) }--HoleIdent :: { (Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.HoleIdent) }-HoleIdent- : HoleIdentToken { (fst $1, Language.Rzk.Syntax.Abs.HoleIdent (fst $1) (snd $1)) }--VarIdent :: { (Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.VarIdent) }-VarIdent- : VarIdentToken { (fst $1, Language.Rzk.Syntax.Abs.VarIdent (fst $1) (snd $1)) }--ListVarIdent :: { (Language.Rzk.Syntax.Abs.BNFC'Position, [Language.Rzk.Syntax.Abs.VarIdent]) }-ListVarIdent- : VarIdent { (fst $1, (:[]) (snd $1)) }- | VarIdent ListVarIdent { (fst $1, (:) (snd $1) (snd $2)) }--LanguageDecl :: { (Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.LanguageDecl) }-LanguageDecl- : '#lang' Language ';' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.LanguageDecl (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2)) }--Language :: { (Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Language) }-Language- : 'rzk-1' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.Rzk1 (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1))) }--Command :: { (Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Command) }-Command- : '#set-option' String '=' String { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.CommandSetOption (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2) (snd $4)) }- | '#unset-option' String { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.CommandUnsetOption (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2)) }- | '#check' Term ':' Term { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.CommandCheck (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2) (snd $4)) }- | '#compute' Term { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.CommandCompute (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2)) }- | '#compute-whnf' Term { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.CommandComputeWHNF (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2)) }- | '#compute-nf' Term { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.CommandComputeNF (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2)) }- | '#postulate' VarIdent DeclUsedVars ListParam ':' Term { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.CommandPostulate (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2) (snd $3) (snd $4) (snd $6)) }- | '#postulate' VarIdent DeclUsedVars ':' Term { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.commandPostulateNoParams (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2) (snd $3) (snd $5)) }- | '#assume' ListVarIdent ':' Term { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.CommandAssume (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2) (snd $4)) }- | '#variable' VarIdent ':' Term { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.commandVariable (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2) (snd $4)) }- | '#variables' ListVarIdent ':' Term { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.commandVariables (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2) (snd $4)) }- | '#section' SectionName { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.CommandSection (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2)) }- | '#end' SectionName { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.CommandSectionEnd (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2)) }- | '#define' VarIdent DeclUsedVars ListParam ':' Term ':=' Term { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.CommandDefine (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2) (snd $3) (snd $4) (snd $6) (snd $8)) }- | '#define' VarIdent DeclUsedVars ':' Term ':=' Term { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.commandDefineNoParams (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2) (snd $3) (snd $5) (snd $7)) }- | '#def' VarIdent DeclUsedVars ListParam ':' Term ':=' Term { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.commandDef (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2) (snd $3) (snd $4) (snd $6) (snd $8)) }- | '#def' VarIdent DeclUsedVars ':' Term ':=' Term { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.commandDefNoParams (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2) (snd $3) (snd $5) (snd $7)) }--ListCommand :: { (Language.Rzk.Syntax.Abs.BNFC'Position, [Language.Rzk.Syntax.Abs.Command]) }-ListCommand- : {- empty -} { (Language.Rzk.Syntax.Abs.BNFC'NoPosition, []) }- | Command ';' ListCommand { (fst $1, (:) (snd $1) (snd $3)) }--DeclUsedVars :: { (Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.DeclUsedVars) }-DeclUsedVars- : 'uses' '(' ListVarIdent ')' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.DeclUsedVars (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $3)) }- | {- empty -} { (Language.Rzk.Syntax.Abs.BNFC'NoPosition, Language.Rzk.Syntax.Abs.noDeclUsedVars Language.Rzk.Syntax.Abs.BNFC'NoPosition) }--SectionName :: { (Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.SectionName) }-SectionName- : {- empty -} { (Language.Rzk.Syntax.Abs.BNFC'NoPosition, Language.Rzk.Syntax.Abs.NoSectionName Language.Rzk.Syntax.Abs.BNFC'NoPosition) }- | VarIdent { (fst $1, Language.Rzk.Syntax.Abs.SomeSectionName (fst $1) (snd $1)) }--Pattern :: { (Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Pattern) }-Pattern- : 'unit' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.PatternUnit (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1))) }- | VarIdent { (fst $1, Language.Rzk.Syntax.Abs.PatternVar (fst $1) (snd $1)) }- | '(' Pattern ',' Pattern ')' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.PatternPair (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2) (snd $4)) }- | '(' Pattern ',' Pattern ',' ListPattern1 ')' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.PatternTuple (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2) (snd $4) (snd $6)) }--ListPattern :: { (Language.Rzk.Syntax.Abs.BNFC'Position, [Language.Rzk.Syntax.Abs.Pattern]) }-ListPattern- : Pattern { (fst $1, (:[]) (snd $1)) }- | Pattern ListPattern { (fst $1, (:) (snd $1) (snd $2)) }--Pattern1 :: { (Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Pattern) }-Pattern1 : Pattern { (fst $1, (snd $1)) }--ListPattern1 :: { (Language.Rzk.Syntax.Abs.BNFC'Position, [Language.Rzk.Syntax.Abs.Pattern]) }-ListPattern1- : Pattern1 { (fst $1, (:[]) (snd $1)) }- | Pattern1 ',' ListPattern1 { (fst $1, (:) (snd $1) (snd $3)) }--Param :: { (Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Param) }-Param- : Pattern { (fst $1, Language.Rzk.Syntax.Abs.ParamPattern (fst $1) (snd $1)) }- | '(' ListPattern ':' Term ')' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.ParamPatternType (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2) (snd $4)) }- | '(' ListPattern ':' Term '|' Term ')' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.ParamPatternShape (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2) (snd $4) (snd $6)) }- | '{' Pattern ':' Term '|' Term '}' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.ParamPatternShapeDeprecated (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2) (snd $4) (snd $6)) }- | '(' ListPattern ':' Modality Term ')' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.ParamPatternModalType (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2) (snd $4) (snd $5)) }--ListParam :: { (Language.Rzk.Syntax.Abs.BNFC'Position, [Language.Rzk.Syntax.Abs.Param]) }-ListParam- : Param { (fst $1, (:[]) (snd $1)) }- | Param ListParam { (fst $1, (:) (snd $1) (snd $2)) }--Bind :: { (Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Bind) }-Bind- : Pattern { (fst $1, Language.Rzk.Syntax.Abs.BindPattern (fst $1) (snd $1)) }- | Pattern ':' Term { (fst $1, Language.Rzk.Syntax.Abs.BindPatternType (fst $1) (snd $1) (snd $3)) }--ParamDecl :: { (Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.ParamDecl) }-ParamDecl- : Term6 { (fst $1, Language.Rzk.Syntax.Abs.ParamType (fst $1) (snd $1)) }- | '(' Term ':' Term ')' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.ParamTermType (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2) (snd $4)) }- | '(' Term ':' Term '|' Term ')' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.ParamTermShape (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2) (snd $4) (snd $6)) }- | '{' Pattern ':' Term '}' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.ParamTermTypeDeprecated (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2) (snd $4)) }- | '{' '(' Pattern ':' Term ')' '|' Term '}' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.ParamVarShapeDeprecated (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $3) (snd $5) (snd $8)) }- | '{' Pattern ':' Term '|' Term '}' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.paramVarShapeDeprecated (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2) (snd $4) (snd $6)) }- | '(' Term ':' Modality Term ')' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.ParamTermModalType (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2) (snd $4) (snd $5)) }--SigmaParam :: { (Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.SigmaParam) }-SigmaParam- : Pattern ':' Term { (fst $1, Language.Rzk.Syntax.Abs.SigmaParam (fst $1) (snd $1) (snd $3)) }- | Pattern ':' Modality Term { (fst $1, Language.Rzk.Syntax.Abs.SigmaParamModal (fst $1) (snd $1) (snd $3) (snd $4)) }--ListSigmaParam :: { (Language.Rzk.Syntax.Abs.BNFC'Position, [Language.Rzk.Syntax.Abs.SigmaParam]) }-ListSigmaParam- : SigmaParam { (fst $1, (:[]) (snd $1)) }- | SigmaParam ',' ListSigmaParam { (fst $1, (:) (snd $1) (snd $3)) }--Restriction :: { (Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Restriction) }-Restriction- : Term '↦' Term { (fst $1, Language.Rzk.Syntax.Abs.Restriction (fst $1) (snd $1) (snd $3)) }- | Term '|->' Term { (fst $1, Language.Rzk.Syntax.Abs.ASCII_Restriction (fst $1) (snd $1) (snd $3)) }--ListRestriction :: { (Language.Rzk.Syntax.Abs.BNFC'Position, [Language.Rzk.Syntax.Abs.Restriction]) }-ListRestriction- : Restriction { (fst $1, (:[]) (snd $1)) }- | Restriction ',' ListRestriction { (fst $1, (:) (snd $1) (snd $3)) }--Modality :: { (Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Modality) }-Modality- : '♭' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.Flat (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1))) }- | '_b' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.ASCII_Flat (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1))) }- | '♯' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.Sharp (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1))) }- | '_#' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.ASCII_Sharp (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1))) }- | 'ᵒᵖ' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.Op (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1))) }- | '_op' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.ASCII_Op (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1))) }- | '_id' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.Id (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1))) }--ModComp :: { (Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.ModComp) }-ModComp- : Modality { (fst $1, Language.Rzk.Syntax.Abs.Single (fst $1) (snd $1)) }- | Modality '/' Modality { (fst $1, Language.Rzk.Syntax.Abs.Comp (fst $1) (snd $1) (snd $3)) }--Term7 :: { (Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Term) }-Term7- : 'U' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.Universe (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1))) }- | 'CUBE' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.UniverseCube (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1))) }- | 'TOPE' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.UniverseTope (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1))) }- | '1' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.CubeUnit (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1))) }- | '*₁' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.CubeUnitStar (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1))) }- | '2' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.Cube2 (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1))) }- | '0₂' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.Cube2_0 (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1))) }- | '1₂' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.Cube2_1 (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1))) }- | '⊤' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.TopeTop (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1))) }- | '⊥' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.TopeBottom (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1))) }- | 'recBOT' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.RecBottom (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1))) }- | 'recOR' '(' ListRestriction ')' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.RecOr (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $3)) }- | 'recOR' '(' Term ',' Term ',' Term ',' Term ')' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.RecOrDeprecated (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $3) (snd $5) (snd $7) (snd $9)) }- | 'Unit' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.TypeUnit (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1))) }- | '<' ParamDecl '→' Term '>' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.TypeExtensionDeprecated (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2) (snd $4)) }- | '(' Term ',' Term ')' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.Pair (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2) (snd $4)) }- | '(' Term ',' Term ',' ListTerm ')' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.Tuple (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2) (snd $4) (snd $6)) }- | 'mod' Modality Term7 { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.ModApp (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2) (snd $3)) }- | '<|' Modality '|' Term '|>' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.ModType (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2) (snd $4)) }- | 'unit' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.Unit (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1))) }- | 'refl' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.Refl (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1))) }- | 'refl_{' Term '}' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.ReflTerm (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2)) }- | 'refl_{' Term ':' Term '}' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.ReflTermType (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2) (snd $4)) }- | 'idJ' '(' Term ',' Term ',' Term ',' Term ',' Term ',' Term ')' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.IdJ (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $3) (snd $5) (snd $7) (snd $9) (snd $11) (snd $13)) }- | HoleIdent { (fst $1, Language.Rzk.Syntax.Abs.Hole (fst $1) (snd $1)) }- | VarIdent { (fst $1, Language.Rzk.Syntax.Abs.Var (fst $1) (snd $1)) }- | '(' Term ')' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), (snd $2)) }- | '*_1' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.ASCII_CubeUnitStar (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1))) }- | '0_2' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.ASCII_Cube2_0 (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1))) }- | '1_2' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.ASCII_Cube2_1 (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1))) }- | 'TOP' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.ASCII_TopeTop (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1))) }- | 'BOT' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.ASCII_TopeBottom (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1))) }- | '<' ParamDecl '->' Term '>' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.ASCII_TypeExtensionDeprecated (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2) (snd $4)) }--Term5 :: { (Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Term) }-Term5- : Term5 '×' Term6 { (fst $1, Language.Rzk.Syntax.Abs.CubeProduct (fst $1) (snd $1) (snd $3)) }- | Term6 { (fst $1, (snd $1)) }- | Term5 '*' Term6 { (fst $1, Language.Rzk.Syntax.Abs.ascii_CubeProduct (fst $1) (snd $1) (snd $3)) }--Term4 :: { (Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Term) }-Term4- : Term5 '≡' Term5 { (fst $1, Language.Rzk.Syntax.Abs.TopeEQ (fst $1) (snd $1) (snd $3)) }- | Term5 '≤' Term5 { (fst $1, Language.Rzk.Syntax.Abs.TopeLEQ (fst $1) (snd $1) (snd $3)) }- | Term5 { (fst $1, (snd $1)) }- | Term5 '===' Term5 { (fst $1, Language.Rzk.Syntax.Abs.ASCII_TopeEQ (fst $1) (snd $1) (snd $3)) }- | Term5 '<=' Term5 { (fst $1, Language.Rzk.Syntax.Abs.ASCII_TopeLEQ (fst $1) (snd $1) (snd $3)) }--Term3 :: { (Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Term) }-Term3- : Term4 '∧' Term3 { (fst $1, Language.Rzk.Syntax.Abs.TopeAnd (fst $1) (snd $1) (snd $3)) }- | Term4 { (fst $1, (snd $1)) }- | Term4 '/\\' Term3 { (fst $1, Language.Rzk.Syntax.Abs.ASCII_TopeAnd (fst $1) (snd $1) (snd $3)) }--Term2 :: { (Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Term) }-Term2- : Term3 '∨' Term2 { (fst $1, Language.Rzk.Syntax.Abs.TopeOr (fst $1) (snd $1) (snd $3)) }- | Term3 { (fst $1, (snd $1)) }- | Term3 '\\/' Term2 { (fst $1, Language.Rzk.Syntax.Abs.ASCII_TopeOr (fst $1) (snd $1) (snd $3)) }--Term6 :: { (Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Term) }-Term6- : 'invᵒᵖ' Term7 { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.TopeInv (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2)) }- | 'inv_op' Term7 { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.ascii_TopeInv (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2)) }- | 'uninvᵒᵖ' Term7 { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.TopeUninv (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2)) }- | 'uninv_op' Term7 { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.ascii_TopeUninv (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2)) }- | 'flipᵒᵖ' Term7 { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.CubeFlip (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2)) }- | 'flip_op' Term7 { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.ascii_CubeFlip (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2)) }- | 'unflipᵒᵖ' Term7 { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.CubeUnflip (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2)) }- | 'unflip_op' Term7 { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.ascii_CubeUnflip (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2)) }- | Term6 '[' ListRestriction ']' { (fst $1, Language.Rzk.Syntax.Abs.TypeRestricted (fst $1) (snd $1) (snd $3)) }- | Term6 Term7 { (fst $1, Language.Rzk.Syntax.Abs.App (fst $1) (snd $1) (snd $2)) }- | '$extract$' ModComp Term7 { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.ModExtract (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2) (snd $3)) }- | 'π₁' Term7 { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.First (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2)) }- | 'π₂' Term7 { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.Second (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2)) }- | Term7 { (fst $1, (snd $1)) }- | 'first' Term7 { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.ASCII_First (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2)) }- | 'second' Term7 { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.ASCII_Second (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2)) }--Term1 :: { (Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Term) }-Term1- : ParamDecl '→' Term1 { (fst $1, Language.Rzk.Syntax.Abs.TypeFun (fst $1) (snd $1) (snd $3)) }- | 'Σ' '(' Pattern ':' Term ')' ',' Term1 { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.TypeSigma (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $3) (snd $5) (snd $8)) }- | 'Σ' '(' Pattern ':' Modality Term ')' ',' Term1 { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.TypeSigmaModal (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $3) (snd $5) (snd $6) (snd $9)) }- | 'Σ' '(' SigmaParam ',' ListSigmaParam ')' ',' Term1 { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.TypeSigmaTuple (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $3) (snd $5) (snd $8)) }- | Term2 '=_{' Term '}' Term2 { (fst $1, Language.Rzk.Syntax.Abs.TypeId (fst $1) (snd $1) (snd $3) (snd $5)) }- | Term2 '=' Term2 { (fst $1, Language.Rzk.Syntax.Abs.TypeIdSimple (fst $1) (snd $1) (snd $3)) }- | 'let' Bind ':=' Term 'in' Term { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.Let (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2) (snd $4) (snd $6)) }- | '\\' ListParam '→' Term1 { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.Lambda (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2) (snd $4)) }- | 'let' 'mod' ModComp Bind ':=' Term 'in' Term { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.LetMod (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $3) (snd $4) (snd $6) (snd $8)) }- | Term2 { (fst $1, (snd $1)) }- | ParamDecl '->' Term1 { (fst $1, Language.Rzk.Syntax.Abs.ASCII_TypeFun (fst $1) (snd $1) (snd $3)) }- | 'Sigma' '(' Pattern ':' Term ')' ',' Term1 { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.ASCII_TypeSigma (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $3) (snd $5) (snd $8)) }- | 'Sigma' '(' Pattern ':' Modality Term ')' ',' Term1 { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.ASCII_TypeSigmaModal (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $3) (snd $5) (snd $6) (snd $9)) }- | 'Sigma' '(' SigmaParam ',' ListSigmaParam ')' ',' Term1 { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.ASCII_TypeSigmaTuple (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $3) (snd $5) (snd $8)) }- | '\\' ListParam '->' Term1 { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.ASCII_Lambda (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2) (snd $4)) }- | '∑' '(' Pattern ':' Term ')' ',' Term1 { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.unicode_TypeSigmaAlt (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $3) (snd $5) (snd $8)) }- | '∑' '(' SigmaParam ',' ListSigmaParam ')' ',' Term1 { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.unicode_TypeSigmaTupleAlt (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $3) (snd $5) (snd $8)) }--Term :: { (Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Term) }-Term- : Term2 'as' Term1 { (fst $1, Language.Rzk.Syntax.Abs.TypeAsc (fst $1) (snd $1) (snd $3)) }- | Term1 { (fst $1, (snd $1)) }--ListTerm :: { (Language.Rzk.Syntax.Abs.BNFC'Position, [Language.Rzk.Syntax.Abs.Term]) }-ListTerm- : Term { (fst $1, (:[]) (snd $1)) }- | Term ',' ListTerm { (fst $1, (:) (snd $1) (snd $3)) }--{--type Err = Either String--happyError :: [Token] -> Err a-happyError ts = Left $- "syntax error at " ++ tokenPos ts ++- case ts of- [] -> []- [Err _] -> " due to lexer error"- t:_ -> " before `" ++ (prToken t) ++ "'"--myLexer :: Data.Text.Text -> [Token]-myLexer = tokens---- Entrypoints--pModule :: [Token] -> Err Language.Rzk.Syntax.Abs.Module-pModule = fmap snd . pModule_internal--pHoleIdent :: [Token] -> Err Language.Rzk.Syntax.Abs.HoleIdent-pHoleIdent = fmap snd . pHoleIdent_internal--pVarIdent :: [Token] -> Err Language.Rzk.Syntax.Abs.VarIdent-pVarIdent = fmap snd . pVarIdent_internal--pListVarIdent :: [Token] -> Err [Language.Rzk.Syntax.Abs.VarIdent]-pListVarIdent = fmap snd . pListVarIdent_internal--pLanguageDecl :: [Token] -> Err Language.Rzk.Syntax.Abs.LanguageDecl-pLanguageDecl = fmap snd . pLanguageDecl_internal--pLanguage :: [Token] -> Err Language.Rzk.Syntax.Abs.Language-pLanguage = fmap snd . pLanguage_internal--pCommand :: [Token] -> Err Language.Rzk.Syntax.Abs.Command-pCommand = fmap snd . pCommand_internal--pListCommand :: [Token] -> Err [Language.Rzk.Syntax.Abs.Command]-pListCommand = fmap snd . pListCommand_internal--pDeclUsedVars :: [Token] -> Err Language.Rzk.Syntax.Abs.DeclUsedVars-pDeclUsedVars = fmap snd . pDeclUsedVars_internal--pSectionName :: [Token] -> Err Language.Rzk.Syntax.Abs.SectionName-pSectionName = fmap snd . pSectionName_internal--pPattern :: [Token] -> Err Language.Rzk.Syntax.Abs.Pattern-pPattern = fmap snd . pPattern_internal--pListPattern :: [Token] -> Err [Language.Rzk.Syntax.Abs.Pattern]-pListPattern = fmap snd . pListPattern_internal--pPattern1 :: [Token] -> Err Language.Rzk.Syntax.Abs.Pattern-pPattern1 = fmap snd . pPattern1_internal--pListPattern1 :: [Token] -> Err [Language.Rzk.Syntax.Abs.Pattern]-pListPattern1 = fmap snd . pListPattern1_internal--pParam :: [Token] -> Err Language.Rzk.Syntax.Abs.Param-pParam = fmap snd . pParam_internal--pListParam :: [Token] -> Err [Language.Rzk.Syntax.Abs.Param]-pListParam = fmap snd . pListParam_internal--pBind :: [Token] -> Err Language.Rzk.Syntax.Abs.Bind-pBind = fmap snd . pBind_internal--pParamDecl :: [Token] -> Err Language.Rzk.Syntax.Abs.ParamDecl-pParamDecl = fmap snd . pParamDecl_internal--pSigmaParam :: [Token] -> Err Language.Rzk.Syntax.Abs.SigmaParam-pSigmaParam = fmap snd . pSigmaParam_internal--pListSigmaParam :: [Token] -> Err [Language.Rzk.Syntax.Abs.SigmaParam]-pListSigmaParam = fmap snd . pListSigmaParam_internal--pRestriction :: [Token] -> Err Language.Rzk.Syntax.Abs.Restriction-pRestriction = fmap snd . pRestriction_internal--pListRestriction :: [Token] -> Err [Language.Rzk.Syntax.Abs.Restriction]-pListRestriction = fmap snd . pListRestriction_internal--pModality :: [Token] -> Err Language.Rzk.Syntax.Abs.Modality-pModality = fmap snd . pModality_internal--pModComp :: [Token] -> Err Language.Rzk.Syntax.Abs.ModComp-pModComp = fmap snd . pModComp_internal--pTerm7 :: [Token] -> Err Language.Rzk.Syntax.Abs.Term-pTerm7 = fmap snd . pTerm7_internal--pTerm5 :: [Token] -> Err Language.Rzk.Syntax.Abs.Term-pTerm5 = fmap snd . pTerm5_internal--pTerm4 :: [Token] -> Err Language.Rzk.Syntax.Abs.Term-pTerm4 = fmap snd . pTerm4_internal--pTerm3 :: [Token] -> Err Language.Rzk.Syntax.Abs.Term-pTerm3 = fmap snd . pTerm3_internal--pTerm2 :: [Token] -> Err Language.Rzk.Syntax.Abs.Term-pTerm2 = fmap snd . pTerm2_internal--pTerm6 :: [Token] -> Err Language.Rzk.Syntax.Abs.Term-pTerm6 = fmap snd . pTerm6_internal--pTerm1 :: [Token] -> Err Language.Rzk.Syntax.Abs.Term-pTerm1 = fmap snd . pTerm1_internal--pTerm :: [Token] -> Err Language.Rzk.Syntax.Abs.Term-pTerm = fmap snd . pTerm_internal--pListTerm :: [Token] -> Err [Language.Rzk.Syntax.Abs.Term]-pListTerm = fmap snd . pListTerm_internal-}-
src/Language/Rzk/Syntax/Print.hs view
@@ -1,4 +1,4 @@--- File generated by the BNF Converter (bnfc 2.9.6.2).+-- File generated by the BNF Converter (bnfc 2.9.6.3). {-# LANGUAGE CPP #-} {-# LANGUAGE FlexibleInstances #-}@@ -211,7 +211,8 @@ Language.Rzk.Syntax.Abs.ParamPatternType _ patterns term -> prPrec i 0 (concatD [doc (showString "("), prt 0 patterns, doc (showString ":"), prt 0 term, doc (showString ")")]) Language.Rzk.Syntax.Abs.ParamPatternShape _ patterns term1 term2 -> prPrec i 0 (concatD [doc (showString "("), prt 0 patterns, doc (showString ":"), prt 0 term1, doc (showString "|"), prt 0 term2, doc (showString ")")]) Language.Rzk.Syntax.Abs.ParamPatternShapeDeprecated _ pattern_ term1 term2 -> prPrec i 0 (concatD [doc (showString "{"), prt 0 pattern_, doc (showString ":"), prt 0 term1, doc (showString "|"), prt 0 term2, doc (showString "}")])- Language.Rzk.Syntax.Abs.ParamPatternModalType _ patterns modality term -> prPrec i 0 (concatD [doc (showString "("), prt 0 patterns, doc (showString ":"), prt 0 modality, prt 0 term, doc (showString ")")])+ Language.Rzk.Syntax.Abs.ParamPatternModalType _ patterns modalcolon term -> prPrec i 0 (concatD [doc (showString "("), prt 0 patterns, prt 0 modalcolon, prt 0 term, doc (showString ")")])+ Language.Rzk.Syntax.Abs.ParamPatternModalShape _ patterns modalcolon term1 term2 -> prPrec i 0 (concatD [doc (showString "("), prt 0 patterns, prt 0 modalcolon, prt 0 term1, doc (showString "|"), prt 0 term2, doc (showString ")")]) instance Print [Language.Rzk.Syntax.Abs.Param' a] where prt _ [] = concatD []@@ -230,12 +231,13 @@ Language.Rzk.Syntax.Abs.ParamTermShape _ term1 term2 term3 -> prPrec i 0 (concatD [doc (showString "("), prt 0 term1, doc (showString ":"), prt 0 term2, doc (showString "|"), prt 0 term3, doc (showString ")")]) Language.Rzk.Syntax.Abs.ParamTermTypeDeprecated _ pattern_ term -> prPrec i 0 (concatD [doc (showString "{"), prt 0 pattern_, doc (showString ":"), prt 0 term, doc (showString "}")]) Language.Rzk.Syntax.Abs.ParamVarShapeDeprecated _ pattern_ term1 term2 -> prPrec i 0 (concatD [doc (showString "{"), doc (showString "("), prt 0 pattern_, doc (showString ":"), prt 0 term1, doc (showString ")"), doc (showString "|"), prt 0 term2, doc (showString "}")])- Language.Rzk.Syntax.Abs.ParamTermModalType _ term1 modality term2 -> prPrec i 0 (concatD [doc (showString "("), prt 0 term1, doc (showString ":"), prt 0 modality, prt 0 term2, doc (showString ")")])+ Language.Rzk.Syntax.Abs.ParamTermModalType _ term1 modalcolon term2 -> prPrec i 0 (concatD [doc (showString "("), prt 0 term1, prt 0 modalcolon, prt 0 term2, doc (showString ")")])+ Language.Rzk.Syntax.Abs.ParamTermModalShape _ term1 modalcolon term2 term3 -> prPrec i 0 (concatD [doc (showString "("), prt 0 term1, prt 0 modalcolon, prt 0 term2, doc (showString "|"), prt 0 term3, doc (showString ")")]) instance Print (Language.Rzk.Syntax.Abs.SigmaParam' a) where prt i = \case Language.Rzk.Syntax.Abs.SigmaParam _ pattern_ term -> prPrec i 0 (concatD [prt 0 pattern_, doc (showString ":"), prt 0 term])- Language.Rzk.Syntax.Abs.SigmaParamModal _ pattern_ modality term -> prPrec i 0 (concatD [prt 0 pattern_, doc (showString ":"), prt 0 modality, prt 0 term])+ Language.Rzk.Syntax.Abs.SigmaParamModal _ pattern_ modalcolon term -> prPrec i 0 (concatD [prt 0 pattern_, prt 0 modalcolon, prt 0 term]) instance Print [Language.Rzk.Syntax.Abs.SigmaParam' a] where prt _ [] = concatD []@@ -267,6 +269,16 @@ Language.Rzk.Syntax.Abs.Single _ modality -> prPrec i 0 (concatD [prt 0 modality]) Language.Rzk.Syntax.Abs.Comp _ modality1 modality2 -> prPrec i 0 (concatD [prt 0 modality1, doc (showString "/"), prt 0 modality2]) +instance Print (Language.Rzk.Syntax.Abs.ModalColon' a) where+ prt i = \case+ Language.Rzk.Syntax.Abs.ModalColonFlat _ -> prPrec i 0 (concatD [doc (showString ":\9837")])+ Language.Rzk.Syntax.Abs.ModalColonSharp _ -> prPrec i 0 (concatD [doc (showString ":\9839")])+ Language.Rzk.Syntax.Abs.ModalColonOp _ -> prPrec i 0 (concatD [doc (showString ":\7506\7510")])+ Language.Rzk.Syntax.Abs.ModalColonId _ -> prPrec i 0 (concatD [doc (showString ":_id")])+ Language.Rzk.Syntax.Abs.ASCII_ModalColonFlat _ -> prPrec i 0 (concatD [doc (showString ":_b")])+ Language.Rzk.Syntax.Abs.ASCII_ModalColonSharp _ -> prPrec i 0 (concatD [doc (showString ":_#")])+ Language.Rzk.Syntax.Abs.ASCII_ModalColonOp _ -> prPrec i 0 (concatD [doc (showString ":_op")])+ instance Print (Language.Rzk.Syntax.Abs.Term' a) where prt i = \case Language.Rzk.Syntax.Abs.Universe _ -> prPrec i 7 (concatD [doc (showString "U")])@@ -277,6 +289,9 @@ Language.Rzk.Syntax.Abs.Cube2 _ -> prPrec i 7 (concatD [doc (showString "2")]) Language.Rzk.Syntax.Abs.Cube2_0 _ -> prPrec i 7 (concatD [doc (showString "0\8322")]) Language.Rzk.Syntax.Abs.Cube2_1 _ -> prPrec i 7 (concatD [doc (showString "1\8322")])+ Language.Rzk.Syntax.Abs.CubeI _ -> prPrec i 7 (concatD [doc (showString "\120128")])+ Language.Rzk.Syntax.Abs.CubeI_0 _ -> prPrec i 7 (concatD [doc (showString "0\7522")])+ Language.Rzk.Syntax.Abs.CubeI_1 _ -> prPrec i 7 (concatD [doc (showString "1\7522")]) Language.Rzk.Syntax.Abs.CubeProduct _ term1 term2 -> prPrec i 5 (concatD [prt 5 term1, doc (showString "\215"), prt 6 term2]) Language.Rzk.Syntax.Abs.TopeTop _ -> prPrec i 7 (concatD [doc (showString "\8868")]) Language.Rzk.Syntax.Abs.TopeBottom _ -> prPrec i 7 (concatD [doc (showString "\8869")])@@ -293,7 +308,7 @@ Language.Rzk.Syntax.Abs.RecOrDeprecated _ term1 term2 term3 term4 -> prPrec i 7 (concatD [doc (showString "recOR"), doc (showString "("), prt 0 term1, doc (showString ","), prt 0 term2, doc (showString ","), prt 0 term3, doc (showString ","), prt 0 term4, doc (showString ")")]) Language.Rzk.Syntax.Abs.TypeFun _ paramdecl term -> prPrec i 1 (concatD [prt 0 paramdecl, doc (showString "\8594"), prt 1 term]) Language.Rzk.Syntax.Abs.TypeSigma _ pattern_ term1 term2 -> prPrec i 1 (concatD [doc (showString "\931"), doc (showString "("), prt 0 pattern_, doc (showString ":"), prt 0 term1, doc (showString ")"), doc (showString ","), prt 1 term2])- Language.Rzk.Syntax.Abs.TypeSigmaModal _ pattern_ modality term1 term2 -> prPrec i 1 (concatD [doc (showString "\931"), doc (showString "("), prt 0 pattern_, doc (showString ":"), prt 0 modality, prt 0 term1, doc (showString ")"), doc (showString ","), prt 1 term2])+ Language.Rzk.Syntax.Abs.TypeSigmaModal _ pattern_ modalcolon term1 term2 -> prPrec i 1 (concatD [doc (showString "\931"), doc (showString "("), prt 0 pattern_, prt 0 modalcolon, prt 0 term1, doc (showString ")"), doc (showString ","), prt 1 term2]) Language.Rzk.Syntax.Abs.TypeSigmaTuple _ sigmaparam sigmaparams term -> prPrec i 1 (concatD [doc (showString "\931"), doc (showString "("), prt 0 sigmaparam, doc (showString ","), prt 0 sigmaparams, doc (showString ")"), doc (showString ","), prt 1 term]) Language.Rzk.Syntax.Abs.TypeUnit _ -> prPrec i 7 (concatD [doc (showString "Unit")]) Language.Rzk.Syntax.Abs.TypeId _ term1 term2 term3 -> prPrec i 1 (concatD [prt 2 term1, doc (showString "=_{"), prt 0 term2, doc (showString "}"), prt 2 term3])@@ -306,7 +321,7 @@ Language.Rzk.Syntax.Abs.Pair _ term1 term2 -> prPrec i 7 (concatD [doc (showString "("), prt 0 term1, doc (showString ","), prt 0 term2, doc (showString ")")]) Language.Rzk.Syntax.Abs.Tuple _ term1 term2 terms -> prPrec i 7 (concatD [doc (showString "("), prt 0 term1, doc (showString ","), prt 0 term2, doc (showString ","), prt 0 terms, doc (showString ")")]) Language.Rzk.Syntax.Abs.ModApp _ modality term -> prPrec i 7 (concatD [doc (showString "mod"), prt 0 modality, prt 7 term])- Language.Rzk.Syntax.Abs.ModType _ modality term -> prPrec i 7 (concatD [doc (showString "<|"), prt 0 modality, doc (showString "|"), prt 0 term, doc (showString "|>")])+ Language.Rzk.Syntax.Abs.ModType _ modality term -> prPrec i 7 (concatD [prt 0 modality, prt 7 term]) Language.Rzk.Syntax.Abs.ModExtract _ modcomp term -> prPrec i 6 (concatD [doc (showString "$extract$"), prt 0 modcomp, prt 7 term]) Language.Rzk.Syntax.Abs.LetMod _ modcomp bind term1 term2 -> prPrec i 1 (concatD [doc (showString "let"), doc (showString "mod"), prt 0 modcomp, prt 0 bind, doc (showString ":="), prt 0 term1, doc (showString "in"), prt 0 term2]) Language.Rzk.Syntax.Abs.First _ term -> prPrec i 6 (concatD [doc (showString "\960\8321"), prt 7 term])@@ -322,6 +337,9 @@ Language.Rzk.Syntax.Abs.ASCII_CubeUnitStar _ -> prPrec i 7 (concatD [doc (showString "*_1")]) Language.Rzk.Syntax.Abs.ASCII_Cube2_0 _ -> prPrec i 7 (concatD [doc (showString "0_2")]) Language.Rzk.Syntax.Abs.ASCII_Cube2_1 _ -> prPrec i 7 (concatD [doc (showString "1_2")])+ Language.Rzk.Syntax.Abs.ASCII_CubeI _ -> prPrec i 7 (concatD [doc (showString "II")])+ Language.Rzk.Syntax.Abs.ASCII_CubeI_0 _ -> prPrec i 7 (concatD [doc (showString "0_I")])+ Language.Rzk.Syntax.Abs.ASCII_CubeI_1 _ -> prPrec i 7 (concatD [doc (showString "1_I")]) Language.Rzk.Syntax.Abs.ASCII_TopeTop _ -> prPrec i 7 (concatD [doc (showString "TOP")]) Language.Rzk.Syntax.Abs.ASCII_TopeBottom _ -> prPrec i 7 (concatD [doc (showString "BOT")]) Language.Rzk.Syntax.Abs.ASCII_TopeEQ _ term1 term2 -> prPrec i 4 (concatD [prt 5 term1, doc (showString "==="), prt 5 term2])@@ -330,7 +348,6 @@ Language.Rzk.Syntax.Abs.ASCII_TopeOr _ term1 term2 -> prPrec i 2 (concatD [prt 3 term1, doc (showString "\\/"), prt 2 term2]) Language.Rzk.Syntax.Abs.ASCII_TypeFun _ paramdecl term -> prPrec i 1 (concatD [prt 0 paramdecl, doc (showString "->"), prt 1 term]) Language.Rzk.Syntax.Abs.ASCII_TypeSigma _ pattern_ term1 term2 -> prPrec i 1 (concatD [doc (showString "Sigma"), doc (showString "("), prt 0 pattern_, doc (showString ":"), prt 0 term1, doc (showString ")"), doc (showString ","), prt 1 term2])- Language.Rzk.Syntax.Abs.ASCII_TypeSigmaModal _ pattern_ modality term1 term2 -> prPrec i 1 (concatD [doc (showString "Sigma"), doc (showString "("), prt 0 pattern_, doc (showString ":"), prt 0 modality, prt 0 term1, doc (showString ")"), doc (showString ","), prt 1 term2]) Language.Rzk.Syntax.Abs.ASCII_TypeSigmaTuple _ sigmaparam sigmaparams term -> prPrec i 1 (concatD [doc (showString "Sigma"), doc (showString "("), prt 0 sigmaparam, doc (showString ","), prt 0 sigmaparams, doc (showString ")"), doc (showString ","), prt 1 term]) Language.Rzk.Syntax.Abs.ASCII_Lambda _ params term -> prPrec i 1 (concatD [doc (showString "\\"), prt 0 params, doc (showString "->"), prt 1 term]) Language.Rzk.Syntax.Abs.ASCII_TypeExtensionDeprecated _ paramdecl term -> prPrec i 7 (concatD [doc (showString "<"), prt 0 paramdecl, doc (showString "->"), prt 0 term, doc (showString ">")])
src/Language/Rzk/VSCode/Env.hs view
@@ -4,7 +4,7 @@ import Control.Monad.Reader import Language.LSP.Server import Language.Rzk.Free.Syntax (VarIdent)-import Language.Rzk.VSCode.Config (ServerConfig)+import qualified Language.Rzk.VSCode.Config as RzkConfig import Rzk.TypeCheck (Decl', TypeErrorInScopedContext) data RzkCachedModule = RzkCachedModule@@ -24,7 +24,7 @@ return RzkEnv { rzkEnvTypecheckCache = typecheckCache } -type LSP = LspT ServerConfig (ReaderT RzkEnv IO)+type LSP = LspT RzkConfig.ServerConfig (ReaderT RzkEnv IO) -- | Override the cache with given typechecked modules. cacheTypecheckedModules :: RzkTypecheckCache -> LSP ()
src/Language/Rzk/VSCode/Handlers.hs view
@@ -26,6 +26,7 @@ import Control.Monad.IO.Class (MonadIO (..)) import Data.Default.Class import Data.List (isSuffixOf, sort, (\\))+import qualified Data.List.NonEmpty as NE import Data.Maybe (fromMaybe, isNothing) import qualified Data.Text as T import qualified Data.Yaml as Yaml@@ -49,10 +50,11 @@ import Language.Rzk.Syntax (Module, VarIdent' (VarIdent), parseModuleFile, parseModuleSafe, printTree)-import Language.Rzk.VSCode.Config (ServerConfig (ServerConfig, formatEnabled))+import qualified Language.Rzk.VSCode.Config as RzkConfig import Language.Rzk.VSCode.Env import Language.Rzk.VSCode.Logging import Language.Rzk.VSCode.Tokenize (tokenizeModule)+import qualified Rzk.Diagnostic as Diag import Rzk.Format (format) import Rzk.Project.Config (ProjectConfig (include)) import Rzk.TypeCheck@@ -118,10 +120,12 @@ logDebug (tshow (length modifiedFiles) <> " files have been modified") (parseErrors, parsedModules) <- liftIO $ collectErrors <$> parseFiles modifiedFiles+ -- Run in lenient hole mode so holes are collected (and surfaced as+ -- hints) rather than reported as errors while editing. tcResults <- liftIO $ try $ evaluate $- defaultTypeCheck (typecheckModulesWithLocationIncremental cachedModules parsedModules)+ defaultTypeCheckWithHoles (typecheckModulesWithLocationIncremental cachedModules parsedModules) - (typeErrors, _checkedModules) <- case tcResults of+ (typeErrors, holeInfos) <- case tcResults of Left (ex :: SomeException) -> do -- Just a warning to be logged in the "Output" panel and not shown to the user as an error message -- because exceptions are expected when the file has invalid syntax@@ -130,13 +134,14 @@ Right (Left err) -> do logError ("An impossible error happened! Please report a bug:\n" <> T.pack (ppTypeErrorInScopedContext' BottomUp err)) return ([err], []) -- sort of impossible- Right (Right (checkedModules, errors)) -> do+ Right (Right ((checkedModules, errors), foundHoles)) -> do -- cache well-typed modules logInfo (tshow (length checkedModules) <> " modules successfully typechecked") logInfo (tshow (length errors) <> " errors found")+ logInfo (tshow (length foundHoles) <> " holes found") let checkedModules' = map (\(path, decls) -> (path, RzkCachedModule decls (filter ((== path) . filepathOfTypeError) errors))) checkedModules cacheTypecheckedModules checkedModules'- return (errors, checkedModules)+ return (errors, foundHoles) -- Reset all published diags -- TODO: remove this after properly grouping by path below, after which there can be an empty list of errors@@ -148,13 +153,22 @@ forM_ parseErrors $ \(path, err) -> do publishDiagnostics maxDiagnosticCount (filePathToNormalizedUri path) Nothing (partitionBySource [diagnosticOfParseError err]) - -- TODO: collect all errors for one file in one list-- -- Report typechecking errors to the client- forM_ typeErrors $ \err -> do- let errPath = filepathOfTypeError err- errDiagnostic = diagnosticOfTypeError err- publishDiagnostics maxDiagnosticCount (filePathToNormalizedUri errPath) Nothing (partitionBySource [errDiagnostic])+ -- Report typechecking errors and holes to the client, grouped by file+ -- so all diagnostics for a file are published in a single call+ -- (publishDiagnostics replaces a source's diagnostics per URI, so+ -- publishing them one at a time would clobber all but the last).+ let errDiagnostics = [ (filepathOfTypeError err, diagnosticOfTypeError err)+ | err <- typeErrors ]+ holeDiagnostics = [ (path, diagnosticOfHole hole)+ | hole <- holeInfos+ , Just path <- [holeLocation hole >>= locationFilePath] ]+ -- group by file path (NE.groupAllWith sorts then groups, and+ -- yields NonEmpty groups so taking the key is total)+ diagnosticsByFile =+ map (\grp -> (fst (NE.head grp), map snd (NE.toList grp))) $+ NE.groupAllWith fst (errDiagnostics <> holeDiagnostics)+ forM_ diagnosticsByFile $ \(path, diags) ->+ publishDiagnostics maxDiagnosticCount (filePathToNormalizedUri path) Nothing (partitionBySource diags) where filepathOfTypeError :: TypeErrorInScopedContext var -> FilePath filepathOfTypeError (PlainTypeError err) =@@ -163,29 +177,38 @@ _ -> error "the impossible happened! Please contact Abdelrahman immediately!!!" filepathOfTypeError (ScopedTypeError _orig err) = filepathOfTypeError err - diagnosticOfTypeError :: TypeErrorInScopedContext VarIdent -> Diagnostic- diagnosticOfTypeError err = Diagnostic- (Range (Position line 0) (Position line 99)) -- 99 to reach end of line and be visible until we actually have information about it- (Just DiagnosticSeverity_Error)- (Just $ InR "type-error") -- diagnostic code+ -- Map a structured library diagnostic to an LSP diagnostic. The range is+ -- line-level (whole line), reflecting the granularity rzk currently retains.+ lspDiagnosticOf :: Diag.Diagnostic -> Diagnostic+ lspDiagnosticOf d = Diagnostic+ (Range (Position line 0) (Position line 99)) -- 99 to reach end of line and be visible until we actually have column information+ (Just (lspSeverity (Diag.diagnosticSeverity d)))+ (Just (InR (T.pack (Diag.diagnosticCode d)))) Nothing -- diagnostic description (Just "rzk") -- A human-readable string describing the source of this diagnostic- (T.pack msg)+ (T.pack (Diag.diagnosticMessage d)) Nothing -- tags (Just []) -- related information Nothing -- data that is preserved between different calls where- msg = ppTypeErrorInScopedContext' TopDown err-- extractLineNumber :: TypeErrorInScopedContext var -> Maybe Int- extractLineNumber (PlainTypeError e) = do- loc <- location (typeErrorContext e)+ line = fromIntegral $ fromMaybe 0 $ do+ loc <- Diag.diagnosticLocation d lineNo <- locationLine loc return (lineNo - 1) -- VS Code indexes lines from 0, but locationLine starts with 1- extractLineNumber (ScopedTypeError _ e) = extractLineNumber e - line = fromIntegral $ fromMaybe 0 $ extractLineNumber err+ lspSeverity :: Diag.Severity -> DiagnosticSeverity+ lspSeverity = \case+ Diag.SeverityError -> DiagnosticSeverity_Error+ Diag.SeverityWarning -> DiagnosticSeverity_Warning+ Diag.SeverityInformation -> DiagnosticSeverity_Information+ Diag.SeverityHint -> DiagnosticSeverity_Hint + diagnosticOfTypeError :: TypeErrorInScopedContext VarIdent -> Diagnostic+ diagnosticOfTypeError = lspDiagnosticOf . Diag.diagnoseTypeError TopDown++ diagnosticOfHole :: HoleInfo -> Diagnostic+ diagnosticOfHole = lspDiagnosticOf . Diag.diagnoseHole+ diagnosticOfParseError :: T.Text -> Diagnostic diagnosticOfParseError err = Diagnostic (Range (Position errLine errColumnStart) (Position errLine errColumnEnd)) (Just DiagnosticSeverity_Error)@@ -283,7 +306,7 @@ formatDocument req res = do let doc = req ^. params . textDocument . uri . to toNormalizedUri logInfo $ "Formatting document: " <> T.pack (show doc)- ServerConfig {formatEnabled = fmtEnabled} <- getConfig+ RzkConfig.ServerConfig {RzkConfig.formatEnabled = fmtEnabled} <- getConfig if fmtEnabled then do mdoc <- getVirtualFile doc possibleEdits <- case virtualFileText <$> mdoc of
src/Language/Rzk/VSCode/Lsp.hs view
@@ -13,7 +13,7 @@ import Data.Aeson (Result (Error, Success), fromJSON)-import Language.Rzk.VSCode.Config (ServerConfig (..))+import qualified Language.Rzk.VSCode.Config as RzkConfig import Language.Rzk.VSCode.Env import Language.Rzk.VSCode.Handlers @@ -75,5 +75,5 @@ , staticHandlers = const handlers , interpretHandler = \env -> Iso (flip runReaderT rzkEnv . runLspT env) liftIO , options = defaultOptions { optTextDocumentSync = Just syncOptions }- , defaultConfig = def :: ServerConfig+ , defaultConfig = def :: RzkConfig.ServerConfig }
src/Language/Rzk/VSCode/Tokenize.hs view
@@ -62,10 +62,15 @@ [ tokenizePattern pat , tokenizeTerm cube , tokenizeTope tope ]- ParamPatternModalType _loc pats md ty -> concat+ ParamPatternModalType _loc pats mc ty -> concat [ foldMap tokenizePattern pats- , tokenizeModality md+ , tokenizeModalColon mc , tokenizeTerm ty ]+ ParamPatternModalShape _loc pats mc cube tope -> concat+ [ foldMap tokenizePattern pats+ , tokenizeModalColon mc+ , tokenizeTerm cube+ , tokenizeTope tope ] tokenizePattern :: Pattern -> [SemanticTokenAbsolute] tokenizePattern = \case@@ -103,6 +108,13 @@ Cube2_1{} -> mkToken term SemanticTokenTypes_EnumMember [SemanticTokenModifiers_DefaultLibrary] ASCII_Cube2_1{} -> mkToken term SemanticTokenTypes_EnumMember [SemanticTokenModifiers_DefaultLibrary] + CubeI{} -> mkToken term SemanticTokenTypes_Enum [SemanticTokenModifiers_DefaultLibrary]+ CubeI_0{} -> mkToken term SemanticTokenTypes_EnumMember [SemanticTokenModifiers_DefaultLibrary]+ ASCII_CubeI_0{} -> mkToken term SemanticTokenTypes_EnumMember [SemanticTokenModifiers_DefaultLibrary]+ CubeI_1{} -> mkToken term SemanticTokenTypes_EnumMember [SemanticTokenModifiers_DefaultLibrary]+ ASCII_CubeI_1{} -> mkToken term SemanticTokenTypes_EnumMember [SemanticTokenModifiers_DefaultLibrary]+ ASCII_CubeI{} -> mkToken term SemanticTokenTypes_Enum [SemanticTokenModifiers_DefaultLibrary]+ CubeProduct _loc l r -> foldMap go [l, r] TopeTop{} -> mkToken term SemanticTokenTypes_String [SemanticTokenModifiers_DefaultLibrary]@@ -135,20 +147,15 @@ [ mkToken (VarIdent loc "∑") SemanticTokenTypes_Class [SemanticTokenModifiers_DefaultLibrary] , tokenizePattern pat , foldMap go [a, b] ]- TypeSigmaModal loc pat md a b -> concat+ TypeSigmaModal loc pat mc a b -> concat [ mkToken (VarIdent loc "∑") SemanticTokenTypes_Class [SemanticTokenModifiers_DefaultLibrary] , tokenizePattern pat- , tokenizeModality md+ , tokenizeModalColon mc , foldMap go [a, b] ] ASCII_TypeSigma loc pat a b -> concat [ mkToken (VarIdent loc "Sigma") SemanticTokenTypes_Class [SemanticTokenModifiers_DefaultLibrary] , tokenizePattern pat , foldMap go [a, b] ]- ASCII_TypeSigmaModal loc pat md a b -> concat- [ mkToken (VarIdent loc "Sigma") SemanticTokenTypes_Class [SemanticTokenModifiers_DefaultLibrary]- , tokenizePattern pat- , tokenizeModality md- , foldMap go [a, b] ] TypeSigmaTuple loc p ps tN -> concat [ mkToken (VarIdent loc "∑") SemanticTokenTypes_Class [SemanticTokenModifiers_DefaultLibrary] , foldMap tokenizeSigmaParam (p : ps)@@ -239,11 +246,14 @@ , tokenizeTerm cube , tokenizeTope tope ]- ParamTermModalType _loc pat md type_ -> concat- [ tokenizeTerm pat- , tokenizeModality md- , tokenizeTerm type_ ]+ ParamTermModalType _loc pat mc type_ -> concat+ [ tokenizeTerm pat, tokenizeModalColon mc, tokenizeTerm type_ ]+ ParamTermModalShape _loc pat mc cube tope -> concat+ [ tokenizeTerm pat, tokenizeModalColon mc, tokenizeTerm cube, tokenizeTope tope ] +tokenizeModalColon :: ModalColon -> [SemanticTokenAbsolute]+tokenizeModalColon mc = mkToken mc SemanticTokenTypes_Decorator []+ tokenizeModality :: Modality -> [SemanticTokenAbsolute] tokenizeModality md = mkToken md SemanticTokenTypes_Decorator [] @@ -257,9 +267,9 @@ SigmaParam _loc pat type_ -> concat [ tokenizePattern pat , tokenizeTerm type_ ]- SigmaParamModal _loc pat md type_ -> concat+ SigmaParamModal _loc pat mc type_ -> concat [ tokenizePattern pat- , tokenizeModality md+ , tokenizeModalColon mc , tokenizeTerm type_ ] mkToken :: (HasPosition a, Print a) => a -> SemanticTokenTypes -> [SemanticTokenModifiers] -> [SemanticTokenAbsolute]
+ src/Rzk/Diagnostic.hs view
@@ -0,0 +1,235 @@+{-# LANGUAGE LambdaCase #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE RecordWildCards #-}++-- | Structured diagnostics for rzk: type errors and holes as data (severity,+-- a stable code, a source location, and a message) rather than a single+-- pre-formatted string. The core library produces these; the LSP maps them to+-- LSP diagnostics, and the CLI can emit them as JSON (@rzk typecheck --json@).+--+-- Locations are line-level: rzk currently retains only file + line at the point+-- an error is produced (the column is discarded, and core terms keep no+-- per-node position), so diagnostics point at the enclosing command's line.+module Rzk.Diagnostic where++import Data.Aeson (ToJSON (..), Value (String), object,+ (.=))++import Language.Rzk.Free.Syntax (VarIdent)+import Rzk.TypeCheck++-- | Diagnostic severity, mirroring the usual LSP levels.+data Severity+ = SeverityError+ | SeverityWarning+ | SeverityInformation+ | SeverityHint+ deriving (Eq, Show)++-- | A structured diagnostic. Independent of any editor protocol: the LSP maps+-- it to its own @Diagnostic@, and the CLI serialises it as JSON.+--+-- == JSON wire format (@rzk typecheck --json@)+--+-- This is a stable format that downstream tools (e.g. richer LSP hovers) pin+-- to. Each diagnostic is an object:+--+-- > { "severity": "error" | "warning" | "information" | "hint"+-- > , "code": <string> -- "hole", or a TypeError tag (e.g. "TypeErrorUnify")+-- > , "location": { "file": <string|null>, "line": <int|null> } | null+-- > , "message": <string> -- human-facing prose (the CLI/LSP display text)+-- > , "hole": <HoleData> | null -- present only for hole diagnostics (see 'HoleData')+-- > }+--+-- The @message@ field is kept for back-compat (the LSP and the CLI human mode+-- use it). Structured consumers should read the @hole@ object instead of+-- parsing @message@. For non-hole diagnostics @hole@ is @null@.+data Diagnostic = Diagnostic+ { diagnosticSeverity :: Severity+ , diagnosticCode :: String -- ^ stable category, e.g. @\"TypeErrorUnify\"@ or @\"hole\"@+ , diagnosticLocation :: Maybe LocationInfo -- ^ file + line (line-level granularity)+ , diagnosticMessage :: String+ , diagnosticHole :: Maybe HoleData -- ^ structured hole payload ('Nothing' for type errors)+ } deriving (Eq, Show)++-- | The structured payload of a hole diagnostic: the goal and local context as+-- already-rendered display strings (the same strings the LSP/CLI show, i.e.+-- @show@ = @printTree@ on the underlying terms). Consumers render hole panels+-- from these fields directly, without parsing the human-facing @message@.+--+-- == JSON wire format+--+-- > { "name": <string|null> -- the ?name, if the hole was named+-- > , "goal": <string> -- the expected type (the goal)+-- > , "shape": { "binder": <string>, "tope": <string> } | null+-- > , "termVars": [ { "name": <string>, "type": <string> }, ... ]+-- > , "cubeVars": [ { "name": <string>, "type": <string> }, ... ]+-- > , "topes": [ <string>, ... ] -- local tope assumptions (excludes ⊤)+-- > }+--+-- Notes for consumers:+--+-- * @shape@ is non-null only for a shape-restricted /argument/ goal, where the+-- goal reads @(binder : goal | tope)@. For an /extension/ type the boundary is+-- already part of @goal@ (a restricted type @A [ … ↦ … ]@), and @shape@ is+-- @null@ — read the boundary out of @goal@.+-- * @cubeVars@ names can be patterns like @\"(t, s)\"@ (pair-pattern binders);+-- they are display strings, not single identifiers.+data HoleData = HoleData+ { holeDataName :: Maybe String -- ^ the @?name@, if named+ , holeDataGoal :: String -- ^ the goal (expected type)+ , holeDataShape :: Maybe (String, String) -- ^ (binder, tope) for a shape-argument goal+ , holeDataTermVars :: [(String, String)] -- ^ local hypotheses: (name, type)+ , holeDataCubeVars :: [(String, String)] -- ^ local cube variables: (name, type)+ , holeDataTopes :: [String] -- ^ local tope assumptions (excluding ⊤)+ } deriving (Eq, Show)++instance ToJSON Severity where+ toJSON = String . \case+ SeverityError -> "error"+ SeverityWarning -> "warning"+ SeverityInformation -> "information"+ SeverityHint -> "hint"++-- | Encode a location as JSON. A plain helper rather than a @ToJSON@ instance,+-- to avoid an orphan instance ('LocationInfo' is defined in "Rzk.TypeCheck").+locationToJSON :: LocationInfo -> Value+locationToJSON (LocationInfo path line) = object+ [ "file" .= path+ , "line" .= line+ ]++instance ToJSON Diagnostic where+ toJSON Diagnostic{..} = object+ [ "severity" .= diagnosticSeverity+ , "code" .= diagnosticCode+ , "location" .= fmap locationToJSON diagnosticLocation+ , "message" .= diagnosticMessage+ , "hole" .= diagnosticHole+ ]++instance ToJSON HoleData where+ toJSON HoleData{..} = object+ [ "name" .= holeDataName+ , "goal" .= holeDataGoal+ , "shape" .= fmap shapeToJSON holeDataShape+ , "termVars" .= map entryToJSON holeDataTermVars+ , "cubeVars" .= map entryToJSON holeDataCubeVars+ , "topes" .= holeDataTopes+ ]+ where+ shapeToJSON (binder, tope) = object [ "binder" .= binder, "tope" .= tope ]+ entryToJSON (name, ty) = object [ "name" .= name, "type" .= ty ]++-- | A stable tag for a type error, used as its diagnostic code. Independent of+-- the variable type, so it survives the scoped-error unfolding.+typeErrorTag :: TypeError var -> String+typeErrorTag = \case+ TypeErrorOther{} -> "TypeErrorOther"+ TypeErrorUnify{} -> "TypeErrorUnify"+ TypeErrorUnifyTerms{} -> "TypeErrorUnifyTerms"+ TypeErrorNotPair{} -> "TypeErrorNotPair"+ TypeErrorNotModal{} -> "TypeErrorNotModal"+ TypeErrorModalityMismatch{} -> "TypeErrorModalityMismatch"+ TypeErrorUnaccessibleVar{} -> "TypeErrorUnaccessibleVar"+ TypeErrorNotTypeInModal{} -> "TypeErrorNotTypeInModal"+ TypeErrorNotFunction{} -> "TypeErrorNotFunction"+ TypeErrorUnexpectedLambda{} -> "TypeErrorUnexpectedLambda"+ TypeErrorUnexpectedPair{} -> "TypeErrorUnexpectedPair"+ TypeErrorUnexpectedRefl{} -> "TypeErrorUnexpectedRefl"+ TypeErrorCannotInferBareLambda{} -> "TypeErrorCannotInferBareLambda"+ TypeErrorCannotInferBareRefl{} -> "TypeErrorCannotInferBareRefl"+ TypeErrorCannotInferHole{} -> "TypeErrorCannotInferHole"+ TypeErrorUnsolvedHole{} -> "TypeErrorUnsolvedHole"+ TypeErrorUndefined{} -> "TypeErrorUndefined"+ TypeErrorTopeNotSatisfied{} -> "TypeErrorTopeNotSatisfied"+ TypeErrorTopeContextDisjoint{} -> "TypeErrorTopeContextDisjoint"+ TypeErrorTopesNotEquivalent{} -> "TypeErrorTopesNotEquivalent"+ TypeErrorInvalidArgumentType{} -> "TypeErrorInvalidArgumentType"+ TypeErrorDuplicateTopLevel{} -> "TypeErrorDuplicateTopLevel"+ TypeErrorUnusedVariable{} -> "TypeErrorUnusedVariable"+ TypeErrorUnusedUsedVariables{} -> "TypeErrorUnusedUsedVariables"+ TypeErrorImplicitAssumption{} -> "TypeErrorImplicitAssumption"++-- | The tag of a scoped type error (peels the binder layers; the tag does not+-- depend on the variable type).+typeErrorTagInScopedContext :: TypeErrorInScopedContext var -> String+typeErrorTagInScopedContext = \case+ PlainTypeError e -> typeErrorTag (typeErrorError e)+ ScopedTypeError _ e -> typeErrorTagInScopedContext e++-- | The source location of a scoped type error (the enclosing command's line).+locationOfTypeError :: TypeErrorInScopedContext var -> Maybe LocationInfo+locationOfTypeError = \case+ PlainTypeError e -> location (typeErrorContext e)+ ScopedTypeError _ e -> locationOfTypeError e++-- | A structured diagnostic for a type error. The message is the usual+-- formatted error text; severity is always 'SeverityError'.+diagnoseTypeError :: OutputDirection -> TypeErrorInScopedContext VarIdent -> Diagnostic+diagnoseTypeError dir err = Diagnostic+ { diagnosticSeverity = SeverityError+ , diagnosticCode = typeErrorTagInScopedContext err+ , diagnosticLocation = locationOfTypeError err+ , diagnosticMessage = ppTypeErrorInScopedContext' dir err+ , diagnosticHole = Nothing+ }++-- | A structured diagnostic for a hole, carrying the hole's goal and local+-- context. A hole is an unfilled obligation, so it is a 'SeverityWarning' —+-- mirroring Agda's yellow \"unsolved\" highlight, and visible in the editor's+-- problems panel (unlike 'SeverityHint', which editors render almost+-- invisibly). Finished work still rejects holes outright: the strict default+-- of @rzk typecheck@ reports them as errors (cf. Agda's @--safe@).+diagnoseHole :: HoleInfo -> Diagnostic+diagnoseHole hole = Diagnostic+ { diagnosticSeverity = SeverityWarning+ , diagnosticCode = "hole"+ , diagnosticLocation = holeLocation hole+ , diagnosticMessage = ppHoleInfo hole+ , diagnosticHole = Just (holeData hole)+ }++-- | The structured payload of a hole: its goal and local context rendered to+-- display strings (the same rendering 'ppHoleInfo' uses, but kept as separate+-- fields rather than concatenated into prose). See 'HoleData'.+holeData :: HoleInfo -> HoleData+holeData HoleInfo{..} = HoleData+ { holeDataName = fmap show holeName+ , holeDataGoal = show holeGoal+ , holeDataShape = fmap (\(s, tope) -> (show s, show tope)) holeGoalShape+ , holeDataTermVars = map entry holeTermVars+ , holeDataCubeVars = map entry holeCubeVars+ , holeDataTopes = map show holeTopes+ }+ where+ entry e = (show (holeEntryName e), show (holeEntryType e))++-- | Render a hole's goal and local context (the structured query) for display,+-- separating term variables, cube variables, and tope assumptions.+ppHoleInfo :: HoleInfo -> String+ppHoleInfo HoleInfo{..} = unlines $+ [ "Hole" <> maybe "" (\name -> " ?" <> show name) holeName+ <> maybe "" (\loc -> " at " <> ppLocationInfo loc) holeLocation+ , " goal:"+ , " " <> goalStr+ ]+ <> section "context" holeTermVars+ <> section "cube variables" holeCubeVars+ <> (if null holeTopes+ then []+ else " tope context:" : [ " " <> show t | t <- holeTopes ])+ where+ -- a shape goal reads (binder : cube | tope); otherwise just the type+ goalStr = case holeGoalShape of+ Nothing -> show holeGoal+ Just (s, tope) -> "(" <> show s <> " : " <> show holeGoal <> " | " <> show tope <> ")"+ section title entries+ | null entries = []+ | otherwise = (" " <> title <> ":")+ : [ " " <> show (holeEntryName e) <> " : " <> show (holeEntryType e)+ | e <- entries ]++ppLocationInfo :: LocationInfo -> String+ppLocationInfo (LocationInfo mpath mline) =+ maybe "<input>" id mpath <> maybe "" ((":" <>) . show) mline
src/Rzk/Format.hs view
@@ -91,7 +91,13 @@ , ("*_1", "*₁") , ("0_2", "0₂") , ("1_2", "1₂")+ , ("II", "𝕀")+ , ("0_I", "0ᵢ")+ , ("1_I", "1ᵢ") , ("*", "×")+ , (":_b", ":♭")+ , (":_#", ":♯")+ , (":_op", ":ᵒᵖ") , ("_b", "♭") , ("_#", "♯") , ("_op", "ᵒᵖ")
src/Rzk/Main.hs view
@@ -12,6 +12,7 @@ import qualified Data.Yaml as Yaml import System.Directory (doesPathExist) import System.FilePath.Glob (glob)+import System.IO (hPutStrLn, stderr) import qualified Language.Rzk.Syntax as Rzk import Rzk.Project.Config@@ -70,7 +71,7 @@ rzkYamlExists <- doesPathExist rzkYamlPath if rzkYamlExists then do- putStrLn ("Using Rzk project stucture specified in " <> rzkYamlPath)+ hPutStrLn stderr ("Using Rzk project stucture specified in " <> rzkYamlPath) paths <- extractFilesFromRzkYaml rzkYamlPath when (null paths) (error $ "No Rzk files specified in the config file at " <> rzkYamlPath) parseRzkFilesOrStdin paths@@ -81,7 +82,7 @@ paths -> do expandedPaths <- foldMap globNonEmpty paths forM expandedPaths $ \path -> do- putStrLn ("Loading file " <> path)+ hPutStrLn stderr ("Loading file " <> path) result <- Rzk.parseModule <$> T.readFile path case result of Left err -> do
src/Rzk/TypeCheck.hs view
@@ -11,3667 +11,4815 @@ import Control.Monad (forM, forM_, join, unless, when) import Control.Monad.Except import Control.Monad.Reader-import Data.Bifunctor (first)-import Data.List (intercalate, intersect, nub, tails,- (\\))-import Data.Maybe (catMaybes, fromMaybe, isNothing,- mapMaybe)-import Data.String (IsString (..))-import Data.Tuple (swap)--import Free.Scoped-import Language.Rzk.Free.Syntax-import qualified Language.Rzk.Syntax as Rzk--import Debug.Trace-import Unsafe.Coerce---- $setup--- >>> :set -XOverloadedStrings---- | Parse and 'unsafeInferStandalone''.-instance IsString TermT' where- fromString = unsafeInferStandalone' . fromString--defaultTypeCheck- :: TypeCheck var a- -> Either (TypeErrorInScopedContext var) a-defaultTypeCheck tc = runExcept (runReaderT tc emptyContext)---- FIXME: merge with VarInfo-data Decl var = Decl- { declName :: var- , declType :: TermT var- , declValue :: Maybe (TermT var)- , declIsAssumption :: Bool- , declUsedVars :: [var]- , declLocation :: Maybe LocationInfo- } deriving Eq--type Decl' = Decl VarIdent--typecheckModulesWithLocationIncremental- :: [(FilePath, [Decl'])] -- ^ Cached declarations (only those that do not need rechecking).- -> [(FilePath, Rzk.Module)] -- ^ New modules to check- -> TypeCheck VarIdent ([(FilePath, [Decl'])], [TypeErrorInScopedContext VarIdent])-typecheckModulesWithLocationIncremental cached modulesToTypecheck = do- let decls = foldMap snd cached- localDeclsPrepared decls $ do- (checked, errors) <- typecheckModulesWithLocation' modulesToTypecheck- return (cached <> checked, errors)--typecheckModulesWithLocation' :: [(FilePath, Rzk.Module)] -> TypeCheck VarIdent ([(FilePath, [Decl'])], [TypeErrorInScopedContext VarIdent])-typecheckModulesWithLocation' = \case- [] -> return ([], [])- m@(path, _) : ms -> do- (decls, errs) <- typecheckModuleWithLocation m- case errs of- _:_ -> return ([(path, decls)], errs)- _ -> do- localDeclsPrepared decls $ do- (decls', errors) <- typecheckModulesWithLocation' ms- return ((path, decls) : decls', errors)--typecheckModulesWithLocation :: [(FilePath, Rzk.Module)] -> TypeCheck VarIdent [(FilePath, [Decl'])]-typecheckModulesWithLocation = \case- [] -> return []- m@(path, _) : ms -> do- (decls, errs) <- typecheckModuleWithLocation m- case errs of- err : _ -> do- throwError err- [] -> localDeclsPrepared decls $- ((path, decls) :) <$> typecheckModulesWithLocation ms--typecheckModules :: [Rzk.Module] -> TypeCheck VarIdent [Decl']-typecheckModules = \case- [] -> return []- m : ms -> do- (decls, errs) <- typecheckModule Nothing m- case errs of- err : _ -> do- throwError err- _ -> do- localDeclsPrepared decls $- (decls <>) <$> typecheckModules ms--typecheckModuleWithLocation :: (FilePath, Rzk.Module) -> TypeCheck VarIdent ([Decl'], [TypeErrorInScopedContext VarIdent])-typecheckModuleWithLocation (path, module_) = do- traceTypeCheck Normal ("Checking module from " <> path) $ do- withLocation (LocationInfo { locationFilePath = Just path, locationLine = Nothing }) $- typecheckModule (Just path) module_--countCommands :: Integral a => [Rzk.Command] -> a-countCommands = fromIntegral . length--typecheckModule :: Maybe FilePath -> Rzk.Module -> TypeCheck VarIdent ([Decl'], [TypeErrorInScopedContext VarIdent])-typecheckModule path (Rzk.Module _moduleLoc _lang commands) =- withSection Nothing (go 1 commands) $ -- FIXME: use module name? or anonymous section?- return ([], [])- where- totalCommands = countCommands commands-- go :: Integer -> [Rzk.Command] -> TypeCheck VarIdent ([Decl'], [TypeErrorInScopedContext VarIdent])- go _i [] = return ([], [])-- go i (command@(Rzk.CommandUnsetOption _loc optionName) : moreCommands) = do- traceTypeCheck Normal ("[ " <> show i <> " out of " <> show totalCommands <> " ]"- <> " Unsetting option " <> optionName) $ do- withCommand command $ do- unsetOption optionName $- go (i + 1) moreCommands-- go i (command@(Rzk.CommandSetOption _loc optionName optionValue) : moreCommands) = do- traceTypeCheck Normal ("[ " <> show i <> " out of " <> show totalCommands <> " ]"- <> " Setting option " <> optionName <> " = " <> optionValue ) $ do- withCommand command $ do- setOption optionName optionValue $- go (i + 1) moreCommands-- go i (command@(Rzk.CommandDefine _loc name (Rzk.DeclUsedVars _ vars) params ty term) : moreCommands) =- traceTypeCheck Normal ("[ " <> show i <> " out of " <> show totalCommands <> " ]"- <> " Checking #define " <> Rzk.printTree name ) $ do- withCommand command $ do- mapM_ checkDefinedVar (varIdentAt path <$> vars)- paramDecls <- concat <$> mapM paramToParamDecl params- ty' <- typecheck (toTerm' (addParamDecls paramDecls ty)) universeT >>= whnfT- term' <- typecheck (toTerm' (addParams params term)) ty' >>= whnfT- loc <- asks location- let decl = Decl (varIdentAt path name) ty' (Just term') False (varIdentAt path <$> vars) loc- fmap (first (decl :)) $- localDeclPrepared decl $ do- Context{..} <- ask- termSVG <-- case renderBackend of- Just RenderSVG -> renderTermSVG (Pure (varIdentAt path name))- Just RenderLaTeX -> issueTypeError $ TypeErrorOther "\"latex\" rendering is not yet supported"- Nothing -> pure Nothing- maybe id trace termSVG $ do- go (i + 1) moreCommands-- go i (command@(Rzk.CommandPostulate _loc name (Rzk.DeclUsedVars _ vars) params ty) : moreCommands) =- traceTypeCheck Normal ("[ " <> show i <> " out of " <> show totalCommands <> " ]"- <> " Checking #postulate " <> Rzk.printTree name) $ do- withCommand command $ do- mapM_ checkDefinedVar (varIdentAt path <$> vars)- paramDecls <- concat <$> mapM paramToParamDecl params- ty' <- typecheck (toTerm' (addParamDecls paramDecls ty)) universeT >>= whnfT- loc <- asks location- let decl = Decl (varIdentAt path name) ty' Nothing False (varIdentAt path <$> vars) loc- fmap (first (decl :)) $- localDeclPrepared decl $- go (i + 1) moreCommands-- go i (command@(Rzk.CommandCheck _loc term ty) : moreCommands) =- traceTypeCheck Normal ("[ " <> show i <> " out of " <> show totalCommands <> " ]"- <> " Checking " <> Rzk.printTree term <> " : " <> Rzk.printTree ty ) $ do- withCommand command $ do- ty' <- typecheck (toTerm' ty) universeT >>= whnfT- _term' <- typecheck (toTerm' term) ty'- go (i + 1) moreCommands-- go i (Rzk.CommandCompute loc term : moreCommands) =- go i (Rzk.CommandComputeWHNF loc term : moreCommands)-- go i (command@(Rzk.CommandComputeNF _loc term) : moreCommands) =- traceTypeCheck Normal ("[ " <> show i <> " out of " <> show totalCommands <> " ]"- <> " Computing NF for " <> Rzk.printTree term) $ do- withCommand command $ do- term' <- infer (toTerm' term) >>= nfT- traceTypeCheck Normal (" " <> show (untyped term')) $ do- go (i + 1) moreCommands-- go i (command@(Rzk.CommandComputeWHNF _loc term) : moreCommands) =- traceTypeCheck Normal ("[ " <> show i <> " out of " <> show totalCommands <> " ]"- <> " Computing WHNF for " <> Rzk.printTree term) $ do- withCommand command $ do- term' <- infer (toTerm' term) >>= whnfT- traceTypeCheck Normal (" " <> show (untyped term')) $ do- go (i + 1) moreCommands-- go i (command@(Rzk.CommandAssume _loc names ty) : moreCommands) =- traceTypeCheck Normal ("[ " <> show i <> " out of " <> show totalCommands <> " ]"- <> " Checking #assume " <> intercalate " " [ Rzk.printTree name | name <- names ] ) $ do- withCommand command $ do- ty' <- typecheck (toTerm' ty) universeT- loc <- asks location- let decls = [ Decl (varIdentAt path name) ty' Nothing True [] loc | name <- names ]- fmap (first (decls <>)) $- localDeclsPrepared decls $- go (i + 1) moreCommands-- go i (command@(Rzk.CommandSection _loc name) : moreCommands) = do- withCommand command $ do- (sectionCommands, moreCommands') <- splitSectionCommands name moreCommands- withSection (Just name) (go i sectionCommands) $ do- go (i + countCommands sectionCommands) moreCommands'-- go _i (command@(Rzk.CommandSectionEnd _loc endName) : _moreCommands) = do- withCommand command $- issueTypeError $ TypeErrorOther $- "unexpected #end " <> Rzk.printTree endName <> ", no section was declared!"---splitSectionCommands :: Rzk.SectionName -> [Rzk.Command] -> TypeCheck var ([Rzk.Command], [Rzk.Command])-splitSectionCommands name [] =- issueTypeError (TypeErrorOther $ "Section " <> Rzk.printTree name <> " is not closed with an #end")-splitSectionCommands name (Rzk.CommandSection _loc name' : moreCommands) = do- (cs1, cs2) <- splitSectionCommands name' moreCommands- (cs3, cs4) <- splitSectionCommands name cs2- return (cs1 <> cs3, cs4)-splitSectionCommands name (Rzk.CommandSectionEnd _loc endName : moreCommands) = do- when (Rzk.printTree name /= Rzk.printTree endName) $- issueTypeError $ TypeErrorOther $- "unexpected #end " <> Rzk.printTree endName <> ", expecting #end " <> Rzk.printTree name- return ([], moreCommands)-splitSectionCommands name (command : moreCommands) = do- (cs1, cs2) <- splitSectionCommands name moreCommands- return (command : cs1, cs2)--setOption :: String -> String -> TypeCheck var a -> TypeCheck var a-setOption "verbosity" = \case- "debug" -> localVerbosity Debug- "normal" -> localVerbosity Normal- "silent" -> localVerbosity Silent- _ -> const $- issueTypeError $ TypeErrorOther "unknown verbosity level (use \"debug\", \"normal\", or \"silent\")"-setOption "render" = \case- "svg" -> localRenderBackend (Just RenderSVG)- "latex" -> localRenderBackend (Just RenderLaTeX)- "none" -> localRenderBackend Nothing- _ -> const $- issueTypeError $ TypeErrorOther "unknown render backend (use \"svg\", \"latex\", or \"none\")"-setOption optionName = const $ const $- issueTypeError $ TypeErrorOther ("unknown option " <> show optionName)--unsetOption :: String -> TypeCheck var a -> TypeCheck var a-unsetOption "verbosity" = localVerbosity (verbosity emptyContext)-unsetOption "render" = localRenderBackend (renderBackend emptyContext)-unsetOption optionName = const $- issueTypeError $ TypeErrorOther ("unknown option " <> show optionName)--paramToParamDecl :: Rzk.Param -> TypeCheck var [Rzk.ParamDecl]-paramToParamDecl (Rzk.ParamPatternShapeDeprecated loc pat cube tope) = pure- [ Rzk.ParamTermShape loc (patternToTerm pat) cube tope ]-paramToParamDecl (Rzk.ParamPatternShape loc pats cube tope) = pure- [ Rzk.ParamTermShape loc (patternToTerm pat) cube tope | pat <- pats]-paramToParamDecl (Rzk.ParamPatternType loc pats ty) = pure- [ Rzk.ParamTermType loc (patternToTerm pat) ty | pat <- pats ]-paramToParamDecl Rzk.ParamPattern{} = issueTypeError $- TypeErrorOther "untyped pattern in parameters"-paramToParamDecl (Rzk.ParamPatternModalType loc pats md ty) = pure- [ Rzk.ParamTermModalType loc (patternToTerm pat) md ty | pat <- pats ] --addParamDecls :: [Rzk.ParamDecl] -> Rzk.Term -> Rzk.Term-addParamDecls [] = id-addParamDecls (paramDecl : paramDecls)- = Rzk.TypeFun Nothing paramDecl . addParamDecls paramDecls--addParams :: [Rzk.Param] -> Rzk.Term -> Rzk.Term-addParams [] = id-addParams params = Rzk.Lambda Nothing params--data TypeError var- = TypeErrorOther String- | TypeErrorUnify (TermT var) (TermT var) (TermT var)- | TypeErrorUnifyTerms (TermT var) (TermT var)- | TypeErrorNotPair (TermT var) (TermT var)- | TypeErrorNotModal (Term var) TModality (TermT var)- | TypeErrorModalityMismatch TModality TModality (Term var)- | TypeErrorUnaccessibleVar var TModality TModality- | TypeErrorNotTypeInModal (TermT var)- | TypeErrorNotFunction (TermT var) (TermT var)- | TypeErrorUnexpectedLambda (Term var) (TermT var)- | TypeErrorUnexpectedPair (Term var) (TermT var)- | TypeErrorUnexpectedRefl (Term var) (TermT var)- | TypeErrorCannotInferBareLambda (Term var)- | TypeErrorCannotInferBareRefl (Term var)- | TypeErrorUndefined var- | TypeErrorTopeNotSatisfied [TermT var] (TermT var)- | TypeErrorTopesNotEquivalent (TermT var) (TermT var)- | TypeErrorInvalidArgumentType (Term var) (TermT var)- | TypeErrorDuplicateTopLevel [VarIdent] VarIdent- | TypeErrorUnusedVariable var (TermT var)- | TypeErrorUnusedUsedVariables [var] var- | TypeErrorImplicitAssumption (var, TermT var) var- deriving (Functor, Foldable)--data TypeErrorInContext var = TypeErrorInContext- { typeErrorError :: TypeError var- , typeErrorContext :: Context var- } deriving (Functor, Foldable)--data TypeErrorInScopedContext var- = PlainTypeError (TypeErrorInContext var)- | ScopedTypeError (Maybe VarIdent) (TypeErrorInScopedContext (Inc var))- deriving (Functor, Foldable)--type TypeError' = TypeError VarIdent--ppTypeError' :: TypeError' -> String-ppTypeError' = \case- TypeErrorOther msg -> msg- TypeErrorUnify term expected actual -> block TopDown- [ "cannot unify expected type"- , " " <> show (untyped expected)- , "with actual type"- , " " <> show (untyped actual)- , "for term"- , " " <> show (untyped term) ]- TypeErrorUnifyTerms expected actual -> block TopDown- [ "cannot unify term"- , " " <> show (untyped expected)- , "with term"- , " " <> show (untyped actual) ]- TypeErrorNotPair term ty -> block TopDown- [ "expected a cube product or dependent pair"- , "but got type"- , " " <> show (untyped ty)- , "for term"- , " " <> show (untyped term)- , case ty of- TypeFunT{} -> "\nPerhaps the term is applied to too few arguments?"- _ -> ""- ]- TypeErrorNotModal term m ty -> block TopDown- [ "expected modal type with <| " ++ show m ++ " | ? |>"- , "but got type"- , " " <> show (untyped ty)- , "for term"- , " " <> show term- ]- TypeErrorModalityMismatch expected actual term -> block TopDown- [ "modality mismatch"- , " expected " <> show expected- , " but got " <> show actual- , "for term"- , " " <> show term- ]- TypeErrorUnaccessibleVar _var varMod locks -> block TopDown- [ "variable is not accessible"- , " variable has modality " <> show varMod- , " but is used under locks " <> show locks- ]- TypeErrorNotTypeInModal ty -> block TopDown- [ "expected a type inside modal type"- , "but got"- , " " <> show (untyped ty)- ]-- TypeErrorUnexpectedLambda term ty -> block TopDown- [ "unexpected lambda abstraction"- , " " <> show term- , "when typechecking against a non-function type"- , " " <> show ty- ]- TypeErrorUnexpectedPair term ty -> block TopDown- [ "unexpected pair"- , " " <> show term- , "when typechecking against a type that is not a product or a dependent sum"- , " " <> show ty- ]- TypeErrorUnexpectedRefl term ty -> block TopDown- [ "unexpected refl"- , " " <> show term- , "when typechecking against a type that is not an identity type"- , " " <> show ty- ]-- TypeErrorNotFunction term ty -> block TopDown- [ "expected a function or extension type"- , "but got type"- , " " <> show (untyped ty)- , "for term"- , " " <> show (untyped term)- , case term of- AppT _ty f _x -> "\nPerhaps the term\n " <> show (untyped f) <> "\nis applied to too many arguments?"- _ -> ""- ]- TypeErrorCannotInferBareLambda term -> block TopDown- [ "cannot infer the type of the argument"- , "in lambda abstraction"- , " " <> show term- ]- TypeErrorCannotInferBareRefl term -> block TopDown- [ "cannot infer the type of term"- , " " <> show term- ]- TypeErrorUndefined var -> block TopDown- [ "undefined variable: " <> show (Pure var :: Term') ]- TypeErrorTopeNotSatisfied topes tope -> block TopDown- [ "local context is not included in (does not entail) the tope"- , " " <> show (untyped tope)- , "in local context (normalised)"- , intercalate "\n" (map (" " <>) (map show topes))- , intercalate "\n" (map (" " <>) (map show (generateTopesForPoints (allTopePoints tope))))] -- FIXME: remove- TypeErrorTopesNotEquivalent expected actual -> block TopDown- [ "expected tope"- , " " <> show (untyped expected)- , "but got"- , " " <> show (untyped actual) ]-- TypeErrorInvalidArgumentType argType argKind -> block TopDown- [ "invalid function parameter type"- , " " <> show argType- , "function parameter can be a cube, a shape, or a type"- , "but given parameter type has type"- , " " <> show (untyped argKind)- ]-- TypeErrorDuplicateTopLevel previous lastName -> block TopDown- [ "duplicate top-level definition"- , " " <> ppVarIdentWithLocation lastName- , "previous top-level definitions found at"- , intercalate "\n"- [ " " <> ppVarIdentWithLocation name- | name <- previous ]- ]-- TypeErrorUnusedVariable name type_ -> block TopDown- [ "unused variable"- , " " <> Rzk.printTree (getVarIdent name) <> " : " <> show (untyped type_)- ]-- TypeErrorUnusedUsedVariables vars name -> block TopDown- [ "unused variables"- , " " <> intercalate " " (map (Rzk.printTree . getVarIdent) vars)- , "declared as used in definition of"- , " " <> Rzk.printTree (getVarIdent name)- ]-- TypeErrorImplicitAssumption (a, aType) name -> block TopDown- [ "implicit assumption"- , " " <> Rzk.printTree (getVarIdent a) <> " : " <> show (untyped aType)- , "used in definition of"- , " " <> Rzk.printTree (getVarIdent name)- ]---ppTypeErrorInContext :: OutputDirection -> TypeErrorInContext VarIdent -> String-ppTypeErrorInContext dir TypeErrorInContext{..} = block dir- [ ppTypeError' typeErrorError- , ""- , ppContext' dir typeErrorContext- ]--ppTypeErrorInScopedContextWith'- :: OutputDirection- -> [VarIdent]- -> [VarIdent]- -> TypeErrorInScopedContext VarIdent- -> String-ppTypeErrorInScopedContextWith' dir used vars = \case- PlainTypeError err -> ppTypeErrorInContext dir err- ScopedTypeError orig err -> withFresh orig $ \(x, xs) ->- ppTypeErrorInScopedContextWith' dir (x:used) xs $ fmap (g x) err- where- g x Z = x- g _ (S y) = y-- withFresh Nothing f =- case vars of- x:xs -> f (x, xs)- _ -> panicImpossible "not enough fresh variables"- withFresh (Just z) f = f (z', filter (/= z') vars) -- FIXME: very inefficient filter- where- z' = refreshVar used z -- FIXME: inefficient--ppTypeErrorInScopedContext' :: OutputDirection -> TypeErrorInScopedContext VarIdent -> String-ppTypeErrorInScopedContext' dir err =- ppTypeErrorInScopedContextWith' dir vars (defaultVarIdents \\ vars) err- where- vars = nub (foldMap pure err)--issueWarning :: String -> TypeCheck var ()-issueWarning message = do- trace ("Warning: " <> message) $- return ()--fromTypeError :: TypeError var -> TypeCheck var (TypeErrorInScopedContext var)-fromTypeError err = do- context <- ask- return $ PlainTypeError $ TypeErrorInContext- { typeErrorError = err- , typeErrorContext = context- }--issueTypeError :: TypeError var -> TypeCheck var a-issueTypeError err = fromTypeError err >>= throwError--panicImpossible :: String -> a-panicImpossible msg = error $ unlines- [ "PANIC! Impossible happened (" <> msg <> ")!"- , "Please, report a bug at https://github.com/rzk-lang/rzk/issues"- -- TODO: add details and/or instructions how to produce an artifact for reproducing- ]--data Action var- = ActionTypeCheck (Term var) (TermT var)- | ActionUnify (TermT var) (TermT var) (TermT var)- | ActionUnifyTerms (TermT var) (TermT var)- | ActionInfer (Term var)- | ActionContextEntailedBy [TermT var] (TermT var)- | ActionContextEntails [TermT var] (TermT var)- | ActionContextEquiv [TermT var] [TermT var]- | ActionWHNF (TermT var)- | ActionNF (TermT var)- | ActionCheckCoherence (TermT var, TermT var) (TermT var, TermT var)- | ActionCloseSection (Maybe Rzk.SectionName)- | ActionCheckLetValue (Maybe VarIdent)- deriving (Functor, Foldable)--type Action' = Action VarIdent--ppTermInContext :: Eq var => TermT var -> TypeCheck var String-ppTermInContext term = do- vars <- freeVarsT_ term- let mapping = zip vars defaultVarIdents- toRzkVarIdent origs var = fromMaybe "_" $- join (lookup var origs) <|> lookup var mapping- origs <- asks varOrigs- return (show (untyped (toRzkVarIdent origs <$> term)))--ppSomeAction :: Eq var => [(var, Maybe VarIdent)] -> Int -> Action var -> String-ppSomeAction origs n action = ppAction n (toRzkVarIdent <$> action)- where- vars = nub (foldMap pure action)- mapping = zip vars defaultVarIdents- toRzkVarIdent var = fromMaybe "_" $- join (lookup var origs) <|> lookup var mapping--ppAction :: Int -> Action' -> String-ppAction n = unlines . map (replicate (2 * n) ' ' <>) . \case- ActionTypeCheck term ty ->- [ "typechecking"- , " " <> show term- , "against type"- , " " <> show (untyped ty) ]-- ActionUnify term expected actual ->- [ "unifying expected type"- , " " <> show (untyped expected)- , "with actual type"- , " " <> show (untyped actual)- , "for term"- , " " <> show (untyped term) ]-- ActionUnifyTerms expected actual ->- [ "unifying term (expected)"- , " " <> show expected- , "with term (actual)"- , " " <> show actual ]-- ActionInfer term ->- [ "inferring type for term"- , " " <> show term ]-- ActionContextEntailedBy ctxTopes term ->- [ "checking if local context"- , intercalate "\n" (map ((" " <>) . show . untyped) ctxTopes)- , "includes (is entailed by) restriction tope"- , " " <> show (untyped term) ]-- ActionContextEntails ctxTopes term ->- [ "checking if local context"- , intercalate "\n" (map ((" " <>) . show . untyped) ctxTopes)- , "is included in (entails) the tope"- , " " <> show (untyped term) ]-- ActionContextEquiv ctxTopes terms ->- [ "checking if local context"- , intercalate "\n" (map ((" " <>) . show . untyped) ctxTopes)- , "is equivalent to the union of the topes"- , intercalate "\n" (map ((" " <>) . show . untyped) terms) ]-- ActionWHNF term ->- [ "computing WHNF for term"- , " " <> show term ]-- ActionNF term ->- [ "computing normal form for term"- , " " <> show (untyped term) ]-- ActionCheckCoherence (ltope, lterm) (rtope, rterm) ->- [ "checking coherence for"- , " " <> show (untyped ltope)- , " |-> " <> show (untyped lterm)- , "and"- , " " <> show (untyped rtope)- , " |-> " <> show (untyped rterm) ]-- ActionCloseSection Nothing ->- [ "closing the file"- , "and collecting assumptions (variables)" ]- ActionCloseSection (Just sectionName) ->- [ "closing #section " <> Rzk.printTree sectionName- , "and collecting assumptions (variables)"]-- ActionCheckLetValue orig ->- [ "checking the local definition "- <> maybe "_" (Rzk.printTree . getVarIdent) orig ]---traceAction' :: Int -> Action' -> a -> a-traceAction' n action = trace ("[debug]\n" <> ppAction n action)--unsafeTraceAction' :: Int -> Action var -> a -> a-unsafeTraceAction' n = traceAction' n . unsafeCoerce--data LocationInfo = LocationInfo- { locationFilePath :: Maybe FilePath- , locationLine :: Maybe Int- } deriving (Eq)--data Verbosity- = Debug- | Normal- | Silent- deriving (Eq, Ord)--trace' :: Verbosity -> Verbosity -> String -> a -> a-trace' msgLevel currentLevel- | currentLevel <= msgLevel = trace- | otherwise = const id--traceTypeCheck :: Verbosity -> String -> TypeCheck var a -> TypeCheck var a-traceTypeCheck msgLevel msg tc = do- Context{..} <- ask- trace' msgLevel verbosity msg tc--localVerbosity :: Verbosity -> TypeCheck var a -> TypeCheck var a-localVerbosity v = local $ \Context{..} -> Context { verbosity = v, .. }--localRenderBackend :: Maybe RenderBackend -> TypeCheck var a -> TypeCheck var a-localRenderBackend v = local $ \Context{..} -> Context { renderBackend = v, .. }--data Covariance- = Covariant -- ^ Positive position.- | Contravariant -- ^ Negative position.- | Invariant -- ^ Unknown position.--data RenderBackend- = RenderSVG- | RenderLaTeX--data ScopeInfo var = ScopeInfo- { scopeName :: Maybe Rzk.SectionName- , scopeVars :: [(var, VarInfo var)]- } deriving (Functor, Foldable)--addVarToScope :: var -> VarInfo var -> ScopeInfo var -> ScopeInfo var-addVarToScope var info ScopeInfo{..} = ScopeInfo- { scopeVars = (var, info) : scopeVars, .. }--addModalityToScope :: TModality -> ScopeInfo var -> ScopeInfo var-addModalityToScope md ScopeInfo{..} = ScopeInfo- { scopeVars = map (\(var, VarInfo{..}) -> (var, VarInfo{ modAccum = comp modAccum md, ..})) scopeVars, .. }--data VarInfo var = VarInfo- { varType :: TermT var- , varValue :: Maybe (TermT var)- , varModality :: TModality- , modAccum :: TModality- , varOrig :: Maybe VarIdent- , varIsAssumption :: Bool -- FIXME: perhaps, introduce something like decl kind?- , varIsTopLevel :: Bool- , varDeclaredAssumptions :: [var]- , varLocation :: Maybe LocationInfo- } deriving (Functor, Foldable)---class ModeTheory m where- iden :: m- comp :: m -> m -> m- coe :: m -> m -> Bool--instance ModeTheory TModality where- iden = Id-- comp Flat Flat = Flat- comp Flat Sharp = Flat- comp Flat Op = Flat- comp Op Flat = Flat- comp Sharp Sharp = Sharp- comp Sharp Flat = Sharp- comp Sharp Op = Sharp- comp Op Sharp = Sharp- comp Op Op = Id- comp Id m = m- comp m Id = m-- coe Flat Id = True- coe Id Sharp = True- coe Flat Sharp = True- coe a b = a == b--data Context var = Context- { localScopes :: [ScopeInfo var]- , localTopes :: [TermT var]- , localTopesNF :: [TermT var]- , localTopesNFUnion :: [[TermT var]]- , localTopesEntailBottom :: Bool- , actionStack :: [Action var]- , currentCommand :: Maybe Rzk.Command- , location :: Maybe LocationInfo- , verbosity :: Verbosity- , covariance :: Covariance- , renderBackend :: Maybe RenderBackend- } deriving (Functor, Foldable)--addVarInCurrentScope :: var -> VarInfo var -> Context var -> Context var-addVarInCurrentScope var info Context{..} = Context- { localScopes =- case localScopes of- [] -> [ScopeInfo Nothing [(var, info)]]- scope : scopes -> addVarToScope var info scope : scopes- , .. }--applyModalityToScopes :: TModality -> [ScopeInfo var] -> [ScopeInfo var]-applyModalityToScopes md scopes = map (addModalityToScope md) scopes--applyModality :: TModality -> Context var -> Context var-applyModality md Context{..} = Context { localScopes = applyModalityToScopes md localScopes, .. }--emptyContext :: Context var-emptyContext = Context- { localScopes = [ScopeInfo Nothing []]- , localTopes = [topeTopT]- , localTopesNF = [topeTopT]- , localTopesNFUnion = [[topeTopT]]- , localTopesEntailBottom = False- , actionStack = []- , currentCommand = Nothing- , location = Nothing- , verbosity = Normal- , covariance = Covariant- , renderBackend = Nothing- }--askCurrentScope :: TypeCheck var (ScopeInfo var)-askCurrentScope = asks localScopes >>= \case- [] -> panicImpossible "no current scope available"- scope : _scopes -> pure scope--varInfos :: Context var -> [(var, VarInfo var)]-varInfos Context{..} = concatMap scopeVars localScopes--varTypes :: Context var -> [(var, TermT var)]-varTypes = map (fmap varType) . varInfos--varValues :: Context var -> [(var, Maybe (TermT var))]-varValues = map (fmap varValue) . varInfos--varOrigs :: Context var -> [(var, Maybe VarIdent)]-varOrigs = map (fmap varOrig) . varInfos--varModalities :: Context var -> [(var, TModality)]-varModalities = map (fmap varModality) . varInfos--varLocks :: Context var -> [(var, TModality)]-varLocks = map (fmap modAccum) . varInfos--varTopLevels :: Context var -> [(var, Bool)]-varTopLevels = map (fmap varIsTopLevel) . varInfos--withPartialDecls- :: TypeCheck VarIdent ([Decl'], [err])- -> TypeCheck VarIdent ([Decl'], [err])- -> TypeCheck VarIdent ([Decl'], [err])-withPartialDecls tc next = do- (decls, errs) <- tc- if null errs- then first (decls <>)- <$> localDeclsPrepared decls next- else return (decls, errs)--withSection- :: Maybe Rzk.SectionName- -> TypeCheck VarIdent ([Decl VarIdent], [TypeErrorInScopedContext VarIdent])- -> TypeCheck VarIdent ([Decl VarIdent], [TypeErrorInScopedContext VarIdent])- -> TypeCheck VarIdent ([Decl VarIdent], [TypeErrorInScopedContext VarIdent])-withSection name sectionBody =- withPartialDecls $ startSection name $ do- (decls, errs) <- sectionBody- localDeclsPrepared decls $- performing (ActionCloseSection name) $ do- result <- (Right <$> endSection errs) `catchError` (return . Left)- case result of- Left err -> return ([], errs <> [err])- Right (decls', errs') -> return (decls', errs')- -- (\ decls' -> (decls', errs)) <$> endSection errs--startSection :: Maybe Rzk.SectionName -> TypeCheck VarIdent a -> TypeCheck VarIdent a-startSection name = local $ \Context{..} -> Context- { localScopes = ScopeInfo { scopeName = name, scopeVars = [] } : localScopes- , .. }--endSection :: [TypeErrorInScopedContext VarIdent] -> TypeCheck VarIdent ([Decl'], [TypeErrorInScopedContext VarIdent])-endSection errs = askCurrentScope >>= scopeToDecls errs--scopeToDecls :: Eq var => [TypeErrorInScopedContext var] -> ScopeInfo var -> TypeCheck var ([Decl var], [TypeErrorInScopedContext var])-scopeToDecls errs ScopeInfo{..} = do- (decls, errs') <- collectScopeDecls errs [] scopeVars- -- only issue unused variable errors if there were no errors prior in the section- -- when (null errs) $ do- unusedErrors <- forM decls $ \Decl{..} -> do- let unusedUsedVars = declUsedVars `intersect` map fst scopeVars- if null errs && not (null unusedUsedVars)- then do- err <- local (\c -> c { location = declLocation }) $- fromTypeError (TypeErrorUnusedUsedVariables unusedUsedVars declName)- return [err]- else return []- return (decls, errs' <> concat unusedErrors)--insertExplicitAssumptionFor- :: Eq var => var -> (var, VarInfo var) -> TermT var -> TermT var-insertExplicitAssumptionFor a (declName, VarInfo{..}) term =- term >>= \case- y | y == declName -> appT varType (Pure declName) (Pure a)- | otherwise -> Pure y--insertExplicitAssumptionFor'- :: Eq var => var -> (var, VarInfo var) -> VarInfo var -> VarInfo var-insertExplicitAssumptionFor' a decl VarInfo{..}- | varIsAssumption = VarInfo{..}- | otherwise = VarInfo- { varType = insertExplicitAssumptionFor a decl varType- , varValue = insertExplicitAssumptionFor a decl <$> varValue- , varIsAssumption = varIsAssumption- , varIsTopLevel = varIsTopLevel- , varModality = varModality- , modAccum = modAccum- , varOrig = varOrig- , varDeclaredAssumptions = varDeclaredAssumptions- , varLocation = varLocation- }--makeAssumptionExplicit- :: Eq var- => (var, VarInfo var)- -> [(var, VarInfo var)]- -> TypeCheck var (Bool, [(var, VarInfo var)])-makeAssumptionExplicit _ [] = pure (False {- UNUSED -}, [])-makeAssumptionExplicit assumption@(a, aInfo) ((x, xInfo) : xs) = do- varsInType <- freeVarsT_ (varType xInfo)- varsInBody <- concat <$> traverse freeVarsT_ (varValue xInfo)- let xFreeVars = varsInBody <> varsInType- let hasAssumption = a `elem` xFreeVars- xType <- typeOfVar x- xValue <- valueOfVar x- let assumptionInType = a `elem` freeVars (untyped xType)- assumptionInBody = a `elem` foldMap (freeVars . untyped) xValue- implicitAssumption = and- [ hasAssumption- , not (assumptionInType || assumptionInBody)- , a `notElem` varDeclaredAssumptions xInfo ]- if hasAssumption- then do- when implicitAssumption $ do- issueTypeError $ TypeErrorImplicitAssumption (a, varType aInfo) x- (_used, xs'') <- makeAssumptionExplicit (a, aInfo) xs'- return (True {- USED -}, (x, xInfo') : xs'')- else do- (used, xs'') <- makeAssumptionExplicit assumption xs- return (used, (x, xInfo) : xs'')- where- xType' = typeFunT (varOrig aInfo) (varType aInfo) Nothing (abstract a (varType xInfo))- xInfo' = VarInfo- { varType = xType'- , varValue = fmap (lambdaT xType' (varOrig aInfo) Nothing . abstract a) (varValue xInfo)- , varIsAssumption = varIsAssumption xInfo- , varIsTopLevel = varIsTopLevel xInfo- , varModality = Id- , modAccum = Id- , varOrig = varOrig xInfo- , varDeclaredAssumptions = varDeclaredAssumptions xInfo \\ [a]- , varLocation = varLocation xInfo- }- xs' = map (fmap (insertExplicitAssumptionFor' a (x, xInfo))) xs--collectScopeDecls :: Eq var => [TypeErrorInScopedContext var] -> [(var, VarInfo var)] -> [(var, VarInfo var)] -> TypeCheck var ([Decl var], [TypeErrorInScopedContext var])-collectScopeDecls errs recentVars (decl@(var, VarInfo{..}) : vars)- | varIsAssumption = do- (used, recentVars') <- makeAssumptionExplicit decl recentVars- -- only issue unused vars error if there were no other errors previously- -- when (null errs) $ do- unusedErr <-- if null errs && not used- then local (\c -> c { location = varLocation }) $- pure <$> fromTypeError (TypeErrorUnusedVariable var varType)- else return []- collectScopeDecls (errs <> unusedErr) recentVars' vars- | otherwise = do- collectScopeDecls errs (decl : recentVars) vars-collectScopeDecls errs recentVars [] = do- loc <- asks location- return (toDecl loc <$> recentVars, errs)- where- toDecl loc (var, VarInfo{..}) = Decl- { declName = var- , declType = varType- , declValue = varValue- , declIsAssumption = varIsAssumption- , declUsedVars = varDeclaredAssumptions- , declLocation = updatePosition (varOrig >>= fmap fst . Rzk.hasPosition . fromVarIdent) <$> loc -- FIXME- }- updatePosition Nothing l = l- updatePosition (Just lineNo) l = l { locationLine = Just lineNo }--abstractAssumption :: Eq var => (var, VarInfo var) -> Decl var -> Decl var-abstractAssumption (var, VarInfo{..}) Decl{..} = Decl- { declName = declName- , declType = typeFunT varOrig varType Nothing (abstract var declType)- , declValue = (\body -> lambdaT newDeclType varOrig Nothing (abstract var body)) <$> declValue- , declIsAssumption = declIsAssumption- , declUsedVars = declUsedVars- , declLocation = declLocation- }- where- newDeclType = typeFunT varOrig varType Nothing (abstract var declType)--data OutputDirection = TopDown | BottomUp- deriving (Eq)--block :: OutputDirection -> [String] -> String-block TopDown = intercalate "\n"-block BottomUp = intercalate "\n" . reverse--namedBlock :: OutputDirection -> String -> [String] -> String-namedBlock dir name lines_ = block dir $- name : map indent lines_- where- indent = intercalate "\n" . (map (" " ++)) . lines--ppContext' :: OutputDirection -> Context VarIdent -> String-ppContext' dir ctx@Context{..} = block dir $ dropWhile null- [ block TopDown- [ case location of- _ | dir == TopDown -> "" -- FIXME- Just (LocationInfo (Just path) (Just lineNo)) ->- path <> " (line " <> show lineNo <> "):"- Just (LocationInfo (Just path) _) ->- path <> ":"- _ -> ""- , case currentCommand of- Just (Rzk.CommandDefine _loc name _vars _params _ty _term) ->- " Error occurred when checking\n #define " <> Rzk.printTree name- Just (Rzk.CommandPostulate _loc name _vars _params _ty ) ->- " Error occurred when checking\n #postulate " <> Rzk.printTree name- Just (Rzk.CommandCheck _loc term ty) ->- " Error occurred when checking\n " <> Rzk.printTree term <> " : " <> Rzk.printTree ty- Just (Rzk.CommandCompute _loc term) ->- " Error occurred when computing\n " <> Rzk.printTree term- Just (Rzk.CommandComputeNF _loc term) ->- " Error occurred when computing NF for\n " <> Rzk.printTree term- Just (Rzk.CommandComputeWHNF _loc term) ->- " Error occurred when computing WHNF for\n " <> Rzk.printTree term- Just (Rzk.CommandSetOption _loc optionName _optionValue) ->- " Error occurred when trying to set option\n #set-option " <> show optionName- Just command@Rzk.CommandUnsetOption{} ->- " Error occurred when trying to unset option\n " <> Rzk.printTree command- Just command@Rzk.CommandAssume{} ->- " Error occurred when checking assumption\n " <> Rzk.printTree command- Just (Rzk.CommandSection _loc name) ->- " Error occurred when checking\n #section " <> Rzk.printTree name- Just (Rzk.CommandSectionEnd _loc name) ->- " Error occurred when checking\n #end " <> Rzk.printTree name- Nothing -> " Error occurred outside of any command!"- ]- , ""- , case filter (/= topeTopT) localTopes of- [] -> "Local tope context is unrestricted (⊤)."- localTopes' -> namedBlock TopDown "Local tope context:"- [ " " <> show (untyped tope)- | tope <- localTopes' ]- , ""- , block dir- [ "when " <> ppAction 0 action- | action <- actionStack ]- , namedBlock TopDown "Definitions in context:"- [ block dir- [ show (Pure x :: Term') <> " : " <> show (untyped ty)- | (x, ty) <- reverse (varTypes ctx) ] ]- ]--doesShadowName :: VarIdent -> TypeCheck var [VarIdent]-doesShadowName name = asks $ \ctx ->- filter (name ==) (mapMaybe snd (varOrigs ctx))--checkTopLevelDuplicate :: VarIdent -> TypeCheck var ()-checkTopLevelDuplicate name = do- doesShadowName name >>= \case- [] -> return ()- collisions -> issueTypeError $- TypeErrorDuplicateTopLevel collisions name--checkNameShadowing :: VarIdent -> TypeCheck var ()-checkNameShadowing name = do- doesShadowName name >>= \case- [] -> return ()- collisions -> issueWarning $- Rzk.printTree (getVarIdent name) <> " shadows an existing definition:"- <> unlines- [ " " <> ppVarIdentWithLocation name- , "previous top-level definitions found at"- , intercalate "\n"- [ " " <> ppVarIdentWithLocation prev | prev <- collisions ] ]--withLocation :: LocationInfo -> TypeCheck var a -> TypeCheck var a-withLocation loc = local $ \Context{..} -> Context { location = Just loc, .. }--withCommand :: Rzk.Command -> TypeCheck VarIdent ([Decl'], [TypeErrorInScopedContext VarIdent]) -> TypeCheck VarIdent ([Decl'], [TypeErrorInScopedContext VarIdent])-withCommand command tc = local f $ do- result <- (Right <$> tc) `catchError` (return . Left)- case result of- Left err -> return ([], [err])- Right (decls, errs) -> return (decls, errs)- where- f Context{..} = Context- { currentCommand = Just command- , location = updatePosition (Rzk.hasPosition command) <$> location- , .. }- updatePosition pos loc = loc { locationLine = fst <$> pos }--localDecls :: [Decl VarIdent] -> TypeCheck VarIdent a -> TypeCheck VarIdent a-localDecls [] = id-localDecls (decl : decls) = localDecl decl . localDecls decls--localDeclsPrepared :: [Decl VarIdent] -> TypeCheck VarIdent a -> TypeCheck VarIdent a-localDeclsPrepared [] = id-localDeclsPrepared (decl : decls) = localDeclPrepared decl . localDeclsPrepared decls--localDecl :: Decl VarIdent -> TypeCheck VarIdent a -> TypeCheck VarIdent a-localDecl (Decl x ty term isAssumption vars loc) tc = do- ty' <- whnfT ty- term' <- traverse whnfT term- localDeclPrepared (Decl x ty' term' isAssumption vars loc) tc--localDeclPrepared :: Decl VarIdent -> TypeCheck VarIdent a -> TypeCheck VarIdent a-localDeclPrepared (Decl x ty term isAssumption vars loc) tc = do- checkTopLevelDuplicate x- local update tc- where- update = addVarInCurrentScope x VarInfo- { varType = ty- , varValue = term- , varOrig = Just x- , varModality = Id- , modAccum = Id- , varIsAssumption = isAssumption- , varIsTopLevel = True- , varDeclaredAssumptions = vars- , varLocation = loc- }--type TypeCheck var = ReaderT (Context var) (Except (TypeErrorInScopedContext var))--freeVarsT_ :: Eq var => TermT var -> TypeCheck var [var]-freeVarsT_ term = do- types <- asks varTypes- let typeOfVar' x =- case lookup x types of- Nothing -> panicImpossible "undefined variable"- Just ty -> ty- return (freeVarsT typeOfVar' term)--traceStartAndFinish :: Show a => String -> a -> a-traceStartAndFinish tag = trace ("start [" <> tag <> "]") .- (\x -> trace ("finish [" <> tag <> "] with " <> show x) x)--entail :: Eq var => [TermT var] -> TermT var -> Bool-entail topes tope = all (`solveRHS` tope) $- saturateTopes (allTopePoints tope) <$>- simplifyLHSwithDisjunctions topes'- where- topes' = nubTermT (topes <> generateTopesForPoints (allTopePoints tope))--entailM :: Eq var => [TermT var] -> TermT var -> TypeCheck var Bool-entailM topes tope = do- -- genTopes <- generateTopesForPointsM (allTopePoints tope)- discreteAxioms <- generateTopesForModalCubeVarsM- invAxioms <- mapM nfTope (concatMap generateInvAxioms topes)- let flipAxioms = concatMap generateFlipAxioms topes- flatAxioms = concatMap generateFlatAxioms topes- sharpAxioms = concatMap generateSharpAxioms topes- topes' = nubTermT (topes <> discreteAxioms <> flipAxioms <> invAxioms <> flatAxioms <> sharpAxioms)- topes'' = simplifyLHSwithDisjunctions topes'- topes''' = saturateTopes (allTopePoints tope) <$> topes''- prettyTopes <- mapM ppTermInContext (saturateTopes (allTopePoints tope) (simplifyLHS topes'))- prettyTope <- ppTermInContext tope- traceTypeCheck Debug- ("entail " <> intercalate ", " prettyTopes <> " |- " <> prettyTope) $- and <$> mapM (`solveRHSM` tope) topes'''--generateFlipAxioms :: TermT var -> [TermT var]-generateFlipAxioms = \case- TopeEQT _ t Cube2_0T{} -> [topeEQT (modExtractT cube2T Id Op (cubeFlipT t)) cube2_1T]- TopeEQT _ Cube2_0T{} t -> [topeEQT (modExtractT cube2T Id Op (cubeFlipT t)) cube2_1T]- TopeEQT _ t Cube2_1T{} -> [topeEQT (modExtractT cube2T Id Op (cubeFlipT t)) cube2_0T]- TopeEQT _ Cube2_1T{} t -> [topeEQT (modExtractT cube2T Id Op (cubeFlipT t)) cube2_0T]- _ -> []--generateInvAxioms :: TermT var -> [TermT var]-generateInvAxioms = \case- TypeModalT _ Op inner -> [topeUninvT inner]- t -> [typeModalT topeT Op (topeInvT t)]---generateFlatAxioms :: TermT var -> [TermT var]-generateFlatAxioms = \case- TypeModalT _ Flat inner -> [inner]- _ -> []---generateSharpAxioms :: TermT var -> [TermT var]-generateSharpAxioms = \case- t -> [typeModalT topeT Sharp t]--generateTopesForModalCubeVarsM :: Eq var => TypeCheck var [TermT var]-generateTopesForModalCubeVarsM = do- infos <- asks varInfos- fmap (nubTermT . concat) $ forM infos $ \(var, info) -> do- ty' <- whnfT (varType info)- case ty' of- TypeModalT _ Flat inner -> do- inner' <- whnfT inner- if inner' == cube2T- then do- let pt = modExtractT cube2T Id Flat (Pure var)- return [topeOrT (topeEQT pt cube2_0T) (topeEQT pt cube2_1T)]- else return []- _ -> return []--entailTraceM :: Eq var => [TermT var] -> TermT var -> TypeCheck var Bool-entailTraceM topes tope = do- topes' <- mapM ppTermInContext topes- tope' <- ppTermInContext tope- result <- trace ("entail " <> intercalate ", " topes' <> " |- " <> tope') $- topes `entailM` tope- return $ trace (" " <> show result) result--nubTermT :: Eq var => [TermT var] -> [TermT var]-nubTermT [] = []-nubTermT (t:ts) = t : nubTermT (filter (/= t) ts)--saturateTopes :: Eq var => [TermT var] -> [TermT var] -> [TermT var]-saturateTopes _points topes = saturateWith- (\tope ts -> tope `elem` ts)- generateTopes- topes---- FIXME: cleanup-saturateWith :: (a -> [a] -> Bool) -> ([a] -> [a] -> [a]) -> [a] -> [a]-saturateWith elem' step zs = go (nub' zs) []- where- go lastNew xs- | null new = lastNew- | otherwise = lastNew <> go new xs'- where- xs' = lastNew <> xs- new = filter (not . (`elem'` xs')) (nub' $ step lastNew xs)- nub' [] = []- nub' (x:xs) = x : nub' (filter (not . (`elem'` [x])) xs)--generateTopes :: Eq var => [TermT var] -> [TermT var] -> [TermT var]-generateTopes newTopes oldTopes- | topeBottomT `elem` newTopes = []- | topeEQT cube2_0T cube2_1T `elem` newTopes = [topeBottomT]- | length oldTopes > 100 = [] -- FIXME- | otherwise = concat- [ -- symmetry EQ- [ topeEQT y x | TopeEQT _ty x y <- newTopes ]- -- transitivity EQ (1)- , [ topeEQT x z- | TopeEQT _ty x y : newTopes' <- tails newTopes- , TopeEQT _ty y' z <- newTopes' <> oldTopes- , y == y' ]- -- transitivity EQ (2)- , [ topeEQT x z- | TopeEQT _ty y z : newTopes' <- tails newTopes- , TopeEQT _ty x y' <- newTopes' <> oldTopes- , y == y' ]-- -- transitivity LEQ (1)- , [ topeLEQT x z- | TopeLEQT _ty x y : newTopes' <- tails newTopes- , TopeLEQT _ty y' z <- newTopes' <> oldTopes- , y == y' ]- -- transitivity LEQ (2)- , [ topeLEQT x z- | TopeLEQT _ty y z : newTopes' <- tails newTopes- , TopeLEQT _ty x y' <- newTopes' <> oldTopes- , y == y' ]-- -- antisymmetry LEQ- , [ topeEQT x y- | TopeLEQT _ty x y : newTopes' <- tails newTopes- , TopeLEQT _ty y' x' <- newTopes' <> oldTopes- , y == y'- , x == x' ]-- -- FIXME: special case of substitution of EQ- -- transitivity EQ-LEQ (1)- , [ topeLEQT x z- | TopeEQT _ty y z : newTopes' <- tails newTopes- , TopeLEQT _ty x y' <- newTopes' <> oldTopes- , y == y' ]-- -- FIXME: special case of substitution of EQ- -- transitivity EQ-LEQ (2)- , [ topeLEQT x z- | TopeEQT _ty x y : newTopes' <- tails newTopes- , TopeLEQT _ty y' z <- newTopes' <> oldTopes- , y == y' ]-- -- FIXME: special case of substitution of EQ- -- transitivity EQ-LEQ (3)- , [ topeLEQT x z- | TopeLEQT _ty y z : newTopes' <- tails newTopes- , TopeEQT _ty x y' <- newTopes' <> oldTopes- , y == y' ]-- -- FIXME: special case of substitution of EQ- -- transitivity EQ-LEQ (4)- , [ topeLEQT x z- | TopeLEQT _ty x y : newTopes' <- tails newTopes- , TopeEQT _ty y' z <- newTopes' <> oldTopes- , y == y' ]-- -- FIXME: consequence of LEM for LEQ and antisymmetry for LEQ- , [ topeEQT x y | TopeLEQT _ty x y@Cube2_0T{} <- newTopes ]- -- FIXME: consequence of LEM for LEQ and antisymmetry for LEQ- , [ topeEQT x y | TopeLEQT _ty x@Cube2_1T{} y <- newTopes ]- ]--generateTopesForPoints :: Eq var => [TermT var] -> [TermT var]-generateTopesForPoints points = nubTermT $ concat- [ [ topeOrT (topeLEQT x y) (topeLEQT y x)- | x : points' <- tails (filter (`notElem` [cube2_0T, cube2_1T]) points)- , y <- points'- , x /= y ]- ]--generateTopesForPointsM :: Eq var => [TermT var] -> TypeCheck var [TermT var]-generateTopesForPointsM points = do- let pairs = nub $ concat- [ [ (x, y)- | x : points' <- tails (filter (`notElem` [cube2_0T, cube2_1T]) points)- , y <- points'- , x /= y ]- ]- stars <- forM points $ \x -> do - xType <- typeOf x - return $ if (xType == cubeUnitT) - then [topeEQT x cubeUnitStarT] - else []- topes <- forM pairs $ \(x, y) -> do- xType <- typeOf x- yType <- typeOf y- return $ if (xType == cube2T) && (yType == cube2T)- then [topeOrT (topeLEQT x y) (topeLEQT y x)]- else []- return (concat (topes ++ stars))--allTopePoints :: Eq var => TermT var -> [TermT var]-allTopePoints = nubTermT . foldMap subPoints . nubTermT . topePoints--topePoints :: TermT var -> [TermT var]-topePoints = \case- TopeTopT{} -> []- TopeBottomT{} -> []- TopeAndT _ l r -> topePoints l <> topePoints r- TopeOrT _ l r -> topePoints l <> topePoints r- TopeEQT _ x y -> [x, y]- TopeLEQT _ x y -> [x, y]- _ -> []--subPoints :: TermT var -> [TermT var]-subPoints = \case- p@(PairT _ x y) -> p : foldMap subPoints [x, y]- p@Pure{} -> [p]- p@(Free (AnnF TypeInfo{..} _))- | Cube2T{} <- infoType -> [p]- | CubeUnitT{} <- infoType -> [p]- _ -> []---- | Simplify the context, including disjunctions. See also 'simplifyLHS'.-simplifyLHSwithDisjunctions :: Eq var => [TermT var] -> [[TermT var]]-simplifyLHSwithDisjunctions topes = map nubTermT $- case topes of- [] -> [[]]- TopeTopT{} : topes' -> simplifyLHSwithDisjunctions topes'- TopeBottomT{} : _ -> [[topeBottomT]]- TopeAndT _ l r : topes' -> simplifyLHSwithDisjunctions (l : r : topes')-- -- NOTE: it is inefficient to expand disjunctions immediately- TopeOrT _ l r : topes' -> simplifyLHSwithDisjunctions (l : topes') <> simplifyLHSwithDisjunctions (r : topes')-- TopeEQT _ (PairT _ x y) (PairT _ x' y') : topes' ->- simplifyLHSwithDisjunctions (topeEQT x x' : topeEQT y y' : topes')- t : topes' -> map (t :) (simplifyLHSwithDisjunctions topes')---- | Simplify the context, except disjunctions. See also 'simplifyLHSwithDisjunctions'.-simplifyLHS :: Eq var => [TermT var] -> [TermT var]-simplifyLHS topes = nubTermT $- case topes of- [] -> []- TopeTopT{} : topes' -> simplifyLHS topes'- TopeBottomT{} : _ -> [topeBottomT]- TopeAndT _ l r : topes' -> simplifyLHS (l : r : topes')-- -- NOTE: it is inefficient to expand disjunctions immediately- -- TopeOrT _ l r : topes' -> simplifyLHS (l : topes') <> simplifyLHS (r : topes')-- TopeEQT _ (PairT _ x y) (PairT _ x' y') : topes' ->- simplifyLHS (topeEQT x x' : topeEQT y y' : topes')- t : topes' -> t : simplifyLHS topes'--solveRHSM :: Eq var => [TermT var] -> TermT var -> TypeCheck var Bool-solveRHSM topes tope =- case tope of- _ | topeBottomT `elem` topes -> return True- TopeTopT{} -> return True- TopeEQT _ty (PairT _ty1 x y) (PairT _ty2 x' y') ->- solveRHSM topes $ topeAndT- (topeEQT x x')- (topeEQT y y')- TopeEQT _ty (PairT TypeInfo{ infoType = CubeProductT _ cubeI cubeJ } x y) r ->- solveRHSM topes $ topeAndT- (topeEQT x (firstT cubeI r))- (topeEQT y (secondT cubeJ r))- TopeEQT _ty l (PairT TypeInfo{ infoType = CubeProductT _ cubeI cubeJ } x y) ->- solveRHSM topes $ topeAndT- (topeEQT (firstT cubeI l) x)- (topeEQT (secondT cubeJ l) y)- TopeEQT _ty l r- | or- [ l == r- , tope `elem` topes- , topeEQT r l `elem` topes- ] -> return True- TopeEQT _ty l r -> do - lType <- typeOf l - rType <- typeOf r - return $ case (lType, rType) of- (CubeUnitT{}, CubeUnitT{}) -> True - _ -> False- TopeLEQT _ty l r- | l == r -> return True- | solveRHS topes (topeEQT l r) -> return True- | solveRHS topes (topeEQT l cube2_0T) -> return True- | solveRHS topes (topeEQT r cube2_1T) -> return True- TopeAndT _ l r -> (&&)- <$> solveRHSM topes l- <*> solveRHSM topes r- _ | tope `elem` topes -> return True- TopeOrT _ l r -> do- l' <- solveRHSM topes l- r' <- solveRHSM topes r- if (l' || r')- then return True- else do- lems <- generateTopesForPointsM (allTopePoints tope)- let lems' = [ lem | lem@(TopeOrT _ t1 t2) <- lems, all (`notElem` topes) [t1, t2] ]- case lems' of- TopeOrT _ t1 t2 : _ -> do- l'' <- solveRHSM (saturateTopes [] (t1 : topes)) tope- r'' <- solveRHSM (saturateTopes [] (t2 : topes)) tope- return (l'' && r'')- _ -> return False- _ -> return False--solveRHS :: Eq var => [TermT var] -> TermT var -> Bool-solveRHS topes tope =- case tope of- _ | topeBottomT `elem` topes -> True- TopeTopT{} -> True- TopeEQT _ty (PairT _ty1 x y) (PairT _ty2 x' y')- | solveRHS topes (topeEQT x x') && solveRHS topes (topeEQT y y') -> True- TopeEQT _ty (PairT TypeInfo{ infoType = CubeProductT _ cubeI cubeJ } x y) r- | solveRHS topes (topeEQT x (firstT cubeI r)) && solveRHS topes (topeEQT y (secondT cubeJ r)) -> True- TopeEQT _ty l (PairT TypeInfo{ infoType = CubeProductT _ cubeI cubeJ } x y)- | solveRHS topes (topeEQT (firstT cubeI l) x) && solveRHS topes (topeEQT (secondT cubeJ l) y) -> True- TopeEQT _ty l r -> or- [ l == r- , tope `elem` topes- , topeEQT r l `elem` topes- ]- TopeLEQT _ty l r- | l == r -> True- | solveRHS topes (topeEQT l r) -> True- | solveRHS topes (topeEQT l cube2_0T) -> True- | solveRHS topes (topeEQT r cube2_1T) -> True- -- TopeBottomT{} -> solveLHS topes tope- TopeAndT _ l r -> solveRHS topes l && solveRHS topes r- TopeOrT _ l r -> solveRHS topes l || solveRHS topes r- _ -> tope `elem` topes--checkTope :: Eq var => TermT var -> TypeCheck var Bool-checkTope tope = do- ctxTopes <- asks localTopes- performing (ActionContextEntails ctxTopes tope) $ do- topes' <- asks localTopesNF- tope' <- nfTope tope- topes' `entailM` tope'--checkTopeEntails :: Eq var => TermT var -> TypeCheck var Bool-checkTopeEntails tope = do- ctxTopes <- asks localTopes- performing (ActionContextEntailedBy ctxTopes tope) $ do- contextTopes <- asks localTopesNF- restrictionTope <- nfTope tope- let contextTopesRHS = foldr topeAndT topeTopT contextTopes- [restrictionTope] `entailM` contextTopesRHS--checkEntails :: Eq var => TermT var -> TermT var -> TypeCheck var Bool-checkEntails l r = do -- FIXME: add action- l' <- nfTope l- r' <- nfTope r- [l'] `entailM` r'--contextEntailedBy :: Eq var => TermT var -> TypeCheck var ()-contextEntailedBy tope = do- ctxTopes <- asks localTopes- performing (ActionContextEntailedBy ctxTopes tope) $ do- contextTopes <- asks localTopesNF- restrictionTope <- nfTope tope- let contextTopesRHS = foldr topeOrT topeBottomT contextTopes- [restrictionTope] `entailM` contextTopesRHS >>= \case- False -> issueTypeError $ TypeErrorTopeNotSatisfied [restrictionTope] contextTopesRHS- True -> return ()--contextEntails :: Eq var => TermT var -> TypeCheck var ()-contextEntails tope = do- ctxTopes <- asks localTopes- performing (ActionContextEntails ctxTopes tope) $ do- topeIsEntailed <- checkTope tope- topes' <- asks localTopesNF- unless topeIsEntailed $- issueTypeError $ TypeErrorTopeNotSatisfied topes' tope--topesEquiv :: Eq var => TermT var -> TermT var -> TypeCheck var Bool-topesEquiv expected actual = performing (ActionUnifyTerms expected actual) $ do- expected' <- nfT expected- actual' <- nfT actual- (&&)- <$> [expected'] `entailM` actual'- <*> [actual'] `entailM` expected'--contextEquiv :: Eq var => [TermT var] -> TypeCheck var ()-contextEquiv topes = do- ctxTopes <- asks localTopes- performing (ActionContextEquiv ctxTopes topes) $ do- contextTopes <- asks localTopesNF- recTopes <- mapM nfTope topes- let contextTopesRHS = foldr topeOrT topeBottomT contextTopes- recTopesRHS = foldr topeOrT topeBottomT recTopes- contextTopes `entailM` recTopesRHS >>= \case- False -> issueTypeError $ TypeErrorTopeNotSatisfied contextTopes recTopesRHS- True -> return ()- recTopes `entailM` contextTopesRHS >>= \case- False -> issueTypeError $ TypeErrorTopeNotSatisfied recTopes contextTopesRHS- True -> return ()--switchVariance :: TypeCheck var a -> TypeCheck var a-switchVariance = local $ \Context{..} -> Context- { covariance = switch covariance, .. }- where- switch Covariant = Contravariant- switch Contravariant = Covariant- switch Invariant = Invariant--setVariance :: Covariance -> TypeCheck var a -> TypeCheck var a-setVariance variance = local $ \Context{..} -> Context- { covariance = variance, .. }--enterScopeContext :: Maybe VarIdent -> TModality -> TermT var -> Maybe (TermT var) -> Context var -> Context (Inc var)-enterScopeContext orig md ty val context =- addVarInCurrentScope Z VarInfo- { varType = S <$> ty- , varValue = fmap (S <$>) val- , varOrig = orig- , varModality = md- , modAccum = Id- , varIsAssumption = False- , varIsTopLevel = False- , varDeclaredAssumptions = []- , varLocation = location context- }- (S <$> context)--enterScope :: Maybe VarIdent -> TermT var -> TypeCheck (Inc var) b -> TypeCheck var b-enterScope orig ty action = do- newContext <- asks (enterScopeContext orig Id ty Nothing)- lift $ withExceptT (ScopedTypeError orig) $- runReaderT action newContext--enterScopeWithBind :: Maybe VarIdent -> TModality -> TermT var -> TermT var -> TypeCheck (Inc var) b -> TypeCheck var b-enterScopeWithBind orig md ty val action = do- newContext <- asks (enterScopeContext orig md ty (Just val))- lift $ withExceptT (ScopedTypeError orig) $- runReaderT action newContext--enterModality :: TModality -> TypeCheck var b -> TypeCheck var b-enterModality md action = do- newContext <- asks (applyModality md)- lift $ runReaderT action newContext--performing :: Eq var => Action var -> TypeCheck var a -> TypeCheck var a-performing action tc = do- ctx@Context{..} <- ask- unless (length actionStack < 1000) $ -- FIXME: which depth is reasonable? factor out into a parameter- issueTypeError $ TypeErrorOther "maximum depth reached"- traceTypeCheck Debug (ppSomeAction (varOrigs ctx) (length actionStack) action) $- local (const Context { actionStack = action : actionStack, .. }) $ tc--stripTypeRestrictions :: TermT var -> TermT var-stripTypeRestrictions (TypeRestrictedT _ty ty _restriction) = stripTypeRestrictions ty-stripTypeRestrictions t = t---- | Perform at most one \(\eta\)-expansion at the top-level to assist unification.-etaMatch :: Eq var => Maybe (TermT var) -> TermT var -> TermT var -> TypeCheck var (TermT var, TermT var)--- FIXME: double check the next 3 rules-etaMatch _mterm expected@TypeRestrictedT{} actual@TypeRestrictedT{} = pure (expected, actual)-etaMatch mterm expected (TypeRestrictedT _ty ty _rs) = etaMatch mterm expected ty-etaMatch (Just term) expected@TypeRestrictedT{} actual =- etaMatch (Just term) expected (typeRestrictedT actual [(topeTopT, term)])--- -------------------------------------etaMatch _mterm expected@LambdaT{} actual@LambdaT{} = pure (expected, actual)-etaMatch _mterm expected@PairT{} actual@PairT{} = pure (expected, actual)-etaMatch _mterm expected@LambdaT{} actual = do- actual' <- etaExpand actual- pure (expected, actual')-etaMatch _mterm expected actual@LambdaT{} = do- expected' <- etaExpand expected- pure (expected', actual)-etaMatch _mterm expected@PairT{} actual = do- actual' <- etaExpand actual- pure (expected, actual')-etaMatch _mterm expected actual@PairT{} = do- expected' <- etaExpand expected- pure (expected', actual)-etaMatch _mterm expected actual = pure (expected, actual)--etaExpand :: Eq var => TermT var -> TypeCheck var (TermT var)-etaExpand term@LambdaT{} = pure term-etaExpand term@PairT{} = pure term-etaExpand term = do- ty <- typeOf term- case stripTypeRestrictions ty of- TypeFunT _ty orig param mtope ret -> pure $- lambdaT ty orig (Just (param, mtope))- (appT ret (S <$> term) (Pure Z))-- TypeSigmaT _ty _orig a b -> pure $- pairT ty- (firstT a term)- (secondT (substituteT (firstT a term) b) term)-- CubeProductT _ty a b -> pure $- pairT ty- (firstT a term)- (secondT b term)-- _ -> pure term--inCubeLayer :: Eq var => TermT var -> TypeCheck var Bool-inCubeLayer = \case- RecBottomT{} -> pure False- UniverseT{} -> pure False-- UniverseCubeT{} -> pure True- CubeProductT{} -> pure True- CubeUnitT{} -> pure True- CubeUnitStarT{} -> pure True- Cube2T{} -> pure True- Cube2_0T{} -> pure True- Cube2_1T{} -> pure True-- t -> typeOf t >>= inCubeLayer--inTopeLayer :: Eq var => TermT var -> TypeCheck var Bool-inTopeLayer = \case- RecBottomT{} -> pure False- UniverseT{} -> pure False-- UniverseCubeT{} -> pure True- UniverseTopeT{} -> pure True-- CubeProductT{} -> pure True- CubeUnitT{} -> pure True- CubeUnitStarT{} -> pure True- Cube2T{} -> pure True- Cube2_0T{} -> pure True- Cube2_1T{} -> pure True-- TopeTopT{} -> pure True- TopeBottomT{} -> pure True- TopeAndT{} -> pure True- TopeOrT{} -> pure True- TopeEQT{} -> pure True- TopeLEQT{} -> pure True-- TypeFunT _ty orig param _mtope ret -> do- enterScope orig param $ inTopeLayer ret-- t -> typeOfUncomputed t >>= inTopeLayer--tryRestriction :: Eq var => TermT var -> TypeCheck var (Maybe (TermT var))-tryRestriction = \case- TypeRestrictedT _ _ rs -> do- let go [] = pure Nothing- go ((tope, term') : rs') = do- checkTope tope >>= \case- True -> pure (Just term')- False -> go rs'- go rs- _ -> pure Nothing---- | Compute a typed term to its WHNF.------ >>> unsafeTypeCheck' $ whnfT "(\\ (x : Unit) -> x) unit"--- unit : Unit-whnfT :: Eq var => TermT var -> TypeCheck var (TermT var)-whnfT tt = performing (ActionWHNF tt) $ case tt of- -- use cached result if it exists- Free (AnnF info _)- | Just tt' <- infoWHNF info -> pure tt'-- -- universe constants- UniverseT{} -> pure tt- UniverseCubeT{} -> pure tt- UniverseTopeT{} -> pure tt-- -- cube layer (except vars, pairs, and applications)- CubeProductT{} -> nfTope tt- CubeUnitT{} -> pure tt- CubeUnitStarT{} -> pure tt- Cube2T{} -> pure tt- Cube2_0T{} -> pure tt- Cube2_1T{} -> pure tt- CubeFlipT{} -> nfTope tt- CubeUnflipT{} -> nfTope tt-- -- tope layer (except vars, pairs of points, and applications)- TopeTopT{} -> pure tt- TopeBottomT{} -> pure tt- TopeAndT{} -> nfTope tt- TopeOrT{} -> nfTope tt- TopeEQT{} -> nfTope tt- TopeLEQT{} -> nfTope tt- TopeInvT{} -> nfTope tt- TopeUninvT{} -> nfTope tt-- -- type layer terms that should not be evaluated further- LambdaT{} -> pure tt- PairT{} -> pure tt- ReflT{} -> pure tt- TypeFunT{} -> pure tt- TypeSigmaT{} -> pure tt- TypeIdT{} -> pure tt- RecBottomT{} -> pure tt- TypeUnitT{} -> pure tt- UnitT{} -> pure tt-- -- type ascriptions are ignored, since we already have a typechecked term- TypeAscT _ty term _ty' -> whnfT term-- -- check if we have cube or a tope term (if so, compute NF)- _ -> typeOf tt >>= \case- UniverseCubeT{} -> nfTope tt- UniverseTopeT{} -> nfTope tt-- -- CubeUnitT{} -> pure cubeUnitStarT -- compute an expression of 1 cube to its only point- TypeUnitT{} -> pure unitT -- compute an expression of Unit type to unit- -- FIXME: next line is ad hoc, should be improved!- TypeRestrictedT _info TypeUnitT{} _rs -> pure unitT -- compute an expression of Unit type to unit-- -- check if we have cube point term (if so, compute NF)- typeOf_tt -> typeOf typeOf_tt >>= \case- UniverseCubeT{} -> nfTope tt-- -- now we are in the type layer- _ -> fmap termIsWHNF $ do- -- check if we are in the empty context- inBottom <- asks localTopesEntailBottom- if inBottom- then pure recBottomT -- if so, reduce to recBOT- else tryRestriction typeOf_tt >>= \case- Just tt' -> whnfT tt'- Nothing -> case tt of- t@(Pure var) ->- valueOfVar var >>= \case- Nothing -> pure t- Just term -> whnfT term-- AppT ty f x ->- whnfT f >>= \case- LambdaT _ty _orig _arg body ->- whnfT (substituteT x body)- f' -> typeOf f' >>= \case- TypeFunT _ty _orig _param (Just tope) UniverseTopeT{} -> do- topeAndT- <$> (AppT ty <$> nfT f' <*> nfT x)- <*> nfT (substituteT x tope)- -- FIXME: this seems to be a hack, and will not work in all situations!- -- FIXME: need to check performance of this code thoroughly- -- FIXME: for now, it seems to add ~2x slowdown- TypeFunT info _orig _param _mtope ret@TypeRestrictedT{}- | TypeRestrictedT{} <- infoType info -> pure (AppT ty f' x)- | otherwise -> do- let ret' = substituteT x ret- tryRestriction ret' >>= \case -- FIXME: too many unnecessary checks?- Nothing -> pure (AppT ty { infoType = ret' } f' x)- Just tt' -> whnfT tt'- _ -> pure (AppT ty f' x)- - LetT _ty _orig _mparam val body ->- whnfT (substituteT val body)- LetModT _ty _orig app inn _mparam val body -> do- val' <- whnfT val >>= \case- ModAppT _ md t | md == inn -> whnfT t- b' -> do- bty <- typeOf b' >>= \case- TypeModalT _ _ t -> pure t- _ -> panicImpossible "not modal in letmod"- pure (modExtractT bty app inn b')- whnfT (substituteT val' body)- FirstT ty t ->- whnfT t >>= \case- PairT _ l _r -> whnfT l- t' -> pure (FirstT ty t')-- SecondT ty t ->- whnfT t >>= \case- PairT _ _l r -> whnfT r- t' -> pure (SecondT ty t')- TypeModalT ty md b -> do- b' <- whnfT b- pure (TypeModalT ty md b')- ModAppT ty md b -> do- whnfT b >>= \case- ModExtractT _ _ inn t | inn == md -> whnfT t- b' -> pure $ ModAppT ty md b'- ModExtractT ty app inn b -> do- whnfT b >>= \case- ModAppT _ md t | inn == md -> whnfT t- b' -> pure (ModExtractT ty app inn b')- IdJT ty tA a tC d x p ->- whnfT p >>= \case- ReflT{} -> whnfT d- p' -> pure (IdJT ty tA a tC d x p')-- RecOrT _ty rs -> do- let go [] = pure Nothing- go ((tope, tt') : rs') = do- checkTope tope >>= \case- True -> pure (Just tt')- False -> go rs'- go rs >>= \case- Just tt' -> whnfT tt'- Nothing- | [tt'] <- nubTermT (map snd rs) -> whnfT tt'- | otherwise -> pure tt-- TypeRestrictedT ty type_ rs -> do- rs' <- traverse (\(tope, term) -> (,) <$> nfT tope <*> pure term) rs- case filter ((/= topeBottomT) . fst) rs' of- [] -> whnfT type_ -- get rid of restrictions at BOT- rs'' -> TypeRestrictedT ty <$> whnfT type_ <*> pure rs''--nfTope :: Eq var => TermT var -> TypeCheck var (TermT var)-nfTope tt = performing (ActionNF tt) $ fmap termIsNF $ case tt of- Pure var ->- valueOfVar var >>= \case- Nothing -> return tt- Just term -> nfTope term-- -- see if normal form is already available- Free (AnnF info _) | Just tt' <- infoNF info -> pure tt'-- -- universe constants- UniverseT{} -> pure tt- UniverseCubeT{} -> pure tt- UniverseTopeT{} -> pure tt-- -- cube layer constants- CubeUnitT{} -> pure tt- CubeUnitStarT{} -> pure tt- Cube2T{} -> pure tt- Cube2_0T{} -> pure tt- Cube2_1T{} -> pure tt-- -- type layer constants- TypeUnitT{} -> pure tt- UnitT{} -> pure tt-- -- cube layer with computation- CubeProductT _ty l r -> cubeProductT <$> nfTope l <*> nfTope r-- CubeFlipT _ t -> - nfTope t >>= \case- CubeUnflipT _ t' -> pure t' - Cube2_0T{} -> pure (modAppT (typeModalT cubeT Op cube2T) Op cube2_1T) - Cube2_1T{} -> pure (modAppT (typeModalT cubeT Op cube2T) Op cube2_0T) - t' -> pure (cubeFlipT t')-- CubeUnflipT ty t ->- nfTope t >>= \case- CubeFlipT _ t' -> pure t' - ModAppT _ Op Cube2_0T{} -> pure cube2_1T - ModAppT _ Op Cube2_1T{} -> pure cube2_0T - t' -> pure (CubeUnflipT ty t')-- -- tope layer constants- TopeTopT{} -> pure tt- TopeBottomT{} -> pure tt-- -- tope layer with computation- TopeAndT ty l r ->- nfTope l >>= \case- TopeBottomT{} -> pure topeBottomT- l' -> nfTope r >>= \case- TopeBottomT{} -> pure topeBottomT- r' -> pure (TopeAndT ty l' r')-- TopeOrT ty l r -> do- l' <- nfTope l- r' <- nfTope r- case (l', r') of- (TopeBottomT{}, _) -> pure r'- (_, TopeBottomT{}) -> pure l'- _ -> pure (TopeOrT ty l' r')-- TopeEQT ty l r -> TopeEQT ty <$> nfTope l <*> nfTope r- TopeLEQT ty l r -> TopeLEQT ty <$> nfTope l <*> nfTope r-- TopeInvT ty t ->- -- Match And/Or on the *unnormalized* input: nfTope of a shape-restricted- -- App produces a TopeAnd via shape-side-condition propagation, and- -- distributing inv over that synthetic conjunction loops forever because- -- the recursive topeInvT renormalizes the same App back into a TopeAnd.- case t of- TopeAndT _ phi psi -> nfTope $- modAppT (typeModalT universeT Op topeT) Op- (topeAndT- (modExtractT topeT Id Op (topeInvT phi))- (modExtractT topeT Id Op (topeInvT psi)))- TopeOrT _ phi psi -> nfTope $- modAppT (typeModalT universeT Op topeT) Op- (topeOrT- (modExtractT topeT Id Op (topeInvT phi))- (modExtractT topeT Id Op (topeInvT psi)))- _ ->- nfTope t >>= \case- TopeUninvT _ phi -> pure phi- TopeLEQT _ x y -> nfTope $- modAppT (typeModalT universeT Op topeT) Op- (topeLEQT- (modExtractT topeT Id Op (cubeFlipT y))- (modExtractT topeT Id Op (cubeFlipT x)))- TopeEQT _ x y -> nfTope $- modAppT (typeModalT universeT Op topeT) Op- (topeEQT- (modExtractT topeT Id Op (cubeFlipT y))- (modExtractT topeT Id Op (cubeFlipT x)))- t' -> pure (TopeInvT ty t')-- TopeUninvT ty t ->- nfTope t >>= \case- TopeInvT _ phi -> pure phi- ModAppT _ Op inner -> case inner of- TopeLEQT _ x y ->- nfTope $- (topeLEQT- (cubeUnflipT (modAppT (typeModalT cubeT Op cube2T) Op y))- (cubeUnflipT (modAppT (typeModalT cubeT Op cube2T) Op x)))-- TopeEQT _ x y ->- nfTope $- (topeEQT- (cubeUnflipT (modAppT (typeModalT cubeT Op cube2T) Op y))- (cubeUnflipT (modAppT (typeModalT cubeT Op cube2T) Op x)))-- TopeAndT _ phi psi ->- nfTope $- (topeAndT- (topeUninvT phi)- (topeUninvT psi))-- TopeOrT _ phi psi ->- nfTope $- (topeOrT- (topeUninvT phi)- (topeUninvT psi))-- inner' ->- pure $- TopeUninvT ty- (modAppT (typeModalT universeT Op topeT) Op inner')-- t' ->- pure (TopeUninvT ty t')-- -- type ascriptions are ignored, since we already have a typechecked term- TypeAscT _ty term _ty' -> nfTope term-- PairT ty l r -> PairT ty <$> nfTope l <*> nfTope r-- AppT ty f x ->- nfTope f >>= \case- LambdaT _ty _orig _arg body ->- nfTope (substituteT x body)- f' -> typeOfUncomputed f' >>= \case- TypeFunT _ty _orig _param (Just tope) UniverseTopeT{} -> do- topeAndT- <$> (AppT ty f' <$> nfTope x)- <*> nfTope (substituteT x tope)- _ -> AppT ty f' <$> nfTope x-- FirstT ty t ->- nfTope t >>= \case- PairT _ty x _y -> pure x- t' -> pure (FirstT ty t')-- SecondT ty t ->- nfTope t >>= \case- PairT _ty _x y -> pure y- t' -> pure (SecondT ty t')-- LambdaT ty orig _mparam body- | TypeFunT _ty _origF param mtope _ret <- infoType ty ->- LambdaT ty orig (Just (param, mtope)) <$> enterScope orig param (nfTope body)- LambdaT{} -> panicImpossible "lambda with a non-function type in the tope layer"- ModAppT ty md b -> - nfTope b >>= \case - ModExtractT _ _ inn t | inn == md -> pure t- b' -> pure $ ModAppT ty md b' - ModExtractT ty app inn b ->- nfTope b >>= \case- ModAppT _ md t | inn == md -> pure t- b' -> pure $ ModExtractT ty app inn b'- LetModT _ty _orig app inn _mparam val body -> do- val' <- nfTope val >>= \case- ModAppT _ md t | md == inn -> return t- b' -> do- ty <- typeOf b' >>= \case- TypeModalT _ _ t -> pure t- _ -> panicImpossible "not modal in letmod"- pure (modExtractT ty app inn b')- nfTope (substituteT val' body)-- TypeModalT ty md inner -> TypeModalT ty md <$> nfTope inner- LetT _ty _orig _mparam val body -> nfTope (substituteT val body)- TypeFunT{} -> panicImpossible "exposed function type in the tope layer"- TypeSigmaT{} -> panicImpossible "dependent sum type in the tope layer"- TypeIdT{} -> panicImpossible "identity type in the tope layer"- ReflT{} -> panicImpossible "refl in the tope layer"- IdJT{} -> panicImpossible "idJ eliminator in the tope layer"- TypeRestrictedT{} -> panicImpossible "extension types in the tope layer"-- RecOrT{} -> panicImpossible "recOR in the tope layer"- RecBottomT{} -> panicImpossible "recBOT in the tope layer"---- | Compute a typed term to its NF.------ >>> unsafeTypeCheck' $ nfT "(\\ (x : Unit) -> x) unit"--- unit : Unit-nfT :: Eq var => TermT var -> TypeCheck var (TermT var)-nfT tt = performing (ActionNF tt) $ case tt of- -- universe constants- UniverseT{} -> pure tt- UniverseCubeT{} -> pure tt- UniverseTopeT{} -> pure tt-- -- cube layer constants- CubeUnitT{} -> pure tt- CubeUnitStarT{} -> pure tt- Cube2T{} -> pure tt- Cube2_0T{} -> pure tt- Cube2_1T{} -> pure tt-- -- cube layer with computation- CubeProductT{} -> nfTope tt- CubeFlipT{} -> nfTope tt- CubeUnflipT{} -> nfTope tt-- -- tope layer constants- TopeTopT{} -> pure tt- TopeBottomT{} -> pure tt-- -- tope layer with computation- TopeAndT{} -> nfTope tt- TopeOrT{} -> nfTope tt- TopeEQT{} -> nfTope tt- TopeLEQT{} -> nfTope tt- TopeInvT{} -> nfTope tt- TopeUninvT{} -> nfTope tt-- -- type layer constants- ReflT ty _x -> pure (ReflT ty Nothing)- RecBottomT{} -> pure tt- TypeUnitT{} -> pure tt- UnitT{} -> pure tt-- -- type ascriptions are ignored, since we already have a typechecked term- TypeAscT _ty term _ty' -> nfT term-- -- now we are in the type layer- _ -> do- -- check if we are in the empty context- inBottom <- asks localTopesEntailBottom- if inBottom- then pure recBottomT -- if so, reduce to recBOT- else typeOf tt >>= tryRestriction >>= \case- Just tt' -> nfT tt'- Nothing -> case tt of- t@(Pure var) ->- valueOfVar var >>= \case- Nothing -> pure t- Just term -> nfT term-- TypeFunT ty orig param mtope ret -> do- param' <- nfT param- enterScope orig param' $ do- mtope' <- traverse nfT mtope- maybe id localTope mtope' $- TypeFunT ty orig param' mtope' <$> nfT ret- AppT ty f x ->- whnfT f >>= \case- LambdaT _ty _orig _arg body ->- nfT (substituteT x body)- f' -> typeOf f' >>= \case- TypeFunT _ty _orig _param (Just tope) UniverseTopeT{} -> do- topeAndT- <$> (AppT ty <$> nfT f' <*> nfT x)- <*> nfT (substituteT x tope)- _ -> AppT ty <$> nfT f' <*> nfT x- LetT _ty _orig _mparam val body ->- nfT (substituteT val body)- LetModT _ty _orig app inn _mparam val body -> do- val' <- whnfT val >>= \case- ModAppT _ md t | md == inn -> nfT t- b' -> do- bty <- typeOf b' >>= \case- TypeModalT _ _ t -> pure t- _ -> panicImpossible "not modal in letmod"- pure (modExtractT bty app inn b')- nfT (substituteT val' body)- LambdaT ty orig _mparam body -> do- case stripTypeRestrictions (infoType ty) of- TypeFunT _ty _orig param mtope _ret -> do- param' <- nfT param- enterScope orig param' $ do- mtope' <- traverse nfT mtope- maybe id localTope mtope' $- LambdaT ty orig (Just (param', mtope')) <$> nfT body- _ -> panicImpossible "lambda with a non-function type"--- TypeSigmaT ty orig a b -> do- a' <- nfT a- enterScope orig a' $ do- TypeSigmaT ty orig a' <$> nfT b- PairT ty l r -> PairT ty <$> nfT l <*> nfT r- FirstT ty t ->- whnfT t >>= \case- PairT _ l _r -> nfT l- t' -> FirstT ty <$> nfT t'- SecondT ty t ->- whnfT t >>= \case- PairT _ _l r -> nfT r- t' -> SecondT ty <$> nfT t'-- TypeIdT ty x _tA y -> TypeIdT ty <$> nfT x <*> pure Nothing <*> nfT y- IdJT ty tA a tC d x p ->- whnfT p >>= \case- ReflT{} -> nfT d- p' -> IdJT ty <$> nfT tA <*> nfT a <*> nfT tC <*> nfT d <*> nfT x <*> nfT p'-- RecOrT _ty rs -> do- let go [] = pure Nothing- go ((tope, tt') : rs') = do- checkTope tope >>= \case- True -> pure (Just tt')- False -> go rs'- go rs >>= \case- Just tt' -> nfT tt'- Nothing- | [tt'] <- nubTermT (map snd rs) -> nfT tt'- | otherwise -> pure tt- TypeModalT ty md b -> do- b' <- nfT b- pure (TypeModalT ty md b')- ModAppT ty md b -> do- whnfT b >>= \case- ModExtractT _ _ inn t | inn == md -> nfT t- b' -> ModAppT ty md <$> nfT b'- ModExtractT ty app inn b -> do- whnfT b >>= \case- ModAppT _ md t | inn == md -> nfT t- b' -> ModExtractT ty app inn <$> nfT b'- TypeRestrictedT ty type_ rs -> do- rs' <- forM rs $ \(tope, term) -> do- nfTope tope >>= \case- TopeBottomT{} -> pure Nothing- tope' -> do- term' <- localTope tope' $- nfT term- return (Just (tope', term'))- case catMaybes rs' of- [] -> nfT type_- rs'' -> TypeRestrictedT ty <$> nfT type_ <*> pure rs''--checkDefinedVar :: VarIdent -> TypeCheck VarIdent ()-checkDefinedVar x = asks (lookup x . varInfos) >>= \case- Nothing -> issueTypeError $ TypeErrorUndefined x- Just _ty -> return ()--valueOfVar :: Eq var => var -> TypeCheck var (Maybe (TermT var))-valueOfVar x = asks (lookup x . varValues) >>= \case- Nothing -> issueTypeError $ TypeErrorUndefined x- Just ty -> return ty--typeOfVar :: Eq var => var -> TypeCheck var (TermT var)-typeOfVar x = asks (lookup x . varTypes) >>= \case- Nothing -> issueTypeError $ TypeErrorUndefined x- Just ty -> return ty--modalityOfVar :: Eq var => var -> TypeCheck var (TModality)-modalityOfVar x = asks (lookup x . varModalities) >>= \case- Nothing -> issueTypeError $ TypeErrorUndefined x- Just m -> return m--locksOfVar :: Eq var => var -> TypeCheck var (TModality)-locksOfVar x = asks (lookup x . varLocks) >>= \case- Nothing -> issueTypeError $ TypeErrorUndefined x- Just m -> return m--isTopLevelVar :: Eq var => var -> TypeCheck var Bool-isTopLevelVar x = asks (lookup x . varTopLevels) >>= \case- Nothing -> issueTypeError $ TypeErrorUndefined x- Just b -> return b--typeOfUncomputed :: Eq var => TermT var -> TypeCheck var (TermT var)-typeOfUncomputed = \case- Pure x -> typeOfVar x- Free (AnnF TypeInfo{..} _) -> pure infoType--typeOf :: Eq var => TermT var -> TypeCheck var (TermT var)-typeOf t = typeOfUncomputed t >>= whnfT--unifyTopes :: Eq var => TermT var -> TermT var -> TypeCheck var ()-unifyTopes l r = do- equiv <- (&&)- <$> [l] `entailM` r- <*> [r] `entailM` l- unless equiv $- issueTypeError (TypeErrorTopesNotEquivalent l r)--inAllSubContexts :: TypeCheck var () -> TypeCheck var () -> TypeCheck var ()-inAllSubContexts handleSingle tc = do- topeSubContexts <- asks localTopesNFUnion- case topeSubContexts of- [] -> panicImpossible "empty set of alternative contexts"- [_] -> handleSingle- _:_:_ -> do- forM_ topeSubContexts $ \topes' -> do- local (\Context{..} -> Context- { localTopes = topes'- , localTopesNF = topes'- , localTopesNFUnion = [topes']- , .. }) $- tc--unify :: Eq var => Maybe (TermT var) -> TermT var -> TermT var -> TypeCheck var ()-unify mterm expected actual = performUnification `catchError` \typeError -> do- inAllSubContexts (throwError typeError) performUnification- where- performUnification = unifyInCurrentContext mterm expected actual--unifyViaDecompose :: Eq var => TermT var -> TermT var -> TypeCheck var ()-unifyViaDecompose expected actual | expected == actual = return ()-unifyViaDecompose (AppT _ f x) (AppT _ g y) = do- unify Nothing f g- setVariance Invariant $ unify Nothing x y-unifyViaDecompose _ _ = issueTypeError (TypeErrorOther "cannot decompose")--unifyInCurrentContext :: Eq var => Maybe (TermT var) -> TermT var -> TermT var -> TypeCheck var ()-unifyInCurrentContext mterm expected actual = performing action $- unifyViaDecompose expected actual `catchError` \_ -> do -- NOTE: this gives a small, but noticeable speedup- expectedVal <- whnfT expected- actualVal <- whnfT actual- mea <- asks covariance >>= \case- Covariant -> Just <$> etaMatch mterm expectedVal actualVal- Contravariant -> Just . swap <$> etaMatch mterm actualVal expectedVal- Invariant -> traceTypeCheck Debug "invariant" $ do- -- FIXME: inefficient- traceTypeCheck Debug "invariant->covariant" $- setVariance Covariant $ unifyInCurrentContext mterm expectedVal actualVal- traceTypeCheck Debug "invariant->contravariant" $- setVariance Contravariant $ unifyInCurrentContext mterm expectedVal actualVal- return Nothing- case mea of- Nothing -> return ()- Just (expected', actual') ->- unless (expected' == actual') $ do -- NOTE: this gives a small, but noticeable speedup- case actual' of- RecBottomT{} -> return ()- RecOrT _ty rs' ->- case expected' of- RecOrT _ty rs -> sequence_ $- checkCoherence <$> rs <*> rs'- _ -> do- forM_ rs' $ \(tope, term) ->- localTope tope $- unifyTerms expected' term- _ -> typeOf expected' >>= typeOf >>= \case- UniverseCubeT{} -> contextEntails (topeEQT expected' actual')- _ -> do- let def = unless (expected' == actual') err- err =- case mterm of- Nothing -> issueTypeError (TypeErrorUnifyTerms expected' actual')- Just term -> issueTypeError (TypeErrorUnify term expected' actual')- errS = do- let expectedS = S <$> expected'- actualS = S <$> actual'- case mterm of- Nothing -> issueTypeError (TypeErrorUnifyTerms expectedS actualS)- Just term -> issueTypeError (TypeErrorUnify (S <$> term) expectedS actualS)- case expected' of- Pure{} -> def-- UniverseT{} -> def- UniverseCubeT{} -> def- UniverseTopeT{} -> def-- TypeUnitT{} -> def- UnitT{} -> return () -- Unit always unifies!-- CubeUnitT{} -> def- CubeUnitStarT{} -> def- Cube2T{} -> def- Cube2_0T{} -> def- Cube2_1T{} -> def- CubeProductT _ l r ->- case actual' of- CubeProductT _ l' r' -> do- unifyTerms l l'- unifyTerms r r'- _ -> err-- PairT _ty l r ->- case actual' of- PairT _ty' l' r' -> do- unifyTerms l l'- unifyTerms r r'-- -- one part of eta-expansion for pairs- -- FIXME: add symmetric version!- _ -> err-- FirstT _ty t ->- case actual' of- FirstT _ty' t' -> unifyTerms t t'- _ -> err-- SecondT _ty t ->- case actual' of- SecondT _ty' t' -> unifyTerms t t'- _ -> err-- TopeTopT{} -> unifyTopes expected' actual'- TopeBottomT{} -> unifyTopes expected' actual'- TopeEQT{} -> unifyTopes expected' actual'- TopeLEQT{} -> unifyTopes expected' actual'- TopeAndT{} -> unifyTopes expected' actual'- TopeOrT{} -> unifyTopes expected' actual'-- RecBottomT{} -> return () -- unifies with anything- RecOrT _ty rs ->- case actual' of- -- ----------------------------------------------- -- IMPORTANT: this pattern matching is redundant,- -- but it is not obvious, so- -- take care when refactoring!- -- ----------------------------------------------- -- RecOrT _ty rs' -> sequence_ $- -- checkCoherence <$> rs <*> rs'- -- ----------------------------------------------- _ -> do- forM_ rs $ \(tope, term) ->- localTope tope $- unifyTerms term actual'-- TypeFunT _ty _orig cube mtope ret ->- case actual' of- TypeFunT _ty' orig' cube' mtope' ret' -> do- switchVariance $ -- unifying in the negative position!- unifyTerms cube cube' -- FIXME: unifyCubes- enterScope orig' cube $ do- case ret' of- UniverseTopeT{} -> do- -- This is the case for tope families (shapes)- --- -- (Λ → TOPE) <: (Δ → TOPE)- -- since if φ : Λ → TOPE- -- then φ ⊢ Δ- --- -- we DO NOT take tope context Φ into account!- expectedTopeNF <- fromMaybe topeTopT <$> traverse nfT mtope- actualTopeNF <- fromMaybe topeTopT <$> traverse nfT mtope'- actualEntailsExpected <- [actualTopeNF] `entailM` expectedTopeNF- unless actualEntailsExpected $- issueTypeError (TypeErrorTopeNotSatisfied [actualTopeNF] expectedTopeNF)- _ -> do- -- this is the case for Π-types and extension types- --- -- Ξ | Φ | Γ ⊢ {t : I | φ} → A t <: {s : J | ψ} → B s- -- when- -- Ξ | Φ, ψ ⊢ φ- expectedTopeNF <- fromMaybe topeTopT <$> traverse nfT mtope- actualTopeNF <- fromMaybe topeTopT <$> traverse nfT mtope'- localTope expectedTopeNF $- contextEntails actualTopeNF- case mterm of- Nothing -> unifyTerms ret ret'- Just term -> unifyTypes (appT ret' (S <$> term) (Pure Z)) ret ret'- _ -> err-- TypeSigmaT _ty _orig a b ->- case actual' of- TypeSigmaT _ty' orig' a' b' -> do- unify Nothing a a'- enterScope orig' a' $ unify Nothing b b'- _ -> err-- TypeIdT _ty x _tA y ->- case actual' of- TypeIdT _ty' x' _tA' y' -> do- -- unify Nothing tA tA' -- TODO: do we need this check?- unify Nothing x x'- unify Nothing y y'- _ -> err-- AppT _ty f x ->- case actual' of- AppT _ty' f' x' -> do- unify Nothing f f'- setVariance Invariant $- unify Nothing x x'- _ -> err-- LambdaT ty _orig _mparam body ->- case stripTypeRestrictions (infoType ty) of- TypeFunT _ty _origF param mtope _ret ->- case actual' of- LambdaT ty' orig' _mparam' body' -> do- case stripTypeRestrictions (infoType ty') of- TypeFunT _ty' _origF' param' mtope' _ret' -> do- unify Nothing param param' -- we (should) have already checked this in types!- enterScope orig' param $ do- case (mtope, mtope') of- (Just tope, Just tope') -> do- unify Nothing tope tope' -- we (should) have already checked this in types!- localTope tope $ unify Nothing body body'- (Nothing, Nothing) -> do- unify Nothing body body'- _ -> errS- _ -> err- _ -> err- _ -> err- - LetT{} -> panicImpossible "let at the root of WHNF"- LetModT{} -> panicImpossible "let-mod at the root of WHNF"-- ReflT ty _x | TypeIdT _ty x _tA y <- infoType ty ->- case actual' of- ReflT ty' _x' | TypeIdT _ty' x' _tA' y' <- infoType ty' -> do- -- unify Nothing tA tA' -- TODO: do we need this check?- unify Nothing x x'- unify Nothing y y'- _ -> err- ReflT{} -> panicImpossible "refl with a non-identity type!"-- IdJT _ty a b c d e f ->- case actual' of- IdJT _ty' a' b' c' d' e' f' -> do- unify Nothing a a'- unify Nothing b b'- unify Nothing c c'- unify Nothing d d'- unify Nothing e e'- unify Nothing f f'- _ -> err-- TypeAscT{} -> panicImpossible "type ascription at the root of WHNF"-- TypeRestrictedT _ty ty rs ->- case actual' of- TypeRestrictedT _ty' ty' rs' -> do- unify mterm ty ty'- sequence_- [ localTope tope $ do- -- FIXME: can do less entails checks?- contextEntails (foldr topeOrT topeBottomT (map fst rs')) -- expected is less specified than actual- forM_ rs' $ \(tope', term') -> do- localTope tope' $- unify Nothing term term'- | (tope, term) <- rs- ]- _ -> err -- FIXME: need better unification for restrictions- TypeModalT _ty m ty ->- case actual' of- TypeModalT _ty' m' ty' -> do- when (m' /= m) $ err- unify Nothing ty ty'- _ -> err- ModAppT _ty m ty ->- case actual' of- ModAppT _ty' m' ty' -> do- when (m' /= m) $ err- unify Nothing ty ty'- _ -> err- ModExtractT _ty app inn te ->- case actual' of- ModExtractT _ty' app' inn' te' -> do- when (app' /= app) $ err- when (inn' /= inn) $ err- unify Nothing te te'- _ -> err- _ -> panicImpossible "unexpected term in UNIFY"--- where- action = case mterm of- Nothing -> ActionUnifyTerms expected actual- Just term -> ActionUnify term expected actual--unifyTypes :: Eq var => TermT var -> TermT var -> TermT var -> TypeCheck var ()-unifyTypes = unify . Just--unifyTerms :: Eq var => TermT var -> TermT var -> TypeCheck var ()-unifyTerms = unify Nothing--localTope :: Eq var => TermT var -> TypeCheck var a -> TypeCheck var a-localTope tope tc = do- Context{..} <- ask- tope' <- nfTope tope- -- A small optimisation to help unify terms faster- let refine = case tope' of- TopeEQT _ x y | x == y -> const tc -- no new information added!- _ | tope' `elem` localTopes -> const tc -- no new information added!- | otherwise -> id- refine $ do- local (f tope' localTopesNF) tc- where- f tope' localTopes' Context{..} = Context- { localTopes = tope : localTopes- , localTopesNF = tope' : localTopesNF- , localTopesNFUnion = map nubTermT- [ new <> old- | new <- simplifyLHSwithDisjunctions [tope']- , old <- localTopesNFUnion ]- , localTopesEntailBottom = entailsBottom- , .. }- where- entailsBottom = (tope' : localTopes') `entail` topeBottomT--universeT :: TermT var-universeT = iterate f (panicImpossible msg) !! 30- where- msg = "going too high up the universe levels"- f t = UniverseT TypeInfo- { infoType = t- , infoNF = Just universeT- , infoWHNF = Just universeT }--cubeT :: TermT var-cubeT = UniverseCubeT TypeInfo- { infoType = universeT- , infoNF = Just cubeT- , infoWHNF = Just cubeT }--topeT :: TermT var-topeT = UniverseTopeT TypeInfo- { infoType = universeT- , infoNF = Just topeT- , infoWHNF = Just topeT }--topeEQT :: TermT var -> TermT var -> TermT var-topeEQT l r = TopeEQT info l r- where- info = TypeInfo- { infoType = topeT- , infoNF = Nothing- , infoWHNF = Nothing- }--topeLEQT :: TermT var -> TermT var -> TermT var-topeLEQT l r = TopeLEQT info l r- where- info = TypeInfo- { infoType = topeT- , infoNF = Nothing- , infoWHNF = Nothing- }--topeOrT :: TermT var -> TermT var -> TermT var-topeOrT l r = TopeOrT info l r- where- info = TypeInfo- { infoType = topeT- , infoNF = Nothing- , infoWHNF = Nothing- }--topeAndT :: TermT var -> TermT var -> TermT var-topeAndT l r = TopeAndT info l r- where- info = TypeInfo- { infoType = topeT- , infoNF = Nothing- , infoWHNF = Nothing- }--cubeProductT :: TermT var -> TermT var -> TermT var-cubeProductT l r = t- where- t = CubeProductT info l r- info = TypeInfo- { infoType = cubeT- , infoNF = Nothing- , infoWHNF = Nothing- }--cubeUnitT :: TermT var-cubeUnitT = CubeUnitT TypeInfo- { infoType = cubeT- , infoNF = Just cubeUnitT- , infoWHNF = Just cubeUnitT }--cubeUnitStarT :: TermT var-cubeUnitStarT = CubeUnitStarT TypeInfo- { infoType = cubeUnitT- , infoNF = Just cubeUnitStarT- , infoWHNF = Just cubeUnitStarT }--typeUnitT :: TermT var-typeUnitT = TypeUnitT TypeInfo- { infoType = universeT- , infoNF = Just typeUnitT- , infoWHNF = Just typeUnitT }--unitT :: TermT var-unitT = UnitT TypeInfo- { infoType = typeUnitT- , infoNF = Just unitT- , infoWHNF = Just unitT }--cube2T :: TermT var-cube2T = Cube2T TypeInfo- { infoType = cubeT- , infoNF = Just cube2T- , infoWHNF = Just cube2T }--cube2_0T :: TermT var-cube2_0T = Cube2_0T TypeInfo- { infoType = cube2T- , infoNF = Just cube2_0T- , infoWHNF = Just cube2_0T }--cube2_1T :: TermT var-cube2_1T = Cube2_1T TypeInfo- { infoType = cube2T- , infoNF = Just cube2_1T- , infoWHNF = Just cube2_1T }--cubeFlipT :: TermT var -> TermT var-cubeFlipT t = CubeFlipT info t- where- info = TypeInfo- { infoType = typeModalT cube2T Op cube2T- , infoNF = Nothing- , infoWHNF = Nothing- }--cubeUnflipT :: TermT var -> TermT var-cubeUnflipT t = CubeUnflipT info t- where- info = TypeInfo- { infoType = cube2T- , infoNF = Nothing- , infoWHNF = Nothing- }--topeInvT :: TermT var -> TermT var-topeInvT t = TopeInvT info t- where- info = TypeInfo- { infoType = typeModalT topeT Op topeT- , infoNF = Nothing- , infoWHNF = Nothing- }--topeUninvT :: TermT var -> TermT var-topeUninvT t = TopeUninvT info t- where- info = TypeInfo- { infoType = topeT- , infoNF = Nothing- , infoWHNF = Nothing- }--topeTopT :: TermT var-topeTopT = TopeTopT TypeInfo- { infoType = topeT- , infoNF = Just topeTopT- , infoWHNF = Just topeTopT }--topeBottomT :: TermT var-topeBottomT = TopeBottomT TypeInfo- { infoType = topeT- , infoNF = Just topeBottomT- , infoWHNF = Just topeBottomT }--recBottomT :: TermT var-recBottomT = RecBottomT TypeInfo- { infoType = recBottomT- , infoNF = Just recBottomT- , infoWHNF = Just recBottomT }--typeRestrictedT :: TermT var -> [(TermT var, TermT var)] -> TermT var-typeRestrictedT ty rs = t- where- t = TypeRestrictedT info ty rs- info = TypeInfo- { infoType = universeT- , infoNF = Nothing- , infoWHNF = Nothing- }--lambdaT- :: TermT var- -> Maybe VarIdent- -> Maybe (TermT var, Maybe (Scope TermT var))- -> Scope TermT var- -> TermT var-lambdaT ty orig mparam body = t- where- t = LambdaT info orig mparam body- info = TypeInfo- { infoType = ty- , infoNF = Nothing- , infoWHNF = Just t- }---letT :: TermT var -> Maybe VarIdent -> Maybe (TermT var) -> TermT var -> Scope TermT var -> TermT var-letT ty orig mparam val body = t- where- t = LetT info orig mparam val body- info = TypeInfo- { infoType = ty- , infoNF = Nothing- , infoWHNF = Nothing- }--letModT :: TermT var -> Maybe VarIdent -> TModality -> TModality -> Maybe (TermT var) -> TermT var -> Scope TermT var -> TermT var-letModT ty orig app inn mparam val body = t- where- t = LetModT info orig app inn mparam val body- info = TypeInfo- { infoType = ty- , infoNF = Nothing- , infoWHNF = Nothing- }--appT :: TermT var -> TermT var -> TermT var -> TermT var-appT ty f x = t- where- t = AppT info f x- info = TypeInfo- { infoType = ty- , infoNF = Nothing- , infoWHNF = Nothing- }--pairT :: TermT var -> TermT var -> TermT var -> TermT var-pairT ty l r = t- where- t = PairT info l r- info = TypeInfo- { infoType = ty- , infoNF = Nothing- , infoWHNF = Just t- }--firstT :: TermT var -> TermT var -> TermT var-firstT ty arg = t- where- t = FirstT info arg- info = TypeInfo- { infoType = ty- , infoNF = Nothing- , infoWHNF = Nothing- }--secondT :: TermT var -> TermT var -> TermT var-secondT ty arg = t- where- t = SecondT info arg- info = TypeInfo- { infoType = ty- , infoNF = Nothing- , infoWHNF = Nothing- }--reflT- :: TermT var- -> Maybe (TermT var, Maybe (TermT var))- -> TermT var-reflT ty mx = t- where- t = ReflT info mx- info = TypeInfo- { infoType = ty- , infoNF = Just (ReflT info Nothing)- , infoWHNF = Just (ReflT info Nothing)- }--typeFunT- :: Maybe VarIdent- -> TermT var- -> Maybe (Scope TermT var)- -> Scope TermT var- -> TermT var-typeFunT orig cube mtope ret = t- where- t = TypeFunT info orig cube mtope ret- info = TypeInfo- { infoType = universeT- , infoNF = Nothing- , infoWHNF = Just t- }--typeSigmaT- :: Maybe VarIdent- -> TermT var- -> Scope TermT var- -> TermT var-typeSigmaT orig a b = t- where- t = TypeSigmaT info orig a b- info = TypeInfo- { infoType = universeT- , infoNF = Nothing- , infoWHNF = Just t- }--recOrT- :: TermT var- -> [(TermT var, TermT var)]- -> TermT var-recOrT ty rs = t- where- t = RecOrT info rs- info = TypeInfo- { infoType = ty- , infoNF = Nothing- , infoWHNF = Nothing- }--typeIdT :: TermT var -> Maybe (TermT var) -> TermT var -> TermT var-typeIdT x tA y = t- where- t = TypeIdT info x tA y- info = TypeInfo- { infoType = universeT- , infoNF = Nothing- , infoWHNF = Just t- }--idJT- :: TermT var- -> TermT var- -> TermT var- -> TermT var- -> TermT var- -> TermT var- -> TermT var- -> TermT var-idJT ty tA a tC d x p = t- where- t = IdJT info tA a tC d x p- info = TypeInfo- { infoType = ty- , infoNF = Nothing- , infoWHNF = Nothing- }--typeAscT :: TermT var -> TermT var -> TermT var-typeAscT x ty = t- where- t = TypeAscT info x ty- info = TypeInfo- { infoType = ty- , infoNF = Nothing- , infoWHNF = Nothing- }--typeModalT :: TermT var -> TModality -> TermT var -> TermT var-typeModalT ty md te = t- where- t = TypeModalT info md te- info = TypeInfo- { infoType = ty- , infoNF = Nothing- , infoWHNF = Nothing- }--modAppT :: TermT var -> TModality -> TermT var -> TermT var-modAppT ty md term = t- where- t = ModAppT info md term- info = TypeInfo- { infoType = ty- , infoNF = Nothing- , infoWHNF = Nothing- }--modExtractT :: TermT var -> TModality -> TModality -> TermT var -> TermT var-modExtractT ty app inn term = t- where- t = ModExtractT info app inn term- info = TypeInfo- { infoType = ty- , infoNF = Nothing- , infoWHNF = Nothing- }--typecheck :: Eq var => Term var -> TermT var -> TypeCheck var (TermT var)-typecheck term ty = performing (ActionTypeCheck term ty) $ do- whnfT ty >>= \case-- RecBottomT{} -> do- return recBottomT-- TypeRestrictedT _ty ty' rs -> do- term' <- typecheck term ty'- contextEntailedBy (foldr topeOrT topeBottomT (map fst rs))- forM_ rs $ \(tope, rterm) -> do- localTope tope $- unifyTerms rterm term'- return term' -- FIXME: correct?-- ty' -> case term of- Lambda orig mparam body ->- case ty' of- TypeFunT _ty _orig' param' mtope' ret -> do- case mparam of- Nothing -> return ()- Just (param, Nothing) -> do- (paramType, mtope) <- do- paramType <- infer param- typeOf paramType >>= \case- -- an argument can be a shape- TypeFunT _ty _orig cube _mtope UniverseTopeT{} -> do- mapM_ checkNameShadowing orig- enterScope orig cube $ do- let tope' = appT topeT (S <$> paramType) (Pure Z) -- eta expand ty'- return (cube, Just tope')- _kind -> return (paramType, Nothing)- unifyTerms param' paramType- mapM_ checkNameShadowing orig- enterScope orig param' $ do- mapM_ (unifyTerms (fromMaybe topeTopT mtope')) mtope- Just (param, mtope) -> do- param'' <- typecheck param =<< typeOf param'- unifyTerms param' param''- mapM_ checkNameShadowing orig- enterScope orig param' $ do- mtope'' <- typecheck (fromMaybe TopeTop mtope) topeT- unifyTerms (fromMaybe topeTopT mtope') mtope''-- mapM_ checkNameShadowing orig- enterScope orig param' $ do- maybe id localTope mtope' $ do- body' <- typecheck body ret- return (lambdaT ty' orig (Just (param', mtope')) body')-- _ -> issueTypeError $ TypeErrorUnexpectedLambda term ty- Let orig annot val body -> do- val' <- performing (ActionCheckLetValue orig) $ case annot of- Nothing -> infer val- Just bindType -> do- bindType' <- typecheck bindType universeT- typecheck val bindType'- bindTy <- typeOf val'- body' <- enterScopeWithBind orig Id bindTy val' $ do- typecheck body (S <$> ty')- return (letT ty' orig (Just bindTy) val' body')- LetMod orig app inn annot val body -> do- val' <- performing (ActionCheckLetValue orig) $ case annot of- Nothing -> enterModality app $ infer val- Just bindType -> do- bindType' <- infer bindType- bindUniv <- typeOf bindType'- enterModality app $ typecheck val (typeModalT bindUniv inn bindType')- bindTy <- typeOf val' >>= \case- o@(TypeModalT _ty md t) ->- if md == inn then- return t- else- issueTypeError $ TypeErrorNotModal (untyped o) inn val'- o -> issueTypeError $ TypeErrorNotModal (untyped o) inn val'- bindVal <- whnfT val' >>= \case- ModAppT _ty _m t -> pure t- o -> pure (modExtractT bindTy app inn o)- body' <- enterScopeWithBind orig (comp app inn) bindTy bindVal $ do- typecheck body (S <$> ty')- return (letModT ty' orig app inn (Just bindTy) val' body')- Pair l r ->- case ty' of- CubeProductT _ty a b -> do- l' <- typecheck l a- r' <- typecheck r b- return (pairT ty' l' r')- TypeSigmaT _ty _orig a b -> do- l' <- typecheck l a- r' <- typecheck r (substituteT l' b)- return (pairT ty' l' r')- _ -> issueTypeError $ TypeErrorUnexpectedPair term ty-- Refl mx ->- case ty' of- TypeIdT _ty y _tA z -> do- tA <- typeOf y- forM_ mx $ \(x, mxty) -> do- forM_ mxty $ \xty -> do- xty' <- typecheck xty universeT- unifyTerms tA xty'- x' <- typecheck x tA- unifyTerms x' y >> unifyTerms y x'- unifyTerms x' z >> unifyTerms z x'- when (isNothing mx) $- unifyTerms y z >> unifyTerms z y- return (reflT ty' (Just (y, Just tA)))- _ -> issueTypeError $ TypeErrorUnexpectedRefl term ty- ModExtract{} -> panicImpossible "extract is an internal term and cannot be typechecked"- ModApp md body -> case ty' of- TypeModalT _ty md' tpe -> do- when (md /= md') $ issueTypeError $- TypeErrorModalityMismatch md' md term- body' <- enterModality md $ typecheck body tpe- return $ modAppT ty' md body'- _ -> issueTypeError $ TypeErrorNotModal term md ty'-- -- FIXME: this does not make typechecking faster, why?--- RecOr rs -> do--- rs' <- forM rs $ \(tope, rterm) -> do--- tope' <- typecheck tope topeT--- contextEntailedBy tope'--- localTope tope' $ do--- rterm' <- typecheck rterm ty--- return (tope', rterm')--- return (recOrT ty rs')- _ -> do- term' <- infer term- inferredType <- typeOf term'- unifyTypes term' ty' inferredType- return term'--inferAs :: Eq var => TermT var -> Term var -> TypeCheck var (TermT var)-inferAs expectedKind term = do- term' <- infer term- ty <- typeOf term'- kind <- typeOf ty- unifyTypes ty expectedKind kind- return term'--infer :: Eq var => Term var -> TypeCheck var (TermT var)-infer tt = performing (ActionInfer tt) $ case tt of- Pure x -> do- topLevel <- isTopLevelVar x- unless topLevel $ do- varMod <- modalityOfVar x- locks <- locksOfVar x- when (not (coe varMod locks)) $ issueTypeError $ TypeErrorUnaccessibleVar x varMod locks- pure (Pure x)-- Universe -> pure universeT- UniverseCube -> pure cubeT- UniverseTope -> pure topeT-- CubeUnit -> pure cubeUnitT- CubeUnitStar -> pure cubeUnitStarT-- Cube2 -> pure cube2T- Cube2_0 -> pure cube2_0T- Cube2_1 -> pure cube2_1T- CubeProduct l r -> do- l' <- typecheck l cubeT- r' <- typecheck r cubeT- return (cubeProductT l' r')-- CubeFlip t -> do- t' <- typecheck t cube2T- return (cubeFlipT t')- CubeUnflip t -> do- t' <- typecheck t (typeModalT cubeT Op cube2T)- return (cubeUnflipT t')-- Pair l r -> do- l' <- infer l- r' <- infer r- lt <- typeOf l'- rt <- typeOf r'- typeOf lt >>= \case- -- Γ ⊢ l ⇒ (I : CUBE)- -- Γ ⊢ r ⇒ (J : CUBE)- -- ———————————————————————————- -- Γ ⊢ (l, r) ⇒ (I × J : CUBE)- UniverseCubeT{} -> return (pairT (cubeProductT lt rt) l' r')- -- Γ ⊢ l ⇒ (A : U)- -- Γ ⊢ r ⇒ (B : U)- -- ———————————————————————————- -- Γ ⊢ (l, r) ⇒ (A × B : U) where A × B = Σ (_ : A), B- _ -> do- -- NOTE: infer as a non-dependent pair!- return (pairT (typeSigmaT Nothing lt (S <$> rt)) l' r')-- First t -> do- t' <- infer t- fmap stripTypeRestrictions (typeOf t') >>= \case- RecBottomT{} -> pure recBottomT -- FIXME: is this ok?- TypeSigmaT _ty _orig lt _rt ->- return (firstT lt t')- CubeProductT _ty l _r ->- return (firstT l t')- ty -> issueTypeError $ TypeErrorNotPair t' ty-- Second t -> do- t' <- infer t- fmap stripTypeRestrictions (typeOf t') >>= \case- RecBottomT{} -> pure recBottomT -- FIXME: is this ok?- TypeSigmaT _ty _orig lt rt ->- return (secondT (substituteT (firstT lt t') rt) t')- CubeProductT _ty _l r ->- return (secondT r t')- ty -> issueTypeError $ TypeErrorNotPair t' ty-- TypeUnit -> pure typeUnitT- Unit -> pure unitT-- TopeTop -> pure topeTopT- TopeBottom -> pure topeBottomT-- TopeEQ l r -> do- l' <- inferAs cubeT l- lt <- typeOf l'- r' <- typecheck r lt- return (topeEQT l' r')-- TopeLEQ l r -> do- l' <- typecheck l cube2T- r' <- typecheck r cube2T- return (topeLEQT l' r')-- TopeAnd l r -> do- l' <- typecheck l topeT- r' <- typecheck r topeT- return (topeAndT l' r')-- TopeOr l r -> do- l' <- typecheck l topeT- r' <- typecheck r topeT- return (topeOrT l' r')-- TopeInv t -> do- t' <- typecheck t topeT- return (topeInvT t')-- TopeUninv t -> do- t' <- typecheck t (typeModalT universeT Op topeT )- return (topeUninvT t')-- RecBottom -> do- contextEntails topeBottomT- return recBottomT-- -- Γ ⊢ t ⇒ (T : K)- -- Γ ⊢ K ≡ U- -- —————————————- -- Γ ⊢ t ⇒ T ⇐ U-- RecOr rs -> do- ttts <- forM rs $ \(tope, term) -> do- tope' <- typecheck tope topeT- contextEntailedBy tope'- localTope tope' $ do- term' <- inferAs universeT term- ty <- typeOf term'- return (tope', (term', ty))- let rs' = map (fmap fst) ttts- ts = map (fmap snd) ttts- sequence_ [ checkCoherence l r | l:rs'' <- tails rs', r <- rs'' ]- contextEquiv (map fst ttts)- return (recOrT (recOrT universeT ts) rs')-- TypeFun orig a Nothing b -> do- a' <- infer a- typeOf a' >>= \case- -- an argument can be a type- UniverseT{} ->- case a' of- -- except if its a TOPE universe- UniverseTopeT{} ->- issueTypeError $ TypeErrorOther "tope params are illegal"- _ -> do- mapM_ checkNameShadowing orig- b' <- enterScope orig a' $ typecheck b universeT- return (typeFunT orig a' Nothing b')- -- an argument can be a cube- UniverseCubeT{} -> do- mapM_ checkNameShadowing orig- b' <- enterScope orig a' $ typecheck b universeT- return (typeFunT orig a' Nothing b')- -- an argument can be a shape- TypeFunT _ty _orig cube mtope UniverseTopeT{} -> do- mapM_ checkNameShadowing orig- enterScope orig cube $ do- let tope' = appT topeT (S <$> a') (Pure Z) -- eta expand a'- localTope tope' $ do- b' <- typecheck b universeT- case mtope of- Nothing -> return (typeFunT orig cube (Just tope') b')- Just tope'' -> return (typeFunT orig cube (Just (topeAndT tope'' tope')) b')- ty -> issueTypeError $ TypeErrorInvalidArgumentType a ty-- TypeFun orig cube (Just tope) ret -> do- cube' <- typecheck cube cubeT- mapM_ checkNameShadowing orig- enterScope orig cube' $ do- tope' <- typecheck tope topeT- localTope tope' $ do- ret' <- typecheck ret universeT- return (typeFunT orig cube' (Just tope') ret')-- TypeSigma orig a b -> do- a' <- typecheck a universeT- mapM_ checkNameShadowing orig- b' <- enterScope orig a' $ typecheck b universeT- return (typeSigmaT orig a' b')-- TypeId x (Just tA) y -> do- tA' <- typecheck tA universeT- x' <- typecheck x tA'- y' <- typecheck y tA'- return (typeIdT x' (Just tA') y')-- TypeId x Nothing y -> do- x' <- inferAs universeT x- tA <- typeOf x'- y' <- typecheck y tA- return (typeIdT x' (Just tA) y')-- App f x -> do- f' <- inferAs universeT f- fmap stripTypeRestrictions (typeOf f') >>= \case- TypeFunT _ty _orig a mtope b -> do- x' <- typecheck x a- let result = appT (substituteT x' b) f' x'- case b of- UniverseTopeT{} -> do- case mtope of- Nothing -> return result- Just tope -> do- return (topeAndT (substituteT x' tope) result)- _ -> do- mapM_ (contextEntails . substituteT x') mtope -- FIXME: need to check?- return result- ty -> issueTypeError $ TypeErrorNotFunction f' ty-- Lambda _orig Nothing _body -> do- issueTypeError $ TypeErrorCannotInferBareLambda tt- Lambda orig (Just (ty, Nothing)) body -> do- ty' <- infer ty- mtope <- typeOf ty' >>= \case- -- an argument can be a type- UniverseT{} ->- case ty' of- -- except if its a TOPE universe- UniverseTopeT{} ->- issueTypeError $ TypeErrorOther "tope params are illegal"- _ -> return Nothing- -- an argument can be a cube- UniverseCubeT{} -> return Nothing- -- an argument can be a shape- TypeFunT _ty _orig cube _mtope UniverseTopeT{} -> do- mapM_ checkNameShadowing orig- enterScope orig cube $ do- let tope' = appT topeT (S <$> ty') (Pure Z) -- eta expand ty'- return (Just tope')- kind -> issueTypeError $ TypeErrorInvalidArgumentType ty kind- mapM_ checkNameShadowing orig- enterScope orig ty' $ do- maybe id localTope mtope $ do- body' <- infer body- ret <- typeOf body'- return (lambdaT (typeFunT orig ty' mtope ret) orig (Just (ty', mtope)) body')- Lambda orig (Just (cube, Just tope)) body -> do- cube' <- typecheck cube cubeT- mapM_ checkNameShadowing orig- enterScope orig cube' $ do- tope' <- infer tope- body' <- localTope tope' $ infer body- ret <- typeOf body'- return (lambdaT (typeFunT orig cube' (Just tope') ret) orig (Just (cube', Just tope')) body')- Let orig annot val body -> do- val' <- performing (ActionCheckLetValue orig) $ case annot of- Nothing -> infer val- Just ty -> do- bindTy <- typecheck ty universeT- typecheck val bindTy- bindTy <- typeOf val'- enterScopeWithBind orig Id bindTy val' $ do- body' <- infer body- ret <- typeOf body'- return (letT (substituteT val' ret) orig (Just bindTy) val' body')- LetMod orig app inn annot val body -> do- val' <- performing (ActionCheckLetValue orig) $ case annot of- Nothing -> enterModality app $ infer val- Just bindType -> do- bindType' <- infer bindType- bindUniv <- typeOf bindType'- enterModality app $ typecheck val (typeModalT bindUniv inn bindType')- bindTy <- typeOf val' >>= \case- o@(TypeModalT _ty md t) ->- if md == inn then- return t- else- issueTypeError $ TypeErrorNotModal (untyped o) inn val'- o -> issueTypeError $ TypeErrorNotModal (untyped o) inn val'- bindVal <- whnfT val' >>= \case- ModAppT _ty _m t -> pure t- o -> pure (modExtractT bindTy app inn o)- enterScopeWithBind orig (comp app inn) bindTy bindVal $ do- body' <- infer body- ret <- typeOf body'- return (letModT (substituteT val' ret) orig app inn (Just bindTy) val' body')- Refl Nothing -> issueTypeError $ TypeErrorCannotInferBareRefl tt- Refl (Just (x, Nothing)) -> do- x' <- inferAs universeT x- ty <- typeOf x'- return (reflT (typeIdT x' (Just ty) x') (Just (x', Just ty)))- Refl (Just (x, Just ty)) -> do- ty' <- typecheck ty universeT- x' <- typecheck x ty'- return (reflT (typeIdT x' (Just ty') x') (Just (x', Just ty')))-- IdJ tA a tC d x p -> do- tA' <- typecheck tA universeT- a' <- typecheck a tA'- let typeOf_C =- typeFunT Nothing tA' Nothing $- typeFunT Nothing (typeIdT (S <$> a') (Just (S <$> tA')) (Pure Z)) Nothing $- universeT- tC' <- typecheck tC typeOf_C- let typeOf_d =- appT universeT- (appT (typeFunT Nothing (typeIdT a' (Just tA') a') Nothing universeT)- tC' a')- (reflT (typeIdT a' (Just tA') a') Nothing)- d' <- typecheck d typeOf_d- x' <- typecheck x tA'- p' <- typecheck p (typeIdT a' (Just tA') x')- let ret =- appT universeT- (appT (typeFunT Nothing (typeIdT a' (Just tA') x') Nothing universeT)- tC' x')- p'- return (idJT ret tA' a' tC' d' x' p')-- TypeAsc term ty -> do- ty' <- inferAs universeT ty -- this works on types AND cubes- term' <- typecheck term ty'- return (typeAscT term' ty')-- TypeRestricted ty rs -> do- ty' <- typecheck ty universeT- rs' <- forM rs $ \(tope, term) -> do- tope' <- typecheck tope topeT- term' <- localTope tope' $ typecheck term ty'- return (tope', term')- sequence_ [ checkCoherence l r | l:rs'' <- tails rs', r <- rs'' ]- return (typeRestrictedT ty' rs')- TypeModal md ty -> do- ty' <- enterModality md $ infer ty- universeTy <- typeOf ty'- _ <- case universeTy of - UniverseT {} -> pure universeTy - UniverseCubeT {} -> pure universeTy - UniverseTopeT {} -> pure universeTy- _ -> issueTypeError $ TypeErrorNotTypeInModal universeTy- return (typeModalT universeTy md ty')- ModApp md term -> do- term' <- enterModality md $ infer term- ty <- typeOf term'- tyUniv <- typeOf ty- return $ modAppT (typeModalT tyUniv md ty) md term'- ModExtract _ _ _ -> error "untypable $extract$"--checkCoherence- :: Eq var- => (TermT var, TermT var)- -> (TermT var, TermT var)- -> TypeCheck var ()-checkCoherence (ltope, lterm) (rtope, rterm) =- performing (ActionCheckCoherence (ltope, lterm) (rtope, rterm)) $ do- localTope (topeAndT ltope rtope) $ do- ltype <- stripTypeRestrictions <$> typeOf lterm -- FIXME: why strip?- rtype <- stripTypeRestrictions <$> typeOf rterm -- FIXME: why strip?- -- FIXME: do we need to unify types here or is it included in unification of terms?- unifyTerms ltype rtype- unifyTerms lterm rterm--inferStandalone :: Eq var => Term var -> Either (TypeErrorInScopedContext var) (TermT var)-inferStandalone term = defaultTypeCheck (infer term)--unsafeInferStandalone' :: Term' -> TermT'-unsafeInferStandalone' term = unsafeTypeCheck' (infer term)--unsafeTypeCheck' :: TypeCheck VarIdent a -> a-unsafeTypeCheck' tc =- case defaultTypeCheck tc of- Left err -> error $ ppTypeErrorInScopedContext' BottomUp err- Right result -> result--type PointId = String-type ShapeId = [PointId]--cube2powerT :: Int -> TermT var-cube2powerT 1 = cube2T-cube2powerT dim = cubeProductT (cube2powerT (dim - 1)) cube2T--splits :: [a] -> [([a], [a])]-splits [] = [([], [])]-splits (x:xs) = ([], x:xs) : [ (x : before, after) | (before, after) <- splits xs ]--verticesFrom :: [TermT var] -> [(ShapeId, TermT var)]-verticesFrom ts = combine <$> mapM mk ts- where- mk t = [("0", topeEQT t cube2_0T), ("1", topeEQT t cube2_1T)]- combine xs = ([concat (map fst xs)], foldr1 topeAndT (map snd xs))--subTopes2 :: Int -> TermT var -> [(ShapeId, TermT var)]--- 1-dim-subTopes2 1 t =- [ (words "0", topeEQT t cube2_0T)- , (words "1", topeEQT t cube2_1T)- , (words "0 1", topeTopT) ]--- 2-dim-subTopes2 2 ts =- -- vertices- [ (words "00", topeEQT t cube2_0T `topeAndT` topeEQT s cube2_0T)- , (words "01", topeEQT t cube2_0T `topeAndT` topeEQT s cube2_1T)- , (words "10", topeEQT t cube2_1T `topeAndT` topeEQT s cube2_0T)- , (words "11", topeEQT t cube2_1T `topeAndT` topeEQT s cube2_1T)- -- edges and the diagonal- , (words "00 01", topeEQT t cube2_0T)- , (words "10 11", topeEQT t cube2_1T)- , (words "00 10", topeEQT s cube2_0T)- , (words "01 11", topeEQT s cube2_1T)- , (words "00 11", topeEQT s t)- -- triangles- , (words "00 01 11", topeLEQT t s)- , (words "00 10 11", topeLEQT s t)- ]- where- t = firstT cube2T ts- s = secondT cube2T ts--- 3-dim-subTopes2 3 t =- -- vertices- [ (words "000", topeEQT t1 cube2_0T `topeAndT` topeEQT t2 cube2_0T `topeAndT` topeEQT t3 cube2_0T)- , (words "001", topeEQT t1 cube2_0T `topeAndT` topeEQT t2 cube2_0T `topeAndT` topeEQT t3 cube2_1T)- , (words "010", topeEQT t1 cube2_0T `topeAndT` topeEQT t2 cube2_1T `topeAndT` topeEQT t3 cube2_0T)- , (words "011", topeEQT t1 cube2_0T `topeAndT` topeEQT t2 cube2_1T `topeAndT` topeEQT t3 cube2_1T)- , (words "100", topeEQT t1 cube2_1T `topeAndT` topeEQT t2 cube2_0T `topeAndT` topeEQT t3 cube2_0T)- , (words "101", topeEQT t1 cube2_1T `topeAndT` topeEQT t2 cube2_0T `topeAndT` topeEQT t3 cube2_1T)- , (words "110", topeEQT t1 cube2_1T `topeAndT` topeEQT t2 cube2_1T `topeAndT` topeEQT t3 cube2_0T)- , (words "111", topeEQT t1 cube2_1T `topeAndT` topeEQT t2 cube2_1T `topeAndT` topeEQT t3 cube2_1T)- -- edges- , (words "000 001", topeEQT t1 cube2_0T `topeAndT` topeEQT t2 cube2_0T)- , (words "010 011", topeEQT t1 cube2_0T `topeAndT` topeEQT t2 cube2_1T)- , (words "000 010", topeEQT t1 cube2_0T `topeAndT` topeEQT t3 cube2_0T)- , (words "001 011", topeEQT t1 cube2_0T `topeAndT` topeEQT t3 cube2_1T)- , (words "100 101", topeEQT t1 cube2_1T `topeAndT` topeEQT t2 cube2_0T)- , (words "110 111", topeEQT t1 cube2_1T `topeAndT` topeEQT t2 cube2_1T)- , (words "100 110", topeEQT t1 cube2_1T `topeAndT` topeEQT t3 cube2_0T)- , (words "101 111", topeEQT t1 cube2_1T `topeAndT` topeEQT t3 cube2_1T)- , (words "000 100", topeEQT t2 cube2_0T `topeAndT` topeEQT t3 cube2_0T)- , (words "001 101", topeEQT t2 cube2_0T `topeAndT` topeEQT t3 cube2_1T)- , (words "010 110", topeEQT t2 cube2_1T `topeAndT` topeEQT t3 cube2_0T)- , (words "011 111", topeEQT t2 cube2_1T `topeAndT` topeEQT t3 cube2_1T)- -- face diagonals- , (words "000 011", topeEQT t1 cube2_0T `topeAndT` topeEQT t2 t3)- , (words "100 111", topeEQT t1 cube2_1T `topeAndT` topeEQT t2 t3)- , (words "000 101", topeEQT t2 cube2_0T `topeAndT` topeEQT t1 t3)- , (words "010 111", topeEQT t2 cube2_1T `topeAndT` topeEQT t1 t3)- , (words "000 110", topeEQT t3 cube2_0T `topeAndT` topeEQT t1 t2)- , (words "001 111", topeEQT t3 cube2_1T `topeAndT` topeEQT t1 t2)- -- the long diagonal- , (words "000 111", topeEQT t3 t2 `topeAndT` topeEQT t2 t1)- -- face triangles- , (words "000 001 011", topeEQT t1 cube2_0T `topeAndT` topeLEQT t2 t3)- , (words "000 010 011", topeEQT t1 cube2_0T `topeAndT` topeLEQT t3 t2)- , (words "100 101 111", topeEQT t1 cube2_1T `topeAndT` topeLEQT t2 t3)- , (words "100 110 111", topeEQT t1 cube2_1T `topeAndT` topeLEQT t3 t2)- , (words "000 001 101", topeEQT t2 cube2_0T `topeAndT` topeLEQT t1 t3)- , (words "000 100 101", topeEQT t2 cube2_0T `topeAndT` topeLEQT t3 t1)- , (words "010 011 111", topeEQT t2 cube2_1T `topeAndT` topeLEQT t1 t3)- , (words "010 110 111", topeEQT t2 cube2_1T `topeAndT` topeLEQT t3 t1)- , (words "000 010 110", topeEQT t3 cube2_0T `topeAndT` topeLEQT t1 t2)- , (words "000 100 110", topeEQT t3 cube2_0T `topeAndT` topeLEQT t2 t1)- , (words "001 011 111", topeEQT t3 cube2_1T `topeAndT` topeLEQT t1 t2)- , (words "001 101 111", topeEQT t3 cube2_1T `topeAndT` topeLEQT t2 t1)- -- diagonal triangles- , (words "000 001 111", topeEQT t1 t2 `topeAndT` topeLEQT t2 t3)- , (words "000 010 111", topeEQT t1 t3 `topeAndT` topeLEQT t1 t2)- , (words "000 100 111", topeEQT t2 t3 `topeAndT` topeLEQT t2 t1)- , (words "000 011 111", topeLEQT t1 t2 `topeAndT` topeEQT t2 t3)- , (words "000 101 111", topeLEQT t2 t1 `topeAndT` topeEQT t1 t3)- , (words "000 110 111", topeLEQT t3 t1 `topeAndT` topeEQT t1 t2)- -- tetrahedra- , (words "000 001 011 111", topeLEQT t1 t2 `topeAndT` topeLEQT t2 t3)- , (words "000 010 011 111", topeLEQT t1 t3 `topeAndT` topeLEQT t3 t2)- , (words "000 001 101 111", topeLEQT t2 t1 `topeAndT` topeLEQT t1 t3)- , (words "000 100 101 111", topeLEQT t2 t3 `topeAndT` topeLEQT t3 t1)- , (words "000 010 110 111", topeLEQT t3 t1 `topeAndT` topeLEQT t1 t2)- , (words "000 100 110 111", topeLEQT t3 t2 `topeAndT` topeLEQT t2 t1)- ]- where- t1 = firstT cube2T (firstT (cube2powerT 2) t)- t2 = secondT cube2T (firstT (cube2powerT 2) t)- t3 = secondT cube2T t-subTopes2 dim _ = error (show dim <> " dimensions are not supported")--cubeSubTopes :: [(ShapeId, TermT (Inc var))]-cubeSubTopes = subTopes2 3 (Pure Z)--limitLength :: Int -> String -> String-limitLength n s- | length s > n = take (n - 1) s <> "…"- | otherwise = s--renderObjectsFor- :: Eq var- => String- -> Int- -> TermT var- -> TermT var- -> TypeCheck var [(ShapeId, RenderObjectData)]-renderObjectsFor mainColor dim t term = fmap catMaybes $ do- forM (subTopes2 dim t) $ \(shapeId, tope) -> do- checkTopeEntails tope >>= \case- False -> return Nothing- True -> typeOf term >>= \case- UniverseTopeT{} -> localTope term $ checkTopeEntails tope >>= \case- False -> return Nothing- True -> return $ Just (shapeId, RenderObjectData- { renderObjectDataLabel = ""- , renderObjectDataFullLabel = ""- , renderObjectDataColor = "orange" -- FIXME: orange for topes?- })- _ -> do- origs <- asks varOrigs- term' <- localTope tope $ whnfT term- label <-- case term' of- AppT _ (Pure z) arg- | Just (Just "_") <- lookup z origs -> return ""- | null (nub (freeVars (untyped arg)) \\ nub (freeVars (untyped t))) ->- ppTermInContext (Pure z)- _ -> ppTermInContext term'- return $ Just (shapeId, RenderObjectData- { renderObjectDataLabel = label- , renderObjectDataFullLabel = label- , renderObjectDataColor =- case term' of- Pure{} -> "purple"- AppT _ (Pure x) arg- | Just (Just "_") <- lookup x origs -> mainColor- | null (nub (freeVars (untyped arg)) \\ nub (freeVars (untyped t))) -> "purple"- _ -> mainColor- })--componentWiseEQT :: Int -> TermT var -> TermT var -> TermT var-componentWiseEQT 1 t s = topeEQT t s-componentWiseEQT 2 t s = topeAndT- (componentWiseEQT 1 (firstT cube2T t) (firstT cube2T s))- (componentWiseEQT 1 (secondT cube2T t) (secondT cube2T s))-componentWiseEQT 3 t s = topeAndT- (componentWiseEQT 2 (firstT (cube2powerT 2) t) (firstT (cube2powerT 2) s))- (componentWiseEQT 1 (secondT cube2T t) (secondT cube2T s))-componentWiseEQT dim _ _ = error ("cannot work with " <> show dim <> " dimensions")--renderObjectsInSubShapeFor- :: Eq var- => String- -> Int- -> [var]- -> var- -> TermT var- -> TermT var- -> TermT var- -> TypeCheck var [(ShapeId, RenderObjectData)]-renderObjectsInSubShapeFor mainColor dim sub super retType f x = fmap catMaybes $ do- let reduceContext- = foldr topeOrT topeBottomT- . map (foldr topeAndT topeTopT)- . map (filter (\tope -> all (`notElem` tope) sub))- . map (saturateTopes [])- . simplifyLHSwithDisjunctions- contextTopes <- asks (reduceContext . localTopesNF)- contextTopes' <- localTope (componentWiseEQT dim (Pure super) x) $ asks (reduceContext . localTopesNF)- forM (subTopes2 dim (Pure super)) $ \(shapeId, tope) -> do- checkEntails tope contextTopes >>= \case- False -> return Nothing- True -> do- origs <- asks varOrigs- term <- localTope tope (whnfT (appT retType f (Pure super)))- label <- typeOf term >>= \case- UniverseTopeT{} -> return ""- _ -> do- case term of- AppT _ (Pure z) arg- | Just (Just "_") <- lookup z origs -> return ""- | null (nub (freeVars (untyped arg)) \\ [super]) -> ppTermInContext (Pure z)- _ -> ppTermInContext term- color <- checkEntails tope contextTopes' >>= \case- True -> do- case term of- Pure{} -> return "purple"- AppT _ (Pure z) arg- | Just (Just "_") <- lookup z origs -> return mainColor- | null (nub (freeVars (untyped arg)) \\ [super]) -> return "purple"- _ -> return mainColor- False -> return "gray"- return $ Just (shapeId, RenderObjectData- { renderObjectDataLabel = label- , renderObjectDataFullLabel = label- , renderObjectDataColor = color- })--renderForSubShapeSVG- :: Eq var- => String - -> Int- -> [var]- -> var- -> TermT var- -> TermT var- -> TermT var- -> TypeCheck var String-renderForSubShapeSVG mainColor dim sub super retType f x = do- objects <- renderObjectsInSubShapeFor mainColor dim sub super retType f x- let objects' = map mk objects- return $ renderCube defaultCamera (if dim > 2 then (pi/7) else 0) $ \obj ->- lookup obj objects'- where- mk (shapeId, renderData) = (intercalate "-" (map fill shapeId), renderData)- fill xs = xs <> replicate (3 - length xs) '1'--renderForSVG :: Eq var => String -> Int -> TermT var -> TermT var -> TypeCheck var String-renderForSVG mainColor dim t term = do- objects <- renderObjectsFor mainColor dim t term- let objects' = map mk objects- return $ renderCube defaultCamera (if dim > 2 then (pi/7) else 0) $ \obj ->- lookup obj objects'- where- mk (shapeId, renderData) = (intercalate "-" (map fill shapeId), renderData)- fill xs = xs <> replicate (3 - length xs) '1'--renderTermSVGFor- :: Eq var- => String -- ^ Main color.- -> Int -- ^ Accumulated dimensions so far (from 0 to 3).- -> (Maybe (TermT var, TermT var), [var]) -- ^ Accumulated point term (and its time).- -> TermT var -- ^ Term to render.- -> TypeCheck var (Maybe String)-renderTermSVGFor mainColor accDim (mp, xs) t = do- t' <- whnfT t- ty <- typeOf t'- case t of -- check unevaluated term- AppT _info f x -> typeOf f >>= \case- TypeFunT _ fOrig fArg mtopeArg ret | Just dim <- dimOf fArg, dim <= maxDim -> do- enterScope fOrig fArg $ do- maybe id localTope mtopeArg $ do- Just <$> renderForSubShapeSVG mainColor dim (map S xs) Z ret (S <$> f) (S <$> x) -- FIXME: breaks for 2 * (2 * 2), but works for 2 * 2 * 2 = (2 * 2) * 2- _ -> traverse (\(p', _) -> renderForSVG mainColor accDim p' t') mp- TypeFunT{} | null xs -> enterScope (Just "_") t' $ do- renderTermSVGFor "blue" 0 (Nothing, []) (Pure Z) -- use blue for types-- _ -> case t' of -- check evaluated term- AppT _info f x -> typeOf f >>= \case- TypeFunT _ fOrig fArg mtopeArg ret | Just dim <- dimOf fArg, dim <= maxDim -> do- enterScope fOrig fArg $ do- maybe id localTope mtopeArg $ do- Just <$> renderForSubShapeSVG mainColor dim (map S xs) Z ret (S <$> f) (S <$> x) -- FIXME: breaks for 2 * (2 * 2), but works for 2 * 2 * 2 = (2 * 2) * 2- _ -> traverse (\(p', _) -> renderForSVG mainColor accDim p' t') mp- TypeFunT{} | null xs -> enterScope (Just "_") t' $ do- renderTermSVGFor "blue" 0 (Nothing, []) (Pure Z) -- use blue for types-- _ -> case ty of -- check type of the term- TypeFunT _ orig arg mtope ret- | Just dim <- dimOf arg, accDim + dim <= maxDim -> enterScope orig arg $ do- maybe id localTope mtope $- renderTermSVGFor mainColor (accDim + dim)- (join' (both (fmap S) <$> mp) (S <$> arg) (Pure Z), Z : map S xs) $- case t' of- LambdaT _ _orig _marg body -> body- _ -> appT ret (S <$> t') (Pure Z)- | null xs -> enterScope orig arg $ do- maybe id localTope mtope $- renderTermSVGFor mainColor accDim- (both (fmap S) <$> mp, map S xs) $- case t' of- LambdaT _ _orig _marg body -> body- _ -> appT ret (S <$> t') (Pure Z)- _ -> traverse (\(p', _) -> renderForSVG mainColor accDim p' t') mp- where- maxDim = 3-- both f (x, y) = (f x, f y)-- join' Nothing Cube2T{} x = Just (x, cube2T)- join' (Just (p, pt)) Cube2T{} x = Just (p', pt')- where- pt' = cubeProductT pt cube2T- p' = pairT pt' p x- join' p (CubeProductT _ l r) x =- join' (join' p l (firstT l x)) r (secondT r x)- join' _ _ _ = Nothing -- FIXME: error?-- dimOf = \case- Cube2T{} -> Just 1- CubeProductT _ l r -> (+) <$> dimOf l <*> dimOf r- _ -> Nothing--renderTermSVG :: Eq var => TermT var -> TypeCheck var (Maybe String)-renderTermSVG = renderTermSVGFor "red" 0 (Nothing, []) -- use red for terms by default--renderTermSVG' :: Eq var => TermT var -> TypeCheck var (Maybe String)-renderTermSVG' t = whnfT t >>= \t' -> typeOf t >>= \case- TypeFunT _ orig arg mtope ret -> enterScope orig arg $ do- maybe id localTope mtope $ case t' of- LambdaT _ _orig _marg (AppT _info f x) ->- typeOf f >>= \case- TypeFunT _ fOrig fArg mtope2 _ret | Just dim <- dimOf fArg -> do- enterScope fOrig fArg $ do+-- An explicit list: a bare 'Control.Monad.Writer' import also re-exports+-- 'Data.Monoid' (incl. 'First'/'Last') on some mtl versions, which clashes with+-- the 'First'/'Last' term patterns from 'Language.Rzk.Free.Syntax'.+import Control.Monad.Writer (WriterT, censor, runWriterT, tell)+import Data.Bifoldable (bifoldr)+import Data.Bifunctor (first)+import Data.List (intercalate, intersect, nub, partition,+ tails, (\\))+import Data.Maybe (catMaybes, fromMaybe, isNothing,+ mapMaybe)+import Data.String (IsString (..))+import Data.Tuple (swap)++import Free.Scoped+import Language.Rzk.Free.Syntax+import qualified Language.Rzk.Syntax as Rzk++import Debug.Trace+import Unsafe.Coerce++-- $setup+-- >>> :set -XOverloadedStrings+++-- | Parse and 'unsafeInferStandalone''.+instance IsString TermT' where+ fromString = unsafeInferStandalone' . fromString++defaultTypeCheck+ :: TypeCheck var a+ -> Either (TypeErrorInScopedContext var) a+defaultTypeCheck = fmap fst . defaultTypeCheckWithHoles' emptyContext++-- | Like 'defaultTypeCheck', but runs in lenient hole mode ('allowHoles') and+-- also returns the holes recorded during checking (with their goal and context).+defaultTypeCheckWithHoles+ :: TypeCheck var a+ -> Either (TypeErrorInScopedContext var) (a, [HoleInfo])+defaultTypeCheckWithHoles = defaultTypeCheckWithHoles' (allowHoles emptyContext)++defaultTypeCheckWithHoles'+ :: Context var+ -> TypeCheck var a+ -> Either (TypeErrorInScopedContext var) (a, [HoleInfo])+defaultTypeCheckWithHoles' ctx tc =+ runExcept (runWriterT (runReaderT tc ctx))++-- FIXME: merge with VarInfo+data Decl var = Decl+ { declName :: var+ , declType :: TermT var+ , declValue :: Maybe (TermT var)+ , declIsAssumption :: Bool+ , declUsedVars :: [var]+ , declLocation :: Maybe LocationInfo+ } deriving Eq++type Decl' = Decl VarIdent++typecheckModulesWithLocationIncremental+ :: [(FilePath, [Decl'])] -- ^ Cached declarations (only those that do not need rechecking).+ -> [(FilePath, Rzk.Module)] -- ^ New modules to check+ -> TypeCheck VarIdent ([(FilePath, [Decl'])], [TypeErrorInScopedContext VarIdent])+typecheckModulesWithLocationIncremental cached modulesToTypecheck = do+ let decls = foldMap snd cached+ localDeclsPrepared decls $ do+ (checked, errors) <- typecheckModulesWithLocation' modulesToTypecheck+ return (cached <> checked, errors)++typecheckModulesWithLocation' :: [(FilePath, Rzk.Module)] -> TypeCheck VarIdent ([(FilePath, [Decl'])], [TypeErrorInScopedContext VarIdent])+typecheckModulesWithLocation' = \case+ [] -> return ([], [])+ m@(path, _) : ms -> do+ (decls, errs) <- typecheckModuleWithLocation m+ case errs of+ _:_ -> return ([(path, decls)], errs)+ _ -> do+ localDeclsPrepared decls $ do+ (decls', errors) <- typecheckModulesWithLocation' ms+ return ((path, decls) : decls', errors)++-- | Typecheck modules in lenient hole mode, returning the elaborated+-- declarations, any type errors, and the holes recorded (each with its goal and+-- local context). This is the structured goal/context query consumed by the+-- LSP and the game. Strict callers (the default CLI path, CI) keep using+-- 'typecheckModulesWithLocation', where holes are 'TypeErrorUnsolvedHole'.+typecheckModulesWithHoles+ :: [(FilePath, Rzk.Module)]+ -> Either (TypeErrorInScopedContext VarIdent)+ ([(FilePath, [Decl'])], [TypeErrorInScopedContext VarIdent], [HoleInfo])+typecheckModulesWithHoles = typecheckModulesWithHolesAndLemmas []++-- | Like 'typecheckModulesWithHoles', but additionally offers the given named+-- top-level definitions as hole candidates (each applied to holes when its type+-- fits the goal). The game passes a level's allow-list of relevant lemmas so+-- they surface as moves; an empty list reproduces 'typecheckModulesWithHoles'.+typecheckModulesWithHolesAndLemmas+ :: [VarIdent]+ -> [(FilePath, Rzk.Module)]+ -> Either (TypeErrorInScopedContext VarIdent)+ ([(FilePath, [Decl'])], [TypeErrorInScopedContext VarIdent], [HoleInfo])+typecheckModulesWithHolesAndLemmas lemmas modules =+ flatten <$> defaultTypeCheckWithHoles'+ (withHintLemmas lemmas (allowHoles emptyContext))+ (typecheckModulesWithLocation' modules)+ where+ flatten ((decls, errs), holes) = (decls, errs, holes)++typecheckModulesWithLocation :: [(FilePath, Rzk.Module)] -> TypeCheck VarIdent [(FilePath, [Decl'])]+typecheckModulesWithLocation = \case+ [] -> return []+ m@(path, _) : ms -> do+ (decls, errs) <- typecheckModuleWithLocation m+ case errs of+ err : _ -> do+ throwError err+ [] -> localDeclsPrepared decls $+ ((path, decls) :) <$> typecheckModulesWithLocation ms++typecheckModules :: [Rzk.Module] -> TypeCheck VarIdent [Decl']+typecheckModules = \case+ [] -> return []+ m : ms -> do+ (decls, errs) <- typecheckModule Nothing m+ case errs of+ err : _ -> do+ throwError err+ _ -> do+ localDeclsPrepared decls $+ (decls <>) <$> typecheckModules ms++typecheckModuleWithLocation :: (FilePath, Rzk.Module) -> TypeCheck VarIdent ([Decl'], [TypeErrorInScopedContext VarIdent])+typecheckModuleWithLocation (path, module_) = do+ traceTypeCheck Normal ("Checking module from " <> path) $ do+ withLocation (LocationInfo { locationFilePath = Just path, locationLine = Nothing }) $+ typecheckModule (Just path) module_++countCommands :: Integral a => [Rzk.Command] -> a+countCommands = fromIntegral . length++typecheckModule :: Maybe FilePath -> Rzk.Module -> TypeCheck VarIdent ([Decl'], [TypeErrorInScopedContext VarIdent])+typecheckModule path (Rzk.Module _moduleLoc _lang commands) =+ withSection Nothing (go 1 commands) $ -- FIXME: use module name? or anonymous section?+ return ([], [])+ where+ totalCommands = countCommands commands++ go :: Integer -> [Rzk.Command] -> TypeCheck VarIdent ([Decl'], [TypeErrorInScopedContext VarIdent])+ go _i [] = return ([], [])++ go i (command@(Rzk.CommandUnsetOption _loc optionName) : moreCommands) = do+ traceTypeCheck Normal ("[ " <> show i <> " out of " <> show totalCommands <> " ]"+ <> " Unsetting option " <> optionName) $ do+ withCommand command $ do+ unsetOption optionName $+ go (i + 1) moreCommands++ go i (command@(Rzk.CommandSetOption _loc optionName optionValue) : moreCommands) = do+ traceTypeCheck Normal ("[ " <> show i <> " out of " <> show totalCommands <> " ]"+ <> " Setting option " <> optionName <> " = " <> optionValue ) $ do+ withCommand command $ do+ setOption optionName optionValue $+ go (i + 1) moreCommands++ go i (command@(Rzk.CommandDefine _loc name (Rzk.DeclUsedVars _ vars) params ty term) : moreCommands) =+ traceTypeCheck Normal ("[ " <> show i <> " out of " <> show totalCommands <> " ]"+ <> " Checking #define " <> Rzk.printTree name ) $ do+ withCommand command $ do+ mapM_ checkDefinedVar (varIdentAt path <$> vars)+ paramDecls <- concat <$> mapM paramToParamDecl params+ -- Store the elaborated type and term unreduced, but memoise their+ -- WHNF on the top node (see 'memoizeWHNF'). Reducing in place would+ -- discard or expose a variable occurrence, so the section+ -- unused/implicit-assumption checks (run over the stored type and+ -- value) would disagree with the term the user wrote; keeping the+ -- WHNF cached preserves the original one-shot reduction.+ ty' <- memoizeWHNF =<< typecheck (toTerm' (addParamDecls paramDecls ty)) universeT+ term' <- memoizeWHNF =<< typecheck (toTerm' (addParams params term)) ty'+ loc <- asks location+ let decl = Decl (varIdentAt path name) ty' (Just term') False (varIdentAt path <$> vars) loc+ fmap (first (decl :)) $+ localDeclPrepared decl $ do+ Context{..} <- ask+ termSVG <-+ case renderBackend of+ Just RenderSVG -> renderTermSVG (Pure (varIdentAt path name))+ Just RenderLaTeX -> issueTypeError $ TypeErrorOther "\"latex\" rendering is not yet supported"+ Nothing -> pure Nothing+ maybe id trace termSVG $ do+ go (i + 1) moreCommands++ go i (command@(Rzk.CommandPostulate _loc name (Rzk.DeclUsedVars _ vars) params ty) : moreCommands) =+ traceTypeCheck Normal ("[ " <> show i <> " out of " <> show totalCommands <> " ]"+ <> " Checking #postulate " <> Rzk.printTree name) $ do+ withCommand command $ do+ mapM_ checkDefinedVar (varIdentAt path <$> vars)+ paramDecls <- concat <$> mapM paramToParamDecl params+ ty' <- memoizeWHNF =<< typecheck (toTerm' (addParamDecls paramDecls ty)) universeT+ loc <- asks location+ let decl = Decl (varIdentAt path name) ty' Nothing False (varIdentAt path <$> vars) loc+ fmap (first (decl :)) $+ localDeclPrepared decl $+ go (i + 1) moreCommands++ go i (command@(Rzk.CommandCheck _loc term ty) : moreCommands) =+ traceTypeCheck Normal ("[ " <> show i <> " out of " <> show totalCommands <> " ]"+ <> " Checking " <> Rzk.printTree term <> " : " <> Rzk.printTree ty ) $ do+ withCommand command $ do+ ty' <- typecheck (toTerm' ty) universeT >>= whnfT+ _term' <- typecheck (toTerm' term) ty'+ go (i + 1) moreCommands++ go i (Rzk.CommandCompute loc term : moreCommands) =+ go i (Rzk.CommandComputeWHNF loc term : moreCommands)++ go i (command@(Rzk.CommandComputeNF _loc term) : moreCommands) =+ traceTypeCheck Normal ("[ " <> show i <> " out of " <> show totalCommands <> " ]"+ <> " Computing NF for " <> Rzk.printTree term) $ do+ withCommand command $ do+ term' <- infer (toTerm' term) >>= nfT+ traceTypeCheck Normal (" " <> show (untyped term')) $ do+ go (i + 1) moreCommands++ go i (command@(Rzk.CommandComputeWHNF _loc term) : moreCommands) =+ traceTypeCheck Normal ("[ " <> show i <> " out of " <> show totalCommands <> " ]"+ <> " Computing WHNF for " <> Rzk.printTree term) $ do+ withCommand command $ do+ term' <- infer (toTerm' term) >>= whnfT+ traceTypeCheck Normal (" " <> show (untyped term')) $ do+ go (i + 1) moreCommands++ go i (command@(Rzk.CommandAssume _loc names ty) : moreCommands) =+ traceTypeCheck Normal ("[ " <> show i <> " out of " <> show totalCommands <> " ]"+ <> " Checking #assume " <> intercalate " " [ Rzk.printTree name | name <- names ] ) $ do+ withCommand command $ do+ ty' <- typecheck (toTerm' ty) universeT+ loc <- asks location+ let decls = [ Decl (varIdentAt path name) ty' Nothing True [] loc | name <- names ]+ fmap (first (decls <>)) $+ localDeclsPrepared decls $+ go (i + 1) moreCommands++ go i (command@(Rzk.CommandSection _loc name) : moreCommands) = do+ withCommand command $ do+ (sectionCommands, moreCommands') <- splitSectionCommands name moreCommands+ withSection (Just name) (go i sectionCommands) $ do+ go (i + countCommands sectionCommands) moreCommands'++ go _i (command@(Rzk.CommandSectionEnd _loc endName) : _moreCommands) = do+ withCommand command $+ issueTypeError $ TypeErrorOther $+ "unexpected #end " <> Rzk.printTree endName <> ", no section was declared!"+++splitSectionCommands :: Rzk.SectionName -> [Rzk.Command] -> TypeCheck var ([Rzk.Command], [Rzk.Command])+splitSectionCommands name [] =+ issueTypeError (TypeErrorOther $ "Section " <> Rzk.printTree name <> " is not closed with an #end")+splitSectionCommands name (Rzk.CommandSection _loc name' : moreCommands) = do+ (cs1, cs2) <- splitSectionCommands name' moreCommands+ (cs3, cs4) <- splitSectionCommands name cs2+ return (cs1 <> cs3, cs4)+splitSectionCommands name (Rzk.CommandSectionEnd _loc endName : moreCommands) = do+ when (Rzk.printTree name /= Rzk.printTree endName) $+ issueTypeError $ TypeErrorOther $+ "unexpected #end " <> Rzk.printTree endName <> ", expecting #end " <> Rzk.printTree name+ return ([], moreCommands)+splitSectionCommands name (command : moreCommands) = do+ (cs1, cs2) <- splitSectionCommands name moreCommands+ return (command : cs1, cs2)++setOption :: String -> String -> TypeCheck var a -> TypeCheck var a+setOption "verbosity" = \case+ "debug" -> localVerbosity Debug+ "normal" -> localVerbosity Normal+ "silent" -> localVerbosity Silent+ _ -> const $+ issueTypeError $ TypeErrorOther "unknown verbosity level (use \"debug\", \"normal\", or \"silent\")"+setOption "render" = \case+ "svg" -> localRenderBackend (Just RenderSVG)+ "latex" -> localRenderBackend (Just RenderLaTeX)+ "none" -> localRenderBackend Nothing+ _ -> const $+ issueTypeError $ TypeErrorOther "unknown render backend (use \"svg\", \"latex\", or \"none\")"+-- | Render the shape only, hiding the proof term (drop the @\<title\>@+-- everywhere and blank interior labels), so a worked term can be shown as the+-- cell it builds without giving the term away (see 'renderHideTerm').+setOption "render-hide-term" = \case+ "yes" -> localHideTerm True+ "no" -> localHideTerm False+ _ -> const $+ issueTypeError $ TypeErrorOther "unknown value for \"render-hide-term\" (use \"yes\" or \"no\")"+setOption optionName = const $ const $+ issueTypeError $ TypeErrorOther ("unknown option " <> show optionName)++unsetOption :: String -> TypeCheck var a -> TypeCheck var a+unsetOption "verbosity" = localVerbosity (verbosity emptyContext)+unsetOption "render" = localRenderBackend (renderBackend emptyContext)+unsetOption "render-hide-term" = localHideTerm (renderHideTerm emptyContext)+unsetOption optionName = const $+ issueTypeError $ TypeErrorOther ("unknown option " <> show optionName)++paramToParamDecl :: Rzk.Param -> TypeCheck var [Rzk.ParamDecl]+paramToParamDecl (Rzk.ParamPatternShapeDeprecated loc pat cube tope) = pure+ [ Rzk.ParamTermShape loc (patternToTerm pat) cube tope ]+paramToParamDecl (Rzk.ParamPatternShape loc pats cube tope) = pure+ [ Rzk.ParamTermShape loc (patternToTerm pat) cube tope | pat <- pats]+paramToParamDecl (Rzk.ParamPatternType loc pats ty) = pure+ [ Rzk.ParamTermType loc (patternToTerm pat) ty | pat <- pats ]+paramToParamDecl Rzk.ParamPattern{} = issueTypeError $+ TypeErrorOther "untyped pattern in parameters"+paramToParamDecl (Rzk.ParamPatternModalType loc pats mc ty) = pure+ [ Rzk.ParamTermModalType loc (patternToTerm pat) mc ty | pat <- pats ]+paramToParamDecl (Rzk.ParamPatternModalShape loc pats mc cube tope) = pure+ [ Rzk.ParamTermModalShape loc (patternToTerm pat) mc cube tope | pat <- pats ]++addParamDecls :: [Rzk.ParamDecl] -> Rzk.Term -> Rzk.Term+addParamDecls [] = id+addParamDecls (paramDecl : paramDecls)+ = Rzk.TypeFun Nothing paramDecl . addParamDecls paramDecls++addParams :: [Rzk.Param] -> Rzk.Term -> Rzk.Term+addParams [] = id+addParams params = Rzk.Lambda Nothing params++data TypeError var+ = TypeErrorOther String+ | TypeErrorUnify (TermT var) (TermT var) (TermT var)+ | TypeErrorUnifyTerms (TermT var) (TermT var)+ | TypeErrorNotPair (TermT var) (TermT var)+ | TypeErrorNotModal (Term var) TModality (TermT var)+ | TypeErrorModalityMismatch TModality TModality (Term var)+ | TypeErrorUnaccessibleVar var TModality TModality+ | TypeErrorNotTypeInModal (TermT var)+ | TypeErrorNotFunction (TermT var) (TermT var)+ | TypeErrorUnexpectedLambda (Term var) (TermT var)+ | TypeErrorUnexpectedPair (Term var) (TermT var)+ | TypeErrorUnexpectedRefl (Term var) (TermT var)+ | TypeErrorCannotInferBareLambda (Term var)+ | TypeErrorCannotInferBareRefl (Term var)+ | TypeErrorCannotInferHole (Term var)+ | TypeErrorUnsolvedHole (Maybe VarIdent) (TermT var)+ | TypeErrorUndefined var+ | TypeErrorTopeNotSatisfied [TermT var] (TermT var)+ | TypeErrorTopeContextDisjoint (TermT var) [TermT var]+ | TypeErrorTopesNotEquivalent (TermT var) (TermT var)+ | TypeErrorInvalidArgumentType (Term var) (TermT var)+ | TypeErrorDuplicateTopLevel [VarIdent] VarIdent+ | TypeErrorUnusedVariable var (TermT var)+ | TypeErrorUnusedUsedVariables [var] var+ | TypeErrorImplicitAssumption (var, TermT var) var+ deriving (Functor, Foldable)++data TypeErrorInContext var = TypeErrorInContext+ { typeErrorError :: TypeError var+ , typeErrorContext :: Context var+ } deriving (Functor, Foldable)++data TypeErrorInScopedContext var+ = PlainTypeError (TypeErrorInContext var)+ | ScopedTypeError (Maybe VarIdent) (TypeErrorInScopedContext (Inc var))+ deriving (Functor, Foldable)++type TypeError' = TypeError VarIdent++ppModality :: TModality -> String+ppModality = \case+ Flat -> "♭"+ Sharp -> "♯"+ Op -> "ᵒᵖ"+ Id -> "_id"++-- | Render a type error, folding pattern-binder projections (e.g. @π₁ x@ back to+-- the user's @t@) and showing a bare pattern point as the pattern, using the+-- context's freshened binders (see 'contextBinders').+ppTypeError' :: [(VarIdent, Binder)] -> TypeError' -> String+ppTypeError' fbs = \case+ TypeErrorOther msg -> msg+ TypeErrorUnify term expected actual -> block TopDown+ [ "cannot unify expected type"+ , " " <> ppU (untyped expected)+ , "with actual type"+ , " " <> ppU (untyped actual)+ , "for term"+ , " " <> ppU (untyped term) ]+ TypeErrorUnifyTerms expected actual -> block TopDown+ [ "cannot unify term"+ , " " <> ppU (untyped expected)+ , "with term"+ , " " <> ppU (untyped actual) ]+ TypeErrorNotPair term ty -> block TopDown+ [ "expected a cube product or dependent pair"+ , "but got type"+ , " " <> ppU (untyped ty)+ , "for term"+ , " " <> ppU (untyped term)+ , case ty of+ TypeFunT{} -> "\nPerhaps the term is applied to too few arguments?"+ _ -> ""+ ]+ TypeErrorNotModal term m ty -> block TopDown+ [ "expected modal type " <> ppModality m <> " ?"+ , "but got type"+ , " " <> ppU (untyped ty)+ , "for term"+ , " " <> ppU term+ ]+ TypeErrorModalityMismatch expected actual term -> block TopDown+ [ "modality mismatch"+ , " expected " <> ppModality expected+ , " but got " <> ppModality actual+ , "for term"+ , " " <> ppU term+ ]+ TypeErrorUnaccessibleVar _var varMod locks -> block TopDown+ [ "unaccessible var with modality " <> ppModality varMod+ , " under locks " <> ppModality locks+ ]+ TypeErrorNotTypeInModal ty -> block TopDown+ [ "expected a type inside modal type"+ , "but got"+ , " " <> ppU (untyped ty)+ ]++ TypeErrorUnexpectedLambda term ty -> block TopDown+ [ "unexpected lambda abstraction"+ , " " <> ppU term+ , "when typechecking against a non-function type"+ , " " <> ppTyped ty+ ]+ TypeErrorUnexpectedPair term ty -> block TopDown+ [ "unexpected pair"+ , " " <> ppU term+ , "when typechecking against a type that is not a product or a dependent sum"+ , " " <> ppTyped ty+ ]+ TypeErrorUnexpectedRefl term ty -> block TopDown+ [ "unexpected refl"+ , " " <> ppU term+ , "when typechecking against a type that is not an identity type"+ , " " <> ppTyped ty+ ]++ TypeErrorNotFunction term ty -> block TopDown+ [ "expected a function or extension type"+ , "but got type"+ , " " <> ppU (untyped ty)+ , "for term"+ , " " <> ppU (untyped term)+ , case term of+ AppT _ty f _x -> "\nPerhaps the term\n " <> ppU (untyped f) <> "\nis applied to too many arguments?"+ _ -> ""+ ]+ TypeErrorCannotInferBareLambda term -> block TopDown+ [ "cannot infer the type of the argument"+ , "in lambda abstraction"+ , " " <> ppU term+ ]+ TypeErrorCannotInferBareRefl term -> block TopDown+ [ "cannot infer the type of term"+ , " " <> ppU term+ ]+ TypeErrorCannotInferHole term -> block TopDown+ [ "cannot infer the type of a hole"+ , " " <> ppU term+ , "a hole is only allowed where its type is already known (checking position)"+ ]+ TypeErrorUnsolvedHole mname goal -> block TopDown+ [ "found an unsolved hole" <> maybe "" (\name -> " ?" <> show name) mname+ , "expected type (goal):"+ , " " <> ppU (untyped goal)+ ]+ TypeErrorUndefined var -> block TopDown+ [ "undefined variable: " <> show (Pure var :: Term') ]+ TypeErrorTopeNotSatisfied topes tope -> block TopDown+ [ "local context is not included in (does not entail) the tope"+ , " " <> ppU (untyped tope)+ , "in local context (normalised)"+ , intercalate "\n" (map (" " <>) (map ppTyped topes))] -- FIXME: remove+ TypeErrorTopeContextDisjoint tope topes -> block TopDown+ [ "the tope"+ , " " <> ppU (untyped tope)+ , "is disjoint from the local tope context (their conjunction is the empty tope ⊥),"+ , "so this restriction face or recOR branch is vacuous everywhere"+ , "in local context (normalised)"+ , intercalate "\n" (map (" " <>) (map ppTyped topes))]+ TypeErrorTopesNotEquivalent expected actual -> block TopDown+ [ "expected tope"+ , " " <> ppU (untyped expected)+ , "but got"+ , " " <> ppU (untyped actual) ]++ TypeErrorInvalidArgumentType argType argKind -> block TopDown+ [ "invalid function parameter type"+ , " " <> ppU argType+ , "function parameter can be a cube, a shape, or a type"+ , "but given parameter type has type"+ , " " <> ppU (untyped argKind)+ ]++ TypeErrorDuplicateTopLevel previous lastName -> block TopDown+ [ "duplicate top-level definition"+ , " " <> ppVarIdentWithLocation lastName+ , "previous top-level definitions found at"+ , intercalate "\n"+ [ " " <> ppVarIdentWithLocation name+ | name <- previous ]+ ]++ TypeErrorUnusedVariable name type_ -> block TopDown+ [ "unused variable"+ , " " <> Rzk.printTree (getVarIdent name) <> " : " <> ppU (untyped type_)+ ]++ TypeErrorUnusedUsedVariables vars name -> block TopDown+ [ "unused variables"+ , " " <> intercalate " " (map (Rzk.printTree . getVarIdent) vars)+ , "declared as used in definition of"+ , " " <> Rzk.printTree (getVarIdent name)+ ]++ TypeErrorImplicitAssumption (a, aType) name -> block TopDown+ [ "implicit assumption"+ , " " <> Rzk.printTree (getVarIdent a) <> " : " <> ppU (untyped aType)+ , "used in definition of"+ , " " <> Rzk.printTree (getVarIdent name)+ ]+ where+ ppU :: Term' -> String+ ppU = ppFoldU fbs+ ppTyped :: TermT' -> String+ ppTyped = ppFoldT fbs+++-- | The pattern binders in scope, freshened and keyed by their (current) name,+-- together with the projection-folding map derived from them. Both share the+-- same freshened component names, so a term's projections and the binder shown+-- in the context agree.+contextBinders+ :: Context VarIdent+ -> ([(VarIdent, Binder)], [(VarIdent, [([Proj], VarIdent)])])+contextBinders ctx = (fbs, binderProjMap id fbs)+ where+ mapping = [ (v, v) | (v, _) <- varTypes ctx ]+ fbs = freshBinders id mapping (varBinders ctx)++-- | Render an (untyped) term for an error or diagnostic message, given the+-- context's freshened pattern binders: fold a pattern-binder variable's+-- projections to their component names, then expand a bare use of the variable+-- to the pattern itself (see 'foldBinderProjections' and 'restorePatternVars').+-- An empty binder list renders the term as-is.+ppFoldU :: [(VarIdent, Binder)] -> Term' -> String+ppFoldU fbs =+ show . restorePatternVars fbs . foldBinderProjections (binderProjMap id fbs)++-- | Like 'ppFoldU' for a type-annotated term, shown as @term : type@ with the+-- same folding and pattern restoration applied to both halves.+ppFoldT :: [(VarIdent, Binder)] -> TermT' -> String+ppFoldT fbs t0 =+ case foldBinderProjectionsT (binderProjMap id fbs) t0 of+ t@Pure{} -> r t+ t@(Free (AnnF info _)) -> r t <> " : " <> r (infoType info)+ where+ r :: TermT' -> String+ r = show . restorePatternVars fbs . untyped++ppTypeErrorInContext :: OutputDirection -> TypeErrorInContext VarIdent -> String+ppTypeErrorInContext dir TypeErrorInContext{..} = block dir+ [ ppTypeError' fbs typeErrorError+ , ""+ , ppContext' dir typeErrorContext+ ]+ where+ (fbs, _) = contextBinders typeErrorContext++ppTypeErrorInScopedContextWith'+ :: OutputDirection+ -> [VarIdent]+ -> [VarIdent]+ -> TypeErrorInScopedContext VarIdent+ -> String+ppTypeErrorInScopedContextWith' dir used vars = \case+ PlainTypeError err -> ppTypeErrorInContext dir err+ ScopedTypeError orig err -> withFresh orig $ \(x, xs) ->+ ppTypeErrorInScopedContextWith' dir (x:used) xs $ fmap (g x) err+ where+ g x Z = x+ g _ (S y) = y++ withFresh Nothing f =+ case vars of+ x:xs -> f (x, xs)+ _ -> panicImpossible "not enough fresh variables"+ withFresh (Just z) f = f (z', filter (/= z') vars) -- FIXME: very inefficient filter+ where+ z' = refreshVar used z -- FIXME: inefficient++ppTypeErrorInScopedContext' :: OutputDirection -> TypeErrorInScopedContext VarIdent -> String+ppTypeErrorInScopedContext' dir err =+ ppTypeErrorInScopedContextWith' dir vars (defaultVarIdents \\ vars) err+ where+ vars = nub (foldMap pure err)++issueWarning :: String -> TypeCheck var ()+issueWarning message = do+ trace ("Warning: " <> message) $+ return ()++fromTypeError :: TypeError var -> TypeCheck var (TypeErrorInScopedContext var)+fromTypeError err = do+ context <- ask+ return $ PlainTypeError $ TypeErrorInContext+ { typeErrorError = err+ , typeErrorContext = context+ }++issueTypeError :: TypeError var -> TypeCheck var a+issueTypeError err = fromTypeError err >>= throwError++panicImpossible :: String -> a+panicImpossible msg = error $ unlines+ [ "PANIC! Impossible happened (" <> msg <> ")!"+ , "Please, report a bug at https://github.com/rzk-lang/rzk/issues"+ -- TODO: add details and/or instructions how to produce an artifact for reproducing+ ]++data Action var+ = ActionTypeCheck (Term var) (TermT var)+ | ActionUnify (TermT var) (TermT var) (TermT var)+ | ActionUnifyTerms (TermT var) (TermT var)+ | ActionInfer (Term var)+ | ActionContextEntailedBy [TermT var] (TermT var)+ | ActionContextEntails [TermT var] (TermT var)+ | ActionContextEntailsUnion [TermT var] [TermT var]+ | ActionWHNF (TermT var)+ | ActionNF (TermT var)+ | ActionCheckCoherence (TermT var, TermT var) (TermT var, TermT var)+ | ActionCloseSection (Maybe Rzk.SectionName)+ | ActionCheckLetValue (Maybe VarIdent)+ deriving (Functor, Foldable)++type Action' = Action VarIdent++-- | Freshen the compound (pattern) binders in scope so their component names+-- avoid the display names already in use and one another. Returns each relevant+-- variable paired with its freshened binder. Variables bound to a single name+-- are omitted: they need no projection folding and are displayed normally.+freshBinders+ :: Eq var+ => (var -> VarIdent)+ -> [(var, VarIdent)]+ -> [(var, Binder)]+ -> [(var, Binder)]+freshBinders name mapping binders = go (map (name . fst) mapping) compound+ where+ compound = [ (v, b) | (v, b) <- binders, binderIsCompound b, v `elem` map fst mapping ]+ go _ [] = []+ go used ((v, b) : rest) =+ let b' = freshenBinderLeaves used b+ in (v, b') : go (binderLeaves b' ++ used) rest++-- | The projection-folding map for rendering: each pattern-binder variable's+-- display name mapped to the projection paths of its component names (e.g.+-- @π₁@ ↦ @t@, @π₂@ ↦ @s@). Ordinary projections (of non-pattern variables) are+-- left untouched.+binderProjMap :: (var -> VarIdent) -> [(var, Binder)] -> [(VarIdent, [([Proj], VarIdent)])]+binderProjMap name fbs = [ (name v, binderPaths b) | (v, b) <- fbs ]++ppTermInContext :: Eq var => TermT var -> TypeCheck var String+ppTermInContext term = do+ vars <- freeVarsT_ term+ let mapping = zip vars defaultVarIdents+ toRzkVarIdent origs var = fromMaybe "_" $+ join (lookup var origs) <|> lookup var mapping+ origs <- asks varOrigs+ binders <- asks varBinders+ let name = toRzkVarIdent origs+ fbs = freshBinders name mapping binders+ return (show (restorePatternVars [ (name v, b) | (v, b) <- fbs ]+ (foldBinderProjections (binderProjMap name fbs)+ (untyped (name <$> term)))))++-- | Classify a (WHNF) type as a cube, so cube variables (e.g. @t : 2@) are+-- shown separately from ordinary term variables in a hole's context.+isCubeType :: TermT var -> Bool+isCubeType = \case+ CubeUnitT{} -> True+ Cube2T{} -> True+ CubeIT{} -> True+ CubeProductT{} -> True+ UniverseCubeT{} -> True+ _ -> False++-- | Is a (WHNF) goal type in the cube or tope layer, so a hole of this type is a+-- cube point or a tope rather than a term? Used to suppress type-layer-specific+-- hole candidates (@recOR@, @recBOT@), which cannot inhabit a cube or a tope.+isCubeOrTopeType :: TermT var -> Bool+isCubeOrTopeType t = isCubeType t || case t of+ UniverseTopeT{} -> True+ _ -> False++-- | Is this term a hole? Holes only exist in lenient mode (see 'allowHoles');+-- they are opaque placeholders standing for a term of the expected type.+isHoleT :: TermT var -> Bool+isHoleT HoleT{} = True+isHoleT _ = False++-- | Does this term contain a hole anywhere (including nested, e.g. @f ?@)?+-- Used to keep unification lenient around incomplete terms: a term with an+-- unfilled hole cannot be meaningfully compared, so a unification that would+-- otherwise fail is deferred. Evaluated only on the failure path.+containsHole :: TermT var -> Bool+containsHole = \case+ HoleT{} -> True+ Pure{} -> False+ Free (AnnF _ termf) -> bifoldr ((||) . containsHole) ((||) . containsHole) False termf++-- | All ways to eliminate a hypothesis into a value usable at a goal. Given a+-- @target@ type and a hypothesis /term/ (e.g. @Pure v@ for a context variable),+-- return every elimination spine over that term whose type fits the target (or+-- a subtype of it). Arguments introduced by application are left as holes for+-- the caller to fill later. A value that already fits is returned as-is; a+-- function is applied to holes; a Σ-type (or anything that unfolds to one, e.g.+-- @is-contr@) is projected, possibly repeatedly — so e.g.+-- @first (first (is-segal-A ? ? ? ? ?))@ is discovered.+--+-- The search is driven uniformly by the eliminators a (weak head normal) type+-- admits (see 'eliminatorsOf'), so adding a new eliminator extends it without+-- touching the search. Depth is bounded by 'maxEliminationDepth'.+allEliminationsInto+ :: Eq var => TermT var -> TermT var -> TypeCheck var [TermT var]+allEliminationsInto target = go maxEliminationDepth+ where+ go depth term = do+ ty <- typeOf term+ fits <- fitsInto term ty target+ deeper <-+ if depth <= 0+ then pure []+ else do+ elims <- eliminatorsOf ty+ concat <$> mapM (\wrap -> go (depth - 1) (wrap term)) elims+ pure ([term | fits] <> deeper)++-- | How deep an elimination spine 'allEliminationsInto' will build. A temporary+-- fixed bound: seven is enough for the spines seen so far (fully applying a+-- five-argument hypothesis and projecting twice), and a larger bound mostly adds+-- self-referential spines (a built result applied again). It should be made+-- configurable, and likely raised, once there is more evidence of what real+-- goals need. The chain only branches at Σ-types, which are shallow, so the+-- search stays small.+maxEliminationDepth :: Int+maxEliminationDepth = 7++-- | Whether a term of the given (whnf) type may stand where a value of the+-- @target@ type is expected: the two types unify under 'structuralHoleUnify',+-- so a hole acts as a wildcard leaf but a structural mismatch around it is still+-- a mismatch (an under-applied function does not match an extension-type goal,+-- but a partial application that genuinely fits an ordinary-function goal does).+--+-- Outer type restrictions are stripped from both sides first: an extension-type+-- boundary is satisfied by later refinement, not by the choice of spine, and+-- matching against the restricted goal would reject the very spine that+-- introduces the holes meant to satisfy it (e.g. @f ?@ at a boundary goal).+--+-- Holes or constraints recorded while probing are discarded, so this is a pure+-- yes/no query.+fitsInto :: Eq var => TermT var -> TermT var -> TermT var -> TypeCheck var Bool+fitsInto term ty target = do+ ty' <- stripTypeRestrictions <$> whnfT ty+ target' <- stripTypeRestrictions <$> whnfT target+ censor (const []) $ local structuralHoleUnify+ ((unify (Just term) target' ty' >> pure True) `catchError` \_ -> pure False)++-- | The eliminators a value of the given (weak head normal) type admits, each+-- as a function wrapping the eliminated term. A Π-type is eliminated by+-- application to a fresh hole; a Σ-type by either projection; an identity type+-- by path induction (@idJ@), with the motive and base case left as holes.+-- Anything else admits no simple eliminator.+eliminatorsOf :: Eq var => TermT var -> TypeCheck var [TermT var -> TermT var]+eliminatorsOf ty =+ case stripTypeRestrictions ty of+ TypeFunT _ty _orig _md param _mtope ret ->+ pure [ \term -> let h = mkHole param in appT (substituteT h ret) term h ]+ TypeSigmaT _ty _orig _md a b ->+ pure [ \term -> firstT a term+ , \term -> secondT (substituteT (firstT a term) b) term ]+ -- A cube point pair (e.g. a pattern-bound @(t , s) : 2 × 2@) projects to its+ -- coordinates; rzk renders those projections back as the pattern names.+ CubeProductT _ty a b ->+ pure [ \term -> firstT a term+ , \term -> secondT b term ]+ -- A path @p : a =_A x@ is eliminated by path induction. The motive+ -- @C : (z : A) → (a =_A z) → U@ is always a function, so we introduce it+ -- straight away as @\\ b q → ?@ rather than leaving it a bare hole: the spine+ -- @idJ A a (\\ b q → ?) ? x p@ then has type @C x p@, which β-reduces to that+ -- inner hole — so J fits any goal (the player fills the motive and the base+ -- case @d : C a refl@). The two holes are the motive predicate and the base.+ TypeIdT _ty a mtA x -> do+ tA <- maybe (typeOf a) pure mtA+ let -- the motive predicate body, a type, under the two motive binders+ cBody = mkHole universeT+ cInner = lambdaT (typeFunT (BinderVar Nothing) Id+ (typeIdT (S <$> a) (Just (S <$> tA)) (Pure Z)) Nothing universeT)+ (BinderVar (Just (fromString "q"))) Nothing cBody+ cType = typeFunT (BinderVar Nothing) Id tA Nothing $+ typeFunT (BinderVar Nothing) Id+ (typeIdT (S <$> a) (Just (S <$> tA)) (Pure Z)) Nothing universeT+ c = lambdaT cType (BinderVar (Just (fromString "b"))) Nothing cInner+ dType = appT universeT+ (appT (typeFunT (BinderVar Nothing) Id (typeIdT a (Just tA) a) Nothing universeT) c a)+ (reflT (typeIdT a (Just tA) a) Nothing)+ d = mkHole dType+ motiveAt y p = appT universeT+ (appT (typeFunT (BinderVar Nothing) Id (typeIdT a (Just tA) y) Nothing universeT) c y) p+ pure [ \p -> idJT (motiveAt x p) tA a c d x p ]+ _ -> pure []+ where+ mkHole t = HoleT TypeInfo{ infoType = t, infoWHNF = Nothing, infoNF = Nothing } Nothing++-- | The binder for a λ introduced over a domain type. A binder the type already+-- gives as a pattern is kept as-is — it carries the user's own names (e.g.+-- @(t , s)@). Otherwise an /explicit/ (pre-whnf) Σ-type or product domain is+-- destructured into a fresh pair pattern, recursively for products, so that a+-- nameless @2 × 2 × 2@ parameter is introduced as @((t1 , t2) , t3)@ rather than+-- a single opaque variable. Any other domain keeps its single binder.+--+-- Leaves are named by what they range over: a cube-product component is a point,+-- named @t@/@s@-style as @tN@; a Σ component is a term, named @xN@. The names are+-- display-only (the body is a hole that does not mention them) and carry a+-- shared running index, so every leaf in the pattern is distinct.+destructuringBinder :: Binder -> TermT var -> Binder+destructuringBinder orig param = case orig of+ BinderPair{} -> orig -- already a pattern: keep the user's names+ _ -> case param of+ CubeProductT{} -> fst (go 1 param)+ TypeSigmaT{} -> fst (go 1 param)+ _ -> orig -- not a product/Σ: leave the binder alone+ where+ -- a product/Σ becomes a pair; we recurse into a product's components (plain+ -- types) but not under a Σ's binder (a scope). A leaf is named by its+ -- enclosing constructor: @tN@ under a cube product, @xN@ under a Σ.+ go n = \case+ CubeProductT _ a b ->+ let (l, n') = child "t" n a+ (r, n'') = child "t" n' b+ in (BinderPair l r, n'')+ TypeSigmaT _ _ _md a _b ->+ let (l, n') = child "x" n a+ in (BinderPair l (BinderVar (Just (leaf "x" n'))), n' + 1)+ _ -> (BinderVar (Just (leaf "t" n)), n + 1) -- unreached: go is called on products only+ child pfx n = \case+ c@CubeProductT{} -> go n c+ c@TypeSigmaT{} -> go n c+ _ -> (BinderVar (Just (leaf pfx n)), n + 1)+ leaf pfx n = fromString (pfx <> show n :: String)++-- | All ways to introduce a value /of/ a goal type by its head constructor,+-- leaving the constituents as holes. Given a @target@ type, return its+-- introduction forms:+--+-- * a Π-type is introduced by a λ-abstraction over a hole body (@\\ x -> ?@);+-- the binder is taken from the type, so a pattern domain (e.g. a @Δ²@ point+-- @(t , s)@) is introduced as @\\ (t , s) -> ?@;+-- * a Σ-type or a cube product by a pair of holes (@(? , ?)@);+-- * an identity type by @refl@, but only when its two endpoints already agree+-- (otherwise @refl@ would not typecheck);+-- * the unit type by @unit@;+-- * the tope universe by each tope constructor — @TOP@, @BOT@, @? ≡ ?@,+-- @? ≤ ?@, @? ∧ ?@, @? ∨ ?@ — so a shape (a hole of type @TOPE@) can be+-- built up by tapping.+--+-- Any other type admits no simple introduction. Unlike 'allEliminationsInto'+-- this does not search: a type has at most one introduction form (the tope+-- universe is the one exception), read off its (weak head normal) head+-- constructor. Outer type restrictions are stripped first, so an extension type+-- is introduced by the form of its underlying type (its boundary is met by later+-- refinement of the holes, not by the choice of constructor).+--+-- The λ binder of a Π-introduction is freshened against @inScope@ (the names+-- already visible at the hole), so introducing over a type whose own definition+-- reuses an in-scope name (e.g. @hom@, whose internal binder is @t@) yields+-- @\\ t₁ -> ?@ rather than a @t@ that shadows the existing one.+allIntroductionsOf :: Eq var => TermT var -> [VarIdent] -> TypeCheck var [TermT var]+allIntroductionsOf target inScope = do+ target' <- stripTypeRestrictions <$> whnfT target+ case target' of+ TypeFunT _ty orig _md param _mtope ret ->+ let binder = freshenBinderLeaves inScope (destructuringBinder orig param)+ in pure [ lambdaT target' binder Nothing (mkHole ret) ]+ TypeSigmaT _ty _orig _md a b ->+ let h = mkHole a in pure [ pairT target' h (mkHole (substituteT h b)) ]+ CubeProductT _ty a b ->+ pure [ pairT target' (mkHole a) (mkHole b) ]+ TypeIdT _ty a _tA b -> do+ agree <- endpointsAgree a b+ pure [ reflT target' Nothing | agree ]+ TypeUnitT{} -> pure [ unitT ]+ -- the tope universe: every tope constructor builds a tope, so all are+ -- introductions of a shape goal. Point arguments (of ≡, ≤) and tope+ -- arguments (of ∧, ∨) are left as holes.+ UniverseTopeT{} ->+ let point = mkHole (mkHole cubeT) -- a point of an as-yet-unknown cube+ tope = mkHole target' -- a tope (its type is the tope universe)+ in pure [ topeTopT, topeBottomT+ , topeEQT point point, topeLEQT point point+ , topeAndT tope tope, topeOrT tope tope ]+ _ -> pure []+ where+ mkHole t = HoleT TypeInfo{ infoType = t, infoWHNF = Nothing, infoNF = Nothing } Nothing++-- | Whether the two endpoints of an identity type are definitionally equal, so+-- that @refl@ inhabits it. Like 'fitsInto', any holes or constraints recorded+-- while probing are discarded, leaving a pure yes\/no query.+endpointsAgree :: Eq var => TermT var -> TermT var -> TypeCheck var Bool+endpointsAgree a b =+ censor (const [])+ ((unify Nothing a b >> pure True) `catchError` \_ -> pure False)++-- | Whether the local tope context is contradictory (entails ⊥). Reads the+-- precomputed flag when present, falling back to an entailment check. Used to+-- decide whether @recBOT@ (ex falso) is available.+contextEntailsBottom :: Eq var => TypeCheck var Bool+contextEntailsBottom = asks localTopesEntailBottom >>= \case+ Just b -> return b+ Nothing -> asks localTopesNF >>= (`entailM` topeBottomT)++-- | Ex falso: in a contradictory tope context @recBOT@ inhabits any type, so it+-- is a candidate for every goal there (and only there — elsewhere it would not+-- typecheck). Independent of the goal and of the local hypotheses.+recBottomCandidates :: Eq var => TypeCheck var [TermT var]+recBottomCandidates = do+ vacuous <- contextEntailsBottom+ pure [ recBottomT | vacuous ]++-- | Whether the local tope context is covered by the union of the given topes —+-- the coverage obligation of @recOR@ (see 'contextEntailsUnion'), but as a pure+-- yes\/no query rather than a check that issues an error.+coverageHolds :: Eq var => [TermT var] -> TypeCheck var Bool+coverageHolds topes = do+ contextTopes <- asks localTopesNF+ topesNF <- mapM nfTope topes+ contextTopes `entailM` foldr topeOrT topeBottomT topesNF++-- | Tope case-split moves: ways to build a value of the goal by @recOR@,+-- splitting the proof over a cover of the local tope context. Three sources,+-- offered together (the UI ranks and filters):+--+-- * each disjunction @ψ ∨ φ@ already in the context becomes+-- @recOR(ψ ↦ ?, φ ↦ ?)@ — its cover is immediate;+-- * when the goal is an extension type, its restriction faces are a cover+-- candidate @recOR(ψ₁ ↦ ?, …)@, offered only when they actually cover the+-- context (so the move typechecks);+-- * a generic two-way split @recOR(? ↦ ?, ? ↦ ?)@ with the guards left as+-- holes, for an unusual split the player fills in by hand.+--+-- All three are offered only in a setting where a split makes sense — a cube+-- variable is in scope, the context has a non-trivial tope, or the goal is a+-- restricted type — so an ordinary (tope-free) goal is left alone.+recOrCandidates :: Eq var => TermT var -> TypeCheck var [TermT var]+recOrCandidates goal = do+ goalW <- whnfT goal+ topes <- asks (filter (/= topeTopT) . availableTopes)+ locals <- asks (filter (not . varIsTopLevel . snd) . varInfos)+ hasCube <- or <$> mapM (fmap isCubeType . whnfT . varType . snd) locals+ let stripped = stripTypeRestrictions goalW+ mkRecOr gs = recOrT stripped [ (g, mkHole stripped) | g <- gs ]+ fromContext = [ mkRecOr [l, r] | TopeOrT _ l r <- topes ]+ faces = case goalW of+ TypeRestrictedT _ _ rs -> map fst rs+ _ -> []+ isRestricted = case goalW of TypeRestrictedT{} -> True; _ -> False+ inShape = hasCube || not (null topes) || isRestricted+ generic = [ recOrT stripped [ (mkHole topeT, mkHole stripped)+ , (mkHole topeT, mkHole stripped) ]+ | inShape ]+ fromFaces <- if length faces >= 2+ then do covered <- coverageHolds faces+ pure [ mkRecOr faces | covered ]+ else pure []+ pure (fromContext <> fromFaces <> generic)+ where+ mkHole t = HoleT TypeInfo{ infoType = t, infoWHNF = Nothing, infoNF = Nothing } Nothing++-- | Record the goal and local context at a hole (lenient mode only). The goal,+-- the local hypotheses, and the tope assumptions are all rendered to+-- user-facing 'VarIdent' names here — reusing the same resolution as+-- 'ppTermInContext' — so the resulting 'HoleInfo' is independent of the De+-- Bruijn scope. The global environment is deliberately excluded (only+-- @varIsTopLevel == False@ locals are kept), and locals are split into cube+-- variables and ordinary term variables.+recordHole :: Eq var => Maybe VarIdent -> TermT var -> TypeCheck var ()+recordHole mname goalTy = recordHoleShape mname goalTy Nothing++-- | Record a hole. When the hole is the argument of a shape-restricted function+-- its goal is a /shape/: the cube @goalTy@ together with a membership tope. The+-- tope is a scope over the shape's bound variable (the third argument carries+-- the declared binder name, if any, and the tope); it is rendered under that+-- binder so the goal reads @(binder : goalTy | tope)@.+recordHoleShape+ :: Eq var+ => Maybe VarIdent+ -> TermT var+ -> Maybe (Binder, TermT (Inc var))+ -> TypeCheck var ()+recordHoleShape mname goalTy mshape = do+ goal' <- whnfT goalTy+ locals <- asks (filter (not . varIsTopLevel . snd) . varInfos)+ -- named top-level lemmas the caller allow-listed for hints (see 'hintLemmas').+ -- They feed the candidate-elimination loop only — not the local context shown+ -- to the user, since they are global definitions, not local hypotheses.+ lemmas <- asks hintLemmas+ lemmaVars <- asks (filter (\(_, i) -> varIsTopLevel i && maybe False (`elem` lemmas) (binderName (varOrig i))) . varInfos)+ cubeFlags <- mapM (fmap isCubeType . whnfT . varType . snd) locals+ topes <- asks (filter (/= topeTopT) . availableTopes)+ origs <- asks varOrigs+ binders <- asks varBinders+ loc <- asks location+ -- for each local hypothesis (and allow-listed lemma), the elimination spines+ -- that land in the goal (arguments left as holes). Probing must not leak holes+ -- into the recorded output, hence 'censor'.+ candidates <- censor (const []) $ do+ elims <- concat <$> mapM (\(v, _) -> allEliminationsInto goalTy (Pure v)) (locals ++ lemmaVars)+ -- context-driven moves (independent of the goal's head and the hypotheses):+ -- ex falso in a contradictory context, and tope case-splits. recOR and recBOT+ -- are term-level eliminators, so they are offered only for a term goal — not+ -- when the hole is a cube point or a tope, where they cannot appear.+ let termLayer = not (isCubeOrTopeType goal')+ recbot <- if termLayer then recBottomCandidates else pure []+ recor <- if termLayer then recOrCandidates goalTy else pure []+ pure (elims <> recbot <> recor)+ let shapeTope = snd <$> mshape+ shapeTopeVars = maybe [] (\t -> [ v | S v <- foldr (:) [] t ]) shapeTope+ varsList <- concat <$> mapM freeVarsT_ (goal' : map (varType . snd) (locals ++ lemmaVars) ++ topes)+ let mapping = zip (nub (varsList ++ shapeTopeVars ++ map fst (locals ++ lemmaVars))) defaultVarIdents+ name v = fromMaybe "_" (join (lookup v origs) <|> lookup v mapping)+ fbs = freshBinders name mapping binders+ render t = restorePatternVars [ (name v, b) | (v, b) <- fbs ]+ (foldBinderProjections (binderProjMap name fbs) (untyped (name <$> t)))+ -- a pattern binder is shown as its pattern, e.g. (t , s); others by name+ entryName v = maybe (name v) binderDisplayName (lookup v fbs)+ entries = [ HoleEntry (entryName v) (render (varType info)) | (v, info) <- locals ]+ flagged = zip cubeFlags entries+ -- binder name for the shape: the declared name if any, else a default+ shapeBinder = fromMaybe (fromString "t") (binderName =<< (fst <$> mshape))+ nameInc Z = shapeBinder+ nameInc (S v) = name v+ goalShape = (\t -> (shapeBinder, untyped (nameInc <$> t))) <$> shapeTope+ -- names already visible at the hole, which an introduced binder must not+ -- shadow: each local hypothesis by its display name, or the leaves of a+ -- pattern hypothesis.+ inScopeNames = [ nm | (v, _) <- locals+ , nm <- maybe [name v] binderLeaves (lookup v fbs) ]+ -- the introduction forms for the goal itself (constituents left as holes); the+ -- Π binder is freshened against 'inScopeNames' so it does not shadow.+ introductions <- censor (const []) (allIntroductionsOf goalTy inScopeNames)+ -- the goal cell: an SVG of the shape the hole must inhabit (an arrow, triangle+ -- or square), drawn from an abstract inhabitant with the proof term hidden.+ -- 'Nothing' when the goal is not a renderable shape.+ diagram <- censor (const []) (renderGoalCellSVG goal')+ lift $ tell+ [ HoleInfo+ { holeName = mname+ , holeGoal = render goal'+ , holeGoalShape = goalShape+ , holeTermVars = [ e | (False, e) <- flagged ]+ , holeCubeVars = [ e | (True, e) <- flagged ]+ , holeTopes = map render topes+ , holeCandidates = map render candidates+ , holeIntroductions = map render introductions+ , holeDiagram = diagram+ , holeLocation = loc+ } ]++-- | Check a hole that appears as the argument of a shape-restricted function,+-- whose domain is the cube @cube@ restricted by @tope@ (a scope over the+-- domain's bound variable). Mirrors the hole case of 'typecheck', but records+-- the shape as the hole's goal so the diagnostic shows @(binder : cube | tope)@.+checkHoleAgainstShape+ :: Eq var+ => Maybe VarIdent -> Binder -> TermT var -> TermT (Inc var)+ -> TypeCheck var (TermT var)+checkHoleAgainstShape mname orig cube tope = do+ reject <- asks holesAreErrors+ if reject+ then issueTypeError (TypeErrorUnsolvedHole mname cube)+ else do+ recordHoleShape mname cube (Just (orig, tope))+ return (HoleT TypeInfo{ infoType = cube, infoWHNF = Nothing, infoNF = Nothing } mname)++ppSomeAction :: Eq var => [(var, Maybe VarIdent)] -> Int -> Action var -> String+ppSomeAction origs n action = ppAction [] n (toRzkVarIdent <$> action)+ where+ vars = nub (foldMap pure action)+ mapping = zip vars defaultVarIdents+ toRzkVarIdent var = fromMaybe "_" $+ join (lookup var origs) <|> lookup var mapping++ppAction :: [(VarIdent, Binder)] -> Int -> Action' -> String+ppAction fbs n = unlines . map (replicate (2 * n) ' ' <>) . \case+ ActionTypeCheck term ty ->+ [ "typechecking"+ , " " <> ppU term+ , "against type"+ , " " <> ppU (untyped ty) ]++ ActionUnify term expected actual ->+ [ "unifying expected type"+ , " " <> ppU (untyped expected)+ , "with actual type"+ , " " <> ppU (untyped actual)+ , "for term"+ , " " <> ppU (untyped term) ]++ ActionUnifyTerms expected actual ->+ [ "unifying term (expected)"+ , " " <> ppTyped expected+ , "with term (actual)"+ , " " <> ppTyped actual ]++ ActionInfer term ->+ [ "inferring type for term"+ , " " <> ppU term ]++ ActionContextEntailedBy ctxTopes term ->+ [ "checking if local context"+ , intercalate "\n" (map ((" " <>) . ppU . untyped) ctxTopes)+ , "includes (is entailed by) restriction tope"+ , " " <> ppU (untyped term) ]++ ActionContextEntails ctxTopes term ->+ [ "checking if local context"+ , intercalate "\n" (map ((" " <>) . ppU . untyped) ctxTopes)+ , "is included in (entails) the tope"+ , " " <> ppU (untyped term) ]++ ActionContextEntailsUnion ctxTopes terms ->+ [ "checking if local context"+ , intercalate "\n" (map ((" " <>) . ppU . untyped) ctxTopes)+ , "is included in (entails) the union of the topes"+ , intercalate "\n" (map ((" " <>) . ppU . untyped) terms) ]++ ActionWHNF term ->+ [ "computing WHNF for term"+ , " " <> ppTyped term ]++ ActionNF term ->+ [ "computing normal form for term"+ , " " <> ppU (untyped term) ]++ ActionCheckCoherence (ltope, lterm) (rtope, rterm) ->+ [ "checking coherence for"+ , " " <> ppU (untyped ltope)+ , " |-> " <> ppU (untyped lterm)+ , "and"+ , " " <> ppU (untyped rtope)+ , " |-> " <> ppU (untyped rterm) ]++ ActionCloseSection Nothing ->+ [ "closing the file"+ , "and collecting assumptions (variables)" ]+ ActionCloseSection (Just sectionName) ->+ [ "closing #section " <> Rzk.printTree sectionName+ , "and collecting assumptions (variables)"]++ ActionCheckLetValue orig ->+ [ "checking the local definition "+ <> maybe "_" (Rzk.printTree . getVarIdent) orig ]+ where+ ppU :: Term' -> String+ ppU = ppFoldU fbs+ ppTyped :: TermT' -> String+ ppTyped = ppFoldT fbs+++traceAction' :: Int -> Action' -> a -> a+traceAction' n action = trace ("[debug]\n" <> ppAction [] n action)++unsafeTraceAction' :: Int -> Action var -> a -> a+unsafeTraceAction' n = traceAction' n . unsafeCoerce++data LocationInfo = LocationInfo+ { locationFilePath :: Maybe FilePath+ , locationLine :: Maybe Int+ } deriving (Eq, Show)++data Verbosity+ = Debug+ | Normal+ | Silent+ deriving (Eq, Ord)++trace' :: Verbosity -> Verbosity -> String -> a -> a+trace' msgLevel currentLevel+ | currentLevel <= msgLevel = trace+ | otherwise = const id++traceTypeCheck :: Verbosity -> String -> TypeCheck var a -> TypeCheck var a+traceTypeCheck msgLevel msg tc = do+ Context{..} <- ask+ trace' msgLevel verbosity msg tc++localVerbosity :: Verbosity -> TypeCheck var a -> TypeCheck var a+localVerbosity v = local $ \Context{..} -> Context { verbosity = v, .. }++localRenderBackend :: Maybe RenderBackend -> TypeCheck var a -> TypeCheck var a+localRenderBackend v = local $ \Context{..} -> Context { renderBackend = v, .. }++-- | Run the enclosed action with the 'renderHideTerm' policy set.+localHideTerm :: Bool -> TypeCheck var a -> TypeCheck var a+localHideTerm v = local $ \ctx -> ctx { renderHideTerm = v }++-- | Render the enclosed action with the proof term hidden (see 'renderHideTerm').+hidingTerm :: TypeCheck var a -> TypeCheck var a+hidingTerm = localHideTerm True++data Covariance+ = Covariant -- ^ Positive position.+ | Contravariant -- ^ Negative position.+ | Invariant -- ^ Unknown position.++data RenderBackend+ = RenderSVG+ | RenderLaTeX++data ScopeInfo var = ScopeInfo+ { scopeName :: Maybe Rzk.SectionName+ , scopeVars :: [(var, VarInfo var)]+ } deriving (Functor, Foldable)++addVarToScope :: var -> VarInfo var -> ScopeInfo var -> ScopeInfo var+addVarToScope var info ScopeInfo{..} = ScopeInfo+ { scopeVars = (var, info) : scopeVars, .. }++addModalityToScope :: TModality -> ScopeInfo var -> ScopeInfo var+addModalityToScope md ScopeInfo{..} = ScopeInfo+ { scopeVars = map (\(var, VarInfo{..}) -> (var, VarInfo{ modAccum = comp modAccum md, ..})) scopeVars, .. }++data VarInfo var = VarInfo+ { varType :: TermT var+ , varValue :: Maybe (TermT var)+ , varModality :: TModality+ , modAccum :: TModality+ , varOrig :: Binder+ , varIsAssumption :: Bool -- FIXME: perhaps, introduce something like decl kind?+ , varIsTopLevel :: Bool+ , varDeclaredAssumptions :: [var]+ , varLocation :: Maybe LocationInfo+ } deriving (Functor, Foldable)+++class ModeTheory m where+ iden :: m+ comp :: m -> m -> m+ coe :: m -> m -> Bool+ isRA :: m -> Bool++instance ModeTheory TModality where+ iden = Id++ comp Flat Flat = Flat+ comp Flat Sharp = Flat+ comp Flat Op = Flat+ comp Op Flat = Flat+ comp Sharp Sharp = Sharp+ comp Sharp Flat = Sharp+ comp Sharp Op = Sharp+ comp Op Sharp = Sharp+ comp Op Op = Id+ comp Id m = m+ comp m Id = m++ coe Flat Id = True+ coe Flat Op = True+ coe Id Sharp = True+ coe Flat Sharp = True+ coe Op Sharp = True+ coe a b = a == b++ isRA Sharp = True + isRA Op = True + isRA Id = True+ isRA _ = False++data ModalTope var = ModalTope+ { tModAccum :: TModality+ , tModVar :: TModality+ , tTope :: TermT var+ } deriving (Functor, Foldable, Eq)++data Context var = Context+ { localScopes :: [ScopeInfo var]+ , localTopes :: [ModalTope var]+ , localTopesNF :: [ModalTope var]+ , localTopesNFUnion :: [[ModalTope var]]+ , localTopesEntailBottom :: Maybe Bool+ , actionStack :: [Action var]+ , currentCommand :: Maybe Rzk.Command+ , location :: Maybe LocationInfo+ , verbosity :: Verbosity+ , covariance :: Covariance+ , renderBackend :: Maybe RenderBackend+ -- | When rendering a diagram, hide the proof term: drop the @\<title\>@+ -- (which carries the full term) from every cell and blank the visible label+ -- of proof-coloured (interior) cells, keeping the given boundary labels. So+ -- a worked term or an abstract inhabitant of a goal type is shown as the+ -- shape with its given edges, not the term that fills it.+ , renderHideTerm :: Bool+ , holesAreErrors :: Bool+ -- ^ When 'True' (the default), an unfilled hole is reported as a+ -- 'TypeErrorUnsolvedHole'; finished work (and CI) must have no holes. The+ -- lenient mode ('allowHoles') instead records each hole's goal and context.+ , deferHoleMismatches :: Bool+ -- ^ How holes behave during unification, giving three modes overall. With+ -- 'holesAreErrors' a hole is rejected outright (strict). Otherwise a hole+ -- always unifies as a leaf; this flag then chooses what happens when the+ -- /surrounding/ structure disagrees: 'True' (the default) defers — any term+ -- containing a hole is accepted, for an in-progress sketch — while 'False'+ -- keeps such a mismatch an error, so only a hole standing in a matching+ -- structure is accepted ('structuralHoleUnify').+ , hintLemmas :: [VarIdent]+ -- ^ Named top-level definitions a hole's candidate list may draw on, beyond+ -- the local hypotheses (see 'withHintLemmas'). A caller (the game) supplies+ -- a small curated allow-list per level; each listed lemma whose type fits+ -- the goal is then offered, applied to holes (e.g. @concat ? ? ?@).+ } deriving (Functor, Foldable)++addVarInCurrentScope :: var -> VarInfo var -> Context var -> Context var+addVarInCurrentScope var info Context{..} = Context+ { localScopes =+ case localScopes of+ [] -> [ScopeInfo Nothing [(var, info)]]+ scope : scopes -> addVarToScope var info scope : scopes+ , .. }++applyModalityToScopes :: TModality -> [ScopeInfo var] -> [ScopeInfo var]+applyModalityToScopes md scopes = map (addModalityToScope md) scopes++applyModalityToTopes :: TModality -> [ModalTope var] -> [ModalTope var]+applyModalityToTopes md topes = map (\ModalTope{..} -> ModalTope{tModAccum = comp tModAccum md, ..}) topes++applyModality :: TModality -> Context var -> Context var+applyModality md Context{..} = Context+ { localScopes = applyModalityToScopes md localScopes+ , localTopes = applyModalityToTopes md localTopes+ , localTopesNF = applyModalityToTopes md localTopesNF+ , localTopesNFUnion = map (applyModalityToTopes md) localTopesNFUnion+ , .. }++emptyTopeContext :: [ModalTope var]+emptyTopeContext =+ [ ModalTope Id Id topeTopT+ , ModalTope Id Flat topeTopT+ , ModalTope Id Op topeTopT+ , ModalTope Id Sharp topeTopT+ ]++emptyContext :: Context var+emptyContext = Context+ { localScopes = [ScopeInfo Nothing []]+ , localTopes = emptyTopeContext+ , localTopesNF = emptyTopeContext+ , localTopesNFUnion = [emptyTopeContext]+ , localTopesEntailBottom = Just False+ , actionStack = []+ , currentCommand = Nothing+ , location = Nothing+ , verbosity = Normal+ , covariance = Covariant+ , renderBackend = Nothing+ , renderHideTerm = False+ , holesAreErrors = True+ , deferHoleMismatches = True+ , hintLemmas = []+ }++-- | Switch to lenient hole mode: record each hole's goal and context instead+-- of reporting it as an error. Used by the structured goal/context query and+-- the @--allow-holes@ CLI mode; the default (strict) mode rejects holes.+allowHoles :: Context var -> Context var+allowHoles ctx = ctx { holesAreErrors = False }++-- | Allow a hole's candidate list to draw on the given named top-level+-- definitions (in addition to the local hypotheses). The game supplies the+-- per-level allow-list; 'recordHoleShape' then offers each listed lemma whose+-- type fits the goal, applied to holes. See 'hintLemmas'.+withHintLemmas :: [VarIdent] -> Context var -> Context var+withHintLemmas lemmas ctx = ctx { hintLemmas = lemmas }++-- | Within the given action, a hole unifies only as a leaf in an otherwise+-- matching structure: a structural mismatch around a hole stays an error rather+-- than being deferred (see 'deferHoleMismatches'). Used to ask whether a term+-- /could/ have a given type, as opposed to tolerating an in-progress sketch.+structuralHoleUnify :: Context var -> Context var+structuralHoleUnify ctx = ctx { deferHoleMismatches = False }++askCurrentScope :: TypeCheck var (ScopeInfo var)+askCurrentScope = asks localScopes >>= \case+ [] -> panicImpossible "no current scope available"+ scope : _scopes -> pure scope++isAccessible :: ModalTope var -> Bool+isAccessible mt = coe (tModVar mt) (tModAccum mt)++filterAccessible :: [ModalTope var] -> [ModalTope var]+filterAccessible = filter isAccessible++filterInaccessible :: [ModalTope var] -> [ModalTope var]+filterInaccessible = filter (not . isAccessible)++partitionAccessible :: [ModalTope var] -> ([ModalTope var], [ModalTope var])+partitionAccessible = partition isAccessible++accessibleTopes :: [ModalTope var] -> [TermT var]+accessibleTopes = map tTope . filterAccessible++plainTope :: TermT var -> ModalTope var+plainTope = ModalTope Id Id++availableTopes :: Context var -> [TermT var]+availableTopes ctx = map tTope $ filterAccessible (localTopes ctx)++availableTopesNF :: Context var -> [TermT var]+availableTopesNF ctx = map tTope $ filterAccessible (localTopesNF ctx)++varInfos :: Context var -> [(var, VarInfo var)]+varInfos Context{..} = concatMap scopeVars localScopes++varTypes :: Context var -> [(var, TermT var)]+varTypes = map (fmap varType) . varInfos++varValues :: Context var -> [(var, Maybe (TermT var))]+varValues = map (fmap varValue) . varInfos++varOrigs :: Context var -> [(var, Maybe VarIdent)]+varOrigs = map (fmap (binderName . varOrig)) . varInfos++-- | The full binder (pattern) of each in-scope variable, used to restore+-- pattern-binder component names (e.g. @t@\/@s@ for @\\ (t , s) -> …@) when+-- rendering goals, holes and contexts.+varBinders :: Context var -> [(var, Binder)]+varBinders = map (fmap varOrig) . varInfos++varModalities :: Context var -> [(var, TModality)]+varModalities = map (fmap varModality) . varInfos++varLocks :: Context var -> [(var, TModality)]+varLocks = map (fmap modAccum) . varInfos++varTopLevels :: Context var -> [(var, Bool)]+varTopLevels = map (fmap varIsTopLevel) . varInfos++withPartialDecls+ :: TypeCheck VarIdent ([Decl'], [err])+ -> TypeCheck VarIdent ([Decl'], [err])+ -> TypeCheck VarIdent ([Decl'], [err])+withPartialDecls tc next = do+ (decls, errs) <- tc+ if null errs+ then first (decls <>)+ <$> localDeclsPrepared decls next+ else return (decls, errs)++withSection+ :: Maybe Rzk.SectionName+ -> TypeCheck VarIdent ([Decl VarIdent], [TypeErrorInScopedContext VarIdent])+ -> TypeCheck VarIdent ([Decl VarIdent], [TypeErrorInScopedContext VarIdent])+ -> TypeCheck VarIdent ([Decl VarIdent], [TypeErrorInScopedContext VarIdent])+withSection name sectionBody =+ withPartialDecls $ startSection name $ do+ (decls, errs) <- sectionBody+ localDeclsPrepared decls $+ performing (ActionCloseSection name) $ do+ result <- (Right <$> endSection errs) `catchError` (return . Left)+ case result of+ Left err -> return ([], errs <> [err])+ Right (decls', errs') -> return (decls', errs')+ -- (\ decls' -> (decls', errs)) <$> endSection errs++startSection :: Maybe Rzk.SectionName -> TypeCheck VarIdent a -> TypeCheck VarIdent a+startSection name = local $ \Context{..} -> Context+ { localScopes = ScopeInfo { scopeName = name, scopeVars = [] } : localScopes+ , .. }++endSection :: [TypeErrorInScopedContext VarIdent] -> TypeCheck VarIdent ([Decl'], [TypeErrorInScopedContext VarIdent])+endSection errs = askCurrentScope >>= scopeToDecls errs++scopeToDecls :: Eq var => [TypeErrorInScopedContext var] -> ScopeInfo var -> TypeCheck var ([Decl var], [TypeErrorInScopedContext var])+scopeToDecls errs ScopeInfo{..} = do+ -- In lenient (hole-checking) mode an as-yet-unfilled hole may still come to+ -- use a declared variable, so we tolerate the unused-variable diagnostics+ -- wherever such a hole is present: a hole anywhere in the section for an+ -- unused section assumption, a hole in the declaration itself for an unused+ -- 'uses' variable. Strict mode (the default, and CI) keeps reporting both.+ lenient <- not <$> asks holesAreErrors+ let sectionHasHole = any (maybe False containsHole . varValue . snd) scopeVars+ (decls, errs') <- collectScopeDecls (lenient && sectionHasHole) errs [] scopeVars+ -- only issue unused variable errors if there were no errors prior in the section+ -- when (null errs) $ do+ unusedErrors <- forM decls $ \Decl{..} -> do+ let unusedUsedVars = declUsedVars `intersect` map fst scopeVars+ declHasHole = maybe False containsHole declValue+ if null errs && not (null unusedUsedVars) && not (lenient && declHasHole)+ then do+ err <- local (\c -> c { location = declLocation }) $+ fromTypeError (TypeErrorUnusedUsedVariables unusedUsedVars declName)+ return [err]+ else return []+ return (decls, errs' <> concat unusedErrors)++insertExplicitAssumptionFor+ :: Eq var => var -> (var, VarInfo var) -> TermT var -> TermT var+insertExplicitAssumptionFor a (declName, VarInfo{..}) term =+ term >>= \case+ y | y == declName -> appT varType (Pure declName) (Pure a)+ | otherwise -> Pure y++insertExplicitAssumptionFor'+ :: Eq var => var -> (var, VarInfo var) -> VarInfo var -> VarInfo var+insertExplicitAssumptionFor' a decl VarInfo{..}+ | varIsAssumption = VarInfo{..}+ | otherwise = VarInfo+ { varType = insertExplicitAssumptionFor a decl varType+ , varValue = insertExplicitAssumptionFor a decl <$> varValue+ , varIsAssumption = varIsAssumption+ , varIsTopLevel = varIsTopLevel+ , varModality = varModality+ , modAccum = modAccum+ , varOrig = varOrig+ , varDeclaredAssumptions = varDeclaredAssumptions+ , varLocation = varLocation+ }++makeAssumptionExplicit+ :: Eq var+ => (var, VarInfo var)+ -> [(var, VarInfo var)]+ -> TypeCheck var (Bool, [(var, VarInfo var)])+makeAssumptionExplicit _ [] = pure (False {- UNUSED -}, [])+makeAssumptionExplicit assumption@(a, aInfo) ((x, xInfo) : xs) = do+ varsInType <- freeVarsT_ (varType xInfo)+ varsInBody <- concat <$> traverse freeVarsT_ (varValue xInfo)+ let xFreeVars = varsInBody <> varsInType+ let hasAssumption = a `elem` xFreeVars+ xType <- typeOfVar x+ xValue <- valueOfVar x+ let assumptionInType = a `elem` freeVars (untyped xType)+ assumptionInBody = a `elem` foldMap (freeVars . untyped) xValue+ implicitAssumption = and+ [ hasAssumption+ , not (assumptionInType || assumptionInBody)+ , a `notElem` varDeclaredAssumptions xInfo ]+ if hasAssumption+ then do+ when implicitAssumption $ do+ issueTypeError $ TypeErrorImplicitAssumption (a, varType aInfo) x+ (_used, xs'') <- makeAssumptionExplicit (a, aInfo) xs'+ return (True {- USED -}, (x, xInfo') : xs'')+ else do+ (used, xs'') <- makeAssumptionExplicit assumption xs+ return (used, (x, xInfo) : xs'')+ where+ xType' = typeFunT (varOrig aInfo) Id (varType aInfo) Nothing (abstract a (varType xInfo))+ xInfo' = VarInfo+ { varType = xType'+ , varValue = fmap (lambdaT xType' (varOrig aInfo) Nothing . abstract a) (varValue xInfo)+ , varIsAssumption = varIsAssumption xInfo+ , varIsTopLevel = varIsTopLevel xInfo+ , varModality = Id+ , modAccum = Id+ , varOrig = varOrig xInfo+ , varDeclaredAssumptions = varDeclaredAssumptions xInfo \\ [a]+ , varLocation = varLocation xInfo+ }+ xs' = map (fmap (insertExplicitAssumptionFor' a (x, xInfo))) xs++collectScopeDecls :: Eq var => Bool -> [TypeErrorInScopedContext var] -> [(var, VarInfo var)] -> [(var, VarInfo var)] -> TypeCheck var ([Decl var], [TypeErrorInScopedContext var])+collectScopeDecls tolerateUnused errs recentVars (decl@(var, VarInfo{..}) : vars)+ | varIsAssumption = do+ (used, recentVars') <- makeAssumptionExplicit decl recentVars+ -- only issue unused vars error if there were no other errors previously+ -- when (null errs) $ do+ unusedErr <-+ if null errs && not used && not tolerateUnused+ then local (\c -> c { location = varLocation }) $+ pure <$> fromTypeError (TypeErrorUnusedVariable var varType)+ else return []+ collectScopeDecls tolerateUnused (errs <> unusedErr) recentVars' vars+ | otherwise = do+ collectScopeDecls tolerateUnused errs (decl : recentVars) vars+collectScopeDecls _ errs recentVars [] = do+ loc <- asks location+ return (toDecl loc <$> recentVars, errs)+ where+ toDecl loc (var, VarInfo{..}) = Decl+ { declName = var+ , declType = varType+ , declValue = varValue+ , declIsAssumption = varIsAssumption+ , declUsedVars = varDeclaredAssumptions+ , declLocation = updatePosition (binderName varOrig >>= fmap fst . Rzk.hasPosition . fromVarIdent) <$> loc -- FIXME+ }+ updatePosition Nothing l = l+ updatePosition (Just lineNo) l = l { locationLine = Just lineNo }++abstractAssumption :: Eq var => (var, VarInfo var) -> Decl var -> Decl var+abstractAssumption (var, VarInfo{..}) Decl{..} = Decl+ { declName = declName+ , declType = typeFunT varOrig Id varType Nothing (abstract var declType)+ , declValue = (\body -> lambdaT newDeclType varOrig Nothing (abstract var body)) <$> declValue+ , declIsAssumption = declIsAssumption+ , declUsedVars = declUsedVars+ , declLocation = declLocation+ }+ where+ newDeclType = typeFunT varOrig Id varType Nothing (abstract var declType)++data OutputDirection = TopDown | BottomUp+ deriving (Eq)++block :: OutputDirection -> [String] -> String+block TopDown = intercalate "\n"+block BottomUp = intercalate "\n" . reverse++namedBlock :: OutputDirection -> String -> [String] -> String+namedBlock dir name lines_ = block dir $+ name : map indent lines_+ where+ indent = intercalate "\n" . (map (" " ++)) . lines++ppContext' :: OutputDirection -> Context VarIdent -> String+ppContext' dir ctx@Context{..} = block dir $ dropWhile null+ [ block TopDown+ [ case location of+ _ | dir == TopDown -> "" -- FIXME+ Just (LocationInfo (Just path) (Just lineNo)) ->+ path <> " (line " <> show lineNo <> "):"+ Just (LocationInfo (Just path) _) ->+ path <> ":"+ _ -> ""+ , case currentCommand of+ Just (Rzk.CommandDefine _loc name _vars _params _ty _term) ->+ " Error occurred when checking\n #define " <> Rzk.printTree name+ Just (Rzk.CommandPostulate _loc name _vars _params _ty ) ->+ " Error occurred when checking\n #postulate " <> Rzk.printTree name+ Just (Rzk.CommandCheck _loc term ty) ->+ " Error occurred when checking\n " <> Rzk.printTree term <> " : " <> Rzk.printTree ty+ Just (Rzk.CommandCompute _loc term) ->+ " Error occurred when computing\n " <> Rzk.printTree term+ Just (Rzk.CommandComputeNF _loc term) ->+ " Error occurred when computing NF for\n " <> Rzk.printTree term+ Just (Rzk.CommandComputeWHNF _loc term) ->+ " Error occurred when computing WHNF for\n " <> Rzk.printTree term+ Just (Rzk.CommandSetOption _loc optionName _optionValue) ->+ " Error occurred when trying to set option\n #set-option " <> show optionName+ Just command@Rzk.CommandUnsetOption{} ->+ " Error occurred when trying to unset option\n " <> Rzk.printTree command+ Just command@Rzk.CommandAssume{} ->+ " Error occurred when checking assumption\n " <> Rzk.printTree command+ Just (Rzk.CommandSection _loc name) ->+ " Error occurred when checking\n #section " <> Rzk.printTree name+ Just (Rzk.CommandSectionEnd _loc name) ->+ " Error occurred when checking\n #end " <> Rzk.printTree name+ Nothing -> " Error occurred outside of any command!"+ ]+ , ""+ , case filter (/= topeTopT) (availableTopes ctx) of+ [] -> "Local tope context is unrestricted (⊤)."+ localTopes' -> namedBlock TopDown "Local tope context:"+ [ " " <> ppU (untyped tope)+ | tope <- localTopes' ]+ , ""+ , block dir+ [ "when " <> ppAction fbs 0 action+ | action <- actionStack ]+ , namedBlock TopDown "Definitions in context:"+ [ block dir+ [ dispName x <> " : " <> ppU (untyped ty)+ | (x, ty) <- reverse (varTypes ctx) ] ]+ ]+ where+ (fbs, _) = contextBinders ctx+ ppU = ppFoldU fbs+ -- a pattern binder is shown as its pattern, e.g. (t , s); others by name+ dispName x = maybe (show (Pure x :: Term')) (show . binderDisplayName) (lookup x fbs)++doesShadowName :: VarIdent -> TypeCheck var [VarIdent]+doesShadowName name = asks $ \ctx ->+ filter (name ==) (mapMaybe snd (varOrigs ctx))++checkTopLevelDuplicate :: VarIdent -> TypeCheck var ()+checkTopLevelDuplicate name = do+ doesShadowName name >>= \case+ [] -> return ()+ collisions -> issueTypeError $+ TypeErrorDuplicateTopLevel collisions name++checkNameShadowing :: VarIdent -> TypeCheck var ()+checkNameShadowing name = do+ doesShadowName name >>= \case+ [] -> return ()+ collisions -> issueWarning $+ Rzk.printTree (getVarIdent name) <> " shadows an existing definition:"+ <> unlines+ [ " " <> ppVarIdentWithLocation name+ , "previous top-level definitions found at"+ , intercalate "\n"+ [ " " <> ppVarIdentWithLocation prev | prev <- collisions ] ]++withLocation :: LocationInfo -> TypeCheck var a -> TypeCheck var a+withLocation loc = local $ \Context{..} -> Context { location = Just loc, .. }++withCommand :: Rzk.Command -> TypeCheck VarIdent ([Decl'], [TypeErrorInScopedContext VarIdent]) -> TypeCheck VarIdent ([Decl'], [TypeErrorInScopedContext VarIdent])+withCommand command tc = local f $ do+ result <- (Right <$> tc) `catchError` (return . Left)+ case result of+ Left err -> return ([], [err])+ Right (decls, errs) -> return (decls, errs)+ where+ f Context{..} = Context+ { currentCommand = Just command+ , location = updatePosition (Rzk.hasPosition command) <$> location+ , .. }+ updatePosition pos loc = loc { locationLine = fst <$> pos }++localDecls :: [Decl VarIdent] -> TypeCheck VarIdent a -> TypeCheck VarIdent a+localDecls [] = id+localDecls (decl : decls) = localDecl decl . localDecls decls++localDeclsPrepared :: [Decl VarIdent] -> TypeCheck VarIdent a -> TypeCheck VarIdent a+localDeclsPrepared [] = id+localDeclsPrepared (decl : decls) = localDeclPrepared decl . localDeclsPrepared decls++localDecl :: Decl VarIdent -> TypeCheck VarIdent a -> TypeCheck VarIdent a+localDecl (Decl x ty term isAssumption vars loc) tc = do+ ty' <- memoizeWHNF ty+ term' <- traverse memoizeWHNF term+ localDeclPrepared (Decl x ty' term' isAssumption vars loc) tc++localDeclPrepared :: Decl VarIdent -> TypeCheck VarIdent a -> TypeCheck VarIdent a+localDeclPrepared (Decl x ty term isAssumption vars loc) tc = do+ checkTopLevelDuplicate x+ local update tc+ where+ update = addVarInCurrentScope x VarInfo+ { varType = ty+ , varValue = term+ , varOrig = BinderVar (Just x)+ , varModality = Id+ , modAccum = Id+ , varIsAssumption = isAssumption+ , varIsTopLevel = True+ , varDeclaredAssumptions = vars+ , varLocation = loc+ }++-- | A binding shown in a hole's local context: the display name and its type,+-- already rendered with user-facing 'VarIdent' names (see 'HoleInfo').+data HoleEntry = HoleEntry+ { holeEntryName :: VarIdent+ , holeEntryType :: Term'+ } deriving (Eq, Show)++-- | The structured goal and context at a hole, recorded in lenient mode (see+-- 'allowHoles'). Everything is rendered to user-facing 'VarIdent' names at+-- record time, so 'HoleInfo' is independent of the De Bruijn scope it came+-- from. Local hypotheses are split into ordinary term variables and cube+-- variables (the cube/tope layer is specific to Rzk); the global environment is+-- deliberately excluded — it belongs in a searchable inventory, not the goal+-- panel.+data HoleInfo = HoleInfo+ { holeName :: Maybe VarIdent -- ^ the @?name@, if the hole was named+ , holeGoal :: Term' -- ^ expected type (the goal), kept symbolic+ , holeGoalShape :: Maybe (VarIdent, Term')+ -- ^ when the goal is a /shape/ (the hole is the argument of a+ -- shape-restricted function), the shape's bound variable and its tope: the+ -- goal then reads @(binder : holeGoal | tope)@. 'Nothing' for an ordinary+ -- goal. (Extension-type goals need no special handling — they are already a+ -- restricted type in 'holeGoal'.)+ , holeTermVars :: [HoleEntry] -- ^ local hypotheses whose type is not a cube+ , holeCubeVars :: [HoleEntry] -- ^ local cube variables (type is a cube)+ , holeTopes :: [Term'] -- ^ local tope assumptions (excluding ⊤)+ , holeCandidates :: [Term']+ -- ^ elimination spines over the local hypotheses whose type fits the goal,+ -- with applied arguments left as holes (see 'allEliminationsInto'). Already+ -- rendered, like the other fields.+ , holeIntroductions :: [Term']+ -- ^ introduction forms for the goal type, built from its head constructor+ -- with the constituents left as holes (see 'allIntroductionsOf'). Already+ -- rendered, like the other fields.+ , holeDiagram :: Maybe String+ -- ^ an SVG of the goal cell, when the goal is a renderable shape (an arrow,+ -- triangle, or square up to dimension 3): the shape with its given boundary+ -- edges, drawn from an abstract inhabitant of the goal type with the+ -- proof term hidden (see 'renderHideTerm'). 'Nothing' for a non-shape goal.+ , holeLocation :: Maybe LocationInfo+ } deriving (Eq, Show)++type TypeCheck var =+ ReaderT (Context var)+ (WriterT [HoleInfo] (Except (TypeErrorInScopedContext var)))++freeVarsT_ :: Eq var => TermT var -> TypeCheck var [var]+freeVarsT_ term = do+ types <- asks varTypes+ let typeOfVar' x =+ case lookup x types of+ Nothing -> panicImpossible "undefined variable"+ Just ty -> ty+ return (freeVarsT typeOfVar' term)++traceStartAndFinish :: Show a => String -> a -> a+traceStartAndFinish tag = trace ("start [" <> tag <> "]") .+ (\x -> trace ("finish [" <> tag <> "] with " <> show x) x)++entailM :: Eq var => [ModalTope var] -> TermT var -> TypeCheck var Bool+entailM modalTopes goal = do+ -- genTopes <- generateTopesForPointsM (allTopePoints goal)+ discreteAxioms <- generateTopesForModalCubeVarsM+ let topes' = nubTermT (modalTopes <> discreteAxioms)+ topes'' = simplifyLHSwithDisjunctions topes'+ topes''' <- mapM (fmap (saturateTopes (allTopePoints goal) . saturateBottom) . saturateInv) topes''+ prettyTopes <- mapM ppTermInContext (map tTope (saturateTopes (allTopePoints goal) (simplifyLHS topes')))+ prettyTope <- ppTermInContext goal+ traceTypeCheck Debug+ ("entail " <> intercalate ", " prettyTopes <> " |- " <> prettyTope) $+ and <$> mapM (`solveRHSM` goal) topes'''+++generateTopesForModalCubeVarsM :: Eq var => TypeCheck var [ModalTope var]+generateTopesForModalCubeVarsM = do+ infos <- asks varInfos+ fmap (nubTermT . concat) $ forM infos $ \(var, info) ->+ case varModality info of+ Flat -> do+ whnfT (varType info) >>= \case+ Cube2T{} -> do+ let pt = Pure var+ return [plainTope (topeOrT (topeEQT pt cube2_0T) (topeEQT pt cube2_1T))]+ CubeIT{} -> do+ let pt = Pure var+ return [plainTope (topeOrT (topeEQT pt cubeI_0T) (topeEQT pt cubeI_1T))]+ _ -> return []+ _ -> return []++entailTraceM :: Eq var => [ModalTope var] -> TermT var -> TypeCheck var Bool+entailTraceM modalTopes goal = do+ topes' <- mapM ppTermInContext (accessibleTopes modalTopes)+ goal' <- ppTermInContext goal+ result <- trace ("entail " <> intercalate ", " topes' <> " |- " <> goal') $+ modalTopes `entailM` goal+ return $ trace (" " <> show result) result++nubTermT :: Eq a => [a] -> [a]+nubTermT [] = []+nubTermT (t:ts) = t : nubTermT (filter (/= t) ts)++saturateTopes :: Eq var => [TermT var] -> [ModalTope var] -> [ModalTope var]+saturateTopes _points topes =+ let (accessible, inaccessible) = partitionAccessible topes+ saturated = saturateWith+ (\mt ts -> mt `elem` ts)+ (\new old -> map plainTope $ generateTopes (map tTope new) (map tTope old))+ accessible+ in saturated <> inaccessible++saturateInv :: Eq var => [ModalTope var] -> TypeCheck var [ModalTope var]+saturateInv modalTopes = do+ -- FIXME: this is a workaround; ideally we should regenerate all topes+ -- on EVERY modality change in any layer, but that would produce too many;+ -- for now we also invert topes that were accessible before the modality shift+ let accessible = filterAccessible modalTopes+ accessibleById = filter (\mt -> coe (tModVar mt) Id) modalTopes+ invResults <- forM (nubTermT (accessible <> accessibleById)) $ \mt -> do+ nf <- nfTope $ modExtractT topeT Id Op (topeInvT (tTope mt))+ return $ ModalTope (tModAccum mt) Op nf+ let accessibleUnderOp = filter (\mt -> coe (tModVar mt) (comp (tModAccum mt) Op)) modalTopes+ uninvResults <- forM accessibleUnderOp $ \(ModalTope acc var' phi) -> do+ nf <- nfTope $ topeUninvT (modAppT topeT Op phi)+ return $ ModalTope (comp acc Op) var' nf+ let newTopes = nubTermT (invResults <> uninvResults)+ fresh = filter (`notElem` modalTopes) newTopes+ return (modalTopes <> fresh)++-- | Ex falso for BOT, lifted across modalities.+--+-- A contradiction in the topes that are genuinely available at the identity+-- modality entails BOT, and BOT entails @_μ BOT@ for every modality @μ@ by the+-- absurd rule (this holds for BOT specifically; a general tope @φ@ does NOT give+-- @_μ φ@, which would need the missing unit @id ⇒ μ@). Re-asserting @_μ BOT@ at+-- each lock @μ@ where an available tope was hidden lets the contradiction survive+-- the lock: e.g. @_b BOT@ is accessible under a @_b@ lock (@coe Flat Flat@), so+-- @mod _b recBOT@ in a vacuous context is accepted.+--+-- A tope counts as available at the identity modality when its variable modality+-- coerces into @Id@: a @_b@-modal tope qualifies via the counit (@coe Flat Id@),+-- but a @_#@-modal one does not (@coe Sharp Id@ is False) — which is exactly why+-- @_# BOT@ does not leak to plain BOT (see ill-modal-sharp-bot-not-bot).+saturateBottom :: Eq var => [ModalTope var] -> [ModalTope var]+saturateBottom modalTopes+ | null droppedAccums = modalTopes -- nothing hidden by a lock; ordinary saturation suffices+ | botDerivable = modalTopes <> fresh+ | otherwise = modalTopes+ where+ idAccessible = filter (\mt -> coe (tModVar mt) Id) modalTopes+ droppedAccums = nub [ tModAccum mt | mt <- idAccessible, not (isAccessible mt) ]+ saturatedId = saturateWith (\t ts -> t `elem` ts) generateTopes (map tTope idAccessible)+ botDerivable = topeBottomT `elem` saturatedId+ fresh = [ mt+ | acc <- droppedAccums+ , let mt = ModalTope acc acc topeBottomT+ , mt `notElem` modalTopes ]++-- FIXME: cleanup+saturateWith :: (a -> [a] -> Bool) -> ([a] -> [a] -> [a]) -> [a] -> [a]+saturateWith elem' step zs = go (nub' zs) []+ where+ go lastNew xs+ | null new = lastNew+ | otherwise = lastNew <> go new xs'+ where+ xs' = lastNew <> xs+ new = filter (not . (`elem'` xs')) (nub' $ step lastNew xs)+ nub' [] = []+ nub' (x:xs) = x : nub' (filter (not . (`elem'` [x])) xs)++generateTopes :: Eq var => [TermT var] -> [TermT var] -> [TermT var]+generateTopes newTopes oldTopes+ | topeBottomT `elem` newTopes = []+ | topeEQT cube2_0T cube2_1T `elem` newTopes = [topeBottomT]+ | topeEQT cubeI_0T cubeI_1T `elem` newTopes = [topeBottomT]+ | length oldTopes > 100 = [] -- FIXME+ | otherwise = concat+ [ -- symmetry EQ+ [ topeEQT y x | TopeEQT _ty x y <- newTopes ]+ -- transitivity EQ (1)+ , [ topeEQT x z+ | TopeEQT _ty x y : newTopes' <- tails newTopes+ , TopeEQT _ty y' z <- newTopes' <> oldTopes+ , y == y' ]+ -- transitivity EQ (2)+ , [ topeEQT x z+ | TopeEQT _ty y z : newTopes' <- tails newTopes+ , TopeEQT _ty x y' <- newTopes' <> oldTopes+ , y == y' ]++ -- transitivity LEQ (1)+ , [ topeLEQT x z+ | TopeLEQT _ty x y : newTopes' <- tails newTopes+ , TopeLEQT _ty y' z <- newTopes' <> oldTopes+ , y == y' ]+ -- transitivity LEQ (2)+ , [ topeLEQT x z+ | TopeLEQT _ty y z : newTopes' <- tails newTopes+ , TopeLEQT _ty x y' <- newTopes' <> oldTopes+ , y == y' ]++ -- antisymmetry LEQ+ , [ topeEQT x y+ | TopeLEQT _ty x y : newTopes' <- tails newTopes+ , TopeLEQT _ty y' x' <- newTopes' <> oldTopes+ , y == y'+ , x == x' ]++ -- FIXME: special case of substitution of EQ+ -- transitivity EQ-LEQ (1)+ , [ topeLEQT x z+ | TopeEQT _ty y z : newTopes' <- tails newTopes+ , TopeLEQT _ty x y' <- newTopes' <> oldTopes+ , y == y' ]++ -- FIXME: special case of substitution of EQ+ -- transitivity EQ-LEQ (2)+ , [ topeLEQT x z+ | TopeEQT _ty x y : newTopes' <- tails newTopes+ , TopeLEQT _ty y' z <- newTopes' <> oldTopes+ , y == y' ]++ -- FIXME: special case of substitution of EQ+ -- transitivity EQ-LEQ (3)+ , [ topeLEQT x z+ | TopeLEQT _ty y z : newTopes' <- tails newTopes+ , TopeEQT _ty x y' <- newTopes' <> oldTopes+ , y == y' ]++ -- FIXME: special case of substitution of EQ+ -- transitivity EQ-LEQ (4)+ , [ topeLEQT x z+ | TopeLEQT _ty x y : newTopes' <- tails newTopes+ , TopeEQT _ty y' z <- newTopes' <> oldTopes+ , y == y' ]++ -- FIXME: consequence of LEM for LEQ and antisymmetry for LEQ+ , [ topeEQT x y | TopeLEQT _ty x y@Cube2_0T{} <- newTopes ]+ -- FIXME: consequence of LEM for LEQ and antisymmetry for LEQ+ , [ topeEQT x y | TopeLEQT _ty x@Cube2_1T{} y <- newTopes ]+ , [ topeEQT x y | TopeLEQT _ty x y@CubeI_0T{} <- newTopes ]+ -- FIXME: consequence of LEM for LEQ and antisymmetry for LEQ+ , [ topeEQT x y | TopeLEQT _ty x@CubeI_1T{} y <- newTopes ]++ -- subtyping 2 <: II: endpoints and order of 2 lift to II+ , [ topeEQT x cubeI_0T | TopeEQT _ty x Cube2_0T{} <- newTopes ]+ , [ topeEQT cubeI_0T x | TopeEQT _ty Cube2_0T{} x <- newTopes ]+ , [ topeEQT x cubeI_1T | TopeEQT _ty x Cube2_1T{} <- newTopes ]+ , [ topeEQT cubeI_1T x | TopeEQT _ty Cube2_1T{} x <- newTopes ]+ , [ topeLEQT x cubeI_0T | TopeLEQT _ty x Cube2_0T{} <- newTopes ]+ , [ topeLEQT cubeI_0T x | TopeLEQT _ty Cube2_0T{} x <- newTopes ]+ , [ topeLEQT x cubeI_1T | TopeLEQT _ty x Cube2_1T{} <- newTopes ]+ , [ topeLEQT cubeI_1T x | TopeLEQT _ty Cube2_1T{} x <- newTopes ]+ ]++generateTopesForPointsM :: Eq var => [TermT var] -> TypeCheck var [TermT var]+generateTopesForPointsM points = do+ let pairs = nub $ concat+ [ [ (x, y)+ | x : points' <- tails (filter (`notElem` [cube2_0T, cube2_1T, cubeI_0T, cubeI_1T]) points)+ , y <- points'+ , x /= y ]+ ]+ stars <- forM points $ \x -> do+ xType <- typeOf x+ return $ if (xType == cubeUnitT)+ then [topeEQT x cubeUnitStarT]+ else []+ topes <- forM pairs $ \(x, y) -> do+ xType <- typeOf x+ yType <- typeOf y+ return $ if (xType == cube2T) && (yType == cube2T)+ then [topeOrT (topeLEQT x y) (topeLEQT y x)]+ else []+ return (concat (topes ++ stars))++allTopePoints :: Eq var => TermT var -> [TermT var]+allTopePoints = nubTermT . foldMap subPoints . nubTermT . topePoints++topePoints :: TermT var -> [TermT var]+topePoints = \case+ TopeTopT{} -> []+ TopeBottomT{} -> []+ TopeAndT _ l r -> topePoints l <> topePoints r+ TopeOrT _ l r -> topePoints l <> topePoints r+ TopeEQT _ x y -> [x, y]+ TopeLEQT _ x y -> [x, y]+ _ -> []++subPoints :: TermT var -> [TermT var]+subPoints = \case+ p@(PairT _ x y) -> p : foldMap subPoints [x, y]+ p@Pure{} -> [p]+ p@(Free (AnnF TypeInfo{..} _))+ | Cube2T{} <- infoType -> [p]+ | CubeUnitT{} <- infoType -> [p]+ _ -> []++-- | Simplify the context, including disjunctions. See also 'simplifyLHS'.+simplifyLHSwithDisjunctions :: Eq var => [ModalTope var] -> [[ModalTope var]]+simplifyLHSwithDisjunctions topes = map nubTermT $+ case topes of+ [] -> [[]]+ (ModalTope _ _ TopeTopT{}) : topes' -> simplifyLHSwithDisjunctions topes'+ (ModalTope mAcc mVar TopeBottomT{}) : _ -> [[ModalTope mAcc mVar topeBottomT]]+ (ModalTope mAcc mVar (TopeAndT _ l r)) : topes' -> simplifyLHSwithDisjunctions ((ModalTope mAcc mVar l) : (ModalTope mAcc mVar r) : topes')++ -- NOTE: it is inefficient to expand disjunctions immediately+ (ModalTope mAcc mVar (TopeOrT _ l r)) : topes' -> simplifyLHSwithDisjunctions ((ModalTope mAcc mVar l) : topes') <> simplifyLHSwithDisjunctions ((ModalTope mAcc mVar r) : topes')++ (ModalTope mAcc mVar (TopeEQT _ (PairT _ x y) (PairT _ x' y'))) : topes' ->+ simplifyLHSwithDisjunctions (ModalTope mAcc mVar (topeEQT x x') : ModalTope mAcc mVar (topeEQT y y') : topes')+ (ModalTope mAcc mVar (TypeModalT _ md inTope)) : topes' ->+ simplifyLHSwithDisjunctions ((ModalTope mAcc (comp mVar md) inTope) : topes')+ t : topes' -> map (t :) (simplifyLHSwithDisjunctions topes')++-- | Simplify the context, except disjunctions. See also 'simplifyLHSwithDisjunctions'.+simplifyLHS :: Eq var => [ModalTope var] -> [ModalTope var]+simplifyLHS topes = nubTermT $+ case topes of+ [] -> []+ (ModalTope _ _ TopeTopT{}) : topes' -> simplifyLHS topes'+ (ModalTope _ _ TopeBottomT{}) : _ -> [plainTope topeBottomT]+ (ModalTope mAcc mVar (TopeAndT _ l r)) : topes' -> simplifyLHS (ModalTope mAcc mVar l : ModalTope mAcc mVar r : topes')++ -- NOTE: it is inefficient to expand disjunctions immediately+ -- (ModalTope mAcc mVar (TopeOrT _ l r)) : topes' -> simplifyLHS (ModalTope mAcc mVar l : topes') <> simplifyLHS (ModalTope mAcc mVar r : topes')++ (ModalTope mAcc mVar (TopeEQT _ (PairT _ x y) (PairT _ x' y'))) : topes' ->+ simplifyLHS (ModalTope mAcc mVar (topeEQT x x') : ModalTope mAcc mVar (topeEQT y y') : topes')+ (ModalTope mAcc mVar (TypeModalT _ md inTope)) : topes' ->+ simplifyLHS (ModalTope mAcc (comp mVar md) inTope : topes')+ t : topes' -> t : simplifyLHS topes'++solveRHSM :: Eq var => [ModalTope var] -> TermT var -> TypeCheck var Bool+solveRHSM modalTopes goal =+ let topes = accessibleTopes modalTopes+ in case goal of+ _ | topeBottomT `elem` topes -> return True+ TopeTopT{} -> return True+ TypeModalT _ty md inTope -> do+ let shifted = applyModalityToTopes md modalTopes+ resaturated = saturateTopes [] shifted+ resaturatedInv <- saturateInv resaturated+ solveRHSM resaturatedInv inTope+ TopeEQT _ty (PairT _ty1 x y) (PairT _ty2 x' y') ->+ solveRHSM modalTopes $ topeAndT+ (topeEQT x x')+ (topeEQT y y')+ TopeEQT _ty (PairT TypeInfo{ infoType = CubeProductT _ cubeI cubeJ } x y) r ->+ solveRHSM modalTopes $ topeAndT+ (topeEQT x (firstT cubeI r))+ (topeEQT y (secondT cubeJ r))+ TopeEQT _ty l (PairT TypeInfo{ infoType = CubeProductT _ cubeI cubeJ } x y) ->+ solveRHSM modalTopes $ topeAndT+ (topeEQT (firstT cubeI l) x)+ (topeEQT (secondT cubeJ l) y)+ TopeEQT _ty l r+ | or+ [ l == r+ , goal `elem` topes+ , topeEQT r l `elem` topes+ ] -> return True+ TopeEQT _ty l r -> do+ lType <- typeOf l+ rType <- typeOf r+ return $ case (lType, rType) of+ (CubeUnitT{}, CubeUnitT{}) -> True+ _ -> False+ TopeLEQT _ty l r+ | l == r -> return True+ | solveRHS topes (topeEQT l r) -> return True+ | solveRHS topes (topeEQT l cube2_0T) -> return True+ | solveRHS topes (topeEQT r cube2_1T) -> return True+ TopeAndT _ l r -> (&&)+ <$> solveRHSM modalTopes l+ <*> solveRHSM modalTopes r+ _ | goal `elem` topes -> return True+ TopeInvT{} -> do+ goal' <- nfTope goal+ case goal' of+ TopeInvT{} -> return False+ _ -> solveRHSM modalTopes goal'+ TopeUninvT{} -> do+ goal' <- nfTope goal+ case goal' of+ TopeUninvT{} -> return False+ _ -> solveRHSM modalTopes goal'+ TopeOrT _ l r -> do+ l' <- solveRHSM modalTopes l+ r' <- solveRHSM modalTopes r+ if (l' || r')+ then return True+ else do+ lems <- generateTopesForPointsM (allTopePoints goal)+ let lems' = [ lem | lem@(TopeOrT _ t1 t2) <- lems, all (`notElem` topes) [t1, t2] ]+ (accessible, hidden) = partitionAccessible modalTopes+ withTope t = hidden ++ saturateTopes [] (plainTope t : accessible)++ case lems' of+ TopeOrT _ t1 t2 : _ -> do+ l'' <- solveRHSM (withTope t1) goal+ r'' <- solveRHSM (withTope t2) goal+ return (l'' && r'')+ _ -> return False+ _ -> return False++solveRHS :: Eq var => [TermT var] -> TermT var -> Bool+solveRHS topes tope =+ case tope of+ _ | topeBottomT `elem` topes -> True+ TopeTopT{} -> True+ TopeEQT _ty (PairT _ty1 x y) (PairT _ty2 x' y')+ | solveRHS topes (topeEQT x x') && solveRHS topes (topeEQT y y') -> True+ TopeEQT _ty (PairT TypeInfo{ infoType = CubeProductT _ cubeI cubeJ } x y) r+ | solveRHS topes (topeEQT x (firstT cubeI r)) && solveRHS topes (topeEQT y (secondT cubeJ r)) -> True+ TopeEQT _ty l (PairT TypeInfo{ infoType = CubeProductT _ cubeI cubeJ } x y)+ | solveRHS topes (topeEQT (firstT cubeI l) x) && solveRHS topes (topeEQT (secondT cubeJ l) y) -> True+ TopeEQT _ty l r -> or+ [ l == r+ , tope `elem` topes+ , topeEQT r l `elem` topes+ ]+ TopeLEQT _ty l r+ | l == r -> True+ | solveRHS topes (topeEQT l r) -> True+ | solveRHS topes (topeEQT l cube2_0T) -> True+ | solveRHS topes (topeEQT r cube2_1T) -> True+ -- TopeBottomT{} -> solveLHS topes tope+ TopeAndT _ l r -> solveRHS topes l && solveRHS topes r+ TopeOrT _ l r -> solveRHS topes l || solveRHS topes r+ _ -> tope `elem` topes++checkTope :: Eq var => TermT var -> TypeCheck var Bool+checkTope tope = do+ ctxTopes <- asks availableTopes+ performing (ActionContextEntails ctxTopes tope) $ do+ topes' <- asks localTopesNF+ tope' <- nfTope tope+ topes' `entailM` tope'++checkTopeEntails :: Eq var => TermT var -> TypeCheck var Bool+checkTopeEntails tope = do+ ctxTopes <- asks availableTopes+ performing (ActionContextEntailedBy ctxTopes tope) $ do+ contextTopes <- asks availableTopesNF+ restrictionTope <- nfTope tope+ let contextTopesRHS = foldr topeAndT topeTopT contextTopes+ [plainTope restrictionTope] `entailM` contextTopesRHS++checkEntails :: Eq var => TermT var -> TermT var -> TypeCheck var Bool+checkEntails l r = do -- FIXME: add action+ l' <- nfTope l+ r' <- nfTope r+ [plainTope l'] `entailM` r'++contextEntails :: Eq var => TermT var -> TypeCheck var ()+contextEntails tope = do+ ctxTopes <- asks availableTopes+ performing (ActionContextEntails ctxTopes tope) $ do+ topeIsEntailed <- checkTope tope+ topes' <- asks availableTopesNF+ -- When a hole is used in a cube/tope position (e.g. as the argument of a+ -- shape-restricted function), the tope being checked mentions the hole and+ -- cannot be decided. Treat it as satisfied (defer) rather than failing.+ unless (topeIsEntailed || containsHole tope) $+ issueTypeError $ TypeErrorTopeNotSatisfied topes' tope++topesEquiv :: Eq var => TermT var -> TermT var -> TypeCheck var Bool+topesEquiv expected actual = performing (ActionUnifyTerms expected actual) $ do+ expected' <- nfT expected+ actual' <- nfT actual+ (&&)+ <$> [plainTope expected'] `entailM` actual'+ <*> [plainTope actual'] `entailM` expected'++-- | Check that the local tope context is included in (entails) the union of+-- the given topes. This is the COVERAGE obligation of @recOR@: every point of the+-- context must be covered by some branch guard.+--+-- Note that only coverage is required, not equivalence: branch guards may overhang+-- the context (e.g. when splitting with an already-defined shape), so we do not+-- require @OR(guards) |- context@.+contextEntailsUnion :: Eq var => [TermT var] -> TypeCheck var ()+contextEntailsUnion topes = do+ ctxTopes <- asks availableTopes+ performing (ActionContextEntailsUnion ctxTopes topes) $ do+ contextTopes <- asks localTopesNF+ topesNF <- mapM nfTope topes+ let unionRHS = foldr topeOrT topeBottomT topesNF+ contextTopes `entailM` unionRHS >>= \case+ -- a guard mentioning an (unfilled) hole can't be decided; defer coverage+ False | not (any containsHole topesNF) ->+ issueTypeError $ TypeErrorTopeNotSatisfied (accessibleTopes contextTopes) unionRHS+ _ -> return ()++-- | Diagnose a recOR branch guard or restriction face against the local tope+-- context. There are three cases, by how the tope relates to the context:+--+-- * DISJOINT — the tope and a consistent context have empty overlap (their+-- conjunction is ⊥). The face/branch is then vacuous everywhere, so this is a+-- hard error.+-- * OVERHANG — the tope is not entailed by the context but still overlaps it.+-- This is allowed and often intentional (e.g. splitting or restricting with an+-- already-defined shape, whose faces live on the whole cube rather than being+-- relativised to the context), so we only emit a non-fatal hint. The hint is+-- gated at 'Normal' verbosity, hence silent under 'Silent' (e.g. in tests).+-- * CONTAINED — the tope entails the context: nothing to report.+checkTopeAgainstContext :: Eq var => String -> TermT var -> TypeCheck var ()+checkTopeAgainstContext what tope = do+ -- a contradictory context is handled elsewhere (recBOT)+ ctxEntailsBottom <- contextEntailsBottom+ unless ctxEntailsBottom $ do+ contextTopes <- asks localTopesNF+ let ctxTopes = filter (/= topeTopT) (accessibleTopes contextTopes)+ disjoint <- (plainTope tope : contextTopes) `entailM` topeBottomT+ -- a face/guard mentioning an (unfilled) hole can't be decided; defer+ if disjoint && not (containsHole tope)+ then issueTypeError (TypeErrorTopeContextDisjoint tope ctxTopes)+ else do+ entailed <- checkTopeEntails tope -- tope |- AND(accessible context)+ unless entailed $ do+ topeStr <- ppTermInContext tope+ ctxStrs <- mapM ppTermInContext ctxTopes+ traceTypeCheck Normal+ (intercalate "\n" $+ [ "Warning: " <> what <> " overhangs the local tope context"+ , " " <> topeStr+ , "is not entailed by the local context (normalised)"+ ] <> map (" " <>) ctxStrs)+ (return ())++switchVariance :: TypeCheck var a -> TypeCheck var a+switchVariance = local $ \Context{..} -> Context+ { covariance = switch covariance, .. }+ where+ switch Covariant = Contravariant+ switch Contravariant = Covariant+ switch Invariant = Invariant++setVariance :: Covariance -> TypeCheck var a -> TypeCheck var a+setVariance variance = local $ \Context{..} -> Context+ { covariance = variance, .. }++enterScopeContext :: Binder -> TModality -> TermT var -> Maybe (TermT var) -> Context var -> Context (Inc var)+enterScopeContext orig md ty val context =+ addVarInCurrentScope Z VarInfo+ { varType = S <$> ty+ , varValue = fmap (S <$>) val+ , varOrig = orig+ , varModality = md+ , modAccum = Id+ , varIsAssumption = False+ , varIsTopLevel = False+ , varDeclaredAssumptions = []+ , varLocation = location context+ }+ (S <$> context)++enterScopeMaybe :: Binder -> TModality -> TermT var -> Maybe (TermT var) -> TypeCheck (Inc var) b -> TypeCheck var b+enterScopeMaybe orig md ty mval action = do+ newContext <- asks (enterScopeContext orig md ty mval)+ closeScope orig (runReaderT action newContext)++enterScope :: Binder -> TModality -> TermT var -> TypeCheck (Inc var) b -> TypeCheck var b+enterScope orig md ty = enterScopeMaybe orig md ty Nothing++enterScopeWithBind :: Binder -> TModality -> TermT var -> TermT var -> TypeCheck (Inc var) b -> TypeCheck var b+enterScopeWithBind orig md ty val = enterScopeMaybe orig md ty (Just val)++-- | Run a sub-scope computation and lift it back to the enclosing scope: close+-- the error channel one binder with 'ScopedTypeError' (as before), and re-emit+-- the holes it recorded. 'HoleInfo' is already rendered to 'VarIdent' names, so+-- no De Bruijn re-indexing is needed — only a plain re-'tell'. On a thrown+-- error the sub-scope's holes are dropped, which is intended: holes only matter+-- on the success path (lenient mode), and strict mode wants the error anyway.+closeScope+ :: Binder+ -> WriterT [HoleInfo] (Except (TypeErrorInScopedContext (Inc var))) b+ -> TypeCheck var b+closeScope orig inner = do+ (b, holes) <- lift . lift . withExceptT (ScopedTypeError (binderName orig)) $ runWriterT inner+ lift (tell holes)+ return b++enterModality :: TModality -> TypeCheck var b -> TypeCheck var b+enterModality Id action = action+enterModality md action = do+ newContext <- asks (applyModality md)+ let newContext' = newContext { localTopesEntailBottom = Nothing }+ lift $ runReaderT action newContext'++performing :: Eq var => Action var -> TypeCheck var a -> TypeCheck var a+performing action tc = do+ ctx@Context{..} <- ask+ unless (length actionStack < 1000) $ -- FIXME: which depth is reasonable? factor out into a parameter+ issueTypeError $ TypeErrorOther "maximum depth reached"+ traceTypeCheck Debug (ppSomeAction (varOrigs ctx) (length actionStack) action) $+ local (const Context { actionStack = action : actionStack, .. }) $ tc++stripTypeRestrictions :: TermT var -> TermT var+stripTypeRestrictions (TypeRestrictedT _ty ty _restriction) = stripTypeRestrictions ty+stripTypeRestrictions t = t++-- | Perform at most one \(\eta\)-expansion at the top-level to assist unification.+etaMatch :: Eq var => Maybe (TermT var) -> TermT var -> TermT var -> TypeCheck var (TermT var, TermT var)+-- FIXME: double check the next 3 rules+etaMatch _mterm expected@TypeRestrictedT{} actual@TypeRestrictedT{} = pure (expected, actual)+etaMatch mterm expected (TypeRestrictedT _ty ty _rs) = etaMatch mterm expected ty+etaMatch (Just term) expected@TypeRestrictedT{} actual =+ etaMatch (Just term) expected (typeRestrictedT actual [(topeTopT, term)])+-- ------------------------------------+-- | Subtyping on interval+etaMatch _mterm CubeIT{} Cube2T{} = pure (cubeIT, cubeIT)+-- ------------------------------------+etaMatch _mterm expected@LambdaT{} actual@LambdaT{} = pure (expected, actual)+etaMatch _mterm expected@PairT{} actual@PairT{} = pure (expected, actual)+etaMatch _mterm expected@LambdaT{} actual = do+ actual' <- etaExpand actual+ pure (expected, actual')+etaMatch _mterm expected actual@LambdaT{} = do+ expected' <- etaExpand expected+ pure (expected', actual)+etaMatch _mterm expected@PairT{} actual = do+ actual' <- etaExpand actual+ pure (expected, actual')+etaMatch _mterm expected actual@PairT{} = do+ expected' <- etaExpand expected+ pure (expected', actual)+etaMatch _mterm expected actual = pure (expected, actual)++etaExpand :: Eq var => TermT var -> TypeCheck var (TermT var)+etaExpand term@LambdaT{} = pure term+etaExpand term@PairT{} = pure term+etaExpand term = do+ ty <- typeOf term+ case stripTypeRestrictions ty of+ TypeFunT _ty orig md param mtope ret -> pure $+ lambdaT ty orig (Just (md, param, mtope))+ (appT ret (S <$> term) (Pure Z))++ TypeSigmaT _ty _orig _md a b -> pure $+ pairT ty+ (firstT a term)+ (secondT (substituteT (firstT a term) b) term)++ CubeProductT _ty a b -> pure $+ pairT ty+ (firstT a term)+ (secondT b term)++ _ -> pure term++inCubeLayer :: Eq var => TermT var -> TypeCheck var Bool+inCubeLayer = \case+ RecBottomT{} -> pure False+ UniverseT{} -> pure False++ UniverseCubeT{} -> pure True+ CubeProductT{} -> pure True+ CubeUnitT{} -> pure True+ CubeUnitStarT{} -> pure True+ Cube2T{} -> pure True+ Cube2_0T{} -> pure True+ Cube2_1T{} -> pure True++ t -> typeOf t >>= inCubeLayer++inTopeLayer :: Eq var => TermT var -> TypeCheck var Bool+inTopeLayer = \case+ RecBottomT{} -> pure False+ UniverseT{} -> pure False++ UniverseCubeT{} -> pure True+ UniverseTopeT{} -> pure True++ CubeProductT{} -> pure True+ CubeUnitT{} -> pure True+ CubeUnitStarT{} -> pure True+ Cube2T{} -> pure True+ Cube2_0T{} -> pure True+ Cube2_1T{} -> pure True++ TopeTopT{} -> pure True+ TopeBottomT{} -> pure True+ TopeAndT{} -> pure True+ TopeOrT{} -> pure True+ TopeEQT{} -> pure True+ TopeLEQT{} -> pure True++ TypeFunT _ty orig md param _mtope ret -> do+ enterScope orig md param $ inTopeLayer ret++ t -> typeOfUncomputed t >>= inTopeLayer++tryRestriction :: Eq var => TermT var -> TypeCheck var (Maybe (TermT var))+tryRestriction = \case+ TypeRestrictedT _ _ rs -> do+ let go [] = pure Nothing+ go ((tope, term') : rs') = do+ checkTope tope >>= \case+ True -> pure (Just term')+ False -> go rs'+ go rs+ _ -> pure Nothing++-- | Memoise a term's WHNF on its top node without reducing the term itself.+--+-- The returned term has the same (unreduced) structure, so free-variable and+-- @uses@ detection see exactly what the user wrote, while a later 'whnfT' is+-- O(1) via the cached 'infoWHNF'. Used when storing a definition's elaborated+-- type and value, where an in-place reduction could otherwise discard or+-- expose a variable occurrence.+memoizeWHNF :: Eq var => TermT var -> TypeCheck var (TermT var)+memoizeWHNF t@Pure{} = pure t+memoizeWHNF t@(Free (AnnF info f)) = do+ w <- whnfT t+ pure (Free (AnnF info { infoWHNF = Just w } f))++-- | Compute a typed term to its WHNF.+--+-- >>> unsafeTypeCheck' $ whnfT "(\\ (x : Unit) -> x) unit"+-- unit : Unit+whnfT :: Eq var => TermT var -> TypeCheck var (TermT var)+whnfT tt = performing (ActionWHNF tt) $ case tt of+ -- use cached result if it exists+ Free (AnnF info _)+ | Just tt' <- infoWHNF info -> pure tt'++ -- universe constants+ UniverseT{} -> pure tt+ UniverseCubeT{} -> pure tt+ UniverseTopeT{} -> pure tt++ -- cube layer (except vars, pairs, and applications)+ CubeProductT{} -> nfTope tt+ CubeUnitT{} -> pure tt+ CubeUnitStarT{} -> pure tt+ Cube2T{} -> pure tt+ Cube2_0T{} -> pure tt+ Cube2_1T{} -> pure tt+ CubeIT{} -> pure tt+ CubeI_0T{} -> pure tt+ CubeI_1T{} -> pure tt+ CubeFlipT{} -> nfTope tt+ CubeUnflipT{} -> nfTope tt++ -- tope layer (except vars, pairs of points, and applications)+ TopeTopT{} -> pure tt+ TopeBottomT{} -> pure tt+ TopeAndT{} -> nfTope tt+ TopeOrT{} -> nfTope tt+ TopeEQT{} -> nfTope tt+ TopeLEQT{} -> nfTope tt+ TopeInvT{} -> nfTope tt+ TopeUninvT{} -> nfTope tt++ -- type layer terms that should not be evaluated further+ LambdaT{} -> pure tt+ PairT{} -> pure tt+ ReflT{} -> pure tt+ TypeFunT{} -> pure tt+ TypeSigmaT{} -> pure tt+ TypeIdT{} -> pure tt+ TypeModalT{} -> pure tt+ RecBottomT{} -> pure tt+ TypeUnitT{} -> pure tt+ UnitT{} -> pure tt++ -- type ascriptions are ignored, since we already have a typechecked term+ TypeAscT _ty term _ty' -> whnfT term++ -- check if we have cube or a tope term (if so, compute NF)+ _ -> typeOf tt >>= \case+ UniverseCubeT{} -> nfTope tt+ UniverseTopeT{} -> nfTope tt++ -- CubeUnitT{} -> pure cubeUnitStarT -- compute an expression of 1 cube to its only point+ TypeUnitT{} -> pure unitT -- compute an expression of Unit type to unit+ -- FIXME: next line is ad hoc, should be improved!+ TypeRestrictedT _info TypeUnitT{} _rs -> pure unitT -- compute an expression of Unit type to unit++ -- check if we have cube point term (if so, compute NF)+ typeOf_tt -> typeOf typeOf_tt >>= \case+ UniverseCubeT{} -> nfTope tt++ -- now we are in the type layer+ _ -> fmap termIsWHNF $ do+ tryRestriction typeOf_tt >>= \case+ Just tt' -> whnfT tt'+ Nothing -> case tt of+ -- a hole is opaque: it never reduces, it is already a normal form+ HoleT{} -> pure tt+ t@(Pure var) ->+ valueOfVar var >>= \case+ Nothing -> pure t+ Just term -> whnfT term++ AppT ty f x ->+ whnfT f >>= \case+ LambdaT _ty _orig _arg body ->+ whnfT (substituteT x body)+ f' -> typeOf f' >>= \case+ TypeFunT _ty _orig md _param (Just tope) UniverseTopeT{} -> do+ x' <- enterModality md $ nfT x+ topeAndT+ <$> pure (AppT ty f' x')+ <*> nfT (substituteT x' tope)+ -- FIXME: this seems to be a hack, and will not work in all situations!+ -- FIXME: need to check performance of this code thoroughly+ -- FIXME: for now, it seems to add ~2x slowdown+ TypeFunT info _orig md _param _mtope ret@TypeRestrictedT{}+ | TypeRestrictedT{} <- infoType info -> pure (AppT ty f' x)+ | otherwise -> do+ x' <- enterModality md $ whnfT x+ let ret' = substituteT x' ret+ tryRestriction ret' >>= \case -- FIXME: too many unnecessary checks?+ Nothing -> pure (AppT ty { infoType = ret' } f' x')+ Just tt' -> whnfT tt'+ _ -> pure (AppT ty f' x)++ LetT _ty _orig _mparam val body ->+ whnfT (substituteT val body)+ LetModT ty orig app inn mparam val body -> do+ (enterModality app $ whnfT val) >>= \case+ ModAppT _ md t | md == inn -> do+ val' <- enterModality md $ whnfT t+ whnfT (substituteT val' body)+ b' | isRA inn -> do+ bty <- typeOf b' >>= \case+ TypeModalT _ _ t -> pure t+ _ -> panicImpossible "not modal in letmod"+ whnfT (substituteT (modExtractT bty app inn b') body)+ _ -> pure (LetModT ty orig app inn mparam val body)+ FirstT ty t ->+ whnfT t >>= \case+ PairT _ l _r -> whnfT l+ t' -> pure (FirstT ty t')++ SecondT ty t ->+ whnfT t >>= \case+ PairT _ _l r -> whnfT r+ t' -> pure (SecondT ty t')+ ModAppT ty md b -> do+ (enterModality md $ whnfT b) >>= \case+ ModExtractT _ app inn t | inn == md -> enterModality (comp md app) $ whnfT t+ b' -> pure $ ModAppT ty md b'+ ModExtractT ty app inn b -> do+ (enterModality app $ whnfT b) >>= \case+ ModAppT _ md t | inn == md -> enterModality inn $ whnfT t+ b' -> pure (ModExtractT ty app inn b')+ IdJT ty tA a tC d x p ->+ whnfT p >>= \case+ ReflT{} -> whnfT d+ p' -> pure (IdJT ty tA a tC d x p')++ RecOrT _ty rs -> do+ let go [] = pure Nothing+ go ((tope, tt') : rs') = do+ checkTope tope >>= \case+ True -> pure (Just tt')+ False -> go rs'+ go rs >>= \case+ Just tt' -> whnfT tt'+ Nothing+ | [tt'] <- nubTermT (map snd rs) -> whnfT tt'+ | otherwise -> pure tt++ TypeRestrictedT ty type_ rs -> do+ rs' <- traverse (\(tope, term) -> (,) <$> nfT tope <*> pure term) rs+ case filter ((/= topeBottomT) . fst) rs' of+ [] -> whnfT type_ -- get rid of restrictions at BOT+ rs'' -> TypeRestrictedT ty <$> whnfT type_ <*> pure rs''++nfTope :: Eq var => TermT var -> TypeCheck var (TermT var)+nfTope tt = performing (ActionNF tt) $ fmap termIsNF $ case tt of+ HoleT{} -> pure tt+ Pure var ->+ valueOfVar var >>= \case+ Nothing -> return tt+ Just term -> nfTope term++ -- see if normal form is already available+ Free (AnnF info _) | Just tt' <- infoNF info -> pure tt'++ -- universe constants+ UniverseT{} -> pure tt+ UniverseCubeT{} -> pure tt+ UniverseTopeT{} -> pure tt++ -- cube layer constants+ CubeUnitT{} -> pure tt+ CubeUnitStarT{} -> pure tt+ Cube2T{} -> pure tt+ Cube2_0T{} -> pure tt+ Cube2_1T{} -> pure tt+ CubeIT{} -> pure tt+ CubeI_0T{} -> pure tt+ CubeI_1T{} -> pure tt++ -- type layer constants+ TypeUnitT{} -> pure tt+ UnitT{} -> pure tt++ -- cube layer with computation+ CubeProductT _ty l r -> cubeProductT <$> nfTope l <*> nfTope r++ CubeFlipT ty t ->+ nfTope t >>= \case+ CubeUnflipT _ t' -> pure t'+ Cube2_0T{} -> pure (modAppT (typeModalT cubeT Op cube2T) Op cube2_1T)+ Cube2_1T{} -> pure (modAppT (typeModalT cubeT Op cube2T) Op cube2_0T)+ CubeI_0T{} -> pure (modAppT (typeModalT cubeT Op cubeIT) Op cubeI_1T)+ CubeI_1T{} -> pure (modAppT (typeModalT cubeT Op cubeIT) Op cubeI_0T)+ t' -> pure (CubeFlipT ty t')++ CubeUnflipT ty t -> + nfTope t >>= \case+ CubeFlipT _ t' -> pure t'+ ModAppT _ Op Cube2_0T{} -> pure cube2_1T+ ModAppT _ Op Cube2_1T{} -> pure cube2_0T+ ModAppT _ Op CubeI_0T{} -> pure cubeI_1T+ ModAppT _ Op CubeI_1T{} -> pure cubeI_0T+ t' -> pure (CubeUnflipT ty t')++ -- tope layer constants+ TopeTopT{} -> pure tt+ TopeBottomT{} -> pure tt++ -- tope layer with computation+ TopeAndT ty l r ->+ nfTope l >>= \case+ TopeBottomT{} -> pure topeBottomT+ l' -> nfTope r >>= \case+ TopeBottomT{} -> pure topeBottomT+ r' -> pure (TopeAndT ty l' r')++ TopeOrT ty l r -> do+ l' <- nfTope l+ r' <- nfTope r+ case (l', r') of+ (TopeBottomT{}, _) -> pure r'+ (_, TopeBottomT{}) -> pure l'+ _ -> pure (TopeOrT ty l' r')++ TopeEQT ty l r -> TopeEQT ty <$> nfTope l <*> nfTope r+ TopeLEQT ty l r -> TopeLEQT ty <$> nfTope l <*> nfTope r++ TopeInvT ty t ->+ -- Match And/Or on the *unnormalized* input: nfTope of a shape-restricted+ -- App produces a TopeAnd via shape-side-condition propagation, and+ -- distributing inv over that synthetic conjunction loops forever because+ -- the recursive topeInvT renormalizes the same App back into a TopeAnd.+ case t of+ TopeTopT _ -> pure $ modAppT topeT Op topeTopT+ TopeBottomT _ -> pure $ modAppT topeT Op topeBottomT+ TopeLEQT _ x y -> do+ xTy <- typeOf x+ yTy <- typeOf y+ nfTope $+ modAppT (typeModalT universeT Op topeT) Op+ (topeLEQT+ (modExtractT topeT Id Op (cubeFlipT xTy y))+ (modExtractT topeT Id Op (cubeFlipT yTy x)))+ TopeEQT _ x y -> do+ xTy <- typeOf x+ yTy <- typeOf y+ nfTope $+ modAppT (typeModalT universeT Op topeT) Op+ (topeEQT+ (modExtractT topeT Id Op (cubeFlipT xTy y))+ (modExtractT topeT Id Op (cubeFlipT yTy x)))+ TopeAndT _ phi psi -> nfTope $+ modAppT (typeModalT universeT Op topeT) Op+ (topeAndT+ (modExtractT topeT Id Op (topeInvT phi))+ (modExtractT topeT Id Op (topeInvT psi)))+ TopeOrT _ phi psi -> nfTope $+ modAppT (typeModalT universeT Op topeT) Op+ (topeOrT+ (modExtractT topeT Id Op (topeInvT phi))+ (modExtractT topeT Id Op (topeInvT psi)))+ _ ->+ nfTope t >>= \case+ TopeTopT _ -> pure topeTopT+ TopeBottomT _ -> pure topeBottomT+ TopeUninvT _ phi -> pure phi+ TopeLEQT _ x y -> do+ xTy <- typeOf x+ yTy <- typeOf y+ nfTope $+ modAppT (typeModalT universeT Op topeT) Op+ (topeLEQT+ (modExtractT topeT Id Op (cubeFlipT xTy y))+ (modExtractT topeT Id Op (cubeFlipT yTy x)))+ TopeEQT _ x y -> do+ xTy <- typeOf x+ yTy <- typeOf y+ nfTope $+ modAppT (typeModalT universeT Op topeT) Op+ (topeEQT+ (modExtractT topeT Id Op (cubeFlipT xTy y))+ (modExtractT topeT Id Op (cubeFlipT yTy x)))+ t' -> pure (TopeInvT ty t')++ TopeUninvT ty t ->+ case t of+ ModAppT _ Op inner -> case inner of+ TopeTopT _ -> pure topeTopT+ TopeBottomT _ -> pure topeBottomT + TopeAndT _ phi psi ->+ nfTope $+ (topeAndT+ (topeUninvT phi)+ (topeUninvT psi))+ TopeOrT _ phi psi ->+ nfTope $+ (topeOrT+ (topeUninvT phi)+ (topeUninvT psi))+ _ ->+ nfTope t >>= \case+ TopeTopT _ -> pure topeTopT+ TopeBottomT _ -> pure topeBottomT+ TopeInvT _ phi -> pure phi+ ModAppT _ Op inner'' -> case inner'' of+ TopeLEQT _ x y -> do+ xTy <- typeOf x+ yTy <- typeOf y+ nfTope $+ (topeLEQT+ (cubeUnflipT xTy (modAppT (typeModalT cubeT Op xTy) Op y))+ (cubeUnflipT yTy (modAppT (typeModalT cubeT Op yTy) Op x)))+ TopeEQT _ x y -> do+ xTy <- typeOf x+ yTy <- typeOf y+ nfTope $+ (topeEQT+ (cubeUnflipT xTy (modAppT (typeModalT cubeT Op xTy) Op y))+ (cubeUnflipT yTy (modAppT (typeModalT cubeT Op yTy) Op x)))+ inner' ->+ pure $+ TopeUninvT ty+ (modAppT (typeModalT universeT Op topeT) Op inner')+ t' ->+ pure (TopeUninvT ty t')+ _ ->+ nfTope t >>= \case+ TopeInvT _ phi -> pure phi+ t'@(ModAppT _ Op _) -> nfTope (TopeUninvT ty t')+ t' -> pure (TopeUninvT ty t')++ -- type ascriptions are ignored, since we already have a typechecked term+ TypeAscT _ty term _ty' -> nfTope term++ PairT ty l r -> PairT ty <$> nfTope l <*> nfTope r++ AppT ty f x ->+ nfTope f >>= \case+ LambdaT _ty _orig _arg body ->+ nfTope (substituteT x body)+ f' -> typeOfUncomputed f' >>= \case+ TypeFunT _ty _orig md _param (Just tope) UniverseTopeT{} -> do+ x' <- enterModality md $ nfTope x+ topeAndT+ <$> pure (AppT ty f' x')+ <*> nfTope (substituteT x' tope)+ _ -> AppT ty f' <$> nfTope x++ FirstT ty t ->+ nfTope t >>= \case+ PairT _ty x _y -> pure x+ t' -> pure (FirstT ty t')++ SecondT ty t ->+ nfTope t >>= \case+ PairT _ty _x y -> pure y+ t' -> pure (SecondT ty t')++ LambdaT ty orig _mparam body+ | TypeFunT _ty _origF md param mtope _ret <- infoType ty ->+ -- NOTE: the domain @param@ is left unnormalised: in the tope layer it may+ -- be a shape (a function type into TOPE), which nfTope cannot normalise.+ LambdaT ty orig (Just (md, param, mtope)) <$> enterScope orig md param (nfTope body)+ LambdaT{} -> panicImpossible "lambda with a non-function type in the tope layer"+ ModAppT ty md b ->+ (enterModality md $ nfTope b) >>= \case+ ModExtractT _ _ inn t | inn == md -> pure t+ b' -> pure $ ModAppT ty md b'+ ModExtractT ty app inn b ->+ (enterModality app $ nfTope b) >>= \case+ ModAppT _ md t | inn == md -> pure t+ b' -> pure $ ModExtractT ty app inn b'+ LetModT ty orig app inn mparam val body -> do+ (enterModality app $ nfTope val) >>= \case+ ModAppT _ md t | md == inn -> do+ val' <- return t+ nfTope (substituteT val' body)+ b' | isRA inn -> do+ bty <- typeOf b' >>= \case+ TypeModalT _ _ t -> pure t+ _ -> panicImpossible "not modal in letmod"+ nfTope (substituteT (modExtractT bty app inn b') body)+ b' -> do+ bty <- typeOf b' >>= \case+ TypeModalT _ _ t -> pure t+ _ -> panicImpossible "not modal in letmod"+ val' <- enterModality app $ nfTope b'+ body' <- enterScope orig (comp app inn) bty $ nfTope body+ pure (LetModT ty orig app inn mparam val' body')++ TypeModalT ty md inner -> TypeModalT ty md <$> (enterModality md $ nfTope inner)+ LetT _ty _orig _mparam val body -> nfTope (substituteT val body)+ TypeFunT{} -> panicImpossible "exposed function type in the tope layer"+ TypeSigmaT{} -> panicImpossible "dependent sum type in the tope layer"+ TypeIdT{} -> panicImpossible "identity type in the tope layer"+ ReflT{} -> panicImpossible "refl in the tope layer"+ IdJT{} -> panicImpossible "idJ eliminator in the tope layer"+ TypeRestrictedT{} -> panicImpossible "extension types in the tope layer"++ -- A recOR/recBOT is a term-level eliminator, never a tope. It should have+ -- been rejected before reaching here (see the RecOr case of 'typecheck'); as+ -- a safety net for any other path, report a type error rather than panicking.+ RecOrT{} -> issueTypeError $ TypeErrorOther "a recOR cannot appear in the tope layer"+ RecBottomT{} -> issueTypeError $ TypeErrorOther "a recBOT cannot appear in the tope layer"++-- | Compute a typed term to its NF.+--+-- >>> unsafeTypeCheck' $ nfT "(\\ (x : Unit) -> x) unit"+-- unit : Unit+nfT :: Eq var => TermT var -> TypeCheck var (TermT var)+nfT tt = performing (ActionNF tt) $ case tt of+ -- universe constants+ UniverseT{} -> pure tt+ UniverseCubeT{} -> pure tt+ UniverseTopeT{} -> pure tt++ -- cube layer constants+ CubeUnitT{} -> pure tt+ CubeUnitStarT{} -> pure tt+ Cube2T{} -> pure tt+ Cube2_0T{} -> pure tt+ Cube2_1T{} -> pure tt+ CubeIT{} -> pure tt+ CubeI_0T{} -> pure tt+ CubeI_1T{} -> pure tt++ -- cube layer with computation+ CubeProductT{} -> nfTope tt+ CubeFlipT{} -> nfTope tt+ CubeUnflipT{} -> nfTope tt++ -- tope layer constants+ TopeTopT{} -> pure tt+ TopeBottomT{} -> pure tt++ -- tope layer with computation+ TopeAndT{} -> nfTope tt+ TopeOrT{} -> nfTope tt+ TopeEQT{} -> nfTope tt+ TopeLEQT{} -> nfTope tt+ TopeInvT{} -> nfTope tt+ TopeUninvT{} -> nfTope tt++ -- type layer constants+ ReflT ty _x -> pure (ReflT ty Nothing)+ RecBottomT{} -> pure tt+ TypeUnitT{} -> pure tt+ UnitT{} -> pure tt++ -- type ascriptions are ignored, since we already have a typechecked term+ TypeAscT _ty term _ty' -> nfT term++ -- now we are in the type layer+ _ -> do+ typeOf tt >>= tryRestriction >>= \case+ Just tt' -> nfT tt'+ Nothing -> case tt of+ -- a hole is opaque: it never reduces, it is already a normal form+ HoleT{} -> pure tt+ t@(Pure var) ->+ valueOfVar var >>= \case+ Nothing -> pure t+ Just term -> nfT term++ TypeFunT ty orig md param mtope ret -> do+ param' <- enterModality md $ nfT param+ enterScope orig md param' $ do+ mtope' <- traverse nfT mtope+ maybe id localTope mtope' $+ TypeFunT ty orig md param' mtope' <$> nfT ret+ AppT ty f x ->+ whnfT f >>= \case+ LambdaT _ty _orig _arg body ->+ nfT (substituteT x body)+ f' -> typeOf f' >>= \case+ TypeFunT _ty _orig md _param (Just tope) UniverseTopeT{} -> do+ x' <- enterModality md $ nfT x+ topeAndT+ <$> pure (AppT ty f' x')+ <*> nfT (substituteT x' tope)+ _ -> AppT ty <$> nfT f' <*> nfT x+ LetT _ty _orig _mparam val body ->+ nfT (substituteT val body)+ LetModT ty orig app inn mparam val body -> do+ (enterModality app $ whnfT val) >>= \case+ ModAppT _ md t | md == inn -> do+ val' <- enterModality md $ nfT t+ nfT (substituteT val' body)+ b' | isRA inn -> do+ bty <- typeOf b' >>= \case+ TypeModalT _ _ t -> pure t+ _ -> panicImpossible "not modal in letmod"+ nfT (substituteT (modExtractT bty app inn b') body)+ b' -> do+ bty <- typeOf b' >>= \case+ TypeModalT _ _ t -> pure t+ _ -> panicImpossible "not modal in letmod"+ val' <- enterModality app $ nfT b'+ body' <- enterScope orig (comp app inn) bty $ nfT body+ pure (LetModT ty orig app inn mparam val' body')+ LambdaT ty orig _mparam body -> do+ case stripTypeRestrictions (infoType ty) of+ TypeFunT _ty _orig md param mtope _ret -> do+ param' <- enterModality md $ nfT param+ enterScope orig md param' $ do+ mtope' <- traverse nfT mtope+ maybe id localTope mtope' $+ LambdaT ty orig (Just (md, param', mtope')) <$> nfT body+ _ -> panicImpossible "lambda with a non-function type"+++ TypeSigmaT ty orig md a b -> do+ a' <- enterModality md $ nfT a+ enterScope orig md a' $ do+ TypeSigmaT ty orig md a' <$> nfT b+ PairT ty l r -> PairT ty <$> nfT l <*> nfT r+ FirstT ty t ->+ whnfT t >>= \case+ PairT _ l _r -> nfT l+ t' -> FirstT ty <$> nfT t'+ SecondT ty t ->+ whnfT t >>= \case+ PairT _ _l r -> nfT r+ t' -> SecondT ty <$> nfT t'++ TypeIdT ty x _tA y -> TypeIdT ty <$> nfT x <*> pure Nothing <*> nfT y+ IdJT ty tA a tC d x p ->+ whnfT p >>= \case+ ReflT{} -> nfT d+ p' -> IdJT ty <$> nfT tA <*> nfT a <*> nfT tC <*> nfT d <*> nfT x <*> nfT p'++ RecOrT _ty rs -> do+ let go [] = pure Nothing+ go ((tope, tt') : rs') = do+ checkTope tope >>= \case+ True -> pure (Just tt')+ False -> go rs'+ go rs >>= \case+ Just tt' -> nfT tt'+ Nothing+ | [tt'] <- nubTermT (map snd rs) -> nfT tt'+ | otherwise -> pure tt+ TypeModalT ty md b -> do+ b' <- enterModality md $ nfT b+ pure (TypeModalT ty md b')+ ModAppT ty md b -> do+ (enterModality md $ whnfT b) >>= \case+ ModExtractT _ app inn t | inn == md -> enterModality (comp app inn) $ nfT t+ b' -> ModAppT ty md <$> (enterModality md $ nfT b')+ ModExtractT ty app inn b -> do+ (enterModality app $ whnfT b) >>= \case+ ModAppT _ md t | inn == md -> enterModality (comp app inn) $ nfT t+ b' -> ModExtractT ty app inn <$> (enterModality app $ nfT b') + TypeRestrictedT ty type_ rs -> do+ rs' <- forM rs $ \(tope, term) -> do+ nfTope tope >>= \case+ TopeBottomT{} -> pure Nothing+ tope' -> do+ term' <- localTope tope' $+ nfT term+ return (Just (tope', term'))+ case catMaybes rs' of+ [] -> nfT type_+ rs'' -> TypeRestrictedT ty <$> nfT type_ <*> pure rs''++checkDefinedVar :: VarIdent -> TypeCheck VarIdent ()+checkDefinedVar x = asks (lookup x . varInfos) >>= \case+ Nothing -> issueTypeError $ TypeErrorUndefined x+ Just _ty -> return ()++valueOfVar :: Eq var => var -> TypeCheck var (Maybe (TermT var))+valueOfVar x = asks (lookup x . varValues) >>= \case+ Nothing -> issueTypeError $ TypeErrorUndefined x+ Just ty -> return ty++typeOfVar :: Eq var => var -> TypeCheck var (TermT var)+typeOfVar x = asks (lookup x . varTypes) >>= \case+ Nothing -> issueTypeError $ TypeErrorUndefined x+ Just ty -> return ty++modalityOfVar :: Eq var => var -> TypeCheck var (TModality)+modalityOfVar x = asks (lookup x . varModalities) >>= \case+ Nothing -> issueTypeError $ TypeErrorUndefined x+ Just m -> return m++locksOfVar :: Eq var => var -> TypeCheck var (TModality)+locksOfVar x = asks (lookup x . varLocks) >>= \case+ Nothing -> issueTypeError $ TypeErrorUndefined x+ Just m -> return m++isTopLevelVar :: Eq var => var -> TypeCheck var Bool+isTopLevelVar x = asks (lookup x . varTopLevels) >>= \case+ Nothing -> issueTypeError $ TypeErrorUndefined x+ Just b -> return b++typeOfUncomputed :: Eq var => TermT var -> TypeCheck var (TermT var)+typeOfUncomputed = \case+ Pure x -> typeOfVar x+ Free (AnnF TypeInfo{..} _) -> pure infoType++typeOf :: Eq var => TermT var -> TypeCheck var (TermT var)+typeOf t = typeOfUncomputed t >>= whnfT++unifyTopes :: Eq var => TermT var -> TermT var -> TypeCheck var ()+unifyTopes l r = do+ equiv <- (&&)+ <$> [plainTope l] `entailM` r+ <*> [plainTope r] `entailM` l+ unless equiv $+ issueTypeError (TypeErrorTopesNotEquivalent l r)++inAllSubContexts :: TypeCheck var () -> TypeCheck var () -> TypeCheck var ()+inAllSubContexts handleSingle tc = do+ topeSubContexts <- asks localTopesNFUnion+ case topeSubContexts of+ [] -> panicImpossible "empty set of alternative contexts"+ [_] -> handleSingle+ _:_:_ -> do+ forM_ topeSubContexts $ \topes' -> do+ local (\Context{..} -> Context+ { localTopes = topes'+ , localTopesNF = topes'+ , localTopesNFUnion = [topes']+ , .. }) $+ tc++unify :: Eq var => Maybe (TermT var) -> TermT var -> TermT var -> TypeCheck var ()+unify mterm expected actual = performUnification `catchError` \typeError -> do+ inAllSubContexts (throwError typeError) performUnification+ where+ performUnification = unifyInCurrentContext mterm expected actual++unifyViaDecompose :: Eq var => TermT var -> TermT var -> TypeCheck var ()+unifyViaDecompose expected actual | expected == actual = return ()+unifyViaDecompose (AppT _ f x) (AppT _ g y) = do+ unify Nothing f g+ setVariance Invariant $ unify Nothing x y+unifyViaDecompose _ _ = issueTypeError (TypeErrorOther "cannot decompose")++unifyInCurrentContext :: Eq var => Maybe (TermT var) -> TermT var -> TermT var -> TypeCheck var ()+unifyInCurrentContext mterm expected actual = performing action $ do+ inBottom <- contextEntailsBottom+ unless inBottom $+ unifyViaDecompose expected actual `catchError` \_ -> do -- NOTE: this gives a small, but noticeable speedup+ expectedVal <- whnfT expected+ actualVal <- whnfT actual+ mea <- asks covariance >>= \case+ Covariant -> Just <$> etaMatch mterm expectedVal actualVal+ Contravariant -> Just . swap <$> etaMatch mterm actualVal expectedVal+ Invariant -> traceTypeCheck Debug "invariant" $ do+ -- FIXME: inefficient+ traceTypeCheck Debug "invariant->covariant" $+ setVariance Covariant $ unifyInCurrentContext mterm expectedVal actualVal+ traceTypeCheck Debug "invariant->contravariant" $+ setVariance Contravariant $ unifyInCurrentContext mterm expectedVal actualVal+ return Nothing+ case mea of+ Nothing -> return ()+ -- A hole (lenient mode) stands for a term of the expected type, so it+ -- unifies with anything; accept it instead of falling through to the+ -- dispatch below (which would panic on an unexpected term).+ Just (expected', actual') | isHoleT expected' || isHoleT actual' -> return ()+ Just (expected', actual') ->+ unless (expected' == actual') $ do -- NOTE: this gives a small, but noticeable speedup+ case actual' of+ RecBottomT{} -> return ()+ RecOrT _ty rs' ->+ case expected' of+ RecOrT _ty rs -> sequence_ $+ checkCoherence <$> rs <*> rs'+ _ -> do+ forM_ rs' $ \(tope, term) ->+ localTope tope $+ unifyTerms expected' term+ _ -> typeOf expected' >>= typeOf >>= \case+ UniverseCubeT{} -> contextEntails (topeEQT expected' actual')+ _ -> do+ -- A hole stands for a term of the expected type, so a+ -- unification that would otherwise fail is deferred when either+ -- side still contains an (unfilled) hole — including one nested+ -- in a larger term, e.g. @f ?@ checked against an extension-type+ -- boundary. 'structuralHoleUnify' turns this off, keeping a+ -- structural mismatch around a hole an error. Lazy: only runs on+ -- the failure path.+ defer <- asks deferHoleMismatches+ let def = unless (expected' == actual') err+ holePresent = defer && (containsHole expected' || containsHole actual')+ err+ | holePresent = return ()+ | otherwise =+ case mterm of+ Nothing -> issueTypeError (TypeErrorUnifyTerms expected' actual')+ Just term -> issueTypeError (TypeErrorUnify term expected' actual')+ errS+ | holePresent = return ()+ | otherwise = do+ let expectedS = S <$> expected'+ actualS = S <$> actual'+ case mterm of+ Nothing -> issueTypeError (TypeErrorUnifyTerms expectedS actualS)+ Just term -> issueTypeError (TypeErrorUnify (S <$> term) expectedS actualS)+ case expected' of+ Pure{} -> def++ UniverseT{} -> def+ UniverseCubeT{} -> def+ UniverseTopeT{} -> def++ TypeUnitT{} -> def+ UnitT{} -> return () -- Unit always unifies!++ CubeUnitT{} -> def+ CubeUnitStarT{} -> def+ Cube2T{} -> def+ Cube2_0T{} -> def+ Cube2_1T{} -> def+ CubeIT{} -> def+ CubeI_0T{} -> def+ CubeI_1T{} -> def+ CubeProductT _ l r ->+ case actual' of+ CubeProductT _ l' r' -> do+ unifyTerms l l'+ unifyTerms r r'+ _ -> err++ PairT _ty l r ->+ case actual' of+ PairT _ty' l' r' -> do+ unifyTerms l l'+ unifyTerms r r'++ -- one part of eta-expansion for pairs+ -- FIXME: add symmetric version!+ _ -> err++ FirstT _ty t ->+ case actual' of+ FirstT _ty' t' -> unifyTerms t t'+ _ -> err++ SecondT _ty t ->+ case actual' of+ SecondT _ty' t' -> unifyTerms t t'+ _ -> err++ TopeTopT{} -> unifyTopes expected' actual'+ TopeBottomT{} -> unifyTopes expected' actual'+ TopeEQT{} -> unifyTopes expected' actual'+ TopeLEQT{} -> unifyTopes expected' actual'+ TopeAndT{} -> unifyTopes expected' actual'+ TopeOrT{} -> unifyTopes expected' actual'++ RecBottomT{} -> return () -- unifies with anything+ RecOrT _ty rs ->+ case actual' of+ -- ----------------------------------------------+ -- IMPORTANT: this pattern matching is redundant,+ -- but it is not obvious, so+ -- take care when refactoring!+ -- ----------------------------------------------+ -- RecOrT _ty rs' -> sequence_ $+ -- checkCoherence <$> rs <*> rs'+ -- ----------------------------------------------+ _ -> do+ forM_ rs $ \(tope, term) ->+ localTope tope $+ unifyTerms term actual'++ TypeFunT _ty _orig md cube mtope ret ->+ case actual' of+ TypeFunT _ty' orig' md' cube' mtope' ret' -> do+ when (md /= md') $+ issueTypeError (TypeErrorOther $ "modality mismatch in function type: expected " <> show md <> " but got " <> show md')+ switchVariance $ -- unifying in the negative position!+ unifyTerms cube cube' -- FIXME: unifyCubes+ enterScope orig' md cube' $ do+ case ret' of+ UniverseTopeT{} -> do+ -- This is the case for tope families (shapes)+ --+ -- (Λ → TOPE) <: (Δ → TOPE)+ -- since if φ : Λ → TOPE+ -- then φ ⊢ Δ+ --+ -- we DO NOT take tope context Φ into account!+ expectedTopeNF <- fromMaybe topeTopT <$> traverse nfT mtope+ actualTopeNF <- fromMaybe topeTopT <$> traverse nfT mtope'+ actualEntailsExpected <- [plainTope actualTopeNF] `entailM` expectedTopeNF+ unless (actualEntailsExpected || containsHole expectedTopeNF || containsHole actualTopeNF) $+ issueTypeError (TypeErrorTopeNotSatisfied [actualTopeNF] expectedTopeNF)+ _ -> do+ -- this is the case for Π-types and extension types+ --+ -- Ξ | Φ | Γ ⊢ {t : I | φ} → A t <: {s : J | ψ} → B s+ -- when+ -- Ξ | Φ, ψ ⊢ φ+ expectedTopeNF <- fromMaybe topeTopT <$> traverse nfT mtope+ actualTopeNF <- fromMaybe topeTopT <$> traverse nfT mtope'+ localTope expectedTopeNF $+ contextEntails actualTopeNF+ case mterm of+ Nothing -> unifyTerms ret ret'+ Just term -> unifyTypes (appT ret' (S <$> term) (Pure Z)) ret ret'+ _ -> err++ TypeSigmaT _ty _orig md a b ->+ case actual' of+ TypeSigmaT _ty' orig' md' a' b' -> do+ when (md /= md') $+ issueTypeError (TypeErrorOther $ "modality mismatch in sigma type: expected " <> show md <> " but got " <> show md')+ unify Nothing a a'+ enterScope orig' md a' $ unify Nothing b b'+ _ -> err++ TypeIdT _ty x _tA y ->+ case actual' of+ TypeIdT _ty' x' _tA' y' -> do+ -- unify Nothing tA tA' -- TODO: do we need this check?+ unify Nothing x x'+ unify Nothing y y'+ _ -> err++ AppT _ty f x ->+ case actual' of+ AppT _ty' f' x' -> do+ unify Nothing f f'+ setVariance Invariant $+ unify Nothing x x'+ _ -> err++ LambdaT ty _orig _mparam body ->+ case stripTypeRestrictions (infoType ty) of+ TypeFunT _ty _origF md param mtope _ret ->+ case actual' of+ LambdaT ty' orig' _mparam' body' ->+ case stripTypeRestrictions (infoType ty') of+ TypeFunT _ty' _origF' md' param' mtope' _ret' -> do+ when (md /= md') $+ issueTypeError (TypeErrorOther $ "modality mismatch in lambda: expected " <> show md <> " but got " <> show md')+ unify Nothing param param' -- we (should) have already checked this in types!+ enterScope orig' md param $ do+ case (mtope, mtope') of+ (Just tope, Just tope') -> do+ unify Nothing tope tope' -- we (should) have already checked this in types!+ localTope tope $ unify Nothing body body'+ (Nothing, Nothing) -> do+ unify Nothing body body'+ _ -> errS+ _ -> err+ _ -> err+ _ -> err++ LetT{} -> panicImpossible "let at the root of WHNF"+ LetModT _ orig app inn _ val body ->+ case actual' of+ LetModT _ _ app' inn' _ val' body'+ | app == app', inn == inn' -> do+ unify Nothing val val'+ bty <- typeOf val >>= \case+ TypeModalT _ _ t -> pure t+ _ -> panicImpossible "not modal in letmod"+ enterScope orig (comp app inn) bty $+ unify Nothing body body'+ _ -> err++ ReflT ty _x | TypeIdT _ty x _tA y <- infoType ty ->+ case actual' of+ ReflT ty' _x' | TypeIdT _ty' x' _tA' y' <- infoType ty' -> do+ -- unify Nothing tA tA' -- TODO: do we need this check?+ unify Nothing x x'+ unify Nothing y y'+ _ -> err+ ReflT{} -> panicImpossible "refl with a non-identity type!"++ IdJT _ty a b c d e f ->+ case actual' of+ IdJT _ty' a' b' c' d' e' f' -> do+ unify Nothing a a'+ unify Nothing b b'+ unify Nothing c c'+ unify Nothing d d'+ unify Nothing e e'+ unify Nothing f f'+ _ -> err++ TypeAscT{} -> panicImpossible "type ascription at the root of WHNF"++ TypeRestrictedT _ty ty rs ->+ case actual' of+ TypeRestrictedT _ty' ty' rs' -> do+ unify mterm ty ty'+ sequence_+ [ localTope tope $ do+ -- FIXME: can do less entails checks?+ contextEntails (foldr topeOrT topeBottomT (map fst rs')) -- expected is less specified than actual+ forM_ rs' $ \(tope', term') -> do+ localTope tope' $+ unify Nothing term term'+ | (tope, term) <- rs+ ]+ _ -> err -- FIXME: need better unification for restrictions+ TypeModalT _ty m ty ->+ case actual' of+ TypeModalT _ty' m' ty' -> do+ when (m' /= m) $ err+ enterModality m $ unify Nothing ty ty'+ _ -> err+ ModAppT _ty m ty ->+ case actual' of+ ModAppT _ty' m' ty' -> do+ when (m' /= m) $ err+ enterModality m $ unify Nothing ty ty'+ _ -> err+ ModExtractT _ty app inn te ->+ case actual' of+ ModExtractT _ty' app' inn' te' -> do+ when (app' /= app) $ err+ when (inn' /= inn) $ err+ enterModality app $ unify Nothing te te'+ _ -> err+ -- defensive: a hole nested anywhere also defers here rather+ -- than panicking on an otherwise unexpected shape+ _ | holePresent -> return ()+ _ -> panicImpossible "unexpected term in UNIFY"+++ where+ action = case mterm of+ Nothing -> ActionUnifyTerms expected actual+ Just term -> ActionUnify term expected actual++unifyTypes :: Eq var => TermT var -> TermT var -> TermT var -> TypeCheck var ()+unifyTypes = unify . Just++unifyTerms :: Eq var => TermT var -> TermT var -> TypeCheck var ()+unifyTerms = unify Nothing++localTope :: Eq var => TermT var -> TypeCheck var a -> TypeCheck var a+localTope tope tc = do+ Context{..} <- ask+ tope' <- nfTope tope+ let modalTope' = plainTope tope'+ -- A small optimisation to help unify terms faster+ let refine = case tope' of+ TopeEQT _ x y | x == y -> const tc -- no new information added!+ _ | modalTope' `elem` localTopesNF -> const tc -- no new information added!+ | otherwise -> id+ refine $ do+ entailsBottom <- (modalTope' : localTopesNF) `entailM` topeBottomT+ local (f modalTope' entailsBottom) tc+ where+ f tope' entailsBottom Context{..} = Context+ { localTopes = plainTope tope : localTopes+ , localTopesNF = tope' : localTopesNF+ , localTopesNFUnion = map nubTermT+ [ new <> old+ | new <- simplifyLHSwithDisjunctions [tope']+ , old <- localTopesNFUnion ]+ , localTopesEntailBottom = Just entailsBottom+ , .. }++universeT :: TermT var+universeT = iterate f (panicImpossible msg) !! 30+ where+ msg = "going too high up the universe levels"+ f t = UniverseT TypeInfo+ { infoType = t+ , infoNF = Just universeT+ , infoWHNF = Just universeT }++cubeT :: TermT var+cubeT = UniverseCubeT TypeInfo+ { infoType = universeT+ , infoNF = Just cubeT+ , infoWHNF = Just cubeT }++topeT :: TermT var+topeT = UniverseTopeT TypeInfo+ { infoType = universeT+ , infoNF = Just topeT+ , infoWHNF = Just topeT }++topeEQT :: TermT var -> TermT var -> TermT var+topeEQT l r = TopeEQT info l r+ where+ info = TypeInfo+ { infoType = topeT+ , infoNF = Nothing+ , infoWHNF = Nothing+ }++topeLEQT :: TermT var -> TermT var -> TermT var+topeLEQT l r = TopeLEQT info l r+ where+ info = TypeInfo+ { infoType = topeT+ , infoNF = Nothing+ , infoWHNF = Nothing+ }++topeOrT :: TermT var -> TermT var -> TermT var+topeOrT l r = TopeOrT info l r+ where+ info = TypeInfo+ { infoType = topeT+ , infoNF = Nothing+ , infoWHNF = Nothing+ }++topeAndT :: TermT var -> TermT var -> TermT var+topeAndT l r = TopeAndT info l r+ where+ info = TypeInfo+ { infoType = topeT+ , infoNF = Nothing+ , infoWHNF = Nothing+ }++cubeProductT :: TermT var -> TermT var -> TermT var+cubeProductT l r = t+ where+ t = CubeProductT info l r+ info = TypeInfo+ { infoType = cubeT+ , infoNF = Nothing+ , infoWHNF = Nothing+ }++cubeUnitT :: TermT var+cubeUnitT = CubeUnitT TypeInfo+ { infoType = cubeT+ , infoNF = Just cubeUnitT+ , infoWHNF = Just cubeUnitT }++cubeUnitStarT :: TermT var+cubeUnitStarT = CubeUnitStarT TypeInfo+ { infoType = cubeUnitT+ , infoNF = Just cubeUnitStarT+ , infoWHNF = Just cubeUnitStarT }++typeUnitT :: TermT var+typeUnitT = TypeUnitT TypeInfo+ { infoType = universeT+ , infoNF = Just typeUnitT+ , infoWHNF = Just typeUnitT }++unitT :: TermT var+unitT = UnitT TypeInfo+ { infoType = typeUnitT+ , infoNF = Just unitT+ , infoWHNF = Just unitT }++cube2T :: TermT var+cube2T = Cube2T TypeInfo+ { infoType = cubeT+ , infoNF = Just cube2T+ , infoWHNF = Just cube2T }++cube2_0T :: TermT var+cube2_0T = Cube2_0T TypeInfo+ { infoType = cube2T+ , infoNF = Just cube2_0T+ , infoWHNF = Just cube2_0T }++cube2_1T :: TermT var+cube2_1T = Cube2_1T TypeInfo+ { infoType = cube2T+ , infoNF = Just cube2_1T+ , infoWHNF = Just cube2_1T }++cubeIT :: TermT var+cubeIT = CubeIT TypeInfo+ { infoType = cubeT+ , infoNF = Just cubeIT+ , infoWHNF = Just cubeIT }++cubeI_0T :: TermT var+cubeI_0T = CubeI_0T TypeInfo+ { infoType = cubeIT+ , infoNF = Just cubeI_0T+ , infoWHNF = Just cubeI_0T }++cubeI_1T :: TermT var+cubeI_1T = CubeI_1T TypeInfo+ { infoType = cubeIT+ , infoNF = Just cubeI_1T+ , infoWHNF = Just cubeI_1T }++cubeFlipT :: TermT var -> TermT var -> TermT var+cubeFlipT cubeTy t = CubeFlipT info t+ where+ info = TypeInfo+ { infoType = typeModalT cubeT Op cubeTy+ , infoNF = Nothing+ , infoWHNF = Nothing+ }++cubeUnflipT :: TermT var -> TermT var -> TermT var+cubeUnflipT cubeTy t = CubeUnflipT info t+ where+ info = TypeInfo+ { infoType = cubeTy+ , infoNF = Nothing+ , infoWHNF = Nothing+ }++topeInvT :: TermT var -> TermT var+topeInvT t = TopeInvT info t+ where+ info = TypeInfo+ { infoType = typeModalT universeT Op topeT+ , infoNF = Nothing+ , infoWHNF = Nothing+ }++topeUninvT :: TermT var -> TermT var+topeUninvT t = TopeUninvT info t+ where+ info = TypeInfo+ { infoType = topeT+ , infoNF = Nothing+ , infoWHNF = Nothing+ }++topeTopT :: TermT var+topeTopT = TopeTopT TypeInfo+ { infoType = topeT+ , infoNF = Just topeTopT+ , infoWHNF = Just topeTopT }++topeBottomT :: TermT var+topeBottomT = TopeBottomT TypeInfo+ { infoType = topeT+ , infoNF = Just topeBottomT+ , infoWHNF = Just topeBottomT }++recBottomT :: TermT var+recBottomT = RecBottomT TypeInfo+ { infoType = recBottomT+ , infoNF = Just recBottomT+ , infoWHNF = Just recBottomT }++typeRestrictedT :: TermT var -> [(TermT var, TermT var)] -> TermT var+typeRestrictedT ty rs = t+ where+ t = TypeRestrictedT info ty rs+ info = TypeInfo+ { infoType = universeT+ , infoNF = Nothing+ , infoWHNF = Nothing+ }++lambdaT+ :: TermT var+ -> Binder+ -> Maybe (TModality, TermT var, Maybe (Scope TermT var))+ -> Scope TermT var+ -> TermT var+lambdaT ty orig mparam body = t+ where+ t = LambdaT info orig mparam body+ info = TypeInfo+ { infoType = ty+ , infoNF = Nothing+ , infoWHNF = Just t+ }+++letT :: TermT var -> Binder -> Maybe (TermT var) -> TermT var -> Scope TermT var -> TermT var+letT ty orig mparam val body = t+ where+ t = LetT info orig mparam val body+ info = TypeInfo+ { infoType = ty+ , infoNF = Nothing+ , infoWHNF = Nothing+ }++letModT :: TermT var -> Binder -> TModality -> TModality -> Maybe (TermT var) -> TermT var -> Scope TermT var -> TermT var+letModT ty orig app inn mparam val body = t+ where+ t = LetModT info orig app inn mparam val body+ info = TypeInfo+ { infoType = ty+ , infoNF = Nothing+ , infoWHNF = Nothing+ }++appT :: TermT var -> TermT var -> TermT var -> TermT var+appT ty f x = t+ where+ t = AppT info f x+ info = TypeInfo+ { infoType = ty+ , infoNF = Nothing+ , infoWHNF = Nothing+ }++pairT :: TermT var -> TermT var -> TermT var -> TermT var+pairT ty l r = t+ where+ t = PairT info l r+ info = TypeInfo+ { infoType = ty+ , infoNF = Nothing+ , infoWHNF = Just t+ }++firstT :: TermT var -> TermT var -> TermT var+firstT ty arg = t+ where+ t = FirstT info arg+ info = TypeInfo+ { infoType = ty+ , infoNF = Nothing+ , infoWHNF = Nothing+ }++secondT :: TermT var -> TermT var -> TermT var+secondT ty arg = t+ where+ t = SecondT info arg+ info = TypeInfo+ { infoType = ty+ , infoNF = Nothing+ , infoWHNF = Nothing+ }++reflT+ :: TermT var+ -> Maybe (TermT var, Maybe (TermT var))+ -> TermT var+reflT ty mx = t+ where+ t = ReflT info mx+ info = TypeInfo+ { infoType = ty+ , infoNF = Just (ReflT info Nothing)+ , infoWHNF = Just (ReflT info Nothing)+ }++typeFunT+ :: Binder+ -> TModality+ -> TermT var+ -> Maybe (Scope TermT var)+ -> Scope TermT var+ -> TermT var+typeFunT orig md cube mtope ret = t+ where+ t = TypeFunT info orig md cube mtope ret+ info = TypeInfo+ { infoType = universeT+ , infoNF = Nothing+ , infoWHNF = Just t+ }++typeSigmaT+ :: Binder+ -> TModality+ -> TermT var+ -> Scope TermT var+ -> TermT var+typeSigmaT orig md a b = t+ where+ t = TypeSigmaT info orig md a b+ info = TypeInfo+ { infoType = universeT+ , infoNF = Nothing+ , infoWHNF = Just t+ }++recOrT+ :: TermT var+ -> [(TermT var, TermT var)]+ -> TermT var+recOrT ty rs = t+ where+ t = RecOrT info rs+ info = TypeInfo+ { infoType = ty+ , infoNF = Nothing+ , infoWHNF = Nothing+ }++typeIdT :: TermT var -> Maybe (TermT var) -> TermT var -> TermT var+typeIdT x tA y = t+ where+ t = TypeIdT info x tA y+ info = TypeInfo+ { infoType = universeT+ , infoNF = Nothing+ , infoWHNF = Just t+ }++idJT+ :: TermT var+ -> TermT var+ -> TermT var+ -> TermT var+ -> TermT var+ -> TermT var+ -> TermT var+ -> TermT var+idJT ty tA a tC d x p = t+ where+ t = IdJT info tA a tC d x p+ info = TypeInfo+ { infoType = ty+ , infoNF = Nothing+ , infoWHNF = Nothing+ }++typeAscT :: TermT var -> TermT var -> TermT var+typeAscT x ty = t+ where+ t = TypeAscT info x ty+ info = TypeInfo+ { infoType = ty+ , infoNF = Nothing+ , infoWHNF = Nothing+ }++typeModalT :: TermT var -> TModality -> TermT var -> TermT var+typeModalT ty md te = t+ where+ t = TypeModalT info md te+ info = TypeInfo+ { infoType = ty+ , infoNF = Nothing+ , infoWHNF = Nothing+ }++modAppT :: TermT var -> TModality -> TermT var -> TermT var+modAppT ty md term = t+ where+ t = ModAppT info md term+ info = TypeInfo+ { infoType = ty+ , infoNF = Nothing+ , infoWHNF = Nothing+ }++modExtractT :: TermT var -> TModality -> TModality -> TermT var -> TermT var+modExtractT ty app inn term = t+ where+ t = ModExtractT info app inn term+ info = TypeInfo+ { infoType = ty+ , infoNF = Nothing+ , infoWHNF = Nothing+ }++-- | Check a @recOR@ in checking position against a known expected type: each+-- branch is checked against that type under its guard tope, followed by the+-- usual pairwise coherence and the coverage obligation. Passing a /restricted/+-- type pushes the boundary into every branch, so a branch hole reports the+-- faces it must meet (under its tope) instead of the bare underlying type.+--+-- Under a branch guard, the faces belonging to the other (mutually exclusive)+-- branches become disjoint from this branch's tope context, so they are pruned+-- by 'pruneVacuousFaces' before the branch is checked. Otherwise a face like+-- @i ≡ 1₂@ would be reported as vacuous while checking the @i ≡ 0₂@ branch+-- against @A [i ≡ 0₂ ↦ a, i ≡ 1₂ ↦ b]@ — which arises in particular with+-- flat-discrete cube variables, where @i ≡ 0₂ ∧ i ≡ 1₂@ is provably ⊥.+checkRecOrAgainst :: Eq var => TermT var -> [(Term var, Term var)] -> TypeCheck var (TermT var)+checkRecOrAgainst expected rs = do+ rs' <- forM rs $ \(tope, rterm) -> do+ tope' <- typecheck tope topeT+ checkTopeAgainstContext "recOR branch guard" tope'+ localTope tope' $ do+ expected' <- pruneVacuousFaces expected+ rterm' <- typecheck rterm expected'+ return (tope', rterm')+ sequence_ [ checkCoherence l r | l:rs'' <- tails rs', r <- rs'' ]+ contextEntailsUnion (map fst rs')+ return (recOrT expected rs')++-- | Drop the restriction faces of an extension type that are vacuous in the+-- current tope context (their overlap with the context is the empty tope ⊥). A+-- face mentioning an unfilled hole cannot be decided, so it is kept. Non-extension+-- types are returned unchanged. Used when descending into a recOR branch, where+-- the sibling branches' faces are disjoint from the branch guard.+pruneVacuousFaces :: Eq var => TermT var -> TypeCheck var (TermT var)+pruneVacuousFaces (TypeRestrictedT _info ty rs) = do+ contextTopes <- asks localTopesNF+ kept <- fmap concat $ forM rs $ \face@(tope, _) -> do+ vacuous <- if containsHole tope+ then return False+ else (plainTope tope : contextTopes) `entailM` topeBottomT+ return [ face | not vacuous ]+ return $ case kept of+ [] -> ty+ _ -> typeRestrictedT ty kept+pruneVacuousFaces ty = return ty++typecheck :: Eq var => Term var -> TermT var -> TypeCheck var (TermT var)+typecheck term ty = performing (ActionTypeCheck term ty) $ case term of+ -- A hole is checked against a known type (this is checking position): in+ -- strict mode it is reported as an unsolved hole; in lenient mode its goal+ -- and context are recorded and it is treated as inhabiting the expected type.+ Hole mname -> do+ reject <- asks holesAreErrors+ if reject+ then issueTypeError (TypeErrorUnsolvedHole mname ty)+ else do+ recordHole mname ty+ return (HoleT TypeInfo{ infoType = ty, infoWHNF = Nothing, infoNF = Nothing } mname)++ _ -> whnfT ty >>= \case++ RecBottomT{} -> do+ -- Even under an absurd tope context (where the expected type collapses to+ -- recBOT), the term must still be well-formed in its own right, so that+ -- ill-typed bodies are not silently admitted under a false hypothesis. We+ -- synthesise its type, discard the result, and keep the recBOT elaboration.+ _ <- infer term+ return recBottomT++ tr@(TypeRestrictedT _ty ty' rs) -> case term of+ -- A recOR against a restricted type: push the restriction into each branch+ -- instead of stripping it first, so a branch hole reports the boundary+ -- faces it must satisfy under its guard tope, rather than the bare+ -- underlying type. Concrete branches still meet the faces, which are+ -- checked on each branch's overlap with them (see the general case below).+ RecOr branches -> checkRecOrAgainst tr branches+ _ -> do+ term' <- typecheck term ty'+ -- NOTE: restriction faces need not be contained in the local tope context.+ -- Each face is checked only on its overlap with the context below, so an+ -- overhanging face is harmless (we only hint); a face disjoint from the context+ -- is vacuous, however, and is reported as an error by checkTopeAgainstContext.+ forM_ rs $ \(tope, rterm) -> do+ checkTopeAgainstContext "restriction face" tope+ localTope tope $+ unifyTerms rterm term'+ return term' -- FIXME: correct?++ ty' -> case term of+ Lambda orig mparam body ->+ case ty' of+ TypeFunT _ty _orig' md' param' mtope' ret -> do+ case mparam of+ Nothing -> return ()+ Just (md, param, Nothing) -> do+ when (md /= md') $+ issueTypeError (TypeErrorModalityMismatch md' md term)+ (paramType, mtope) <- do+ paramType <- enterModality md $ infer param+ typeOf paramType >>= \case+ -- an argument can be a shape+ TypeFunT _ty _orig _md cube _mtope UniverseTopeT{} -> do+ mapM_ checkNameShadowing (binderLeaves orig)+ enterScope orig md cube $ do+ let tope' = appT topeT (S <$> paramType) (Pure Z) -- eta expand ty'+ return (cube, Just tope')+ _kind -> return (paramType, Nothing)+ unifyTerms param' paramType+ mapM_ checkNameShadowing (binderLeaves orig)+ enterScope orig md param' $ do+ mapM_ (unifyTerms (fromMaybe topeTopT mtope')) mtope+ Just (md, param, mtope) -> do+ when (md /= md') $+ issueTypeError (TypeErrorModalityMismatch md' md term)+ param'' <- enterModality md $ typecheck param =<< typeOf param'+ unifyTerms param' param''+ mapM_ checkNameShadowing (binderLeaves orig)+ enterScope orig md param' $ do+ mtope'' <- typecheck (fromMaybe TopeTop mtope) topeT+ unifyTerms (fromMaybe topeTopT mtope') mtope''++ mapM_ checkNameShadowing (binderLeaves orig)+ enterScope orig md' param' $ do+ maybe id localTope mtope' $ do+ body' <- typecheck body ret+ return (lambdaT ty' orig (Just (md', param', mtope')) body')++ _ -> issueTypeError $ TypeErrorUnexpectedLambda term ty+ Let orig annot val body -> do+ val' <- performing (ActionCheckLetValue (binderName orig)) $ case annot of+ Nothing -> infer val+ Just bindType -> do+ bindType' <- typecheck bindType universeT+ typecheck val bindType'+ bindTy <- typeOf val'+ body' <- enterScopeWithBind orig Id bindTy val' $ do+ typecheck body (S <$> ty')+ return (letT ty' orig (Just bindTy) val' body')+ LetMod orig app inn annot val body -> do+ val' <- performing (ActionCheckLetValue (binderName orig)) $ case annot of+ Nothing -> enterModality app $ infer val+ Just bindType -> do+ bindType' <- infer bindType+ bindUniv <- typeOf bindType'+ enterModality app $ typecheck val (typeModalT bindUniv inn bindType')+ bindTy <- typeOf val' >>= \case+ o@(TypeModalT _ty md t) ->+ if md == inn then+ return t+ else+ issueTypeError $ TypeErrorNotModal (untyped o) inn val'+ o -> issueTypeError $ TypeErrorNotModal (untyped o) inn val'+ bindVal <- whnfT val' >>= \case+ ModAppT _ty _m t -> pure (Just t)+ o | isRA inn -> pure (Just (modExtractT bindTy app inn o))+ _ -> pure Nothing+ body' <- enterScopeMaybe orig (comp app inn) bindTy bindVal $ do+ typecheck body (S <$> ty')+ return (letModT ty' orig app inn (Just bindTy) val' body')+ Pair l r ->+ case ty' of+ CubeProductT _ty a b -> do+ l' <- typecheck l a+ r' <- typecheck r b+ return (pairT ty' l' r')+ TypeSigmaT _ty _orig md a b -> do+ l' <- enterModality md $ typecheck l a+ r' <- typecheck r (substituteT l' b)+ return (pairT ty' l' r')+ _ -> issueTypeError $ TypeErrorUnexpectedPair term ty++ Refl mx ->+ case ty' of+ TypeIdT _ty y _tA z -> do+ tA <- typeOf y+ forM_ mx $ \(x, mxty) -> do+ forM_ mxty $ \xty -> do+ xty' <- typecheck xty universeT+ unifyTerms tA xty'+ x' <- typecheck x tA+ unifyTerms x' y >> unifyTerms y x'+ unifyTerms x' z >> unifyTerms z x'+ when (isNothing mx) $+ unifyTerms y z >> unifyTerms z y+ return (reflT ty' (Just (y, Just tA)))+ _ -> issueTypeError $ TypeErrorUnexpectedRefl term ty+ ModExtract{} -> panicImpossible "extract is an internal term and cannot be typechecked"+ ModApp md body -> case ty' of+ TypeModalT _ty md' tpe -> do+ when (md /= md') $ issueTypeError $+ TypeErrorModalityMismatch md' md term+ body' <- enterModality md $ typecheck body tpe+ return $ modAppT ty' md body'+ _ -> issueTypeError $ TypeErrorNotModal term md ty'++ -- In checking position the common type is already known, so we push it+ -- into every branch instead of inferring each one and unifying. This is+ -- what lets a bare hole branch (recOR(φ ↦ ?, …)) be checked against the+ -- expected type and recorded, rather than hitting TypeErrorCannotInferHole+ -- via the inference rule. The branch-guard, coherence, and coverage+ -- obligations mirror the inference rule (see the RecOr case of 'infer').+ -- A recOR is a term-level eliminator, not a tope; rejecting it when it is+ -- checked against the tope universe (e.g. in another recOR's branch guard)+ -- keeps it out of the tope layer, where it would otherwise hit a panic.+ RecOr rs -> case ty' of+ UniverseTopeT{} -> issueTypeError $+ TypeErrorOther "a recOR cannot be used as a tope"+ _ -> checkRecOrAgainst ty' rs+ -- A neutral term is inferred, then its type unified with the expected+ -- one. In lenient (hole-checking) mode a term that still carries an+ -- unfilled hole is a work in progress, so a failure of that final+ -- unification is tolerated: the holes recorded while inferring the term+ -- stand (they were committed before this point), and we accept the term+ -- rather than rejecting the whole sketch. The mismatch is typically+ -- incidental to the missing pieces — e.g. an extension-type boundary face+ -- that only fails to line up because an argument hole sits in the wrong+ -- place (`f t` vs `x`), where neither side is itself a hole, so the+ -- per-term deferral in 'unifyInCurrentContext' cannot see it. Strict mode+ -- (the default, and CI) still rejects the mismatch.+ _ -> do+ term' <- infer term+ inferredType <- typeOf term'+ lenient <- not <$> asks holesAreErrors+ if lenient && containsHole term'+ then unifyTypes term' ty' inferredType `catchError` \_ -> return ()+ else unifyTypes term' ty' inferredType+ return term'++inferAs :: Eq var => TermT var -> Term var -> TypeCheck var (TermT var)+inferAs expectedKind term = do+ term' <- infer term+ ty <- typeOf term'+ kind <- typeOf ty+ unifyTypes ty expectedKind kind+ return term'++infer :: Eq var => Term var -> TypeCheck var (TermT var)+infer tt = performing (ActionInfer tt) $ case tt of+ Hole _mname -> issueTypeError (TypeErrorCannotInferHole tt)+ Pure x -> do+ topLevel <- isTopLevelVar x+ unless topLevel $ do+ varMod <- modalityOfVar x+ locks <- locksOfVar x+ when (not (coe varMod locks)) $ issueTypeError $ TypeErrorUnaccessibleVar x varMod locks+ pure (Pure x)++ Universe -> pure universeT+ UniverseCube -> pure cubeT+ UniverseTope -> pure topeT++ CubeUnit -> pure cubeUnitT+ CubeUnitStar -> pure cubeUnitStarT++ Cube2 -> pure cube2T+ Cube2_0 -> pure cube2_0T+ Cube2_1 -> pure cube2_1T++ CubeI -> pure cubeIT+ CubeI_0 -> pure cubeI_0T+ CubeI_1 -> pure cubeI_1T+ CubeProduct l r -> do+ l' <- typecheck l cubeT+ r' <- typecheck r cubeT+ return (cubeProductT l' r')++ CubeFlip t -> do+ t' <- infer t+ typeOf t' >>= \case+ CubeIT{} -> pure $ cubeFlipT cubeIT t'+ Cube2T{} -> pure $ cubeFlipT cube2T t'+ ty -> do+ tyStr <- ppTermInContext ty+ issueTypeError $ TypeErrorOther $+ "flip expects an interval cube (2 or 𝕀); got " <> tyStr+ CubeUnflip t -> do+ t' <- infer t+ typeOf t' >>= \case+ TypeModalT _ Op (CubeIT{}) -> pure $ cubeUnflipT cubeIT t'+ TypeModalT _ Op (Cube2T{}) -> pure $ cubeUnflipT cube2T t'+ ty -> do+ tyStr <- ppTermInContext ty+ issueTypeError $ TypeErrorOther $+ "unflip expects an interval cube (2 or 𝕀) under _op; got " <> tyStr+ Pair l r -> do+ l' <- infer l+ r' <- infer r+ lt <- typeOf l'+ rt <- typeOf r'+ typeOf lt >>= \case+ -- Γ ⊢ l ⇒ (I : CUBE)+ -- Γ ⊢ r ⇒ (J : CUBE)+ -- ———————————————————————————+ -- Γ ⊢ (l, r) ⇒ (I × J : CUBE)+ UniverseCubeT{} -> return (pairT (cubeProductT lt rt) l' r')+ -- Γ ⊢ l ⇒ (A : U)+ -- Γ ⊢ r ⇒ (B : U)+ -- ———————————————————————————+ -- Γ ⊢ (l, r) ⇒ (A × B : U) where A × B = Σ (_ : A), B+ _ -> do+ -- NOTE: infer as a non-dependent pair!+ return (pairT (typeSigmaT (BinderVar Nothing) Id lt (S <$> rt)) l' r')++ First t -> do+ t' <- infer t+ fmap stripTypeRestrictions (typeOf t') >>= \case+ RecBottomT{} -> pure recBottomT -- FIXME: is this ok?+ TypeSigmaT _ty _orig _md lt _rt ->+ return (firstT lt t')+ CubeProductT _ty l _r ->+ return (firstT l t')+ ty -> issueTypeError $ TypeErrorNotPair t' ty++ Second t -> do+ t' <- infer t+ fmap stripTypeRestrictions (typeOf t') >>= \case+ RecBottomT{} -> pure recBottomT -- FIXME: is this ok?+ TypeSigmaT _ty _orig _md lt rt ->+ return (secondT (substituteT (firstT lt t') rt) t')+ CubeProductT _ty _l r ->+ return (secondT r t')+ ty -> issueTypeError $ TypeErrorNotPair t' ty++ TypeUnit -> pure typeUnitT+ Unit -> pure unitT++ TopeTop -> pure topeTopT+ TopeBottom -> pure topeBottomT++ TopeEQ l r -> do+ l' <- inferAs cubeT l+ lt <- typeOf l'+ r' <- typecheck r lt+ return (topeEQT l' r')++ TopeLEQ l r -> do+ l' <- inferAs cubeT l+ r' <- inferAs cubeT r+ lTy <- typeOf l'+ rTy <- typeOf r'+ case (lTy, rTy) of+ (Cube2T{}, Cube2T{}) -> return (topeLEQT l' r')+ (CubeIT{}, CubeIT{}) -> return (topeLEQT l' r')+ (CubeIT{}, Cube2T{}) -> do+ r'' <- typecheck r cubeIT+ return (topeLEQT l' r'')+ (Cube2T{}, CubeIT{}) -> do+ l'' <- typecheck l cubeIT+ return (topeLEQT l'' r')+ _ -> do+ lStr <- ppTermInContext lTy+ rStr <- ppTermInContext rTy+ issueTypeError $ TypeErrorOther $+ "the (t ≤ s) tope expects points in interval cubes (2 or 𝕀); got "+ <> lStr <> " and " <> rStr++ TopeAnd l r -> do+ l' <- typecheck l topeT+ r' <- typecheck r topeT+ return (topeAndT l' r')++ TopeOr l r -> do+ l' <- typecheck l topeT+ r' <- typecheck r topeT+ return (topeOrT l' r')++ TopeInv t -> do+ t' <- typecheck t topeT+ return (topeInvT t')++ TopeUninv t -> do+ t' <- typecheck t (typeModalT universeT Op topeT )+ return (topeUninvT t')++ RecBottom -> do+ contextEntails topeBottomT+ return recBottomT++ -- Γ ⊢ t ⇒ (T : K)+ -- Γ ⊢ K ≡ U+ -- —————————————+ -- Γ ⊢ t ⇒ T ⇐ U++ RecOr rs -> do+ ttts <- forM rs $ \(tope, term) -> do+ tope' <- typecheck tope topeT+ -- NOTE: branch guards need not be contained in the context. recOR requires+ -- only coverage (context |- OR(guards)), enforced by contextEntailsUnion below;+ -- a guard may overhang the context (e.g. when splitting with a named shape).+ -- checkTopeAgainstContext warns on overhang and errors only if the guard is+ -- disjoint from the context (a vacuous branch).+ checkTopeAgainstContext "recOR branch guard" tope'+ localTope tope' $ do+ term' <- inferAs universeT term+ ty <- typeOf term'+ return (tope', (term', ty))+ let rs' = map (fmap fst) ttts+ ts = map (fmap snd) ttts+ sequence_ [ checkCoherence l r | l:rs'' <- tails rs', r <- rs'' ]+ contextEntailsUnion (map fst ttts)+ return (recOrT (recOrT universeT ts) rs')++ TypeFun orig md a Nothing b -> do+ a' <- enterModality md $ infer a+ typeOf a' >>= \case+ -- an argument can be a type+ UniverseT{} ->+ case a' of+ -- except if its a TOPE universe+ UniverseTopeT{} ->+ issueTypeError $ TypeErrorOther "tope params are illegal"+ _ -> do+ mapM_ checkNameShadowing (binderLeaves orig)+ b' <- enterScope orig md a' $ typecheck b universeT+ return (typeFunT orig md a' Nothing b')+ -- an argument can be a cube+ UniverseCubeT{} -> do+ mapM_ checkNameShadowing (binderLeaves orig)+ b' <- enterScope orig md a' $ typecheck b universeT+ return (typeFunT orig md a' Nothing b')+ -- an argument can be a shape+ TypeFunT _ty _orig _md cube mtope UniverseTopeT{} -> do+ mapM_ checkNameShadowing (binderLeaves orig)+ enterScope orig md cube $ do+ let tope' = appT topeT (S <$> a') (Pure Z) -- eta expand a'+ localTope tope' $ do+ b' <- typecheck b universeT+ case mtope of+ Nothing -> return (typeFunT orig md cube (Just tope') b')+ Just tope'' -> return (typeFunT orig md cube (Just (topeAndT tope'' tope')) b')+ ty -> issueTypeError $ TypeErrorInvalidArgumentType a ty++ TypeFun orig md cube (Just tope) ret -> do+ cube' <- enterModality md $ typecheck cube cubeT+ mapM_ checkNameShadowing (binderLeaves orig)+ enterScope orig md cube' $ do+ tope' <- typecheck tope topeT+ localTope tope' $ do+ ret' <- typecheck ret universeT+ return (typeFunT orig md cube' (Just tope') ret')++ TypeSigma orig md a b -> do+ a' <- enterModality md $ typecheck a universeT+ mapM_ checkNameShadowing (binderLeaves orig)+ b' <- enterScope orig md a' $ typecheck b universeT+ return (typeSigmaT orig md a' b')++ TypeId x (Just tA) y -> do+ tA' <- typecheck tA universeT+ x' <- typecheck x tA'+ y' <- typecheck y tA'+ return (typeIdT x' (Just tA') y')++ TypeId x Nothing y -> do+ x' <- inferAs universeT x+ tA <- typeOf x'+ y' <- typecheck y tA+ return (typeIdT x' (Just tA) y')++ App f x -> do+ f' <- inferAs universeT f+ fmap stripTypeRestrictions (typeOf f') >>= \case+ TypeFunT _ty orig md a mtope b -> do+ -- A hole argument to a shape-restricted function carries the shape as+ -- its goal: record (binder : a | tope) rather than just the cube a.+ x' <- enterModality md $ case (x, mtope) of+ (Hole mname, Just tope) -> checkHoleAgainstShape mname orig a tope+ _ -> typecheck x a+ let result = appT (substituteT x' b) f' x'+ case b of+ UniverseTopeT{} -> do+ case mtope of+ Nothing -> return result+ Just tope -> do+ return (topeAndT (substituteT x' tope) result)+ _ -> do+ mapM_ (contextEntails . substituteT x') mtope -- FIXME: need to check?+ return result+ ty -> issueTypeError $ TypeErrorNotFunction f' ty++ Lambda _orig Nothing _body -> do+ issueTypeError $ TypeErrorCannotInferBareLambda tt+ Lambda orig (Just (md, ty, Nothing)) body -> do+ ty' <- enterModality md $ infer ty+ mtope <- typeOf ty' >>= \case+ -- an argument can be a type+ UniverseT{} ->+ case ty' of+ -- except if its a TOPE universe+ UniverseTopeT{} ->+ issueTypeError $ TypeErrorOther "tope params are illegal"+ _ -> return Nothing+ -- an argument can be a cube+ UniverseCubeT{} -> return Nothing+ -- an argument can be a shape+ TypeFunT _ty _orig _md cube _mtope UniverseTopeT{} -> do+ mapM_ checkNameShadowing (binderLeaves orig)+ enterScope orig md cube $ do+ let tope' = appT topeT (S <$> ty') (Pure Z) -- eta expand ty'+ return (Just tope')+ kind -> issueTypeError $ TypeErrorInvalidArgumentType ty kind+ mapM_ checkNameShadowing (binderLeaves orig)+ enterScope orig md ty' $ do+ maybe id localTope mtope $ do+ body' <- infer body+ ret <- typeOf body'+ return (lambdaT (typeFunT orig md ty' mtope ret) orig (Just (md, ty', mtope)) body')+ Lambda orig (Just (md, cube, Just tope)) body -> do+ cube' <- enterModality md $ typecheck cube cubeT+ mapM_ checkNameShadowing (binderLeaves orig)+ enterScope orig md cube' $ do+ tope' <- infer tope+ body' <- localTope tope' $ infer body+ ret <- typeOf body'+ return (lambdaT (typeFunT orig md cube' (Just tope') ret) orig (Just (md, cube', Just tope')) body')+ Let orig annot val body -> do+ val' <- performing (ActionCheckLetValue (binderName orig)) $ case annot of+ Nothing -> infer val+ Just ty -> do+ bindTy <- typecheck ty universeT+ typecheck val bindTy+ bindTy <- typeOf val'+ enterScopeWithBind orig Id bindTy val' $ do+ body' <- infer body+ ret <- typeOf body'+ return (letT (substituteT val' ret) orig (Just bindTy) val' body')+ LetMod orig app inn annot val body -> do+ val' <- performing (ActionCheckLetValue (binderName orig)) $ case annot of+ Nothing -> enterModality app $ infer val+ Just bindType -> do+ bindType' <- infer bindType+ bindUniv <- typeOf bindType'+ enterModality app $ typecheck val (typeModalT bindUniv inn bindType')+ bindTy <- typeOf val' >>= \case+ o@(TypeModalT _ty md t) ->+ if md == inn then+ return t+ else+ issueTypeError $ TypeErrorNotModal (untyped o) inn val'+ o -> issueTypeError $ TypeErrorNotModal (untyped o) inn val'+ bindVal <- whnfT val' >>= \case+ ModAppT _ty _m t -> pure (Just t)+ o | isRA inn -> pure (Just (modExtractT bindTy app inn o))+ _ -> pure Nothing+ enterScopeMaybe orig (comp app inn) bindTy bindVal $ do+ body' <- infer body+ ret <- typeOf body'+ return (letModT (substituteT val' ret) orig app inn (Just bindTy) val' body')+ Refl Nothing -> issueTypeError $ TypeErrorCannotInferBareRefl tt+ Refl (Just (x, Nothing)) -> do+ x' <- inferAs universeT x+ ty <- typeOf x'+ return (reflT (typeIdT x' (Just ty) x') (Just (x', Just ty)))+ Refl (Just (x, Just ty)) -> do+ ty' <- typecheck ty universeT+ x' <- typecheck x ty'+ return (reflT (typeIdT x' (Just ty') x') (Just (x', Just ty')))++ IdJ tA a tC d x p -> do+ tA' <- typecheck tA universeT+ a' <- typecheck a tA'+ let typeOf_C =+ typeFunT (BinderVar Nothing) Id tA' Nothing $+ typeFunT (BinderVar Nothing) Id (typeIdT (S <$> a') (Just (S <$> tA')) (Pure Z)) Nothing $+ universeT+ tC' <- typecheck tC typeOf_C+ let typeOf_d =+ appT universeT+ (appT (typeFunT (BinderVar Nothing) Id (typeIdT a' (Just tA') a') Nothing universeT)+ tC' a')+ (reflT (typeIdT a' (Just tA') a') Nothing)+ d' <- typecheck d typeOf_d+ x' <- typecheck x tA'+ p' <- typecheck p (typeIdT a' (Just tA') x')+ let ret =+ appT universeT+ (appT (typeFunT (BinderVar Nothing) Id (typeIdT a' (Just tA') x') Nothing universeT)+ tC' x')+ p'+ return (idJT ret tA' a' tC' d' x' p')++ TypeAsc term ty -> do+ ty' <- inferAs universeT ty -- this works on types AND cubes+ term' <- typecheck term ty'+ return (typeAscT term' ty')++ TypeRestricted ty rs -> do+ ty' <- typecheck ty universeT+ rs' <- forM rs $ \(tope, term) -> do+ tope' <- typecheck tope topeT+ term' <- localTope tope' $ typecheck term ty'+ return (tope', term')+ sequence_ [ checkCoherence l r | l:rs'' <- tails rs', r <- rs'' ]+ return (typeRestrictedT ty' rs')+ TypeModal md ty -> do+ ty' <- enterModality md $ infer ty+ universeTy <- typeOf ty'+ _ <- case universeTy of+ UniverseT {} -> pure universeTy+ UniverseCubeT {} -> pure universeTy+ UniverseTopeT {} -> pure universeTy+ _ -> issueTypeError $ TypeErrorNotTypeInModal universeTy+ return (typeModalT universeTy md ty')+ ModApp md term -> do+ term' <- enterModality md $ infer term+ ty <- typeOf term'+ tyUniv <- typeOf ty+ return $ modAppT (typeModalT tyUniv md ty) md term'+ ModExtract _ _ _ -> error "untypable $extract$"++checkCoherence+ :: Eq var+ => (TermT var, TermT var)+ -> (TermT var, TermT var)+ -> TypeCheck var ()+checkCoherence (ltope, lterm) (rtope, rterm) =+ performing (ActionCheckCoherence (ltope, lterm) (rtope, rterm)) $ do+ localTope (topeAndT ltope rtope) $ do+ ltype <- stripTypeRestrictions <$> typeOf lterm -- FIXME: why strip?+ rtype <- stripTypeRestrictions <$> typeOf rterm -- FIXME: why strip?+ -- FIXME: do we need to unify types here or is it included in unification of terms?+ unifyTerms ltype rtype+ unifyTerms lterm rterm++inferStandalone :: Eq var => Term var -> Either (TypeErrorInScopedContext var) (TermT var)+inferStandalone term = defaultTypeCheck (infer term)++unsafeInferStandalone' :: Term' -> TermT'+unsafeInferStandalone' term = unsafeTypeCheck' (infer term)++unsafeTypeCheck' :: TypeCheck VarIdent a -> a+unsafeTypeCheck' tc =+ case defaultTypeCheck tc of+ Left err -> error $ ppTypeErrorInScopedContext' BottomUp err+ Right result -> result++type PointId = String+type ShapeId = [PointId]++cube2powerT :: Int -> TermT var+cube2powerT 1 = cube2T+cube2powerT dim = cubeProductT (cube2powerT (dim - 1)) cube2T++splits :: [a] -> [([a], [a])]+splits [] = [([], [])]+splits (x:xs) = ([], x:xs) : [ (x : before, after) | (before, after) <- splits xs ]++verticesFrom :: [TermT var] -> [(ShapeId, TermT var)]+verticesFrom ts = combine <$> mapM mk ts+ where+ mk t = [("0", topeEQT t cube2_0T), ("1", topeEQT t cube2_1T)]+ combine xs = ([concat (map fst xs)], foldr1 topeAndT (map snd xs))++subTopes2 :: Int -> TermT var -> [(ShapeId, TermT var)]+-- 1-dim+subTopes2 1 t =+ [ (words "0", topeEQT t cube2_0T)+ , (words "1", topeEQT t cube2_1T)+ , (words "0 1", topeTopT) ]+-- 2-dim+subTopes2 2 ts =+ -- vertices+ [ (words "00", topeEQT t cube2_0T `topeAndT` topeEQT s cube2_0T)+ , (words "01", topeEQT t cube2_0T `topeAndT` topeEQT s cube2_1T)+ , (words "10", topeEQT t cube2_1T `topeAndT` topeEQT s cube2_0T)+ , (words "11", topeEQT t cube2_1T `topeAndT` topeEQT s cube2_1T)+ -- edges and the diagonal+ , (words "00 01", topeEQT t cube2_0T)+ , (words "10 11", topeEQT t cube2_1T)+ , (words "00 10", topeEQT s cube2_0T)+ , (words "01 11", topeEQT s cube2_1T)+ , (words "00 11", topeEQT s t)+ -- triangles+ , (words "00 01 11", topeLEQT t s)+ , (words "00 10 11", topeLEQT s t)+ ]+ where+ t = firstT cube2T ts+ s = secondT cube2T ts+-- 3-dim+subTopes2 3 t =+ -- vertices+ [ (words "000", topeEQT t1 cube2_0T `topeAndT` topeEQT t2 cube2_0T `topeAndT` topeEQT t3 cube2_0T)+ , (words "001", topeEQT t1 cube2_0T `topeAndT` topeEQT t2 cube2_0T `topeAndT` topeEQT t3 cube2_1T)+ , (words "010", topeEQT t1 cube2_0T `topeAndT` topeEQT t2 cube2_1T `topeAndT` topeEQT t3 cube2_0T)+ , (words "011", topeEQT t1 cube2_0T `topeAndT` topeEQT t2 cube2_1T `topeAndT` topeEQT t3 cube2_1T)+ , (words "100", topeEQT t1 cube2_1T `topeAndT` topeEQT t2 cube2_0T `topeAndT` topeEQT t3 cube2_0T)+ , (words "101", topeEQT t1 cube2_1T `topeAndT` topeEQT t2 cube2_0T `topeAndT` topeEQT t3 cube2_1T)+ , (words "110", topeEQT t1 cube2_1T `topeAndT` topeEQT t2 cube2_1T `topeAndT` topeEQT t3 cube2_0T)+ , (words "111", topeEQT t1 cube2_1T `topeAndT` topeEQT t2 cube2_1T `topeAndT` topeEQT t3 cube2_1T)+ -- edges+ , (words "000 001", topeEQT t1 cube2_0T `topeAndT` topeEQT t2 cube2_0T)+ , (words "010 011", topeEQT t1 cube2_0T `topeAndT` topeEQT t2 cube2_1T)+ , (words "000 010", topeEQT t1 cube2_0T `topeAndT` topeEQT t3 cube2_0T)+ , (words "001 011", topeEQT t1 cube2_0T `topeAndT` topeEQT t3 cube2_1T)+ , (words "100 101", topeEQT t1 cube2_1T `topeAndT` topeEQT t2 cube2_0T)+ , (words "110 111", topeEQT t1 cube2_1T `topeAndT` topeEQT t2 cube2_1T)+ , (words "100 110", topeEQT t1 cube2_1T `topeAndT` topeEQT t3 cube2_0T)+ , (words "101 111", topeEQT t1 cube2_1T `topeAndT` topeEQT t3 cube2_1T)+ , (words "000 100", topeEQT t2 cube2_0T `topeAndT` topeEQT t3 cube2_0T)+ , (words "001 101", topeEQT t2 cube2_0T `topeAndT` topeEQT t3 cube2_1T)+ , (words "010 110", topeEQT t2 cube2_1T `topeAndT` topeEQT t3 cube2_0T)+ , (words "011 111", topeEQT t2 cube2_1T `topeAndT` topeEQT t3 cube2_1T)+ -- face diagonals+ , (words "000 011", topeEQT t1 cube2_0T `topeAndT` topeEQT t2 t3)+ , (words "100 111", topeEQT t1 cube2_1T `topeAndT` topeEQT t2 t3)+ , (words "000 101", topeEQT t2 cube2_0T `topeAndT` topeEQT t1 t3)+ , (words "010 111", topeEQT t2 cube2_1T `topeAndT` topeEQT t1 t3)+ , (words "000 110", topeEQT t3 cube2_0T `topeAndT` topeEQT t1 t2)+ , (words "001 111", topeEQT t3 cube2_1T `topeAndT` topeEQT t1 t2)+ -- the long diagonal+ , (words "000 111", topeEQT t3 t2 `topeAndT` topeEQT t2 t1)+ -- face triangles+ , (words "000 001 011", topeEQT t1 cube2_0T `topeAndT` topeLEQT t2 t3)+ , (words "000 010 011", topeEQT t1 cube2_0T `topeAndT` topeLEQT t3 t2)+ , (words "100 101 111", topeEQT t1 cube2_1T `topeAndT` topeLEQT t2 t3)+ , (words "100 110 111", topeEQT t1 cube2_1T `topeAndT` topeLEQT t3 t2)+ , (words "000 001 101", topeEQT t2 cube2_0T `topeAndT` topeLEQT t1 t3)+ , (words "000 100 101", topeEQT t2 cube2_0T `topeAndT` topeLEQT t3 t1)+ , (words "010 011 111", topeEQT t2 cube2_1T `topeAndT` topeLEQT t1 t3)+ , (words "010 110 111", topeEQT t2 cube2_1T `topeAndT` topeLEQT t3 t1)+ , (words "000 010 110", topeEQT t3 cube2_0T `topeAndT` topeLEQT t1 t2)+ , (words "000 100 110", topeEQT t3 cube2_0T `topeAndT` topeLEQT t2 t1)+ , (words "001 011 111", topeEQT t3 cube2_1T `topeAndT` topeLEQT t1 t2)+ , (words "001 101 111", topeEQT t3 cube2_1T `topeAndT` topeLEQT t2 t1)+ -- diagonal triangles+ , (words "000 001 111", topeEQT t1 t2 `topeAndT` topeLEQT t2 t3)+ , (words "000 010 111", topeEQT t1 t3 `topeAndT` topeLEQT t1 t2)+ , (words "000 100 111", topeEQT t2 t3 `topeAndT` topeLEQT t2 t1)+ , (words "000 011 111", topeLEQT t1 t2 `topeAndT` topeEQT t2 t3)+ , (words "000 101 111", topeLEQT t2 t1 `topeAndT` topeEQT t1 t3)+ , (words "000 110 111", topeLEQT t3 t1 `topeAndT` topeEQT t1 t2)+ -- tetrahedra+ , (words "000 001 011 111", topeLEQT t1 t2 `topeAndT` topeLEQT t2 t3)+ , (words "000 010 011 111", topeLEQT t1 t3 `topeAndT` topeLEQT t3 t2)+ , (words "000 001 101 111", topeLEQT t2 t1 `topeAndT` topeLEQT t1 t3)+ , (words "000 100 101 111", topeLEQT t2 t3 `topeAndT` topeLEQT t3 t1)+ , (words "000 010 110 111", topeLEQT t3 t1 `topeAndT` topeLEQT t1 t2)+ , (words "000 100 110 111", topeLEQT t3 t2 `topeAndT` topeLEQT t2 t1)+ ]+ where+ t1 = firstT cube2T (firstT (cube2powerT 2) t)+ t2 = secondT cube2T (firstT (cube2powerT 2) t)+ t3 = secondT cube2T t+subTopes2 dim _ = error (show dim <> " dimensions are not supported")++cubeSubTopes :: [(ShapeId, TermT (Inc var))]+cubeSubTopes = subTopes2 3 (Pure Z)++limitLength :: Int -> String -> String+limitLength n s+ | length s > n = take (n - 1) s <> "…"+ | otherwise = s++-- | Apply the 'renderHideTerm' policy to a cell's render data: drop the+-- @\<title\>@ (the full term) from every cell, and blank the visible label of a+-- proof-coloured (interior) cell. Boundary cells (coloured otherwise) keep+-- their given labels. A no-op when not hiding.+hideTermData :: Bool -> String -> RenderObjectData -> RenderObjectData+hideTermData False _ d = d+hideTermData True mainColor d+ | renderObjectDataColor d == mainColor =+ d { renderObjectDataLabel = "", renderObjectDataFullLabel = "" }+ | otherwise = d { renderObjectDataFullLabel = "" }++renderObjectsFor+ :: Eq var+ => String+ -> Int+ -> TermT var+ -> TermT var+ -> TypeCheck var [(ShapeId, RenderObjectData)]+renderObjectsFor mainColor dim t term = fmap catMaybes $ do+ forM (subTopes2 dim t) $ \(shapeId, tope) -> do+ checkTopeEntails tope >>= \case+ False -> return Nothing+ True -> typeOf term >>= \case+ UniverseTopeT{} -> localTope term $ checkTopeEntails tope >>= \case+ False -> return Nothing+ True -> return $ Just (shapeId, RenderObjectData+ { renderObjectDataLabel = ""+ , renderObjectDataFullLabel = ""+ , renderObjectDataColor = "orange" -- FIXME: orange for topes?+ })+ _ -> do+ origs <- asks varOrigs+ term' <- localTope tope $ whnfT term+ label <-+ case term' of+ AppT _ (Pure z) arg+ | Just (Just "_") <- lookup z origs -> return ""+ | null (nub (freeVars (untyped arg)) \\ nub (freeVars (untyped t))) ->+ ppTermInContext (Pure z)+ _ -> ppTermInContext term'+ hide <- asks renderHideTerm+ return $ Just (shapeId, hideTermData hide mainColor RenderObjectData+ { renderObjectDataLabel = label+ , renderObjectDataFullLabel = label+ , renderObjectDataColor =+ case term' of+ Pure{} -> "purple"+ AppT _ (Pure x) arg+ | Just (Just "_") <- lookup x origs -> mainColor+ | null (nub (freeVars (untyped arg)) \\ nub (freeVars (untyped t))) -> "purple"+ _ -> mainColor+ })++componentWiseEQT :: Int -> TermT var -> TermT var -> TermT var+componentWiseEQT 1 t s = topeEQT t s+componentWiseEQT 2 t s = topeAndT+ (componentWiseEQT 1 (firstT cube2T t) (firstT cube2T s))+ (componentWiseEQT 1 (secondT cube2T t) (secondT cube2T s))+componentWiseEQT 3 t s = topeAndT+ (componentWiseEQT 2 (firstT (cube2powerT 2) t) (firstT (cube2powerT 2) s))+ (componentWiseEQT 1 (secondT cube2T t) (secondT cube2T s))+componentWiseEQT dim _ _ = error ("cannot work with " <> show dim <> " dimensions")++renderObjectsInSubShapeFor+ :: Eq var+ => String+ -> Int+ -> [var]+ -> var+ -> TermT var+ -> TermT var+ -> TermT var+ -> TypeCheck var [(ShapeId, RenderObjectData)]+renderObjectsInSubShapeFor mainColor dim sub super retType f x = fmap catMaybes $ do+ let reduceContext+ = foldr topeOrT topeBottomT+ . map (foldr topeAndT topeTopT)+ . map (filter (\tope -> all (`notElem` tope) sub))+ . map (map tTope)+ . map (saturateTopes [])+ . simplifyLHSwithDisjunctions+ contextTopes <- asks (reduceContext . localTopesNF)+ contextTopes' <- localTope (componentWiseEQT dim (Pure super) x) $ asks (reduceContext . localTopesNF)+ forM (subTopes2 dim (Pure super)) $ \(shapeId, tope) -> do+ checkEntails tope contextTopes >>= \case+ False -> return Nothing+ True -> do+ origs <- asks varOrigs+ term <- localTope tope (whnfT (appT retType f (Pure super)))+ label <- typeOf term >>= \case+ UniverseTopeT{} -> return ""+ _ -> do+ case term of+ AppT _ (Pure z) arg+ | Just (Just "_") <- lookup z origs -> return ""+ | null (nub (freeVars (untyped arg)) \\ [super]) -> ppTermInContext (Pure z)+ _ -> ppTermInContext term+ color <- checkEntails tope contextTopes' >>= \case+ True -> do+ case term of+ Pure{} -> return "purple"+ AppT _ (Pure z) arg+ | Just (Just "_") <- lookup z origs -> return mainColor+ | null (nub (freeVars (untyped arg)) \\ [super]) -> return "purple"+ _ -> return mainColor+ False -> return "gray"+ hide <- asks renderHideTerm+ return $ Just (shapeId, hideTermData hide mainColor RenderObjectData+ { renderObjectDataLabel = label+ , renderObjectDataFullLabel = label+ , renderObjectDataColor = color+ })++renderForSubShapeSVG+ :: Eq var+ => String+ -> Int+ -> [var]+ -> var+ -> TermT var+ -> TermT var+ -> TermT var+ -> TypeCheck var String+renderForSubShapeSVG mainColor dim sub super retType f x = do+ objects <- renderObjectsInSubShapeFor mainColor dim sub super retType f x+ let objects' = map mk objects+ return $ renderCube defaultCamera (if dim > 2 then (pi/7) else 0) $ \obj ->+ lookup obj objects'+ where+ mk (shapeId, renderData) = (intercalate "-" (map fill shapeId), renderData)+ fill xs = xs <> replicate (3 - length xs) '1'++renderForSVG :: Eq var => String -> Int -> TermT var -> TermT var -> TypeCheck var String+renderForSVG mainColor dim t term = do+ objects <- renderObjectsFor mainColor dim t term+ let objects' = map mk objects+ return $ renderCube defaultCamera (if dim > 2 then (pi/7) else 0) $ \obj ->+ lookup obj objects'+ where+ mk (shapeId, renderData) = (intercalate "-" (map fill shapeId), renderData)+ fill xs = xs <> replicate (3 - length xs) '1'++renderTermSVGFor+ :: Eq var+ => String -- ^ Main color.+ -> Int -- ^ Accumulated dimensions so far (from 0 to 3).+ -> (Maybe (TermT var, TermT var), [var]) -- ^ Accumulated point term (and its time).+ -> TermT var -- ^ Term to render.+ -> TypeCheck var (Maybe String)+renderTermSVGFor mainColor accDim (mp, xs) t = do+ t' <- whnfT t+ ty <- typeOf t'+ case t of -- check unevaluated term+ AppT _info f x -> typeOf f >>= \case+ TypeFunT _ fOrig md fArg mtopeArg ret | Just dim <- dimOf fArg, dim <= maxDim -> do+ enterScope fOrig md fArg $ do+ maybe id localTope mtopeArg $ do+ Just <$> renderForSubShapeSVG mainColor dim (map S xs) Z ret (S <$> f) (S <$> x) -- FIXME: breaks for 2 * (2 * 2), but works for 2 * 2 * 2 = (2 * 2) * 2+ _ -> traverse (\(p', _) -> renderForSVG mainColor accDim p' t') mp+ TypeFunT _ _orig' md' _ _ _ | null xs -> enterScope (BinderVar (Just "_")) md' t' $ do+ renderTermSVGFor "blue" 0 (Nothing, []) (Pure Z) -- use blue for types++ _ -> case t' of -- check evaluated term+ AppT _info f x -> typeOf f >>= \case+ TypeFunT _ fOrig md fArg mtopeArg ret | Just dim <- dimOf fArg, dim <= maxDim -> do+ enterScope fOrig md fArg $ do+ maybe id localTope mtopeArg $ do+ Just <$> renderForSubShapeSVG mainColor dim (map S xs) Z ret (S <$> f) (S <$> x) -- FIXME: breaks for 2 * (2 * 2), but works for 2 * 2 * 2 = (2 * 2) * 2+ _ -> traverse (\(p', _) -> renderForSVG mainColor accDim p' t') mp+ TypeFunT _ _orig' md' _ _ _ | null xs -> enterScope (BinderVar (Just "_")) md' t' $ do+ renderTermSVGFor "blue" 0 (Nothing, []) (Pure Z) -- use blue for types++ _ -> case ty of -- check type of the term+ TypeFunT _ orig md arg mtope ret+ | Just dim <- dimOf arg, accDim + dim <= maxDim -> enterScope orig md arg $ do+ maybe id localTope mtope $+ renderTermSVGFor mainColor (accDim + dim)+ (join' (both (fmap S) <$> mp) (S <$> arg) (Pure Z), Z : map S xs) $+ case t' of+ LambdaT _ _orig _marg body -> body+ _ -> appT ret (S <$> t') (Pure Z)+ | null xs -> enterScope orig md arg $ do+ maybe id localTope mtope $+ renderTermSVGFor mainColor accDim+ (both (fmap S) <$> mp, map S xs) $+ case t' of+ LambdaT _ _orig _marg body -> body+ _ -> appT ret (S <$> t') (Pure Z)+ _ -> traverse (\(p', _) -> renderForSVG mainColor accDim p' t') mp+ where+ maxDim = 3++ both f (x, y) = (f x, f y)++ join' Nothing Cube2T{} x = Just (x, cube2T)+ join' (Just (p, pt)) Cube2T{} x = Just (p', pt')+ where+ pt' = cubeProductT pt cube2T+ p' = pairT pt' p x+ join' p (CubeProductT _ l r) x =+ join' (join' p l (firstT l x)) r (secondT r x)+ join' _ _ _ = Nothing -- FIXME: error?++ dimOf = \case+ Cube2T{} -> Just 1+ CubeProductT _ l r -> (+) <$> dimOf l <*> dimOf r+ _ -> Nothing++renderTermSVG :: Eq var => TermT var -> TypeCheck var (Maybe String)+renderTermSVG = renderTermSVGFor "red" 0 (Nothing, []) -- use red for terms by default++-- | Render the goal /cell/ for a (shape) type: introduce an abstract inhabitant+-- and render it with the proof term hidden. Under a boundary tope an abstract+-- inhabitant of an extension type reduces to the prescribed face value, so the+-- cell shows its given edges with a blank interior — the shape to inhabit, not+-- an answer. 'Nothing' for a non-shape type (a 0-cell or a non-cube goal).+renderGoalCellSVG :: Eq var => TermT var -> TypeCheck var (Maybe String)+renderGoalCellSVG ty =+ hidingTerm $ enterScope (BinderVar (Just "_")) Id ty $ renderTermSVG' (Pure Z)++renderTermSVG' :: Eq var => TermT var -> TypeCheck var (Maybe String)+renderTermSVG' t = whnfT t >>= \t' -> typeOf t >>= \case+ TypeFunT _ orig md arg mtope ret -> enterScope orig md arg $ do+ maybe id localTope mtope $ case t' of+ LambdaT _ _orig _marg (AppT _info f x) ->+ typeOf f >>= \case+ TypeFunT _ fOrig md2 fArg mtope2 _ret | Just dim <- dimOf fArg -> do+ enterScope fOrig md2 fArg $ do maybe id localTope mtope2 $ do Just <$> renderForSubShapeSVG "red" dim [S Z] Z (S <$> ret) (S <$> f) (S <$> x) _ -> defaultRenderTermSVG t' arg ret
+ test/Rzk/DiagnosticSpec.hs view
@@ -0,0 +1,98 @@+{-# LANGUAGE OverloadedStrings #-}+-- | Tests for structured diagnostics (Rzk.Diagnostic): the severity/code/+-- location derived from a type error or a hole, and the JSON encoding consumed+-- by `rzk typecheck --json`.+module Rzk.DiagnosticSpec (spec) where++import Data.Aeson (encode)+import qualified Data.ByteString.Lazy.Char8 as BL8+import Data.List (isInfixOf)+import qualified Data.Text as T++import qualified Language.Rzk.Syntax as Rzk+import Rzk.Diagnostic+import Rzk.TypeCheck++import Test.Hspec++-- | All diagnostics for a module, in lenient hole mode (type errors as errors,+-- holes as hints) — the same set `rzk typecheck --json` emits.+diagnose :: T.Text -> [Diagnostic]+diagnose src =+ case Rzk.parseModule src of+ Left err -> error ("parse error: " <> T.unpack err)+ Right m -> case typecheckModulesWithHoles [("<test>", m)] of+ Left err -> [diagnoseTypeError BottomUp err]+ Right (_, errors, holes) ->+ map (diagnoseTypeError BottomUp) errors ++ map diagnoseHole holes++spec :: Spec+spec = do+ describe "diagnoseTypeError" $ do+ it "produces an error-severity diagnostic with a stable code and a line" $ do+ case diagnose "#lang rzk-1\n#check U U : U\n" of+ [d] -> do+ diagnosticSeverity d `shouldBe` SeverityError+ diagnosticCode d `shouldBe` "TypeErrorNotFunction"+ (diagnosticLocation d >>= locationLine) `shouldBe` Just 2+ ds -> expectationFailure ("expected one diagnostic, got " <> show (length ds))++ describe "diagnoseHole" $ do+ it "produces a warning-severity diagnostic carrying the goal" $ do+ case diagnose "#lang rzk-1\n#define g : (A : U) -> A -> A\n := \\ A a -> ?goal\n" of+ [d] -> do+ diagnosticSeverity d `shouldBe` SeverityWarning+ diagnosticCode d `shouldBe` "hole"+ ("goal" `isInfixOf` diagnosticMessage d) `shouldBe` True+ ds -> expectationFailure ("expected one diagnostic, got " <> show (length ds))++ -- The structured hole payload (Rzk.Diagnostic.HoleData) exposes the goal and+ -- local context as separate rendered strings, so consumers (e.g. richer LSP+ -- hovers) need not parse the prose `message`. The pair-pattern example is+ -- reused from Rzk.HolesSpec so these assertions double as a regression that the+ -- restored binder names (t / s, not π₁ / π₂) survive into the JSON.+ describe "diagnoseHole structured payload" $ do+ let pairPattern =+ "#lang rzk-1\n\+ \#define test : (A : U) -> (x : A) -> ( (t , s) : 2 * 2 | s <= t ) -> A [ t === s |-> x ]\n\+ \ := \\ A x (t , s) -> ?\n"+ it "carries the goal, cube variables and topes as separate fields" $ do+ case diagnose pairPattern of+ [d] -> case diagnosticHole d of+ Just hd -> do+ holeDataName hd `shouldBe` Nothing+ holeDataShape hd `shouldBe` Nothing+ ("t \8801 s" `isInfixOf` holeDataGoal hd) `shouldBe` True -- t ≡ s+ map fst (holeDataCubeVars hd) `shouldContain` ["(t, s)"]+ holeDataTopes hd `shouldContain` ["s \8804 t"] -- s ≤ t+ Nothing -> expectationFailure "expected a structured hole payload"+ ds -> expectationFailure ("expected one diagnostic, got " <> show (length ds))++ it "encodes the structured hole object in JSON" $ do+ case diagnose pairPattern of+ [d] -> do+ let json = BL8.unpack (encode d)+ ("\"code\":\"hole\"" `isInfixOf` json) `shouldBe` True+ ("\"hole\":{" `isInfixOf` json) `shouldBe` True+ ("\"goal\":" `isInfixOf` json) `shouldBe` True+ ("\"cubeVars\":" `isInfixOf` json) `shouldBe` True+ ("\"topes\":" `isInfixOf` json) `shouldBe` True+ -- restored binder names are present in the wire format+ ("(t, s)" `isInfixOf` json) `shouldBe` True+ ds -> expectationFailure ("expected one diagnostic, got " <> show (length ds))++ describe "JSON encoding" $ do+ it "encodes severity, code and message" $ do+ case diagnose "#lang rzk-1\n#check U U : U\n" of+ [d] -> do+ let json = BL8.unpack (encode d)+ ("\"severity\":\"error\"" `isInfixOf` json) `shouldBe` True+ ("\"code\":\"TypeErrorNotFunction\"" `isInfixOf` json) `shouldBe` True+ ds -> expectationFailure ("expected one diagnostic, got " <> show (length ds))++ it "emits a null hole field for a type-error diagnostic" $ do+ case diagnose "#lang rzk-1\n#check U U : U\n" of+ [d] -> do+ diagnosticHole d `shouldBe` Nothing+ ("\"hole\":null" `isInfixOf` BL8.unpack (encode d)) `shouldBe` True+ ds -> expectationFailure ("expected one diagnostic, got " <> show (length ds))
+ test/Rzk/HolesSpec.hs view
@@ -0,0 +1,502 @@+{-# LANGUAGE OverloadedStrings #-}+-- | Tests for the structured goal/context query (lenient hole mode). The+-- YAML fixtures cover the strict-mode errors (ill-hole-*); here we check the+-- structured 'HoleInfo' that the game and LSP consume, which substring+-- assertions in the fixture harness cannot pin down (especially the split+-- between term variables and cube variables).+module Rzk.HolesSpec (spec) where++import Data.List (isInfixOf)+import Data.Maybe (fromMaybe)+import qualified Data.Text as T+import qualified Data.Text.IO as T (readFile)+import System.Environment (lookupEnv)+import System.FilePath ((</>))++import qualified Language.Rzk.Syntax as Rzk+import Language.Rzk.Free.Syntax (VarIdent)+import Rzk.Diagnostic (typeErrorTagInScopedContext)+import Rzk.TypeCheck++import Test.Hspec++-- | Parse and typecheck a module in lenient hole mode, returning the recorded+-- holes. Errors out loudly so a broken fixture is obvious.+holesOf :: T.Text -> [HoleInfo]+holesOf src =+ case Rzk.parseModule src of+ Left err -> error ("parse error: " <> T.unpack err)+ Right m -> case typecheckModulesWithHoles [("<test>", m)] of+ Left err -> error ("typecheck threw: " <> ppTypeErrorInScopedContext' BottomUp err)+ Right (_, _, holes) -> holes++-- | Like 'holesOf', but allow-lists the given named top-level lemmas for the+-- candidate hints (see 'withHintLemmas'\/'typecheckModulesWithHolesAndLemmas').+holesWithLemmas :: [VarIdent] -> T.Text -> [HoleInfo]+holesWithLemmas lemmas src =+ case Rzk.parseModule src of+ Left err -> error ("parse error: " <> T.unpack err)+ Right m -> case typecheckModulesWithHolesAndLemmas lemmas [("<test>", m)] of+ Left err -> error ("typecheck threw: " <> ppTypeErrorInScopedContext' BottomUp err)+ Right (_, _, holes) -> holes++names :: [HoleEntry] -> [String]+names = map (show . holeEntryName)++-- | Parse and typecheck a module in lenient hole mode, returning the+-- constructor tags of the collected (non-fatal) type errors. Used to assert+-- which diagnostics fire without depending on their rendered text.+errTagsOf :: T.Text -> [String]+errTagsOf src =+ case Rzk.parseModule src of+ Left err -> error ("parse error: " <> T.unpack err)+ Right m -> case typecheckModulesWithHoles [("<test>", m)] of+ Left err -> [typeErrorTagInScopedContext err]+ Right (_, errs, _) -> map typeErrorTagInScopedContext errs++-- | Like 'holesOf'/'errTagsOf', but reads a module from @test/files/@ (so a+-- large example need not be inlined). Honours @RZK_TEST_ROOT@ like the other+-- specs. Returns the recorded holes and the collected error tags.+checkFile :: FilePath -> IO ([HoleInfo], [String])+checkFile name = do+ root <- fromMaybe "." <$> lookupEnv "RZK_TEST_ROOT"+ src <- T.readFile (root </> "test" </> "files" </> name)+ case Rzk.parseModule src of+ Left err -> error ("parse error: " <> T.unpack err)+ Right m -> case typecheckModulesWithHoles [(name, m)] of+ Left err -> error ("typecheck threw: " <> ppTypeErrorInScopedContext' BottomUp err)+ Right (_, errs, hs) -> pure (hs, map typeErrorTagInScopedContext errs)++spec :: Spec+spec = do+ describe "typecheckModulesWithHoles (structured goal/context query)" $ do+ it "records a hole's goal and local term context (no name)" $ do+ case holesOf "#lang rzk-1\n#define f : (A : U) -> A -> A\n := \\ A a -> ?\n" of+ [h] -> do+ holeName h `shouldBe` Nothing+ show (holeGoal h) `shouldBe` "A"+ names (holeTermVars h) `shouldContain` ["A"]+ names (holeTermVars h) `shouldContain` ["a"]+ holeCubeVars h `shouldBe` []+ hs -> expectationFailure ("expected exactly one hole, got " <> show (length hs))++ it "keeps the user's hole name and splits cube variables from term variables" $ do+ case holesOf "#lang rzk-1\n#define g : (A : U) -> (t : 2) -> A\n := \\ A t -> ?goal\n" of+ [h] -> do+ holeName h `shouldBe` Just "goal"+ names (holeCubeVars h) `shouldBe` ["t"]+ names (holeTermVars h) `shouldContain` ["A"]+ names (holeTermVars h) `shouldNotContain` ["t"]+ hs -> expectationFailure ("expected exactly one hole, got " <> show (length hs))++ it "records every hole in a module" $ do+ let holes = holesOf "#lang rzk-1\n#define p : (A : U) -> (B : U) -> A -> B -> A\n := \\ A B a b -> ?\n"+ length holes `shouldBe` 1+ let holes2 = holesOf "#lang rzk-1\n#define q : (A : U) -> A -> A\n := \\ A a -> ?\n#define r : (A : U) -> A -> A\n := \\ A a -> ?\n"+ length holes2 `shouldBe` 2++ -- A hole whose elaborated term reaches unification (here the `refl` endpoint)+ -- must not panic ("unexpected term in UNIFY"); it unifies with anything.+ it "handles a hole that flows into unification" $ do+ case holesOf "#lang rzk-1\n#define t : (A : U) -> (a : A) -> a =_{A} a\n := \\ A a -> refl_{?}\n" of+ [h] -> show (holeGoal h) `shouldBe` "A"+ hs -> expectationFailure ("expected exactly one hole, got " <> show (length hs))++ -- A bare hole in each recOR branch: the checking-direction recOR rule pushes+ -- the common type (A) into every branch, so both holes are recorded against A+ -- with their branch tope in context. Without that rule the recOR is elaborated+ -- by inference and the branch holes fail with TypeErrorCannotInferHole.+ it "records a hole in each recOR branch against the common type" $ do+ case holesOf "#lang rzk-1\n#define square : (A : U) -> A -> (2 × 2) -> A\n := \\ A a (t , s) -> recOR ( t ≤ s ↦ ? , s ≤ t ↦ ? )\n" of+ [h1, h2] -> do+ show (holeGoal h1) `shouldBe` "A"+ show (holeGoal h2) `shouldBe` "A"+ map show (holeTopes h1) `shouldContain` ["t ≤ s"]+ map show (holeTopes h2) `shouldContain` ["s ≤ t"]+ hs -> expectationFailure ("expected exactly two holes, got " <> show (length hs))++ -- When the recOR is checked against an /extension type/, each branch hole+ -- reports the boundary it must meet under its tope (the restriction is+ -- pushed into the branches), rather than the bare underlying type. So the+ -- player sees, e.g., that the value must equal `f t` on `s ≡ 0₂` and `a` on+ -- `s ≡ 1₂`, not just `A`.+ it "shows the extension-type boundary in a recOR branch hole" $ do+ case holesOf "#lang rzk-1\n#def square (A : U) (a : A) (f : (t : 2) → A)\n : (t : 2) → (s : 2) → A [ s ≡ 0₂ ↦ f t , s ≡ 1₂ ↦ a ]\n := \\ t s → recOR ( s ≤ t ↦ ? , t ≤ s ↦ ? )\n" of+ [h1, h2] -> do+ let goal1 = show (holeGoal h1)+ ("A [" `isInfixOf` goal1) `shouldBe` True -- a restricted type, not bare A+ ("↦ f t" `isInfixOf` goal1) `shouldBe` True -- the s ≡ 0₂ face is shown+ ("↦ a" `isInfixOf` goal1) `shouldBe` True -- the s ≡ 1₂ face is shown+ map show (holeTopes h1) `shouldContain` ["s ≤ t"]+ show (holeGoal h2) `shouldBe` goal1 -- both branches carry the same boundary+ map show (holeTopes h2) `shouldContain` ["t ≤ s"]+ hs -> expectationFailure ("expected exactly two holes, got " <> show (length hs))++ -- A hole nested inside a larger term (`f ?`) checked against an+ -- extension-type boundary: the boundary face is unified against `f ?`, which+ -- must be deferred rather than reported as a mismatch.+ it "handles a nested hole under an extension-type boundary" $ do+ case holesOf "#lang rzk-1\n#define t : (A : U) -> (f : A -> A) -> (a : A) -> (t : 2) -> A [ t === 0_2 |-> a ]\n := \\ A f a t -> f ?\n" of+ [h] -> show (holeGoal h) `shouldBe` "A"+ hs -> expectationFailure ("expected exactly one hole, got " <> show (length hs))++ -- A genuinely completable work-in-progress term is tolerated. The example+ -- (the Yoneda game's square-transformation level) feeds an incomplete+ -- `codomain-square A is-segal-A a b (f ?) ? ? ? ?` where a value of+ -- `hom A (f t) a` is wanted. Inferring it records the holes, but the final+ -- check of its type then unifies two extension-type boundaries, and a+ -- *hole-free* face comparison fails — so the existing per-term deferral+ -- cannot see that a hole is involved, and the whole def was rejected with+ -- TypeErrorUnifyTerms. We now tolerate it and keep the recorded holes. The+ -- companion `…-complete` definition fills the holes and typechecks, so the+ -- holes really can be filled to make the same term check (it is not a dead+ -- end). See test/files/holes-wip-square.rzk.+ it "tolerates a completable WIP term whose type only fails around a hole" $ do+ (holes, errs) <- checkFile "holes-wip-square.rzk"+ errs `shouldBe` [] -- the WIP def is tolerated, the complete one checks+ length holes `shouldBe` 5 -- the five holes of square-transformation-wip++ -- A hole used as the argument of a shape-restricted function: the+ -- shape-membership tope (psi ?) mentions the hole and cannot be decided, so+ -- it is deferred rather than reported as TypeErrorTopeNotSatisfied. The goal+ -- is the shape (s : I | psi s), captured in holeGoalShape.+ it "records the shape goal for a hole argument to a shape-restricted function" $ do+ case holesOf "#lang rzk-1\n#define t : (I : CUBE) -> (psi : I -> TOPE) -> (A : U) -> (a : (s : I | psi s) -> A) -> (t : I) -> A\n := \\ I psi A a t -> a ?\n" of+ [h] -> do+ show (holeGoal h) `shouldBe` "I"+ case holeGoalShape h of+ Just (s, tope) -> do+ show s `shouldBe` "s"+ show tope `shouldBe` "psi s"+ Nothing -> expectationFailure "expected a shape goal (holeGoalShape)"+ hs -> expectationFailure ("expected exactly one hole, got " <> show (length hs))++ -- An ordinary (non-shape) hole has no shape goal.+ it "leaves holeGoalShape empty for an ordinary hole" $ do+ case holesOf "#lang rzk-1\n#define f : (A : U) -> A -> A\n := \\ A a -> ?\n" of+ [h] -> holeGoalShape h `shouldBe` Nothing+ hs -> expectationFailure ("expected exactly one hole, got " <> show (length hs))++ -- A hole checked directly against an extension type shows its boundary in+ -- the goal (the extension type is a real restricted type, carried in+ -- holeGoal — not a shape, so holeGoalShape stays empty).+ it "shows the extension-type boundary in the goal" $ do+ case holesOf "#lang rzk-1\n#define t : (A : U) -> (a : A) -> (t : 2) -> A [ t === 0_2 |-> a ]\n := \\ A a t -> ?\n" of+ [h] -> do+ holeGoalShape h `shouldBe` Nothing+ let goal = show (holeGoal h)+ ("A [" `isInfixOf` goal) `shouldBe` True -- a restricted type, not bare A+ ("↦ a" `isInfixOf` goal) `shouldBe` True -- the boundary face is present+ hs -> expectationFailure ("expected exactly one hole, got " <> show (length hs))++ -- A pair-pattern binder \ (t , s) -> ? restores the user's component names:+ -- the goal and tope context show t / s, not projections (π₁ / π₂) of a fresh+ -- variable. This is what the game and LSP hole panels display.+ it "restores pair-pattern binder names in the goal and topes" $ do+ case holesOf "#lang rzk-1\n#define test : (A : U) -> (x : A) -> ( (t , s) : 2 * 2 | s <= t ) -> A [ t === s |-> x ]\n := \\ A x (t , s) -> ?\n" of+ [h] -> do+ let goal = show (holeGoal h)+ ("t ≡ s" `isInfixOf` goal) `shouldBe` True+ ('π' `elem` goal) `shouldBe` False+ map show (holeTopes h) `shouldContain` ["s ≤ t"]+ -- the cube variable is shown as the pattern, not a fresh variable+ names (holeCubeVars h) `shouldBe` ["(t, s)"]+ hs -> expectationFailure ("expected exactly one hole, got " <> show (length hs))++ -- A nested tuple pattern ((t , s) , r) restores all the component names,+ -- including the doubly-projected one (s = π₂ (π₁ x)).+ it "restores nested tuple binder names" $ do+ case holesOf "#lang rzk-1\n#define test : (A : U) -> (x : A) -> ( ((t , s) , r) : (2 * 2) * 2 | r <= s ) -> A [ r === t |-> x ]\n := \\ A x ((t , s) , r) -> ?\n" of+ [h] -> do+ let goal = show (holeGoal h)+ ("r ≡ t" `isInfixOf` goal) `shouldBe` True+ ('π' `elem` goal) `shouldBe` False+ map show (holeTopes h) `shouldContain` ["r ≤ s"]+ names (holeCubeVars h) `shouldBe` ["((t, s), r)"]+ hs -> expectationFailure ("expected exactly one hole, got " <> show (length hs))++ -- A bare use of a pattern binder's point (not a projection) inside a shape+ -- in the /goal type/ must print as the pattern, not a fresh variable: the+ -- membership tope of @((t , s) : Δ²) → A@ reads @Δ² (t , s)@, not @Δ² x@.+ it "restores a pattern point used bare in a goal-type shape tope" $ do+ case holesOf "#lang rzk-1\n#def Δ² : (2 × 2) → TOPE := \\ (t , s) → s ≤ t\n#def f (A : U) : ( ((t , s) : Δ²) → A ) := ?\n" of+ [h] -> do+ let goal = show (holeGoal h)+ ("| Δ² (t, s))" `isInfixOf` goal) `shouldBe` True+ ('π' `elem` goal) `shouldBe` False+ hs -> expectationFailure ("expected exactly one hole, got " <> show (length hs))++ -- Guardrail: ordinary projections of a variable that is NOT a pattern binder+ -- must still print as π₁ / π₂ (only pattern-binder projections are folded).+ it "leaves ordinary projections of a non-pattern variable as π₁ / π₂" $ do+ case holesOf "#lang rzk-1\n#define test : (A : U) -> (x : A) -> ( p : 2 * 2 | second p <= first p ) -> A [ first p === second p |-> x ]\n := \\ A x p -> ?\n" of+ [h] -> do+ let goal = show (holeGoal h)+ ("π₁ p ≡ π₂ p" `isInfixOf` goal) `shouldBe` True+ map show (holeTopes h) `shouldContain` ["π₂ p ≤ π₁ p"]+ hs -> expectationFailure ("expected exactly one hole, got " <> show (length hs))++ describe "holeCandidates (type-directed elimination candidates)" $ do+ let cands = map show . holeCandidates++ -- A hypothesis that already has the goal type is offered as-is.+ it "offers a hypothesis of the goal type directly" $ do+ case holesOf "#lang rzk-1\n#define f : (A : U) -> A -> A\n := \\ A a -> ?\n" of+ [h] -> cands h `shouldContain` ["a"]+ hs -> expectationFailure ("expected exactly one hole, got " <> show (length hs))++ -- A function is offered fully applied, with its argument left as a hole;+ -- the under-applied function itself is not a move.+ it "applies a function, leaving the argument as a hole" $ do+ case holesOf "#lang rzk-1\n#define h : (A : U) -> (B : U) -> (A -> B) -> A -> B\n := \\ A B g a -> ?\n" of+ [h] -> cands h `shouldContain` ["g ?"]+ hs -> expectationFailure ("expected exactly one hole, got " <> show (length hs))++ -- A Σ-typed hypothesis is eliminated by projection to reach the goal.+ it "projects a Σ-typed hypothesis to reach the goal" $ do+ case holesOf "#lang rzk-1\n#define k : (A : U) -> (s : Σ (a : A) , A) -> A\n := \\ A s -> ?\n" of+ [h] -> do+ cands h `shouldContain` ["π₁ s"]+ cands h `shouldContain` ["π₂ s"]+ hs -> expectationFailure ("expected exactly one hole, got " <> show (length hs))++ -- A path is eliminated by path induction. The motive is introduced straight+ -- away as a λ, so over @p : a =_A x@ the spine @idJ (A, a, \ b → \ q → ?, ?,+ -- x, p)@ has a result type that β-reduces to a hole and so fits any goal —+ -- here an ordinary goal @A@ with the path in scope.+ it "eliminates a path by idJ, introducing the motive λ" $ do+ case holesOf "#lang rzk-1\n#def f (A : U) (a x : A) (p : a =_{A} x) : A := ?\n" of+ [h] -> cands h `shouldContain` ["idJ (A, a, \\ b → \\ q → ?, ?, x, p)"]+ hs -> expectationFailure ("expected exactly one hole, got " <> show (length hs))++ -- With no path in scope there is nothing to eliminate by idJ.+ it "does not offer idJ without a path hypothesis" $ do+ case holesOf "#lang rzk-1\n#def f (A : U) (a : A) : A := ?\n" of+ [h] -> filter (isInfixOf "idJ") (cands h) `shouldBe` []+ hs -> expectationFailure ("expected exactly one hole, got " <> show (length hs))++ -- A partial application whose result structurally mismatches the goal is not+ -- offered: matching uses structural (not fully lenient) hole unification, so+ -- the hole in @h ?@ : @P ?@ cannot excuse the mismatch with the goal @Q@.+ it "does not offer a structurally mismatched partial application" $ do+ case holesOf "#lang rzk-1\n#define t : (A : U) -> (P : A -> U) -> (Q : U) -> (h : (a : A) -> P a) -> Q\n := \\ A P Q h -> ?\n" of+ [h] -> cands h `shouldBe` []+ hs -> expectationFailure ("expected exactly one hole, got " <> show (length hs))++ -- In a contradictory tope context (here the shape @t ≡ 0₂ ∧ t ≡ 1₂@, which+ -- entails ⊥) recBOT inhabits the goal, so it is offered as a candidate.+ it "offers recBOT in a contradictory tope context" $ do+ case holesOf "#lang rzk-1\n#def f (A : U) (a : A) : ( (t : 2 | t ≡ 0₂ ∧ t ≡ 1₂) → A )\n := \\ t → ?\n" of+ [h] -> cands h `shouldContain` ["recBOT"]+ hs -> expectationFailure ("expected exactly one hole, got " <> show (length hs))++ -- A consistent tope context does not offer recBOT.+ it "does not offer recBOT in a consistent tope context" $ do+ case holesOf "#lang rzk-1\n#def f (A : U) (a : A) : ( (t : 2 | t ≡ 0₂) → A )\n := \\ t → ?\n" of+ [h] -> cands h `shouldNotContain` ["recBOT"]+ hs -> expectationFailure ("expected exactly one hole, got " <> show (length hs))++ -- In a shape setting (a cube variable in scope) the goal can be built by a+ -- tope case split; the generic two-way recOR is always available there.+ it "offers a generic recOR split in a shape setting" $ do+ case holesOf "#lang rzk-1\n#def Δ¹ : 2 → TOPE := \\ t → TOP\n#def hom (A : U) (x y : A) : U\n := (t : Δ¹) → A [ t ≡ 0₂ ↦ x , t ≡ 1₂ ↦ y ]\n#def mor (A : U) (x y : A) : hom A x y := \\ t → ?\n" of+ hs | (h:_) <- reverse hs -> cands h `shouldContain` ["recOR (? ↦ ?, ? ↦ ?)"]+ _ -> expectationFailure "expected at least one hole"++ -- recOR and recBOT are term-level eliminators, so a hole whose goal is a cube+ -- point or a tope is never offered them — even in a setting (a cube variable+ -- in scope) that does offer a recOR split for a term goal.+ let recCands = filter (\s -> isInfixOf "recOR" s || isInfixOf "recBOT" s) . cands+ it "does not offer recOR/recBOT for a cube goal" $+ -- `?` is a cube point (goal `2`) fed to a shape function, with a cube+ -- variable `s` in scope (which would offer a recOR split for a term goal).+ case holesOf "#lang rzk-1\n#def c (A : U) (s : 2) (g : (t : 2) -> A) : A := g ?\n" of+ [h] -> recCands h `shouldBe` []+ hs -> expectationFailure ("expected exactly one hole, got " <> show (length hs))+ it "does not offer recOR/recBOT for a tope goal" $+ case holesOf "#lang rzk-1\n#def p (A : U) (t : 2) : TOPE := ?\n" of+ [h] -> recCands h `shouldBe` []+ hs -> expectationFailure ("expected exactly one hole, got " <> show (length hs))++ -- An ordinary, tope-free goal offers no recOR split.+ it "offers no recOR split for a tope-free goal" $ do+ case holesOf "#lang rzk-1\n#def plain (A : U) (a : A) : A := ?\n" of+ [h] -> filter (isInfixOf "recOR") (cands h) `shouldBe` []+ hs -> expectationFailure ("expected exactly one hole, got " <> show (length hs))++ -- On the boundary t ≡ 0₂ ∨ t ≡ 1₂ the faces cover the context, so the goal's+ -- restriction faces become a concrete recOR split.+ it "splits on the goal's faces when they cover the context" $ do+ case holesOf "#lang rzk-1\n#def bdry (A : U) (x y : A)\n : ( (t : 2 | t ≡ 0₂ ∨ t ≡ 1₂) → A [ t ≡ 0₂ ↦ x , t ≡ 1₂ ↦ y ] )\n := \\ t → ?\n" of+ [h] -> cands h `shouldContain` ["recOR (t ≡ 0₂ ↦ ?, t ≡ 1₂ ↦ ?)"]+ hs -> expectationFailure ("expected exactly one hole, got " <> show (length hs))++ describe "holeCandidates with allow-listed lemmas (withHintLemmas)" $ do+ let cands = map show . holeCandidates+ -- two top-level lemmas and an off-type one; the goal is the type @B@.+ src = "#lang rzk-1\n#postulate B : U\n#postulate C : U\n"+ <> "#postulate concat : B -> B -> B\n#postulate rev : B -> B\n"+ <> "#postulate elsewhere : C\n#define goal : B := ?\n"+ oneHole f hs = case hs of+ [h] -> f h+ _ -> expectationFailure ("expected exactly one hole, got " <> show (length hs))++ -- A top-level definition is not a hole candidate unless it is allow-listed.+ it "does not offer a top-level lemma that was not allow-listed" $+ flip oneHole (holesWithLemmas [] src) $ \h ->+ filter (isInfixOf "concat") (cands h) `shouldBe` []++ -- An allow-listed lemma is offered, applied to holes (fit to the goal).+ it "offers an allow-listed lemma applied to holes" $+ flip oneHole (holesWithLemmas ["concat"] src) $ \h ->+ cands h `shouldContain` ["concat ? ?"]++ -- Each allow-listed lemma is offered independently.+ it "offers several allow-listed lemmas" $+ flip oneHole (holesWithLemmas ["concat", "rev"] src) $ \h -> do+ cands h `shouldContain` ["concat ? ?"]+ cands h `shouldContain` ["rev ?"]++ -- The allow-list is still fit-filtered: a lemma whose type cannot reach the+ -- goal (here @elsewhere : C@ against goal @B@) is not offered.+ it "does not offer an allow-listed lemma whose type does not fit" $+ flip oneHole (holesWithLemmas ["elsewhere"] src) $ \h ->+ filter (isInfixOf "elsewhere") (cands h) `shouldBe` []++ -- Lemmas feed the candidate list only, not the local context: an allow-listed+ -- global does not appear among the hole's term/cube variables.+ it "keeps allow-listed lemmas out of the local context" $+ flip oneHole (holesWithLemmas ["concat"] src) $ \h ->+ (names (holeTermVars h) <> names (holeCubeVars h)) `shouldNotContain` ["concat"]++ describe "holeIntroductions (type-directed introduction forms)" $ do+ let intros = map show . holeIntroductions++ -- A function goal is introduced by a λ over a hole body; the binder is+ -- taken from the type, so a named domain keeps its name.+ it "introduces a function goal as a λ with a hole body" $ do+ case holesOf "#lang rzk-1\n#define f : (A : U) -> ((n : A) -> A)\n := \\ A -> ?\n" of+ [h] -> intros h `shouldBe` ["\\ n → ?"]+ hs -> expectationFailure ("expected exactly one hole, got " <> show (length hs))++ -- The λ binder is freshened so it does not shadow a name already in scope.+ -- Here the goal unfolds to `(t : 2) -> A`, whose binder `t` (taken from+ -- `endo`'s definition, mirroring `hom`) clashes with the in-scope cube+ -- variable `t`; the introduction binds `t₁` instead of a shadowing `t`.+ it "freshens the λ binder so it does not shadow an in-scope name" $ do+ case holesOf "#lang rzk-1\n#define endo : U -> U\n := \\ A -> (t : 2) -> A\n#define f : (A : U) -> (t : 2) -> endo A\n := \\ A t -> ?\n" of+ [h] -> intros h `shouldBe` ["\\ t₁ → ?"]+ hs -> expectationFailure ("expected exactly one hole, got " <> show (length hs))++ -- A named pattern domain (e.g. a cube point) keeps its pattern, so the λ+ -- binds the user's names rather than a projection.+ it "introduces a pattern-domain function with the pattern binder" $ do+ case holesOf "#lang rzk-1\n#define f : (A : U) -> ( ((t , s) : 2 × 2) -> A )\n := \\ A -> ?\n" of+ [h] -> intros h `shouldBe` ["\\ (t, s) → ?"]+ hs -> expectationFailure ("expected exactly one hole, got " <> show (length hs))++ -- A nameless product domain is destructured by default, recursively, with+ -- cube-point leaves named tN.+ it "destructures a nameless cube-product domain" $ do+ case holesOf "#lang rzk-1\n#def f (A : U) : ( (2 × 2 × 2) → A ) := ?\n" of+ [h] -> intros h `shouldBe` ["\\ ((t1, t2), t3) → ?"]+ hs -> expectationFailure ("expected exactly one hole, got " <> show (length hs))++ -- A nameless Σ domain is destructured too, with term leaves named xN.+ it "destructures a nameless Σ domain" $ do+ case holesOf "#lang rzk-1\n#def f (A B C : U) : ( (Σ (a : A) , B) → C ) := ?\n" of+ [h] -> intros h `shouldBe` ["\\ (x1, x2) → ?"]+ hs -> expectationFailure ("expected exactly one hole, got " <> show (length hs))++ -- A Σ-type goal is introduced by a pair of holes.+ it "introduces a Σ goal as a pair of holes" $ do+ case holesOf "#lang rzk-1\n#define f : (A : U) -> (B : A -> U) -> (a : A) -> (b : B a) -> Σ (w : A) , B w\n := \\ A B a b -> ?\n" of+ [h] -> intros h `shouldBe` ["(?, ?)"]+ hs -> expectationFailure ("expected exactly one hole, got " <> show (length hs))++ -- An identity type whose endpoints already agree is introduced by refl.+ it "introduces an identity type with agreeing endpoints by refl" $ do+ case holesOf "#lang rzk-1\n#define f : (A : U) -> (a : A) -> (a =_{A} a)\n := \\ A a -> ?\n" of+ [h] -> intros h `shouldBe` ["refl"]+ hs -> expectationFailure ("expected exactly one hole, got " <> show (length hs))++ -- refl is conditional: it is not offered when the endpoints need not agree.+ it "does not offer refl when the endpoints need not agree" $ do+ case holesOf "#lang rzk-1\n#define f : (A : U) -> (a : A) -> (b : A) -> (a =_{A} b)\n := \\ A a b -> ?\n" of+ [h] -> intros h `shouldBe` []+ hs -> expectationFailure ("expected exactly one hole, got " <> show (length hs))++ -- The unit type is introduced by unit.+ it "introduces the unit type by unit" $ do+ case holesOf "#lang rzk-1\n#define f : Unit\n := ?\n" of+ [h] -> intros h `shouldBe` ["unit"]+ hs -> expectationFailure ("expected exactly one hole, got " <> show (length hs))++ -- A goal whose type has no head constructor to introduce (a neutral+ -- application) offers no introduction.+ it "offers no introduction for a neutral goal" $ do+ case holesOf "#lang rzk-1\n#define f : (A : U) -> (B : A -> U) -> (a : A) -> B a\n := \\ A B a -> ?\n" of+ [h] -> intros h `shouldBe` []+ hs -> expectationFailure ("expected exactly one hole, got " <> show (length hs))++ -- A shape goal (a hole of type TOPE) is introduced by every tope+ -- constructor, so a shape can be built up by tapping.+ it "introduces a tope goal by every tope constructor" $ do+ case holesOf "#lang rzk-1\n#define sh : 2 -> TOPE\n := \\ t -> ?\n" of+ [h] -> do+ show (holeGoal h) `shouldBe` "TOPE"+ intros h `shouldBe` ["⊤", "⊥", "? ≡ ?", "? ≤ ?", "? ∧ ?", "? ∨ ?"]+ hs -> expectationFailure ("expected exactly one hole, got " <> show (length hs))++ -- In lenient (hole-checking) mode a partial proof should still typecheck even+ -- when it has not yet applied a declared variable: the unfilled hole may be+ -- where that variable will eventually be used. We tolerate the unused-variable+ -- diagnostics only while such a hole is present; strict mode (the YAML+ -- ill-unused-* fixtures) still reports them.+ describe "unused-variable diagnostics tolerated in lenient hole mode" $ do+ let section body = "#lang rzk-1\n#section sec\n#variable A : U\n"+ <> "#variable unused-var : A\n" <> body <> "\n#end sec\n"++ it "tolerates an unused section assumption when the section has a hole" $+ errTagsOf (section "#define only-type : U\n := ?")+ `shouldNotContain` ["TypeErrorUnusedVariable"]++ it "still reports an unused section assumption with no hole present" $+ errTagsOf (section "#define only-type : U\n := A")+ `shouldContain` ["TypeErrorUnusedVariable"]++ let usesSection body = "#lang rzk-1\n#section sec\n#variable A : U\n"+ <> "#variable x : A\n" <> body <> "\n#end sec\n"++ it "tolerates an unused 'uses' variable when the declaration has a hole" $+ errTagsOf (usesSection "#define f uses (x) : U\n := ?")+ `shouldNotContain` ["TypeErrorUnusedUsedVariables"]++ it "still reports an unused 'uses' variable with no hole in the declaration" $+ errTagsOf (usesSection "#define f uses (x) : U\n := A")+ `shouldContain` ["TypeErrorUnusedUsedVariables"]++ -- The goal cell: when the goal is a renderable shape, the hole carries an SVG+ -- of that shape, drawn from an abstract inhabitant with the proof term hidden+ -- (see 'renderHideTerm'). So the picture shows the given boundary edges with a+ -- blank interior, never the term that would fill it.+ describe "holeDiagram (goal-cell SVG)" $ do+ it "renders a shape goal as a labelled, term-free SVG" $ do+ let src = "#lang rzk-1\n\+ \#def sq (A : U) (a : A) : U\n\+ \ := ((t , s) : 2 * 2) -> A [ t === 0_2 |-> a , t === 1_2 |-> a , s === 0_2 |-> a , s === 1_2 |-> a ]\n\+ \#def fill (A : U) (a : A) : sq A a := ?\n"+ case holesOf src of+ [h] -> case holeDiagram h of+ Just svg -> do+ ("<svg" `isInfixOf` svg) `shouldBe` True+ ("<path" `isInfixOf` svg) `shouldBe` True -- a 2-cell (square), not just an arrow+ (">a</text>" `isInfixOf` svg) `shouldBe` True -- the given boundary edge `a`+ ("<title></title>" `isInfixOf` svg) `shouldBe` True -- titles blanked: no proof term+ Nothing -> expectationFailure "expected a goal-cell diagram for a shape goal"+ hs -> expectationFailure ("expected exactly one hole, got " <> show (length hs))++ it "has no diagram for a non-shape goal" $+ case holesOf "#lang rzk-1\n#define f : (A : U) -> A -> A\n := \\ A a -> ?\n" of+ [h] -> holeDiagram h `shouldBe` Nothing+ hs -> expectationFailure ("expected exactly one hole, got " <> show (length hs))
test/Rzk/TypeCheckSpec.hs view
@@ -19,6 +19,7 @@ import Language.Rzk.Free.Syntax (VarIdent) import qualified Language.Rzk.Syntax as Rzk+import Rzk.Diagnostic (typeErrorTag) import Rzk.TypeCheck (Context (..), Decl', LocationInfo (..), OutputDirection (..), TypeError (..), TypeErrorInContext (..),@@ -64,30 +65,11 @@ location (typeErrorContext e) >>= locationLine ScopedTypeError _ e -> errorLine (unsafeCoerce e) +-- | The constructor name of a type error, used to match @error_tag@ in+-- fixtures. This is the library's 'typeErrorTag' (also used for diagnostic+-- codes), aliased here so the two cannot drift apart. typeErrorConstructorName :: TypeError VarIdent -> String-typeErrorConstructorName = \case- TypeErrorOther{} -> "TypeErrorOther"- TypeErrorUnify{} -> "TypeErrorUnify"- TypeErrorUnifyTerms{} -> "TypeErrorUnifyTerms"- TypeErrorNotPair{} -> "TypeErrorNotPair"- TypeErrorNotModal{} -> "TypeErrorNotModal"- TypeErrorModalityMismatch{} -> "TypeErrorModalityMismatch"- TypeErrorUnaccessibleVar{} -> "TypeErrorUnaccessibleVar"- TypeErrorNotTypeInModal{} -> "TypeErrorNotTypeInModal"- TypeErrorNotFunction{} -> "TypeErrorNotFunction"- TypeErrorUnexpectedLambda{} -> "TypeErrorUnexpectedLambda"- TypeErrorUnexpectedPair{} -> "TypeErrorUnexpectedPair"- TypeErrorUnexpectedRefl{} -> "TypeErrorUnexpectedRefl"- TypeErrorCannotInferBareLambda{} -> "TypeErrorCannotInferBareLambda"- TypeErrorCannotInferBareRefl{} -> "TypeErrorCannotInferBareRefl"- TypeErrorUndefined{} -> "TypeErrorUndefined"- TypeErrorTopeNotSatisfied{} -> "TypeErrorTopeNotSatisfied"- TypeErrorTopesNotEquivalent{} -> "TypeErrorTopesNotEquivalent"- TypeErrorInvalidArgumentType{} -> "TypeErrorInvalidArgumentType"- TypeErrorDuplicateTopLevel{} -> "TypeErrorDuplicateTopLevel"- TypeErrorUnusedVariable{} -> "TypeErrorUnusedVariable"- TypeErrorUnusedUsedVariables{} -> "TypeErrorUnusedUsedVariables"- TypeErrorImplicitAssumption{} -> "TypeErrorImplicitAssumption"+typeErrorConstructorName = typeErrorTag casesRoot :: FilePath casesRoot = "test/typecheck/cases"
test/doctests.hs view
@@ -1,7 +1,5 @@--- doctests/Main.hs--import Test.DocTest+import System.Environment (getArgs)+import Test.DocTest (mainFromCabal) --- This test suite exists only to add dependencies main :: IO ()-main = doctest ["src"]+main = mainFromCabal "rzk" =<< getArgs
test/typecheck/SCHEMA.md view
@@ -20,7 +20,7 @@ | `error_tag` | if `status: error` | Name of the `TypeError` constructor after stripping `ScopedTypeError` wrappers, e.g. `TypeErrorUnify`, `TypeErrorUndefined`. | | `message_contains` | no | Substrings that must all appear in the rendered error (`ppTypeErrorInScopedContext'`). | | `line` | no | 1-based line number (approximate) in the Rzk file where the error is reported. |-| `regression_for` | no | Traceability: GitHub issue/PR URLs, commit themes, or short **semantic** rule names (e.g. `contextEquiv-recOR-boundary`). Avoid `TypeCheck.hs` line numbers and `issueTypeError-<line>` tags — they go stale. |+| `regression_for` | no | Traceability: GitHub issue/PR URLs, commit themes, or short **semantic** rule names (e.g. `contextEntailsUnion-recOR-boundary`). Avoid `TypeCheck.hs` line numbers and `issueTypeError-<line>` tags — they go stale. | | `modules` | no | If set (directory case), ordered list of module files for one `typecheckModulesWithLocation` run. | | `api` | no | Omit or `strict` (default): `typecheckModulesWithLocation` (throws on first error). `collect`: `typecheckModulesWithLocation'` — returns a list of errors without using `throwError`; note that the typechecker still stops per-module chaining when a module reports errors (see implementation in `Rzk.TypeCheck`). |
+ test/typecheck/cases/happy-flip-unflip.expect.yaml view
@@ -0,0 +1,3 @@+status: ok+regression_for:+ - flip-tope-equivalence
+ test/typecheck/cases/happy-flip-unflip.rzk view
@@ -0,0 +1,29 @@+#lang rzk-1++-- Test: _op (flip(i) === 0_2) is equivalent to (i === 1_2)+-- Verified via propositional equality of topes under _op++#def test-flip-tope-equiv+ (i : 2)+ : let mod _op q := inv_op (i === 1_2) in+ let mod _op fi := flip_op i in+ _op (q = (fi === 0_2))+ := mod _op refl++-- Symmetric case: _op (flip(i) === 1_2) is equivalent to (i === 0_2)++#def test-flip-tope-equiv-sym+ (i : 2)+ : let mod _op q := inv_op (i === 0_2) in+ let mod _op fi := flip_op i in+ _op (q = (fi === 1_2))+ := mod _op refl++-- flip/unflip with 2: inv roundtrip++#def test-flip-inv-roundtrip-2+ (i : 2)+ : let mod _op q := inv_op (i === 0_2) in+ let mod _op fi := flip_op i in+ _op (q = (fi === 1_2))+ := mod _op refl
+ test/typecheck/cases/happy-interval-basics.expect.yaml view
@@ -0,0 +1,5 @@+status: ok+regression_for:+ - interval-cube-basics+ - covariance-2-and-I+ - totality-on-2
+ test/typecheck/cases/happy-interval-basics.rzk view
@@ -0,0 +1,68 @@+#lang rzk-1++-- Extension types are needed to map out of cubes into types.+-- You cannot simply write `(t : 2) -> A`; you need `<{(t : 2) | TOP} -> A>`.++-- Basic extension type over 2+#define arr2+ (A : U)+ : U+ := (t : 2) -> A++-- Basic extension type over I+#define arrI+ (A : U)+ : U+ := (t : II) -> A++-- Extension type with boundary over 2+#define hom2+ (A : U) (x y : A)+ : U+ := (t : 2) -> A [ t === 0_2 |-> x , t === 1_2 |-> y ]++-- Extension type with boundary over I+#define homI+ (A : U) (x y : A)+ : U+ := (t : II) -> A [ t === 0_I |-> x , t === 1_I |-> y ]++-- Covariance of 2: a map A -> B induces a map on arrows+#define cov2+ (A B : U)+ (f : A -> B)+ (p : (t : 2) -> A)+ : (t : 2) -> B+ := \ t -> f (p t)++-- Covariance of I: a map A -> B induces a map on paths+#define covI+ (A B : U)+ (f : A -> B)+ (p : (t : II) -> A)+ : (t : II) -> B+ := \ t -> f (p t)++-- Covariance of 2 preserves boundary+#define cov2-boundary+ (A B : U)+ (f : A -> B)+ (x y : A)+ (p : (t : 2) -> A [ t === 0_2 |-> x , t === 1_2 |-> y ])+ : (t : 2) -> B [ t === 0_2 |-> f x , t === 1_2 |-> f y ]+ := \ t -> f (p t)++-- Covariance of I preserves boundary+#define covI-boundary+ (A B : U)+ (f : A -> B)+ (x y : A)+ (p : (t : II) -> A [ t === 0_I |-> x , t === 1_I |-> y ])+ : (t : II) -> B [ t === 0_I |-> f x , t === 1_I |-> f y ]+ := \ t -> f (p t)++-- Totality on 2: recOR works because 2 has total order+#define total2+ (t : 2)+ : Unit+ := recOR( t <= 0_2 |-> unit , 0_2 <= t |-> unit )
+ test/typecheck/cases/happy-interval-subtyping.expect.yaml view
@@ -0,0 +1,3 @@+status: ok+regression_for:+ - interval-subtyping-2-to-II
+ test/typecheck/cases/happy-interval-subtyping.rzk view
@@ -0,0 +1,16 @@+#lang rzk-1++-- An (t : II) -> A is usable where a (t : 2) -> A is expected:+-- 2 <: II at the cube level, so by contravariance (II -> A) <: (2 -> A).+-- The converse (a 2-arrow where an II-path is expected) is in ill-interval-subtyping.rzk.++#define arr2+ (A : U) (x y : A)+ : U+ := (t : 2) -> A [ t === 0_2 |-> x , t === 1_2 |-> y ]++#define arrII-to-arr2+ (A : U) (x y : A)+ (p : (t : II) -> A [ t === 0_I |-> x , t === 1_I |-> y ])+ : arr2 A x y+ := p
test/typecheck/cases/happy-modal-basics.rzk view
@@ -1,65 +1,322 @@ #lang rzk-1 #def sharp-pure (A : U) (x : A)- : <| _# | A |>+ : _# A := mod _# x #def sharp-map (A B : U) (f : A → B)- : <| _# | A |> → <| _# | B |>- := \ (x : _# A) → mod _# (f x)+ : (x :_# A) → _# B+ := \ (x :_# A) → mod _# (f x) -#def b-extract (A : _b U) (x : _b A)+#def b-extract (A :_b U) (x :_b A) : A := x -#def b-map (A B : _b U) (f : _b A → B)- : <| _b | A |> → <| _b | B |>- := \ (x : _b A) → mod _b (f x)+#def b-map (A B :_b U) (f :_b A → B)+ : (x :_b A) → _b B+ := \ (x :_b A) → mod _b (f x) -#def b-dup (A : _b U) (x : _b A)- : <| _b | <| _b | A |> |>+#def b-dup (A :_b U) (x :_b A)+ : _b (_b A) := mod _b (mod _b x) -#def op-map (A B : _op U) (f : _op A → B)- : <| _op | A |> → <| _op | B |>- := \ (x : _op A) → mod _op (f x)+#def op-map (A B :_op U) (f :_op A → B)+ : (x :_op A) → _op B+ := \ (x :_op A) → mod _op (f x) -#def double-op (A : U) (x : <| _op | <| _op | A |> |>)+#def double-op (A : U) (x : _op (_op A)) : A := let mod _op x_1 := x in let mod _op / _op x_2 := x_1 in x_2 -#def sharp-join (A : U) (a : <| _# | <| _# | A |> |>)- : <| _# | A |>+#def sharp-join (A : U) (a : _# (_# A))+ : _# A := let mod _# x_1 := a in let mod _# / _# x_2 := x_1 in mod _# x_2 -#def flat-to-sharp (A : _b U) (x : _b A)- : <| _# | A |>+#def flat-to-sharp (A :_b U) (x :_b A)+ : _# A := mod _# x #def id-pure (A : U) (x : A)- : <| _id | A |>+ : _id A := mod _id x #def id-map (A B : U) (f : A → B)- : <| _id | A |> → <| _id | B |>- := \ (x : _id A) → mod _id (f x)+ : (x :_id A) → _id B+ := \ (x :_id A) → mod _id (f x) -#def id-join (A : U) (a : <| _id | <| _id | A |> |>)- : <| _id | A |>+#def id-join (A : U) (a : _id (_id A))+ : _id A := let mod _id x_1 := a in let mod _id / _id x_2 := x_1 in mod _id x_2 -#def op-op-is-id (A : U) (x : <| _op | <| _op | A |> |>)- : <| _id | A |>+#def op-op-is-id (A : U) (x : _op (_op A))+ : _id A := let mod _op x_1 := x in let mod _op / _op x_2 := x_1 in mod _id x_2++-- comp(Flat, Op) = Flat: flat var stays accessible inside op-under-flat+#def flat-op-chain (A :_b U) (x :_b A)+ : _op (_b A)+ := mod _op (mod _b x)++-- comp(Sharp, Op) = Sharp: plain var stays accessible inside op-under-sharp+#def sharp-op-chain (A : U) (x : A)+ : _op (_# A)+ := mod _op (mod _# x)++-- Flat tope accessible at plain level with boundary+#def test-flat-tope-to-plain+ (A :_b U)+ (a :_b A)+ : (i :_b 2 | i === 0_2) -> A [ i === 0_2 |-> a ]+ := \ i -> a++-- recOR under flat: LEM covers 2+#def test-recOR-flat+ (A :_b U)+ (a b :_b A)+ : (i :_b 2) -> A+ := \(i :_b 2) -> recOR( i === 0_2 |-> a , i === 1_2 |-> b )++-- Flat accessible under sharp chain+#def test-sharp-from-flat-chain+ (A :_b U)+ (a :_b A)+ : (i :_b 2 | i === 0_2) -> _# A+ := \ i -> mod _# a++-- LEQ recOR under flat+#def test-flat-leq-recOR+ (A :_b U)+ (a :_b A)+ : (i :_b 2) -> A+ := \ (i :_b 2) -> recOR( i <= 0_2 |-> a, 0_2 <= i |-> a)++-- Disjunction restriction under flat+#def test-flat-disjunction-cover+ (A :_b U)+ (a b :_b A)+ : (i :_b 2 | (i === 0_2) \/ (i === 1_2)) -> A+ := \ (i :_b 2) -> recOR( i === 0_2 |-> a , i === 1_2 |-> b )++-- Conjunction split under flat+#def test-flat-conjunction-split+ (A :_b U)+ (a :_b A)+ : (i :_b 2 | i === 0_2) -> (j :_b 2 | j === 0_2) -> A+ := \ i j -> a++-- Product cube face under flat+#def test-flat-product-face+ (A :_b U)+ (a :_b A)+ : (ts :_b (2 * 2) | first ts === 0_2) -> A+ := \ ts -> a++-- Symmetry through saturation: (0 === i) => (i === 0)+#def test-flat-symmetry+ (A :_b U)+ (a :_b A)+ : (i :_b 2 | 0_2 === i) -> A [ i === 0_2 |-> a ]+ := \ i -> a++-- Transitivity under flat: (i === j) /\ (j === 0) => (i === 0)+#def test-flat-transitivity+ (A :_b U)+ (a :_b A)+ (i j :_b 2)+ : (i :_b 2 | (i === j) /\ (j === 0_2)) -> A [ i === 0_2 |-> a ]+ := \ _ -> a++-- Plain tope entails _# goal+#def test-solve-sharp-goal+ (A : U)+ (a : A)+ : (i : 2 | i === 0_2) -> _# Unit+ := \ i -> mod _# unit++-- Nested modal goal: _# (_b A)+#def test-solve-nested-modal-goal+ (A :_b U)+ (a :_b A)+ : _# (_b A)+ := mod _# (mod _b a)++-- Op var with extension boundary+#def test-op-var-boundary+ (A :_op U)+ (a :_op A)+ (i :_op 2)+ : (i :_op 2 |_op (i === 0_2)) -> (_op A) [ _op (i === 0_2) |-> (mod _op a) ]+ := \ _ -> (mod _op a)++-- _op var accessible under _op restriction+#def test-op-goal-with-op-var+ (A :_op U)+ (a :_op A)+ (i :_op 2)+ : (i :_op 2 | (_op (i === 0_2))) -> _op A+ := \ _ -> mod _op a++-- ============ Extension types under modalities ============++-- recOR with <= under mod _#: endpoint LEQs always solvable+#def test-sharp-tope-boundary+ (A : U) (a : A)+ : (t : 2) -> _# A+ := \ t -> mod _# (recOR( 0_2 <= t |-> a , t <= 1_2 |-> a ))++-- Sharp extension with boundary+#def test-sharp-extension+ (A : U)+ (a : A)+ : (i : 2) -> (_# A) [ i === 0_2 |-> mod _# a , i === 1_2 |-> mod _# a ]+ := \(i : 2) -> mod _# (recOR( 0_2 <= i |-> a , i <= 1_2 |-> a ))++-- Extension under flat with boundary+#def test-flat-extension-boundary+ (A :_b U)+ (a b :_b A)+ : (i :_b 2) -> A [ i === 0_2 |-> a , i === 1_2 |-> b ]+ := \(i :_b 2) -> recOR( i === 0_2 |-> a , i === 1_2 |-> b )++-- Constant path under flat+#def test-flat-const-path+ (A :_b U)+ (a :_b A)+ : (i :_b 2) -> A [ i === 0_2 |-> a , i === 1_2 |-> a ]+ := \(i :_b 2) -> a++-- Flat tope with sharp return type and boundary+#def test-flat-tope-sharp-boundary+ (A :_b U) (a :_b A)+ (i :_b 2)+ : (i :_b 2 | i === 0_2) -> _# A [ i === 0_2 |-> mod _# a ]+ := \ _ -> mod _# a++-- Mixed flat + plain variables in extension+#def test-mixed-flat-plain-vars+ (A :_b U)+ (a :_b A)+ (i :_b 2)+ (j : 2)+ : (i :_b 2 | (i === 0_2) /\ (j === 0_2)) -> A+ := \ _ -> a++-- Flat double-wrap with boundary+#def test-flat-double-wrap-boundary+ (A :_b U) (a :_b A) (i :_b 2)+ : (i :_b 2 | i === 0_2) -> _b (_b A) [ i === 0_2 |-> mod _b (mod _b a) ]+ := \ _ -> mod _b (mod _b a)++-- Flat to sharp chain with tope+#def test-flat-to-sharp-with-tope+ (A :_b U) (a :_b A) (i :_b 2)+ : (i :_b 2 | i === 0_2) -> _# (_# A)+ := \ _ -> mod _# (mod _# a)++-- ============ Manual conversions ============++-- Manual conversion: (x :_# A) → B to (_# A) → B+#def sharp-modal-to-explicit+ (A : U) (B : U) (f : (x :_# A) -> B)+ : (_# A) -> B+ := \ y -> let mod _# z := y in f z++-- Manual conversion: (_# A) → B to (x :_# A) → B+#def sharp-explicit-to-modal+ (A : U) (B : U) (f : (_# A) -> B)+ : (x :_# A) -> B+ := \ (x :_# A) -> f (mod _# x)++-- Manual conversion: (x :_op A) → B to (_op A) → B+#def op-modal-to-explicit+ (A :_op U) (B : U) (f : (x :_op A) -> B)+ : (_op A) -> B+ := \ y -> let mod _op z := y in f z++-- Manual conversion: (_op A) → B to (x :_op A) → B+#def op-explicit-to-modal+ (A :_op U) (B : U) (f : (_op A) -> B)+ : (x :_op A) -> B+ := \ (x :_op A) -> f (mod _op x)++-- Manual conversion: (x :_id A) → B to (_id A) → B+#def id-modal-to-explicit+ (A : U) (B : U) (f : (x :_id A) -> B)+ : (_id A) -> B+ := \ y -> let mod _id z := y in f z++-- Manual conversion: (_id A) → B to (x :_id A) → B+#def id-explicit-to-modal+ (A : U) (B : U) (f : (_id A) -> B)+ : (x :_id A) -> B+ := \ (x :_id A) -> f (mod _id x)++-- Manual conversion: (x :_b A) → B to (_b A) → B+#def flat-modal-to-explicit+ (A :_b U) (B : U) (f : (x :_b A) -> B)+ : (_b A) -> B+ := \ y -> let mod _b z := y in f z++-- Manual conversion: (_b A) → B to (x :_b A) → B+#def flat-explicit-to-modal+ (A :_b U) (B : U) (f : (_b A) -> B)+ : (x :_b A) -> B+ := \ (x :_b A) -> f (mod _b x)++-- ============ RA letmod commutativity ============++-- Sharp letmod commutes (RA)+#def sharp-letmod-commute+ (A : U) (B : U)+ (x : _# A) (y : _# B)+ : (let mod _# a := x in let mod _# b := y in mod _# (a))+ = (let mod _# b := y in let mod _# a := x in mod _# (a))+ := refl++-- Op letmod commutes (RA)+#def op-letmod-commute+ (A :_op U) (B :_op U)+ (x : _op A) (y : _op B)+ : (let mod _op a := x in let mod _op b := y in mod _op (a))+ = (let mod _op b := y in let mod _op a := x in mod _op (a))+ := refl++-- Id letmod commutes (RA)+#def id-letmod-commute+ (A : U) (B : U)+ (x : _id A) (y : _id B)+ : (let mod _id a := x in let mod _id b := y in mod _id (a))+ = (let mod _id b := y in let mod _id a := x in mod _id (a))+ := refl++-- ============ Modal eta: mod m (extract a) = a ============++-- Sharp eta+#def sharp-eta+ (A : U) (x : _# A)+ : (let mod _# a := x in mod _# a) = x+ := refl++-- Op eta+#def op-eta+ (A :_op U) (x : _op A)+ : (let mod _op a := x in mod _op a) = x+ := refl++-- Id eta+#def id-eta+ (A : U) (x : _id A)+ : (let mod _id a := x in mod _id a) = x+ := refl
+ test/typecheck/cases/happy-modal-flat-recOR-under-op.expect.yaml view
@@ -0,0 +1,1 @@+status: ok
+ test/typecheck/cases/happy-modal-flat-recOR-under-op.rzk view
@@ -0,0 +1,9 @@+#lang rzk-1++-- Flat var under op: values accessible even in topes+#def flat-recOR-under-op+ (A :_b U)+ (a b :_b A)+ (i :_b 2)+ : _op A+ := mod _op (recOR( i === 0_2 |-> a , i === 1_2 |-> b ))
+ test/typecheck/cases/happy-modal-flat-under-op.expect.yaml view
@@ -0,0 +1,1 @@+status: ok
+ test/typecheck/cases/happy-modal-flat-under-op.rzk view
@@ -0,0 +1,7 @@+#lang rzk-1++-- Flat var are accessible under op+#def flat-under-op+ (A :_b U) (a :_b A)+ : _op A+ := mod _op a
test/typecheck/cases/happy-modal-inv.rzk view
@@ -1,13 +1,56 @@ #lang rzk-1 --- Simplest test: phi_op should unify with the inverted tope--- so refl typechecks if the substitution is correct- #compute-nf inv_op (0_2 === 0_2) +-- inv flips endpoint: inv_op(i === 0) = mod _op (flip(i) === 1) #def test-lt-mod-inv ( i : 2)- : let mod _op q := invᵒᵖ (i ≡ 0₂) in let mod _op fi := flip_op i in <| _op | (q = (fi === 1_2)) |>+ : let mod _op q := invᵒᵖ (i ≡ 0₂) in let mod _op fi := flip_op i in _op (q = (fi === 1_2)) := mod _op refl +#def test-inv-endpoint-one+ (i : 2)+ : let mod _op q := inv_op (i === 1_2) in+ let mod _op fi := flip_op i in+ _op (q = (fi === 0_2))+ := mod _op refl +-- uninv(inv(phi)) = phi+#def test-inv-uninv-cancel+ (i : 2)+ : uninv_op (inv_op (i === 0_2)) = (i === 0_2)+ := refl++-- inv(uninv(mod _op phi)) = mod _op phi+#def test-uninv-inv-cancel+ (i : 2)+ : let mod _op fi := flip_op i in+ inv_op (uninv_op (mod _op (fi === 0_2))) = mod _op (fi === 0_2)+ := refl++-- inv distributes over conjunction+#def test-inv-distributes-and+ (i j : 2)+ : let mod _op q := inv_op ((i === 0_2) /\ (j === 1_2)) in+ let mod _op fi := flip_op i in+ let mod _op fj := flip_op j in+ _op (q = ((fi === 1_2) /\ (fj === 0_2)))+ := mod _op refl++-- inv/uninv on TOP and BOT (bug catchers: stuck without nfTope fix)++#def test-inv-top+ : let mod _op q := (inv_op TOP) in _op (q = TOP)+ := mod _op refl++#def test-inv-bot+ : let mod _op q := inv_op BOT in _op (q = BOT)+ := mod _op refl++#def test-uninv-top+ : uninv_op (mod _op TOP) = TOP+ := refl++#def test-uninv-bot+ : uninv_op (mod _op BOT) = BOT+ := refl
+ test/typecheck/cases/happy-modal-tope-unwrap.expect.yaml view
@@ -0,0 +1,6 @@+status: ok+regression_for:+ - modal-tope-unwrap+ - flat-implies-plain+ - plain-implies-sharp+
+ test/typecheck/cases/happy-modal-tope-unwrap.rzk view
@@ -0,0 +1,33 @@+#lang rzk-1++-- Test logical relationships between modal topes and plain topes.++-- 1. _op phi and uninv_op(phi) are equivalent:+-- given _op phi we can derive uninv_op(phi), and vice versa.++#def test-op-unwrap-to-uninv+ (i : 2)+ : let mod _op q := inv_op (i === 0_2) in+ let mod _op fi := flip_op i in+ _op (q = (fi === 1_2))+ := mod _op refl++-- 2. _b phi implies phi:+-- a flat-restricted extension type is a subtype of the plain-restricted one.+-- If i :_b 2, the tope (i === 0_2) is flat-accessible, so the restriction holds.++#def test-flat-implies-plain+ (A :_b U)+ (a :_b A)+ : (i :_b 2 | i === 0_2) -> A [i === 0_2 |-> a]+ := \ i -> a++-- 3. phi implies _# phi:+-- a plain tope can be lifted into a sharp-modal tope.++#def test-plain-implies-sharp+ (A : U)+ (a : A)+ : (i : 2 | i === 0_2) -> _# A+ := \ i -> mod _# a+
+ test/typecheck/cases/happy-modal-topes.expect.yaml view
@@ -0,0 +1,1 @@+status: ok
+ test/typecheck/cases/happy-modal-topes.rzk view
@@ -0,0 +1,195 @@+#lang rzk-1++-- ============ Modal topes in restrictions ============++-- _#(t === 0) in restriction, accessible under mod _#+#def test-sharp-from-plain+ (i : 2)+ (A : U)+ (a : A)+ (p : (t : 2 | t === 0_2) -> A [ t === 0_2 |-> a ])+ : (t : 2 | _# (t === 0_2)) -> (_# A) [t === 0_2 |-> mod _# a]+ := \ t -> mod _# (p t)++-- Plain LEQ + _#(EQ): both accessible under mod _# (coe(Id, Sharp) = True)+#def test-cross-modality-sharp-accessible+ (A :_# U) (a :_# A)+ (j k : 2)+ : (i : 2 | (i <= j) /\ _# (k === 0_2)) -> _# A+ := \ i -> mod _# (recOR( (i <= j) /\ (k === 0_2) |-> a ))++-- _#(_# phi) = _# phi: sharp tope idempotent, with extension type+#def test-sharp-tope-idempotent-under-sharp+ (A : U) (a : A)+ (p : (i : 2 | i === 0_2) -> A [ i === 0_2 |-> a ])+ : (i : 2 | _# (_# (i === 0_2))) -> (_# A) [ i === 0_2 |-> mod _# a ]+ := \ i -> mod _# (p i)++-- _b(phi) in restriction: _b(phi) => phi, with extension type+#def test-flat-tope-in-restriction+ (A :_b U) (a :_b A)+ (p : (i :_b 2 | i === 0_2) -> A [ i === 0_2 |-> a ])+ : (i :_b 2 | _b (i === 0_2)) -> A [ i === 0_2 |-> a ]+ := \ i -> p i++-- _b(_b phi) => _b phi ^ _b(phi) => phi: flat tope idempotent, with extension type+#def test-flat-tope-idempotent+ (A :_b U) (a :_b A)+ (p : (i :_b 2 | _b ( _b (i === 0_2))) -> A [ i === 0_2 |-> a ])+ : (i :_b 2 | _b (i === 0_2)) -> A [ (i === 0_2) |-> a ]+ := \ i -> p i++-- _#(phi) => _#(_#(phi)): sharp tope expansion+#def test-sharp-tope-expand+ (A : U) (a : A)+ (p : (i : 2 | _# (_# (i === 0_2))) -> (_# A) [ i === 0_2 |-> mod _# a ])+ : (i : 2 | _# (i === 0_2)) -> (_# A) [ i === 0_2 |-> mod _# a ]+ := \ i -> p i++-- _b(_b(phi)) => _b(phi): flat tope collapse+#def test-flat-tope-collapse+ (A :_b U) (a :_b A)+ (p : (i :_b 2 | _b (i === 0_2)) -> A [ i === 0_2 |-> a ])+ : (i :_b 2 | _b (_b (i === 0_2))) -> A [ i === 0_2 |-> a ]+ := \ i -> p i++-- ============ Contradiction / recBOT under modalities ============++-- _#(i===0) /\ _#(i===1) → BOT under _#+#def test-sharp-tope-contradiction-under-sharp+ (A : U) (i : 2)+ : (i : 2 | _# (i === 0_2) /\ _# (i === 1_2)) -> _# A+ := \ _ -> mod _# recBOT++-- _op(i===0) /\ _op(i===1) → BOT at plain+#def test-op-bot-entails-bot+ (A : U)+ : (i :_op 2 | _op (i === 0_2) /\ _op (i === 1_2)) -> A+ := \ _ -> recBOT++-- Plain contradiction under _b. The tope context (i === 0_2) /\ (i === 1_2) is+-- contradictory, so BOT is derivable; and BOT |- _b BOT by the absurd rule of BOT+-- (this holds for BOT specifically, NOT for an arbitrary tope phi -- there is no+-- unit id => _b). Saturation therefore produces _b BOT, which is accessible under+-- the _b lock (coe Flat Flat), and _b BOT |- BOT by the counit, so mod _b recBOT+-- is legal. (Contrast _# BOT, which does NOT entail plain BOT -- coe Sharp Id is+-- False -- see ill-modal-sharp-bot-not-bot.)+#def test-contradiction-under-flat+ (A :_b U) (i : 2)+ : (i : 2 | (i === 0_2) /\ (i === 1_2)) -> _b A+ := \ _ -> mod _b recBOT++-- Contradiction survives entering _op via saturation+#def test-contradiction-survives-under-op+ (A :_op U) (i : 2)+ : (i : 2 | (i === 0_2) /\ (i === 1_2)) -> _op A+ := \ _ -> mod _op recBOT++-- Contradiction survives entering _#+#def test-contradiction-survives-under-sharp+ (A : U) (i : 2)+ : (i : 2 | (i === 0_2) /\ (i === 1_2)) -> _# A+ := \ _ -> mod _# recBOT++-- Double _op returns topes to accessible+#def test-double-op-entails-bottom+ (i : 2)+ : (i : 2 | (i === 0_2) /\ (i === 1_2)) -> _op (_op Unit)+ := \ _ -> mod _op (mod _op recBOT)++-- Nested _#: plain topes directly accessible under sharp+#def test-nested-sharp-entails-bottom+ (A : U) (i : 2)+ : (i : 2 | (i === 0_2) /\ (i === 1_2)) -> _# (_# A)+ := \ _ -> mod _# (mod _# recBOT)++-- Flat var contradiction under _#+#def test-flat-var-contradiction-under-sharp+ (A :_b U) (i :_b 2)+ : (i :_b 2 | (i === 0_2) /\ (i === 1_2)) -> _# A+ := \ _ -> mod _# recBOT++-- Flat contradiction in extension+#def test-flat-contradiction-extension+ (A : U)+ (i :_b 2)+ : (i :_b 2 | (i === 0_2) /\ (i === 1_2)) -> A+ := \ _ -> recBOT++-- _b(i===0) /\ (i===1) → BOT+#def test-flat-and-plain-bot+ (A : U)+ (i :_b 2)+ : (i :_b 2 | (_b (i === 0_2)) /\ (i === 1_2)) -> A+ := \ _ -> recBOT++-- Mixed _# + plain topes: transitivity derives contradiction under _#+#def test-mixed-sharp-plain-contradiction-under-sharp+ (A : U) (i j : 2)+ : (i : 2 | _# ((i === 0_2) /\ (j === 1_2)) /\ (i === j)) -> _# A+ := \ _ -> mod _# recBOT++-- ============ Saturation under modalities ============++-- LEQ antisymmetry under _op: (i<=0) /\ (0<=i) => i===0+#def test-leq-saturation-under-op+ (A :_op U) (a :_op A)+ (p : (i :_op 2 | _op (i === 0_2)) -> _op A [ _op (i === 0_2) |-> mod _op a ])+ : (i :_op 2 | _op ((i <= 0_2) /\ (0_2 <= i))) -> _op A [ _op (i === 0_2) |-> mod _op a ]+ := \i -> p i ++-- EQ transitivity under _op: (i===j) /\ (j===0) => i===0+#def test-transitivity-under-op+ (A :_op U) (a :_op A)+ (i j :_op 2)+ (p : (i :_op 2 | _op (i === 0_2)) -> _op A [ _op (i === 0_2) |-> mod _op a ])+ : (i :_op 2 | (_op (i === j)) /\ (_op (j === 0_2))) -> _op A [ _op (i === 0_2) |-> mod _op a ]+ := \ i -> p i++-- LEQ antisymmetry under _#+#def test-leq-saturation-under-sharp+ (A :_b U) (a :_b A)+ (p : (i : 2 | i === 0_2) -> A [ i === 0_2 |-> a ])+ : (i : 2 | (i <= 0_2) /\ (0_2 <= i)) -> _# A [ i === 0_2 |-> mod _# a ]+ := \ i -> mod _# (p i)++-- Transitivity across modalities: flat+plain vars, (i === j) /\ (j === 0) => i === 0+#def test-mixed-transitivity-under-flat+ (A :_b U)+ (a :_b A)+ (i :_b 2)+ (j :_b 2)+ (p : (i :_b 2 | i === 0_2) -> A [ i === 0_2 |-> a ])+ : (i :_b 2 | (_b (i === j)) /\ (j === 0_2)) -> A [ i === 0_2 |-> a ]+ := \ i -> p i++#def test-mixed-transitivity-under-sharp+ (A :_b U)+ (a :_b A)+ (i :_# 2)+ (j : 2)+ (p : (i :_b 2 | i === 0_2) -> A [ i === 0_2 |-> a ])+ : (i :_b 2 | (_# (i === j)) /\ (j === 0_2)) -> _# A [ i === 0_2 |-> mod _# a ]+ := \ i -> mod _# (p i)++-- ============ Inv/uninv saturation ========================++#def with-inversed-tope + (A : U) + (a : A) + : (t : 2) -> A + := \ t -> recOR (0_2 <= t |-> a, let mod _op ft := flip_op t in (_op (0_2 <= ft)) |-> a)++#def with-inv-op-tope + (A : U) + (a : A) + : (t : 2) -> A + := \ t -> recOR (0_2 <= t |-> a, let mod _op inv_t := inv_op (t <= 1_2) in (_op inv_t) |-> a)++#def discrete-inversed-eliminator + (A : U) + (a : A) + : (t :_b 2) -> A + := \ (t :_b 2) -> recOR (0_2 === t |-> a, let mod _op ft := flip_op t in (_op (ft === 0_2)) |-> a)++
+ test/typecheck/cases/happy-op-hom-to-hom.expect.yaml view
@@ -0,0 +1,1 @@+status: ok
+ test/typecheck/cases/happy-op-hom-to-hom.rzk view
@@ -0,0 +1,13 @@+#lang rzk-1++-- Test: reversing the direction of a morphism using _op modality+-- This requires the tope solver to derive extract(flip_op t) === 1_2+-- from t === 0_2 (and vice versa) when entering mod _op in solveRHSM.++#def op-hom-to-hom+ ( B :_op U)+ ( x :_op B)+ ( y :_op B)+ ( h :_op (t : 2) -> B [ t === 0_2 |-> x , t === 1_2 |-> y ])+ : ( ( t : 2) -> _op B [ t === 0_2 |-> mod _op y , t === 1_2 |-> mod _op x ])+ := \ t -> let mod _op s := flip_op t in mod _op (h s)
+ test/typecheck/cases/happy-recbot-term-wellformed.expect.yaml view
@@ -0,0 +1,3 @@+status: ok+regression_for:+ - recBOT-term-well-formed-accepted
+ test/typecheck/cases/happy-recbot-term-wellformed.rzk view
@@ -0,0 +1,12 @@+#lang rzk-1++-- Well-formed terms under an absurd tope context are still accepted: the check only+-- rejects terms that are ill-typed in their own right, not vacuous definitions.++-- `recBOT` is well-typed when the context entails ⊥.+#define okRecBot (A : U) (t : 2 | (t === 0_2) /\ (t === 1_2)) : A+ := recBOT++-- A well-typed application under the same absurd context.+#define okRecBotApp (A : U) (g : A -> A) (a : A) (t : 2 | (t === 0_2) /\ (t === 1_2)) : A+ := g a
+ test/typecheck/cases/happy-recor-guard-exceeds-context.expect.yaml view
@@ -0,0 +1,3 @@+status: ok+regression_for:+ - recOR-requires-coverage-not-containment
+ test/typecheck/cases/happy-recor-guard-exceeds-context.rzk view
@@ -0,0 +1,12 @@+#lang rzk-1++-- `recOR` requires its branch guards to COVER the local tope context+-- (`context ⊢ ⋁ guards`), not to be contained in it. A guard may strictly exceed+-- the context, as long as the guards together still cover it.++#define u : U := Unit -> Unit++-- The single guard `t ≡ 0 ∨ t ≡ 1` strictly exceeds the context `t ≡ 0`, but it+-- covers it, so the case split is well-typed.+#define guardExceedsContext (t : 2 | t === 0_2) : U+ := recOR( (t === 0_2) \/ (t === 1_2) |-> u )
+ test/typecheck/cases/happy-recor-split-simplex-overhang.expect.yaml view
@@ -0,0 +1,3 @@+status: ok+regression_for:+ - recOR-overhang-simplex-total-order-split
+ test/typecheck/cases/happy-recor-split-simplex-overhang.rzk view
@@ -0,0 +1,22 @@+#lang rzk-1++-- Overhang is useful for reusing already-defined shapes. Here we split the+-- 2-simplex Δ² = { (t , s) : 2 × 2 | s ≤ t } into its two halves by the total-order+-- topes `t ≤ s` and `s ≤ t`. These topes are defined on the whole square, not+-- relativised to Δ², so the guard `t ≤ s` overhangs Δ² (its overlap with the+-- context is the diagonal `t ≡ s`). The two guards still cover Δ², so the case+-- split is well-typed; only a non-fatal overhang warning is emitted.+--+-- Being able to write the global total-order topes directly — rather than+-- intersecting each with Δ² by hand — is exactly what overhang support buys us.+-- This mirrors `join-square-arrow` / `meet-square-arrow` (RS17 Proposition 3.5) in+-- sHoTT, which split by the same topes over the full square 2 × 2.++#def Δ² : (2 * 2) -> TOPE+ := \ (t , s) -> s <= t++#define split-2simplex+ ( A : U)+ ( f : (2 * 2) -> A)+ : ( (t , s) : Δ²) -> A+ := \ (t , s) -> recOR ( t <= s |-> f (t , s) , s <= t |-> f (t , s) )
+ test/typecheck/cases/happy-restrict-face-not-contained.expect.yaml view
@@ -0,0 +1,3 @@+status: ok+regression_for:+ - restricted-type-face-need-not-be-contained
+ test/typecheck/cases/happy-restrict-face-not-contained.rzk view
@@ -0,0 +1,16 @@+#lang rzk-1++-- Restriction faces need not lie within the local tope context. The checker+-- constrains the term only on `context ∧ face`, so a face that overhangs the+-- context (extends beyond it while still overlapping) is allowed. Following+-- Riehl–Shulman, there is no requirement that the face be contained in (entailed+-- by) the context. Overhang only triggers a non-fatal warning.+--+-- (A face *disjoint* from the context is a different matter: it is vacuous and is+-- rejected — see `ill-restrict-face-disjoint`.)++-- The face `first t ≡ 0 ∨ second t ≡ 0` strictly exceeds the context `first t ≡ 0`,+-- yet overlaps it (on `first t ≡ 0`). The restriction is checked on the overlap.+#define faceOverhang (t : 2 * 2 | first t === 0_2)+ : Unit [ (first t === 0_2) \/ (second t === 0_2) |-> unit ]+ := unit
test/typecheck/cases/happy-tope-rec-and-restrict.expect.yaml view
@@ -1,5 +1,5 @@ status: ok regression_for:- - contextEquiv-recOR-disjunctive-shape+ - contextEntailsUnion-recOR-disjunctive-shape - contextEntails-recBOT-under-contradiction - contextEntailedBy-TypeRestricted-TOP
test/typecheck/cases/happy-tope-rec-and-restrict.rzk view
@@ -1,6 +1,7 @@ #lang rzk-1 --- `recOR` with a disjunctive shape so `contextEquiv` matches the union of branch guards.+-- `recOR` with a disjunctive shape so `contextEntailsUnion` is satisfied: the context is+-- covered by the union of branch guards. #define u : U := Unit -> Unit #define happyRecOrBoundary (t : 2 | (t === 0_2) \/ (t === 1_2)) : U@@ -10,6 +11,6 @@ #define happyRecBotContradiction (t : 2 | (t === 0_2) /\ (t === 1_2)) : U := recBOT --- Trivial restriction (always `contextEntailedBy` from `TOP`).+-- Trivial restriction on the `TOP` face: typechecks (the restriction holds everywhere). #define happyRestrictedUnitTrivial : Unit [ TOP |-> unit ] := unit
+ test/typecheck/cases/ill-hole-infer.expect.yaml view
@@ -0,0 +1,6 @@+status: error+error_tag: TypeErrorCannotInferHole+message_contains:+ - "cannot infer the type of a hole"+regression_for:+ - holes-inference-position
+ test/typecheck/cases/ill-hole-infer.rzk view
@@ -0,0 +1,6 @@+#lang rzk-1++-- A hole in inference position (here applied as a function) has no known type,+-- so it is reported rather than guessed (no metavariables).+#define f : (A : U) -> A -> A+ := \ A x -> ? x
+ test/typecheck/cases/ill-hole-pattern-binder-names.expect.yaml view
@@ -0,0 +1,8 @@+status: error+error_tag: TypeErrorUnsolvedHole+message_contains:+ - "found an unsolved hole"+ - "(a, b) : Σ (a : A), B a"+ - "B a"+regression_for:+ - restore-pattern-binder-names
+ test/typecheck/cases/ill-hole-pattern-binder-names.rzk view
@@ -0,0 +1,9 @@+#lang rzk-1++-- In strict mode the unsolved-hole error must render pattern-binder names: the+-- lambda destructures p as (a , b), so the goal B (first p) shows as B a (not+-- B (π₁ x)), and the binder appears in the context as (a , b), not a fresh+-- variable. Regression for the pattern-binder name restoration.+#define bad+ : (A : U) -> (B : A -> U) -> (p : Σ (a : A) , B a) -> B (first p)+ := \ A B (a , b) -> ?
+ test/typecheck/cases/ill-hole-recor-branch.expect.yaml view
@@ -0,0 +1,7 @@+status: error+error_tag: TypeErrorUnsolvedHole+message_contains:+ - "found an unsolved hole"+ - "A"+regression_for:+ - holes-recOR-branch-checking-position
+ test/typecheck/cases/ill-hole-recor-branch.rzk view
@@ -0,0 +1,10 @@+#lang rzk-1++-- A hole in a recOR branch is in checking position: the common type of the+-- recOR (here A) is pushed into every branch, so the branch holes are checked+-- against A. In the default (strict) mode this is reported as an unsolved hole.+-- Before the recOR checking rule existed, the recOR was elaborated by inference+-- and a bare hole branch failed with TypeErrorCannotInferHole instead.+#define square (A : U) (a : A)+ : (2 × 2) → A+ := \ (t , s) → recOR ( t ≤ s ↦ ? , s ≤ t ↦ ? )
+ test/typecheck/cases/ill-hole-unsolved.expect.yaml view
@@ -0,0 +1,6 @@+status: error+error_tag: TypeErrorUnsolvedHole+message_contains:+ - "found an unsolved hole"+regression_for:+ - holes-strict-mode
+ test/typecheck/cases/ill-hole-unsolved.rzk view
@@ -0,0 +1,6 @@+#lang rzk-1++-- A hole in checking position is rejected in the default (strict) mode, so+-- finished work and CI never admit unfilled holes.+#define f : (A : U) -> A -> A+ := \ A a -> ?
+ test/typecheck/cases/ill-interval-no-totality.expect.yaml view
@@ -0,0 +1,4 @@+status: error+error_tag: TypeErrorTopeNotSatisfied+regression_for:+ - interval-no-total-order
+ test/typecheck/cases/ill-interval-no-totality.rzk view
@@ -0,0 +1,10 @@+#lang rzk-1++-- The interval I does NOT have a total order: we cannot case-split on+-- `t <= s \/ s <= t` for arbitrary I-points. This recOR should fail because+-- the tope solver cannot derive that the two guards cover the whole context.++#define no-total-I+ (t : II) (s : II)+ : Unit+ := recOR( t <= s |-> unit , s <= t |-> unit )
+ test/typecheck/cases/ill-interval-subtyping.expect.yaml view
@@ -0,0 +1,4 @@+status: error+error_tag: TypeErrorUnifyTerms+regression_for:+ - interval-no-subtype-II-to-2
+ test/typecheck/cases/ill-interval-subtyping.rzk view
@@ -0,0 +1,15 @@+#lang rzk-1++-- II is NOT a subtype of 2.+-- Trying to use a 2-arrow where an II-path is expected should fail.++#define cub-hom+ (A : U) (x y : A)+ : U+ := (t : II) -> A [ t === 0_I |-> x , t === 1_I |-> y ]++#define bad-2-to-II+ (A : U) (x y : A)+ (p : (t : 2) -> A [ t === 0_2 |-> x , t === 1_2 |-> y ])+ : cub-hom A x y+ := p
test/typecheck/cases/ill-modal-b-no-dist.expect.yaml view
@@ -1,4 +1,4 @@ status: error error_tag: TypeErrorUnaccessibleVar message_contains:- - "variable is not accessible"+ - "unaccessible var with modality"
test/typecheck/cases/ill-modal-b-no-dist.rzk view
@@ -1,11 +1,11 @@ #lang rzk-1 -#def b-extract (A : _b U) (x : _b A)+#def b-extract (A :_b U) (x :_b A) : A := x -#def ill-b-typed (A B : U) (f : A → <| _b | B |>)- : <| _b | A → B |>+#def ill-b-typed (A B : U) (f : A → _b B)+ : _b (A → B) := mod _b (\ (x : A) → b-extract B (f x))
+ test/typecheck/cases/ill-modal-flat-no-commute.expect.yaml view
@@ -0,0 +1,2 @@+status: error+error_tag: TypeErrorUnifyTerms
+ test/typecheck/cases/ill-modal-flat-no-commute.rzk view
@@ -0,0 +1,12 @@+#lang rzk-1++-- Flat letmod should NOT commute: flat is not RA,+-- so extract does not reduce and the two orderings+-- are not definitionally equal.++#def ill-flat-commute+ (A :_b U) (B :_b U)+ (x : _b A) (y : _b B)+ : (let mod _b a := x in let mod _b b := y in a)+ = (let mod _b b := y in let mod _b a := x in a)+ := refl
+ test/typecheck/cases/ill-modal-op-at-plain.expect.yaml view
@@ -0,0 +1,2 @@+status: error+error_tag: TypeErrorUnaccessibleVar
+ test/typecheck/cases/ill-modal-op-at-plain.rzk view
@@ -0,0 +1,7 @@+#lang rzk-1++-- Op var not accessible at plain level+#def ill-op-at-plain+ (A :_op U) (x :_op A)+ : A+ := x
− test/typecheck/cases/ill-modal-op-unaccessible.expect.yaml
@@ -1,4 +0,0 @@-status: error-error_tag: TypeErrorUnaccessibleVar-message_contains:- - "variable is not accessible"
− test/typecheck/cases/ill-modal-op-unaccessible.rzk
@@ -1,5 +0,0 @@-#lang rzk-1--#def bad-use-under-op (A : U) (x : A)- : <| _op | A |>- := mod _op x
+ test/typecheck/cases/ill-modal-op-under-flat.expect.yaml view
@@ -0,0 +1,2 @@+status: error+error_tag: TypeErrorUnaccessibleVar
+ test/typecheck/cases/ill-modal-op-under-flat.rzk view
@@ -0,0 +1,7 @@+#lang rzk-1++-- Op var not accessible under flat+#def ill-op-under-flat+ (A :_op U) (x :_op A)+ : _b A+ := mod _b x
+ test/typecheck/cases/ill-modal-plain-under-flat.expect.yaml view
@@ -0,0 +1,2 @@+status: error+error_tag: TypeErrorUnaccessibleVar
+ test/typecheck/cases/ill-modal-plain-under-flat.rzk view
@@ -0,0 +1,7 @@+#lang rzk-1++-- Plain var not accessible under flat+#def ill-plain-under-flat+ (A : U) (x : A)+ : _b A+ := mod _b x
+ test/typecheck/cases/ill-modal-plain-under-op.expect.yaml view
@@ -0,0 +1,2 @@+status: error+error_tag: TypeErrorUnaccessibleVar
+ test/typecheck/cases/ill-modal-plain-under-op.rzk view
@@ -0,0 +1,7 @@+#lang rzk-1++-- Plain var not accessible under op+#def ill-plain-under-op+ (A : U) (x : A)+ : _op A+ := mod _op x
+ test/typecheck/cases/ill-modal-recBOT-under-op-no-contradiction.expect.yaml view
@@ -0,0 +1,2 @@+status: error+error_tag: TypeErrorTopeNotSatisfied
+ test/typecheck/cases/ill-modal-recBOT-under-op-no-contradiction.rzk view
@@ -0,0 +1,7 @@+#lang rzk-1++-- recBOT under op without contradiction: tope not accessible+#def ill-recBOT-under-op-no-contradiction+ (A :_op U) (i : 2)+ : (i : 2 | i === 0_2) -> _op A+ := \ _ -> mod _op recBOT
+ test/typecheck/cases/ill-modal-sharp-at-plain.expect.yaml view
@@ -0,0 +1,2 @@+status: error+error_tag: TypeErrorUnaccessibleVar
+ test/typecheck/cases/ill-modal-sharp-at-plain.rzk view
@@ -0,0 +1,7 @@+#lang rzk-1++-- Sharp var not accessible at plain level+#def ill-sharp-at-plain+ (A :_# U) (x :_# A)+ : A+ := x
+ test/typecheck/cases/ill-modal-sharp-bot-not-bot.expect.yaml view
@@ -0,0 +1,2 @@+status: error+error_tag: TypeErrorTopeNotSatisfied
+ test/typecheck/cases/ill-modal-sharp-bot-not-bot.rzk view
@@ -0,0 +1,7 @@+#lang rzk-1++-- #BOT should not entail BOT: sharp tope is not accessible in plain context+#def sharp-bot-not-bot+ (A : U)+ : (t : 2 | _# BOT) -> A+ := \ _ -> recBOT
+ test/typecheck/cases/ill-modal-sharp-recOR-plain-var.expect.yaml view
@@ -0,0 +1,2 @@+status: error+error_tag: TypeErrorTopeNotSatisfied
+ test/typecheck/cases/ill-modal-sharp-recOR-plain-var.rzk view
@@ -0,0 +1,9 @@+#lang rzk-1++-- recOR under sharp: plain var's discrete axiom inaccessible+#def ill-sharp-recOR-plain-var+ (A :_# U)+ (a b :_# A)+ (i : 2)+ : _# A+ := mod _# (recOR( i === 0_2 |-> a , i === 1_2 |-> b ))
+ test/typecheck/cases/ill-modal-sharp-under-flat.expect.yaml view
@@ -0,0 +1,2 @@+status: error+error_tag: TypeErrorUnaccessibleVar
+ test/typecheck/cases/ill-modal-sharp-under-flat.rzk view
@@ -0,0 +1,7 @@+#lang rzk-1++-- Sharp var not accessible under flat+#def ill-sharp-under-flat+ (A :_# U) (x :_# A)+ : _b A+ := mod _b x
+ test/typecheck/cases/ill-modal-sharp-under-op.expect.yaml view
@@ -0,0 +1,2 @@+status: error+error_tag: TypeErrorUnaccessibleVar
+ test/typecheck/cases/ill-modal-sharp-under-op.rzk view
@@ -0,0 +1,7 @@+#lang rzk-1++-- Sharp var not accessible under op+#def ill-sharp-under-op+ (A :_# U) (x :_# A)+ : _op A+ := mod _op x
+ test/typecheck/cases/ill-modal-tope-cross-modality.expect.yaml view
@@ -0,0 +1,2 @@+status: error+error_tag: TypeErrorTopeNotSatisfied
+ test/typecheck/cases/ill-modal-tope-cross-modality.rzk view
@@ -0,0 +1,12 @@+#lang rzk-1++-- Plain LEQ becomes inaccessible under mod _b (coe(Id, Flat) = False),+-- while _b(EQ) stays accessible (coe(Flat, Flat) = True).+-- LEQ has no symmetry in saturation, so it cannot be re-derived.+-- Without mod _b, both parts are accessible and the recOR passes.++#def ill-cross-modality-leq-under-flat+ (A :_b U) (a :_b A)+ (j m :_b 2)+ : (i :_b 2 | (i <= j) /\ _# (m === 0_2)) -> _b A+ := \ (i :_b 2) -> mod _b (recOR( (i <= j) /\ (m === 0_2) |-> a ))
− test/typecheck/cases/ill-modal-unaccessible.expect.yaml
@@ -1,4 +0,0 @@-status: error-error_tag: TypeErrorUnaccessibleVar-message_contains:- - "variable is not accessible"
− test/typecheck/cases/ill-modal-unaccessible.rzk
@@ -1,5 +0,0 @@-#lang rzk-1--#def bad-use-under-flat (A : U) (x : A)- : <| _b | A |>- := mod _b x
+ test/typecheck/cases/ill-recbot-term-not-function.expect.yaml view
@@ -0,0 +1,4 @@+status: error+error_tag: TypeErrorNotFunction+regression_for:+ - recBOT-term-must-be-well-typed
+ test/typecheck/cases/ill-recbot-term-not-function.rzk view
@@ -0,0 +1,8 @@+#lang rzk-1++-- Under an absurd tope context the expected type collapses to recBOT, but the term+-- must still be well-typed in its own right, so that ill-formed bodies are not+-- silently admitted under a false hypothesis. Here the body `a a` applies the+-- non-function `a`, so it is rejected even though `t ≡ 0 ∧ t ≡ 1` is absurd.+#define illRecBotApp (A : U) (a : A) (t : 2 | (t === 0_2) /\ (t === 1_2)) : A+ := a a
+ test/typecheck/cases/ill-recbot-term-undefined.expect.yaml view
@@ -0,0 +1,4 @@+status: error+error_tag: TypeErrorUndefined+regression_for:+ - recBOT-term-must-be-well-typed
+ test/typecheck/cases/ill-recbot-term-undefined.rzk view
@@ -0,0 +1,6 @@+#lang rzk-1++-- An undefined variable must not be admitted under an absurd hypothesis either:+-- the body is checked for well-formedness before recBOT is accepted.+#define illRecBotUndefined (A : U) (t : 2 | (t === 0_2) /\ (t === 1_2)) : A+ := nonexistent
+ test/typecheck/cases/ill-recor-as-tope.expect.yaml view
@@ -0,0 +1,6 @@+status: error+error_tag: TypeErrorOther+message_contains:+ - "recOR cannot be used as a tope"+regression_for:+ - recOR-in-tope-layer-panic
+ test/typecheck/cases/ill-recor-as-tope.rzk view
@@ -0,0 +1,8 @@+#lang rzk-1++-- A recOR in another recOR's branch-guard (tope) position must be rejected as a+-- type error, not crash the tope-layer normaliser. Regression for the reported+-- "PANIC! Impossible happened (recOR in the tope layer)" (a recOR reaching+-- nfTope), surfaced by the Yoneda game.+#def bad (A : U) (a : A) : (2 × 2) → A+ := \ (t , s) → recOR ( recOR ( s ≤ t ↦ s ≤ t , t ≤ s ↦ t ≤ s ) ↦ a , ⊤ ↦ a )
+ test/typecheck/cases/ill-recor-coverage-required.expect.yaml view
@@ -0,0 +1,6 @@+status: error+error_tag: TypeErrorTopeNotSatisfied+message_contains:+ - "union of the topes"+regression_for:+ - recOR-coverage-required
+ test/typecheck/cases/ill-recor-coverage-required.rzk view
@@ -0,0 +1,12 @@+#lang rzk-1++-- Coverage is the sole tope obligation for `recOR`: the disjunction of branch+-- guards must entail (cover) the local tope context. Here the context is the+-- non-trivial boundary `t ≡ 0 ∨ t ≡ 1`, but the single guard `t ≡ 0` covers only+-- half of it, so `contextEntailsUnion` reports that the context is not covered by (does+-- not entail) the union of the guards.++#define u : U := Unit -> Unit++#define guardsUndercover (t : 2 | (t === 0_2) \/ (t === 1_2)) : U+ := recOR( t === 0_2 |-> u )
+ test/typecheck/cases/ill-recor-guard-disjoint.expect.yaml view
@@ -0,0 +1,4 @@+status: error+error_tag: TypeErrorTopeContextDisjoint+regression_for:+ - recOR-branch-guard-disjoint-from-context
+ test/typecheck/cases/ill-recor-guard-disjoint.rzk view
@@ -0,0 +1,9 @@+#lang rzk-1++-- A recOR branch guard disjoint from the local tope context is a dead branch: its+-- overlap with the context is ⊥, so the branch can never apply. This is rejected.+-- Here the guard `t ≡ 1` cannot hold in the context `t ≡ 0`.+#define u : U := Unit -> Unit++#define guardDisjoint (t : 2 | t === 0_2) : U+ := recOR( t === 1_2 |-> u, t === 0_2 |-> u )
+ test/typecheck/cases/ill-restrict-face-disjoint.expect.yaml view
@@ -0,0 +1,4 @@+status: error+error_tag: TypeErrorTopeContextDisjoint+regression_for:+ - restricted-type-face-disjoint-from-context
+ test/typecheck/cases/ill-restrict-face-disjoint.rzk view
@@ -0,0 +1,8 @@+#lang rzk-1++-- A restriction face disjoint from the local tope context is vacuous: its overlap+-- with the context is ⊥, so it constrains the term nowhere. Such a face is always+-- rejected (whereas a merely overhanging face is only warned about). Here the face+-- `t ≡ 1` cannot hold in the context `t ≡ 0`.+#define faceDisjoint (t : 2 | t === 0_2) : Unit [ t === 1_2 |-> unit ]+ := unit
test/typecheck/cases/ill-tope-nested-rec-or-inner-singleton-d4.expect.yaml view
@@ -1,5 +1,5 @@ status: error-error_tag: TypeErrorUnifyTerms+error_tag: TypeErrorUnify message_contains: - "cannot unify" regression_for:
test/typecheck/cases/ill-tope-nested-rec-or-inner-singleton-d4.rzk view
@@ -2,8 +2,8 @@ -- Ill counterpart to `happy-tope-nested-rec-or-d4.rzk`: **identical** nested binary `recOR` -- except the **rightmost leaf** along the all-`1₂` corner (`t0 ≡ 1₂`, …, `t3 ≡ 1₂`),--- where `u` is replaced by `unit`, so the branch infers `Unit` instead of `U` and--- `recOR` inference fails only after processing the full tree (see error at innermost branch).+-- where `u` is replaced by `unit`. The type-level `recOR` is checked against `U`, so+-- the bad leaf is caught directly when its `unit` (of type `Unit`) is checked against `U`. #define u : U := Unit
test/typecheck/cases/ill-tope-nested-rec-or-inner-singleton-d5.expect.yaml view
@@ -1,5 +1,5 @@ status: error-error_tag: TypeErrorUnifyTerms+error_tag: TypeErrorUnify message_contains: - "cannot unify" regression_for:
test/typecheck/cases/ill-tope-nested-rec-or-inner-singleton-d5.rzk view
@@ -2,8 +2,8 @@ -- Ill counterpart to `happy-tope-nested-rec-or-d5.rzk`: **identical** nested binary `recOR` -- except the **rightmost leaf** along the all-`1₂` corner (`t0 ≡ 1₂`, …, `t4 ≡ 1₂`),--- where `u` is replaced by `unit`, so the branch infers `Unit` instead of `U` and--- `recOR` inference fails only after processing the full tree (see error at innermost branch).+-- where `u` is replaced by `unit`. The type-level `recOR` is checked against `U`, so+-- the bad leaf is caught directly when its `unit` (of type `Unit`) is checked against `U`. #define u : U := Unit
test/typecheck/cases/ill-tope-nested-rec-or-inner-singleton-d6.expect.yaml view
@@ -1,5 +1,5 @@ status: error-error_tag: TypeErrorUnifyTerms+error_tag: TypeErrorUnify message_contains: - "cannot unify" regression_for:
test/typecheck/cases/ill-tope-nested-rec-or-inner-singleton-d6.rzk view
@@ -2,8 +2,8 @@ -- Ill counterpart to `happy-tope-nested-rec-or-d6.rzk`: **identical** nested binary `recOR` -- except the **rightmost leaf** along the all-`1₂` corner (`t0 ≡ 1₂`, …, `t5 ≡ 1₂`),--- where `u` is replaced by `unit`, so the branch infers `Unit` instead of `U` and--- `recOR` inference fails only after processing the full tree (see error at innermost branch).+-- where `u` is replaced by `unit`. The type-level `recOR` is checked against `U`, so+-- the bad leaf is caught directly when its `unit` (of type `Unit`) is checked against `U`. #define u : U := Unit
test/typecheck/cases/ill-tope-nested-rec-or-inner-singleton.expect.yaml view
@@ -1,6 +1,6 @@ status: error error_tag: TypeErrorTopeNotSatisfied message_contains:- - "equivalent to the union"+ - "union of the topes" regression_for:- - nested-recOR-contextEquiv-inner-singleton+ - nested-recOR-contextEntailsUnion-inner-singleton
test/typecheck/cases/ill-tope-nested-rec-or-inner-singleton.rzk view
@@ -1,7 +1,7 @@ #lang rzk-1 -- Inner `recOR` on `t2` must cover both endpoints while `t2 ≡ 0 ∨ t2 ≡ 1` holds.--- A singleton inner `recOR` leaves `contextEquiv` unsatisfied on the `t1 ≡ 0₂` face.+-- A singleton inner `recOR` leaves `contextEntailsUnion` unsatisfied on the `t1 ≡ 0₂` face. #define u : U := Unit
test/typecheck/cases/ill-tope-not-satisfied-rec-or-boundary-equiv.expect.yaml view
@@ -1,7 +1,7 @@ status: error error_tag: TypeErrorTopeNotSatisfied message_contains:- - "equivalent to the union"+ - "union of the topes" - "recOR" regression_for:- - contextEquiv-recOR-boundary+ - contextEntailsUnion-recOR-boundary
test/typecheck/cases/ill-tope-not-satisfied-rec-or-boundary-equiv.rzk view
@@ -1,8 +1,10 @@ #lang rzk-1 -- After the branches of `recOR`, the checker requires the local tope context to be--- equivalent to the disjunction of branch guard topes (`contextEquiv`).--- With only `⊤` on `t : 2`, the boundary `t ≡ 0 ∨ t ≡ 1` is not entailed.+-- covered by (to entail) the disjunction of branch guard topes (`contextEntailsUnion`).+-- With only `⊤` on `t : 2`, the boundary `t ≡ 0 ∨ t ≡ 1` is not entailed. The branches+-- are the type `Unit` (a valid type in U) so the type-level recOR is well-formed up to+-- the coverage obligation, which is what this fixture pins down. #define boundaryUnit (t : 2) : U- := recOR( t === 0_2 |-> unit, t === 1_2 |-> unit )+ := recOR( t === 0_2 |-> Unit, t === 1_2 |-> Unit )
test/typecheck/cases/ill-tope-not-satisfied-rec-or-open-singleton.expect.yaml view
@@ -1,6 +1,6 @@ status: error error_tag: TypeErrorTopeNotSatisfied message_contains:- - "equivalent to the union"+ - "union of the topes" regression_for:- - contextEquiv-recOR-singleton+ - contextEntailsUnion-recOR-singleton
test/typecheck/cases/ill-tope-not-satisfied-rec-or-open-singleton.rzk view
@@ -1,7 +1,7 @@ #lang rzk-1 --- Single-branch `recOR` on unrestricted `t : 2`: `contextEquiv` requires `⊤` to match--- `t ≡ 0₂ ∨ ⊥` (`contextEquiv` after `recOR`).+-- Single-branch `recOR` on unrestricted `t : 2`: `contextEntailsUnion` requires `⊤` to entail+-- `t ≡ 0₂ ∨ ⊥`, which fails (`contextEntailsUnion` after `recOR`). #define u : U := Unit -> Unit
+ test/typecheck/cases/ill-tope-pattern-binder-bare.expect.yaml view
@@ -0,0 +1,7 @@+status: error+error_tag: TypeErrorUndefined+message_contains:+ - "Local tope context:"+ - "Δ² (t, s)"+regression_for:+ - render-bare-pattern-point
+ test/typecheck/cases/ill-tope-pattern-binder-bare.rzk view
@@ -0,0 +1,11 @@+#lang rzk-1++-- A pattern-bound point used bare in a shape's membership tope must render as+-- the pattern (Δ² (t , s)) in a type error's local tope context, not as a fresh+-- variable (Δ² x₁). The undefined body forces an error whose context shows the+-- tope. Regression for the bare-pattern rendering fix.+#def Δ² : (2 × 2) → TOPE+ := \ (t , s) → s ≤ t++#def bad (A : U) (x : A) : ( ((t , s) : Δ²) → A )+ := \ (t , s) → nonexistent
+ test/typecheck/cases/ill-tope-recOR-non-discrete.expect.yaml view
@@ -0,0 +1,2 @@+status: error+error_tag: TypeErrorTopeNotSatisfied
+ test/typecheck/cases/ill-tope-recOR-non-discrete.rzk view
@@ -0,0 +1,13 @@+#lang rzk-1++-- recOR with === on a plain (non-flat) interval variable.+-- Only flat (_b) variables have discrete axioms (LEM: i === 0 ∨ i === 1).+-- A plain variable does not have LEM, so recOR with === 0 / === 1 is not total.++#def ill-recOR-non-discrete+ (A : U)+ (a b : A)+ (i : 2)+ : A+ := recOR( i === 0_2 |-> a , i === 1_2 |-> b )+
test/typecheck/cases/ill-tope-subtle-rec-or-5d-boundary.expect.yaml view
@@ -1,6 +1,6 @@ status: error error_tag: TypeErrorTopeNotSatisfied message_contains:- - "equivalent to the union"+ - "union of the topes" regression_for:- - contextEquiv-recOR-high-dim+ - contextEntailsUnion-recOR-high-dim
test/typecheck/cases/ill-tope-subtle-rec-or-5d-boundary.rzk view
@@ -1,7 +1,7 @@ #lang rzk-1 --- `recOR` requires the local tope context to match the disjunction of branch guards--- (`contextEquiv`: local Φ must be equivalent to the disjunction of branch guards).+-- `recOR` requires the local tope context to be covered by the disjunction of branch guards+-- (`contextEntailsUnion`: local Φ must entail the disjunction of branch guards). -- On the full 5-cube only `⊤` holds, so -- pinning the *first* coordinate to `0₂` or `1₂` is not entailed (interior points).
+ test/typecheck/cases/uses-whnf-discarded.expect.yaml view
@@ -0,0 +1,3 @@+status: ok+regression_for:+ - uses-checks-key-off-actual-term-not-whnf
+ test/typecheck/cases/uses-whnf-discarded.rzk view
@@ -0,0 +1,18 @@+#lang rzk-1++-- An assumption whose only occurrence sits in a redex that weak head+-- normalisation discards (here the argument to a constant function) is still+-- a genuine use: the section unused-variable check must see the term the user+-- wrote, not its WHNF. Before the fix, `b` was reported as an unused variable.++#section sec-whnf-discarded++#variable A : U+#variable a : A+#variable b : A++#define pick+ : A+ := (\ (_ : A) → a) b++#end sec-whnf-discarded
+ test/typecheck/cases/uses-whnf-masked-transitive.expect.yaml view
@@ -0,0 +1,7 @@+status: error+error_tag: TypeErrorImplicitAssumption+message_contains:+ - "implicit assumption"+ - "used in definition of"+regression_for:+ - uses-checks-key-off-actual-term-not-whnf
+ test/typecheck/cases/uses-whnf-masked-transitive.rzk view
@@ -0,0 +1,22 @@+#lang rzk-1++-- A transitive dependency on a section assumption that weak head normalisation+-- would otherwise hide. `d2`'s value `first (unit , d1)` mentions `d1`, whose+-- type `a =_{A} a` depends on the assumption `a`; reducing the value to `unit`+-- discards `d1` and so masks the dependency. Keying the use check off the term+-- the user wrote catches it: `d2` implicitly relies on `a` and must say so.++#section sec-whnf-masked++#variable A : U+#variable a : A++#define d1+ : a =_{A} a+ := refl++#define d2+ : Unit+ := first (unit , d1)++#end sec-whnf-masked