From 3901fbb77e99225efb1284d13d284f11003b7c10 Mon Sep 17 00:00:00 2001 From: Georgy Lukyanov Date: Tue, 4 Jul 2023 16:15:10 +0200 Subject: [PATCH 01/14] Fix Nix flake development shell (#220) * use the same haskell.nix that haskell-backend * Run `nix develop` in CI to check that the shell builds --- .github/workflows/test.yml | 4 + flake.lock | 526 +++---------------------------------- flake.nix | 9 +- 3 files changed, 43 insertions(+), 496 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 5cd8cd557..c315b0411 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -219,3 +219,7 @@ jobs: done echo "${{ matrix.nix }}" >> $GITHUB_STEP_SUMMARY cat imp.md >> $GITHUB_STEP_SUMMARY + + + - name: Check shell + run: GC_DONT_GC=1 nix develop --print-build-logs --command cabal --version diff --git a/flake.lock b/flake.lock index 522b45005..a6373d58a 100644 --- a/flake.lock +++ b/flake.lock @@ -32,22 +32,6 @@ "type": "github" } }, - "HTTP_3": { - "flake": false, - "locked": { - "lastModified": 1451647621, - "narHash": "sha256-oHIyw3x0iKBexEo49YeUDV1k74ZtyYKGR2gNJXXRxts=", - "owner": "phadej", - "repo": "HTTP", - "rev": "9bc0996d412fef1787449d841277ef663ad9a915", - "type": "github" - }, - "original": { - "owner": "phadej", - "repo": "HTTP", - "type": "github" - } - }, "cabal-32": { "flake": false, "locked": { @@ -82,23 +66,6 @@ "type": "github" } }, - "cabal-32_3": { - "flake": false, - "locked": { - "lastModified": 1603716527, - "narHash": "sha256-X0TFfdD4KZpwl0Zr6x+PLxUt/VyKQfX7ylXHdmZIL+w=", - "owner": "haskell", - "repo": "cabal", - "rev": "48bf10787e27364730dd37a42b603cee8d6af7ee", - "type": "github" - }, - "original": { - "owner": "haskell", - "ref": "3.2", - "repo": "cabal", - "type": "github" - } - }, "cabal-34": { "flake": false, "locked": { @@ -133,23 +100,6 @@ "type": "github" } }, - "cabal-34_3": { - "flake": false, - "locked": { - "lastModified": 1645834128, - "narHash": "sha256-wG3d+dOt14z8+ydz4SL7pwGfe7SiimxcD/LOuPCV6xM=", - "owner": "haskell", - "repo": "cabal", - "rev": "5ff598c67f53f7c4f48e31d722ba37172230c462", - "type": "github" - }, - "original": { - "owner": "haskell", - "ref": "3.4", - "repo": "cabal", - "type": "github" - } - }, "cabal-36": { "flake": false, "locked": { @@ -184,23 +134,6 @@ "type": "github" } }, - "cabal-36_3": { - "flake": false, - "locked": { - "lastModified": 1669081697, - "narHash": "sha256-I5or+V7LZvMxfbYgZATU4awzkicBwwok4mVoje+sGmU=", - "owner": "haskell", - "repo": "cabal", - "rev": "8fd619e33d34924a94e691c5fea2c42f0fc7f144", - "type": "github" - }, - "original": { - "owner": "haskell", - "ref": "3.6", - "repo": "cabal", - "type": "github" - } - }, "cardano-shell": { "flake": false, "locked": { @@ -233,22 +166,6 @@ "type": "github" } }, - "cardano-shell_3": { - "flake": false, - "locked": { - "lastModified": 1608537748, - "narHash": "sha256-PulY1GfiMgKVnBci3ex4ptk2UNYMXqGjJOxcPy2KYT4=", - "owner": "input-output-hk", - "repo": "cardano-shell", - "rev": "9392c75087cb9a3d453998f4230930dea3a95725", - "type": "github" - }, - "original": { - "owner": "input-output-hk", - "repo": "cardano-shell", - "type": "github" - } - }, "flake-compat": { "flake": false, "locked": { @@ -299,23 +216,6 @@ } }, "flake-compat_4": { - "flake": false, - "locked": { - "lastModified": 1672831974, - "narHash": "sha256-z9k3MfslLjWQfnjBtEtJZdq3H7kyi2kQtUThfTgdRk0=", - "owner": "input-output-hk", - "repo": "flake-compat", - "rev": "45f2638735f8cdc40fe302742b79f248d23eb368", - "type": "github" - }, - "original": { - "owner": "input-output-hk", - "ref": "hkm/gitlab-fix", - "repo": "flake-compat", - "type": "github" - } - }, - "flake-compat_5": { "flake": false, "locked": { "lastModified": 1673956053, @@ -331,7 +231,7 @@ "type": "github" } }, - "flake-compat_6": { + "flake-compat_5": { "flake": false, "locked": { "lastModified": 1673956053, @@ -347,7 +247,7 @@ "type": "github" } }, - "flake-compat_7": { + "flake-compat_6": { "flake": false, "locked": { "lastModified": 1672831974, @@ -396,22 +296,6 @@ } }, "flake-utils_3": { - "locked": { - "lastModified": 1679360468, - "narHash": "sha256-LGnza3cfXF10Biw3ZTg0u9o9t7s680Ww200t5KkHTh8=", - "owner": "hamishmack", - "repo": "flake-utils", - "rev": "e1ea268ff47ad475443dbabcd54744b4e5b9d4f5", - "type": "github" - }, - "original": { - "owner": "hamishmack", - "ref": "hkm/nested-hydraJobs", - "repo": "flake-utils", - "type": "github" - } - }, - "flake-utils_4": { "inputs": { "systems": "systems" }, @@ -429,7 +313,7 @@ "type": "github" } }, - "flake-utils_5": { + "flake-utils_4": { "locked": { "lastModified": 1679360468, "narHash": "sha256-LGnza3cfXF10Biw3ZTg0u9o9t7s680Ww200t5KkHTh8=", @@ -445,7 +329,7 @@ "type": "github" } }, - "flake-utils_6": { + "flake-utils_5": { "locked": { "lastModified": 1642700792, "narHash": "sha256-XqHrk7hFb+zBvRg6Ghl+AZDq03ov6OshJLiSWOoX5es=", @@ -511,40 +395,7 @@ "type": "github" } }, - "ghc-8.6.5-iohk_3": { - "flake": false, - "locked": { - "lastModified": 1600920045, - "narHash": "sha256-DO6kxJz248djebZLpSzTGD6s8WRpNI9BTwUeOf5RwY8=", - "owner": "input-output-hk", - "repo": "ghc", - "rev": "95713a6ecce4551240da7c96b6176f980af75cae", - "type": "github" - }, - "original": { - "owner": "input-output-hk", - "ref": "release/8.6.5-iohk", - "repo": "ghc", - "type": "github" - } - }, "hackage": { - "flake": false, - "locked": { - "lastModified": 1684283135, - "narHash": "sha256-kG6+9ke7nYsbdvpMgxFcUi5eLA5WChL0DkP655si89U=", - "owner": "input-output-hk", - "repo": "hackage.nix", - "rev": "720c07ced0ec9132ada4cd8f14b908330a1b290b", - "type": "github" - }, - "original": { - "owner": "input-output-hk", - "repo": "hackage.nix", - "type": "github" - } - }, - "hackage_2": { "flake": false, "locked": { "lastModified": 1687998569, @@ -560,7 +411,7 @@ "type": "github" } }, - "hackage_3": { + "hackage_2": { "flake": false, "locked": { "lastModified": 1684283135, @@ -604,8 +455,8 @@ }, "haskell-backend_2": { "inputs": { - "flake-compat": "flake-compat_6", - "haskell-nix": "haskell-nix_3", + "flake-compat": "flake-compat_5", + "haskell-nix": "haskell-nix_2", "mach-nix": "mach-nix_2", "nixpkgs": [ "k-framework", @@ -641,6 +492,7 @@ "ghc-8.6.5-iohk": "ghc-8.6.5-iohk", "hackage": "hackage", "hls-1.10": "hls-1.10", + "hls-2.0": "hls-2.0", "hpc-coveralls": "hpc-coveralls", "hydra": "hydra", "iserv-proxy": "iserv-proxy", @@ -654,16 +506,17 @@ "nixpkgs-2111": "nixpkgs-2111", "nixpkgs-2205": "nixpkgs-2205", "nixpkgs-2211": "nixpkgs-2211", + "nixpkgs-2305": "nixpkgs-2305", "nixpkgs-unstable": "nixpkgs-unstable", "old-ghc-nix": "old-ghc-nix", "stackage": "stackage" }, "locked": { - "lastModified": 1684284676, - "narHash": "sha256-VhZiVvwXqHkWh8Tw81WL8vwMzGsAhag8SQCQWGXQBLs=", + "lastModified": 1687999883, + "narHash": "sha256-4PxsyJekURUD/cZ7q0OAxfA6ZOoiton+6G1vgo9u+98=", "owner": "input-output-hk", "repo": "haskell.nix", - "rev": "ec345f667f9f1596e3849b530fe4f1573fc07653", + "rev": "b113a4a63c54f34d49d9f5d48ba6bbd65300bfa3", "type": "github" }, "original": { @@ -679,16 +532,17 @@ "cabal-34": "cabal-34_2", "cabal-36": "cabal-36_2", "cardano-shell": "cardano-shell_2", - "flake-compat": "flake-compat_4", - "flake-utils": "flake-utils_3", + "flake-compat": "flake-compat_6", + "flake-utils": "flake-utils_4", "ghc-8.6.5-iohk": "ghc-8.6.5-iohk_2", "hackage": "hackage_2", "hls-1.10": "hls-1.10_2", - "hls-2.0": "hls-2.0", "hpc-coveralls": "hpc-coveralls_2", "hydra": "hydra_2", "iserv-proxy": "iserv-proxy_2", "nixpkgs": [ + "k-framework", + "haskell-backend", "haskell-nix", "nixpkgs-unstable" ], @@ -697,55 +551,10 @@ "nixpkgs-2111": "nixpkgs-2111_2", "nixpkgs-2205": "nixpkgs-2205_2", "nixpkgs-2211": "nixpkgs-2211_2", - "nixpkgs-2305": "nixpkgs-2305", "nixpkgs-unstable": "nixpkgs-unstable_2", "old-ghc-nix": "old-ghc-nix_2", "stackage": "stackage_2" }, - "locked": { - "lastModified": 1687999883, - "narHash": "sha256-4PxsyJekURUD/cZ7q0OAxfA6ZOoiton+6G1vgo9u+98=", - "owner": "input-output-hk", - "repo": "haskell.nix", - "rev": "b113a4a63c54f34d49d9f5d48ba6bbd65300bfa3", - "type": "github" - }, - "original": { - "owner": "input-output-hk", - "repo": "haskell.nix", - "type": "github" - } - }, - "haskell-nix_3": { - "inputs": { - "HTTP": "HTTP_3", - "cabal-32": "cabal-32_3", - "cabal-34": "cabal-34_3", - "cabal-36": "cabal-36_3", - "cardano-shell": "cardano-shell_3", - "flake-compat": "flake-compat_7", - "flake-utils": "flake-utils_5", - "ghc-8.6.5-iohk": "ghc-8.6.5-iohk_3", - "hackage": "hackage_3", - "hls-1.10": "hls-1.10_3", - "hpc-coveralls": "hpc-coveralls_3", - "hydra": "hydra_3", - "iserv-proxy": "iserv-proxy_3", - "nixpkgs": [ - "k-framework", - "haskell-backend", - "haskell-nix", - "nixpkgs-unstable" - ], - "nixpkgs-2003": "nixpkgs-2003_3", - "nixpkgs-2105": "nixpkgs-2105_3", - "nixpkgs-2111": "nixpkgs-2111_3", - "nixpkgs-2205": "nixpkgs-2205_3", - "nixpkgs-2211": "nixpkgs-2211_3", - "nixpkgs-unstable": "nixpkgs-unstable_3", - "old-ghc-nix": "old-ghc-nix_3", - "stackage": "stackage_3" - }, "locked": { "lastModified": 1684284676, "narHash": "sha256-VhZiVvwXqHkWh8Tw81WL8vwMzGsAhag8SQCQWGXQBLs=", @@ -794,23 +603,6 @@ "type": "github" } }, - "hls-1.10_3": { - "flake": false, - "locked": { - "lastModified": 1680000865, - "narHash": "sha256-rc7iiUAcrHxwRM/s0ErEsSPxOR3u8t7DvFeWlMycWgo=", - "owner": "haskell", - "repo": "haskell-language-server", - "rev": "b08691db779f7a35ff322b71e72a12f6e3376fd9", - "type": "github" - }, - "original": { - "owner": "haskell", - "ref": "1.10.0.0", - "repo": "haskell-language-server", - "type": "github" - } - }, "hls-2.0": { "flake": false, "locked": { @@ -860,22 +652,6 @@ "type": "github" } }, - "hpc-coveralls_3": { - "flake": false, - "locked": { - "lastModified": 1607498076, - "narHash": "sha256-8uqsEtivphgZWYeUo5RDUhp6bO9j2vaaProQxHBltQk=", - "owner": "sevanspowell", - "repo": "hpc-coveralls", - "rev": "14df0f7d229f4cd2e79f8eabb1a740097fdfa430", - "type": "github" - }, - "original": { - "owner": "sevanspowell", - "repo": "hpc-coveralls", - "type": "github" - } - }, "hydra": { "inputs": { "nix": "nix", @@ -903,29 +679,6 @@ "hydra_2": { "inputs": { "nix": "nix_2", - "nixpkgs": [ - "haskell-nix", - "hydra", - "nix", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1671755331, - "narHash": "sha256-hXsgJj0Cy0ZiCiYdW2OdBz5WmFyOMKuw4zyxKpgUKm4=", - "owner": "NixOS", - "repo": "hydra", - "rev": "f48f00ee6d5727ae3e488cbf9ce157460853fea8", - "type": "github" - }, - "original": { - "id": "hydra", - "type": "indirect" - } - }, - "hydra_3": { - "inputs": { - "nix": "nix_3", "nixpkgs": [ "k-framework", "haskell-backend", @@ -999,32 +752,15 @@ "url": "https://gitlab.haskell.org/hamishmack/iserv-proxy.git" } }, - "iserv-proxy_3": { - "flake": false, - "locked": { - "lastModified": 1670983692, - "narHash": "sha256-avLo34JnI9HNyOuauK5R69usJm+GfW3MlyGlYxZhTgY=", - "ref": "hkm/remote-iserv", - "rev": "50d0abb3317ac439a4e7495b185a64af9b7b9300", - "revCount": 10, - "type": "git", - "url": "https://gitlab.haskell.org/hamishmack/iserv-proxy.git" - }, - "original": { - "ref": "hkm/remote-iserv", - "type": "git", - "url": "https://gitlab.haskell.org/hamishmack/iserv-proxy.git" - } - }, "k-framework": { "inputs": { "booster-backend": [], - "flake-compat": "flake-compat_5", - "flake-utils": "flake-utils_4", + "flake-compat": "flake-compat_4", + "flake-utils": "flake-utils_3", "haskell-backend": "haskell-backend_2", "llvm-backend": "llvm-backend", "mavenix": "mavenix_2", - "nixpkgs": "nixpkgs_8", + "nixpkgs": "nixpkgs_7", "rv-utils": "rv-utils" }, "locked": { @@ -1102,22 +838,6 @@ "type": "github" } }, - "lowdown-src_3": { - "flake": false, - "locked": { - "lastModified": 1633514407, - "narHash": "sha256-Dw32tiMjdK9t3ETl5fzGrutQTzh2rufgZV4A/BbxuD4=", - "owner": "kristapsdz", - "repo": "lowdown", - "rev": "d2c2b44ff6c27b936ec27358a2653caaef8f73b8", - "type": "github" - }, - "original": { - "owner": "kristapsdz", - "repo": "lowdown", - "type": "github" - } - }, "mach-nix": { "inputs": { "flake-utils": "flake-utils_2", @@ -1140,8 +860,8 @@ }, "mach-nix_2": { "inputs": { - "flake-utils": "flake-utils_6", - "nixpkgs": "nixpkgs_5", + "flake-utils": "flake-utils_5", + "nixpkgs": "nixpkgs_4", "pypi-deps-db": "pypi-deps-db_2" }, "locked": { @@ -1160,7 +880,7 @@ }, "mavenix": { "inputs": { - "nixpkgs": "nixpkgs_6", + "nixpkgs": "nixpkgs_5", "utils": "utils" }, "locked": { @@ -1179,7 +899,7 @@ }, "mavenix_2": { "inputs": { - "nixpkgs": "nixpkgs_7", + "nixpkgs": "nixpkgs_6", "utils": "utils_3" }, "locked": { @@ -1238,27 +958,6 @@ "type": "github" } }, - "nix_3": { - "inputs": { - "lowdown-src": "lowdown-src_3", - "nixpkgs": "nixpkgs_4", - "nixpkgs-regression": "nixpkgs-regression_3" - }, - "locked": { - "lastModified": 1661606874, - "narHash": "sha256-9+rpYzI+SmxJn+EbYxjGv68Ucp22bdFUSy/4LkHkkDQ=", - "owner": "NixOS", - "repo": "nix", - "rev": "11e45768b34fdafdcf019ddbd337afa16127ff0f", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "2.11.0", - "repo": "nix", - "type": "github" - } - }, "nixpkgs": { "locked": { "lastModified": 1657693803, @@ -1307,22 +1006,6 @@ "type": "github" } }, - "nixpkgs-2003_3": { - "locked": { - "lastModified": 1620055814, - "narHash": "sha256-8LEHoYSJiL901bTMVatq+rf8y7QtWuZhwwpKE2fyaRY=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "1db42b7fe3878f3f5f7a4f2dc210772fd080e205", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixpkgs-20.03-darwin", - "repo": "nixpkgs", - "type": "github" - } - }, "nixpkgs-2105": { "locked": { "lastModified": 1659914493, @@ -1355,22 +1038,6 @@ "type": "github" } }, - "nixpkgs-2105_3": { - "locked": { - "lastModified": 1659914493, - "narHash": "sha256-lkA5X3VNMKirvA+SUzvEhfA7XquWLci+CGi505YFAIs=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "022caabb5f2265ad4006c1fa5b1ebe69fb0c3faf", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixpkgs-21.05-darwin", - "repo": "nixpkgs", - "type": "github" - } - }, "nixpkgs-2111": { "locked": { "lastModified": 1659446231, @@ -1403,22 +1070,6 @@ "type": "github" } }, - "nixpkgs-2111_3": { - "locked": { - "lastModified": 1659446231, - "narHash": "sha256-hekabNdTdgR/iLsgce5TGWmfIDZ86qjPhxDg/8TlzhE=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "eabc38219184cc3e04a974fe31857d8e0eac098d", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixpkgs-21.11-darwin", - "repo": "nixpkgs", - "type": "github" - } - }, "nixpkgs-2205": { "locked": { "lastModified": 1682600000, @@ -1451,39 +1102,7 @@ "type": "github" } }, - "nixpkgs-2205_3": { - "locked": { - "lastModified": 1682600000, - "narHash": "sha256-ha4BehR1dh8EnXSoE1m/wyyYVvHI9txjW4w5/oxsW5Y=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "50fc86b75d2744e1ab3837ef74b53f103a9b55a0", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixpkgs-22.05-darwin", - "repo": "nixpkgs", - "type": "github" - } - }, "nixpkgs-2211": { - "locked": { - "lastModified": 1682682915, - "narHash": "sha256-haR0u/j/nUvlMloYlaOYq1FMXTvkNHw+wGxc+0qXisM=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "09f1b33fcc0f59263137e23e935c1bb03ec920e4", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixpkgs-22.11-darwin", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs-2211_2": { "locked": { "lastModified": 1685314633, "narHash": "sha256-8LXBPqTQXl5ofkjpJ18JcbmLJ/lWDoMxtUwiDYv0wro=", @@ -1499,7 +1118,7 @@ "type": "github" } }, - "nixpkgs-2211_3": { + "nixpkgs-2211_2": { "locked": { "lastModified": 1682682915, "narHash": "sha256-haR0u/j/nUvlMloYlaOYq1FMXTvkNHw+wGxc+0qXisM=", @@ -1563,39 +1182,7 @@ "type": "github" } }, - "nixpkgs-regression_3": { - "locked": { - "lastModified": 1643052045, - "narHash": "sha256-uGJ0VXIhWKGXxkeNnq4TvV3CIOkUJ3PAoLZ3HMzNVMw=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "215d4d0fd80ca5163643b03a33fde804a29cc1e2", - "type": "github" - }, - "original": { - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "215d4d0fd80ca5163643b03a33fde804a29cc1e2", - "type": "github" - } - }, "nixpkgs-unstable": { - "locked": { - "lastModified": 1682656005, - "narHash": "sha256-fYplYo7so1O+rSQ2/aS+SbTPwLTeoUXk4ekKNtSl4P8=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "6806b63e824f84b0f0e60b6d660d4ae753de0477", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixpkgs-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs-unstable_2": { "locked": { "lastModified": 1685347552, "narHash": "sha256-9woSppRyUFo26yUffORTzttJ+apOt8MmCv6RxpPNTU4=", @@ -1611,7 +1198,7 @@ "type": "github" } }, - "nixpkgs-unstable_3": { + "nixpkgs-unstable_2": { "locked": { "lastModified": 1682656005, "narHash": "sha256-fYplYo7so1O+rSQ2/aS+SbTPwLTeoUXk4ekKNtSl4P8=", @@ -1659,22 +1246,6 @@ } }, "nixpkgs_4": { - "locked": { - "lastModified": 1657693803, - "narHash": "sha256-G++2CJ9u0E7NNTAi9n5G8TdDmGJXcIjkJ3NF8cetQB8=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "365e1b3a859281cf11b94f87231adeabbdd878a2", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixos-22.05-small", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs_5": { "locked": { "lastModified": 1643805626, "narHash": "sha256-AXLDVMG+UaAGsGSpOtQHPIKB+IZ0KSd9WS77aanGzgc=", @@ -1689,7 +1260,7 @@ "type": "indirect" } }, - "nixpkgs_6": { + "nixpkgs_5": { "locked": { "lastModified": 1621552131, "narHash": "sha256-AD/AEXv+QOYAg0PIqMYv2nbGOGTIwfOGKtz3rE+y+Tc=", @@ -1703,7 +1274,7 @@ "type": "indirect" } }, - "nixpkgs_7": { + "nixpkgs_6": { "locked": { "lastModified": 1621552131, "narHash": "sha256-AD/AEXv+QOYAg0PIqMYv2nbGOGTIwfOGKtz3rE+y+Tc=", @@ -1717,7 +1288,7 @@ "type": "indirect" } }, - "nixpkgs_8": { + "nixpkgs_7": { "locked": { "lastModified": 1685573264, "narHash": "sha256-Zffu01pONhs/pqH07cjlF10NnMDLok8ix5Uk4rhOnZQ=", @@ -1766,23 +1337,6 @@ "type": "github" } }, - "old-ghc-nix_3": { - "flake": false, - "locked": { - "lastModified": 1631092763, - "narHash": "sha256-sIKgO+z7tj4lw3u6oBZxqIhDrzSkvpHtv0Kki+lh9Fg=", - "owner": "angerman", - "repo": "old-ghc-nix", - "rev": "af48a7a7353e418119b6dfe3cd1463a657f342b8", - "type": "github" - }, - "original": { - "owner": "angerman", - "ref": "master", - "repo": "old-ghc-nix", - "type": "github" - } - }, "pybind11-src": { "flake": false, "locked": { @@ -1853,9 +1407,13 @@ "inputs": { "flake-compat": "flake-compat", "haskell-backend": "haskell-backend", - "haskell-nix": "haskell-nix_2", + "haskell-nix": [ + "haskell-backend", + "haskell-nix" + ], "k-framework": "k-framework", "nixpkgs": [ + "haskell-backend", "haskell-nix", "nixpkgs-unstable" ] @@ -1877,22 +1435,6 @@ } }, "stackage": { - "flake": false, - "locked": { - "lastModified": 1684282201, - "narHash": "sha256-QW1Xm2MC+Qx1ZYF1cFRsb73WJji8aq6m5RGHUk9WWFU=", - "owner": "input-output-hk", - "repo": "stackage.nix", - "rev": "39971b1a8a098dd5bbbd8d91ba35ff0bfc07ce22", - "type": "github" - }, - "original": { - "owner": "input-output-hk", - "repo": "stackage.nix", - "type": "github" - } - }, - "stackage_2": { "flake": false, "locked": { "lastModified": 1687911052, @@ -1908,7 +1450,7 @@ "type": "github" } }, - "stackage_3": { + "stackage_2": { "flake": false, "locked": { "lastModified": 1684282201, diff --git a/flake.nix b/flake.nix index 3aa19be81..5306b7882 100644 --- a/flake.nix +++ b/flake.nix @@ -3,10 +3,11 @@ inputs = { k-framework.url = "github:runtimeverification/k/v5.6.131"; - k-framework.inputs.booster-backend.follows = ""; - nixpkgs.follows = "haskell-nix/nixpkgs-unstable"; - haskell-nix.url = "github:input-output-hk/haskell.nix"; haskell-backend.url = "github:runtimeverification/haskell-backend"; + k-framework.inputs.booster-backend.follows = ""; + haskell-nix.follows = "haskell-backend/haskell-nix"; + nixpkgs.follows = "haskell-backend/haskell-nix/nixpkgs-unstable"; + flake-compat = { url = "github:edolstra/flake-compat"; flake = false; @@ -27,7 +28,7 @@ }; allNixpkgsFor = perSystem nixpkgsForSystem; nixpkgsFor = system: allNixpkgsFor.${system}; - index-state = "2023-06-29T00:00:00Z"; + index-state = "2023-06-26T23:55:21Z"; boosterBackendFor = { compiler, pkgs, profiling ? false, k }: pkgs.haskell-nix.cabalProject { From ef20c4501e04c0e998170030bcce06470cd13d26 Mon Sep 17 00:00:00 2001 From: Georgy Lukyanov Date: Wed, 5 Jul 2023 16:02:04 +0200 Subject: [PATCH 02/14] Update haskell-backend (#222) --- cabal.project | 4 ++-- flake.lock | 6 +++--- stack.yaml | 2 +- stack.yaml.lock | 10 +++++----- 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/cabal.project b/cabal.project index 6275e7b8a..e7b683bdc 100644 --- a/cabal.project +++ b/cabal.project @@ -17,7 +17,7 @@ source-repository-package source-repository-package type: git location: https://github.com/runtimeverification/haskell-backend.git - tag: 039722de1227289ec71d66b5d267ed955e1b426f - --sha256: sha256-6Oci+9wMwgDx+ZeKQjA7kxLrBjxpwWOaKMBelQb+yAE= + tag: a6230144a37ee9ebf0f6dffc849faf5ce10df380 + --sha256: sha256-XLJQnk/QKmcnqM7gWaY1v7Pw5Xx+A2HmZWS5vYCQ5hE= subdir: kore kore-rpc-types diff --git a/flake.lock b/flake.lock index a6373d58a..eef0de528 100644 --- a/flake.lock +++ b/flake.lock @@ -440,11 +440,11 @@ "z3-src": "z3-src" }, "locked": { - "lastModified": 1688397920, - "narHash": "sha256-BThtxvyqymIE+V8ie9pvPzb2LdIjqR4V+igi5uA8CWQ=", + "lastModified": 1688483898, + "narHash": "sha256-Y4AUxocbScrL44BekC2dLfAYoT+syRN+Sq/TqIIoyg8=", "owner": "runtimeverification", "repo": "haskell-backend", - "rev": "039722de1227289ec71d66b5d267ed955e1b426f", + "rev": "a6230144a37ee9ebf0f6dffc849faf5ce10df380", "type": "github" }, "original": { diff --git a/stack.yaml b/stack.yaml index 9dce4194e..b05e4d6c2 100644 --- a/stack.yaml +++ b/stack.yaml @@ -11,7 +11,7 @@ extra-deps: - typerep-map-0.5.0.0 - monad-validate-1.2.0.1 - git: https://github.com/runtimeverification/haskell-backend.git - commit: 039722de1227289ec71d66b5d267ed955e1b426f + commit: a6230144a37ee9ebf0f6dffc849faf5ce10df380 subdirs: - kore - kore-rpc-types diff --git a/stack.yaml.lock b/stack.yaml.lock index b3384791b..68bc3d7d4 100644 --- a/stack.yaml.lock +++ b/stack.yaml.lock @@ -40,20 +40,20 @@ packages: original: hackage: monad-validate-1.2.0.1 - completed: - commit: 039722de1227289ec71d66b5d267ed955e1b426f + commit: a6230144a37ee9ebf0f6dffc849faf5ce10df380 git: https://github.com/runtimeverification/haskell-backend.git name: kore pantry-tree: - sha256: 794a3536437cf0d4403860c078e9a6c38015b89035973e61475f390cbff8f022 + sha256: c8c0f36a0c1a949317f6062ab3320fc4f831ed85f3922b455f19743da9ca360f size: 44548 subdir: kore version: 0.60.0.0 original: - commit: 039722de1227289ec71d66b5d267ed955e1b426f + commit: a6230144a37ee9ebf0f6dffc849faf5ce10df380 git: https://github.com/runtimeverification/haskell-backend.git subdir: kore - completed: - commit: 039722de1227289ec71d66b5d267ed955e1b426f + commit: a6230144a37ee9ebf0f6dffc849faf5ce10df380 git: https://github.com/runtimeverification/haskell-backend.git name: kore-rpc-types pantry-tree: @@ -62,7 +62,7 @@ packages: subdir: kore-rpc-types version: 0.60.0.0 original: - commit: 039722de1227289ec71d66b5d267ed955e1b426f + commit: a6230144a37ee9ebf0f6dffc849faf5ce10df380 git: https://github.com/runtimeverification/haskell-backend.git subdir: kore-rpc-types snapshots: From d7229df5d1c22f4597c29a12ba9356305e2b06fd Mon Sep 17 00:00:00 2001 From: Georgy Lukyanov Date: Mon, 10 Jul 2023 15:21:31 +0200 Subject: [PATCH 03/14] Don't trace rewrites and equation applications if not requested (#225) Fixes #224 and #126 * Refactor `EquatioM` to `EquationT` - make it a monad transformer - Move immutable data to a `ReaderT` - Add `MonadLoggerIO` constraint on interface functions * Refactor `RewriteM` to `RewriteT` - make it a monad transformer - Make the reader config a proper product type, rather then a tuple - Add `MonadLoggerIO` constraint on interface functions * Thread tracing flag down to rewrites and equation applications. Only accumulate traces if the flag is set. Currently, the `doTracing` flag is less granular than the RPC request tracing options: we will collect all traces if any of the four RPC options is set. We should probably address this in a follow-up PR. --- library/Booster/JsonRpc.hs | 26 ++- library/Booster/Pattern/ApplyEquations.hs | 186 ++++++++++-------- library/Booster/Pattern/Rewrite.hs | 70 ++++--- .../Test/Booster/Pattern/ApplyEquations.hs | 8 +- unit-tests/Test/Booster/Pattern/Rewrite.hs | 35 ++-- 5 files changed, 194 insertions(+), 131 deletions(-) diff --git a/library/Booster/JsonRpc.hs b/library/Booster/JsonRpc.hs index fb91881db..87079385a 100644 --- a/library/Booster/JsonRpc.hs +++ b/library/Booster/JsonRpc.hs @@ -29,7 +29,6 @@ import Data.Text qualified as Text import Data.Text.Encoding qualified as Text import GHC.Records import Numeric.Natural -import Prettyprinter import Booster.Definition.Attributes.Base (getUniqueId, uniqueId) import Booster.Definition.Base (KoreDefinition (..)) @@ -44,7 +43,6 @@ import Booster.Pattern.Rewrite ( performRewrite, ) import Booster.Pattern.Util (sortOfTerm) -import Booster.Prettyprinter (renderDefault) import Booster.Syntax.Json (KoreJson (..), addHeader, sortOfJson) import Booster.Syntax.Json.Externalise import Booster.Syntax.Json.Internalise (internalisePattern, internaliseTermOrPredicate) @@ -83,7 +81,15 @@ respond stateVar = let cutPoints = fromMaybe [] req.cutPointRules terminals = fromMaybe [] req.terminalRules mbDepth = fmap getNat req.maxDepth - execResponse req <$> performRewrite def mLlvmLibrary mbDepth cutPoints terminals pat + doTracing = + any + (fromMaybe False) + [ req.logSuccessfulRewrites + , req.logFailedRewrites + , req.logSuccessfulSimplifications + , req.logFailedSimplifications + ] + execResponse req <$> performRewrite doTracing def mLlvmLibrary mbDepth cutPoints terminals pat AddModule req -> do -- block other request executions while modifying the server state state <- liftIO $ takeMVar stateVar @@ -124,8 +130,12 @@ respond stateVar = Just . mapMaybe (mkLogEquationTrace (req.logSuccessfulSimplifications, req.logFailedSimplifications)) . toList - logTraces = - mapM_ (Log.logOther (Log.LevelOther "Simplify") . pack . renderDefault . pretty) + doTracing = + any + (fromMaybe False) + [ req.logSuccessfulSimplifications + , req.logFailedSimplifications + ] case internalised of Left patternErrors -> do Log.logError $ "Error internalising cterm: " <> Text.pack (show patternErrors) @@ -133,9 +143,8 @@ respond stateVar = -- term and predicate (pattern) Right (TermAndPredicate Pattern{term, constraints}) -> do Log.logInfoNS "booster" "Simplifying term of a pattern" - case ApplyEquations.evaluateTerm ApplyEquations.TopDown def mLlvmLibrary term of + ApplyEquations.evaluateTerm doTracing ApplyEquations.TopDown def mLlvmLibrary term >>= \case Right (newTerm, traces) -> do - logTraces $ filter (not . ApplyEquations.isMatchFailure) traces let (t, p) = externalisePattern Pattern{constraints, term = newTerm} tSort = externaliseSort (sortOfTerm newTerm) result = maybe t (KoreJson.KJAnd tSort t) p @@ -151,9 +160,8 @@ respond stateVar = -- predicate only Right (APredicate predicate) -> do Log.logInfoNS "booster" "Simplifying a predicate" - case ApplyEquations.traceSimplifyConstraint def mLlvmLibrary predicate of + ApplyEquations.simplifyConstraint doTracing def mLlvmLibrary predicate >>= \case Right (newPred, traces) -> do - logTraces $ filter (not . ApplyEquations.isMatchFailure) traces let predicateSort = fromMaybe (error "not a predicate") $ sortOfJson req.state.term diff --git a/library/Booster/Pattern/ApplyEquations.hs b/library/Booster/Pattern/ApplyEquations.hs index 54dc5cc9f..8f88d54e7 100644 --- a/library/Booster/Pattern/ApplyEquations.hs +++ b/library/Booster/Pattern/ApplyEquations.hs @@ -14,14 +14,21 @@ module Booster.Pattern.ApplyEquations ( isMatchFailure, isSuccess, simplifyConstraint, - traceSimplifyConstraint, ) where import Control.Monad import Control.Monad.Extra +import Control.Monad.IO.Class (MonadIO (..)) +import Control.Monad.Logger.CallStack ( + LogLevel (..), + MonadLogger, + MonadLoggerIO, + logOther, + ) import Control.Monad.Trans.Class import Control.Monad.Trans.Except import Control.Monad.Trans.Maybe +import Control.Monad.Trans.Reader (ReaderT (..), ask) import Control.Monad.Trans.State import Data.Foldable (toList) import Data.Functor.Foldable @@ -31,7 +38,7 @@ import Data.Map qualified as Map import Data.Maybe (catMaybes, fromJust, fromMaybe, isJust) import Data.Sequence (Seq (..)) import Data.Set qualified as Set -import Data.Text (Text) +import Data.Text (Text, pack) import Data.Text qualified as Text import Prettyprinter @@ -44,12 +51,14 @@ import Booster.Pattern.Index import Booster.Pattern.Match import Booster.Pattern.Simplify import Booster.Pattern.Util +import Booster.Prettyprinter (renderDefault) -newtype EquationM a = EquationM (StateT EquationState (Except EquationFailure) a) - deriving newtype (Functor, Applicative, Monad) +newtype EquationT io a + = EquationT (StateT EquationState (ReaderT EquationConfig (ExceptT EquationFailure io)) a) + deriving newtype (Functor, Applicative, Monad, MonadIO, MonadLogger, MonadLoggerIO) -throw :: EquationFailure -> EquationM a -throw = EquationM . lift . throwE +throw :: MonadLoggerIO io => EquationFailure -> EquationT io a +throw = EquationT . lift . lift . throwE data EquationFailure = IndexIsNone Term @@ -58,10 +67,14 @@ data EquationFailure | InternalError Text deriving stock (Eq, Show) -data EquationState = EquationState +data EquationConfig = EquationConfig { definition :: KoreDefinition , llvmApi :: Maybe LLVM.API - , termStack :: [Term] + , doTracing :: Bool + } + +data EquationState = EquationState + { termStack :: [Term] , changed :: Bool , trace :: Seq EquationTrace } @@ -130,27 +143,30 @@ isMatchFailure _ = False isSuccess EquationTrace{result = Success{}} = True isSuccess _ = False -startState :: KoreDefinition -> Maybe LLVM.API -> EquationState -startState definition llvmApi = - EquationState{definition, llvmApi, termStack = [], changed = False, trace = mempty} +startState :: EquationState +startState = + EquationState{termStack = [], changed = False, trace = mempty} + +getState :: MonadLoggerIO io => EquationT io EquationState +getState = EquationT get -getState :: EquationM EquationState -getState = EquationM get +getConfig :: MonadLoggerIO io => EquationT io EquationConfig +getConfig = EquationT (lift ask) -countSteps :: EquationM Int +countSteps :: MonadLoggerIO io => EquationT io Int countSteps = length . (.termStack) <$> getState -pushTerm :: Term -> EquationM () -pushTerm t = EquationM . modify $ \s -> s{termStack = t : s.termStack} +pushTerm :: MonadLoggerIO io => Term -> EquationT io () +pushTerm t = EquationT . modify $ \s -> s{termStack = t : s.termStack} -setChanged, resetChanged :: EquationM () -setChanged = EquationM . modify $ \s -> s{changed = True} -resetChanged = EquationM . modify $ \s -> s{changed = False} +setChanged, resetChanged :: MonadLoggerIO io => EquationT io () +setChanged = EquationT . modify $ \s -> s{changed = True} +resetChanged = EquationT . modify $ \s -> s{changed = False} -getChanged :: EquationM Bool -getChanged = EquationM $ gets (.changed) +getChanged :: MonadLoggerIO io => EquationT io Bool +getChanged = EquationT $ gets (.changed) -checkForLoop :: Term -> EquationM () +checkForLoop :: MonadLoggerIO io => Term -> EquationT io () checkForLoop t = do EquationState{termStack, trace} <- getState whenJust (elemIndex t termStack) $ \i -> do @@ -162,24 +178,32 @@ data Direction = TopDown | BottomUp data EquationPreference = PreferFunctions | PreferSimplifications deriving stock (Eq, Show) -runEquationM :: +runEquationT :: + MonadLoggerIO io => + Bool -> KoreDefinition -> Maybe LLVM.API -> - EquationM a -> - Either EquationFailure (a, [EquationTrace]) -runEquationM definition llvmApi (EquationM m) = - fmap (fmap $ toList . trace) <$> runExcept $ runStateT m $ startState definition llvmApi + EquationT io a -> + io (Either EquationFailure (a, [EquationTrace])) +runEquationT doTracing definition llvmApi (EquationT m) = do + endState <- + runExceptT + . flip runReaderT EquationConfig{definition, llvmApi, doTracing} + . runStateT m + $ startState + pure (fmap (toList . trace) <$> endState) iterateEquations :: + MonadLoggerIO io => Int -> Direction -> EquationPreference -> Term -> - EquationM Term + EquationT io Term iterateEquations maxIterations direction preference startTerm = go startTerm where - go :: Term -> EquationM Term + go :: MonadLoggerIO io => Term -> EquationT io Term go currentTerm | (getAttributes currentTerm).isEvaluated = pure currentTerm | otherwise = do @@ -198,13 +222,15 @@ iterateEquations maxIterations direction preference startTerm = ---------------------------------------- -- Interface function evaluateTerm :: + MonadLoggerIO io => + Bool -> Direction -> KoreDefinition -> Maybe LLVM.API -> Term -> - Either EquationFailure (Term, [EquationTrace]) -evaluateTerm direction def llvmApi = - runEquationM def llvmApi + io (Either EquationFailure (Term, [EquationTrace])) +evaluateTerm doTracing direction def llvmApi = + runEquationT doTracing def llvmApi . iterateEquations 100 direction PreferFunctions ---------------------------------------- @@ -216,10 +242,11 @@ evaluateTerm direction def llvmApi = one equation will be applied per level (if any). -} applyTerm :: + MonadLoggerIO io => Direction -> EquationPreference -> Term -> - EquationM Term + EquationT io Term applyTerm BottomUp pref = cataA $ \case DomainValueF s val -> @@ -239,11 +266,11 @@ applyTerm TopDown pref = \t@(Term attributes _) -> if attributes.isEvaluated then pure t else do - s <- getState + config <- getConfig -- All fully concrete values go to the LLVM backend (top-down only) - if isConcrete t && isJust s.llvmApi + if isConcrete t && isJust config.llvmApi then do - let result = simplifyTerm (fromJust s.llvmApi) s.definition t (sortOfTerm t) + let result = simplifyTerm (fromJust config.llvmApi) config.definition t (sortOfTerm t) when (result /= t) setChanged pure result else apply t @@ -282,11 +309,12 @@ applyTerm TopDown pref = \t@(Term attributes _) -> top-level term, in priority order and per group. -} applyAtTop :: + MonadLoggerIO io => EquationPreference -> Term -> - EquationM Term + EquationT io Term applyAtTop pref term = do - def <- (.definition) <$> getState + def <- (.definition) <$> getConfig case pref of PreferFunctions -> do -- when applying equations, we want to catch DoesNotPreserveDefinedness/incosistentmatch/etc @@ -311,17 +339,17 @@ data ApplyEquationResult | MatchConstraintViolated Constrained VarName deriving stock (Eq, Show) -type ResultHandler = +type ResultHandler io = -- | action on successful equation application - (Term -> EquationM Term) -> + (Term -> EquationT io Term) -> -- | action on failed match - EquationM Term -> + EquationT io Term -> -- | action on aborted equation application - EquationM Term -> + EquationT io Term -> ApplyEquationResult -> - EquationM Term + EquationT io Term -handleFunctionEquation :: ResultHandler +handleFunctionEquation :: ResultHandler io handleFunctionEquation success continue abort = \case Success rewritten -> success rewritten FailedMatch _ -> continue @@ -331,7 +359,7 @@ handleFunctionEquation success continue abort = \case RuleNotPreservingDefinedness -> abort MatchConstraintViolated{} -> continue -handleSimplificationEquation :: ResultHandler +handleSimplificationEquation :: ResultHandler io handleSimplificationEquation success continue _abort = \case Success rewritten -> success rewritten FailedMatch _ -> continue @@ -342,11 +370,12 @@ handleSimplificationEquation success continue _abort = \case MatchConstraintViolated{} -> continue applyEquations :: - forall tag. + forall io tag. + MonadLoggerIO io => Theory (RewriteRule tag) -> - ResultHandler -> + ResultHandler io -> Term -> - EquationM Term + EquationT io Term applyEquations theory handler term = do let index = termTopIndex term when (index == None) $ @@ -374,7 +403,7 @@ applyEquations theory handler term = do -- process one equation at a time, until something has happened processEquations :: [RewriteRule tag] -> - EquationM Term + EquationT io Term processEquations [] = pure term -- nothing to do, term stays the same processEquations (eq : rest) = do @@ -383,21 +412,27 @@ applyEquations theory handler term = do handler (\t -> setChanged >> pure t) (processEquations rest) (pure term) res traceRuleApplication :: + MonadLoggerIO io => Term -> Maybe Location -> Maybe Label -> Maybe UniqueId -> ApplyEquationResult -> - EquationM () -traceRuleApplication t loc lbl uid res = - EquationM . modify $ - \s -> s{trace = s.trace :|> EquationTrace t loc lbl uid res} + EquationT io () +traceRuleApplication t loc lbl uid res = do + let newTraceItem = EquationTrace t loc lbl uid res + logOther (LevelOther "Simplify") (pack . renderDefault . pretty $ newTraceItem) + config <- getConfig + when (config.doTracing) $ + EquationT . modify $ + \s -> s{trace = s.trace :|> newTraceItem} applyEquation :: - forall tag. + forall io tag. + MonadLoggerIO io => Term -> RewriteRule tag -> - EquationM ApplyEquationResult + EquationT io ApplyEquationResult applyEquation term rule = fmap (either id Success) $ runExceptT $ do -- ensured by internalisation: no existentials in equations unless (null rule.existentials) $ @@ -410,7 +445,7 @@ applyEquation term rule = fmap (either id Success) $ runExceptT $ do when (allMustBeConcrete rule.attributes.concreteness && not (Set.null (freeVariables term))) $ throwE (MatchConstraintViolated Concrete "* (term has variables)") -- match lhs - koreDef <- (.definition) <$> lift getState + koreDef <- (.definition) <$> lift getConfig case matchTerm koreDef rule.lhs term of MatchFailed failReason -> throwE $ FailedMatch failReason MatchIndeterminate _pat _subj -> throwE IndeterminateMatch @@ -444,9 +479,9 @@ applyEquation term rule = fmap (either id Success) $ runExceptT $ do -- is Bottom. checkConstraint :: Predicate -> - MaybeT (ExceptT ApplyEquationResult EquationM) (Maybe Predicate) + MaybeT (ExceptT ApplyEquationResult (EquationT io)) (Maybe Predicate) checkConstraint p = do - mApi <- (.llvmApi) <$> lift (lift getState) + mApi <- (.llvmApi) <$> lift (lift getConfig) case simplifyPredicate mApi p of Bottom -> fail "side condition was false" Top -> pure Nothing @@ -458,7 +493,7 @@ applyEquation term rule = fmap (either id Success) $ runExceptT $ do checkConcreteness :: Concreteness -> Map Variable Term -> - ExceptT ApplyEquationResult EquationM () + ExceptT ApplyEquationResult (EquationT io) () checkConcreteness Unconstrained _ = pure () checkConcreteness (AllConstrained constrained) subst = mapM_ (\(var, t) -> mkCheck (toPair var) constrained t) $ Map.assocs subst @@ -474,7 +509,7 @@ applyEquation term rule = fmap (either id Success) $ runExceptT $ do (VarName, SortName) -> Constrained -> Term -> - ExceptT ApplyEquationResult EquationM () + ExceptT ApplyEquationResult (EquationT io) () mkCheck (varName, _) constrained (Term attributes _) | not test = throwE $ MatchConstraintViolated constrained varName | otherwise = pure () @@ -486,8 +521,8 @@ applyEquation term rule = fmap (either id Success) $ runExceptT $ do verifyVar :: Map Variable Term -> (VarName, SortName) -> - (Term -> ExceptT ApplyEquationResult EquationM ()) -> - ExceptT ApplyEquationResult EquationM () + (Term -> ExceptT ApplyEquationResult (EquationT io) ()) -> + ExceptT ApplyEquationResult (EquationT io) () verifyVar subst (variableName, sortName) check = maybe ( lift . throw . InternalError . Text.pack $ @@ -512,35 +547,28 @@ pattern FalseBool = DomainValue SortBool "false" ensured conditions). If and as soon as this function is used inside equation - application, it needs to run within the same 'EquationM' context + application, it needs to run within the same 'EquationT' context so we can detect simplification loops and avoid monad nesting. -} simplifyConstraint :: + MonadLoggerIO io => + Bool -> KoreDefinition -> Maybe LLVM.API -> Predicate -> - Predicate -simplifyConstraint def mbApi p = - either (const p) fst $ traceSimplifyConstraint def mbApi p - --- | Constraint simplification that collects a simplification trace -traceSimplifyConstraint :: - KoreDefinition -> - Maybe LLVM.API -> - Predicate -> - Either EquationFailure (Predicate, [EquationTrace]) -traceSimplifyConstraint def mbApi p = - runEquationM def mbApi $ simplifyConstraint' p + io (Either EquationFailure (Predicate, [EquationTrace])) +simplifyConstraint doTracing def mbApi p = + runEquationT doTracing def mbApi $ simplifyConstraint' p -- version for internal nested evaluation -simplifyConstraint' :: Predicate -> EquationM Predicate +simplifyConstraint' :: MonadLoggerIO io => Predicate -> EquationT io Predicate -- We are assuming all predicates are of the form 'P ==Bool true' and -- evaluating them using simplifyBool if they are concrete. -- Non-concrete \equals predicates are simplified using evaluateTerm. simplifyConstraint' = \case EqualsTerm t TrueBool | isConcrete t -> do - mbApi <- (.llvmApi) <$> getState + mbApi <- (.llvmApi) <$> getConfig case mbApi of Just api -> if simplifyBool api t @@ -562,9 +590,9 @@ simplifyConstraint' = \case FalseBool -> Bottom other -> EqualsTerm other TrueBool - evalBool :: Term -> EquationM Term + evalBool :: MonadLoggerIO io => Term -> EquationT io Term evalBool t = do prior <- getState -- save prior state so we can revert result <- iterateEquations 100 TopDown PreferFunctions t - EquationM $ put prior + EquationT $ put prior pure result diff --git a/library/Booster/Pattern/Rewrite.hs b/library/Booster/Pattern/Rewrite.hs index 592742426..97081103f 100644 --- a/library/Booster/Pattern/Rewrite.hs +++ b/library/Booster/Pattern/Rewrite.hs @@ -10,11 +10,12 @@ module Booster.Pattern.Rewrite ( RewriteFailed (..), RewriteResult (..), RewriteTrace (..), - runRewriteM, + runRewriteT, ) where import Control.Applicative ((<|>)) import Control.Monad +import Control.Monad.IO.Class (MonadIO (..)) import Control.Monad.Logger.CallStack import Control.Monad.Trans.Class import Control.Monad.Trans.Except @@ -51,17 +52,26 @@ import Booster.Pattern.Unify import Booster.Pattern.Util import Booster.Prettyprinter -newtype RewriteM err a = RewriteM {unRewriteM :: ReaderT (KoreDefinition, Maybe LLVM.API) (Except err) a} - deriving newtype (Functor, Applicative, Monad) +newtype RewriteT io err a = RewriteT {unRewriteT :: ReaderT RewriteConfig (ExceptT err io) a} + deriving newtype (Functor, Applicative, Monad, MonadLogger, MonadIO, MonadLoggerIO) -runRewriteM :: KoreDefinition -> Maybe LLVM.API -> RewriteM err a -> Either err a -runRewriteM def mLlvmLibrary = runExcept . flip runReaderT (def, mLlvmLibrary) . unRewriteM +data RewriteConfig = RewriteConfig + { definition :: KoreDefinition + , llvmApi :: Maybe LLVM.API + , doTracing :: Bool + } -throw :: err -> RewriteM err a -throw = RewriteM . lift . throwE +runRewriteT :: Bool -> KoreDefinition -> Maybe LLVM.API -> RewriteT io err a -> io (Either err a) +runRewriteT doTracing def mLlvmLibrary = + runExceptT + . flip runReaderT RewriteConfig{definition = def, llvmApi = mLlvmLibrary, doTracing} + . unRewriteT -getDefinition :: RewriteM err KoreDefinition -getDefinition = RewriteM $ fst <$> ask +throw :: MonadLoggerIO io => err -> RewriteT io err a +throw = RewriteT . lift . throwE + +getDefinition :: MonadLoggerIO io => RewriteT io err KoreDefinition +getDefinition = RewriteT $ definition <$> ask {- | Performs a rewrite step (using suitable rewrite rules from the definition). @@ -71,7 +81,11 @@ getDefinition = RewriteM $ fst <$> ask additional constraints. -} rewriteStep :: - [Text] -> [Text] -> Pattern -> RewriteM (RewriteFailed "Rewrite") (RewriteResult Pattern) + MonadLoggerIO io => + [Text] -> + [Text] -> + Pattern -> + RewriteT io (RewriteFailed "Rewrite") (RewriteResult Pattern) rewriteStep cutLabels terminalLabels pat = do let termIdx = kCellTermIndex pat.term when (termIdx == None) $ throw (TermIndexIsNone pat.term) @@ -90,7 +104,8 @@ rewriteStep cutLabels terminalLabels pat = do -- until a result is obtained or the entire rewrite fails. processGroups rules where - processGroups :: [[RewriteRule k]] -> RewriteM (RewriteFailed k) (RewriteResult Pattern) + processGroups :: + MonadLoggerIO io => [[RewriteRule k]] -> RewriteT io (RewriteFailed k) (RewriteResult Pattern) processGroups [] = throw (NoApplicableRules pat) processGroups (rules : rest) = do @@ -139,10 +154,11 @@ exception is thrown which indicates the exact reason why (this will abort the entire rewrite). -} applyRule :: - forall k. + forall io k. + MonadLoggerIO io => Pattern -> RewriteRule k -> - RewriteM (RewriteFailed k) (Maybe (RewriteRule k, Pattern)) + RewriteT io (RewriteFailed k) (Maybe (RewriteRule k, Pattern)) applyRule pat rule = runMaybeT $ do def <- lift getDefinition -- unify terms @@ -209,13 +225,15 @@ applyRule pat rule = runMaybeT $ do checkConstraint :: (Predicate -> a) -> Predicate -> - MaybeT (RewriteM (RewriteFailed k)) (Maybe a) + MaybeT (RewriteT io (RewriteFailed k)) (Maybe a) checkConstraint onUnclear p = do - (def, mApi) <- lift $ RewriteM ask - case simplifyConstraint def mApi p of - Bottom -> fail "Rule condition was False" - Top -> pure Nothing - other -> pure $ Just $ onUnclear other + RewriteConfig{definition, llvmApi, doTracing} <- lift $ RewriteT ask + simplified <- simplifyConstraint doTracing definition llvmApi p + case simplified of + Right (Bottom, _) -> fail "Rule condition was False" + Right (Top, _) -> pure Nothing + Right (other, _) -> pure $ Just $ onUnclear other + Left _ -> pure $ Just $ onUnclear p {- | Reason why a rewrite did not produce a result. Contains additional information for logging what happened during the rewrite. @@ -399,6 +417,8 @@ showPattern title pat = hang 4 $ vsep [title, pretty pat.term] performRewrite :: forall io. MonadLoggerIO io => + -- | whether to accumulate rewrite traces + Bool -> KoreDefinition -> Maybe LLVM.API -> -- | maximum depth @@ -409,7 +429,7 @@ performRewrite :: [Text] -> Pattern -> io (Natural, Seq (RewriteTrace Pattern), RewriteResult Pattern) -performRewrite def mLlvmLibrary mbMaxDepth cutLabels terminalLabels pat = do +performRewrite doTracing def mLlvmLibrary mbMaxDepth cutLabels terminalLabels pat = do (rr, (counter, traces)) <- flip runStateT (0, mempty) $ doSteps False pat pure (counter, traces, rr) where @@ -425,13 +445,13 @@ performRewrite def mLlvmLibrary mbMaxDepth cutLabels terminalLabels pat = do rewriteTrace t = do logRewrite $ pack $ renderDefault $ pretty t - modify $ \(counter, traces) -> (counter, traces |> t) + when doTracing $ modify $ \(counter, traces) -> (counter, traces |> t) incrementCounter = modify $ \(counter, traces) -> (counter + 1, traces) simplifyP :: Pattern -> StateT (Natural, Seq (RewriteTrace Pattern)) io Pattern simplifyP p = do - let result = evaluateTerm TopDown def mLlvmLibrary p.term - case result of + let result = evaluateTerm doTracing TopDown def mLlvmLibrary p.term + result >>= \case Left r@(TooManyIterations n _ t) -> do logWarn $ "Simplification unable to finish in " <> prettyText n <> " steps." -- could output term before and after at debug or custom log level @@ -469,9 +489,9 @@ performRewrite def mLlvmLibrary mbMaxDepth cutLabels terminalLabels pat = do (if wasSimplified then pure else mapM simplifyP) $ RewriteFinished Nothing Nothing pat' else do let res = - runRewriteM def mLlvmLibrary $ + runRewriteT doTracing def mLlvmLibrary $ rewriteStep cutLabels terminalLabels pat' - case res of + res >>= \case Right (RewriteFinished mlbl uniqueId single) -> do case mlbl of Just lbl -> rewriteTrace $ RewriteSingleStep lbl uniqueId pat' single diff --git a/unit-tests/Test/Booster/Pattern/ApplyEquations.hs b/unit-tests/Test/Booster/Pattern/ApplyEquations.hs index 989ff08af..74eaa0d63 100644 --- a/unit-tests/Test/Booster/Pattern/ApplyEquations.hs +++ b/unit-tests/Test/Booster/Pattern/ApplyEquations.hs @@ -10,9 +10,11 @@ module Test.Booster.Pattern.ApplyEquations ( test_errors, ) where +import Control.Monad.Logger (runNoLoggingT) import Data.Map (Map) import Data.Map qualified as Map import Data.Text (Text) +import GHC.IO.Unsafe (unsafePerformIO) import Test.Tasty import Test.Tasty.HUnit @@ -76,7 +78,7 @@ test_evaluateFunction = -- eval BottomUp subj @?= Right result ] where - eval direction = fmap fst . evaluateTerm direction funDef Nothing + eval direction = fmap fst . unsafePerformIO . runNoLoggingT . evaluateTerm False direction funDef Nothing a = var "A" someSort d = dv someSort "hey" apply f = app f . (: []) @@ -107,7 +109,7 @@ test_simplify = simpl BottomUp subj @?= Right result ] where - simpl direction = fmap fst . evaluateTerm direction simplDef Nothing + simpl direction = fmap fst . unsafePerformIO . runNoLoggingT . evaluateTerm False direction simplDef Nothing a = var "A" someSort test_errors :: TestTree @@ -120,7 +122,7 @@ test_errors = subj = f $ app con1 [a] loopTerms = [f $ app con1 [a], f $ app con2 [a], f $ app con3 [a, a], f $ app con1 [a]] - isLoop loopTerms $ evaluateTerm TopDown loopDef Nothing subj + isLoop loopTerms . unsafePerformIO . runNoLoggingT $ evaluateTerm False TopDown loopDef Nothing subj ] where isLoop ts (Left (EquationLoop _ ts')) = ts @?= ts' diff --git a/unit-tests/Test/Booster/Pattern/Rewrite.hs b/unit-tests/Test/Booster/Pattern/Rewrite.hs index 9388955af..f76cf45b8 100644 --- a/unit-tests/Test/Booster/Pattern/Rewrite.hs +++ b/unit-tests/Test/Booster/Pattern/Rewrite.hs @@ -15,6 +15,7 @@ import Data.List.NonEmpty qualified as NE import Data.Map (Map) import Data.Map qualified as Map import Data.Text (Text) +import GHC.IO.Unsafe (unsafePerformIO) import Numeric.Natural import Test.Tasty import Test.Tasty.HUnit @@ -193,18 +194,18 @@ errorCases = [trm| kCell{}( kseq{}( inj{SomeSort{}, SortKItem{}}( con2{}( \dv{SomeSort{}}("thing") ) ), Thing:SortK{}) ) |] , testCase "Index is None" $ do let t = - [trm| - kCell{}( - kseq{}( - inj{SomeSort{}, SortKItem{}}( - \and{SomeSort{}}( - con1{}( \dv{SomeSort{}}("thing") ), + [trm| + kCell{}( + kseq{}( + inj{SomeSort{}, SortKItem{}}( + \and{SomeSort{}}( + con1{}( \dv{SomeSort{}}("thing") ), con2{}( \dv{SomeSort{}}("thing") ) ) - ), + ), Thing:SortK{} ) - ) + ) |] t `failsWith` TermIndexIsNone t ] @@ -252,25 +253,26 @@ rulePriority = rewritesTo :: Term -> (Text, Term) -> IO () t1 `rewritesTo` (lbl, t2) = - runRewriteM def Nothing (rewriteStep [] [] $ Pattern t1 []) + unsafePerformIO (runNoLoggingT $ runRewriteT False def Nothing (rewriteStep [] [] $ Pattern t1 [])) @?= Right (RewriteFinished (Just lbl) Nothing $ Pattern t2 []) branchesTo :: Term -> [(Text, Term)] -> IO () t `branchesTo` ts = - runRewriteM def Nothing (rewriteStep [] [] $ Pattern t []) + unsafePerformIO (runNoLoggingT $ runRewriteT False def Nothing (rewriteStep [] [] $ Pattern t [])) @?= Right (RewriteBranch (Pattern t []) $ NE.fromList $ map (\(lbl, t') -> (lbl, Nothing, Pattern t' [])) ts) failsWith :: Term -> RewriteFailed "Rewrite" -> IO () failsWith t err = - runRewriteM def Nothing (rewriteStep [] [] $ Pattern t []) @?= Left err + unsafePerformIO (runNoLoggingT $ runRewriteT False def Nothing (rewriteStep [] [] $ Pattern t [])) + @?= Left err ---------------------------------------- -- tests for performRewrite (iterated rewrite in IO with logging) runRewrite :: Term -> IO (Natural, RewriteResult Term) runRewrite t = do - (counter, _, res) <- runNoLoggingT $ performRewrite def Nothing Nothing [] [] $ Pattern t [] + (counter, _, res) <- runNoLoggingT $ performRewrite False def Nothing Nothing [] [] $ Pattern t [] pure (counter, fmap (.term) res) aborts :: Term -> IO () @@ -398,7 +400,8 @@ supportsDepthControl = where rewritesToDepth :: MaxDepth -> Steps -> Term -> t -> (t -> RewriteResult Term) -> IO () rewritesToDepth (MaxDepth depth) (Steps n) t t' f = do - (counter, _, res) <- runNoLoggingT $ performRewrite def Nothing (Just depth) [] [] $ Pattern t [] + (counter, _, res) <- + runNoLoggingT $ performRewrite False def Nothing (Just depth) [] [] $ Pattern t [] (counter, fmap (.term) res) @?= (n, f t') supportsCutPoints :: TestTree @@ -445,7 +448,8 @@ supportsCutPoints = where rewritesToCutPoint :: Text -> Steps -> Term -> t -> (t -> RewriteResult Term) -> IO () rewritesToCutPoint lbl (Steps n) t t' f = do - (counter, _, res) <- runNoLoggingT $ performRewrite def Nothing Nothing [lbl] [] $ Pattern t [] + (counter, _, res) <- + runNoLoggingT $ performRewrite False def Nothing Nothing [lbl] [] $ Pattern t [] (counter, fmap (.term) res) @?= (n, f t') supportsTerminalRules :: TestTree @@ -470,5 +474,6 @@ supportsTerminalRules = where rewritesToTerminal :: Text -> Steps -> Term -> t -> (t -> RewriteResult Term) -> IO () rewritesToTerminal lbl (Steps n) t t' f = do - (counter, _, res) <- runNoLoggingT $ performRewrite def Nothing Nothing [] [lbl] $ Pattern t [] + (counter, _, res) <- + runNoLoggingT $ performRewrite False def Nothing Nothing [] [lbl] $ Pattern t [] (counter, fmap (.term) res) @?= (n, f t') From 0aaa66c270ffd4d03c8bda17a78475c9712bfcd9 Mon Sep 17 00:00:00 2001 From: Everett Hildenbrandt Date: Mon, 10 Jul 2023 17:03:00 +0200 Subject: [PATCH 04/14] .github/release: automatically publish releases (#226) This PR automatically publishes releases. - The devops repo has been updated to know what to do with these releases: https://github.com/runtimeverification/devops/commit/03af53c1a9b872be84f81c6345a0e9a03a489b6e - We have a branch open against K for testing that the publishing is working correctly: https://github.com/runtimeverification/k/pull/3502. Co-authored-by: rv-jenkins --- .github/workflows/master.yml | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 .github/workflows/master.yml diff --git a/.github/workflows/master.yml b/.github/workflows/master.yml new file mode 100644 index 000000000..533b8cda2 --- /dev/null +++ b/.github/workflows/master.yml @@ -0,0 +1,26 @@ +name: "Release" +on: + push: + branches: + - main + +jobs: + + update-dependents: + name: 'Publish Release' + runs-on: ubuntu-latest + environment: production + steps: + - name: 'Update dependents' + env: + GITHUB_TOKEN: ${{ secrets.JENKINS_GITHUB_PAT }} + run: | + set -x + version="${GITHUB_SHA}" + curl --fail \ + -X POST \ + -H "Accept: application/vnd.github+json" \ + -H "Authorization: Bearer ${GITHUB_TOKEN}" \ + -H "X-GitHub-Api-Version: 2022-11-28" \ + https://api.github.com/repos/runtimeverification/devops/dispatches \ + -d '{"event_type":"on-demand-test","client_payload":{"repo":"runtimeverification/hs-backend-booster","version":"'${version}'"}}' From 09692d6ebd8f4a4c6fd39aab4b7ce3286d724aca Mon Sep 17 00:00:00 2001 From: Georgy Lukyanov Date: Mon, 10 Jul 2023 19:02:50 +0200 Subject: [PATCH 05/14] Simplify constraints in patterns (#208) Closes #206 * add `simplifyPattern` that simplifies both the pattern's term and it's constraints * add somewhat bogus unit tests that duplicate the ones for `evaluateTerm`, but operate on `Pattern`. Proper constraint simplification needs the LLVM backend and thus is not done with unit tests. --- library/Booster/JsonRpc.hs | 16 ++++----- library/Booster/Pattern/ApplyEquations.hs | 35 ++++++++++++++++++- library/Booster/Pattern/Util.hs | 4 +++ .../Test/Booster/Pattern/ApplyEquations.hs | 32 ++++++++++++++++- 4 files changed, 77 insertions(+), 10 deletions(-) diff --git a/library/Booster/JsonRpc.hs b/library/Booster/JsonRpc.hs index 87079385a..053729337 100644 --- a/library/Booster/JsonRpc.hs +++ b/library/Booster/JsonRpc.hs @@ -42,7 +42,7 @@ import Booster.Pattern.Rewrite ( RewriteTrace (..), performRewrite, ) -import Booster.Pattern.Util (sortOfTerm) +import Booster.Pattern.Util (sortOfPattern) import Booster.Syntax.Json (KoreJson (..), addHeader, sortOfJson) import Booster.Syntax.Json.Externalise import Booster.Syntax.Json.Internalise (internalisePattern, internaliseTermOrPredicate) @@ -141,17 +141,17 @@ respond stateVar = Log.logError $ "Error internalising cterm: " <> Text.pack (show patternErrors) pure $ Left $ backendError CouldNotVerifyPattern patternErrors -- term and predicate (pattern) - Right (TermAndPredicate Pattern{term, constraints}) -> do - Log.logInfoNS "booster" "Simplifying term of a pattern" - ApplyEquations.evaluateTerm doTracing ApplyEquations.TopDown def mLlvmLibrary term >>= \case - Right (newTerm, traces) -> do - let (t, p) = externalisePattern Pattern{constraints, term = newTerm} - tSort = externaliseSort (sortOfTerm newTerm) + Right (TermAndPredicate pat) -> do + Log.logInfoNS "booster" "Simplifying a pattern" + ApplyEquations.simplifyPattern doTracing def mLlvmLibrary pat >>= \case + Right (newPattern, patternTraces) -> do + let (t, p) = externalisePattern newPattern + tSort = externaliseSort (sortOfPattern newPattern) result = maybe t (KoreJson.KJAnd tSort t) p pure . Right . Simplify $ SimplifyResult { state = addHeader result - , logs = mkTraces traces + , logs = mkTraces patternTraces } Left (ApplyEquations.EquationLoop _traces terms) -> pure . Left . backendError RpcError.Aborted $ map externaliseTerm terms -- FIXME diff --git a/library/Booster/Pattern/ApplyEquations.hs b/library/Booster/Pattern/ApplyEquations.hs index 8f88d54e7..746a7c829 100644 --- a/library/Booster/Pattern/ApplyEquations.hs +++ b/library/Booster/Pattern/ApplyEquations.hs @@ -14,6 +14,7 @@ module Booster.Pattern.ApplyEquations ( isMatchFailure, isSuccess, simplifyConstraint, + simplifyPattern, ) where import Control.Monad @@ -231,7 +232,15 @@ evaluateTerm :: io (Either EquationFailure (Term, [EquationTrace])) evaluateTerm doTracing direction def llvmApi = runEquationT doTracing def llvmApi - . iterateEquations 100 direction PreferFunctions + . evaluateTerm' direction + +-- version for internal nested evaluation +evaluateTerm' :: + MonadLoggerIO io => + Direction -> + Term -> + EquationT io Term +evaluateTerm' direction = iterateEquations 100 direction PreferFunctions ---------------------------------------- @@ -596,3 +605,27 @@ simplifyConstraint' = \case result <- iterateEquations 100 TopDown PreferFunctions t EquationT $ put prior pure result + +-------------------------------------------------------------------- + +{- | Simplify a Pattern, processing its constraints independently. + Returns either the first failure or the new pattern if no failure was encountered +-} +simplifyPattern :: + MonadLoggerIO io => + Bool -> + KoreDefinition -> + Maybe LLVM.API -> + Pattern -> + io (Either EquationFailure (Pattern, [EquationTrace])) +simplifyPattern doTracing def mLlvmLibrary = runEquationT doTracing def mLlvmLibrary . simplifyPattern' + +-- version for internal nested evaluation +simplifyPattern' :: + MonadLoggerIO io => + Pattern -> + EquationT io Pattern +simplifyPattern' Pattern{term, constraints} = do + newTerm <- evaluateTerm' TopDown term + simplifiedConstraints <- traverse simplifyConstraint' constraints + pure Pattern{constraints = simplifiedConstraints, term = newTerm} diff --git a/library/Booster/Pattern/Util.hs b/library/Booster/Pattern/Util.hs index 8f98e8ce0..bafe1917d 100644 --- a/library/Booster/Pattern/Util.hs +++ b/library/Booster/Pattern/Util.hs @@ -6,6 +6,7 @@ module Booster.Pattern.Util ( applySubst, sortOfTerm, sortOfTermOrPredicate, + sortOfPattern, retractPattern, substituteInTerm, substituteInPredicate, @@ -65,6 +66,9 @@ sortOfTermOrPredicate :: TermOrPredicate -> Maybe Sort sortOfTermOrPredicate (TermAndPredicate Pattern{term}) = Just (sortOfTerm term) sortOfTermOrPredicate (APredicate _) = Nothing +sortOfPattern :: Pattern -> Sort +sortOfPattern pat = sortOfTerm pat.term + retractPattern :: TermOrPredicate -> Maybe Pattern retractPattern (TermAndPredicate patt) = Just patt retractPattern _ = Nothing diff --git a/unit-tests/Test/Booster/Pattern/ApplyEquations.hs b/unit-tests/Test/Booster/Pattern/ApplyEquations.hs index 74eaa0d63..75a27696f 100644 --- a/unit-tests/Test/Booster/Pattern/ApplyEquations.hs +++ b/unit-tests/Test/Booster/Pattern/ApplyEquations.hs @@ -7,6 +7,7 @@ License : BSD-3-Clause module Test.Booster.Pattern.ApplyEquations ( test_evaluateFunction, test_simplify, + test_simplifyPattern, test_errors, ) where @@ -93,7 +94,7 @@ test_simplify = testGroup "Performing simplifications" [ testCase "No simplification applies" $ do - let subj = app f1 [app f2 [a]] + let subj = [trm| f1{}(f2{}(A:SomeSort{})) |] simpl TopDown subj @?= Right subj simpl BottomUp subj @?= Right subj , -- con1(con2(f2(a))) => con2(f2(a)) @@ -112,6 +113,35 @@ test_simplify = simpl direction = fmap fst . unsafePerformIO . runNoLoggingT . evaluateTerm False direction simplDef Nothing a = var "A" someSort +test_simplifyPattern :: TestTree +test_simplifyPattern = + testGroup + "Performing simplifications" + [ testCase "No simplification applies" $ do + let subj = [trm| f1{}(f2{}(A:SomeSort{})) |] + simpl Pattern{term = subj, constraints = []} @?= Right Pattern{term = subj, constraints = []} + simpl Pattern{term = subj, constraints = []} @?= Right Pattern{term = subj, constraints = []} + , -- con1(con2(f2(a))) => con2(f2(a)) + testCase "Simplification of constructors" $ do + let subj = app con1 [app con2 [app f2 [a]]] + simpl Pattern{term = subj, constraints = []} + @?= Right Pattern{term = app con2 [app f2 [a]], constraints = []} + simpl Pattern{term = subj, constraints = []} + @?= Right Pattern{term = app con2 [app f2 [a]], constraints = []} + , -- con3(f2(a), f2(a)) => inj{sub,some}(con4(f2(a), f2(a))) + testCase "Simplification with argument match" $ do + let subj = Pattern{term = [trm| con3{}(f2{}(A:SomeSort{}), f2{}(A:SomeSort{})) |], constraints = []} + result = + Pattern + { term = [trm| inj{AnotherSort{}, SomeSort{}}(con4{}(f2{}(A:SomeSort{}), f2{}(A:SomeSort{}))) |] + , constraints = [] + } + simpl subj @?= Right result + ] + where + simpl = fmap fst . unsafePerformIO . runNoLoggingT . simplifyPattern False simplDef Nothing + a = var "A" someSort + test_errors :: TestTree test_errors = testGroup From c28d5ffc53a93c4810f3ac7ef2ced6563b5e7cde Mon Sep 17 00:00:00 2001 From: Samuel Balco Date: Tue, 11 Jul 2023 16:16:03 +0100 Subject: [PATCH 06/14] Add `--solver-transcript` option to the booster (#228) Fixes #218 --- tools/booster/Server.hs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tools/booster/Server.hs b/tools/booster/Server.hs index 149dfd11e..81557fe09 100644 --- a/tools/booster/Server.hs +++ b/tools/booster/Server.hs @@ -61,6 +61,7 @@ import Kore.Log ( withLogger, ) import Kore.Log qualified as Log +import Kore.Log.DebugSolver qualified as Log import Kore.Rewrite.SMT.Lemma (declareSMTLemmas) import Kore.Syntax.Definition (ModuleName (ModuleName), SentenceAxiom) import Options.SMT (KoreSolverOptions (..), parseKoreSolverOptions) @@ -85,6 +86,7 @@ main = do } , koreSolverOptions , proxyOptions = ProxyOptions{printStats} + , debugSolverOptions } = options (logLevel, customLevels) = adjustLogLevels logLevels levelFilter :: Logger.LogSource -> LogLevel -> Bool @@ -113,6 +115,7 @@ main = do (defaultKoreLogOptions (ExeName "") startTime) { Log.logLevel = coLogLevel , Log.timestampsSwitch = TimestampsDisable + , Log.debugSolverOptions = debugSolverOptions , Log.logType = LogSomeAction $ LogAction $ \txt -> liftIO $ monadLogger defaultLoc "kore" logLevel $ toLogStr txt } srvSettings = serverSettings port "*" @@ -171,6 +174,7 @@ data CLProxyOptions = CLProxyOptions { clOptions :: CLOptions , proxyOptions :: ProxyOptions , koreSolverOptions :: !KoreSolverOptions + , debugSolverOptions :: !Log.DebugSolverOptions } newtype ProxyOptions = ProxyOptions @@ -189,6 +193,7 @@ clProxyOptionsParser = <$> clOptionsParser <*> parseProxyOptions <*> parseKoreSolverOptions + <*> Log.parseDebugSolverOptions where parseProxyOptions = ProxyOptions From 9152f48a96365aaadb5b0e52465f4200d8f09450 Mon Sep 17 00:00:00 2001 From: Samuel Balco Date: Tue, 11 Jul 2023 23:57:09 +0100 Subject: [PATCH 07/14] Remove `dltest` (#230) The `dltest` binary was an early teting tool for integrating the LLVM backend API. It has since been replaced with a proper integration test and is now causing some issues #229 so this PR removes it completely. --- package.yaml | 10 ------ tools/dltest/Dltest.hs | 72 ------------------------------------------ 2 files changed, 82 deletions(-) delete mode 100644 tools/dltest/Dltest.hs diff --git a/package.yaml b/package.yaml index 6bcfbcc9b..747f92d86 100644 --- a/package.yaml +++ b/package.yaml @@ -163,16 +163,6 @@ executables: - text ghc-options: - -rtsopts - dltest: - source-dirs: tools/dltest - main: Dltest.hs - dependencies: - - base - - directory - - hs-backend-booster - - unix - ghc-options: - - -rtsopts eventlog-parser: source-dirs: tools/eventlog-parser main: EventlogParser.hs diff --git a/tools/dltest/Dltest.hs b/tools/dltest/Dltest.hs deleted file mode 100644 index 7ed53eeef..000000000 --- a/tools/dltest/Dltest.hs +++ /dev/null @@ -1,72 +0,0 @@ -{- | Stand-alone test util for dynamically loading the llvm-backend shared library - -Copyright : (c) Runtime Verification, 2022 -License : BSD-3-Clause --} -module Main ( - main, -) where - -import Booster.Definition.Attributes.Base -import Booster.LLVM.Internal as LLVM -import Booster.Pattern.Base -import Control.Monad.IO.Class (MonadIO (liftIO)) -import Data.List (isPrefixOf, partition) -import System.Environment (getArgs) - -main :: IO () -main = do - (_opts, args) <- partition ("-" `isPrefixOf`) <$> getArgs - case args of - [] -> putStrLn "Provide a path to the shared library" - [lib] -> LLVM.withDLib lib $ \dl -> do - api <- LLVM.mkAPI dl - LLVM.runLLVM api $ do - kore <- LLVM.ask - test <- LLVM.marshallTerm $ app f1 [app con1 [app f1 []], app con2 [], app f2 []] - liftIO $ kore.patt.dump test >>= putStrLn - _ -> putStrLn "Too many arguments" - -app :: Symbol -> [Term] -> Term -app s = SymbolApplication s [] - -asTotalFunction, asConstructor :: SymbolAttributes -asTotalFunction = SymbolAttributes TotalFunction IsNotIdem IsNotAssoc IsNotMacroOrAlias Nothing -asConstructor = SymbolAttributes Constructor IsNotIdem IsNotAssoc IsNotMacroOrAlias Nothing - -someSort :: Sort -someSort = SortApp "SomeSort" [] - -con1, con2, f1, f2 :: Symbol -con1 = - Symbol - { name = "con1" - , sortVars = [] - , resultSort = someSort - , argSorts = [someSort] - , attributes = asConstructor - } -con2 = - Symbol - { name = "con2" - , sortVars = [] - , resultSort = someSort - , argSorts = [someSort] - , attributes = asConstructor - } -f1 = - Symbol - { name = "f1" - , sortVars = [] - , resultSort = someSort - , argSorts = [someSort] - , attributes = asTotalFunction - } -f2 = - Symbol - { name = "f2" - , sortVars = [] - , resultSort = someSort - , argSorts = [someSort] - , attributes = asConstructor - } From 708c68284fa28e6cb0d25644e4de6761aa6d30e4 Mon Sep 17 00:00:00 2001 From: Everett Hildenbrandt Date: Wed, 12 Jul 2023 17:51:04 +0200 Subject: [PATCH 08/14] Accept auto-updates from haskell backend repo (#233) This sets it up so that the booster can accept automatic updates from the haskell backend repo. - A new file `deps/haskell-backend_release` is added pinning the release tag. - The file `.github/workflows/update-deps.yml` is added to sync the nix flake build for this submodule. This is to be paired with a PR into K which shifts it to sourcing the Haskell backend from the booster repo (https://github.com/runtimeverification/k/pull/3514). --------- Co-authored-by: rv-jenkins --- .github/workflows/update-deps.yml | 60 +++++++++++++++++++++++++++++++ deps/haskell-backend_release | 1 + flake.lock | 1 + flake.nix | 2 +- 4 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/update-deps.yml create mode 100644 deps/haskell-backend_release diff --git a/.github/workflows/update-deps.yml b/.github/workflows/update-deps.yml new file mode 100644 index 000000000..281590e0f --- /dev/null +++ b/.github/workflows/update-deps.yml @@ -0,0 +1,60 @@ +name: 'Update Nix Flake Inputs' +on: + push: + branches: + - '_update-deps/runtimeverification/haskell-backend' + workflow_dispatch: +# Stop in progress workflows on the same branch and same workflow to use latest committed code +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + + nix-flake-submodule-sync: + name: 'Nix flake submodule sync' + runs-on: ubuntu-20.04 + steps: + - name: 'Check out code, set up Git' + uses: actions/checkout@v3 + with: + token: ${{ secrets.JENKINS_GITHUB_PAT }} + submodules: recursive + - run: | + git config --global user.name rv-jenkins + git config --global user.email devops@runtimeverification.com + + - name: 'Install Nix' + uses: cachix/install-nix-action@v22 + with: + install_url: https://releases.nixos.org/nix/nix-2.13.3/install + extra_nix_config: | + access-tokens = github.com=${{ secrets.GITHUB_TOKEN }} + substituters = http://cache.nixos.org https://hydra.iohk.io + trusted-public-keys = cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY= hydra.iohk.io:f/Ea+s+dFdN+3Y/G+FDgSq+a5NEWhJGzdjvKNGv0/EQ= + + - name: 'Install Cachix' + uses: cachix/cachix-action@v12 + with: + name: k-framework + authToken: '${{ secrets.CACHIX_PUBLIC_TOKEN }}' + + - name: 'Update Nix flake from haskell backend release tag' + run: | + set -euxo pipefail + changed=false + + haskell_backend_version=$(cat deps/haskell-backend_release) + sed -i 's! haskell-backend.url = "github:runtimeverification/haskell-backend/[0-9a-f]*";! haskell-backend.url = "github:runtimeverification/haskell-backend/'${haskell_backend_version}'";!' flake.nix + if git add flake.nix && git commit -m "flake.nix: update haskell-backend to version ${haskell_backend_version}"; then + changed=true + fi + + nix flake update + if git add flake.lock && git commit -m 'flake.lock: update'; then + changed=true + fi + + if ${changed}; then + git push + fi diff --git a/deps/haskell-backend_release b/deps/haskell-backend_release new file mode 100644 index 000000000..0539ba01d --- /dev/null +++ b/deps/haskell-backend_release @@ -0,0 +1 @@ +a6230144a37ee9ebf0f6dffc849faf5ce10df380 diff --git a/flake.lock b/flake.lock index eef0de528..e7067460b 100644 --- a/flake.lock +++ b/flake.lock @@ -450,6 +450,7 @@ "original": { "owner": "runtimeverification", "repo": "haskell-backend", + "rev": "a6230144a37ee9ebf0f6dffc849faf5ce10df380", "type": "github" } }, diff --git a/flake.nix b/flake.nix index 5306b7882..aef98747b 100644 --- a/flake.nix +++ b/flake.nix @@ -3,7 +3,7 @@ inputs = { k-framework.url = "github:runtimeverification/k/v5.6.131"; - haskell-backend.url = "github:runtimeverification/haskell-backend"; + haskell-backend.url = "github:runtimeverification/haskell-backend/a6230144a37ee9ebf0f6dffc849faf5ce10df380"; k-framework.inputs.booster-backend.follows = ""; haskell-nix.follows = "haskell-backend/haskell-nix"; nixpkgs.follows = "haskell-backend/haskell-nix/nixpkgs-unstable"; From 5958731bed4ba1c49780fbc92ec6c14e74210fd8 Mon Sep 17 00:00:00 2001 From: Jost Berthold Date: Thu, 13 Jul 2023 11:00:54 +1000 Subject: [PATCH 09/14] 231 Refactor match1, modifying variable and symbol cases. Adapt tests (#232) Fixes #231 * Variables on the RHS of a match produce an indeterminate result unless LHS is also a variable * Previously there were a few cases where all symbol applications produced indeterminate results but only functions should. * Tests that previously used variables as function arguments had to be adapted (by wrapping the variable in a constructor, to retain symbolicness of the function argument) * The `match1` workhorse function of the matcher was refactored and commented for better overview --- library/Booster/Pattern/ApplyEquations.hs | 4 +- library/Booster/Pattern/Match.hs | 196 ++++++++++++------ .../Test/Booster/Pattern/ApplyEquations.hs | 44 ++-- unit-tests/Test/Booster/Pattern/Match.hs | 16 +- 4 files changed, 167 insertions(+), 93 deletions(-) diff --git a/library/Booster/Pattern/ApplyEquations.hs b/library/Booster/Pattern/ApplyEquations.hs index 746a7c829..5633073e3 100644 --- a/library/Booster/Pattern/ApplyEquations.hs +++ b/library/Booster/Pattern/ApplyEquations.hs @@ -99,8 +99,8 @@ instance Pretty EquationTrace where , pretty rewritten , "using " <> locationInfo ] - FailedMatch _ -> - vsep ["Term did not match rule " <> locationInfo, prettyTerm] + FailedMatch reason -> + vsep ["Term did not match rule " <> locationInfo, prettyTerm, pretty reason] IndeterminateMatch -> vsep ["Term had indeterminate match for rule " <> locationInfo, prettyTerm] RuleNotPreservingDefinedness -> diff --git a/library/Booster/Pattern/Match.hs b/library/Booster/Pattern/Match.hs index 5306b0ffd..eb2d85708 100644 --- a/library/Booster/Pattern/Match.hs +++ b/library/Booster/Pattern/Match.hs @@ -23,6 +23,7 @@ import Data.Sequence (Seq (..), (><)) import Data.Sequence qualified as Seq import Data.Set (Set) import Data.Set qualified as Set +import Prettyprinter import Booster.Definition.Base import Booster.Pattern.Base @@ -31,6 +32,7 @@ import Booster.Pattern.Util ( checkSymbolIsAc, freeVariables, isConstructorSymbol, + isFunctionSymbol, modifyVariablesInP, sortOfTerm, substituteInTerm, @@ -57,6 +59,13 @@ data MatchFailReason ArgLengthsDiffer Term Term deriving stock (Eq, Show) +instance Pretty MatchFailReason where + pretty = \case + General reason -> pretty reason + SharedVariables vs -> "Shared variables:" <+> hsep (map pretty $ Set.toList vs) + SubsortingError err -> pretty $ show err + ArgLengthsDiffer t1 t2 -> vsep ["Argument length differ", pretty t1, pretty t2] + {- | Attempts to find a matching substitution for the given term1 to term2. @@ -107,6 +116,38 @@ match1 :: StateT MatchState (Except MatchResult) () ----- Variables -- pattern term is a (target) variable: check sorts, introduce a new binding + +-- Matching term2 with term1, when term2 is a variable is safe here, +-- because functional equations are ordered. +-- Consider a function f: +-- +-- rule f(foo(A)) => baz() [priority(40)] +-- rule f(A) => A +-- where foo() is a constructor and A is a variable. +-- +-- We can safely match f(foo(X)) and rewrite to baz(), because there +-- are no preceding equations involving the constructor foo. +-- +-- If instead there was a higher-priority rule +-- +-- rule f(foo(bar())) => flob() [priority(30)] +-- +-- the preceding match would be indeterminate and the function +-- application would be aborted before reaching the +-- f(foo(A)) => baz() +-- case. +-- +-- Finally, if the rules had the opposite priorities +-- +-- rule f(foo(A)) => baz() [priority(30)] +-- rule f(foo(bar())) => flob() [priority(40)] +-- rule f(A) => A +-- +-- Since function equations are ordered, the pattern +-- f(foo(bar())) => flob() +-- would be unreachable anyway, hence +-- f(foo(A)) => baz() +-- must always apply to f(foo(X)) match1 term1@(Var var@Variable{variableSort}) term2 = @@ -126,26 +167,37 @@ match1 then term2 else Injection termSort variableSort term2 ) ------ Domain values --- two domain values: have to fully agree +-- subject term is a variable but pattern term is not: indeterminate match1 - d1@(DomainValue s1 t1) - d2@(DomainValue s2 t2) = - do - unless (t1 == t2) $ - failWith (DifferentValues d1 d2) - unless (s1 == s2) $ -- sorts must be exactly the same for DVs - failWith (DifferentSorts d1 d2) --- subject is function application (unevaluated): indeterminate + pat + var@Var{} = + indeterminate pat var +-- and-terms in subject term are considered indeterminate +-- (what would they mean?) match1 - d1@DomainValue{} - fct@SymbolApplication{} = - indeterminate d1 fct --- subject not a domain value nor a function application: fail + pat + andTerm@AndTerm{} = + indeterminate pat andTerm +----- Domain values match1 - d1@DomainValue{} - term2 = - failWith $ DifferentValues d1 term2 + d1@(DomainValue s1 t1) + subj = + case subj of + -- two domain values: have to fully agree + DomainValue s2 t2 -> do + unless (t1 == t2) $ + failWith (DifferentValues d1 subj) + unless (s1 == s2) $ -- sorts must be exactly the same for DVs + failWith (DifferentSorts d1 subj) + SymbolApplication sym _ _ + -- subject is function application (unevaluated): indeterminate + | isFunctionSymbol sym -> indeterminate d1 subj + -- subject is constructor: fail + | otherwise -> failWith $ DifferentValues d1 subj + -- Var{} case caught above + -- injections, and-terms, maps: fail + _other -> + failWith $ DifferentValues d1 subj ----- And Terms -- and-term in pattern: must unify with both arguments (typically used -- to bind variables while also matching) @@ -156,61 +208,67 @@ match1 enqueueProblem t1a term2 enqueueProblem t1b term2 ----- Injections --- two injections. Try to unify the contained terms if the sorts --- agree. Target sorts must be the same, source sorts may differ if --- the contained pattern term is just a variable, otherwise they need --- to be identical. match1 - pat@(Injection source1 target1 trm1) - subj@(Injection source2 target2 trm2) - | target1 /= target2 = do - failWith (DifferentSorts pat subj) - | source1 == source2 = do - enqueueProblem trm1 trm2 - | Var v <- trm1 = do - -- variable in pattern, check source sorts and bind - subsorts <- gets mSubsorts - isSubsort <- - lift . withExcept (MatchFailed . SubsortingError) $ - checkSubsort subsorts source2 source1 - if isSubsort - then bindVariable v (Injection source2 source1 trm2) - else failWith (DifferentSorts trm1 trm2) - | otherwise = - failWith (DifferentSorts pat subj) --- injection in pattern, unevaluated function call in subject: indeterminate -match1 - inj@Injection{} - trm@SymbolApplication{} = - indeterminate inj trm --- injection in pattern, no injection in subject: fail -match1 - inj@Injection{} - trm = - failWith $ DifferentSymbols inj trm + inj@(Injection source1 target1 trm1) + subj = + case subj of + -- matching two injections: + -- Try to unify the contained terms if the sorts + -- agree. Target sorts must be the same, source sorts may + -- differ if the contained pattern term is just a + -- variable, otherwise they need to be identical. + Injection source2 target2 trm2 + | target1 /= target2 -> do + failWith (DifferentSorts inj subj) + | source1 == source2 -> do + enqueueProblem trm1 trm2 + | Var v <- trm1 -> do + -- variable in pattern, check source sorts and bind + subsorts <- gets mSubsorts + isSubsort <- + lift . withExcept (MatchFailed . SubsortingError) $ + checkSubsort subsorts source2 source1 + if isSubsort + then bindVariable v (Injection source2 source1 trm2) + else failWith (DifferentSorts trm1 trm2) + | otherwise -> + failWith (DifferentSorts inj subj) + -- injection in pattern, unevaluated function call in + -- subject: indeterminate + SymbolApplication sym _ _ + | isFunctionSymbol sym -> indeterminate inj subj + | otherwise -> failWith $ DifferentSymbols inj subj + -- injection in pattern, no injection in subject: fail + -- Var{} case caught above + -- and, domain values, maps: fail + _other -> + failWith $ DifferentSymbols inj subj ----- Symbol Applications --- two symbol applications: fail if names differ, recurse -match1 - t1@(SymbolApplication symbol1 sorts1 args1) - t2@(SymbolApplication symbol2 sorts2 args2) - | symbol1.name /= symbol2.name = - if isConstructorSymbol symbol1 && isConstructorSymbol symbol2 - then failWith (DifferentSymbols t1 t2) - else indeterminate t1 t2 - | length args1 /= length args2 = - lift $ throwE $ MatchFailed $ ArgLengthsDiffer t1 t2 - | sorts1 /= sorts2 = - failWith (DifferentSorts t1 t2) - -- If the symbol is non-free (AC symbol), return indeterminate - | checkSymbolIsAc symbol1 = - indeterminate t1 t2 - | otherwise = - enqueueProblems $ Seq.fromList $ zip args1 args2 --- subject not a symbol application: fail match1 - t1@SymbolApplication{} - t2 = - failWith $ DifferentSymbols t1 t2 + app@(SymbolApplication symbol1 sorts1 args1) + subj = + case subj of + -- two symbol applications: fail if names differ, match + -- argument count and sorts, recurse + SymbolApplication symbol2 sorts2 args2 + | symbol1.name /= symbol2.name -> + if isConstructorSymbol symbol1 && isConstructorSymbol symbol2 + then failWith (DifferentSymbols app subj) + else indeterminate app subj + | length args1 /= length args2 -> + lift $ throwE $ MatchFailed $ ArgLengthsDiffer app subj + | sorts1 /= sorts2 -> + failWith (DifferentSorts app subj) + -- If the symbol is non-free (AC symbol), return indeterminate + | checkSymbolIsAc symbol1 -> + indeterminate app subj + | otherwise -> + enqueueProblems $ Seq.fromList $ zip args1 args2 + -- subject not a symbol application: fail + -- Var{} case caught above + -- and, domain values, injections, maps: fail + _other -> + failWith $ DifferentSymbols app subj -- matching on maps unsupported match1 t1@KMap{} diff --git a/unit-tests/Test/Booster/Pattern/ApplyEquations.hs b/unit-tests/Test/Booster/Pattern/ApplyEquations.hs index 75a27696f..8d44651ab 100644 --- a/unit-tests/Test/Booster/Pattern/ApplyEquations.hs +++ b/unit-tests/Test/Booster/Pattern/ApplyEquations.hs @@ -36,29 +36,37 @@ test_evaluateFunction = "Evaluating functions using rules without side conditions" [ -- f1(a) => a testCase "Simple function evaluation" $ do - eval TopDown [trm| f1{}(A:SomeSort{}) |] @?= Right [trm| A:SomeSort{} |] - eval BottomUp [trm| f1{}(A:SomeSort{}) |] @?= Right [trm| A:SomeSort{} |] - , -- f2(f1(f1(a))) => f2(a). f2 is marked as partial, so not evaluating + eval TopDown [trm| f1{}(con2{}(A:SomeSort{})) |] @?= Right [trm| con2{}(A:SomeSort{}) |] + eval BottomUp [trm| f1{}(con2{}(A:SomeSort{})) |] @?= Right [trm| con2{}(A:SomeSort{}) |] + , -- f2(f1(f1(con2(a)))) => f2(con2(a)). f2 is marked as partial, so not evaluating testCase "Nested function applications, one not to be evaluated" $ do - eval TopDown [trm| f2{}(f1{}(f1{}(A:SomeSort{}))) |] @?= Right [trm| f2{}(A:SomeSort{}) |] - eval BottomUp [trm| f2{}(f1{}(f1{}(A:SomeSort{}))) |] @?= Right [trm| f2{}(A:SomeSort{}) |] - , -- f1(f2(f1(a))) => f1(f2(a)). Again f2 partial, so not evaluating, + let subj = [trm| f2{}(f1{}(f1{}(con2{}(A:SomeSort{})))) |] + goal = [trm| f2{}(con2{}(A:SomeSort{})) |] + eval TopDown subj @?= Right goal + eval BottomUp subj @?= Right goal + , -- f1(f2(f1(con2(a)))) => f1(f2(con2(a))). Again f2 partial, so not evaluating, -- therefore f1(x) => x not applied to unevaluated value testCase "Nested function applications with partial function inside" $ do - eval TopDown [trm| f1{}(f2{}(f1{}(A:SomeSort{}))) |] @?= Right [trm| f1{}(f2{}(A:SomeSort{})) |] - eval BottomUp [trm| f1{}(f2{}(f1{}(A:SomeSort{}))) |] @?= Right [trm| f1{}(f2{}(A:SomeSort{})) |] - , -- f1(con1(con1(..con1(a)..))) => con2(con2(..con2(a)..)) + let subj = [trm| f1{}(f2{}(f1{}(con2{}(A:SomeSort{})))) |] + goal = [trm| f1{}(f2{}(con2{}(A:SomeSort{}))) |] + eval TopDown subj @?= Right goal + eval BottomUp subj @?= Right goal + , -- f1(con1(con1(..con1(con2(a))..))) => con2(con2(..con2(a)..)) + -- using f1(con1(X)) => con2(X) repeatedly testCase "Recursive evaluation" $ do let subj depth = app f1 [iterate (apply con1) a !! depth] + a = app con2 [var "A" someSort] + apply f = app f . (: []) + n `times` f = foldr (.) id (replicate n $ apply f) -- top-down evaluation: a single iteration is enough eval TopDown (subj 101) @?= Right (101 `times` con2 $ a) -- bottom-up evaluation: `depth` many iterations eval BottomUp (subj 100) @?= Right (100 `times` con2 $ a) isTooManyIterations $ eval BottomUp (subj 101) - , -- con3(f1(a), f1(con1(b))) => con3(a, con2(b)) + , -- con3(f1(con2(a)), f1(con1(con2(b)))) => con3(con2(a), con2(con2(b))) testCase "Several function calls inside a constructor" $ do - eval TopDown [trm| con3{}(f1{}(A:SomeSort{}), f1{}(con1{}(B:SomeSort{}))) |] - @?= Right [trm| con3{}(A:SomeSort{}, con2{}(B:SomeSort{})) |] + eval TopDown [trm| con3{}(f1{}(con2{}(A:SomeSort{})), f1{}(con1{}(con2{}(B:SomeSort{})))) |] + @?= Right [trm| con3{}(con2{}(A:SomeSort{}), con2{}(con2{}(B:SomeSort{}))) |] , -- f1(inj{sub,some}(con4(a, b))) => f1(a) => a (not using f1-is-identity) testCase "Matching uses priorities" $ do eval TopDown [trm| f1{}(inj{AnotherSort{}, SomeSort{}}(con4{}(A:SomeSort{}, B:SomeSort{}))) |] @@ -69,21 +77,17 @@ test_evaluateFunction = eval TopDown subj @?= Right subj eval BottomUp subj @?= Right subj , testCase "f2 with symbolic argument, constraint prevents rule application" $ do - let subj = app f2 [app con1 [a]] + let subj = [trm| f2{}(con1{}(A:SomeSort{})) |] eval TopDown subj @?= Right subj eval BottomUp subj @?= Right subj , testCase "f2 with concrete argument, satisfying constraint" $ do - let subj = app f2 [app con1 [d]] - result = app f2 [d] + let subj = [trm| f2{}(con1{}(\dv{SomeSort{}}("hey"))) |] + result = [trm| f2{}(\dv{SomeSort{}}("hey")) |] eval TopDown subj @?= Right result - -- eval BottomUp subj @?= Right result + eval BottomUp subj @?= Right result ] where eval direction = fmap fst . unsafePerformIO . runNoLoggingT . evaluateTerm False direction funDef Nothing - a = var "A" someSort - d = dv someSort "hey" - apply f = app f . (: []) - n `times` f = foldr (.) id (replicate n $ apply f) isTooManyIterations (Left (TooManyIterations _n _ _)) = pure () isTooManyIterations (Left err) = assertFailure $ "Unexpected error " <> show err diff --git a/unit-tests/Test/Booster/Pattern/Match.hs b/unit-tests/Test/Booster/Pattern/Match.hs index d041763e9..2eaa00f14 100644 --- a/unit-tests/Test/Booster/Pattern/Match.hs +++ b/unit-tests/Test/Booster/Pattern/Match.hs @@ -137,6 +137,18 @@ varsAndValues = d = dv differentSort "" in test "var and domain value (different sort)" v d $ failed (DifferentSorts v d) + , let v = var "X" someSort + d = dv someSort "" + in test "dv matching a var (on RHS): indeterminate" d v $ + MatchIndeterminate d v + , let d = dv someSort "" + f = app f1 [d] + in test "dv matching a function call (on RHS): indeterminate" d f $ + MatchIndeterminate d f + , let d = dv someSort "" + c = app con1 [d] + in test "dv matching a constructor (on RHS): fail" d c $ + failed (DifferentValues d c) ] andTerms :: TestTree @@ -165,10 +177,10 @@ andTerms = fa = app f1 [d] fb = app f1 [dv someSort "b"] in test - "And-term on the right, fails" + "And-term on the right, indeterminate" d (AndTerm fa fb) - (failed $ DifferentValues d (AndTerm fa fb)) + (MatchIndeterminate d (AndTerm fa fb)) ] cornerCases :: TestTree From 952f64b1c379aa60e7f4463d1b87eb2d0c7e0365 Mon Sep 17 00:00:00 2001 From: Jost Berthold Date: Thu, 13 Jul 2023 22:30:16 +1000 Subject: [PATCH 10/14] Connect auto update to existing update script (#234) Related to #233 , extending the update job scope * Update `cabal.project` and `stack.yaml` with the desired commit hash and correct sha (uses existing script) * Update `cabal.project.freeze` (in case the updated haskell-backend adds/removes library dependencies) This uses another existing script, called from the first one (changed). * Do this only if the `flake.nix` file has actually changed (to avoid running `nix flake update` without need) * Combine all changes in a single commit for better overview. Also contains other small clean-ups in `flake.nix` and `cabal.project.freeze`. --- .github/workflows/update-deps.yml | 10 +++++----- cabal.project.freeze | 4 +--- flake.nix | 2 -- scripts/freeze-cabal-to-stack-resolver.sh | 7 +++++++ scripts/update-haskell-backend.sh | 6 ++++-- 5 files changed, 17 insertions(+), 12 deletions(-) diff --git a/.github/workflows/update-deps.yml b/.github/workflows/update-deps.yml index 281590e0f..97e17d941 100644 --- a/.github/workflows/update-deps.yml +++ b/.github/workflows/update-deps.yml @@ -46,15 +46,15 @@ jobs: haskell_backend_version=$(cat deps/haskell-backend_release) sed -i 's! haskell-backend.url = "github:runtimeverification/haskell-backend/[0-9a-f]*";! haskell-backend.url = "github:runtimeverification/haskell-backend/'${haskell_backend_version}'";!' flake.nix - if git add flake.nix && git commit -m "flake.nix: update haskell-backend to version ${haskell_backend_version}"; then - changed=true - fi - nix flake update - if git add flake.lock && git commit -m 'flake.lock: update'; then + if ! git diff --exit-code flake.nix; then + git add flake.nix changed=true fi if ${changed}; then + scripts/update-haskell-backend.sh ${haskell_backend_version} + git add flake.lock stack.yaml cabal.project cabal.project.freeze + git commit -m "update haskell-backend to version ${haskell_backend_version}" git push fi diff --git a/cabal.project.freeze b/cabal.project.freeze index 65e211f89..e3b962698 100644 --- a/cabal.project.freeze +++ b/cabal.project.freeze @@ -12,7 +12,6 @@ constraints: any.Cabal ==3.6.3.0, aeson -cffi +ordered-keymap, any.aeson-pretty ==0.8.9, aeson-pretty -lib-only, - any.alex ==3.4.0.0, any.ansi-terminal ==0.11.4, ansi-terminal -example +win32-2-13-1, any.ansi-wl-pprint ==0.6.9, @@ -115,7 +114,6 @@ constraints: any.Cabal ==3.6.3.0, any.gitrev ==1.3.1, any.graphviz ==2999.20.1.0, graphviz -test-parsing, - any.happy ==1.20.1.1, any.hashable ==1.4.2.0, hashable +integer-gmp -random-initial-seed, any.hashtables ==1.3.1, @@ -300,7 +298,7 @@ constraints: any.Cabal ==3.6.3.0, any.wl-pprint-text ==1.2.0.2, any.xml-conduit ==1.9.1.2, any.xml-types ==0.3.8, - any.yaml ==0.11.11.0, + any.yaml ==0.11.11.1, yaml +no-examples +no-exe, any.zigzag ==0.0.1.0, any.zlib ==0.6.3.0, diff --git a/flake.nix b/flake.nix index aef98747b..f3d1112c6 100644 --- a/flake.nix +++ b/flake.nix @@ -150,7 +150,6 @@ booster-dev = packages."hs-backend-booster:exe:booster-dev"; rpc-client = packages."hs-backend-booster:exe:rpc-client"; parsetest = packages."hs-backend-booster:exe:parsetest"; - dltest = packages."hs-backend-booster:exe:dltest"; } // packages // collectOutputs "packages" flakes); apps = perSystem (system: @@ -178,7 +177,6 @@ rpc-client = apps."hs-backend-booster:exe:rpc-client"; parsetest = apps."hs-backend-booster:exe:parsetest"; parsetest-binary = apps."hs-backend-booster:exe:parsetest-binary"; - dltest = apps."hs-backend-booster:exe:dltest"; update-haskell-backend = { type = "app"; program = "${scripts}/update-haskell-backend.sh"; diff --git a/scripts/freeze-cabal-to-stack-resolver.sh b/scripts/freeze-cabal-to-stack-resolver.sh index b611619bc..6b9a157d2 100755 --- a/scripts/freeze-cabal-to-stack-resolver.sh +++ b/scripts/freeze-cabal-to-stack-resolver.sh @@ -2,8 +2,15 @@ set -euxo pipefail +# must remove the prior freeze file to actually update +rm -f cabal.project.freeze + stack --test ls dependencies \ | sed -e 's/^\([a-zA-Z0-9.-]*\) \([0-9.]*\)/--constraint="\1 == \2"/' \ | xargs -x cabal freeze --enable-tests +# ghc-bignum is removed from the freeze file because it is wired into +# GHC and creates problems when nix builds tools with different GHCs +sed -i -e '/any\.ghc-bignum/d' -e '/any\.happy/d' -e '/any\.alex/d' cabal.project.freeze + git diff cabal.project.freeze diff --git a/scripts/update-haskell-backend.sh b/scripts/update-haskell-backend.sh index b0674c10d..eac344298 100755 --- a/scripts/update-haskell-backend.sh +++ b/scripts/update-haskell-backend.sh @@ -10,12 +10,14 @@ if [ $REV != $OLD_REV ]; then # Set the commit hash inside stack.yaml and cabal.project sed -i -r "/haskell-backend.git/{n;s/commit:.*$/commit: $REV/}" stack.yaml sed -i -r "/haskell-backend.git/{n;s/tag:.*$/tag: $REV/}" cabal.project + # Update the stack.yaml.lock file by running a stack command that accesses dependencies + stack ls dependencies --test > /dev/null + # freeze cabal dependencies + $(dirname $0)/freeze-cabal-to-stack-resolver.sh # since we use cabal.project as source of truth for nix builds, we need to provide # a valid --sha256 hash for the haskell-backend library # the easiest way to do this is to simply run nix, let it fail and substitute the # correct sha back into cabal.project SHA=$(nix build 2>&1 | grep -oP 'got:\s+\K.+') || true sed -i -r "/haskell-backend.git/{n;s/tag:.*$/tag: $REV/;n;s|--sha256:.*$|--sha256: $SHA|}" cabal.project - # Update the stack.yaml.lock file by running a stack command that accesses dependencies - stack ls dependencies --test > /dev/null fi From 8bc670004dc43fd076e4d150b981c15cf9b71217 Mon Sep 17 00:00:00 2001 From: rv-jenkins Date: Fri, 14 Jul 2023 02:43:03 -0600 Subject: [PATCH 11/14] Update dependency: deps/haskell-backend_release (#235) Co-authored-by: devops Co-authored-by: Jost Berthold --- .github/workflows/update-deps.yml | 14 ++++ cabal.project | 4 +- deps/haskell-backend_release | 2 +- flake.lock | 113 ++++++------------------------ flake.nix | 2 +- stack.yaml | 2 +- 6 files changed, 42 insertions(+), 95 deletions(-) diff --git a/.github/workflows/update-deps.yml b/.github/workflows/update-deps.yml index 97e17d941..474a0c819 100644 --- a/.github/workflows/update-deps.yml +++ b/.github/workflows/update-deps.yml @@ -9,6 +9,10 @@ concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true +env: + ghc_version: "9.2.8" + stack_version: "2.9.3" + jobs: nix-flake-submodule-sync: @@ -39,6 +43,15 @@ jobs: name: k-framework authToken: '${{ secrets.CACHIX_PUBLIC_TOKEN }}' + - uses: haskell/actions/setup@v2 + id: setup-haskell + with: + ghc-version: ${{ env.ghc_version }} + stack-version: ${{ env.stack_version }} + enable-stack: true + stack-setup-ghc: true + cabal-update: true + - name: 'Update Nix flake from haskell backend release tag' run: | set -euxo pipefail @@ -53,6 +66,7 @@ jobs: fi if ${changed}; then + cabal update scripts/update-haskell-backend.sh ${haskell_backend_version} git add flake.lock stack.yaml cabal.project cabal.project.freeze git commit -m "update haskell-backend to version ${haskell_backend_version}" diff --git a/cabal.project b/cabal.project index e7b683bdc..32fd343ac 100644 --- a/cabal.project +++ b/cabal.project @@ -17,7 +17,7 @@ source-repository-package source-repository-package type: git location: https://github.com/runtimeverification/haskell-backend.git - tag: a6230144a37ee9ebf0f6dffc849faf5ce10df380 - --sha256: sha256-XLJQnk/QKmcnqM7gWaY1v7Pw5Xx+A2HmZWS5vYCQ5hE= + tag: 2e33122cd354045da4e5f40dea9344e02c673a64 + --sha256: sha256-O3cmhLpIYJXSmfAc8fDAvApAmNnosQ08Yexpx1kiTBw= subdir: kore kore-rpc-types diff --git a/deps/haskell-backend_release b/deps/haskell-backend_release index 0539ba01d..0e0cb8759 100644 --- a/deps/haskell-backend_release +++ b/deps/haskell-backend_release @@ -1 +1 @@ -a6230144a37ee9ebf0f6dffc849faf5ce10df380 +2e33122cd354045da4e5f40dea9344e02c673a64 diff --git a/flake.lock b/flake.lock index e7067460b..e7c1b1b75 100644 --- a/flake.lock +++ b/flake.lock @@ -281,21 +281,6 @@ } }, "flake-utils_2": { - "locked": { - "lastModified": 1642700792, - "narHash": "sha256-XqHrk7hFb+zBvRg6Ghl+AZDq03ov6OshJLiSWOoX5es=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "846b2ae0fc4cc943637d3d1def4454213e203cba", - "type": "github" - }, - "original": { - "owner": "numtide", - "repo": "flake-utils", - "type": "github" - } - }, - "flake-utils_3": { "inputs": { "systems": "systems" }, @@ -313,7 +298,7 @@ "type": "github" } }, - "flake-utils_4": { + "flake-utils_3": { "locked": { "lastModified": 1679360468, "narHash": "sha256-LGnza3cfXF10Biw3ZTg0u9o9t7s680Ww200t5KkHTh8=", @@ -329,7 +314,7 @@ "type": "github" } }, - "flake-utils_5": { + "flake-utils_4": { "locked": { "lastModified": 1642700792, "narHash": "sha256-XqHrk7hFb+zBvRg6Ghl+AZDq03ov6OshJLiSWOoX5es=", @@ -431,7 +416,6 @@ "inputs": { "flake-compat": "flake-compat_2", "haskell-nix": "haskell-nix", - "mach-nix": "mach-nix", "nixpkgs": [ "haskell-backend", "haskell-nix", @@ -440,17 +424,17 @@ "z3-src": "z3-src" }, "locked": { - "lastModified": 1688483898, - "narHash": "sha256-Y4AUxocbScrL44BekC2dLfAYoT+syRN+Sq/TqIIoyg8=", + "lastModified": 1689301998, + "narHash": "sha256-0ck+GxJbJMgdG7jLPMF3GzvwB6FVk/bMre+1zulH6pU=", "owner": "runtimeverification", "repo": "haskell-backend", - "rev": "a6230144a37ee9ebf0f6dffc849faf5ce10df380", + "rev": "2e33122cd354045da4e5f40dea9344e02c673a64", "type": "github" }, "original": { "owner": "runtimeverification", "repo": "haskell-backend", - "rev": "a6230144a37ee9ebf0f6dffc849faf5ce10df380", + "rev": "2e33122cd354045da4e5f40dea9344e02c673a64", "type": "github" } }, @@ -458,7 +442,7 @@ "inputs": { "flake-compat": "flake-compat_5", "haskell-nix": "haskell-nix_2", - "mach-nix": "mach-nix_2", + "mach-nix": "mach-nix", "nixpkgs": [ "k-framework", "haskell-backend", @@ -534,7 +518,7 @@ "cabal-36": "cabal-36_2", "cardano-shell": "cardano-shell_2", "flake-compat": "flake-compat_6", - "flake-utils": "flake-utils_4", + "flake-utils": "flake-utils_3", "ghc-8.6.5-iohk": "ghc-8.6.5-iohk_2", "hackage": "hackage_2", "hls-1.10": "hls-1.10_2", @@ -757,11 +741,11 @@ "inputs": { "booster-backend": [], "flake-compat": "flake-compat_4", - "flake-utils": "flake-utils_3", + "flake-utils": "flake-utils_2", "haskell-backend": "haskell-backend_2", "llvm-backend": "llvm-backend", "mavenix": "mavenix_2", - "nixpkgs": "nixpkgs_7", + "nixpkgs": "nixpkgs_6", "rv-utils": "rv-utils" }, "locked": { @@ -841,8 +825,8 @@ }, "mach-nix": { "inputs": { - "flake-utils": "flake-utils_2", - "nixpkgs": "nixpkgs_2", + "flake-utils": "flake-utils_4", + "nixpkgs": "nixpkgs_3", "pypi-deps-db": "pypi-deps-db" }, "locked": { @@ -859,29 +843,9 @@ "type": "github" } }, - "mach-nix_2": { - "inputs": { - "flake-utils": "flake-utils_5", - "nixpkgs": "nixpkgs_4", - "pypi-deps-db": "pypi-deps-db_2" - }, - "locked": { - "lastModified": 1681814846, - "narHash": "sha256-IMQ1Twf/ozE53CwrunXNlYD3D31xqgz/mZyZG38Ov/Y=", - "owner": "DavHau", - "repo": "mach-nix", - "rev": "8d903072c7b5426d90bc42a008242c76590af916", - "type": "github" - }, - "original": { - "owner": "DavHau", - "repo": "mach-nix", - "type": "github" - } - }, "mavenix": { "inputs": { - "nixpkgs": "nixpkgs_5", + "nixpkgs": "nixpkgs_4", "utils": "utils" }, "locked": { @@ -900,7 +864,7 @@ }, "mavenix_2": { "inputs": { - "nixpkgs": "nixpkgs_6", + "nixpkgs": "nixpkgs_5", "utils": "utils_3" }, "locked": { @@ -941,7 +905,7 @@ "nix_2": { "inputs": { "lowdown-src": "lowdown-src_2", - "nixpkgs": "nixpkgs_3", + "nixpkgs": "nixpkgs_2", "nixpkgs-regression": "nixpkgs-regression_2" }, "locked": { @@ -1216,21 +1180,6 @@ } }, "nixpkgs_2": { - "locked": { - "lastModified": 1643805626, - "narHash": "sha256-AXLDVMG+UaAGsGSpOtQHPIKB+IZ0KSd9WS77aanGzgc=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "554d2d8aa25b6e583575459c297ec23750adb6cb", - "type": "github" - }, - "original": { - "id": "nixpkgs", - "ref": "nixos-unstable", - "type": "indirect" - } - }, - "nixpkgs_3": { "locked": { "lastModified": 1657693803, "narHash": "sha256-G++2CJ9u0E7NNTAi9n5G8TdDmGJXcIjkJ3NF8cetQB8=", @@ -1246,7 +1195,7 @@ "type": "github" } }, - "nixpkgs_4": { + "nixpkgs_3": { "locked": { "lastModified": 1643805626, "narHash": "sha256-AXLDVMG+UaAGsGSpOtQHPIKB+IZ0KSd9WS77aanGzgc=", @@ -1261,7 +1210,7 @@ "type": "indirect" } }, - "nixpkgs_5": { + "nixpkgs_4": { "locked": { "lastModified": 1621552131, "narHash": "sha256-AD/AEXv+QOYAg0PIqMYv2nbGOGTIwfOGKtz3rE+y+Tc=", @@ -1275,7 +1224,7 @@ "type": "indirect" } }, - "nixpkgs_6": { + "nixpkgs_5": { "locked": { "lastModified": 1621552131, "narHash": "sha256-AD/AEXv+QOYAg0PIqMYv2nbGOGTIwfOGKtz3rE+y+Tc=", @@ -1289,7 +1238,7 @@ "type": "indirect" } }, - "nixpkgs_7": { + "nixpkgs_6": { "locked": { "lastModified": 1685573264, "narHash": "sha256-Zffu01pONhs/pqH07cjlF10NnMDLok8ix5Uk4rhOnZQ=", @@ -1371,22 +1320,6 @@ "type": "github" } }, - "pypi-deps-db_2": { - "flake": false, - "locked": { - "lastModified": 1678051695, - "narHash": "sha256-kFFP8TN8pEKARtjK9loGdH+TU23ZbHdVLCUdNcufKPs=", - "owner": "DavHau", - "repo": "pypi-deps-db", - "rev": "e00b22ead9d3534ba1c448e1af3076af6b234acf", - "type": "github" - }, - "original": { - "owner": "DavHau", - "repo": "pypi-deps-db", - "type": "github" - } - }, "rapidjson-src": { "flake": false, "locked": { @@ -1530,16 +1463,16 @@ "z3-src": { "flake": false, "locked": { - "lastModified": 1647807944, - "narHash": "sha256-hXlwaLsrMKm0rPAhRtynCjdhkeXIYzfNcjS04sHHfHY=", + "lastModified": 1674011426, + "narHash": "sha256-7cuUf29TMpX62PwO1ab3ZuzmzlcrRjTKB1CyXnYgYus=", "owner": "Z3Prover", "repo": "z3", - "rev": "f1806d32d6f21fd4df7a08719abbc1f6493d9dc5", + "rev": "3012293c35eadbfd73e5b94adbe50b0cc44ffb83", "type": "github" }, "original": { "owner": "Z3Prover", - "ref": "z3-4.8.15", + "ref": "z3-4.12.1", "repo": "z3", "type": "github" } diff --git a/flake.nix b/flake.nix index f3d1112c6..438d92ab1 100644 --- a/flake.nix +++ b/flake.nix @@ -3,7 +3,7 @@ inputs = { k-framework.url = "github:runtimeverification/k/v5.6.131"; - haskell-backend.url = "github:runtimeverification/haskell-backend/a6230144a37ee9ebf0f6dffc849faf5ce10df380"; + haskell-backend.url = "github:runtimeverification/haskell-backend/2e33122cd354045da4e5f40dea9344e02c673a64"; k-framework.inputs.booster-backend.follows = ""; haskell-nix.follows = "haskell-backend/haskell-nix"; nixpkgs.follows = "haskell-backend/haskell-nix/nixpkgs-unstable"; diff --git a/stack.yaml b/stack.yaml index b05e4d6c2..ab09d92fa 100644 --- a/stack.yaml +++ b/stack.yaml @@ -11,7 +11,7 @@ extra-deps: - typerep-map-0.5.0.0 - monad-validate-1.2.0.1 - git: https://github.com/runtimeverification/haskell-backend.git - commit: a6230144a37ee9ebf0f6dffc849faf5ce10df380 + commit: 2e33122cd354045da4e5f40dea9344e02c673a64 subdirs: - kore - kore-rpc-types From cabf1f98bc012b66058d4763e9ddf0589d1a14b9 Mon Sep 17 00:00:00 2001 From: rv-jenkins Date: Mon, 17 Jul 2023 18:04:07 -0600 Subject: [PATCH 12/14] Update dependency: deps/haskell-backend_release (#237) Co-authored-by: devops --- cabal.project | 4 ++-- deps/haskell-backend_release | 2 +- flake.lock | 8 ++++---- flake.nix | 2 +- stack.yaml | 2 +- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/cabal.project b/cabal.project index 32fd343ac..2ce98cbc5 100644 --- a/cabal.project +++ b/cabal.project @@ -17,7 +17,7 @@ source-repository-package source-repository-package type: git location: https://github.com/runtimeverification/haskell-backend.git - tag: 2e33122cd354045da4e5f40dea9344e02c673a64 - --sha256: sha256-O3cmhLpIYJXSmfAc8fDAvApAmNnosQ08Yexpx1kiTBw= + tag: 3ac2c87da44ed9e8fe4ba4583fb5860a4680d821 + --sha256: sha256-4XJ/YUkUUU0iYggfprOtpFu9tMQ7S28MQycGMFqZdBQ= subdir: kore kore-rpc-types diff --git a/deps/haskell-backend_release b/deps/haskell-backend_release index 0e0cb8759..df4220824 100644 --- a/deps/haskell-backend_release +++ b/deps/haskell-backend_release @@ -1 +1 @@ -2e33122cd354045da4e5f40dea9344e02c673a64 +3ac2c87da44ed9e8fe4ba4583fb5860a4680d821 diff --git a/flake.lock b/flake.lock index e7c1b1b75..8a66abfb9 100644 --- a/flake.lock +++ b/flake.lock @@ -424,17 +424,17 @@ "z3-src": "z3-src" }, "locked": { - "lastModified": 1689301998, - "narHash": "sha256-0ck+GxJbJMgdG7jLPMF3GzvwB6FVk/bMre+1zulH6pU=", + "lastModified": 1689600556, + "narHash": "sha256-/gk6l4UD9vvgaXZjqfVrRQOTAkabQGf7YFc3hTqbaMU=", "owner": "runtimeverification", "repo": "haskell-backend", - "rev": "2e33122cd354045da4e5f40dea9344e02c673a64", + "rev": "3ac2c87da44ed9e8fe4ba4583fb5860a4680d821", "type": "github" }, "original": { "owner": "runtimeverification", "repo": "haskell-backend", - "rev": "2e33122cd354045da4e5f40dea9344e02c673a64", + "rev": "3ac2c87da44ed9e8fe4ba4583fb5860a4680d821", "type": "github" } }, diff --git a/flake.nix b/flake.nix index 438d92ab1..6ed3c0a9c 100644 --- a/flake.nix +++ b/flake.nix @@ -3,7 +3,7 @@ inputs = { k-framework.url = "github:runtimeverification/k/v5.6.131"; - haskell-backend.url = "github:runtimeverification/haskell-backend/2e33122cd354045da4e5f40dea9344e02c673a64"; + haskell-backend.url = "github:runtimeverification/haskell-backend/3ac2c87da44ed9e8fe4ba4583fb5860a4680d821"; k-framework.inputs.booster-backend.follows = ""; haskell-nix.follows = "haskell-backend/haskell-nix"; nixpkgs.follows = "haskell-backend/haskell-nix/nixpkgs-unstable"; diff --git a/stack.yaml b/stack.yaml index ab09d92fa..06e25623e 100644 --- a/stack.yaml +++ b/stack.yaml @@ -11,7 +11,7 @@ extra-deps: - typerep-map-0.5.0.0 - monad-validate-1.2.0.1 - git: https://github.com/runtimeverification/haskell-backend.git - commit: 2e33122cd354045da4e5f40dea9344e02c673a64 + commit: 3ac2c87da44ed9e8fe4ba4583fb5860a4680d821 subdirs: - kore - kore-rpc-types From a258fe8932da8c5cffab1c1bfbe18b99730cacd8 Mon Sep 17 00:00:00 2001 From: Jost Berthold Date: Tue, 18 Jul 2023 11:30:58 +1000 Subject: [PATCH 13/14] 200 - Collect constraints in equation state, abort execution on `ensures(false)` (#227) Fixes #200 * `simplifyPattern` has changed to `evaluatePattern` to avoid confusion with the LLVM-driven `simplifyPattern`. * Side conditions (`constraints` in a pattern) are stored during evaluation of function and simplification rules. When evaluating/simplifying a predicate, it is temporarily removed from the stored side conditions. (This prepares for adding an SMT solver and checking constraints in combination later). * `ensures(P)` clauses in equations add to the stored side conditions, the returned pattern contains these new side conditions as well as the (simplified) original ones. * When an `ensures` clause is found to be (trivially) false, the evaluation is pruned. * This makes the rewrite `stuck` if the simplification is called from `performRewrite`. * Simplification of rewrite results before they are returned may change the result because parts may be stuck. In case of branching, the execution may continue if all branches but one are pruned, other results may turn into `stuck`. --- library/Booster/JsonRpc.hs | 16 +- library/Booster/Pattern/ApplyEquations.hs | 117 ++++++++----- library/Booster/Pattern/Rewrite.hs | 157 ++++++++++++------ library/Booster/Pattern/Unify.hs | 4 +- tools/booster/Stats.hs | 2 +- .../Test/Booster/Pattern/ApplyEquations.hs | 2 +- 6 files changed, 200 insertions(+), 98 deletions(-) diff --git a/library/Booster/JsonRpc.hs b/library/Booster/JsonRpc.hs index 053729337..5d893fc22 100644 --- a/library/Booster/JsonRpc.hs +++ b/library/Booster/JsonRpc.hs @@ -143,7 +143,7 @@ respond stateVar = -- term and predicate (pattern) Right (TermAndPredicate pat) -> do Log.logInfoNS "booster" "Simplifying a pattern" - ApplyEquations.simplifyPattern doTracing def mLlvmLibrary pat >>= \case + ApplyEquations.evaluatePattern doTracing def mLlvmLibrary pat >>= \case Right (newPattern, patternTraces) -> do let (t, p) = externalisePattern newPattern tSort = externaliseSort (sortOfPattern newPattern) @@ -153,6 +153,13 @@ respond stateVar = { state = addHeader result , logs = mkTraces patternTraces } + Left (ApplyEquations.SideConditionsFalse _ traces) -> do + let tSort = fromMaybe (error "unknown sort") $ sortOfJson req.state.term + pure . Right . Simplify $ + SimplifyResult + { state = addHeader $ KoreJson.KJBottom tSort + , logs = mkTraces traces + } Left (ApplyEquations.EquationLoop _traces terms) -> pure . Left . backendError RpcError.Aborted $ map externaliseTerm terms -- FIXME Left other -> @@ -509,4 +516,11 @@ mkLogRewriteTrace , origin = Booster , result = Failure{reason = "Internal error: " <> err, _ruleId = Nothing} } + ApplyEquations.SideConditionsFalse _predicates _traces -> + Simplification + { originalTerm = Nothing + , originalTermIndex = Nothing + , origin = Booster + , result = Failure{reason = "Side conditions false", _ruleId = Nothing} + } _ -> Nothing diff --git a/library/Booster/Pattern/ApplyEquations.hs b/library/Booster/Pattern/ApplyEquations.hs index 5633073e3..b19b0df4f 100644 --- a/library/Booster/Pattern/ApplyEquations.hs +++ b/library/Booster/Pattern/ApplyEquations.hs @@ -6,6 +6,7 @@ License : BSD-3-Clause -} module Booster.Pattern.ApplyEquations ( evaluateTerm, + evaluatePattern, Direction (..), EquationPreference (..), EquationFailure (..), @@ -14,7 +15,6 @@ module Booster.Pattern.ApplyEquations ( isMatchFailure, isSuccess, simplifyConstraint, - simplifyPattern, ) where import Control.Monad @@ -31,13 +31,14 @@ import Control.Monad.Trans.Except import Control.Monad.Trans.Maybe import Control.Monad.Trans.Reader (ReaderT (..), ask) import Control.Monad.Trans.State -import Data.Foldable (toList) +import Data.Foldable (toList, traverse_) import Data.Functor.Foldable import Data.List (elemIndex) import Data.Map (Map) import Data.Map qualified as Map import Data.Maybe (catMaybes, fromJust, fromMaybe, isJust) import Data.Sequence (Seq (..)) +import Data.Set (Set) import Data.Set qualified as Set import Data.Text (Text, pack) import Data.Text qualified as Text @@ -65,6 +66,7 @@ data EquationFailure = IndexIsNone Term | TooManyIterations Int Term Term | EquationLoop [EquationTrace] [Term] + | SideConditionsFalse [Predicate] [EquationTrace] | InternalError Text deriving stock (Eq, Show) @@ -77,6 +79,7 @@ data EquationConfig = EquationConfig data EquationState = EquationState { termStack :: [Term] , changed :: Bool + , predicates :: Set Predicate , trace :: Seq EquationTrace } @@ -125,6 +128,14 @@ instance Pretty EquationTrace where , "failed with false condition" , "using " <> locationInfo ] + EnsuresFalse ps -> + vsep $ + [ "Simplifying term" + , prettyTerm + , "using " <> locationInfo + , "resulted in ensuring false conditions" + ] + <> map pretty ps MatchConstraintViolated constrained varName -> vsep [ "Concreteness constraint violated: " @@ -146,7 +157,7 @@ isSuccess _ = False startState :: EquationState startState = - EquationState{termStack = [], changed = False, trace = mempty} + EquationState{termStack = [], changed = False, predicates = mempty, trace = mempty} getState :: MonadLoggerIO io => EquationT io EquationState getState = EquationT get @@ -160,6 +171,9 @@ countSteps = length . (.termStack) <$> getState pushTerm :: MonadLoggerIO io => Term -> EquationT io () pushTerm t = EquationT . modify $ \s -> s{termStack = t : s.termStack} +pushConstraints :: MonadLoggerIO io => [Predicate] -> EquationT io () +pushConstraints ps = EquationT . modify $ \s -> s{predicates = s.predicates <> Set.fromList ps} + setChanged, resetChanged :: MonadLoggerIO io => EquationT io () setChanged = EquationT . modify $ \s -> s{changed = True} resetChanged = EquationT . modify $ \s -> s{changed = False} @@ -221,7 +235,9 @@ iterateEquations maxIterations direction preference startTerm = else pure currentTerm ---------------------------------------- --- Interface function +-- Interface functions + +-- | Evaluate and simplify a term. evaluateTerm :: MonadLoggerIO io => Bool -> @@ -242,6 +258,42 @@ evaluateTerm' :: EquationT io Term evaluateTerm' direction = iterateEquations 100 direction PreferFunctions +{- | Simplify a Pattern, processing its constraints independently. + Returns either the first failure or the new pattern if no failure was encountered +-} +evaluatePattern :: + MonadLoggerIO io => + Bool -> + KoreDefinition -> + Maybe LLVM.API -> + Pattern -> + io (Either EquationFailure (Pattern, [EquationTrace])) +evaluatePattern doTracing def mLlvmLibrary = + runEquationT doTracing def mLlvmLibrary . evaluatePattern' + +-- version for internal nested evaluation +evaluatePattern' :: + MonadLoggerIO io => + Pattern -> + EquationT io Pattern +evaluatePattern' Pattern{term, constraints} = do + pushConstraints constraints + newTerm <- evaluateTerm' TopDown term + -- after evaluating the term, evaluate all (existing and + -- newly-acquired) constraints, once + traverse_ simplifyAssumedPredicate . predicates =<< getState + -- this may yield additional new constraints, left unevaluated + evaluatedConstraints <- predicates <$> getState + pure Pattern{constraints = Set.toList evaluatedConstraints, term = newTerm} + where + -- evaluate the given predicate assuming all others + simplifyAssumedPredicate p = do + allPs <- predicates <$> getState + let otherPs = Set.delete p allPs + EquationT $ modify $ \s -> s{predicates = otherPs} + newP <- simplifyConstraint' p + pushConstraints [newP] + ---------------------------------------- {- | Apply function equations and simplifications at all levels of a @@ -344,6 +396,7 @@ data ApplyEquationResult | IndeterminateMatch | IndeterminateCondition | ConditionFalse + | EnsuresFalse [Predicate] | RuleNotPreservingDefinedness | MatchConstraintViolated Constrained VarName deriving stock (Eq, Show) @@ -358,23 +411,25 @@ type ResultHandler io = ApplyEquationResult -> EquationT io Term -handleFunctionEquation :: ResultHandler io +handleFunctionEquation :: MonadLoggerIO io => ResultHandler io handleFunctionEquation success continue abort = \case Success rewritten -> success rewritten FailedMatch _ -> continue IndeterminateMatch -> abort IndeterminateCondition -> abort ConditionFalse -> continue + EnsuresFalse ps -> getState >>= throw . SideConditionsFalse ps . toList . trace RuleNotPreservingDefinedness -> abort MatchConstraintViolated{} -> continue -handleSimplificationEquation :: ResultHandler io +handleSimplificationEquation :: MonadLoggerIO io => ResultHandler io handleSimplificationEquation success continue _abort = \case Success rewritten -> success rewritten FailedMatch _ -> continue IndeterminateMatch -> continue IndeterminateCondition -> continue ConditionFalse -> continue + EnsuresFalse ps -> getState >>= throw . SideConditionsFalse ps . toList . trace RuleNotPreservingDefinedness -> continue MatchConstraintViolated{} -> continue @@ -465,12 +520,11 @@ applyEquation term rule = fmap (either id Success) $ runExceptT $ do -- is violated checkConcreteness rule.attributes.concreteness subst - -- check conditions, using substitution (will call back - -- into the simplifier! -> import loop) - let newConstraints = + -- check required conditions, using substitution + let required = concatMap (splitBoolPredicates . substituteInPredicate subst) $ rule.requires - unclearConditions' <- runMaybeT $ catMaybes <$> mapM checkConstraint newConstraints + unclearConditions' <- runMaybeT $ catMaybes <$> mapM checkConstraint required case unclearConditions' of Nothing -> throwE ConditionFalse @@ -478,11 +532,20 @@ applyEquation term rule = fmap (either id Success) $ runExceptT $ do if not $ null unclearConditions then throwE IndeterminateCondition else do - let rewritten = - substituteInTerm subst rule.rhs - -- NB no new constraints, as they have been checked to be `Top` - -- FIXME what about symbolic constraints here? - pure rewritten + -- check ensured conditions, filter any + -- true ones, prune if any is false + let ensured = + concatMap (splitBoolPredicates . substituteInPredicate subst) $ + rule.ensures + mbEnsuredConditions <- + runMaybeT $ catMaybes <$> mapM checkConstraint ensured + case mbEnsuredConditions of + -- throws if an ensured condition found to be false + Nothing -> throwE $ EnsuresFalse ensured + -- pushes new ensured conditions and return result + Just conditions -> + lift $ pushConstraints conditions + pure $ substituteInTerm subst rule.rhs where -- evaluate/simplify a predicate, cut the operation short when it -- is Bottom. @@ -605,27 +668,3 @@ simplifyConstraint' = \case result <- iterateEquations 100 TopDown PreferFunctions t EquationT $ put prior pure result - --------------------------------------------------------------------- - -{- | Simplify a Pattern, processing its constraints independently. - Returns either the first failure or the new pattern if no failure was encountered --} -simplifyPattern :: - MonadLoggerIO io => - Bool -> - KoreDefinition -> - Maybe LLVM.API -> - Pattern -> - io (Either EquationFailure (Pattern, [EquationTrace])) -simplifyPattern doTracing def mLlvmLibrary = runEquationT doTracing def mLlvmLibrary . simplifyPattern' - --- version for internal nested evaluation -simplifyPattern' :: - MonadLoggerIO io => - Pattern -> - EquationT io Pattern -simplifyPattern' Pattern{term, constraints} = do - newTerm <- evaluateTerm' TopDown term - simplifiedConstraints <- traverse simplifyConstraint' constraints - pure Pattern{constraints = simplifiedConstraints, term = newTerm} diff --git a/library/Booster/Pattern/Rewrite.hs b/library/Booster/Pattern/Rewrite.hs index 97081103f..a519f5319 100644 --- a/library/Booster/Pattern/Rewrite.hs +++ b/library/Booster/Pattern/Rewrite.hs @@ -15,6 +15,7 @@ module Booster.Pattern.Rewrite ( import Control.Applicative ((<|>)) import Control.Monad +import Control.Monad.Extra (whenJust) import Control.Monad.IO.Class (MonadIO (..)) import Control.Monad.Logger.CallStack import Control.Monad.Trans.Class @@ -37,10 +38,9 @@ import Booster.Definition.Attributes.Base import Booster.Definition.Base import Booster.LLVM.Internal qualified as LLVM import Booster.Pattern.ApplyEquations ( - Direction (..), EquationFailure (..), EquationTrace, - evaluateTerm, + evaluatePattern, isMatchFailure, isSuccess, simplifyConstraint, @@ -329,16 +329,6 @@ data RewriteResult pat deriving stock (Eq, Show) deriving (Functor, Foldable, Traversable) -apliedRuleAndResultFromRewriteResult :: RewriteResult pat -> Maybe (Text, Maybe UniqueId, pat) -apliedRuleAndResultFromRewriteResult = \case - RewriteBranch{} -> Nothing - RewriteStuck{} -> Nothing - RewriteCutPoint lbl uid _ next -> Just (lbl, uid, next) - RewriteTerminal lbl uid next -> Just (lbl, uid, next) - RewriteFinished (Just lbl) uid next -> Just (lbl, uid, next) - RewriteFinished{} -> Nothing - RewriteAborted{} -> Nothing - data RewriteTrace pat = -- | single step of execution RewriteSingleStep Text (Maybe UniqueId) pat pat @@ -448,15 +438,26 @@ performRewrite doTracing def mLlvmLibrary mbMaxDepth cutLabels terminalLabels pa when doTracing $ modify $ \(counter, traces) -> (counter, traces |> t) incrementCounter = modify $ \(counter, traces) -> (counter + 1, traces) - simplifyP :: Pattern -> StateT (Natural, Seq (RewriteTrace Pattern)) io Pattern - simplifyP p = do - let result = evaluateTerm doTracing TopDown def mLlvmLibrary p.term - result >>= \case - Left r@(TooManyIterations n _ t) -> do + simplifyP :: Pattern -> StateT (Natural, Seq (RewriteTrace Pattern)) io (Maybe Pattern) + simplifyP p = + evaluatePattern doTracing def mLlvmLibrary p >>= \case + Right (newPattern, traces) -> do + logTraces $ filter (not . isMatchFailure) traces + rewriteTrace $ RewriteSimplified $ Right traces + pure $ Just newPattern + Left r@(SideConditionsFalse _ps traces) -> do + logSimplify "Side conditions were found to be false, pruning" + logTraces $ filter (not . isMatchFailure) traces + rewriteTrace $ RewriteSimplified $ Left r + pure Nothing + -- NB any errors here might be caused by simplifying one + -- of the constraints, so we cannot use partial results + -- and have to return the original on errors. + Left r@(TooManyIterations n _start _result) -> do logWarn $ "Simplification unable to finish in " <> prettyText n <> " steps." -- could output term before and after at debug or custom log level rewriteTrace $ RewriteSimplified $ Left r - pure p{term = t} + pure $ Just p Left r@(EquationLoop traces (t : ts)) -> do let termDiffs = zipWith (curry mkDiffTerms) (t : ts) ts logError "Equation evaluation loop" @@ -464,15 +465,42 @@ performRewrite doTracing def mLlvmLibrary mbMaxDepth cutLabels terminalLabels pa logSimplify $ "produced the evaluation loop: " <> Text.unlines (map (prettyText . fst) termDiffs) rewriteTrace $ RewriteSimplified $ Left r - pure p{term = t} -- use result from before the loop + pure $ Just p Left other -> do logError . pack $ "Simplification error during rewrite: " <> show other rewriteTrace $ RewriteSimplified $ Left other - pure p - Right (newTerm, traces) -> do - logTraces $ filter (not . isMatchFailure) traces - rewriteTrace $ RewriteSimplified $ Right traces - pure p{term = newTerm} + pure $ Just p + + -- Results may change when simplification prunes a false side + -- condition, otherwise this would mainly be fmap simplifyP + simplifyResult :: + RewriteResult Pattern -> + StateT (Natural, Seq (RewriteTrace Pattern)) io (RewriteResult Pattern) + simplifyResult = \case + RewriteBranch p nexts -> do + p' <- simplifyP p + let simplifyP3rd (a, b, c) = + fmap (a,b,) <$> simplifyP c + nexts' <- catMaybes <$> mapM simplifyP3rd (toList nexts) + pure $ case (p', nexts') of + (Nothing, _) -> RewriteStuck p + (Just x, []) -> RewriteStuck x + (Just _, [(lbl, uId, n)]) -> RewriteFinished (Just lbl) uId n + (Just x, ns) -> RewriteBranch x $ NE.fromList ns + r@RewriteStuck{} -> pure r + RewriteCutPoint lbl uId p next -> do + p' <- simplifyP p + next' <- simplifyP next + pure $ case (p', next') of + (Nothing, _) -> RewriteStuck pat + (Just x, Nothing) -> RewriteStuck x + (Just x, Just n) -> RewriteCutPoint lbl uId x n + RewriteTerminal lbl uId p -> + maybe (RewriteStuck p) (RewriteTerminal lbl uId) <$> simplifyP p + RewriteFinished lbl uId p -> + maybe (RewriteStuck p) (RewriteFinished lbl uId) <$> simplifyP p + RewriteAborted p -> + maybe (RewriteStuck p) RewriteAborted <$> simplifyP p logTraces = mapM_ (logSimplify . pack . renderDefault . pretty) @@ -486,56 +514,77 @@ performRewrite doTracing def mLlvmLibrary mbMaxDepth cutLabels terminalLabels pa let title = pretty $ "Reached maximum depth of " <> maybe "?" showCounter mbMaxDepth logRewrite $ pack $ renderDefault $ showPattern title pat' - (if wasSimplified then pure else mapM simplifyP) $ RewriteFinished Nothing Nothing pat' - else do - let res = - runRewriteT doTracing def mLlvmLibrary $ - rewriteStep cutLabels terminalLabels pat' - res >>= \case + (if wasSimplified then pure else simplifyResult) $ RewriteFinished Nothing Nothing pat' + else + runRewriteT doTracing def mLlvmLibrary (rewriteStep cutLabels terminalLabels pat') >>= \case Right (RewriteFinished mlbl uniqueId single) -> do - case mlbl of - Just lbl -> rewriteTrace $ RewriteSingleStep lbl uniqueId pat' single - Nothing -> pure () + whenJust mlbl $ \lbl -> + rewriteTrace $ RewriteSingleStep lbl uniqueId pat' single incrementCounter doSteps False single Right terminal@(RewriteTerminal lbl uniqueId single) -> do rewriteTrace $ RewriteSingleStep lbl uniqueId pat' single logRewrite $ "Terminal rule after " <> showCounter (counter + 1) - simplified <- mapM simplifyP terminal incrementCounter - pure simplified - Right branching@(RewriteBranch pat'' branches) -> do - rewriteTrace $ RewriteBranchingStep pat'' $ fmap (\(lbl, uid, _) -> (lbl, uid)) branches - simplifiedBranching <- mapM simplifyP branching + simplifyResult terminal + Right branching@RewriteBranch{} -> do logRewrite $ "Stopped due to branching after " <> showCounter counter - pure simplifiedBranching - Right other -> do - case apliedRuleAndResultFromRewriteResult other of - Just (lbl, uniqueId, single) -> rewriteTrace $ RewriteSingleStep lbl uniqueId pat' single - Nothing -> pure () - simplifiedOther <- mapM simplifyP other + simplified <- simplifyResult branching + case simplified of + RewriteStuck{} -> do + logRewrite "Rewrite stuck after pruning branches" + pure simplified + RewriteFinished mlbl uniqueId single -> do + logRewrite "All but one branch pruned, continuing" + whenJust mlbl $ \lbl -> + rewriteTrace $ RewriteSingleStep lbl uniqueId pat' single + incrementCounter + doSteps False single + RewriteBranch pat'' branches -> do + rewriteTrace $ RewriteBranchingStep pat'' $ fmap (\(lbl, uid, _) -> (lbl, uid)) branches + pure simplified + _other -> error "simplifyResult: Unexpected return value" + Right cutPoint@(RewriteCutPoint lbl _ _ _) -> do + simplified <- simplifyResult cutPoint + case simplified of + RewriteCutPoint{} -> + logRewrite $ "Cut point " <> lbl <> " after " <> showCounter counter + RewriteStuck{} -> + logRewrite $ "Stuck after " <> showCounter counter + _other -> error "simplifyResult: Unexpected return value" + pure simplified + Right stuck@RewriteStuck{} -> do logRewrite $ "Stopped after " <> showCounter counter - pure simplifiedOther + simplifyResult stuck + Right aborted@RewriteAborted{} -> do + logRewrite $ "Aborted after " <> showCounter counter + simplifyResult aborted -- if unification was unclear and the pattern was -- unsimplified, simplify and retry rewriting once Left failure@RuleApplicationUnclear{} | not wasSimplified -> do rewriteTrace $ RewriteStepFailed failure - simplifiedPat <- simplifyP pat' - logRewrite "Retrying with simplified pattern" - doSteps True simplifiedPat + withSimplified pat' "Retrying with simplified pattern" (doSteps True) -- if there were no applicable rules and the pattern -- was unsimplified, simplify and re-try once Left failure@NoApplicableRules{} -> do rewriteTrace $ RewriteStepFailed failure if wasSimplified then pure $ RewriteStuck pat' - else do - simplifiedPat <- simplifyP pat' - logRewrite "Retrying with simplified pattern" - doSteps True simplifiedPat + else withSimplified pat' "Retrying with simplified pattern" (doSteps True) Left failure -> do - logRewrite $ "Aborted after " <> showCounter counter rewriteTrace $ RewriteStepFailed failure - (if wasSimplified then pure else mapM simplifyP) $ RewriteAborted pat' + let msg = "Aborted after " <> showCounter counter + if wasSimplified + then logRewrite msg >> pure (RewriteAborted pat') + else withSimplified pat' msg (pure . RewriteAborted) + where + withSimplified p msg cont = do + simplifyP p >>= \case + Nothing -> do + logRewrite "Rewrite stuck after simplification." + pure $ RewriteStuck p + Just simplifiedPat -> do + logRewrite msg + cont simplifiedPat diff --git a/library/Booster/Pattern/Unify.hs b/library/Booster/Pattern/Unify.hs index ce5dddafb..a8203f680 100644 --- a/library/Booster/Pattern/Unify.hs +++ b/library/Booster/Pattern/Unify.hs @@ -55,8 +55,8 @@ data FailReason DifferentSymbols Term Term | -- | The unificands have different sorts DifferentSorts Term Term - | -- | Variable would refer to itself. FIXME should not happen at - -- all. Need to rename rule variables to avoid it. + | -- | Variable would refer to itself. This should not happen + -- because we rename rule variables to avoid it. VariableRecursion Variable Term | -- | Variable reassigned VariableConflict Variable Term Term diff --git a/tools/booster/Stats.hs b/tools/booster/Stats.hs index 6085975b8..b514e9116 100644 --- a/tools/booster/Stats.hs +++ b/tools/booster/Stats.hs @@ -75,7 +75,7 @@ data Stats' a = Stats' instance (Ord a, Num a) => Semigroup (Stats' a) where (<>) = addStats' --- FIXME specialise to Double (pragma) +{-# SPECIALIZE addStats' :: Stats' Double -> Stats' Double -> Stats' Double #-} addStats' :: (Ord a, Num a) => Stats' a -> Stats' a -> Stats' a addStats' stats1 stats2 = Stats' diff --git a/unit-tests/Test/Booster/Pattern/ApplyEquations.hs b/unit-tests/Test/Booster/Pattern/ApplyEquations.hs index 8d44651ab..2879226c3 100644 --- a/unit-tests/Test/Booster/Pattern/ApplyEquations.hs +++ b/unit-tests/Test/Booster/Pattern/ApplyEquations.hs @@ -143,7 +143,7 @@ test_simplifyPattern = simpl subj @?= Right result ] where - simpl = fmap fst . unsafePerformIO . runNoLoggingT . simplifyPattern False simplDef Nothing + simpl = fmap fst . unsafePerformIO . runNoLoggingT . evaluatePattern False simplDef Nothing a = var "A" someSort test_errors :: TestTree From adfde2921acbd5288e3197601c9cd4ca85a2466b Mon Sep 17 00:00:00 2001 From: Jost Berthold Date: Fri, 21 Jul 2023 22:28:46 +1000 Subject: [PATCH 14/14] 207 kore rpc json differ (#238) Part of #207 * LIbrary module to classify json files into the types used for `kore-rpc-types` and compute differences between files of identical type * Small executable to load two files and determine the differences between them * Some tests with exemplary json files have been added (comparing pair-wise, with golden files for expected output) Also in this PR: * Add dry-run mode to `rpc-client` * A new switch `--dry-run` makes `rpc-client` print the request instead of sending it * The option can be combined with `--output/-o` and `--prettify` --- flake.nix | 1 + library/Booster/JsonRpc/Utils.hs | 202 ++++++ package.yaml | 9 + stack.yaml.lock | 10 +- test/jsonrpc-examples/README.md | 33 + .../depth-limit.execute.response | 1 + ...limit.spaghetti-formatted.execute.response | 1 + ...limit.spaghetti-formatted.execute.response | 1 + ...ute.response@foundry-proof.implies.request | 3 + ...te.response@foundry-proof.simplify.request | 3 + ...e.response@foundry-proof2.simplify.request | 3 + ...epth-limit.execute.response@not-json.error | 3 + ...-limit.execute.response@params.random.json | 3 + ...h-limit.execute.response@state-a.kore.json | 3 + ...onse@state-a.spaghetti-formatted.kore.json | 3 + ...sponse@state-a.unformatted.execute.request | 3 + ...execute.response@terminal.execute.response | 8 + ...te.response@with-logging.simplify.response | 3 + ...cute.response@depth-limit.execute.response | 1 + ...ute.response@foundry-proof.implies.request | 3 + ...te.response@foundry-proof.simplify.request | 3 + ...e.response@foundry-proof2.simplify.request | 3 + ...-formatted.execute.response@not-json.error | 3 + ...matted.execute.response@params.random.json | 3 + ...rmatted.execute.response@state-a.kore.json | 3 + ...onse@state-a.spaghetti-formatted.kore.json | 3 + ...sponse@state-a.unformatted.execute.request | 3 + ...execute.response@terminal.execute.response | 8 + ...te.response@with-logging.simplify.response | 3 + ...plies.request@depth-limit.execute.response | 3 + ...limit.spaghetti-formatted.execute.response | 3 + ...ies.request@foundry-proof.simplify.request | 3 + ...es.request@foundry-proof2.simplify.request | 3 + ...undry-proof.implies.request@not-json.error | 3 + ...y-proof.implies.request@params.random.json | 3 + ...ry-proof.implies.request@state-a.kore.json | 3 + ...uest@state-a.spaghetti-formatted.kore.json | 3 + ...equest@state-a.unformatted.execute.request | 3 + ....implies.request@terminal.execute.response | 3 + ...ies.request@with-logging.simplify.response | 3 + ...plify.request@depth-limit.execute.response | 3 + ...limit.spaghetti-formatted.execute.response | 3 + ...lify.request@foundry-proof.implies.request | 3 + ...fy.request@foundry-proof2.simplify.request | 583 ++++++++++++++++++ ...ndry-proof.simplify.request@not-json.error | 3 + ...-proof.simplify.request@params.random.json | 3 + ...y-proof.simplify.request@state-a.kore.json | 3 + ...uest@state-a.spaghetti-formatted.kore.json | 3 + ...equest@state-a.unformatted.execute.request | 3 + ...simplify.request@terminal.execute.response | 3 + ...ify.request@with-logging.simplify.response | 3 + ...plify.request@depth-limit.execute.response | 3 + ...limit.spaghetti-formatted.execute.response | 3 + ...lify.request@foundry-proof.implies.request | 3 + ...ify.request@foundry-proof.simplify.request | 583 ++++++++++++++++++ ...dry-proof2.simplify.request@not-json.error | 3 + ...proof2.simplify.request@params.random.json | 3 + ...-proof2.simplify.request@state-a.kore.json | 3 + ...uest@state-a.spaghetti-formatted.kore.json | 3 + ...equest@state-a.unformatted.execute.request | 3 + ...simplify.request@terminal.execute.response | 3 + ...ify.request@with-logging.simplify.response | 3 + ...ot-json.error@depth-limit.execute.response | 3 + ...limit.spaghetti-formatted.execute.response | 3 + ...t-json.error@foundry-proof.implies.request | 3 + ...-json.error@foundry-proof.simplify.request | 3 + ...json.error@foundry-proof2.simplify.request | 3 + .../not-json.error@params.random.json | 3 + .../expected/not-json.error@state-a.kore.json | 3 + ...rror@state-a.spaghetti-formatted.kore.json | 3 + ....error@state-a.unformatted.execute.request | 3 + .../not-json.error@terminal.execute.response | 3 + ...-json.error@with-logging.simplify.response | 3 + ...s.random.json@depth-limit.execute.response | 3 + ...limit.spaghetti-formatted.execute.response | 3 + ....random.json@foundry-proof.implies.request | 3 + ...random.json@foundry-proof.simplify.request | 3 + ...andom.json@foundry-proof2.simplify.request | 3 + .../params.random.json@not-json.error | 3 + .../params.random.json@state-a.kore.json | 3 + ...json@state-a.spaghetti-formatted.kore.json | 3 + ...m.json@state-a.unformatted.execute.request | 3 + ...rams.random.json@terminal.execute.response | 3 + ...random.json@with-logging.simplify.response | 3 + ...e-a.kore.json@depth-limit.execute.response | 3 + ...limit.spaghetti-formatted.execute.response | 3 + ...-a.kore.json@foundry-proof.implies.request | 3 + ...a.kore.json@foundry-proof.simplify.request | 3 + ....kore.json@foundry-proof2.simplify.request | 3 + .../expected/state-a.kore.json@not-json.error | 3 + .../state-a.kore.json@params.random.json | 3 + ...json@state-a.spaghetti-formatted.kore.json | 1 + ...e.json@state-a.unformatted.execute.request | 3 + ...tate-a.kore.json@terminal.execute.response | 3 + ...a.kore.json@with-logging.simplify.response | 3 + ...ted.kore.json@depth-limit.execute.response | 3 + ...limit.spaghetti-formatted.execute.response | 3 + ...ed.kore.json@foundry-proof.implies.request | 3 + ...d.kore.json@foundry-proof.simplify.request | 3 + ....kore.json@foundry-proof2.simplify.request | 3 + ...aghetti-formatted.kore.json@not-json.error | 3 + ...tti-formatted.kore.json@params.random.json | 3 + ...etti-formatted.kore.json@state-a.kore.json | 1 + ...e.json@state-a.unformatted.execute.request | 3 + ...matted.kore.json@terminal.execute.response | 3 + ...d.kore.json@with-logging.simplify.response | 3 + ...ecute.request@depth-limit.execute.response | 3 + ...limit.spaghetti-formatted.execute.response | 3 + ...cute.request@foundry-proof.implies.request | 3 + ...ute.request@foundry-proof.simplify.request | 3 + ...te.request@foundry-proof2.simplify.request | 3 + ...unformatted.execute.request@not-json.error | 3 + ...rmatted.execute.request@params.random.json | 3 + ...ormatted.execute.request@state-a.kore.json | 3 + ...uest@state-a.spaghetti-formatted.kore.json | 3 + ....execute.request@terminal.execute.response | 3 + ...ute.request@with-logging.simplify.response | 3 + ...cute.response@depth-limit.execute.response | 8 + ...limit.spaghetti-formatted.execute.response | 8 + ...ute.response@foundry-proof.implies.request | 3 + ...te.response@foundry-proof.simplify.request | 3 + ...e.response@foundry-proof2.simplify.request | 3 + .../terminal.execute.response@not-json.error | 3 + ...rminal.execute.response@params.random.json | 3 + ...erminal.execute.response@state-a.kore.json | 3 + ...onse@state-a.spaghetti-formatted.kore.json | 3 + ...sponse@state-a.unformatted.execute.request | 3 + ...te.response@with-logging.simplify.response | 3 + ...lify.response@depth-limit.execute.response | 3 + ...limit.spaghetti-formatted.execute.response | 3 + ...ify.response@foundry-proof.implies.request | 3 + ...fy.response@foundry-proof.simplify.request | 3 + ...y.response@foundry-proof2.simplify.request | 3 + ...h-logging.simplify.response@not-json.error | 3 + ...gging.simplify.response@params.random.json | 3 + ...ogging.simplify.response@state-a.kore.json | 3 + ...onse@state-a.spaghetti-formatted.kore.json | 3 + ...sponse@state-a.unformatted.execute.request | 3 + ...implify.response@terminal.execute.response | 3 + .../foundry-proof.implies.request | 1 + .../foundry-proof.simplify.request | 1 + .../foundry-proof2.simplify.request | 1 + test/jsonrpc-examples/not-json.error | 1 + test/jsonrpc-examples/params.random.json | 1 + test/jsonrpc-examples/state-a.kore.json | 1 + .../state-a.spaghetti-formatted.kore.json | 1 + .../state-a.unformatted.execute.request | 1 + .../terminal.execute.response | 1 + .../with-logging.simplify.response | 1 + tools/kore-json-differ/Main.hs | 40 ++ tools/rpc-client/RpcClient.hs | 22 +- unit-tests/Test/Booster/JsonRpc/DiffTest.hs | 83 +++ 152 files changed, 1970 insertions(+), 10 deletions(-) create mode 100644 library/Booster/JsonRpc/Utils.hs create mode 100644 test/jsonrpc-examples/README.md create mode 120000 test/jsonrpc-examples/depth-limit.execute.response create mode 100644 test/jsonrpc-examples/depth-limit.spaghetti-formatted.execute.response create mode 100644 test/jsonrpc-examples/expected/depth-limit.execute.response@depth-limit.spaghetti-formatted.execute.response create mode 100644 test/jsonrpc-examples/expected/depth-limit.execute.response@foundry-proof.implies.request create mode 100644 test/jsonrpc-examples/expected/depth-limit.execute.response@foundry-proof.simplify.request create mode 100644 test/jsonrpc-examples/expected/depth-limit.execute.response@foundry-proof2.simplify.request create mode 100644 test/jsonrpc-examples/expected/depth-limit.execute.response@not-json.error create mode 100644 test/jsonrpc-examples/expected/depth-limit.execute.response@params.random.json create mode 100644 test/jsonrpc-examples/expected/depth-limit.execute.response@state-a.kore.json create mode 100644 test/jsonrpc-examples/expected/depth-limit.execute.response@state-a.spaghetti-formatted.kore.json create mode 100644 test/jsonrpc-examples/expected/depth-limit.execute.response@state-a.unformatted.execute.request create mode 100644 test/jsonrpc-examples/expected/depth-limit.execute.response@terminal.execute.response create mode 100644 test/jsonrpc-examples/expected/depth-limit.execute.response@with-logging.simplify.response create mode 100644 test/jsonrpc-examples/expected/depth-limit.spaghetti-formatted.execute.response@depth-limit.execute.response create mode 100644 test/jsonrpc-examples/expected/depth-limit.spaghetti-formatted.execute.response@foundry-proof.implies.request create mode 100644 test/jsonrpc-examples/expected/depth-limit.spaghetti-formatted.execute.response@foundry-proof.simplify.request create mode 100644 test/jsonrpc-examples/expected/depth-limit.spaghetti-formatted.execute.response@foundry-proof2.simplify.request create mode 100644 test/jsonrpc-examples/expected/depth-limit.spaghetti-formatted.execute.response@not-json.error create mode 100644 test/jsonrpc-examples/expected/depth-limit.spaghetti-formatted.execute.response@params.random.json create mode 100644 test/jsonrpc-examples/expected/depth-limit.spaghetti-formatted.execute.response@state-a.kore.json create mode 100644 test/jsonrpc-examples/expected/depth-limit.spaghetti-formatted.execute.response@state-a.spaghetti-formatted.kore.json create mode 100644 test/jsonrpc-examples/expected/depth-limit.spaghetti-formatted.execute.response@state-a.unformatted.execute.request create mode 100644 test/jsonrpc-examples/expected/depth-limit.spaghetti-formatted.execute.response@terminal.execute.response create mode 100644 test/jsonrpc-examples/expected/depth-limit.spaghetti-formatted.execute.response@with-logging.simplify.response create mode 100644 test/jsonrpc-examples/expected/foundry-proof.implies.request@depth-limit.execute.response create mode 100644 test/jsonrpc-examples/expected/foundry-proof.implies.request@depth-limit.spaghetti-formatted.execute.response create mode 100644 test/jsonrpc-examples/expected/foundry-proof.implies.request@foundry-proof.simplify.request create mode 100644 test/jsonrpc-examples/expected/foundry-proof.implies.request@foundry-proof2.simplify.request create mode 100644 test/jsonrpc-examples/expected/foundry-proof.implies.request@not-json.error create mode 100644 test/jsonrpc-examples/expected/foundry-proof.implies.request@params.random.json create mode 100644 test/jsonrpc-examples/expected/foundry-proof.implies.request@state-a.kore.json create mode 100644 test/jsonrpc-examples/expected/foundry-proof.implies.request@state-a.spaghetti-formatted.kore.json create mode 100644 test/jsonrpc-examples/expected/foundry-proof.implies.request@state-a.unformatted.execute.request create mode 100644 test/jsonrpc-examples/expected/foundry-proof.implies.request@terminal.execute.response create mode 100644 test/jsonrpc-examples/expected/foundry-proof.implies.request@with-logging.simplify.response create mode 100644 test/jsonrpc-examples/expected/foundry-proof.simplify.request@depth-limit.execute.response create mode 100644 test/jsonrpc-examples/expected/foundry-proof.simplify.request@depth-limit.spaghetti-formatted.execute.response create mode 100644 test/jsonrpc-examples/expected/foundry-proof.simplify.request@foundry-proof.implies.request create mode 100644 test/jsonrpc-examples/expected/foundry-proof.simplify.request@foundry-proof2.simplify.request create mode 100644 test/jsonrpc-examples/expected/foundry-proof.simplify.request@not-json.error create mode 100644 test/jsonrpc-examples/expected/foundry-proof.simplify.request@params.random.json create mode 100644 test/jsonrpc-examples/expected/foundry-proof.simplify.request@state-a.kore.json create mode 100644 test/jsonrpc-examples/expected/foundry-proof.simplify.request@state-a.spaghetti-formatted.kore.json create mode 100644 test/jsonrpc-examples/expected/foundry-proof.simplify.request@state-a.unformatted.execute.request create mode 100644 test/jsonrpc-examples/expected/foundry-proof.simplify.request@terminal.execute.response create mode 100644 test/jsonrpc-examples/expected/foundry-proof.simplify.request@with-logging.simplify.response create mode 100644 test/jsonrpc-examples/expected/foundry-proof2.simplify.request@depth-limit.execute.response create mode 100644 test/jsonrpc-examples/expected/foundry-proof2.simplify.request@depth-limit.spaghetti-formatted.execute.response create mode 100644 test/jsonrpc-examples/expected/foundry-proof2.simplify.request@foundry-proof.implies.request create mode 100644 test/jsonrpc-examples/expected/foundry-proof2.simplify.request@foundry-proof.simplify.request create mode 100644 test/jsonrpc-examples/expected/foundry-proof2.simplify.request@not-json.error create mode 100644 test/jsonrpc-examples/expected/foundry-proof2.simplify.request@params.random.json create mode 100644 test/jsonrpc-examples/expected/foundry-proof2.simplify.request@state-a.kore.json create mode 100644 test/jsonrpc-examples/expected/foundry-proof2.simplify.request@state-a.spaghetti-formatted.kore.json create mode 100644 test/jsonrpc-examples/expected/foundry-proof2.simplify.request@state-a.unformatted.execute.request create mode 100644 test/jsonrpc-examples/expected/foundry-proof2.simplify.request@terminal.execute.response create mode 100644 test/jsonrpc-examples/expected/foundry-proof2.simplify.request@with-logging.simplify.response create mode 100644 test/jsonrpc-examples/expected/not-json.error@depth-limit.execute.response create mode 100644 test/jsonrpc-examples/expected/not-json.error@depth-limit.spaghetti-formatted.execute.response create mode 100644 test/jsonrpc-examples/expected/not-json.error@foundry-proof.implies.request create mode 100644 test/jsonrpc-examples/expected/not-json.error@foundry-proof.simplify.request create mode 100644 test/jsonrpc-examples/expected/not-json.error@foundry-proof2.simplify.request create mode 100644 test/jsonrpc-examples/expected/not-json.error@params.random.json create mode 100644 test/jsonrpc-examples/expected/not-json.error@state-a.kore.json create mode 100644 test/jsonrpc-examples/expected/not-json.error@state-a.spaghetti-formatted.kore.json create mode 100644 test/jsonrpc-examples/expected/not-json.error@state-a.unformatted.execute.request create mode 100644 test/jsonrpc-examples/expected/not-json.error@terminal.execute.response create mode 100644 test/jsonrpc-examples/expected/not-json.error@with-logging.simplify.response create mode 100644 test/jsonrpc-examples/expected/params.random.json@depth-limit.execute.response create mode 100644 test/jsonrpc-examples/expected/params.random.json@depth-limit.spaghetti-formatted.execute.response create mode 100644 test/jsonrpc-examples/expected/params.random.json@foundry-proof.implies.request create mode 100644 test/jsonrpc-examples/expected/params.random.json@foundry-proof.simplify.request create mode 100644 test/jsonrpc-examples/expected/params.random.json@foundry-proof2.simplify.request create mode 100644 test/jsonrpc-examples/expected/params.random.json@not-json.error create mode 100644 test/jsonrpc-examples/expected/params.random.json@state-a.kore.json create mode 100644 test/jsonrpc-examples/expected/params.random.json@state-a.spaghetti-formatted.kore.json create mode 100644 test/jsonrpc-examples/expected/params.random.json@state-a.unformatted.execute.request create mode 100644 test/jsonrpc-examples/expected/params.random.json@terminal.execute.response create mode 100644 test/jsonrpc-examples/expected/params.random.json@with-logging.simplify.response create mode 100644 test/jsonrpc-examples/expected/state-a.kore.json@depth-limit.execute.response create mode 100644 test/jsonrpc-examples/expected/state-a.kore.json@depth-limit.spaghetti-formatted.execute.response create mode 100644 test/jsonrpc-examples/expected/state-a.kore.json@foundry-proof.implies.request create mode 100644 test/jsonrpc-examples/expected/state-a.kore.json@foundry-proof.simplify.request create mode 100644 test/jsonrpc-examples/expected/state-a.kore.json@foundry-proof2.simplify.request create mode 100644 test/jsonrpc-examples/expected/state-a.kore.json@not-json.error create mode 100644 test/jsonrpc-examples/expected/state-a.kore.json@params.random.json create mode 100644 test/jsonrpc-examples/expected/state-a.kore.json@state-a.spaghetti-formatted.kore.json create mode 100644 test/jsonrpc-examples/expected/state-a.kore.json@state-a.unformatted.execute.request create mode 100644 test/jsonrpc-examples/expected/state-a.kore.json@terminal.execute.response create mode 100644 test/jsonrpc-examples/expected/state-a.kore.json@with-logging.simplify.response create mode 100644 test/jsonrpc-examples/expected/state-a.spaghetti-formatted.kore.json@depth-limit.execute.response create mode 100644 test/jsonrpc-examples/expected/state-a.spaghetti-formatted.kore.json@depth-limit.spaghetti-formatted.execute.response create mode 100644 test/jsonrpc-examples/expected/state-a.spaghetti-formatted.kore.json@foundry-proof.implies.request create mode 100644 test/jsonrpc-examples/expected/state-a.spaghetti-formatted.kore.json@foundry-proof.simplify.request create mode 100644 test/jsonrpc-examples/expected/state-a.spaghetti-formatted.kore.json@foundry-proof2.simplify.request create mode 100644 test/jsonrpc-examples/expected/state-a.spaghetti-formatted.kore.json@not-json.error create mode 100644 test/jsonrpc-examples/expected/state-a.spaghetti-formatted.kore.json@params.random.json create mode 100644 test/jsonrpc-examples/expected/state-a.spaghetti-formatted.kore.json@state-a.kore.json create mode 100644 test/jsonrpc-examples/expected/state-a.spaghetti-formatted.kore.json@state-a.unformatted.execute.request create mode 100644 test/jsonrpc-examples/expected/state-a.spaghetti-formatted.kore.json@terminal.execute.response create mode 100644 test/jsonrpc-examples/expected/state-a.spaghetti-formatted.kore.json@with-logging.simplify.response create mode 100644 test/jsonrpc-examples/expected/state-a.unformatted.execute.request@depth-limit.execute.response create mode 100644 test/jsonrpc-examples/expected/state-a.unformatted.execute.request@depth-limit.spaghetti-formatted.execute.response create mode 100644 test/jsonrpc-examples/expected/state-a.unformatted.execute.request@foundry-proof.implies.request create mode 100644 test/jsonrpc-examples/expected/state-a.unformatted.execute.request@foundry-proof.simplify.request create mode 100644 test/jsonrpc-examples/expected/state-a.unformatted.execute.request@foundry-proof2.simplify.request create mode 100644 test/jsonrpc-examples/expected/state-a.unformatted.execute.request@not-json.error create mode 100644 test/jsonrpc-examples/expected/state-a.unformatted.execute.request@params.random.json create mode 100644 test/jsonrpc-examples/expected/state-a.unformatted.execute.request@state-a.kore.json create mode 100644 test/jsonrpc-examples/expected/state-a.unformatted.execute.request@state-a.spaghetti-formatted.kore.json create mode 100644 test/jsonrpc-examples/expected/state-a.unformatted.execute.request@terminal.execute.response create mode 100644 test/jsonrpc-examples/expected/state-a.unformatted.execute.request@with-logging.simplify.response create mode 100644 test/jsonrpc-examples/expected/terminal.execute.response@depth-limit.execute.response create mode 100644 test/jsonrpc-examples/expected/terminal.execute.response@depth-limit.spaghetti-formatted.execute.response create mode 100644 test/jsonrpc-examples/expected/terminal.execute.response@foundry-proof.implies.request create mode 100644 test/jsonrpc-examples/expected/terminal.execute.response@foundry-proof.simplify.request create mode 100644 test/jsonrpc-examples/expected/terminal.execute.response@foundry-proof2.simplify.request create mode 100644 test/jsonrpc-examples/expected/terminal.execute.response@not-json.error create mode 100644 test/jsonrpc-examples/expected/terminal.execute.response@params.random.json create mode 100644 test/jsonrpc-examples/expected/terminal.execute.response@state-a.kore.json create mode 100644 test/jsonrpc-examples/expected/terminal.execute.response@state-a.spaghetti-formatted.kore.json create mode 100644 test/jsonrpc-examples/expected/terminal.execute.response@state-a.unformatted.execute.request create mode 100644 test/jsonrpc-examples/expected/terminal.execute.response@with-logging.simplify.response create mode 100644 test/jsonrpc-examples/expected/with-logging.simplify.response@depth-limit.execute.response create mode 100644 test/jsonrpc-examples/expected/with-logging.simplify.response@depth-limit.spaghetti-formatted.execute.response create mode 100644 test/jsonrpc-examples/expected/with-logging.simplify.response@foundry-proof.implies.request create mode 100644 test/jsonrpc-examples/expected/with-logging.simplify.response@foundry-proof.simplify.request create mode 100644 test/jsonrpc-examples/expected/with-logging.simplify.response@foundry-proof2.simplify.request create mode 100644 test/jsonrpc-examples/expected/with-logging.simplify.response@not-json.error create mode 100644 test/jsonrpc-examples/expected/with-logging.simplify.response@params.random.json create mode 100644 test/jsonrpc-examples/expected/with-logging.simplify.response@state-a.kore.json create mode 100644 test/jsonrpc-examples/expected/with-logging.simplify.response@state-a.spaghetti-formatted.kore.json create mode 100644 test/jsonrpc-examples/expected/with-logging.simplify.response@state-a.unformatted.execute.request create mode 100644 test/jsonrpc-examples/expected/with-logging.simplify.response@terminal.execute.response create mode 100644 test/jsonrpc-examples/foundry-proof.implies.request create mode 100644 test/jsonrpc-examples/foundry-proof.simplify.request create mode 100644 test/jsonrpc-examples/foundry-proof2.simplify.request create mode 120000 test/jsonrpc-examples/not-json.error create mode 120000 test/jsonrpc-examples/params.random.json create mode 120000 test/jsonrpc-examples/state-a.kore.json create mode 100644 test/jsonrpc-examples/state-a.spaghetti-formatted.kore.json create mode 100644 test/jsonrpc-examples/state-a.unformatted.execute.request create mode 120000 test/jsonrpc-examples/terminal.execute.response create mode 120000 test/jsonrpc-examples/with-logging.simplify.response create mode 100644 tools/kore-json-differ/Main.hs create mode 100644 unit-tests/Test/Booster/JsonRpc/DiffTest.hs diff --git a/flake.nix b/flake.nix index 6ed3c0a9c..a8b4fdd13 100644 --- a/flake.nix +++ b/flake.nix @@ -42,6 +42,7 @@ /test/parser /test/internalisation /test/rpc-integration + /test/jsonrpc-examples /scripts /.github '' diff --git a/library/Booster/JsonRpc/Utils.hs b/library/Booster/JsonRpc/Utils.hs new file mode 100644 index 000000000..fe90488f4 --- /dev/null +++ b/library/Booster/JsonRpc/Utils.hs @@ -0,0 +1,202 @@ +{- | +Copyright : (c) Runtime Verification, 2023 +License : BSD-3-Clause +-} +module Booster.JsonRpc.Utils ( + diffJson, + DiffResult (..), + isIdentical, + renderResult, + KoreRpcJson (..), + decodeKoreRpc, + KoreRpcType (..), + rpcTypeOf, + typeString, +) where + +import Control.Applicative ((<|>)) +import Data.Aeson as Json +import Data.Aeson.Encode.Pretty (encodePretty') +import Data.Aeson.Types (parseMaybe) +import Data.Algorithm.Diff +import Data.Algorithm.DiffOutput (ppDiff) +import Data.ByteString.Lazy.Char8 qualified as BS +import Data.Function (on) +import Data.Maybe (fromMaybe) +import Network.JSONRPC + +import Kore.JsonRpc.Types +import Kore.Syntax.Json.Types hiding (Left, Right) + +diffJson :: FilePath -> FilePath -> IO DiffResult +diffJson korefile1 korefile2 = do + contents1 <- + decodeKoreRpc <$> BS.readFile korefile1 + contents2 <- + decodeKoreRpc <$> BS.readFile korefile2 + + pure $ case (contents1, contents2) of + (_, _) + | contents1 == contents2 -> + Identical $ rpcTypeOf contents1 + (NotRpcJson lines1, NotRpcJson lines2) -> do + TextDiff $ getGroupedDiff lines1 lines2 + (other1, other2) + | rpcTypeOf other1 /= rpcTypeOf other2 -> + DifferentType (rpcTypeOf other1) (rpcTypeOf other2) + | otherwise -> do + JsonDiff (rpcTypeOf other1) $ computeJsonDiff other1 other2 + where + computeJsonDiff = + getGroupedDiff `on` (BS.lines . encodePretty' rpcJsonConfig) + +data DiffResult + = Identical KoreRpcType + | DifferentType KoreRpcType KoreRpcType + | JsonDiff KoreRpcType [Diff [BS.ByteString]] + | TextDiff [Diff [BS.ByteString]] + deriving (Eq, Show) + +isIdentical :: DiffResult -> Bool +isIdentical Identical{} = True +isIdentical _ = False + +renderResult :: FilePath -> FilePath -> DiffResult -> BS.ByteString +renderResult korefile1 korefile2 = \case + Identical rpcType -> + BS.unwords + ["Files", file1, "and", file2, "are identical", typeString rpcType <> "s"] + DifferentType type1 type2 -> + BS.unlines + [ "Json data in files is of different type" + , " * File " <> file1 <> ": " <> typeString type1 + , " * File " <> file2 <> ": " <> typeString type2 + ] + JsonDiff rpcType diffs -> + BS.unlines + [ BS.unwords ["Files", file1, "and", file2, "are different", typeString rpcType <> "s"] + , renderDiff diffs + ] + TextDiff diffs -> + BS.unlines + [ BS.unwords ["Files", file1, "and", file2, "are different non-json files"] + , renderDiff diffs + ] + where + file1 = BS.pack korefile1 + file2 = BS.pack korefile2 + +decodeKoreRpc :: BS.ByteString -> KoreRpcJson +decodeKoreRpc input = + fromMaybe (NotRpcJson splitInput) $ + try [rpcRequest, rpcResponse, rpcError, koreJson, unknown] + where + try = foldl1 (<|>) + rpcRequest = fmap RpcRequest $ do + req <- Json.decode @Request input + parser <- parseParams req.getReqMethod + parseMaybe parser req.getReqParams + rpcResponse = fmap RpcResponse $ do + resp <- Json.decode @Response input + foldl1 + (<|>) + [ Execute <$> parseMaybe (Json.parseJSON @ExecuteResult) resp.getResult + , Implies <$> parseMaybe (Json.parseJSON @ImpliesResult) resp.getResult + , Simplify <$> parseMaybe (Json.parseJSON @SimplifyResult) resp.getResult + , AddModule <$> parseMaybe (Json.parseJSON @()) resp.getResult + , GetModel <$> parseMaybe (Json.parseJSON @GetModelResult) resp.getResult + ] + rpcError = + Json.decode @ErrorObj input + >>= \case + ErrorObj msg code mbData -> + pure $ RpcError msg code mbData + ErrorVal{} -> fail "arbitrary json can be an ErrorVal" + koreJson = + RpcKoreJson <$> Json.decode @KoreJson input + unknown = + RpcJson <$> Json.decode @Object input + -- last resort: break the bytestring into lines at json-relevant + -- characters (ignoring quoting) + splitInput = BS.splitWith (`elem` [':', ',', '{', '}']) input + +-- | helper type enumerating all Kore-RPC json requests and responses +data KoreRpcJson + = RpcRequest (API 'Req) + | RpcResponse (API 'Res) + | RpcError String Int Value + | RpcKoreJson KoreJson + | RpcJson Object + | NotRpcJson [BS.ByteString] + deriving stock (Eq, Show) + +instance ToJSON KoreRpcJson where + toJSON = \case + RpcRequest req -> + case req of -- missing instance ToJSON (API 'Req), inlined + Execute r -> toJSON r + Implies r -> toJSON r + Simplify r -> toJSON r + AddModule r -> toJSON r + GetModel r -> toJSON r + Cancel -> toJSON () + RpcResponse r -> toJSON r + RpcError msg code v -> toJSON (msg, code, v) + RpcKoreJson t -> toJSON t + RpcJson v -> toJSON v + NotRpcJson bs -> toJSON $ map BS.unpack bs + +-- | Information about the kind of object in 'KoreRpcJson' (without payload) +data KoreRpcType + = RpcReq APIMethod + | RpcResp APIMethod + | RpcErr + | RpcKore + | RpcJs + | NotRpcJs + deriving (Eq, Ord) + +instance Show KoreRpcType where + show = \case + RpcReq method -> show method <> " request" + RpcResp method -> show method <> " response" + RpcErr -> "error response" + RpcKore -> "Kore term" + RpcJs -> "unknown object" + NotRpcJs -> "non-JSON file" + +typeString :: KoreRpcType -> BS.ByteString +typeString = BS.pack . show + +rpcTypeOf :: KoreRpcJson -> KoreRpcType +rpcTypeOf = \case + RpcRequest req -> RpcReq $ methodOf req + RpcResponse r -> RpcResp $ methodOf r + RpcError{} -> RpcErr + RpcKoreJson{} -> RpcKore + RpcJson{} -> RpcJs + NotRpcJson{} -> NotRpcJs + where + methodOf = \case + Execute _ -> ExecuteM + Implies _ -> ImpliesM + Simplify _ -> SimplifyM + AddModule _ -> AddModuleM + GetModel _ -> GetModelM + Cancel -> error "Cancel" + +------------------------------------------------------------------- +-- pretty diff output +-- Currently using a String-based module from the Diff package but +-- which should be rewritten to handle Text and Char8.ByteString + +renderDiff :: [Diff [BS.ByteString]] -> BS.ByteString +renderDiff = BS.pack . ppDiff . map (convert (map BS.unpack)) + +-- Should we defined `Functor Diff`? But then again `type Diff a = PolyDiff a a` +-- and we should define `Bifunctor PolyDiff` and assimilate the `Diff` package. +convert :: (a -> b) -> Diff a -> Diff b +convert f = \case + First a -> First $ f a + Second b -> Second $ f b + Both a b -> Both (f a) (f b) diff --git a/package.yaml b/package.yaml index 747f92d86..9052580f6 100644 --- a/package.yaml +++ b/package.yaml @@ -70,6 +70,7 @@ library: - containers - deepseq - deriving-aeson + - Diff - exceptions - extra - filepath @@ -184,6 +185,14 @@ executables: - unordered-containers ghc-options: - -rtsopts + kore-json-differ: + source-dirs: tools/kore-json-differ + main: Main.hs + dependencies: + - base + - bytestring + - containers + - hs-backend-booster kore-rpc-booster: source-dirs: tools/booster diff --git a/stack.yaml.lock b/stack.yaml.lock index 68bc3d7d4..58ae025b7 100644 --- a/stack.yaml.lock +++ b/stack.yaml.lock @@ -40,20 +40,20 @@ packages: original: hackage: monad-validate-1.2.0.1 - completed: - commit: a6230144a37ee9ebf0f6dffc849faf5ce10df380 + commit: 3ac2c87da44ed9e8fe4ba4583fb5860a4680d821 git: https://github.com/runtimeverification/haskell-backend.git name: kore pantry-tree: - sha256: c8c0f36a0c1a949317f6062ab3320fc4f831ed85f3922b455f19743da9ca360f + sha256: dc1263850bb4fa01ba62eabe6716ac0d6e82f5a6eea0c9d0037d711883498496 size: 44548 subdir: kore version: 0.60.0.0 original: - commit: a6230144a37ee9ebf0f6dffc849faf5ce10df380 + commit: 3ac2c87da44ed9e8fe4ba4583fb5860a4680d821 git: https://github.com/runtimeverification/haskell-backend.git subdir: kore - completed: - commit: a6230144a37ee9ebf0f6dffc849faf5ce10df380 + commit: 3ac2c87da44ed9e8fe4ba4583fb5860a4680d821 git: https://github.com/runtimeverification/haskell-backend.git name: kore-rpc-types pantry-tree: @@ -62,7 +62,7 @@ packages: subdir: kore-rpc-types version: 0.60.0.0 original: - commit: a6230144a37ee9ebf0f6dffc849faf5ce10df380 + commit: 3ac2c87da44ed9e8fe4ba4583fb5860a4680d821 git: https://github.com/runtimeverification/haskell-backend.git subdir: kore-rpc-types snapshots: diff --git a/test/jsonrpc-examples/README.md b/test/jsonrpc-examples/README.md new file mode 100644 index 000000000..c220be9b7 --- /dev/null +++ b/test/jsonrpc-examples/README.md @@ -0,0 +1,33 @@ +## Integration tests for JSON classification and comparison tool + +This directory contains input files for tests in +`Test.Booster.JsonRpc.DiffTest`. + +### File Classification + +Files in this directory are named according to their expected +classification by `decodeKoreJson`, with suffixes indicating the +expected `KoreRpcType`: + +| Suffix | `KoreRpcType` | | +|----------------------|----------------------|-------------------------------------| +| `..request` | `RpcReq ` | Request with given method | +| `..response` | `RpcResp ` | Response for given method | +| `.error.response` | `RpcErr` | Error response {msg, code, details} | +| `.kore.json` | `RpcKore` | JSON-encoded Kore term | +| `.random.json` | `RpcJs` | Valid JSON of unknown type | +| `.error` | `NotRpcJs` | Not valid as JSON | + +The test reads and classifies the file, comparing against the expected +type given by the suffix. + +### File comparisons + +The files in this directory are compared _pairwise_ with each +other. The comparison results are rendered as file differences or type +differences. + +The output of the comparison is compared to expected outputs stored in +files in subdirectory `expected/`. +The expected output of comparing `` and `` is stored in +`@ "reason": "terminal-rule", +3a4 +> "rule": "TEST.DE", + diff --git a/test/jsonrpc-examples/expected/depth-limit.execute.response@with-logging.simplify.response b/test/jsonrpc-examples/expected/depth-limit.execute.response@with-logging.simplify.response new file mode 100644 index 000000000..ffc074496 --- /dev/null +++ b/test/jsonrpc-examples/expected/depth-limit.execute.response@with-logging.simplify.response @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/depth-limit.execute.response: ExecuteM response + * File test/jsonrpc-examples/with-logging.simplify.response: SimplifyM response diff --git a/test/jsonrpc-examples/expected/depth-limit.spaghetti-formatted.execute.response@depth-limit.execute.response b/test/jsonrpc-examples/expected/depth-limit.spaghetti-formatted.execute.response@depth-limit.execute.response new file mode 100644 index 000000000..f25c227af --- /dev/null +++ b/test/jsonrpc-examples/expected/depth-limit.spaghetti-formatted.execute.response@depth-limit.execute.response @@ -0,0 +1 @@ +Files test/jsonrpc-examples/depth-limit.spaghetti-formatted.execute.response and test/jsonrpc-examples/depth-limit.execute.response are identical ExecuteM responses \ No newline at end of file diff --git a/test/jsonrpc-examples/expected/depth-limit.spaghetti-formatted.execute.response@foundry-proof.implies.request b/test/jsonrpc-examples/expected/depth-limit.spaghetti-formatted.execute.response@foundry-proof.implies.request new file mode 100644 index 000000000..4fd4bd845 --- /dev/null +++ b/test/jsonrpc-examples/expected/depth-limit.spaghetti-formatted.execute.response@foundry-proof.implies.request @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/depth-limit.spaghetti-formatted.execute.response: ExecuteM response + * File test/jsonrpc-examples/foundry-proof.implies.request: ImpliesM request diff --git a/test/jsonrpc-examples/expected/depth-limit.spaghetti-formatted.execute.response@foundry-proof.simplify.request b/test/jsonrpc-examples/expected/depth-limit.spaghetti-formatted.execute.response@foundry-proof.simplify.request new file mode 100644 index 000000000..7113fa026 --- /dev/null +++ b/test/jsonrpc-examples/expected/depth-limit.spaghetti-formatted.execute.response@foundry-proof.simplify.request @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/depth-limit.spaghetti-formatted.execute.response: ExecuteM response + * File test/jsonrpc-examples/foundry-proof.simplify.request: SimplifyM request diff --git a/test/jsonrpc-examples/expected/depth-limit.spaghetti-formatted.execute.response@foundry-proof2.simplify.request b/test/jsonrpc-examples/expected/depth-limit.spaghetti-formatted.execute.response@foundry-proof2.simplify.request new file mode 100644 index 000000000..f7d54e564 --- /dev/null +++ b/test/jsonrpc-examples/expected/depth-limit.spaghetti-formatted.execute.response@foundry-proof2.simplify.request @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/depth-limit.spaghetti-formatted.execute.response: ExecuteM response + * File test/jsonrpc-examples/foundry-proof2.simplify.request: SimplifyM request diff --git a/test/jsonrpc-examples/expected/depth-limit.spaghetti-formatted.execute.response@not-json.error b/test/jsonrpc-examples/expected/depth-limit.spaghetti-formatted.execute.response@not-json.error new file mode 100644 index 000000000..ead60440a --- /dev/null +++ b/test/jsonrpc-examples/expected/depth-limit.spaghetti-formatted.execute.response@not-json.error @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/depth-limit.spaghetti-formatted.execute.response: ExecuteM response + * File test/jsonrpc-examples/not-json.error: non-JSON file diff --git a/test/jsonrpc-examples/expected/depth-limit.spaghetti-formatted.execute.response@params.random.json b/test/jsonrpc-examples/expected/depth-limit.spaghetti-formatted.execute.response@params.random.json new file mode 100644 index 000000000..318ee1966 --- /dev/null +++ b/test/jsonrpc-examples/expected/depth-limit.spaghetti-formatted.execute.response@params.random.json @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/depth-limit.spaghetti-formatted.execute.response: ExecuteM response + * File test/jsonrpc-examples/params.random.json: unknown object diff --git a/test/jsonrpc-examples/expected/depth-limit.spaghetti-formatted.execute.response@state-a.kore.json b/test/jsonrpc-examples/expected/depth-limit.spaghetti-formatted.execute.response@state-a.kore.json new file mode 100644 index 000000000..5c2a57164 --- /dev/null +++ b/test/jsonrpc-examples/expected/depth-limit.spaghetti-formatted.execute.response@state-a.kore.json @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/depth-limit.spaghetti-formatted.execute.response: ExecuteM response + * File test/jsonrpc-examples/state-a.kore.json: Kore term diff --git a/test/jsonrpc-examples/expected/depth-limit.spaghetti-formatted.execute.response@state-a.spaghetti-formatted.kore.json b/test/jsonrpc-examples/expected/depth-limit.spaghetti-formatted.execute.response@state-a.spaghetti-formatted.kore.json new file mode 100644 index 000000000..2ef729cb9 --- /dev/null +++ b/test/jsonrpc-examples/expected/depth-limit.spaghetti-formatted.execute.response@state-a.spaghetti-formatted.kore.json @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/depth-limit.spaghetti-formatted.execute.response: ExecuteM response + * File test/jsonrpc-examples/state-a.spaghetti-formatted.kore.json: Kore term diff --git a/test/jsonrpc-examples/expected/depth-limit.spaghetti-formatted.execute.response@state-a.unformatted.execute.request b/test/jsonrpc-examples/expected/depth-limit.spaghetti-formatted.execute.response@state-a.unformatted.execute.request new file mode 100644 index 000000000..1700b73f7 --- /dev/null +++ b/test/jsonrpc-examples/expected/depth-limit.spaghetti-formatted.execute.response@state-a.unformatted.execute.request @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/depth-limit.spaghetti-formatted.execute.response: ExecuteM response + * File test/jsonrpc-examples/state-a.unformatted.execute.request: ExecuteM request diff --git a/test/jsonrpc-examples/expected/depth-limit.spaghetti-formatted.execute.response@terminal.execute.response b/test/jsonrpc-examples/expected/depth-limit.spaghetti-formatted.execute.response@terminal.execute.response new file mode 100644 index 000000000..ee136b60a --- /dev/null +++ b/test/jsonrpc-examples/expected/depth-limit.spaghetti-formatted.execute.response@terminal.execute.response @@ -0,0 +1,8 @@ +Files test/jsonrpc-examples/depth-limit.spaghetti-formatted.execute.response and test/jsonrpc-examples/terminal.execute.response are different ExecuteM responses +2c2 +< "reason": "depth-bound", +--- +> "reason": "terminal-rule", +3a4 +> "rule": "TEST.DE", + diff --git a/test/jsonrpc-examples/expected/depth-limit.spaghetti-formatted.execute.response@with-logging.simplify.response b/test/jsonrpc-examples/expected/depth-limit.spaghetti-formatted.execute.response@with-logging.simplify.response new file mode 100644 index 000000000..0fe444f7b --- /dev/null +++ b/test/jsonrpc-examples/expected/depth-limit.spaghetti-formatted.execute.response@with-logging.simplify.response @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/depth-limit.spaghetti-formatted.execute.response: ExecuteM response + * File test/jsonrpc-examples/with-logging.simplify.response: SimplifyM response diff --git a/test/jsonrpc-examples/expected/foundry-proof.implies.request@depth-limit.execute.response b/test/jsonrpc-examples/expected/foundry-proof.implies.request@depth-limit.execute.response new file mode 100644 index 000000000..7ffacf156 --- /dev/null +++ b/test/jsonrpc-examples/expected/foundry-proof.implies.request@depth-limit.execute.response @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/foundry-proof.implies.request: ImpliesM request + * File test/jsonrpc-examples/depth-limit.execute.response: ExecuteM response diff --git a/test/jsonrpc-examples/expected/foundry-proof.implies.request@depth-limit.spaghetti-formatted.execute.response b/test/jsonrpc-examples/expected/foundry-proof.implies.request@depth-limit.spaghetti-formatted.execute.response new file mode 100644 index 000000000..1af87e0b9 --- /dev/null +++ b/test/jsonrpc-examples/expected/foundry-proof.implies.request@depth-limit.spaghetti-formatted.execute.response @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/foundry-proof.implies.request: ImpliesM request + * File test/jsonrpc-examples/depth-limit.spaghetti-formatted.execute.response: ExecuteM response diff --git a/test/jsonrpc-examples/expected/foundry-proof.implies.request@foundry-proof.simplify.request b/test/jsonrpc-examples/expected/foundry-proof.implies.request@foundry-proof.simplify.request new file mode 100644 index 000000000..b8a04af1a --- /dev/null +++ b/test/jsonrpc-examples/expected/foundry-proof.implies.request@foundry-proof.simplify.request @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/foundry-proof.implies.request: ImpliesM request + * File test/jsonrpc-examples/foundry-proof.simplify.request: SimplifyM request diff --git a/test/jsonrpc-examples/expected/foundry-proof.implies.request@foundry-proof2.simplify.request b/test/jsonrpc-examples/expected/foundry-proof.implies.request@foundry-proof2.simplify.request new file mode 100644 index 000000000..f8639951c --- /dev/null +++ b/test/jsonrpc-examples/expected/foundry-proof.implies.request@foundry-proof2.simplify.request @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/foundry-proof.implies.request: ImpliesM request + * File test/jsonrpc-examples/foundry-proof2.simplify.request: SimplifyM request diff --git a/test/jsonrpc-examples/expected/foundry-proof.implies.request@not-json.error b/test/jsonrpc-examples/expected/foundry-proof.implies.request@not-json.error new file mode 100644 index 000000000..d58b14f82 --- /dev/null +++ b/test/jsonrpc-examples/expected/foundry-proof.implies.request@not-json.error @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/foundry-proof.implies.request: ImpliesM request + * File test/jsonrpc-examples/not-json.error: non-JSON file diff --git a/test/jsonrpc-examples/expected/foundry-proof.implies.request@params.random.json b/test/jsonrpc-examples/expected/foundry-proof.implies.request@params.random.json new file mode 100644 index 000000000..f5b52829c --- /dev/null +++ b/test/jsonrpc-examples/expected/foundry-proof.implies.request@params.random.json @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/foundry-proof.implies.request: ImpliesM request + * File test/jsonrpc-examples/params.random.json: unknown object diff --git a/test/jsonrpc-examples/expected/foundry-proof.implies.request@state-a.kore.json b/test/jsonrpc-examples/expected/foundry-proof.implies.request@state-a.kore.json new file mode 100644 index 000000000..88fa00382 --- /dev/null +++ b/test/jsonrpc-examples/expected/foundry-proof.implies.request@state-a.kore.json @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/foundry-proof.implies.request: ImpliesM request + * File test/jsonrpc-examples/state-a.kore.json: Kore term diff --git a/test/jsonrpc-examples/expected/foundry-proof.implies.request@state-a.spaghetti-formatted.kore.json b/test/jsonrpc-examples/expected/foundry-proof.implies.request@state-a.spaghetti-formatted.kore.json new file mode 100644 index 000000000..144258839 --- /dev/null +++ b/test/jsonrpc-examples/expected/foundry-proof.implies.request@state-a.spaghetti-formatted.kore.json @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/foundry-proof.implies.request: ImpliesM request + * File test/jsonrpc-examples/state-a.spaghetti-formatted.kore.json: Kore term diff --git a/test/jsonrpc-examples/expected/foundry-proof.implies.request@state-a.unformatted.execute.request b/test/jsonrpc-examples/expected/foundry-proof.implies.request@state-a.unformatted.execute.request new file mode 100644 index 000000000..33c384a00 --- /dev/null +++ b/test/jsonrpc-examples/expected/foundry-proof.implies.request@state-a.unformatted.execute.request @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/foundry-proof.implies.request: ImpliesM request + * File test/jsonrpc-examples/state-a.unformatted.execute.request: ExecuteM request diff --git a/test/jsonrpc-examples/expected/foundry-proof.implies.request@terminal.execute.response b/test/jsonrpc-examples/expected/foundry-proof.implies.request@terminal.execute.response new file mode 100644 index 000000000..707e80611 --- /dev/null +++ b/test/jsonrpc-examples/expected/foundry-proof.implies.request@terminal.execute.response @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/foundry-proof.implies.request: ImpliesM request + * File test/jsonrpc-examples/terminal.execute.response: ExecuteM response diff --git a/test/jsonrpc-examples/expected/foundry-proof.implies.request@with-logging.simplify.response b/test/jsonrpc-examples/expected/foundry-proof.implies.request@with-logging.simplify.response new file mode 100644 index 000000000..27db5c599 --- /dev/null +++ b/test/jsonrpc-examples/expected/foundry-proof.implies.request@with-logging.simplify.response @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/foundry-proof.implies.request: ImpliesM request + * File test/jsonrpc-examples/with-logging.simplify.response: SimplifyM response diff --git a/test/jsonrpc-examples/expected/foundry-proof.simplify.request@depth-limit.execute.response b/test/jsonrpc-examples/expected/foundry-proof.simplify.request@depth-limit.execute.response new file mode 100644 index 000000000..47bd3ac7f --- /dev/null +++ b/test/jsonrpc-examples/expected/foundry-proof.simplify.request@depth-limit.execute.response @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/foundry-proof.simplify.request: SimplifyM request + * File test/jsonrpc-examples/depth-limit.execute.response: ExecuteM response diff --git a/test/jsonrpc-examples/expected/foundry-proof.simplify.request@depth-limit.spaghetti-formatted.execute.response b/test/jsonrpc-examples/expected/foundry-proof.simplify.request@depth-limit.spaghetti-formatted.execute.response new file mode 100644 index 000000000..5b00c675e --- /dev/null +++ b/test/jsonrpc-examples/expected/foundry-proof.simplify.request@depth-limit.spaghetti-formatted.execute.response @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/foundry-proof.simplify.request: SimplifyM request + * File test/jsonrpc-examples/depth-limit.spaghetti-formatted.execute.response: ExecuteM response diff --git a/test/jsonrpc-examples/expected/foundry-proof.simplify.request@foundry-proof.implies.request b/test/jsonrpc-examples/expected/foundry-proof.simplify.request@foundry-proof.implies.request new file mode 100644 index 000000000..5012cbeda --- /dev/null +++ b/test/jsonrpc-examples/expected/foundry-proof.simplify.request@foundry-proof.implies.request @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/foundry-proof.simplify.request: SimplifyM request + * File test/jsonrpc-examples/foundry-proof.implies.request: ImpliesM request diff --git a/test/jsonrpc-examples/expected/foundry-proof.simplify.request@foundry-proof2.simplify.request b/test/jsonrpc-examples/expected/foundry-proof.simplify.request@foundry-proof2.simplify.request new file mode 100644 index 000000000..7e9591158 --- /dev/null +++ b/test/jsonrpc-examples/expected/foundry-proof.simplify.request@foundry-proof2.simplify.request @@ -0,0 +1,583 @@ +Files test/jsonrpc-examples/foundry-proof.simplify.request and test/jsonrpc-examples/foundry-proof2.simplify.request are different SimplifyM requests +6,11c6 +< "tag": "Ceil", +< "argSort": { +< "tag": "SortApp", +< "name": "SortGeneratedTopCell", +< "args": [] +< }, +--- +> "tag": "And", +17c12 +< "arg": { +--- +> "first": { +285,291c280,304 +< "tag": "EVar", +< "name": "VarCALLER'Unds'ID", +< "sort": { +< "tag": "SortApp", +< "name": "SortAccount", +< "args": [] +< } +--- +> "tag": "App", +> "name": "inj", +> "sorts": [ +> { +> "tag": "SortApp", +> "name": "SortInt", +> "args": [] +> }, +> { +> "tag": "SortApp", +> "name": "SortAccount", +> "args": [] +> } +> ], +> "args": [ +> { +> "tag": "EVar", +> "name": "VarCALLER'Unds'ID", +> "sort": { +> "tag": "SortApp", +> "name": "SortInt", +> "args": [] +> } +> } +> ] +579,585c592,616 +< "tag": "EVar", +< "name": "VarORIGIN'Unds'ID", +< "sort": { +< "tag": "SortApp", +< "name": "SortAccount", +< "args": [] +< } +--- +> "tag": "App", +> "name": "inj", +> "sorts": [ +> { +> "tag": "SortApp", +> "name": "SortInt", +> "args": [] +> }, +> { +> "tag": "SortApp", +> "name": "SortAccount", +> "args": [] +> } +> ], +> "args": [ +> { +> "tag": "EVar", +> "name": "VarORIGIN'Unds'ID", +> "sort": { +> "tag": "SortApp", +> "name": "SortInt", +> "args": [] +> } +> } +> ] +1675a1707,2205 +> }, +> "second": { +> "tag": "And", +> "sort": { +> "tag": "SortApp", +> "name": "SortGeneratedTopCell", +> "args": [] +> }, +> "first": { +> "tag": "Equals", +> "argSort": { +> "tag": "SortApp", +> "name": "SortBool", +> "args": [] +> }, +> "sort": { +> "tag": "SortApp", +> "name": "SortGeneratedTopCell", +> "args": [] +> }, +> "first": { +> "tag": "DV", +> "sort": { +> "tag": "SortApp", +> "name": "SortBool", +> "args": [] +> }, +> "value": "true" +> }, +> "second": { +> "tag": "App", +> "name": "Lbl'Unds'andBool'Unds'", +> "sorts": [], +> "args": [ +> { +> "tag": "App", +> "name": "Lbl'Unds-LT-Eqls'Int'Unds'", +> "sorts": [], +> "args": [ +> { +> "tag": "DV", +> "sort": { +> "tag": "SortApp", +> "name": "SortInt", +> "args": [] +> }, +> "value": "0" +> }, +> { +> "tag": "EVar", +> "name": "VarCALLER'Unds'ID", +> "sort": { +> "tag": "SortApp", +> "name": "SortInt", +> "args": [] +> } +> } +> ] +> }, +> { +> "tag": "App", +> "name": "Lbl'Unds-LT-'Int'Unds'", +> "sorts": [], +> "args": [ +> { +> "tag": "EVar", +> "name": "VarCALLER'Unds'ID", +> "sort": { +> "tag": "SortApp", +> "name": "SortInt", +> "args": [] +> } +> }, +> { +> "tag": "DV", +> "sort": { +> "tag": "SortApp", +> "name": "SortInt", +> "args": [] +> }, +> "value": "1461501637330902918203684832716283019655932542976" +> } +> ] +> } +> ] +> } +> }, +> "second": { +> "tag": "And", +> "sort": { +> "tag": "SortApp", +> "name": "SortGeneratedTopCell", +> "args": [] +> }, +> "first": { +> "tag": "Equals", +> "argSort": { +> "tag": "SortApp", +> "name": "SortBool", +> "args": [] +> }, +> "sort": { +> "tag": "SortApp", +> "name": "SortGeneratedTopCell", +> "args": [] +> }, +> "first": { +> "tag": "DV", +> "sort": { +> "tag": "SortApp", +> "name": "SortBool", +> "args": [] +> }, +> "value": "true" +> }, +> "second": { +> "tag": "App", +> "name": "Lbl'Unds'andBool'Unds'", +> "sorts": [], +> "args": [ +> { +> "tag": "App", +> "name": "Lbl'Unds-LT-Eqls'Int'Unds'", +> "sorts": [], +> "args": [ +> { +> "tag": "DV", +> "sort": { +> "tag": "SortApp", +> "name": "SortInt", +> "args": [] +> }, +> "value": "0" +> }, +> { +> "tag": "EVar", +> "name": "VarORIGIN'Unds'ID", +> "sort": { +> "tag": "SortApp", +> "name": "SortInt", +> "args": [] +> } +> } +> ] +> }, +> { +> "tag": "App", +> "name": "Lbl'Unds-LT-'Int'Unds'", +> "sorts": [], +> "args": [ +> { +> "tag": "EVar", +> "name": "VarORIGIN'Unds'ID", +> "sort": { +> "tag": "SortApp", +> "name": "SortInt", +> "args": [] +> } +> }, +> { +> "tag": "DV", +> "sort": { +> "tag": "SortApp", +> "name": "SortInt", +> "args": [] +> }, +> "value": "1461501637330902918203684832716283019655932542976" +> } +> ] +> } +> ] +> } +> }, +> "second": { +> "tag": "And", +> "sort": { +> "tag": "SortApp", +> "name": "SortGeneratedTopCell", +> "args": [] +> }, +> "first": { +> "tag": "Equals", +> "argSort": { +> "tag": "SortApp", +> "name": "SortBool", +> "args": [] +> }, +> "sort": { +> "tag": "SortApp", +> "name": "SortGeneratedTopCell", +> "args": [] +> }, +> "first": { +> "tag": "DV", +> "sort": { +> "tag": "SortApp", +> "name": "SortBool", +> "args": [] +> }, +> "value": "true" +> }, +> "second": { +> "tag": "App", +> "name": "Lbl'Unds'andBool'Unds'", +> "sorts": [], +> "args": [ +> { +> "tag": "App", +> "name": "Lbl'Unds-LT-Eqls'Int'Unds'", +> "sorts": [], +> "args": [ +> { +> "tag": "DV", +> "sort": { +> "tag": "SortApp", +> "name": "SortInt", +> "args": [] +> }, +> "value": "0" +> }, +> { +> "tag": "EVar", +> "name": "VarNUMBER'Unds'CELL", +> "sort": { +> "tag": "SortApp", +> "name": "SortInt", +> "args": [] +> } +> } +> ] +> }, +> { +> "tag": "App", +> "name": "Lbl'Unds-LT-Eqls'Int'Unds'", +> "sorts": [], +> "args": [ +> { +> "tag": "EVar", +> "name": "VarNUMBER'Unds'CELL", +> "sort": { +> "tag": "SortApp", +> "name": "SortInt", +> "args": [] +> } +> }, +> { +> "tag": "DV", +> "sort": { +> "tag": "SortApp", +> "name": "SortInt", +> "args": [] +> }, +> "value": "57896044618658097711785492504343953926634992332820282019728792003956564819967" +> } +> ] +> } +> ] +> } +> }, +> "second": { +> "tag": "And", +> "sort": { +> "tag": "SortApp", +> "name": "SortGeneratedTopCell", +> "args": [] +> }, +> "first": { +> "tag": "Equals", +> "argSort": { +> "tag": "SortApp", +> "name": "SortBool", +> "args": [] +> }, +> "sort": { +> "tag": "SortApp", +> "name": "SortGeneratedTopCell", +> "args": [] +> }, +> "first": { +> "tag": "DV", +> "sort": { +> "tag": "SortApp", +> "name": "SortBool", +> "args": [] +> }, +> "value": "true" +> }, +> "second": { +> "tag": "App", +> "name": "Lbl'Unds'andBool'Unds'", +> "sorts": [], +> "args": [ +> { +> "tag": "App", +> "name": "Lbl'Unds-LT-Eqls'Int'Unds'", +> "sorts": [], +> "args": [ +> { +> "tag": "DV", +> "sort": { +> "tag": "SortApp", +> "name": "SortInt", +> "args": [] +> }, +> "value": "0" +> }, +> { +> "tag": "DV", +> "sort": { +> "tag": "SortApp", +> "name": "SortInt", +> "args": [] +> }, +> "value": "9223372036854775807" +> } +> ] +> }, +> { +> "tag": "App", +> "name": "Lbl'Unds-LT-'Int'Unds'", +> "sorts": [], +> "args": [ +> { +> "tag": "DV", +> "sort": { +> "tag": "SortApp", +> "name": "SortInt", +> "args": [] +> }, +> "value": "9223372036854775807" +> }, +> { +> "tag": "DV", +> "sort": { +> "tag": "SortApp", +> "name": "SortInt", +> "args": [] +> }, +> "value": "115792089237316195423570985008687907853269984665640564039457584007913129639936" +> } +> ] +> } +> ] +> } +> }, +> "second": { +> "tag": "And", +> "sort": { +> "tag": "SortApp", +> "name": "SortGeneratedTopCell", +> "args": [] +> }, +> "first": { +> "tag": "Equals", +> "argSort": { +> "tag": "SortApp", +> "name": "SortBool", +> "args": [] +> }, +> "sort": { +> "tag": "SortApp", +> "name": "SortGeneratedTopCell", +> "args": [] +> }, +> "first": { +> "tag": "DV", +> "sort": { +> "tag": "SortApp", +> "name": "SortBool", +> "args": [] +> }, +> "value": "true" +> }, +> "second": { +> "tag": "App", +> "name": "Lbl'Unds-LT-'Int'Unds'", +> "sorts": [], +> "args": [ +> { +> "tag": "App", +> "name": "LbllengthBytes'LParUndsRParUnds'BYTES-HOOKED'Unds'Int'Unds'Bytes", +> "sorts": [], +> "args": [ +> { +> "tag": "App", +> "name": "Lblmethod'Unds'AccountParamsTest", +> "sorts": [], +> "args": [ +> { +> "tag": "App", +> "name": "Lblcontract'Unds'AccountParamsTest", +> "sorts": [], +> "args": [] +> }, +> { +> "tag": "App", +> "name": "Lblmethod'Unds'AccountParamsTest'Unds'testDealConcrete'Unds'", +> "sorts": [], +> "args": [] +> } +> ] +> } +> ] +> }, +> { +> "tag": "DV", +> "sort": { +> "tag": "SortApp", +> "name": "SortInt", +> "args": [] +> }, +> "value": "340282366920938463463374607431768211456" +> } +> ] +> } +> }, +> "second": { +> "tag": "Equals", +> "argSort": { +> "tag": "SortApp", +> "name": "SortBool", +> "args": [] +> }, +> "sort": { +> "tag": "SortApp", +> "name": "SortGeneratedTopCell", +> "args": [] +> }, +> "first": { +> "tag": "DV", +> "sort": { +> "tag": "SortApp", +> "name": "SortBool", +> "args": [] +> }, +> "value": "true" +> }, +> "second": { +> "tag": "App", +> "name": "Lbl'Unds'andBool'Unds'", +> "sorts": [], +> "args": [ +> { +> "tag": "App", +> "name": "Lbl'Unds-LT-Eqls'Int'Unds'", +> "sorts": [], +> "args": [ +> { +> "tag": "DV", +> "sort": { +> "tag": "SortApp", +> "name": "SortInt", +> "args": [] +> }, +> "value": "0" +> }, +> { +> "tag": "DV", +> "sort": { +> "tag": "SortApp", +> "name": "SortInt", +> "args": [] +> }, +> "value": "728815563385977040452943777879061427756277306518" +> } +> ] +> }, +> { +> "tag": "App", +> "name": "Lbl'Unds-LT-'Int'Unds'", +> "sorts": [], +> "args": [ +> { +> "tag": "DV", +> "sort": { +> "tag": "SortApp", +> "name": "SortInt", +> "args": [] +> }, +> "value": "728815563385977040452943777879061427756277306518" +> }, +> { +> "tag": "DV", +> "sort": { +> "tag": "SortApp", +> "name": "SortInt", +> "args": [] +> }, +> "value": "1461501637330902918203684832716283019655932542976" +> } +> ] +> } +> ] +> } +> } +> } +> } +> } +> } + diff --git a/test/jsonrpc-examples/expected/foundry-proof.simplify.request@not-json.error b/test/jsonrpc-examples/expected/foundry-proof.simplify.request@not-json.error new file mode 100644 index 000000000..7dc9620a6 --- /dev/null +++ b/test/jsonrpc-examples/expected/foundry-proof.simplify.request@not-json.error @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/foundry-proof.simplify.request: SimplifyM request + * File test/jsonrpc-examples/not-json.error: non-JSON file diff --git a/test/jsonrpc-examples/expected/foundry-proof.simplify.request@params.random.json b/test/jsonrpc-examples/expected/foundry-proof.simplify.request@params.random.json new file mode 100644 index 000000000..550ae32ed --- /dev/null +++ b/test/jsonrpc-examples/expected/foundry-proof.simplify.request@params.random.json @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/foundry-proof.simplify.request: SimplifyM request + * File test/jsonrpc-examples/params.random.json: unknown object diff --git a/test/jsonrpc-examples/expected/foundry-proof.simplify.request@state-a.kore.json b/test/jsonrpc-examples/expected/foundry-proof.simplify.request@state-a.kore.json new file mode 100644 index 000000000..ca576d6b3 --- /dev/null +++ b/test/jsonrpc-examples/expected/foundry-proof.simplify.request@state-a.kore.json @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/foundry-proof.simplify.request: SimplifyM request + * File test/jsonrpc-examples/state-a.kore.json: Kore term diff --git a/test/jsonrpc-examples/expected/foundry-proof.simplify.request@state-a.spaghetti-formatted.kore.json b/test/jsonrpc-examples/expected/foundry-proof.simplify.request@state-a.spaghetti-formatted.kore.json new file mode 100644 index 000000000..5bff52d84 --- /dev/null +++ b/test/jsonrpc-examples/expected/foundry-proof.simplify.request@state-a.spaghetti-formatted.kore.json @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/foundry-proof.simplify.request: SimplifyM request + * File test/jsonrpc-examples/state-a.spaghetti-formatted.kore.json: Kore term diff --git a/test/jsonrpc-examples/expected/foundry-proof.simplify.request@state-a.unformatted.execute.request b/test/jsonrpc-examples/expected/foundry-proof.simplify.request@state-a.unformatted.execute.request new file mode 100644 index 000000000..94f4c9a00 --- /dev/null +++ b/test/jsonrpc-examples/expected/foundry-proof.simplify.request@state-a.unformatted.execute.request @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/foundry-proof.simplify.request: SimplifyM request + * File test/jsonrpc-examples/state-a.unformatted.execute.request: ExecuteM request diff --git a/test/jsonrpc-examples/expected/foundry-proof.simplify.request@terminal.execute.response b/test/jsonrpc-examples/expected/foundry-proof.simplify.request@terminal.execute.response new file mode 100644 index 000000000..2e56dfa6b --- /dev/null +++ b/test/jsonrpc-examples/expected/foundry-proof.simplify.request@terminal.execute.response @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/foundry-proof.simplify.request: SimplifyM request + * File test/jsonrpc-examples/terminal.execute.response: ExecuteM response diff --git a/test/jsonrpc-examples/expected/foundry-proof.simplify.request@with-logging.simplify.response b/test/jsonrpc-examples/expected/foundry-proof.simplify.request@with-logging.simplify.response new file mode 100644 index 000000000..e78aab8e6 --- /dev/null +++ b/test/jsonrpc-examples/expected/foundry-proof.simplify.request@with-logging.simplify.response @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/foundry-proof.simplify.request: SimplifyM request + * File test/jsonrpc-examples/with-logging.simplify.response: SimplifyM response diff --git a/test/jsonrpc-examples/expected/foundry-proof2.simplify.request@depth-limit.execute.response b/test/jsonrpc-examples/expected/foundry-proof2.simplify.request@depth-limit.execute.response new file mode 100644 index 000000000..87e092dd8 --- /dev/null +++ b/test/jsonrpc-examples/expected/foundry-proof2.simplify.request@depth-limit.execute.response @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/foundry-proof2.simplify.request: SimplifyM request + * File test/jsonrpc-examples/depth-limit.execute.response: ExecuteM response diff --git a/test/jsonrpc-examples/expected/foundry-proof2.simplify.request@depth-limit.spaghetti-formatted.execute.response b/test/jsonrpc-examples/expected/foundry-proof2.simplify.request@depth-limit.spaghetti-formatted.execute.response new file mode 100644 index 000000000..f215ff552 --- /dev/null +++ b/test/jsonrpc-examples/expected/foundry-proof2.simplify.request@depth-limit.spaghetti-formatted.execute.response @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/foundry-proof2.simplify.request: SimplifyM request + * File test/jsonrpc-examples/depth-limit.spaghetti-formatted.execute.response: ExecuteM response diff --git a/test/jsonrpc-examples/expected/foundry-proof2.simplify.request@foundry-proof.implies.request b/test/jsonrpc-examples/expected/foundry-proof2.simplify.request@foundry-proof.implies.request new file mode 100644 index 000000000..bfccb4ae8 --- /dev/null +++ b/test/jsonrpc-examples/expected/foundry-proof2.simplify.request@foundry-proof.implies.request @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/foundry-proof2.simplify.request: SimplifyM request + * File test/jsonrpc-examples/foundry-proof.implies.request: ImpliesM request diff --git a/test/jsonrpc-examples/expected/foundry-proof2.simplify.request@foundry-proof.simplify.request b/test/jsonrpc-examples/expected/foundry-proof2.simplify.request@foundry-proof.simplify.request new file mode 100644 index 000000000..c593f269b --- /dev/null +++ b/test/jsonrpc-examples/expected/foundry-proof2.simplify.request@foundry-proof.simplify.request @@ -0,0 +1,583 @@ +Files test/jsonrpc-examples/foundry-proof2.simplify.request and test/jsonrpc-examples/foundry-proof.simplify.request are different SimplifyM requests +6c6,11 +< "tag": "And", +--- +> "tag": "Ceil", +> "argSort": { +> "tag": "SortApp", +> "name": "SortGeneratedTopCell", +> "args": [] +> }, +12c17 +< "first": { +--- +> "arg": { +280,304c285,291 +< "tag": "App", +< "name": "inj", +< "sorts": [ +< { +< "tag": "SortApp", +< "name": "SortInt", +< "args": [] +< }, +< { +< "tag": "SortApp", +< "name": "SortAccount", +< "args": [] +< } +< ], +< "args": [ +< { +< "tag": "EVar", +< "name": "VarCALLER'Unds'ID", +< "sort": { +< "tag": "SortApp", +< "name": "SortInt", +< "args": [] +< } +< } +< ] +--- +> "tag": "EVar", +> "name": "VarCALLER'Unds'ID", +> "sort": { +> "tag": "SortApp", +> "name": "SortAccount", +> "args": [] +> } +592,616c579,585 +< "tag": "App", +< "name": "inj", +< "sorts": [ +< { +< "tag": "SortApp", +< "name": "SortInt", +< "args": [] +< }, +< { +< "tag": "SortApp", +< "name": "SortAccount", +< "args": [] +< } +< ], +< "args": [ +< { +< "tag": "EVar", +< "name": "VarORIGIN'Unds'ID", +< "sort": { +< "tag": "SortApp", +< "name": "SortInt", +< "args": [] +< } +< } +< ] +--- +> "tag": "EVar", +> "name": "VarORIGIN'Unds'ID", +> "sort": { +> "tag": "SortApp", +> "name": "SortAccount", +> "args": [] +> } +1707,2205d1675 +< }, +< "second": { +< "tag": "And", +< "sort": { +< "tag": "SortApp", +< "name": "SortGeneratedTopCell", +< "args": [] +< }, +< "first": { +< "tag": "Equals", +< "argSort": { +< "tag": "SortApp", +< "name": "SortBool", +< "args": [] +< }, +< "sort": { +< "tag": "SortApp", +< "name": "SortGeneratedTopCell", +< "args": [] +< }, +< "first": { +< "tag": "DV", +< "sort": { +< "tag": "SortApp", +< "name": "SortBool", +< "args": [] +< }, +< "value": "true" +< }, +< "second": { +< "tag": "App", +< "name": "Lbl'Unds'andBool'Unds'", +< "sorts": [], +< "args": [ +< { +< "tag": "App", +< "name": "Lbl'Unds-LT-Eqls'Int'Unds'", +< "sorts": [], +< "args": [ +< { +< "tag": "DV", +< "sort": { +< "tag": "SortApp", +< "name": "SortInt", +< "args": [] +< }, +< "value": "0" +< }, +< { +< "tag": "EVar", +< "name": "VarCALLER'Unds'ID", +< "sort": { +< "tag": "SortApp", +< "name": "SortInt", +< "args": [] +< } +< } +< ] +< }, +< { +< "tag": "App", +< "name": "Lbl'Unds-LT-'Int'Unds'", +< "sorts": [], +< "args": [ +< { +< "tag": "EVar", +< "name": "VarCALLER'Unds'ID", +< "sort": { +< "tag": "SortApp", +< "name": "SortInt", +< "args": [] +< } +< }, +< { +< "tag": "DV", +< "sort": { +< "tag": "SortApp", +< "name": "SortInt", +< "args": [] +< }, +< "value": "1461501637330902918203684832716283019655932542976" +< } +< ] +< } +< ] +< } +< }, +< "second": { +< "tag": "And", +< "sort": { +< "tag": "SortApp", +< "name": "SortGeneratedTopCell", +< "args": [] +< }, +< "first": { +< "tag": "Equals", +< "argSort": { +< "tag": "SortApp", +< "name": "SortBool", +< "args": [] +< }, +< "sort": { +< "tag": "SortApp", +< "name": "SortGeneratedTopCell", +< "args": [] +< }, +< "first": { +< "tag": "DV", +< "sort": { +< "tag": "SortApp", +< "name": "SortBool", +< "args": [] +< }, +< "value": "true" +< }, +< "second": { +< "tag": "App", +< "name": "Lbl'Unds'andBool'Unds'", +< "sorts": [], +< "args": [ +< { +< "tag": "App", +< "name": "Lbl'Unds-LT-Eqls'Int'Unds'", +< "sorts": [], +< "args": [ +< { +< "tag": "DV", +< "sort": { +< "tag": "SortApp", +< "name": "SortInt", +< "args": [] +< }, +< "value": "0" +< }, +< { +< "tag": "EVar", +< "name": "VarORIGIN'Unds'ID", +< "sort": { +< "tag": "SortApp", +< "name": "SortInt", +< "args": [] +< } +< } +< ] +< }, +< { +< "tag": "App", +< "name": "Lbl'Unds-LT-'Int'Unds'", +< "sorts": [], +< "args": [ +< { +< "tag": "EVar", +< "name": "VarORIGIN'Unds'ID", +< "sort": { +< "tag": "SortApp", +< "name": "SortInt", +< "args": [] +< } +< }, +< { +< "tag": "DV", +< "sort": { +< "tag": "SortApp", +< "name": "SortInt", +< "args": [] +< }, +< "value": "1461501637330902918203684832716283019655932542976" +< } +< ] +< } +< ] +< } +< }, +< "second": { +< "tag": "And", +< "sort": { +< "tag": "SortApp", +< "name": "SortGeneratedTopCell", +< "args": [] +< }, +< "first": { +< "tag": "Equals", +< "argSort": { +< "tag": "SortApp", +< "name": "SortBool", +< "args": [] +< }, +< "sort": { +< "tag": "SortApp", +< "name": "SortGeneratedTopCell", +< "args": [] +< }, +< "first": { +< "tag": "DV", +< "sort": { +< "tag": "SortApp", +< "name": "SortBool", +< "args": [] +< }, +< "value": "true" +< }, +< "second": { +< "tag": "App", +< "name": "Lbl'Unds'andBool'Unds'", +< "sorts": [], +< "args": [ +< { +< "tag": "App", +< "name": "Lbl'Unds-LT-Eqls'Int'Unds'", +< "sorts": [], +< "args": [ +< { +< "tag": "DV", +< "sort": { +< "tag": "SortApp", +< "name": "SortInt", +< "args": [] +< }, +< "value": "0" +< }, +< { +< "tag": "EVar", +< "name": "VarNUMBER'Unds'CELL", +< "sort": { +< "tag": "SortApp", +< "name": "SortInt", +< "args": [] +< } +< } +< ] +< }, +< { +< "tag": "App", +< "name": "Lbl'Unds-LT-Eqls'Int'Unds'", +< "sorts": [], +< "args": [ +< { +< "tag": "EVar", +< "name": "VarNUMBER'Unds'CELL", +< "sort": { +< "tag": "SortApp", +< "name": "SortInt", +< "args": [] +< } +< }, +< { +< "tag": "DV", +< "sort": { +< "tag": "SortApp", +< "name": "SortInt", +< "args": [] +< }, +< "value": "57896044618658097711785492504343953926634992332820282019728792003956564819967" +< } +< ] +< } +< ] +< } +< }, +< "second": { +< "tag": "And", +< "sort": { +< "tag": "SortApp", +< "name": "SortGeneratedTopCell", +< "args": [] +< }, +< "first": { +< "tag": "Equals", +< "argSort": { +< "tag": "SortApp", +< "name": "SortBool", +< "args": [] +< }, +< "sort": { +< "tag": "SortApp", +< "name": "SortGeneratedTopCell", +< "args": [] +< }, +< "first": { +< "tag": "DV", +< "sort": { +< "tag": "SortApp", +< "name": "SortBool", +< "args": [] +< }, +< "value": "true" +< }, +< "second": { +< "tag": "App", +< "name": "Lbl'Unds'andBool'Unds'", +< "sorts": [], +< "args": [ +< { +< "tag": "App", +< "name": "Lbl'Unds-LT-Eqls'Int'Unds'", +< "sorts": [], +< "args": [ +< { +< "tag": "DV", +< "sort": { +< "tag": "SortApp", +< "name": "SortInt", +< "args": [] +< }, +< "value": "0" +< }, +< { +< "tag": "DV", +< "sort": { +< "tag": "SortApp", +< "name": "SortInt", +< "args": [] +< }, +< "value": "9223372036854775807" +< } +< ] +< }, +< { +< "tag": "App", +< "name": "Lbl'Unds-LT-'Int'Unds'", +< "sorts": [], +< "args": [ +< { +< "tag": "DV", +< "sort": { +< "tag": "SortApp", +< "name": "SortInt", +< "args": [] +< }, +< "value": "9223372036854775807" +< }, +< { +< "tag": "DV", +< "sort": { +< "tag": "SortApp", +< "name": "SortInt", +< "args": [] +< }, +< "value": "115792089237316195423570985008687907853269984665640564039457584007913129639936" +< } +< ] +< } +< ] +< } +< }, +< "second": { +< "tag": "And", +< "sort": { +< "tag": "SortApp", +< "name": "SortGeneratedTopCell", +< "args": [] +< }, +< "first": { +< "tag": "Equals", +< "argSort": { +< "tag": "SortApp", +< "name": "SortBool", +< "args": [] +< }, +< "sort": { +< "tag": "SortApp", +< "name": "SortGeneratedTopCell", +< "args": [] +< }, +< "first": { +< "tag": "DV", +< "sort": { +< "tag": "SortApp", +< "name": "SortBool", +< "args": [] +< }, +< "value": "true" +< }, +< "second": { +< "tag": "App", +< "name": "Lbl'Unds-LT-'Int'Unds'", +< "sorts": [], +< "args": [ +< { +< "tag": "App", +< "name": "LbllengthBytes'LParUndsRParUnds'BYTES-HOOKED'Unds'Int'Unds'Bytes", +< "sorts": [], +< "args": [ +< { +< "tag": "App", +< "name": "Lblmethod'Unds'AccountParamsTest", +< "sorts": [], +< "args": [ +< { +< "tag": "App", +< "name": "Lblcontract'Unds'AccountParamsTest", +< "sorts": [], +< "args": [] +< }, +< { +< "tag": "App", +< "name": "Lblmethod'Unds'AccountParamsTest'Unds'testDealConcrete'Unds'", +< "sorts": [], +< "args": [] +< } +< ] +< } +< ] +< }, +< { +< "tag": "DV", +< "sort": { +< "tag": "SortApp", +< "name": "SortInt", +< "args": [] +< }, +< "value": "340282366920938463463374607431768211456" +< } +< ] +< } +< }, +< "second": { +< "tag": "Equals", +< "argSort": { +< "tag": "SortApp", +< "name": "SortBool", +< "args": [] +< }, +< "sort": { +< "tag": "SortApp", +< "name": "SortGeneratedTopCell", +< "args": [] +< }, +< "first": { +< "tag": "DV", +< "sort": { +< "tag": "SortApp", +< "name": "SortBool", +< "args": [] +< }, +< "value": "true" +< }, +< "second": { +< "tag": "App", +< "name": "Lbl'Unds'andBool'Unds'", +< "sorts": [], +< "args": [ +< { +< "tag": "App", +< "name": "Lbl'Unds-LT-Eqls'Int'Unds'", +< "sorts": [], +< "args": [ +< { +< "tag": "DV", +< "sort": { +< "tag": "SortApp", +< "name": "SortInt", +< "args": [] +< }, +< "value": "0" +< }, +< { +< "tag": "DV", +< "sort": { +< "tag": "SortApp", +< "name": "SortInt", +< "args": [] +< }, +< "value": "728815563385977040452943777879061427756277306518" +< } +< ] +< }, +< { +< "tag": "App", +< "name": "Lbl'Unds-LT-'Int'Unds'", +< "sorts": [], +< "args": [ +< { +< "tag": "DV", +< "sort": { +< "tag": "SortApp", +< "name": "SortInt", +< "args": [] +< }, +< "value": "728815563385977040452943777879061427756277306518" +< }, +< { +< "tag": "DV", +< "sort": { +< "tag": "SortApp", +< "name": "SortInt", +< "args": [] +< }, +< "value": "1461501637330902918203684832716283019655932542976" +< } +< ] +< } +< ] +< } +< } +< } +< } +< } +< } + diff --git a/test/jsonrpc-examples/expected/foundry-proof2.simplify.request@not-json.error b/test/jsonrpc-examples/expected/foundry-proof2.simplify.request@not-json.error new file mode 100644 index 000000000..fb7b051aa --- /dev/null +++ b/test/jsonrpc-examples/expected/foundry-proof2.simplify.request@not-json.error @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/foundry-proof2.simplify.request: SimplifyM request + * File test/jsonrpc-examples/not-json.error: non-JSON file diff --git a/test/jsonrpc-examples/expected/foundry-proof2.simplify.request@params.random.json b/test/jsonrpc-examples/expected/foundry-proof2.simplify.request@params.random.json new file mode 100644 index 000000000..85ea43cb0 --- /dev/null +++ b/test/jsonrpc-examples/expected/foundry-proof2.simplify.request@params.random.json @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/foundry-proof2.simplify.request: SimplifyM request + * File test/jsonrpc-examples/params.random.json: unknown object diff --git a/test/jsonrpc-examples/expected/foundry-proof2.simplify.request@state-a.kore.json b/test/jsonrpc-examples/expected/foundry-proof2.simplify.request@state-a.kore.json new file mode 100644 index 000000000..85499157d --- /dev/null +++ b/test/jsonrpc-examples/expected/foundry-proof2.simplify.request@state-a.kore.json @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/foundry-proof2.simplify.request: SimplifyM request + * File test/jsonrpc-examples/state-a.kore.json: Kore term diff --git a/test/jsonrpc-examples/expected/foundry-proof2.simplify.request@state-a.spaghetti-formatted.kore.json b/test/jsonrpc-examples/expected/foundry-proof2.simplify.request@state-a.spaghetti-formatted.kore.json new file mode 100644 index 000000000..c55c2c6a5 --- /dev/null +++ b/test/jsonrpc-examples/expected/foundry-proof2.simplify.request@state-a.spaghetti-formatted.kore.json @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/foundry-proof2.simplify.request: SimplifyM request + * File test/jsonrpc-examples/state-a.spaghetti-formatted.kore.json: Kore term diff --git a/test/jsonrpc-examples/expected/foundry-proof2.simplify.request@state-a.unformatted.execute.request b/test/jsonrpc-examples/expected/foundry-proof2.simplify.request@state-a.unformatted.execute.request new file mode 100644 index 000000000..5fee7563f --- /dev/null +++ b/test/jsonrpc-examples/expected/foundry-proof2.simplify.request@state-a.unformatted.execute.request @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/foundry-proof2.simplify.request: SimplifyM request + * File test/jsonrpc-examples/state-a.unformatted.execute.request: ExecuteM request diff --git a/test/jsonrpc-examples/expected/foundry-proof2.simplify.request@terminal.execute.response b/test/jsonrpc-examples/expected/foundry-proof2.simplify.request@terminal.execute.response new file mode 100644 index 000000000..524fbaf20 --- /dev/null +++ b/test/jsonrpc-examples/expected/foundry-proof2.simplify.request@terminal.execute.response @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/foundry-proof2.simplify.request: SimplifyM request + * File test/jsonrpc-examples/terminal.execute.response: ExecuteM response diff --git a/test/jsonrpc-examples/expected/foundry-proof2.simplify.request@with-logging.simplify.response b/test/jsonrpc-examples/expected/foundry-proof2.simplify.request@with-logging.simplify.response new file mode 100644 index 000000000..d2d61d41e --- /dev/null +++ b/test/jsonrpc-examples/expected/foundry-proof2.simplify.request@with-logging.simplify.response @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/foundry-proof2.simplify.request: SimplifyM request + * File test/jsonrpc-examples/with-logging.simplify.response: SimplifyM response diff --git a/test/jsonrpc-examples/expected/not-json.error@depth-limit.execute.response b/test/jsonrpc-examples/expected/not-json.error@depth-limit.execute.response new file mode 100644 index 000000000..3751cf114 --- /dev/null +++ b/test/jsonrpc-examples/expected/not-json.error@depth-limit.execute.response @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/not-json.error: non-JSON file + * File test/jsonrpc-examples/depth-limit.execute.response: ExecuteM response diff --git a/test/jsonrpc-examples/expected/not-json.error@depth-limit.spaghetti-formatted.execute.response b/test/jsonrpc-examples/expected/not-json.error@depth-limit.spaghetti-formatted.execute.response new file mode 100644 index 000000000..6df48776b --- /dev/null +++ b/test/jsonrpc-examples/expected/not-json.error@depth-limit.spaghetti-formatted.execute.response @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/not-json.error: non-JSON file + * File test/jsonrpc-examples/depth-limit.spaghetti-formatted.execute.response: ExecuteM response diff --git a/test/jsonrpc-examples/expected/not-json.error@foundry-proof.implies.request b/test/jsonrpc-examples/expected/not-json.error@foundry-proof.implies.request new file mode 100644 index 000000000..6944c1e00 --- /dev/null +++ b/test/jsonrpc-examples/expected/not-json.error@foundry-proof.implies.request @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/not-json.error: non-JSON file + * File test/jsonrpc-examples/foundry-proof.implies.request: ImpliesM request diff --git a/test/jsonrpc-examples/expected/not-json.error@foundry-proof.simplify.request b/test/jsonrpc-examples/expected/not-json.error@foundry-proof.simplify.request new file mode 100644 index 000000000..2cee3e415 --- /dev/null +++ b/test/jsonrpc-examples/expected/not-json.error@foundry-proof.simplify.request @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/not-json.error: non-JSON file + * File test/jsonrpc-examples/foundry-proof.simplify.request: SimplifyM request diff --git a/test/jsonrpc-examples/expected/not-json.error@foundry-proof2.simplify.request b/test/jsonrpc-examples/expected/not-json.error@foundry-proof2.simplify.request new file mode 100644 index 000000000..3e681ee8b --- /dev/null +++ b/test/jsonrpc-examples/expected/not-json.error@foundry-proof2.simplify.request @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/not-json.error: non-JSON file + * File test/jsonrpc-examples/foundry-proof2.simplify.request: SimplifyM request diff --git a/test/jsonrpc-examples/expected/not-json.error@params.random.json b/test/jsonrpc-examples/expected/not-json.error@params.random.json new file mode 100644 index 000000000..96b2ebd0e --- /dev/null +++ b/test/jsonrpc-examples/expected/not-json.error@params.random.json @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/not-json.error: non-JSON file + * File test/jsonrpc-examples/params.random.json: unknown object diff --git a/test/jsonrpc-examples/expected/not-json.error@state-a.kore.json b/test/jsonrpc-examples/expected/not-json.error@state-a.kore.json new file mode 100644 index 000000000..4b78aeb9c --- /dev/null +++ b/test/jsonrpc-examples/expected/not-json.error@state-a.kore.json @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/not-json.error: non-JSON file + * File test/jsonrpc-examples/state-a.kore.json: Kore term diff --git a/test/jsonrpc-examples/expected/not-json.error@state-a.spaghetti-formatted.kore.json b/test/jsonrpc-examples/expected/not-json.error@state-a.spaghetti-formatted.kore.json new file mode 100644 index 000000000..631d8eba9 --- /dev/null +++ b/test/jsonrpc-examples/expected/not-json.error@state-a.spaghetti-formatted.kore.json @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/not-json.error: non-JSON file + * File test/jsonrpc-examples/state-a.spaghetti-formatted.kore.json: Kore term diff --git a/test/jsonrpc-examples/expected/not-json.error@state-a.unformatted.execute.request b/test/jsonrpc-examples/expected/not-json.error@state-a.unformatted.execute.request new file mode 100644 index 000000000..d05842b00 --- /dev/null +++ b/test/jsonrpc-examples/expected/not-json.error@state-a.unformatted.execute.request @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/not-json.error: non-JSON file + * File test/jsonrpc-examples/state-a.unformatted.execute.request: ExecuteM request diff --git a/test/jsonrpc-examples/expected/not-json.error@terminal.execute.response b/test/jsonrpc-examples/expected/not-json.error@terminal.execute.response new file mode 100644 index 000000000..c2a652a2c --- /dev/null +++ b/test/jsonrpc-examples/expected/not-json.error@terminal.execute.response @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/not-json.error: non-JSON file + * File test/jsonrpc-examples/terminal.execute.response: ExecuteM response diff --git a/test/jsonrpc-examples/expected/not-json.error@with-logging.simplify.response b/test/jsonrpc-examples/expected/not-json.error@with-logging.simplify.response new file mode 100644 index 000000000..4724a6f71 --- /dev/null +++ b/test/jsonrpc-examples/expected/not-json.error@with-logging.simplify.response @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/not-json.error: non-JSON file + * File test/jsonrpc-examples/with-logging.simplify.response: SimplifyM response diff --git a/test/jsonrpc-examples/expected/params.random.json@depth-limit.execute.response b/test/jsonrpc-examples/expected/params.random.json@depth-limit.execute.response new file mode 100644 index 000000000..e552503a3 --- /dev/null +++ b/test/jsonrpc-examples/expected/params.random.json@depth-limit.execute.response @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/params.random.json: unknown object + * File test/jsonrpc-examples/depth-limit.execute.response: ExecuteM response diff --git a/test/jsonrpc-examples/expected/params.random.json@depth-limit.spaghetti-formatted.execute.response b/test/jsonrpc-examples/expected/params.random.json@depth-limit.spaghetti-formatted.execute.response new file mode 100644 index 000000000..23001094c --- /dev/null +++ b/test/jsonrpc-examples/expected/params.random.json@depth-limit.spaghetti-formatted.execute.response @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/params.random.json: unknown object + * File test/jsonrpc-examples/depth-limit.spaghetti-formatted.execute.response: ExecuteM response diff --git a/test/jsonrpc-examples/expected/params.random.json@foundry-proof.implies.request b/test/jsonrpc-examples/expected/params.random.json@foundry-proof.implies.request new file mode 100644 index 000000000..618659653 --- /dev/null +++ b/test/jsonrpc-examples/expected/params.random.json@foundry-proof.implies.request @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/params.random.json: unknown object + * File test/jsonrpc-examples/foundry-proof.implies.request: ImpliesM request diff --git a/test/jsonrpc-examples/expected/params.random.json@foundry-proof.simplify.request b/test/jsonrpc-examples/expected/params.random.json@foundry-proof.simplify.request new file mode 100644 index 000000000..5d2e78179 --- /dev/null +++ b/test/jsonrpc-examples/expected/params.random.json@foundry-proof.simplify.request @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/params.random.json: unknown object + * File test/jsonrpc-examples/foundry-proof.simplify.request: SimplifyM request diff --git a/test/jsonrpc-examples/expected/params.random.json@foundry-proof2.simplify.request b/test/jsonrpc-examples/expected/params.random.json@foundry-proof2.simplify.request new file mode 100644 index 000000000..65675d73a --- /dev/null +++ b/test/jsonrpc-examples/expected/params.random.json@foundry-proof2.simplify.request @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/params.random.json: unknown object + * File test/jsonrpc-examples/foundry-proof2.simplify.request: SimplifyM request diff --git a/test/jsonrpc-examples/expected/params.random.json@not-json.error b/test/jsonrpc-examples/expected/params.random.json@not-json.error new file mode 100644 index 000000000..c84716079 --- /dev/null +++ b/test/jsonrpc-examples/expected/params.random.json@not-json.error @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/params.random.json: unknown object + * File test/jsonrpc-examples/not-json.error: non-JSON file diff --git a/test/jsonrpc-examples/expected/params.random.json@state-a.kore.json b/test/jsonrpc-examples/expected/params.random.json@state-a.kore.json new file mode 100644 index 000000000..0a5eea291 --- /dev/null +++ b/test/jsonrpc-examples/expected/params.random.json@state-a.kore.json @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/params.random.json: unknown object + * File test/jsonrpc-examples/state-a.kore.json: Kore term diff --git a/test/jsonrpc-examples/expected/params.random.json@state-a.spaghetti-formatted.kore.json b/test/jsonrpc-examples/expected/params.random.json@state-a.spaghetti-formatted.kore.json new file mode 100644 index 000000000..6de972e20 --- /dev/null +++ b/test/jsonrpc-examples/expected/params.random.json@state-a.spaghetti-formatted.kore.json @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/params.random.json: unknown object + * File test/jsonrpc-examples/state-a.spaghetti-formatted.kore.json: Kore term diff --git a/test/jsonrpc-examples/expected/params.random.json@state-a.unformatted.execute.request b/test/jsonrpc-examples/expected/params.random.json@state-a.unformatted.execute.request new file mode 100644 index 000000000..c8f5a1a57 --- /dev/null +++ b/test/jsonrpc-examples/expected/params.random.json@state-a.unformatted.execute.request @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/params.random.json: unknown object + * File test/jsonrpc-examples/state-a.unformatted.execute.request: ExecuteM request diff --git a/test/jsonrpc-examples/expected/params.random.json@terminal.execute.response b/test/jsonrpc-examples/expected/params.random.json@terminal.execute.response new file mode 100644 index 000000000..e9edd072c --- /dev/null +++ b/test/jsonrpc-examples/expected/params.random.json@terminal.execute.response @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/params.random.json: unknown object + * File test/jsonrpc-examples/terminal.execute.response: ExecuteM response diff --git a/test/jsonrpc-examples/expected/params.random.json@with-logging.simplify.response b/test/jsonrpc-examples/expected/params.random.json@with-logging.simplify.response new file mode 100644 index 000000000..ada587604 --- /dev/null +++ b/test/jsonrpc-examples/expected/params.random.json@with-logging.simplify.response @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/params.random.json: unknown object + * File test/jsonrpc-examples/with-logging.simplify.response: SimplifyM response diff --git a/test/jsonrpc-examples/expected/state-a.kore.json@depth-limit.execute.response b/test/jsonrpc-examples/expected/state-a.kore.json@depth-limit.execute.response new file mode 100644 index 000000000..cddfc4f78 --- /dev/null +++ b/test/jsonrpc-examples/expected/state-a.kore.json@depth-limit.execute.response @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/state-a.kore.json: Kore term + * File test/jsonrpc-examples/depth-limit.execute.response: ExecuteM response diff --git a/test/jsonrpc-examples/expected/state-a.kore.json@depth-limit.spaghetti-formatted.execute.response b/test/jsonrpc-examples/expected/state-a.kore.json@depth-limit.spaghetti-formatted.execute.response new file mode 100644 index 000000000..76bf0244b --- /dev/null +++ b/test/jsonrpc-examples/expected/state-a.kore.json@depth-limit.spaghetti-formatted.execute.response @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/state-a.kore.json: Kore term + * File test/jsonrpc-examples/depth-limit.spaghetti-formatted.execute.response: ExecuteM response diff --git a/test/jsonrpc-examples/expected/state-a.kore.json@foundry-proof.implies.request b/test/jsonrpc-examples/expected/state-a.kore.json@foundry-proof.implies.request new file mode 100644 index 000000000..48d4ac80d --- /dev/null +++ b/test/jsonrpc-examples/expected/state-a.kore.json@foundry-proof.implies.request @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/state-a.kore.json: Kore term + * File test/jsonrpc-examples/foundry-proof.implies.request: ImpliesM request diff --git a/test/jsonrpc-examples/expected/state-a.kore.json@foundry-proof.simplify.request b/test/jsonrpc-examples/expected/state-a.kore.json@foundry-proof.simplify.request new file mode 100644 index 000000000..7d747df56 --- /dev/null +++ b/test/jsonrpc-examples/expected/state-a.kore.json@foundry-proof.simplify.request @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/state-a.kore.json: Kore term + * File test/jsonrpc-examples/foundry-proof.simplify.request: SimplifyM request diff --git a/test/jsonrpc-examples/expected/state-a.kore.json@foundry-proof2.simplify.request b/test/jsonrpc-examples/expected/state-a.kore.json@foundry-proof2.simplify.request new file mode 100644 index 000000000..fb87e3389 --- /dev/null +++ b/test/jsonrpc-examples/expected/state-a.kore.json@foundry-proof2.simplify.request @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/state-a.kore.json: Kore term + * File test/jsonrpc-examples/foundry-proof2.simplify.request: SimplifyM request diff --git a/test/jsonrpc-examples/expected/state-a.kore.json@not-json.error b/test/jsonrpc-examples/expected/state-a.kore.json@not-json.error new file mode 100644 index 000000000..3aec88381 --- /dev/null +++ b/test/jsonrpc-examples/expected/state-a.kore.json@not-json.error @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/state-a.kore.json: Kore term + * File test/jsonrpc-examples/not-json.error: non-JSON file diff --git a/test/jsonrpc-examples/expected/state-a.kore.json@params.random.json b/test/jsonrpc-examples/expected/state-a.kore.json@params.random.json new file mode 100644 index 000000000..956f16caf --- /dev/null +++ b/test/jsonrpc-examples/expected/state-a.kore.json@params.random.json @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/state-a.kore.json: Kore term + * File test/jsonrpc-examples/params.random.json: unknown object diff --git a/test/jsonrpc-examples/expected/state-a.kore.json@state-a.spaghetti-formatted.kore.json b/test/jsonrpc-examples/expected/state-a.kore.json@state-a.spaghetti-formatted.kore.json new file mode 100644 index 000000000..c5285d57f --- /dev/null +++ b/test/jsonrpc-examples/expected/state-a.kore.json@state-a.spaghetti-formatted.kore.json @@ -0,0 +1 @@ +Files test/jsonrpc-examples/state-a.kore.json and test/jsonrpc-examples/state-a.spaghetti-formatted.kore.json are identical Kore terms \ No newline at end of file diff --git a/test/jsonrpc-examples/expected/state-a.kore.json@state-a.unformatted.execute.request b/test/jsonrpc-examples/expected/state-a.kore.json@state-a.unformatted.execute.request new file mode 100644 index 000000000..ab6ad040a --- /dev/null +++ b/test/jsonrpc-examples/expected/state-a.kore.json@state-a.unformatted.execute.request @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/state-a.kore.json: Kore term + * File test/jsonrpc-examples/state-a.unformatted.execute.request: ExecuteM request diff --git a/test/jsonrpc-examples/expected/state-a.kore.json@terminal.execute.response b/test/jsonrpc-examples/expected/state-a.kore.json@terminal.execute.response new file mode 100644 index 000000000..2d2435595 --- /dev/null +++ b/test/jsonrpc-examples/expected/state-a.kore.json@terminal.execute.response @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/state-a.kore.json: Kore term + * File test/jsonrpc-examples/terminal.execute.response: ExecuteM response diff --git a/test/jsonrpc-examples/expected/state-a.kore.json@with-logging.simplify.response b/test/jsonrpc-examples/expected/state-a.kore.json@with-logging.simplify.response new file mode 100644 index 000000000..59faefa93 --- /dev/null +++ b/test/jsonrpc-examples/expected/state-a.kore.json@with-logging.simplify.response @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/state-a.kore.json: Kore term + * File test/jsonrpc-examples/with-logging.simplify.response: SimplifyM response diff --git a/test/jsonrpc-examples/expected/state-a.spaghetti-formatted.kore.json@depth-limit.execute.response b/test/jsonrpc-examples/expected/state-a.spaghetti-formatted.kore.json@depth-limit.execute.response new file mode 100644 index 000000000..d667a7f32 --- /dev/null +++ b/test/jsonrpc-examples/expected/state-a.spaghetti-formatted.kore.json@depth-limit.execute.response @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/state-a.spaghetti-formatted.kore.json: Kore term + * File test/jsonrpc-examples/depth-limit.execute.response: ExecuteM response diff --git a/test/jsonrpc-examples/expected/state-a.spaghetti-formatted.kore.json@depth-limit.spaghetti-formatted.execute.response b/test/jsonrpc-examples/expected/state-a.spaghetti-formatted.kore.json@depth-limit.spaghetti-formatted.execute.response new file mode 100644 index 000000000..6cfb2a86d --- /dev/null +++ b/test/jsonrpc-examples/expected/state-a.spaghetti-formatted.kore.json@depth-limit.spaghetti-formatted.execute.response @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/state-a.spaghetti-formatted.kore.json: Kore term + * File test/jsonrpc-examples/depth-limit.spaghetti-formatted.execute.response: ExecuteM response diff --git a/test/jsonrpc-examples/expected/state-a.spaghetti-formatted.kore.json@foundry-proof.implies.request b/test/jsonrpc-examples/expected/state-a.spaghetti-formatted.kore.json@foundry-proof.implies.request new file mode 100644 index 000000000..b8555b1bf --- /dev/null +++ b/test/jsonrpc-examples/expected/state-a.spaghetti-formatted.kore.json@foundry-proof.implies.request @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/state-a.spaghetti-formatted.kore.json: Kore term + * File test/jsonrpc-examples/foundry-proof.implies.request: ImpliesM request diff --git a/test/jsonrpc-examples/expected/state-a.spaghetti-formatted.kore.json@foundry-proof.simplify.request b/test/jsonrpc-examples/expected/state-a.spaghetti-formatted.kore.json@foundry-proof.simplify.request new file mode 100644 index 000000000..9c93165e9 --- /dev/null +++ b/test/jsonrpc-examples/expected/state-a.spaghetti-formatted.kore.json@foundry-proof.simplify.request @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/state-a.spaghetti-formatted.kore.json: Kore term + * File test/jsonrpc-examples/foundry-proof.simplify.request: SimplifyM request diff --git a/test/jsonrpc-examples/expected/state-a.spaghetti-formatted.kore.json@foundry-proof2.simplify.request b/test/jsonrpc-examples/expected/state-a.spaghetti-formatted.kore.json@foundry-proof2.simplify.request new file mode 100644 index 000000000..73bc8d977 --- /dev/null +++ b/test/jsonrpc-examples/expected/state-a.spaghetti-formatted.kore.json@foundry-proof2.simplify.request @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/state-a.spaghetti-formatted.kore.json: Kore term + * File test/jsonrpc-examples/foundry-proof2.simplify.request: SimplifyM request diff --git a/test/jsonrpc-examples/expected/state-a.spaghetti-formatted.kore.json@not-json.error b/test/jsonrpc-examples/expected/state-a.spaghetti-formatted.kore.json@not-json.error new file mode 100644 index 000000000..7472f2c7a --- /dev/null +++ b/test/jsonrpc-examples/expected/state-a.spaghetti-formatted.kore.json@not-json.error @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/state-a.spaghetti-formatted.kore.json: Kore term + * File test/jsonrpc-examples/not-json.error: non-JSON file diff --git a/test/jsonrpc-examples/expected/state-a.spaghetti-formatted.kore.json@params.random.json b/test/jsonrpc-examples/expected/state-a.spaghetti-formatted.kore.json@params.random.json new file mode 100644 index 000000000..a3f2fe7b3 --- /dev/null +++ b/test/jsonrpc-examples/expected/state-a.spaghetti-formatted.kore.json@params.random.json @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/state-a.spaghetti-formatted.kore.json: Kore term + * File test/jsonrpc-examples/params.random.json: unknown object diff --git a/test/jsonrpc-examples/expected/state-a.spaghetti-formatted.kore.json@state-a.kore.json b/test/jsonrpc-examples/expected/state-a.spaghetti-formatted.kore.json@state-a.kore.json new file mode 100644 index 000000000..a474d35d5 --- /dev/null +++ b/test/jsonrpc-examples/expected/state-a.spaghetti-formatted.kore.json@state-a.kore.json @@ -0,0 +1 @@ +Files test/jsonrpc-examples/state-a.spaghetti-formatted.kore.json and test/jsonrpc-examples/state-a.kore.json are identical Kore terms \ No newline at end of file diff --git a/test/jsonrpc-examples/expected/state-a.spaghetti-formatted.kore.json@state-a.unformatted.execute.request b/test/jsonrpc-examples/expected/state-a.spaghetti-formatted.kore.json@state-a.unformatted.execute.request new file mode 100644 index 000000000..eb36f02e6 --- /dev/null +++ b/test/jsonrpc-examples/expected/state-a.spaghetti-formatted.kore.json@state-a.unformatted.execute.request @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/state-a.spaghetti-formatted.kore.json: Kore term + * File test/jsonrpc-examples/state-a.unformatted.execute.request: ExecuteM request diff --git a/test/jsonrpc-examples/expected/state-a.spaghetti-formatted.kore.json@terminal.execute.response b/test/jsonrpc-examples/expected/state-a.spaghetti-formatted.kore.json@terminal.execute.response new file mode 100644 index 000000000..acd824f63 --- /dev/null +++ b/test/jsonrpc-examples/expected/state-a.spaghetti-formatted.kore.json@terminal.execute.response @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/state-a.spaghetti-formatted.kore.json: Kore term + * File test/jsonrpc-examples/terminal.execute.response: ExecuteM response diff --git a/test/jsonrpc-examples/expected/state-a.spaghetti-formatted.kore.json@with-logging.simplify.response b/test/jsonrpc-examples/expected/state-a.spaghetti-formatted.kore.json@with-logging.simplify.response new file mode 100644 index 000000000..adaa8eb2c --- /dev/null +++ b/test/jsonrpc-examples/expected/state-a.spaghetti-formatted.kore.json@with-logging.simplify.response @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/state-a.spaghetti-formatted.kore.json: Kore term + * File test/jsonrpc-examples/with-logging.simplify.response: SimplifyM response diff --git a/test/jsonrpc-examples/expected/state-a.unformatted.execute.request@depth-limit.execute.response b/test/jsonrpc-examples/expected/state-a.unformatted.execute.request@depth-limit.execute.response new file mode 100644 index 000000000..aa68c3c85 --- /dev/null +++ b/test/jsonrpc-examples/expected/state-a.unformatted.execute.request@depth-limit.execute.response @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/state-a.unformatted.execute.request: ExecuteM request + * File test/jsonrpc-examples/depth-limit.execute.response: ExecuteM response diff --git a/test/jsonrpc-examples/expected/state-a.unformatted.execute.request@depth-limit.spaghetti-formatted.execute.response b/test/jsonrpc-examples/expected/state-a.unformatted.execute.request@depth-limit.spaghetti-formatted.execute.response new file mode 100644 index 000000000..d57b40786 --- /dev/null +++ b/test/jsonrpc-examples/expected/state-a.unformatted.execute.request@depth-limit.spaghetti-formatted.execute.response @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/state-a.unformatted.execute.request: ExecuteM request + * File test/jsonrpc-examples/depth-limit.spaghetti-formatted.execute.response: ExecuteM response diff --git a/test/jsonrpc-examples/expected/state-a.unformatted.execute.request@foundry-proof.implies.request b/test/jsonrpc-examples/expected/state-a.unformatted.execute.request@foundry-proof.implies.request new file mode 100644 index 000000000..b78f461ca --- /dev/null +++ b/test/jsonrpc-examples/expected/state-a.unformatted.execute.request@foundry-proof.implies.request @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/state-a.unformatted.execute.request: ExecuteM request + * File test/jsonrpc-examples/foundry-proof.implies.request: ImpliesM request diff --git a/test/jsonrpc-examples/expected/state-a.unformatted.execute.request@foundry-proof.simplify.request b/test/jsonrpc-examples/expected/state-a.unformatted.execute.request@foundry-proof.simplify.request new file mode 100644 index 000000000..d1c7167c4 --- /dev/null +++ b/test/jsonrpc-examples/expected/state-a.unformatted.execute.request@foundry-proof.simplify.request @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/state-a.unformatted.execute.request: ExecuteM request + * File test/jsonrpc-examples/foundry-proof.simplify.request: SimplifyM request diff --git a/test/jsonrpc-examples/expected/state-a.unformatted.execute.request@foundry-proof2.simplify.request b/test/jsonrpc-examples/expected/state-a.unformatted.execute.request@foundry-proof2.simplify.request new file mode 100644 index 000000000..77def92f5 --- /dev/null +++ b/test/jsonrpc-examples/expected/state-a.unformatted.execute.request@foundry-proof2.simplify.request @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/state-a.unformatted.execute.request: ExecuteM request + * File test/jsonrpc-examples/foundry-proof2.simplify.request: SimplifyM request diff --git a/test/jsonrpc-examples/expected/state-a.unformatted.execute.request@not-json.error b/test/jsonrpc-examples/expected/state-a.unformatted.execute.request@not-json.error new file mode 100644 index 000000000..404bcd8ac --- /dev/null +++ b/test/jsonrpc-examples/expected/state-a.unformatted.execute.request@not-json.error @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/state-a.unformatted.execute.request: ExecuteM request + * File test/jsonrpc-examples/not-json.error: non-JSON file diff --git a/test/jsonrpc-examples/expected/state-a.unformatted.execute.request@params.random.json b/test/jsonrpc-examples/expected/state-a.unformatted.execute.request@params.random.json new file mode 100644 index 000000000..d91e6f521 --- /dev/null +++ b/test/jsonrpc-examples/expected/state-a.unformatted.execute.request@params.random.json @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/state-a.unformatted.execute.request: ExecuteM request + * File test/jsonrpc-examples/params.random.json: unknown object diff --git a/test/jsonrpc-examples/expected/state-a.unformatted.execute.request@state-a.kore.json b/test/jsonrpc-examples/expected/state-a.unformatted.execute.request@state-a.kore.json new file mode 100644 index 000000000..4b7a96b81 --- /dev/null +++ b/test/jsonrpc-examples/expected/state-a.unformatted.execute.request@state-a.kore.json @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/state-a.unformatted.execute.request: ExecuteM request + * File test/jsonrpc-examples/state-a.kore.json: Kore term diff --git a/test/jsonrpc-examples/expected/state-a.unformatted.execute.request@state-a.spaghetti-formatted.kore.json b/test/jsonrpc-examples/expected/state-a.unformatted.execute.request@state-a.spaghetti-formatted.kore.json new file mode 100644 index 000000000..26f46a829 --- /dev/null +++ b/test/jsonrpc-examples/expected/state-a.unformatted.execute.request@state-a.spaghetti-formatted.kore.json @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/state-a.unformatted.execute.request: ExecuteM request + * File test/jsonrpc-examples/state-a.spaghetti-formatted.kore.json: Kore term diff --git a/test/jsonrpc-examples/expected/state-a.unformatted.execute.request@terminal.execute.response b/test/jsonrpc-examples/expected/state-a.unformatted.execute.request@terminal.execute.response new file mode 100644 index 000000000..cb53cdb96 --- /dev/null +++ b/test/jsonrpc-examples/expected/state-a.unformatted.execute.request@terminal.execute.response @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/state-a.unformatted.execute.request: ExecuteM request + * File test/jsonrpc-examples/terminal.execute.response: ExecuteM response diff --git a/test/jsonrpc-examples/expected/state-a.unformatted.execute.request@with-logging.simplify.response b/test/jsonrpc-examples/expected/state-a.unformatted.execute.request@with-logging.simplify.response new file mode 100644 index 000000000..e1f5a3027 --- /dev/null +++ b/test/jsonrpc-examples/expected/state-a.unformatted.execute.request@with-logging.simplify.response @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/state-a.unformatted.execute.request: ExecuteM request + * File test/jsonrpc-examples/with-logging.simplify.response: SimplifyM response diff --git a/test/jsonrpc-examples/expected/terminal.execute.response@depth-limit.execute.response b/test/jsonrpc-examples/expected/terminal.execute.response@depth-limit.execute.response new file mode 100644 index 000000000..b224755d4 --- /dev/null +++ b/test/jsonrpc-examples/expected/terminal.execute.response@depth-limit.execute.response @@ -0,0 +1,8 @@ +Files test/jsonrpc-examples/terminal.execute.response and test/jsonrpc-examples/depth-limit.execute.response are different ExecuteM responses +2c2 +< "reason": "terminal-rule", +--- +> "reason": "depth-bound", +4d3 +< "rule": "TEST.DE", + diff --git a/test/jsonrpc-examples/expected/terminal.execute.response@depth-limit.spaghetti-formatted.execute.response b/test/jsonrpc-examples/expected/terminal.execute.response@depth-limit.spaghetti-formatted.execute.response new file mode 100644 index 000000000..bf1b303d7 --- /dev/null +++ b/test/jsonrpc-examples/expected/terminal.execute.response@depth-limit.spaghetti-formatted.execute.response @@ -0,0 +1,8 @@ +Files test/jsonrpc-examples/terminal.execute.response and test/jsonrpc-examples/depth-limit.spaghetti-formatted.execute.response are different ExecuteM responses +2c2 +< "reason": "terminal-rule", +--- +> "reason": "depth-bound", +4d3 +< "rule": "TEST.DE", + diff --git a/test/jsonrpc-examples/expected/terminal.execute.response@foundry-proof.implies.request b/test/jsonrpc-examples/expected/terminal.execute.response@foundry-proof.implies.request new file mode 100644 index 000000000..7db47c4b5 --- /dev/null +++ b/test/jsonrpc-examples/expected/terminal.execute.response@foundry-proof.implies.request @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/terminal.execute.response: ExecuteM response + * File test/jsonrpc-examples/foundry-proof.implies.request: ImpliesM request diff --git a/test/jsonrpc-examples/expected/terminal.execute.response@foundry-proof.simplify.request b/test/jsonrpc-examples/expected/terminal.execute.response@foundry-proof.simplify.request new file mode 100644 index 000000000..85ff307b2 --- /dev/null +++ b/test/jsonrpc-examples/expected/terminal.execute.response@foundry-proof.simplify.request @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/terminal.execute.response: ExecuteM response + * File test/jsonrpc-examples/foundry-proof.simplify.request: SimplifyM request diff --git a/test/jsonrpc-examples/expected/terminal.execute.response@foundry-proof2.simplify.request b/test/jsonrpc-examples/expected/terminal.execute.response@foundry-proof2.simplify.request new file mode 100644 index 000000000..ed454f1c2 --- /dev/null +++ b/test/jsonrpc-examples/expected/terminal.execute.response@foundry-proof2.simplify.request @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/terminal.execute.response: ExecuteM response + * File test/jsonrpc-examples/foundry-proof2.simplify.request: SimplifyM request diff --git a/test/jsonrpc-examples/expected/terminal.execute.response@not-json.error b/test/jsonrpc-examples/expected/terminal.execute.response@not-json.error new file mode 100644 index 000000000..83c0be25a --- /dev/null +++ b/test/jsonrpc-examples/expected/terminal.execute.response@not-json.error @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/terminal.execute.response: ExecuteM response + * File test/jsonrpc-examples/not-json.error: non-JSON file diff --git a/test/jsonrpc-examples/expected/terminal.execute.response@params.random.json b/test/jsonrpc-examples/expected/terminal.execute.response@params.random.json new file mode 100644 index 000000000..353578118 --- /dev/null +++ b/test/jsonrpc-examples/expected/terminal.execute.response@params.random.json @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/terminal.execute.response: ExecuteM response + * File test/jsonrpc-examples/params.random.json: unknown object diff --git a/test/jsonrpc-examples/expected/terminal.execute.response@state-a.kore.json b/test/jsonrpc-examples/expected/terminal.execute.response@state-a.kore.json new file mode 100644 index 000000000..935e105f5 --- /dev/null +++ b/test/jsonrpc-examples/expected/terminal.execute.response@state-a.kore.json @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/terminal.execute.response: ExecuteM response + * File test/jsonrpc-examples/state-a.kore.json: Kore term diff --git a/test/jsonrpc-examples/expected/terminal.execute.response@state-a.spaghetti-formatted.kore.json b/test/jsonrpc-examples/expected/terminal.execute.response@state-a.spaghetti-formatted.kore.json new file mode 100644 index 000000000..d64fa0f5b --- /dev/null +++ b/test/jsonrpc-examples/expected/terminal.execute.response@state-a.spaghetti-formatted.kore.json @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/terminal.execute.response: ExecuteM response + * File test/jsonrpc-examples/state-a.spaghetti-formatted.kore.json: Kore term diff --git a/test/jsonrpc-examples/expected/terminal.execute.response@state-a.unformatted.execute.request b/test/jsonrpc-examples/expected/terminal.execute.response@state-a.unformatted.execute.request new file mode 100644 index 000000000..b33988e6f --- /dev/null +++ b/test/jsonrpc-examples/expected/terminal.execute.response@state-a.unformatted.execute.request @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/terminal.execute.response: ExecuteM response + * File test/jsonrpc-examples/state-a.unformatted.execute.request: ExecuteM request diff --git a/test/jsonrpc-examples/expected/terminal.execute.response@with-logging.simplify.response b/test/jsonrpc-examples/expected/terminal.execute.response@with-logging.simplify.response new file mode 100644 index 000000000..2d0547f9c --- /dev/null +++ b/test/jsonrpc-examples/expected/terminal.execute.response@with-logging.simplify.response @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/terminal.execute.response: ExecuteM response + * File test/jsonrpc-examples/with-logging.simplify.response: SimplifyM response diff --git a/test/jsonrpc-examples/expected/with-logging.simplify.response@depth-limit.execute.response b/test/jsonrpc-examples/expected/with-logging.simplify.response@depth-limit.execute.response new file mode 100644 index 000000000..22db7d53f --- /dev/null +++ b/test/jsonrpc-examples/expected/with-logging.simplify.response@depth-limit.execute.response @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/with-logging.simplify.response: SimplifyM response + * File test/jsonrpc-examples/depth-limit.execute.response: ExecuteM response diff --git a/test/jsonrpc-examples/expected/with-logging.simplify.response@depth-limit.spaghetti-formatted.execute.response b/test/jsonrpc-examples/expected/with-logging.simplify.response@depth-limit.spaghetti-formatted.execute.response new file mode 100644 index 000000000..d99941815 --- /dev/null +++ b/test/jsonrpc-examples/expected/with-logging.simplify.response@depth-limit.spaghetti-formatted.execute.response @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/with-logging.simplify.response: SimplifyM response + * File test/jsonrpc-examples/depth-limit.spaghetti-formatted.execute.response: ExecuteM response diff --git a/test/jsonrpc-examples/expected/with-logging.simplify.response@foundry-proof.implies.request b/test/jsonrpc-examples/expected/with-logging.simplify.response@foundry-proof.implies.request new file mode 100644 index 000000000..605366341 --- /dev/null +++ b/test/jsonrpc-examples/expected/with-logging.simplify.response@foundry-proof.implies.request @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/with-logging.simplify.response: SimplifyM response + * File test/jsonrpc-examples/foundry-proof.implies.request: ImpliesM request diff --git a/test/jsonrpc-examples/expected/with-logging.simplify.response@foundry-proof.simplify.request b/test/jsonrpc-examples/expected/with-logging.simplify.response@foundry-proof.simplify.request new file mode 100644 index 000000000..d8dde131f --- /dev/null +++ b/test/jsonrpc-examples/expected/with-logging.simplify.response@foundry-proof.simplify.request @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/with-logging.simplify.response: SimplifyM response + * File test/jsonrpc-examples/foundry-proof.simplify.request: SimplifyM request diff --git a/test/jsonrpc-examples/expected/with-logging.simplify.response@foundry-proof2.simplify.request b/test/jsonrpc-examples/expected/with-logging.simplify.response@foundry-proof2.simplify.request new file mode 100644 index 000000000..850d27fd5 --- /dev/null +++ b/test/jsonrpc-examples/expected/with-logging.simplify.response@foundry-proof2.simplify.request @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/with-logging.simplify.response: SimplifyM response + * File test/jsonrpc-examples/foundry-proof2.simplify.request: SimplifyM request diff --git a/test/jsonrpc-examples/expected/with-logging.simplify.response@not-json.error b/test/jsonrpc-examples/expected/with-logging.simplify.response@not-json.error new file mode 100644 index 000000000..4d3d7e67a --- /dev/null +++ b/test/jsonrpc-examples/expected/with-logging.simplify.response@not-json.error @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/with-logging.simplify.response: SimplifyM response + * File test/jsonrpc-examples/not-json.error: non-JSON file diff --git a/test/jsonrpc-examples/expected/with-logging.simplify.response@params.random.json b/test/jsonrpc-examples/expected/with-logging.simplify.response@params.random.json new file mode 100644 index 000000000..cdfb9686e --- /dev/null +++ b/test/jsonrpc-examples/expected/with-logging.simplify.response@params.random.json @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/with-logging.simplify.response: SimplifyM response + * File test/jsonrpc-examples/params.random.json: unknown object diff --git a/test/jsonrpc-examples/expected/with-logging.simplify.response@state-a.kore.json b/test/jsonrpc-examples/expected/with-logging.simplify.response@state-a.kore.json new file mode 100644 index 000000000..5706a2d11 --- /dev/null +++ b/test/jsonrpc-examples/expected/with-logging.simplify.response@state-a.kore.json @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/with-logging.simplify.response: SimplifyM response + * File test/jsonrpc-examples/state-a.kore.json: Kore term diff --git a/test/jsonrpc-examples/expected/with-logging.simplify.response@state-a.spaghetti-formatted.kore.json b/test/jsonrpc-examples/expected/with-logging.simplify.response@state-a.spaghetti-formatted.kore.json new file mode 100644 index 000000000..1032c8bd5 --- /dev/null +++ b/test/jsonrpc-examples/expected/with-logging.simplify.response@state-a.spaghetti-formatted.kore.json @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/with-logging.simplify.response: SimplifyM response + * File test/jsonrpc-examples/state-a.spaghetti-formatted.kore.json: Kore term diff --git a/test/jsonrpc-examples/expected/with-logging.simplify.response@state-a.unformatted.execute.request b/test/jsonrpc-examples/expected/with-logging.simplify.response@state-a.unformatted.execute.request new file mode 100644 index 000000000..e48534b8b --- /dev/null +++ b/test/jsonrpc-examples/expected/with-logging.simplify.response@state-a.unformatted.execute.request @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/with-logging.simplify.response: SimplifyM response + * File test/jsonrpc-examples/state-a.unformatted.execute.request: ExecuteM request diff --git a/test/jsonrpc-examples/expected/with-logging.simplify.response@terminal.execute.response b/test/jsonrpc-examples/expected/with-logging.simplify.response@terminal.execute.response new file mode 100644 index 000000000..a098da385 --- /dev/null +++ b/test/jsonrpc-examples/expected/with-logging.simplify.response@terminal.execute.response @@ -0,0 +1,3 @@ +Json data in files is of different type + * File test/jsonrpc-examples/with-logging.simplify.response: SimplifyM response + * File test/jsonrpc-examples/terminal.execute.response: ExecuteM response diff --git a/test/jsonrpc-examples/foundry-proof.implies.request b/test/jsonrpc-examples/foundry-proof.implies.request new file mode 100644 index 000000000..335299aa4 --- /dev/null +++ b/test/jsonrpc-examples/foundry-proof.implies.request @@ -0,0 +1 @@ +{"jsonrpc": "2.0", "id": 6, "method": "implies", "params": {"antecedent": {"format": "KORE", "version": 1, "term": {"tag": "And", "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "first": {"tag": "App", "name": "Lbl'-LT-'generatedTop'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'-LT-'foundry'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'-LT-'kevm'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'-LT-'k'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "kseq", "sorts": [], "args": [{"tag": "App", "name": "Lbl'Hash'execute'Unds'EVM'Unds'KItem", "sorts": [], "args": []}, {"tag": "EVar", "name": "VarCONTINUATION", "sort": {"tag": "SortApp", "name": "SortK", "args": []}}]}]}, {"tag": "App", "name": "Lbl'-LT-'exit-code'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarEXITCODE'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'mode'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "LblNORMAL", "sorts": [], "args": []}]}, {"tag": "App", "name": "Lbl'-LT-'schedule'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "LblLONDON'Unds'EVM", "sorts": [], "args": []}]}, {"tag": "App", "name": "Lbl'-LT-'ethereum'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'-LT-'evm'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'-LT-'output'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarOUTPUT'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortBytes", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'statusCode'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarSTATUSCODE", "sort": {"tag": "SortApp", "name": "SortStatusCode", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'callStack'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'Stop'List", "sorts": [], "args": []}]}, {"tag": "App", "name": "Lbl'-LT-'interimStates'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'Stop'List", "sorts": [], "args": []}]}, {"tag": "App", "name": "Lbl'-LT-'touchedAccounts'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarTOUCHEDACCOUNTS'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortSet", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'callState'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'-LT-'program'-GT-'", "sorts": [], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortBytes", "args": []}, "value": "`\u0080`@R4\u0080\u0015a\u0000\u0010W`\u0000\u0080\u00fd[P`\u00046\u0010a\u0001\u0000W`\u00005`\u00e0\u001c\u0080c\u009a\u0013\u00b4`\u0011a\u0000\u0097W\u0080c\u00ea\u00ef=\u0014\u0011a\u0000fW\u0080c\u00ea\u00ef=\u0014\u0014a\u0001\u00c2W\u0080c\u00ec\u0084m\u00a6\u0014a\u0001\u00d5W\u0080c\u00f8\u00cc\u00bfG\u0014a\u0001\u00ddW\u0080c\u00fav&\u00d4\u0014a\u0001\u00f0W`\u0000\u0080\u00fd[\u0080c\u009a\u0013\u00b4`\u0014a\u0001\u0087W\u0080c\u00b1\u00ecy\u0081\u0014a\u0001\u009aW\u0080c\u00baAO\u00a6\u0014a\u0001\u00a2W\u0080c\u00d3P o\u0014a\u0001\u00baW`\u0000\u0080\u00fd[\u0080cN\u0018\u00fd\u000b\u0011a\u0000\u00d3W\u0080cN\u0018\u00fd\u000b\u0014a\u0001QW\u0080c_Ev\u001c\u0014a\u0001dW\u0080c}\u00bb\u000f\u00bf\u0014a\u0001lW\u0080c\u008e\u00af\u00adc\u0014a\u0001\u007fW`\u0000\u0080\u00fd[\u0080c\u001f\u0098\u0094\u00c2\u0014a\u0001\u0005W\u0080c0!\u0088|\u0014a\u0001\u000fW\u0080c:v\u0084c\u0014a\u0001\u0017W\u0080c?\u00a6\u00f8P\u0014a\u0001IW[`\u0000\u0080\u00fd[a\u0001\ra\u0001\u00fdV[\u0000[a\u0001\ra\u0002\u007fV[a\u0001,`\u0000\u0080Q` a\u00140\u00839\u0081Q\u0091R\u0081V[`@Q`\u0001`\u0001`\u00a0\u001b\u0003\u0090\u0091\u0016\u0081R` \u0001[`@Q\u0080\u0091\u0003\u0090\u00f3[a\u0001\ra\u0003JV[a\u0001\ra\u0001_6`\u0004a\u0010\u00e8V[a\u0003\u00d5V[a\u0001\ra\u0005\u00bbV[a\u0001\ra\u0001z6`\u0004a\u0011\fV[a\u0006\u00afV[a\u0001\ra\u0007}V[a\u0001\ra\u0001\u00956`\u0004a\u0011~V[a\b\u0006V[a\u0001\ra\b\u0083V[a\u0001\u00aaa\t\u001eV[`@Q\u0090\u0015\u0015\u0081R` \u0001a\u0001@V[a\u0001\ra\n=V[a\u0001\ra\u0001\u00d06`\u0004a\u0011\u0097V[a\nrV[a\u0001\ra\f\u00d7V[`\u0000Ta\u0001\u00aa\u0090b\u0001\u0000\u0000\u0090\u0004`\u00ff\u0016\u0081V[`\u0000Ta\u0001\u00aa\u0090`\u00ff\u0016\u0081V[`@Qc\u00c8\u008a^m`\u00e0\u001b\u0081Ra\u0001\u00f9`\u0004\u0082\u0001Ra\u0001\u0000`$\u0082\u0001R`\u0000\u0080Q` a\u00140\u00839\u0081Q\u0091R\u0090c\u00c8\u008a^m\u0090`D\u0001`\u0000`@Q\u0080\u0083\u0003\u0081`\u0000\u0087\u0080;\u0015\u0080\u0015a\u0002MW`\u0000\u0080\u00fd[PZ\u00f1\u0015\u0080\u0015a\u0002aW=`\u0000\u0080>=`\u0000\u00fd[PPPPa\u0002}a\u0001\u00f9`\u0001`\u0001`\u00a0\u001b\u0003\u00161a\u0001\u0000a\reV[V[`@\u0080Q\u0080\u0082\u0001\u0082R`\u001b\u0081R\u007fthis should be EVM bytecode\u0000\u0000\u0000\u0000\u0000` \u0082\u0001R\u0090QcZkc\u00c1`\u00e1\u001b\u0081R`\u0000\u0080Q` a\u00140\u00839\u0081Q\u0091R\u0090c\u00b4\u00d6\u00c7\u0082\u0090a\u0002\u00e5\u0090`|\u0090\u0085\u0090`\u0004\u0001a\u0012\u001cV[`\u0000`@Q\u0080\u0083\u0003\u0081`\u0000\u0087\u0080;\u0015\u0080\u0015a\u0002\u00ffW`\u0000\u0080\u00fd[PZ\u00f1\u0015\u0080\u0015a\u0003\u0013W=`\u0000\u0080>=`\u0000\u00fd[PPPPa\u0003G`|`\u0001`\u0001`\u00a0\u001b\u0003\u0016\u0080;\u0080` \u0001`@Q\u0090\u0081\u0001`@R\u0081\u0081R`\u0000\u0090\u0080` \u0001\u0090\u0093<\u0082a\u000eTV[PV[`@Qc-\u00035\u00ab`\u00e0\u001b\u0081R`\u0000`\u0004\u0082\u0001\u0081\u0090R\u0090`\u0000\u0080Q` a\u00140\u00839\u0081Q\u0091R\u0090c-\u00035\u00ab\u0090`$\u0001[` `@Q\u0080\u0083\u0003\u0081`\u0000\u0087Z\u00f1\u0015\u0080\u0015a\u0003\u009aW=`\u0000\u0080>=`\u0000\u00fd[PPPP`@Q=`\u001f\u0019`\u001f\u0082\u0001\u0016\u0082\u0001\u0080`@RP\u0081\u0001\u0090a\u0003\u00be\u0091\u0090a\u0012HV[\u0090Pa\u0003G\u0081g\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff\u0016`\na\reV[`@Qc-\u00035\u00ab`\u00e0\u001b\u0081R0`\u0004\u0082\u0001R`\u0000\u0090`\u0000\u0080Q` a\u00140\u00839\u0081Q\u0091R\u0090c-\u00035\u00ab\u0090`$\u0001` `@Q\u0080\u0083\u0003\u0081`\u0000\u0087Z\u00f1\u0015\u0080\u0015a\u0004#W=`\u0000\u0080>=`\u0000\u00fd[PPPP`@Q=`\u001f\u0019`\u001f\u0082\u0001\u0016\u0082\u0001\u0080`@RP\u0081\u0001\u0090a\u0004G\u0091\u0090a\u0012HV[`@Qc&1\u00f2\u00b1`\u00e1\u001b\u0081Rg\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff\u0080\u0083\u0016\u0090\u0085\u0016\u0011`\u0004\u0082\u0001R\u0090\u0091P`\u0000\u0080Q` a\u00140\u00839\u0081Q\u0091R\u0090cLc\u00e5b\u0090`$\u0001`\u0000`@Q\u0080\u0083\u0003\u0081`\u0000\u0087\u0080;\u0015\u0080\u0015a\u0004\u009fW`\u0000\u0080\u00fd[PZ\u00f1\u0015\u0080\u0015a\u0004\u00b3W=`\u0000\u0080>=`\u0000\u00fd[PP`@Qc\u00f8\u00e1\u008bW`\u00e0\u001b\u0081R0`\u0004\u0082\u0001Rg\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff\u0085\u0016`$\u0082\u0001R`\u0000\u0080Q` a\u00140\u00839\u0081Q\u0091R\u0092Pc\u00f8\u00e1\u008bW\u0091P`D\u0001`\u0000`@Q\u0080\u0083\u0003\u0081`\u0000\u0087\u0080;\u0015\u0080\u0015a\u0005\rW`\u0000\u0080\u00fd[PZ\u00f1\u0015\u0080\u0015a\u0005!W=`\u0000\u0080>=`\u0000\u00fd[PP`@Qc-\u00035\u00ab`\u00e0\u001b\u0081R0`\u0004\u0082\u0001Rg\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff\u0085\u0016\u0092P`\u0000\u0080Q` a\u00140\u00839\u0081Q\u0091R\u0091Pc-\u00035\u00ab\u0090`$\u0001` `@Q\u0080\u0083\u0003\u0081`\u0000\u0087Z\u00f1\u0015\u0080\u0015a\u0005|W=`\u0000\u0080>=`\u0000\u00fd[PPPP`@Q=`\u001f\u0019`\u001f\u0082\u0001\u0016\u0082\u0001\u0080`@RP\u0081\u0001\u0090a\u0005\u00a0\u0091\u0090a\u0012HV[g\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff\u0016\u0014a\u0005\u00b7Wa\u0005\u00b7a\u0012eV[PPV[`@Qc\u00f8\u00e1\u008bW`\u00e0\u001b\u0081R0`\u0004\u0082\u0001R`d`$\u0082\u0001R`\u0000\u0080Q` a\u00140\u00839\u0081Q\u0091R\u0090c\u00f8\u00e1\u008bW\u0090`D\u0001`\u0000`@Q\u0080\u0083\u0003\u0081`\u0000\u0087\u0080;\u0015\u0080\u0015a\u0006\bW`\u0000\u0080\u00fd[PZ\u00f1\u0015\u0080\u0015a\u0006\u001cW=`\u0000\u0080>=`\u0000\u00fd[PP`@Qc-\u00035\u00ab`\u00e0\u001b\u0081R0`\u0004\u0082\u0001R`\u0000\u0092P`\u0000\u0080Q` a\u00140\u00839\u0081Q\u0091R\u0091Pc-\u00035\u00ab\u0090`$\u0001[` `@Q\u0080\u0083\u0003\u0081`\u0000\u0087Z\u00f1\u0015\u0080\u0015a\u0006oW=`\u0000\u0080>=`\u0000\u00fd[PPPP`@Q=`\u001f\u0019`\u001f\u0082\u0001\u0016\u0082\u0001\u0080`@RP\u0081\u0001\u0090a\u0006\u0093\u0091\u0090a\u0012HV[\u0090P\u0080g\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff\u0016`d\u0014a\u0003GWa\u0003Ga\u0012eV[`@QcZkc\u00c1`\u00e1\u001b\u0081R`\u0000\u0080Q` a\u00140\u00839\u0081Q\u0091R\u0090c\u00b4\u00d6\u00c7\u0082\u0090a\u0006\u00e5\u0090`|\u0090\u0086\u0090\u0086\u0090`\u0004\u0001a\u0012{V[`\u0000`@Q\u0080\u0083\u0003\u0081`\u0000\u0087\u0080;\u0015\u0080\u0015a\u0006\u00ffW`\u0000\u0080\u00fd[PZ\u00f1\u0015\u0080\u0015a\u0007\u0013W=`\u0000\u0080>=`\u0000\u00fd[PPPPa\u0005\u00b7`|`\u0001`\u0001`\u00a0\u001b\u0003\u0016\u0080;\u0080` \u0001`@Q\u0090\u0081\u0001`@R\u0081\u0081R`\u0000\u0090\u0080` \u0001\u0090\u0093<\u0083\u0083\u0080\u0080`\u001f\u0001` \u0080\u0091\u0004\u0002` \u0001`@Q\u0090\u0081\u0001`@R\u0080\u0093\u0092\u0091\u0090\u0081\u0081R` \u0001\u0083\u0083\u0080\u0082\u00847`\u0000\u0092\u0001\u0091\u0090\u0091RPa\u000eT\u0092PPPV[`@Qc-\u00035\u00ab`\u00e0\u001b\u0081R0`\u0004\u0082\u0001R`\u0000\u0090`\u0000\u0080Q` a\u00140\u00839\u0081Q\u0091R\u0090c-\u00035\u00ab\u0090`$\u0001` `@Q\u0080\u0083\u0003\u0081`\u0000\u0087Z\u00f1\u0015\u0080\u0015a\u0007\u00cbW=`\u0000\u0080>=`\u0000\u00fd[PPPP`@Q=`\u001f\u0019`\u001f\u0082\u0001\u0016\u0082\u0001\u0080`@RP\u0081\u0001\u0090a\u0007\u00ef\u0091\u0090a\u0012HV[\u0090Pa\u0003G\u0081g\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff\u0016`\u0001a\reV[`@Qc\u00c8\u008a^m`\u00e0\u001b\u0081Ra\u0001H`\u0004\u0082\u0001R`$\u0081\u0001\u0082\u0090R`\u0000\u0080Q` a\u00140\u00839\u0081Q\u0091R\u0090c\u00c8\u008a^m\u0090`D\u0001`\u0000`@Q\u0080\u0083\u0003\u0081`\u0000\u0087\u0080;\u0015\u0080\u0015a\bUW`\u0000\u0080\u00fd[PZ\u00f1\u0015\u0080\u0015a\biW=`\u0000\u0080>=`\u0000\u00fd[PPPPa\u0003Ga\u0001H`\u0001`\u0001`\u00a0\u001b\u0003\u00161\u0082a\reV[`@Qc\u00f8\u00e1\u008bW`\u00e0\u001b\u0081R`d`\u0004\u0082\u0001\u0081\u0090R`$\u0082\u0001R`\u0000\u0080Q` a\u00140\u00839\u0081Q\u0091R\u0090c\u00f8\u00e1\u008bW\u0090`D\u0001`\u0000`@Q\u0080\u0083\u0003\u0081`\u0000\u0087\u0080;\u0015\u0080\u0015a\b\u00d1W`\u0000\u0080\u00fd[PZ\u00f1\u0015\u0080\u0015a\b\u00e5W=`\u0000\u0080>=`\u0000\u00fd[PP`@Qc-\u00035\u00ab`\u00e0\u001b\u0081R`d`\u0004\u0082\u0001R`\u0000\u0092P`\u0000\u0080Q` a\u00140\u00839\u0081Q\u0091R\u0091Pc-\u00035\u00ab\u0090`$\u0001a\u0006PV[`\u0000\u0080Ta\u0001\u0000\u0090\u0004`\u00ff\u0016\u0015a\t>WP`\u0000Ta\u0001\u0000\u0090\u0004`\u00ff\u0016\u0090V[`\u0000`\u0000\u0080Q` a\u00140\u00839\u0081Q\u0091R;\u0015a\n8W`@\u0080Q`\u0000\u0080Q` a\u00140\u00839\u0081Q\u0091R` \u0082\u0001\u0081\u0090Re\u0019\u0098Z[\u0019Y`\u00d2\u001b\u0082\u0084\u0001R\u0082Q\u0080\u0083\u0003\u0084\u0001\u0081R``\u0083\u0001\u0090\u0093R`\u0000\u0092\u0090\u0091a\t\u00c0\u0091\u007ff\u007f\u009dp\u00caA\u001dp\u00ea\u00d5\r\u008d\\\"\u0007\r\u00af\u00c3j\u00d7_=\u00cf^r7\u00b2*\u00de\u009a\u00ec\u00c4\u0091`\u0080\u0001a\u0012\u00bbV[`@\u0080Q`\u001f\u0019\u0081\u0084\u0003\u0001\u0081R\u0090\u0082\u0090Ra\t\u00da\u0091a\u0012\u00ecV[`\u0000`@Q\u0080\u0083\u0003\u0081`\u0000\u0086Z\u00f1\u0091PP=\u0080`\u0000\u0081\u0014a\n\u0017W`@Q\u0091P`\u001f\u0019`?=\u0001\u0016\u0082\u0001`@R=\u0082R=`\u0000` \u0084\u0001>a\n\u001cV[``\u0091P[P\u0091PP\u0080\u0080` \u0001\u0090Q\u0081\u0001\u0090a\n4\u0091\u0090a\u0013\bV[\u0091PP[\u0091\u0090PV[`@Qc-\u00035\u00ab`\u00e0\u001b\u0081R`d`\u0004\u0082\u0001R`\u0000\u0090`\u0000\u0080Q` a\u00140\u00839\u0081Q\u0091R\u0090c-\u00035\u00ab\u0090`$\u0001a\u0003{V[`@Qc&1\u00f2\u00b1`\u00e1\u001b\u0081R`\u0000\u0080Q` a\u00140\u00839\u0081Q\u0091R`\u0001`\u0001`\u00a0\u001b\u0003\u0083\u0016\u0081\u0014\u0015`\u0004\u0083\u0001R\u0090cLc\u00e5b\u0090`$\u0001`\u0000`@Q\u0080\u0083\u0003\u0081`\u0000\u0087\u0080;\u0015\u0080\u0015a\n\u00c4W`\u0000\u0080\u00fd[PZ\u00f1\u0015\u0080\u0015a\n\u00d8W=`\u0000\u0080>=`\u0000\u00fd[PP`@Qc&1\u00f2\u00b1`\u00e1\u001b\u0081R0`\u0001`\u0001`\u00a0\u001b\u0003\u0085\u0016\u0014\u0015`\u0004\u0082\u0001R`\u0000\u0080Q` a\u00140\u00839\u0081Q\u0091R\u0092PcLc\u00e5b\u0091P`$\u0001`\u0000`@Q\u0080\u0083\u0003\u0081`\u0000\u0087\u0080;\u0015\u0080\u0015a\u000b.W`\u0000\u0080\u00fd[PZ\u00f1\u0015\u0080\u0015a\u000bBW=`\u0000\u0080>=`\u0000\u00fd[PP`@Qc&1\u00f2\u00b1`\u00e1\u001b\u0081Rs?\u00ab\u0018F\"\u00dc\u0019\u00b6\u0010\u0093I\u00b9H\u0011I;\u00f2\u00a4Sb`\u0001`\u0001`\u00a0\u001b\u0003\u0085\u0016\u0014\u0015`\u0004\u0082\u0001R`\u0000\u0080Q` a\u00140\u00839\u0081Q\u0091R\u0092PcLc\u00e5b\u0091P`$\u0001`\u0000`@Q\u0080\u0083\u0003\u0081`\u0000\u0087\u0080;\u0015\u0080\u0015a\u000b\u00acW`\u0000\u0080\u00fd[PZ\u00f1\u0015\u0080\u0015a\u000b\u00c0W=`\u0000\u0080>=`\u0000\u00fd[PP`@Qc&1\u00f2\u00b1`\u00e1\u001b\u0081RsNY\u00b4HG\u00b3yW\u0085\u0088\u0092\f\u00a7\u008f\u00bf&\u00c0\u00b4\u0095l`\u0001`\u0001`\u00a0\u001b\u0003\u0085\u0016\u0014\u0015`\u0004\u0082\u0001R`\u0000\u0080Q` a\u00140\u00839\u0081Q\u0091R\u0092PcLc\u00e5b\u0091P`$\u0001`\u0000`@Q\u0080\u0083\u0003\u0081`\u0000\u0087\u0080;\u0015\u0080\u0015a\f*W`\u0000\u0080\u00fd[PZ\u00f1\u0015\u0080\u0015a\f>W=`\u0000\u0080>=`\u0000\u00fd[PP`@Qc-\u00035\u00ab`\u00e0\u001b\u0081R`\u0001`\u0001`\u00a0\u001b\u0003\u0084\u0016`\u0004\u0082\u0001R`\u0000\u0092P`\u0000\u0080Q` a\u00140\u00839\u0081Q\u0091R\u0091Pc-\u00035\u00ab\u0090`$\u0001` `@Q\u0080\u0083\u0003\u0081`\u0000\u0087Z\u00f1\u0015\u0080\u0015a\f\u0099W=`\u0000\u0080>=`\u0000\u00fd[PPPP`@Q=`\u001f\u0019`\u001f\u0082\u0001\u0016\u0082\u0001\u0080`@RP\u0081\u0001\u0090a\f\u00bd\u0091\u0090a\u0012HV[\u0090Pg\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff\u0081\u0016\u0015a\u0005\u00b7Wa\u0005\u00b7a\u0012eV[`@Qc-\u00035\u00ab`\u00e0\u001b\u0081R0`\u0004\u0082\u0001R`\u0000\u0090`\u0000\u0080Q` a\u00140\u00839\u0081Q\u0091R\u0090c-\u00035\u00ab\u0090`$\u0001` `@Q\u0080\u0083\u0003\u0081`\u0000\u0087Z\u00f1\u0015\u0080\u0015a\r%W=`\u0000\u0080>=`\u0000\u00fd[PPPP`@Q=`\u001f\u0019`\u001f\u0082\u0001\u0016\u0082\u0001\u0080`@RP\u0081\u0001\u0090a\rI\u0091\u0090a\u0012HV[\u0090P\u0080g\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff\u0016`\u0001\u0014a\u0003GWa\u0003Ga\u0012eV[\u0080\u0082\u0014a\u0005\u00b7W\u007fA0O\u00ac\u00d92=u\u00b1\u001b\u00cd\u00d6\t\u00cb8\u00ef\u00ff\u00fd\u00b0W\u0010\u00f7\u00ca\u00f0\u00e9\u00b1lm\u009dp\u009fP`@Qa\r\u00d6\u0090` \u0080\u0082R`\"\u0090\u0082\u0001R\u007fError: a == b not satisfied [uin`@\u0082\u0001Rat]`\u00f0\u001b``\u0082\u0001R`\u0080\u0001\u0090V[`@Q\u0080\u0091\u0003\u0090\u00a1\u007f\u00b2\u00de/\u00be\u0080\u001a\r\u00f6\u00c0\u00cb\u00dd\u00fdD\u008b\u00a3\u00c4\u001dH\u00a0@\u00ca5\u00c5l\u0081\u0096\u00ef\u000f\u00ca\u00e7!\u00a8\u0081`@Qa\u000e\r\u0091\u0090a\u0013*V[`@Q\u0080\u0091\u0003\u0090\u00a1\u007f\u00b2\u00de/\u00be\u0080\u001a\r\u00f6\u00c0\u00cb\u00dd\u00fdD\u008b\u00a3\u00c4\u001dH\u00a0@\u00ca5\u00c5l\u0081\u0096\u00ef\u000f\u00ca\u00e7!\u00a8\u0082`@Qa\u000eD\u0091\u0090a\u0013bV[`@Q\u0080\u0091\u0003\u0090\u00a1a\u0005\u00b7a\u000e^V[a\u0005\u00b7\u0082\u0082a\u000f^V[`\u0000\u0080Q` a\u00140\u00839\u0081Q\u0091R;\u0015a\u000fMW`@\u0080Q`\u0000\u0080Q` a\u00140\u00839\u0081Q\u0091R` \u0082\u0001\u0081\u0090Re\u0019\u0098Z[\u0019Y`\u00d2\u001b\u0092\u0082\u0001\u0092\u0090\u0092R`\u0001``\u0082\u0001R`\u0000\u0091\u0090\u007fp\u00ca\u0010\u00bb\u00d0\u00db\u00fd\u0090 \u00a9\u00f4\u00b14\u0002\u00c1l\u00b1 p^\r\u001c\n\u00ea\u00b1\u000f\u00a3S\u00aeXo\u00c4\u0090`\u0080\u0001`@\u0080Q`\u001f\u0019\u0081\u0084\u0003\u0001\u0081R\u0090\u0082\u0090Ra\u000e\u00ec\u0092\u0091` \u0001a\u0012\u00bbV[`@\u0080Q`\u001f\u0019\u0081\u0084\u0003\u0001\u0081R\u0090\u0082\u0090Ra\u000f\u0006\u0091a\u0012\u00ecV[`\u0000`@Q\u0080\u0083\u0003\u0081`\u0000\u0086Z\u00f1\u0091PP=\u0080`\u0000\u0081\u0014a\u000fCW`@Q\u0091P`\u001f\u0019`?=\u0001\u0016\u0082\u0001`@R=\u0082R=`\u0000` \u0084\u0001>a\u000fHV[``\u0091P[PPPP[`\u0000\u0080Ta\u00ff\u0000\u0019\u0016a\u0001\u0000\u0017\u0090UV[a\u000fh\u0082\u0082a\u0010EV[a\u0005\u00b7W\u007fA0O\u00ac\u00d92=u\u00b1\u001b\u00cd\u00d6\t\u00cb8\u00ef\u00ff\u00fd\u00b0W\u0010\u00f7\u00ca\u00f0\u00e9\u00b1lm\u009dp\u009fP`@Qa\u000f\u00d7\u0090` \u0080\u0082R`#\u0090\u0082\u0001R\u007fError: a == b not satisfied [byt`@\u0082\u0001Rbes]`\u00e8\u001b``\u0082\u0001R`\u0080\u0001\u0090V[`@Q\u0080\u0091\u0003\u0090\u00a1\u007f\u00d2n\u0016\u00ca\u00d4T\u0087\u0005\u00e4\u00c9\u00e2\u00d9O\u0098\u00ee\u0091\u00c2\u0089\b^\u00e4%YO\u00d5c_\u00a2\u0096L\u00cf\u0018\u0081`@Qa\u0010\u000e\u0091\u0090a\u0013\u008cV[`@Q\u0080\u0091\u0003\u0090\u00a1\u007f\u00d2n\u0016\u00ca\u00d4T\u0087\u0005\u00e4\u00c9\u00e2\u00d9O\u0098\u00ee\u0091\u00c2\u0089\b^\u00e4%YO\u00d5c_\u00a2\u0096L\u00cf\u0018\u0082`@Qa\u000eD\u0091\u0090a\u0013\u00c8V[\u0080Q\u0082Q`\u0001\u0091\u0090\u0003a\u0010\u00c8W`\u0000[\u0083Q\u0081\u0010\u0015a\u0010\u00c2W\u0082\u0081\u0081Q\u0081\u0010a\u0010pWa\u0010pa\u0013\u00f2V[` \u0001\u0001Q`\u00f8\u001c`\u00f8\u001b`\u0001`\u0001`\u00f8\u001b\u0003\u0019\u0016\u0084\u0082\u0081Q\u0081\u0010a\u0010\u0097Wa\u0010\u0097a\u0013\u00f2V[\u0001` \u0001Q`\u0001`\u0001`\u00f8\u001b\u0003\u0019\u0016\u0014a\u0010\u00b0W`\u0000\u0091P[\u0080a\u0010\u00ba\u0081a\u0014\bV[\u0091PPa\u0010UV[Pa\u0010\u00ccV[P`\u0000[\u0092\u0091PPV[g\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff\u0081\u0016\u0081\u0014a\u0003GW`\u0000\u0080\u00fd[`\u0000` \u0082\u0084\u0003\u0012\u0015a\u0010\u00faW`\u0000\u0080\u00fd[\u00815a\u0011\u0005\u0081a\u0010\u00d2V[\u0093\u0092PPPV[`\u0000\u0080` \u0083\u0085\u0003\u0012\u0015a\u0011\u001fW`\u0000\u0080\u00fd[\u00825g\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff\u0080\u0082\u0011\u0015a\u00117W`\u0000\u0080\u00fd[\u0081\u0085\u0001\u0091P\u0085`\u001f\u0083\u0001\u0012a\u0011KW`\u0000\u0080\u00fd[\u00815\u0081\u0081\u0011\u0015a\u0011ZW`\u0000\u0080\u00fd[\u0086` \u0082\u0085\u0001\u0001\u0011\u0015a\u0011lW`\u0000\u0080\u00fd[` \u0092\u0090\u0092\u0001\u0096\u0091\u0095P\u0090\u0093PPPPV[`\u0000` \u0082\u0084\u0003\u0012\u0015a\u0011\u0090W`\u0000\u0080\u00fd[P5\u0091\u0090PV[`\u0000` \u0082\u0084\u0003\u0012\u0015a\u0011\u00a9W`\u0000\u0080\u00fd[\u00815`\u0001`\u0001`\u00a0\u001b\u0003\u0081\u0016\u0081\u0014a\u0011\u0005W`\u0000\u0080\u00fd[`\u0000[\u0083\u0081\u0010\u0015a\u0011\u00dbW\u0081\u0081\u0001Q\u0083\u0082\u0001R` \u0001a\u0011\u00c3V[\u0083\u0081\u0011\u0015a\u0011\u00eaW`\u0000\u0084\u0084\u0001R[PPPPV[`\u0000\u0081Q\u0080\u0084Ra\u0012\b\u0081` \u0086\u0001` \u0086\u0001a\u0011\u00c0V[`\u001f\u0001`\u001f\u0019\u0016\u0092\u0090\u0092\u0001` \u0001\u0092\u0091PPV[`\u0001`\u0001`\u00a0\u001b\u0003\u0083\u0016\u0081R`@` \u0082\u0001\u0081\u0090R`\u0000\u0090a\u0012@\u0090\u0083\u0001\u0084a\u0011\u00f0V[\u0094\u0093PPPPV[`\u0000` \u0082\u0084\u0003\u0012\u0015a\u0012ZW`\u0000\u0080\u00fd[\u0081Qa\u0011\u0005\u0081a\u0010\u00d2V[cNH{q`\u00e0\u001b`\u0000R`\u0001`\u0004R`$`\u0000\u00fd[`\u0001`\u0001`\u00a0\u001b\u0003\u0084\u0016\u0081R`@` \u0082\u0001\u0081\u0090R\u0081\u0001\u0082\u0090R\u0081\u0083``\u0083\u00017`\u0000\u0081\u0083\u0001``\u0090\u0081\u0001\u0091\u0090\u0091R`\u001f\u0090\u0092\u0001`\u001f\u0019\u0016\u0001\u0001\u0092\u0091PPV[`\u0001`\u0001`\u00e0\u001b\u0003\u0019\u0083\u0016\u0081R\u0081Q`\u0000\u0090a\u0012\u00de\u0081`\u0004\u0085\u0001` \u0087\u0001a\u0011\u00c0V[\u0091\u0090\u0091\u0001`\u0004\u0001\u0093\u0092PPPV[`\u0000\u0082Qa\u0012\u00fe\u0081\u0084` \u0087\u0001a\u0011\u00c0V[\u0091\u0090\u0091\u0001\u0092\u0091PPV[`\u0000` \u0082\u0084\u0003\u0012\u0015a\u0013\u001aW`\u0000\u0080\u00fd[\u0081Q\u0080\u0015\u0015\u0081\u0014a\u0011\u0005W`\u0000\u0080\u00fd[`@\u0081R`\u0000a\u0013T`@\u0083\u0001`\n\u0081Ri\b\b\u0011^\u001c\u0019X\u00dd\u0019Y`\u00b2\u001b` \u0082\u0001R`@\u0001\u0090V[\u0090P\u0082` \u0083\u0001R\u0092\u0091PPV[`@\u0081R`\u0000a\u0013T`@\u0083\u0001`\n\u0081Ri\b\b\b\b\u0010X\u00dd\u001dX[`\u00b2\u001b` \u0082\u0001R`@\u0001\u0090V[`@\u0081R`\u0000a\u0013\u00b6`@\u0083\u0001`\n\u0081Ri\b\b\u0011^\u001c\u0019X\u00dd\u0019Y`\u00b2\u001b` \u0082\u0001R`@\u0001\u0090V[\u0082\u0081\u0003` \u0084\u0001Ra\u0012@\u0081\u0085a\u0011\u00f0V[`@\u0081R`\u0000a\u0013\u00b6`@\u0083\u0001`\n\u0081Ri\b\b\b\b\u0010X\u00dd\u001dX[`\u00b2\u001b` \u0082\u0001R`@\u0001\u0090V[cNH{q`\u00e0\u001b`\u0000R`2`\u0004R`$`\u0000\u00fd[`\u0000`\u0001\u0082\u0001a\u0014(WcNH{q`\u00e0\u001b`\u0000R`\u0011`\u0004R`$`\u0000\u00fd[P`\u0001\u0001\u0090V\u00fe\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000q\tp\u009e\u00cf\u00a9\u001a\u0080bo\u00f3\u0098\u009dh\u00f6\u007f[\u001d\u00d1-\u00a2dipfsX\"\u0012 \u00e2\u00c5\u00ea\u008b\u0092b\u00b8j\u00df\u00a9\u00a9.\fn\u00e3(F\u00a3\u00b2K\u0087\u00b9\u0014\u0001\u0091=-\u00c4o!\u00c9\u00fcdsolcC\u0000\b\r\u00003"}]}, {"tag": "App", "name": "Lbl'-LT-'jumpDests'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "2674"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "5106"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "4306"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "1683"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "787"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "1811"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "1203"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "211"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "1616"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "16"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "4208"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "4272"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "4496"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "4592"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "496"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "464"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "2257"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "337"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "5046"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "3542"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "2583"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "4055"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "4247"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "151"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "3287"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "4407"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "279"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "1463"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "4503"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "2612"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "3668"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "4948"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "981"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "4181"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "2133"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "405"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "469"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "4698"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "4890"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "922"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "4282"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "4346"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "378"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "4442"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "442"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "410"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "2522"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "4731"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "4795"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "891"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "1467"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "4571"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "2616"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "2776"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "3225"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "3678"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "4862"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "4830"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "3934"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "958"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "3134"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "2366"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "2334"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "4478"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "639"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "767"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "1791"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "1183"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "4383"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "383"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "351"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "4636"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "2588"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "1564"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "1404"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "2621"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "637"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "1917"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "3261"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "509"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "477"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "4962"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "2882"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "4290"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "418"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "450"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "3907"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "1059"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "2179"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "4547"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "4672"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "3008"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "256"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "320"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "1440"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "4544"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "2496"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "609"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "1313"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "3846"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "2054"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "102"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "839"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "1095"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "391"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "3652"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "2756"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "356"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "4709"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "741"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "1765"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "4165"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "2277"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "3365"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "4357"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "261"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "3429"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "4906"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "842"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "3114"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "426"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "4586"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "1995"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "4427"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "4616"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "1544"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "4680"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "4872"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "3944"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "3912"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "5064"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "5160"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "5128"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "4328"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "4296"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "2153"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "3401"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "329"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "4521"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "2862"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "4110"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "1647"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "1711"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "2031"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "271"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "4844"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "3820"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "2988"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "5004"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "4300"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "300"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "4364"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "4460"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "364"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "3597"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "589"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "3917"}]}]}, {"tag": "App", "name": "Lbl'Unds'Set'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "269"}]}]}, {"tag": "App", "name": "LblSetItem", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortKItem", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "1293"}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}, {"tag": "App", "name": "Lbl'-LT-'id'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortAccount", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "728815563385977040452943777879061427756277306518"}]}]}, {"tag": "App", "name": "Lbl'-LT-'caller'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortAccount", "args": []}], "args": [{"tag": "EVar", "name": "VarCALLER'Unds'ID", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}]}]}, {"tag": "App", "name": "Lbl'-LT-'callData'-GT-'", "sorts": [], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortBytes", "args": []}, "value": "\u001f\u0098\u0094\u00c2"}]}, {"tag": "App", "name": "Lbl'-LT-'callValue'-GT-'", "sorts": [], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "0"}]}, {"tag": "App", "name": "Lbl'-LT-'wordStack'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'Stop'WordStack'Unds'EVM-TYPES'Unds'WordStack", "sorts": [], "args": []}]}, {"tag": "App", "name": "Lbl'-LT-'localMem'-GT-'", "sorts": [], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortBytes", "args": []}, "value": ""}]}, {"tag": "App", "name": "Lbl'-LT-'pc'-GT-'", "sorts": [], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "0"}]}, {"tag": "App", "name": "Lbl'-LT-'gas'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortGas", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "9223372036854775807"}]}]}, {"tag": "App", "name": "Lbl'-LT-'memoryUsed'-GT-'", "sorts": [], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "0"}]}, {"tag": "App", "name": "Lbl'-LT-'callGas'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarCALLGAS'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortGas", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'static'-GT-'", "sorts": [], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortBool", "args": []}, "value": "false"}]}, {"tag": "App", "name": "Lbl'-LT-'callDepth'-GT-'", "sorts": [], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "0"}]}]}, {"tag": "App", "name": "Lbl'-LT-'substate'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'-LT-'selfDestruct'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarSELFDESTRUCT'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortSet", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'log'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'Stop'List", "sorts": [], "args": []}]}, {"tag": "App", "name": "Lbl'-LT-'refund'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarREFUND'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'accessedAccounts'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'Stop'Set", "sorts": [], "args": []}]}, {"tag": "App", "name": "Lbl'-LT-'accessedStorage'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'Stop'Map", "sorts": [], "args": []}]}]}, {"tag": "App", "name": "Lbl'-LT-'gasPrice'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarGASPRICE'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'origin'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortAccount", "args": []}], "args": [{"tag": "EVar", "name": "VarORIGIN'Unds'ID", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}]}]}, {"tag": "App", "name": "Lbl'-LT-'blockhashes'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarBLOCKHASHES'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortList", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'block'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'-LT-'previousHash'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarPREVIOUSHASH'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'ommersHash'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarOMMERSHASH'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'coinbase'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarCOINBASE'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'stateRoot'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarSTATEROOT'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'transactionsRoot'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarTRANSACTIONSROOT'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'receiptsRoot'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarRECEIPTSROOT'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'logsBloom'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarLOGSBLOOM'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortBytes", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'difficulty'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarDIFFICULTY'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'number'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarNUMBER'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'gasLimit'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarGASLIMIT'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'gasUsed'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarGASUSED'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortGas", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'timestamp'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarTIMESTAMP'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'extraData'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarEXTRADATA'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortBytes", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'mixHash'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarMIXHASH'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'blockNonce'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarBLOCKNONCE'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'baseFee'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarBASEFEE'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'ommerBlockHeaders'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarOMMERBLOCKHEADERS'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortJSON", "args": []}}]}]}]}, {"tag": "App", "name": "Lbl'-LT-'network'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'-LT-'chainID'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarCHAINID'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'accounts'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'Unds'AccountCellMap'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblAccountCellMapItem", "sorts": [], "args": [{"tag": "App", "name": "Lbl'-LT-'acctID'-GT-'", "sorts": [], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "728815563385977040452943777879061427756277306518"}]}, {"tag": "App", "name": "Lbl'-LT-'account'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'-LT-'acctID'-GT-'", "sorts": [], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "728815563385977040452943777879061427756277306518"}]}, {"tag": "App", "name": "Lbl'-LT-'balance'-GT-'", "sorts": [], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "0"}]}, {"tag": "App", "name": "Lbl'-LT-'code'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortBytes", "args": []}, {"tag": "SortApp", "name": "SortAccountCode", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortBytes", "args": []}, "value": "`\u0080`@R4\u0080\u0015a\u0000\u0010W`\u0000\u0080\u00fd[P`\u00046\u0010a\u0001\u0000W`\u00005`\u00e0\u001c\u0080c\u009a\u0013\u00b4`\u0011a\u0000\u0097W\u0080c\u00ea\u00ef=\u0014\u0011a\u0000fW\u0080c\u00ea\u00ef=\u0014\u0014a\u0001\u00c2W\u0080c\u00ec\u0084m\u00a6\u0014a\u0001\u00d5W\u0080c\u00f8\u00cc\u00bfG\u0014a\u0001\u00ddW\u0080c\u00fav&\u00d4\u0014a\u0001\u00f0W`\u0000\u0080\u00fd[\u0080c\u009a\u0013\u00b4`\u0014a\u0001\u0087W\u0080c\u00b1\u00ecy\u0081\u0014a\u0001\u009aW\u0080c\u00baAO\u00a6\u0014a\u0001\u00a2W\u0080c\u00d3P o\u0014a\u0001\u00baW`\u0000\u0080\u00fd[\u0080cN\u0018\u00fd\u000b\u0011a\u0000\u00d3W\u0080cN\u0018\u00fd\u000b\u0014a\u0001QW\u0080c_Ev\u001c\u0014a\u0001dW\u0080c}\u00bb\u000f\u00bf\u0014a\u0001lW\u0080c\u008e\u00af\u00adc\u0014a\u0001\u007fW`\u0000\u0080\u00fd[\u0080c\u001f\u0098\u0094\u00c2\u0014a\u0001\u0005W\u0080c0!\u0088|\u0014a\u0001\u000fW\u0080c:v\u0084c\u0014a\u0001\u0017W\u0080c?\u00a6\u00f8P\u0014a\u0001IW[`\u0000\u0080\u00fd[a\u0001\ra\u0001\u00fdV[\u0000[a\u0001\ra\u0002\u007fV[a\u0001,`\u0000\u0080Q` a\u00140\u00839\u0081Q\u0091R\u0081V[`@Q`\u0001`\u0001`\u00a0\u001b\u0003\u0090\u0091\u0016\u0081R` \u0001[`@Q\u0080\u0091\u0003\u0090\u00f3[a\u0001\ra\u0003JV[a\u0001\ra\u0001_6`\u0004a\u0010\u00e8V[a\u0003\u00d5V[a\u0001\ra\u0005\u00bbV[a\u0001\ra\u0001z6`\u0004a\u0011\fV[a\u0006\u00afV[a\u0001\ra\u0007}V[a\u0001\ra\u0001\u00956`\u0004a\u0011~V[a\b\u0006V[a\u0001\ra\b\u0083V[a\u0001\u00aaa\t\u001eV[`@Q\u0090\u0015\u0015\u0081R` \u0001a\u0001@V[a\u0001\ra\n=V[a\u0001\ra\u0001\u00d06`\u0004a\u0011\u0097V[a\nrV[a\u0001\ra\f\u00d7V[`\u0000Ta\u0001\u00aa\u0090b\u0001\u0000\u0000\u0090\u0004`\u00ff\u0016\u0081V[`\u0000Ta\u0001\u00aa\u0090`\u00ff\u0016\u0081V[`@Qc\u00c8\u008a^m`\u00e0\u001b\u0081Ra\u0001\u00f9`\u0004\u0082\u0001Ra\u0001\u0000`$\u0082\u0001R`\u0000\u0080Q` a\u00140\u00839\u0081Q\u0091R\u0090c\u00c8\u008a^m\u0090`D\u0001`\u0000`@Q\u0080\u0083\u0003\u0081`\u0000\u0087\u0080;\u0015\u0080\u0015a\u0002MW`\u0000\u0080\u00fd[PZ\u00f1\u0015\u0080\u0015a\u0002aW=`\u0000\u0080>=`\u0000\u00fd[PPPPa\u0002}a\u0001\u00f9`\u0001`\u0001`\u00a0\u001b\u0003\u00161a\u0001\u0000a\reV[V[`@\u0080Q\u0080\u0082\u0001\u0082R`\u001b\u0081R\u007fthis should be EVM bytecode\u0000\u0000\u0000\u0000\u0000` \u0082\u0001R\u0090QcZkc\u00c1`\u00e1\u001b\u0081R`\u0000\u0080Q` a\u00140\u00839\u0081Q\u0091R\u0090c\u00b4\u00d6\u00c7\u0082\u0090a\u0002\u00e5\u0090`|\u0090\u0085\u0090`\u0004\u0001a\u0012\u001cV[`\u0000`@Q\u0080\u0083\u0003\u0081`\u0000\u0087\u0080;\u0015\u0080\u0015a\u0002\u00ffW`\u0000\u0080\u00fd[PZ\u00f1\u0015\u0080\u0015a\u0003\u0013W=`\u0000\u0080>=`\u0000\u00fd[PPPPa\u0003G`|`\u0001`\u0001`\u00a0\u001b\u0003\u0016\u0080;\u0080` \u0001`@Q\u0090\u0081\u0001`@R\u0081\u0081R`\u0000\u0090\u0080` \u0001\u0090\u0093<\u0082a\u000eTV[PV[`@Qc-\u00035\u00ab`\u00e0\u001b\u0081R`\u0000`\u0004\u0082\u0001\u0081\u0090R\u0090`\u0000\u0080Q` a\u00140\u00839\u0081Q\u0091R\u0090c-\u00035\u00ab\u0090`$\u0001[` `@Q\u0080\u0083\u0003\u0081`\u0000\u0087Z\u00f1\u0015\u0080\u0015a\u0003\u009aW=`\u0000\u0080>=`\u0000\u00fd[PPPP`@Q=`\u001f\u0019`\u001f\u0082\u0001\u0016\u0082\u0001\u0080`@RP\u0081\u0001\u0090a\u0003\u00be\u0091\u0090a\u0012HV[\u0090Pa\u0003G\u0081g\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff\u0016`\na\reV[`@Qc-\u00035\u00ab`\u00e0\u001b\u0081R0`\u0004\u0082\u0001R`\u0000\u0090`\u0000\u0080Q` a\u00140\u00839\u0081Q\u0091R\u0090c-\u00035\u00ab\u0090`$\u0001` `@Q\u0080\u0083\u0003\u0081`\u0000\u0087Z\u00f1\u0015\u0080\u0015a\u0004#W=`\u0000\u0080>=`\u0000\u00fd[PPPP`@Q=`\u001f\u0019`\u001f\u0082\u0001\u0016\u0082\u0001\u0080`@RP\u0081\u0001\u0090a\u0004G\u0091\u0090a\u0012HV[`@Qc&1\u00f2\u00b1`\u00e1\u001b\u0081Rg\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff\u0080\u0083\u0016\u0090\u0085\u0016\u0011`\u0004\u0082\u0001R\u0090\u0091P`\u0000\u0080Q` a\u00140\u00839\u0081Q\u0091R\u0090cLc\u00e5b\u0090`$\u0001`\u0000`@Q\u0080\u0083\u0003\u0081`\u0000\u0087\u0080;\u0015\u0080\u0015a\u0004\u009fW`\u0000\u0080\u00fd[PZ\u00f1\u0015\u0080\u0015a\u0004\u00b3W=`\u0000\u0080>=`\u0000\u00fd[PP`@Qc\u00f8\u00e1\u008bW`\u00e0\u001b\u0081R0`\u0004\u0082\u0001Rg\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff\u0085\u0016`$\u0082\u0001R`\u0000\u0080Q` a\u00140\u00839\u0081Q\u0091R\u0092Pc\u00f8\u00e1\u008bW\u0091P`D\u0001`\u0000`@Q\u0080\u0083\u0003\u0081`\u0000\u0087\u0080;\u0015\u0080\u0015a\u0005\rW`\u0000\u0080\u00fd[PZ\u00f1\u0015\u0080\u0015a\u0005!W=`\u0000\u0080>=`\u0000\u00fd[PP`@Qc-\u00035\u00ab`\u00e0\u001b\u0081R0`\u0004\u0082\u0001Rg\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff\u0085\u0016\u0092P`\u0000\u0080Q` a\u00140\u00839\u0081Q\u0091R\u0091Pc-\u00035\u00ab\u0090`$\u0001` `@Q\u0080\u0083\u0003\u0081`\u0000\u0087Z\u00f1\u0015\u0080\u0015a\u0005|W=`\u0000\u0080>=`\u0000\u00fd[PPPP`@Q=`\u001f\u0019`\u001f\u0082\u0001\u0016\u0082\u0001\u0080`@RP\u0081\u0001\u0090a\u0005\u00a0\u0091\u0090a\u0012HV[g\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff\u0016\u0014a\u0005\u00b7Wa\u0005\u00b7a\u0012eV[PPV[`@Qc\u00f8\u00e1\u008bW`\u00e0\u001b\u0081R0`\u0004\u0082\u0001R`d`$\u0082\u0001R`\u0000\u0080Q` a\u00140\u00839\u0081Q\u0091R\u0090c\u00f8\u00e1\u008bW\u0090`D\u0001`\u0000`@Q\u0080\u0083\u0003\u0081`\u0000\u0087\u0080;\u0015\u0080\u0015a\u0006\bW`\u0000\u0080\u00fd[PZ\u00f1\u0015\u0080\u0015a\u0006\u001cW=`\u0000\u0080>=`\u0000\u00fd[PP`@Qc-\u00035\u00ab`\u00e0\u001b\u0081R0`\u0004\u0082\u0001R`\u0000\u0092P`\u0000\u0080Q` a\u00140\u00839\u0081Q\u0091R\u0091Pc-\u00035\u00ab\u0090`$\u0001[` `@Q\u0080\u0083\u0003\u0081`\u0000\u0087Z\u00f1\u0015\u0080\u0015a\u0006oW=`\u0000\u0080>=`\u0000\u00fd[PPPP`@Q=`\u001f\u0019`\u001f\u0082\u0001\u0016\u0082\u0001\u0080`@RP\u0081\u0001\u0090a\u0006\u0093\u0091\u0090a\u0012HV[\u0090P\u0080g\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff\u0016`d\u0014a\u0003GWa\u0003Ga\u0012eV[`@QcZkc\u00c1`\u00e1\u001b\u0081R`\u0000\u0080Q` a\u00140\u00839\u0081Q\u0091R\u0090c\u00b4\u00d6\u00c7\u0082\u0090a\u0006\u00e5\u0090`|\u0090\u0086\u0090\u0086\u0090`\u0004\u0001a\u0012{V[`\u0000`@Q\u0080\u0083\u0003\u0081`\u0000\u0087\u0080;\u0015\u0080\u0015a\u0006\u00ffW`\u0000\u0080\u00fd[PZ\u00f1\u0015\u0080\u0015a\u0007\u0013W=`\u0000\u0080>=`\u0000\u00fd[PPPPa\u0005\u00b7`|`\u0001`\u0001`\u00a0\u001b\u0003\u0016\u0080;\u0080` \u0001`@Q\u0090\u0081\u0001`@R\u0081\u0081R`\u0000\u0090\u0080` \u0001\u0090\u0093<\u0083\u0083\u0080\u0080`\u001f\u0001` \u0080\u0091\u0004\u0002` \u0001`@Q\u0090\u0081\u0001`@R\u0080\u0093\u0092\u0091\u0090\u0081\u0081R` \u0001\u0083\u0083\u0080\u0082\u00847`\u0000\u0092\u0001\u0091\u0090\u0091RPa\u000eT\u0092PPPV[`@Qc-\u00035\u00ab`\u00e0\u001b\u0081R0`\u0004\u0082\u0001R`\u0000\u0090`\u0000\u0080Q` a\u00140\u00839\u0081Q\u0091R\u0090c-\u00035\u00ab\u0090`$\u0001` `@Q\u0080\u0083\u0003\u0081`\u0000\u0087Z\u00f1\u0015\u0080\u0015a\u0007\u00cbW=`\u0000\u0080>=`\u0000\u00fd[PPPP`@Q=`\u001f\u0019`\u001f\u0082\u0001\u0016\u0082\u0001\u0080`@RP\u0081\u0001\u0090a\u0007\u00ef\u0091\u0090a\u0012HV[\u0090Pa\u0003G\u0081g\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff\u0016`\u0001a\reV[`@Qc\u00c8\u008a^m`\u00e0\u001b\u0081Ra\u0001H`\u0004\u0082\u0001R`$\u0081\u0001\u0082\u0090R`\u0000\u0080Q` a\u00140\u00839\u0081Q\u0091R\u0090c\u00c8\u008a^m\u0090`D\u0001`\u0000`@Q\u0080\u0083\u0003\u0081`\u0000\u0087\u0080;\u0015\u0080\u0015a\bUW`\u0000\u0080\u00fd[PZ\u00f1\u0015\u0080\u0015a\biW=`\u0000\u0080>=`\u0000\u00fd[PPPPa\u0003Ga\u0001H`\u0001`\u0001`\u00a0\u001b\u0003\u00161\u0082a\reV[`@Qc\u00f8\u00e1\u008bW`\u00e0\u001b\u0081R`d`\u0004\u0082\u0001\u0081\u0090R`$\u0082\u0001R`\u0000\u0080Q` a\u00140\u00839\u0081Q\u0091R\u0090c\u00f8\u00e1\u008bW\u0090`D\u0001`\u0000`@Q\u0080\u0083\u0003\u0081`\u0000\u0087\u0080;\u0015\u0080\u0015a\b\u00d1W`\u0000\u0080\u00fd[PZ\u00f1\u0015\u0080\u0015a\b\u00e5W=`\u0000\u0080>=`\u0000\u00fd[PP`@Qc-\u00035\u00ab`\u00e0\u001b\u0081R`d`\u0004\u0082\u0001R`\u0000\u0092P`\u0000\u0080Q` a\u00140\u00839\u0081Q\u0091R\u0091Pc-\u00035\u00ab\u0090`$\u0001a\u0006PV[`\u0000\u0080Ta\u0001\u0000\u0090\u0004`\u00ff\u0016\u0015a\t>WP`\u0000Ta\u0001\u0000\u0090\u0004`\u00ff\u0016\u0090V[`\u0000`\u0000\u0080Q` a\u00140\u00839\u0081Q\u0091R;\u0015a\n8W`@\u0080Q`\u0000\u0080Q` a\u00140\u00839\u0081Q\u0091R` \u0082\u0001\u0081\u0090Re\u0019\u0098Z[\u0019Y`\u00d2\u001b\u0082\u0084\u0001R\u0082Q\u0080\u0083\u0003\u0084\u0001\u0081R``\u0083\u0001\u0090\u0093R`\u0000\u0092\u0090\u0091a\t\u00c0\u0091\u007ff\u007f\u009dp\u00caA\u001dp\u00ea\u00d5\r\u008d\\\"\u0007\r\u00af\u00c3j\u00d7_=\u00cf^r7\u00b2*\u00de\u009a\u00ec\u00c4\u0091`\u0080\u0001a\u0012\u00bbV[`@\u0080Q`\u001f\u0019\u0081\u0084\u0003\u0001\u0081R\u0090\u0082\u0090Ra\t\u00da\u0091a\u0012\u00ecV[`\u0000`@Q\u0080\u0083\u0003\u0081`\u0000\u0086Z\u00f1\u0091PP=\u0080`\u0000\u0081\u0014a\n\u0017W`@Q\u0091P`\u001f\u0019`?=\u0001\u0016\u0082\u0001`@R=\u0082R=`\u0000` \u0084\u0001>a\n\u001cV[``\u0091P[P\u0091PP\u0080\u0080` \u0001\u0090Q\u0081\u0001\u0090a\n4\u0091\u0090a\u0013\bV[\u0091PP[\u0091\u0090PV[`@Qc-\u00035\u00ab`\u00e0\u001b\u0081R`d`\u0004\u0082\u0001R`\u0000\u0090`\u0000\u0080Q` a\u00140\u00839\u0081Q\u0091R\u0090c-\u00035\u00ab\u0090`$\u0001a\u0003{V[`@Qc&1\u00f2\u00b1`\u00e1\u001b\u0081R`\u0000\u0080Q` a\u00140\u00839\u0081Q\u0091R`\u0001`\u0001`\u00a0\u001b\u0003\u0083\u0016\u0081\u0014\u0015`\u0004\u0083\u0001R\u0090cLc\u00e5b\u0090`$\u0001`\u0000`@Q\u0080\u0083\u0003\u0081`\u0000\u0087\u0080;\u0015\u0080\u0015a\n\u00c4W`\u0000\u0080\u00fd[PZ\u00f1\u0015\u0080\u0015a\n\u00d8W=`\u0000\u0080>=`\u0000\u00fd[PP`@Qc&1\u00f2\u00b1`\u00e1\u001b\u0081R0`\u0001`\u0001`\u00a0\u001b\u0003\u0085\u0016\u0014\u0015`\u0004\u0082\u0001R`\u0000\u0080Q` a\u00140\u00839\u0081Q\u0091R\u0092PcLc\u00e5b\u0091P`$\u0001`\u0000`@Q\u0080\u0083\u0003\u0081`\u0000\u0087\u0080;\u0015\u0080\u0015a\u000b.W`\u0000\u0080\u00fd[PZ\u00f1\u0015\u0080\u0015a\u000bBW=`\u0000\u0080>=`\u0000\u00fd[PP`@Qc&1\u00f2\u00b1`\u00e1\u001b\u0081Rs?\u00ab\u0018F\"\u00dc\u0019\u00b6\u0010\u0093I\u00b9H\u0011I;\u00f2\u00a4Sb`\u0001`\u0001`\u00a0\u001b\u0003\u0085\u0016\u0014\u0015`\u0004\u0082\u0001R`\u0000\u0080Q` a\u00140\u00839\u0081Q\u0091R\u0092PcLc\u00e5b\u0091P`$\u0001`\u0000`@Q\u0080\u0083\u0003\u0081`\u0000\u0087\u0080;\u0015\u0080\u0015a\u000b\u00acW`\u0000\u0080\u00fd[PZ\u00f1\u0015\u0080\u0015a\u000b\u00c0W=`\u0000\u0080>=`\u0000\u00fd[PP`@Qc&1\u00f2\u00b1`\u00e1\u001b\u0081RsNY\u00b4HG\u00b3yW\u0085\u0088\u0092\f\u00a7\u008f\u00bf&\u00c0\u00b4\u0095l`\u0001`\u0001`\u00a0\u001b\u0003\u0085\u0016\u0014\u0015`\u0004\u0082\u0001R`\u0000\u0080Q` a\u00140\u00839\u0081Q\u0091R\u0092PcLc\u00e5b\u0091P`$\u0001`\u0000`@Q\u0080\u0083\u0003\u0081`\u0000\u0087\u0080;\u0015\u0080\u0015a\f*W`\u0000\u0080\u00fd[PZ\u00f1\u0015\u0080\u0015a\f>W=`\u0000\u0080>=`\u0000\u00fd[PP`@Qc-\u00035\u00ab`\u00e0\u001b\u0081R`\u0001`\u0001`\u00a0\u001b\u0003\u0084\u0016`\u0004\u0082\u0001R`\u0000\u0092P`\u0000\u0080Q` a\u00140\u00839\u0081Q\u0091R\u0091Pc-\u00035\u00ab\u0090`$\u0001` `@Q\u0080\u0083\u0003\u0081`\u0000\u0087Z\u00f1\u0015\u0080\u0015a\f\u0099W=`\u0000\u0080>=`\u0000\u00fd[PPPP`@Q=`\u001f\u0019`\u001f\u0082\u0001\u0016\u0082\u0001\u0080`@RP\u0081\u0001\u0090a\f\u00bd\u0091\u0090a\u0012HV[\u0090Pg\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff\u0081\u0016\u0015a\u0005\u00b7Wa\u0005\u00b7a\u0012eV[`@Qc-\u00035\u00ab`\u00e0\u001b\u0081R0`\u0004\u0082\u0001R`\u0000\u0090`\u0000\u0080Q` a\u00140\u00839\u0081Q\u0091R\u0090c-\u00035\u00ab\u0090`$\u0001` `@Q\u0080\u0083\u0003\u0081`\u0000\u0087Z\u00f1\u0015\u0080\u0015a\r%W=`\u0000\u0080>=`\u0000\u00fd[PPPP`@Q=`\u001f\u0019`\u001f\u0082\u0001\u0016\u0082\u0001\u0080`@RP\u0081\u0001\u0090a\rI\u0091\u0090a\u0012HV[\u0090P\u0080g\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff\u0016`\u0001\u0014a\u0003GWa\u0003Ga\u0012eV[\u0080\u0082\u0014a\u0005\u00b7W\u007fA0O\u00ac\u00d92=u\u00b1\u001b\u00cd\u00d6\t\u00cb8\u00ef\u00ff\u00fd\u00b0W\u0010\u00f7\u00ca\u00f0\u00e9\u00b1lm\u009dp\u009fP`@Qa\r\u00d6\u0090` \u0080\u0082R`\"\u0090\u0082\u0001R\u007fError: a == b not satisfied [uin`@\u0082\u0001Rat]`\u00f0\u001b``\u0082\u0001R`\u0080\u0001\u0090V[`@Q\u0080\u0091\u0003\u0090\u00a1\u007f\u00b2\u00de/\u00be\u0080\u001a\r\u00f6\u00c0\u00cb\u00dd\u00fdD\u008b\u00a3\u00c4\u001dH\u00a0@\u00ca5\u00c5l\u0081\u0096\u00ef\u000f\u00ca\u00e7!\u00a8\u0081`@Qa\u000e\r\u0091\u0090a\u0013*V[`@Q\u0080\u0091\u0003\u0090\u00a1\u007f\u00b2\u00de/\u00be\u0080\u001a\r\u00f6\u00c0\u00cb\u00dd\u00fdD\u008b\u00a3\u00c4\u001dH\u00a0@\u00ca5\u00c5l\u0081\u0096\u00ef\u000f\u00ca\u00e7!\u00a8\u0082`@Qa\u000eD\u0091\u0090a\u0013bV[`@Q\u0080\u0091\u0003\u0090\u00a1a\u0005\u00b7a\u000e^V[a\u0005\u00b7\u0082\u0082a\u000f^V[`\u0000\u0080Q` a\u00140\u00839\u0081Q\u0091R;\u0015a\u000fMW`@\u0080Q`\u0000\u0080Q` a\u00140\u00839\u0081Q\u0091R` \u0082\u0001\u0081\u0090Re\u0019\u0098Z[\u0019Y`\u00d2\u001b\u0092\u0082\u0001\u0092\u0090\u0092R`\u0001``\u0082\u0001R`\u0000\u0091\u0090\u007fp\u00ca\u0010\u00bb\u00d0\u00db\u00fd\u0090 \u00a9\u00f4\u00b14\u0002\u00c1l\u00b1 p^\r\u001c\n\u00ea\u00b1\u000f\u00a3S\u00aeXo\u00c4\u0090`\u0080\u0001`@\u0080Q`\u001f\u0019\u0081\u0084\u0003\u0001\u0081R\u0090\u0082\u0090Ra\u000e\u00ec\u0092\u0091` \u0001a\u0012\u00bbV[`@\u0080Q`\u001f\u0019\u0081\u0084\u0003\u0001\u0081R\u0090\u0082\u0090Ra\u000f\u0006\u0091a\u0012\u00ecV[`\u0000`@Q\u0080\u0083\u0003\u0081`\u0000\u0086Z\u00f1\u0091PP=\u0080`\u0000\u0081\u0014a\u000fCW`@Q\u0091P`\u001f\u0019`?=\u0001\u0016\u0082\u0001`@R=\u0082R=`\u0000` \u0084\u0001>a\u000fHV[``\u0091P[PPPP[`\u0000\u0080Ta\u00ff\u0000\u0019\u0016a\u0001\u0000\u0017\u0090UV[a\u000fh\u0082\u0082a\u0010EV[a\u0005\u00b7W\u007fA0O\u00ac\u00d92=u\u00b1\u001b\u00cd\u00d6\t\u00cb8\u00ef\u00ff\u00fd\u00b0W\u0010\u00f7\u00ca\u00f0\u00e9\u00b1lm\u009dp\u009fP`@Qa\u000f\u00d7\u0090` \u0080\u0082R`#\u0090\u0082\u0001R\u007fError: a == b not satisfied [byt`@\u0082\u0001Rbes]`\u00e8\u001b``\u0082\u0001R`\u0080\u0001\u0090V[`@Q\u0080\u0091\u0003\u0090\u00a1\u007f\u00d2n\u0016\u00ca\u00d4T\u0087\u0005\u00e4\u00c9\u00e2\u00d9O\u0098\u00ee\u0091\u00c2\u0089\b^\u00e4%YO\u00d5c_\u00a2\u0096L\u00cf\u0018\u0081`@Qa\u0010\u000e\u0091\u0090a\u0013\u008cV[`@Q\u0080\u0091\u0003\u0090\u00a1\u007f\u00d2n\u0016\u00ca\u00d4T\u0087\u0005\u00e4\u00c9\u00e2\u00d9O\u0098\u00ee\u0091\u00c2\u0089\b^\u00e4%YO\u00d5c_\u00a2\u0096L\u00cf\u0018\u0082`@Qa\u000eD\u0091\u0090a\u0013\u00c8V[\u0080Q\u0082Q`\u0001\u0091\u0090\u0003a\u0010\u00c8W`\u0000[\u0083Q\u0081\u0010\u0015a\u0010\u00c2W\u0082\u0081\u0081Q\u0081\u0010a\u0010pWa\u0010pa\u0013\u00f2V[` \u0001\u0001Q`\u00f8\u001c`\u00f8\u001b`\u0001`\u0001`\u00f8\u001b\u0003\u0019\u0016\u0084\u0082\u0081Q\u0081\u0010a\u0010\u0097Wa\u0010\u0097a\u0013\u00f2V[\u0001` \u0001Q`\u0001`\u0001`\u00f8\u001b\u0003\u0019\u0016\u0014a\u0010\u00b0W`\u0000\u0091P[\u0080a\u0010\u00ba\u0081a\u0014\bV[\u0091PPa\u0010UV[Pa\u0010\u00ccV[P`\u0000[\u0092\u0091PPV[g\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff\u0081\u0016\u0081\u0014a\u0003GW`\u0000\u0080\u00fd[`\u0000` \u0082\u0084\u0003\u0012\u0015a\u0010\u00faW`\u0000\u0080\u00fd[\u00815a\u0011\u0005\u0081a\u0010\u00d2V[\u0093\u0092PPPV[`\u0000\u0080` \u0083\u0085\u0003\u0012\u0015a\u0011\u001fW`\u0000\u0080\u00fd[\u00825g\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff\u0080\u0082\u0011\u0015a\u00117W`\u0000\u0080\u00fd[\u0081\u0085\u0001\u0091P\u0085`\u001f\u0083\u0001\u0012a\u0011KW`\u0000\u0080\u00fd[\u00815\u0081\u0081\u0011\u0015a\u0011ZW`\u0000\u0080\u00fd[\u0086` \u0082\u0085\u0001\u0001\u0011\u0015a\u0011lW`\u0000\u0080\u00fd[` \u0092\u0090\u0092\u0001\u0096\u0091\u0095P\u0090\u0093PPPPV[`\u0000` \u0082\u0084\u0003\u0012\u0015a\u0011\u0090W`\u0000\u0080\u00fd[P5\u0091\u0090PV[`\u0000` \u0082\u0084\u0003\u0012\u0015a\u0011\u00a9W`\u0000\u0080\u00fd[\u00815`\u0001`\u0001`\u00a0\u001b\u0003\u0081\u0016\u0081\u0014a\u0011\u0005W`\u0000\u0080\u00fd[`\u0000[\u0083\u0081\u0010\u0015a\u0011\u00dbW\u0081\u0081\u0001Q\u0083\u0082\u0001R` \u0001a\u0011\u00c3V[\u0083\u0081\u0011\u0015a\u0011\u00eaW`\u0000\u0084\u0084\u0001R[PPPPV[`\u0000\u0081Q\u0080\u0084Ra\u0012\b\u0081` \u0086\u0001` \u0086\u0001a\u0011\u00c0V[`\u001f\u0001`\u001f\u0019\u0016\u0092\u0090\u0092\u0001` \u0001\u0092\u0091PPV[`\u0001`\u0001`\u00a0\u001b\u0003\u0083\u0016\u0081R`@` \u0082\u0001\u0081\u0090R`\u0000\u0090a\u0012@\u0090\u0083\u0001\u0084a\u0011\u00f0V[\u0094\u0093PPPPV[`\u0000` \u0082\u0084\u0003\u0012\u0015a\u0012ZW`\u0000\u0080\u00fd[\u0081Qa\u0011\u0005\u0081a\u0010\u00d2V[cNH{q`\u00e0\u001b`\u0000R`\u0001`\u0004R`$`\u0000\u00fd[`\u0001`\u0001`\u00a0\u001b\u0003\u0084\u0016\u0081R`@` \u0082\u0001\u0081\u0090R\u0081\u0001\u0082\u0090R\u0081\u0083``\u0083\u00017`\u0000\u0081\u0083\u0001``\u0090\u0081\u0001\u0091\u0090\u0091R`\u001f\u0090\u0092\u0001`\u001f\u0019\u0016\u0001\u0001\u0092\u0091PPV[`\u0001`\u0001`\u00e0\u001b\u0003\u0019\u0083\u0016\u0081R\u0081Q`\u0000\u0090a\u0012\u00de\u0081`\u0004\u0085\u0001` \u0087\u0001a\u0011\u00c0V[\u0091\u0090\u0091\u0001`\u0004\u0001\u0093\u0092PPPV[`\u0000\u0082Qa\u0012\u00fe\u0081\u0084` \u0087\u0001a\u0011\u00c0V[\u0091\u0090\u0091\u0001\u0092\u0091PPV[`\u0000` \u0082\u0084\u0003\u0012\u0015a\u0013\u001aW`\u0000\u0080\u00fd[\u0081Q\u0080\u0015\u0015\u0081\u0014a\u0011\u0005W`\u0000\u0080\u00fd[`@\u0081R`\u0000a\u0013T`@\u0083\u0001`\n\u0081Ri\b\b\u0011^\u001c\u0019X\u00dd\u0019Y`\u00b2\u001b` \u0082\u0001R`@\u0001\u0090V[\u0090P\u0082` \u0083\u0001R\u0092\u0091PPV[`@\u0081R`\u0000a\u0013T`@\u0083\u0001`\n\u0081Ri\b\b\b\b\u0010X\u00dd\u001dX[`\u00b2\u001b` \u0082\u0001R`@\u0001\u0090V[`@\u0081R`\u0000a\u0013\u00b6`@\u0083\u0001`\n\u0081Ri\b\b\u0011^\u001c\u0019X\u00dd\u0019Y`\u00b2\u001b` \u0082\u0001R`@\u0001\u0090V[\u0082\u0081\u0003` \u0084\u0001Ra\u0012@\u0081\u0085a\u0011\u00f0V[`@\u0081R`\u0000a\u0013\u00b6`@\u0083\u0001`\n\u0081Ri\b\b\b\b\u0010X\u00dd\u001dX[`\u00b2\u001b` \u0082\u0001R`@\u0001\u0090V[cNH{q`\u00e0\u001b`\u0000R`2`\u0004R`$`\u0000\u00fd[`\u0000`\u0001\u0082\u0001a\u0014(WcNH{q`\u00e0\u001b`\u0000R`\u0011`\u0004R`$`\u0000\u00fd[P`\u0001\u0001\u0090V\u00fe\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000q\tp\u009e\u00cf\u00a9\u001a\u0080bo\u00f3\u0098\u009dh\u00f6\u007f[\u001d\u00d1-\u00a2dipfsX\"\u0012 \u00e2\u00c5\u00ea\u008b\u0092b\u00b8j\u00df\u00a9\u00a9.\fn\u00e3(F\u00a3\u00b2K\u0087\u00b9\u0014\u0001\u0091=-\u00c4o!\u00c9\u00fcdsolcC\u0000\b\r\u00003"}]}]}, {"tag": "App", "name": "Lbl'-LT-'storage'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'Stop'Map", "sorts": [], "args": []}]}, {"tag": "App", "name": "Lbl'-LT-'origStorage'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'Stop'Map", "sorts": [], "args": []}]}, {"tag": "App", "name": "Lbl'-LT-'nonce'-GT-'", "sorts": [], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "1"}]}]}]}, {"tag": "App", "name": "LblAccountCellMapItem", "sorts": [], "args": [{"tag": "App", "name": "Lbl'-LT-'acctID'-GT-'", "sorts": [], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "645326474426547203313410069153905908525362434349"}]}, {"tag": "App", "name": "Lbl'-LT-'account'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'-LT-'acctID'-GT-'", "sorts": [], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "645326474426547203313410069153905908525362434349"}]}, {"tag": "App", "name": "Lbl'-LT-'balance'-GT-'", "sorts": [], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "0"}]}, {"tag": "App", "name": "Lbl'-LT-'code'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortBytes", "args": []}, {"tag": "SortApp", "name": "SortAccountCode", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortBytes", "args": []}, "value": "\u0000"}]}]}, {"tag": "App", "name": "Lbl'-LT-'storage'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'Stop'Map", "sorts": [], "args": []}]}, {"tag": "App", "name": "Lbl'-LT-'origStorage'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'Stop'Map", "sorts": [], "args": []}]}, {"tag": "App", "name": "Lbl'-LT-'nonce'-GT-'", "sorts": [], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "0"}]}]}]}]}]}, {"tag": "App", "name": "Lbl'-LT-'txOrder'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarTXORDER'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortList", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'txPending'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarTXPENDING'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortList", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'messages'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarMESSAGES'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortMessageCellMap", "args": []}}]}]}]}]}, {"tag": "App", "name": "Lbl'-LT-'cheatcodes'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'-LT-'prank'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'-LT-'prevCaller'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'Stop'Account'Unds'EVM-TYPES'Unds'Account", "sorts": [], "args": []}]}, {"tag": "App", "name": "Lbl'-LT-'prevOrigin'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'Stop'Account'Unds'EVM-TYPES'Unds'Account", "sorts": [], "args": []}]}, {"tag": "App", "name": "Lbl'-LT-'newCaller'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'Stop'Account'Unds'EVM-TYPES'Unds'Account", "sorts": [], "args": []}]}, {"tag": "App", "name": "Lbl'-LT-'newOrigin'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'Stop'Account'Unds'EVM-TYPES'Unds'Account", "sorts": [], "args": []}]}, {"tag": "App", "name": "Lbl'-LT-'active'-GT-'", "sorts": [], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortBool", "args": []}, "value": "false"}]}, {"tag": "App", "name": "Lbl'-LT-'depth'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarDEPTH'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'singleCall'-GT-'", "sorts": [], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortBool", "args": []}, "value": "false"}]}]}, {"tag": "App", "name": "Lbl'-LT-'expectedRevert'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'-LT-'isRevertExpected'-GT-'", "sorts": [], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortBool", "args": []}, "value": "false"}]}, {"tag": "App", "name": "Lbl'-LT-'expectedReason'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarEXPECTEDREASON'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortBytes", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'expectedDepth'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarEXPECTEDDEPTH'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}]}]}, {"tag": "App", "name": "Lbl'-LT-'expectedOpcode'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'-LT-'isOpcodeExpected'-GT-'", "sorts": [], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortBool", "args": []}, "value": "false"}]}, {"tag": "App", "name": "Lbl'-LT-'expectedAddress'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'Stop'Account'Unds'EVM-TYPES'Unds'Account", "sorts": [], "args": []}]}, {"tag": "App", "name": "Lbl'-LT-'expectedValue'-GT-'", "sorts": [], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "0"}]}, {"tag": "App", "name": "Lbl'-LT-'expectedData'-GT-'", "sorts": [], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortBytes", "args": []}, "value": ""}]}, {"tag": "App", "name": "Lbl'-LT-'opcodeType'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'Stop'OpcodeType'Unds'FOUNDRY-CHEAT-CODES'Unds'OpcodeType", "sorts": [], "args": []}]}]}, {"tag": "App", "name": "Lbl'-LT-'expectEmit'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'-LT-'recordEvent'-GT-'", "sorts": [], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortBool", "args": []}, "value": "false"}]}, {"tag": "App", "name": "Lbl'-LT-'isEventExpected'-GT-'", "sorts": [], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortBool", "args": []}, "value": "false"}]}, {"tag": "App", "name": "Lbl'-LT-'checkedTopics'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarCHECKEDTOPICS'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortList", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'checkedData'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarCHECKEDDATA'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortBool", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'expectedEventAddress'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarEXPECTEDEVENTADDRESS'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortAccount", "args": []}}]}]}, {"tag": "App", "name": "Lbl'-LT-'whitelist'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'-LT-'isCallWhitelistActive'-GT-'", "sorts": [], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortBool", "args": []}, "value": "false"}]}, {"tag": "App", "name": "Lbl'-LT-'isStorageWhitelistActive'-GT-'", "sorts": [], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortBool", "args": []}, "value": "false"}]}, {"tag": "App", "name": "Lbl'-LT-'addressSet'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'Stop'Set", "sorts": [], "args": []}]}, {"tag": "App", "name": "Lbl'-LT-'storageSlotSet'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'Stop'Set", "sorts": [], "args": []}]}]}]}]}, {"tag": "App", "name": "Lbl'-LT-'generatedCounter'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarGENERATEDCOUNTER'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}]}]}, "second": {"tag": "And", "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "first": {"tag": "Equals", "argSort": {"tag": "SortApp", "name": "SortBool", "args": []}, "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "first": {"tag": "DV", "sort": {"tag": "SortApp", "name": "SortBool", "args": []}, "value": "true"}, "second": {"tag": "App", "name": "Lbl'Unds-LT-Eqls'Int'Unds'", "sorts": [], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "0"}, {"tag": "EVar", "name": "VarCALLER'Unds'ID", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}]}}, "second": {"tag": "And", "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "first": {"tag": "Equals", "argSort": {"tag": "SortApp", "name": "SortBool", "args": []}, "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "first": {"tag": "DV", "sort": {"tag": "SortApp", "name": "SortBool", "args": []}, "value": "true"}, "second": {"tag": "App", "name": "Lbl'Unds-LT-Eqls'Int'Unds'", "sorts": [], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "0"}, {"tag": "EVar", "name": "VarORIGIN'Unds'ID", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}]}}, "second": {"tag": "And", "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "first": {"tag": "Equals", "argSort": {"tag": "SortApp", "name": "SortBool", "args": []}, "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "first": {"tag": "DV", "sort": {"tag": "SortApp", "name": "SortBool", "args": []}, "value": "true"}, "second": {"tag": "App", "name": "Lbl'Unds-LT-Eqls'Int'Unds'", "sorts": [], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "0"}, {"tag": "EVar", "name": "VarNUMBER'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}]}}, "second": {"tag": "And", "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "first": {"tag": "Equals", "argSort": {"tag": "SortApp", "name": "SortBool", "args": []}, "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "first": {"tag": "DV", "sort": {"tag": "SortApp", "name": "SortBool", "args": []}, "value": "true"}, "second": {"tag": "App", "name": "Lbl'Unds-LT-'Int'Unds'", "sorts": [], "args": [{"tag": "EVar", "name": "VarCALLER'Unds'ID", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}, {"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "1461501637330902918203684832716283019655932542976"}]}}, "second": {"tag": "And", "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "first": {"tag": "Equals", "argSort": {"tag": "SortApp", "name": "SortBool", "args": []}, "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "first": {"tag": "DV", "sort": {"tag": "SortApp", "name": "SortBool", "args": []}, "value": "true"}, "second": {"tag": "App", "name": "Lbl'Unds-LT-'Int'Unds'", "sorts": [], "args": [{"tag": "EVar", "name": "VarORIGIN'Unds'ID", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}, {"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "1461501637330902918203684832716283019655932542976"}]}}, "second": {"tag": "Equals", "argSort": {"tag": "SortApp", "name": "SortBool", "args": []}, "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "first": {"tag": "DV", "sort": {"tag": "SortApp", "name": "SortBool", "args": []}, "value": "true"}, "second": {"tag": "App", "name": "Lbl'Unds-LT-Eqls'Int'Unds'", "sorts": [], "args": [{"tag": "EVar", "name": "VarNUMBER'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}, {"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "57896044618658097711785492504343953926634992332820282019728792003956564819967"}]}}}}}}}}}, "consequent": {"format": "KORE", "version": 1, "term": {"tag": "Exists", "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "var": "VarGENERATEDCOUNTER'Unds'CELL'Unds'5d410f2a", "varSort": {"tag": "SortApp", "name": "SortInt", "args": []}, "arg": {"tag": "Exists", "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "var": "VarSTORAGESLOTSET'Unds'FINAL", "varSort": {"tag": "SortApp", "name": "SortSet", "args": []}, "arg": {"tag": "Exists", "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "var": "VarADDRESSSET'Unds'FINAL", "varSort": {"tag": "SortApp", "name": "SortSet", "args": []}, "arg": {"tag": "Exists", "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "var": "VarISSTORAGEWHITELISTACTIVE'Unds'FINAL", "varSort": {"tag": "SortApp", "name": "SortBool", "args": []}, "arg": {"tag": "Exists", "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "var": "VarISCALLWHITELISTACTIVE'Unds'FINAL", "varSort": {"tag": "SortApp", "name": "SortBool", "args": []}, "arg": {"tag": "Exists", "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "var": "VarEXPECTEDEVENTADDRESS'Unds'CELL'Unds'5d410f2a", "varSort": {"tag": "SortApp", "name": "SortAccount", "args": []}, "arg": {"tag": "Exists", "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "var": "VarCHECKEDDATA'Unds'CELL'Unds'5d410f2a", "varSort": {"tag": "SortApp", "name": "SortBool", "args": []}, "arg": {"tag": "Exists", "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "var": "VarCHECKEDTOPICS'Unds'CELL'Unds'5d410f2a", "varSort": {"tag": "SortApp", "name": "SortList", "args": []}, "arg": {"tag": "Exists", "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "var": "VarISEVENTEXPECTED'Unds'FINAL", "varSort": {"tag": "SortApp", "name": "SortBool", "args": []}, "arg": {"tag": "Exists", "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "var": "VarRECORDEVENT'Unds'FINAL", "varSort": {"tag": "SortApp", "name": "SortBool", "args": []}, "arg": {"tag": "Exists", "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "var": "VarOPCODETYPE'Unds'CELL'Unds'5d410f2a", "varSort": {"tag": "SortApp", "name": "SortOpcodeType", "args": []}, "arg": {"tag": "Exists", "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "var": "VarEXPECTEDDATA'Unds'CELL'Unds'5d410f2a", "varSort": {"tag": "SortApp", "name": "SortBytes", "args": []}, "arg": {"tag": "Exists", "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "var": "VarEXPECTEDVALUE'Unds'CELL'Unds'5d410f2a", "varSort": {"tag": "SortApp", "name": "SortInt", "args": []}, "arg": {"tag": "Exists", "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "var": "VarEXPECTEDADDRESS'Unds'CELL'Unds'5d410f2a", "varSort": {"tag": "SortApp", "name": "SortAccount", "args": []}, "arg": {"tag": "Exists", "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "var": "VarISOPCODEEXPECTED'Unds'FINAL", "varSort": {"tag": "SortApp", "name": "SortBool", "args": []}, "arg": {"tag": "Exists", "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "var": "VarEXPECTEDDEPTH'Unds'CELL'Unds'5d410f2a", "varSort": {"tag": "SortApp", "name": "SortInt", "args": []}, "arg": {"tag": "Exists", "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "var": "VarEXPECTEDREASON'Unds'CELL'Unds'5d410f2a", "varSort": {"tag": "SortApp", "name": "SortBytes", "args": []}, "arg": {"tag": "Exists", "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "var": "VarISREVERTEXPECTED'Unds'FINAL", "varSort": {"tag": "SortApp", "name": "SortBool", "args": []}, "arg": {"tag": "Exists", "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "var": "VarSINGLECALL'Unds'CELL'Unds'5d410f2a", "varSort": {"tag": "SortApp", "name": "SortBool", "args": []}, "arg": {"tag": "Exists", "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "var": "VarDEPTH'Unds'CELL'Unds'5d410f2a", "varSort": {"tag": "SortApp", "name": "SortInt", "args": []}, "arg": {"tag": "Exists", "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "var": "VarACTIVE'Unds'CELL'Unds'5d410f2a", "varSort": {"tag": "SortApp", "name": "SortBool", "args": []}, "arg": {"tag": "Exists", "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "var": "VarNEWORIGIN'Unds'CELL'Unds'5d410f2a", "varSort": {"tag": "SortApp", "name": "SortAccount", "args": []}, "arg": {"tag": "Exists", "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "var": "VarNEWCALLER'Unds'CELL'Unds'5d410f2a", "varSort": {"tag": "SortApp", "name": "SortAccount", "args": []}, "arg": {"tag": "Exists", "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "var": "VarPREVORIGIN'Unds'CELL'Unds'5d410f2a", "varSort": {"tag": "SortApp", "name": "SortAccount", "args": []}, "arg": {"tag": "Exists", "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "var": "VarPREVCALLER'Unds'CELL'Unds'5d410f2a", "varSort": {"tag": "SortApp", "name": "SortAccount", "args": []}, "arg": {"tag": "Exists", "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "var": "VarMESSAGES'Unds'CELL'Unds'5d410f2a", "varSort": {"tag": "SortApp", "name": "SortMessageCellMap", "args": []}, "arg": {"tag": "Exists", "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "var": "VarTXPENDING'Unds'CELL'Unds'5d410f2a", "varSort": {"tag": "SortApp", "name": "SortList", "args": []}, "arg": {"tag": "Exists", "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "var": "VarTXORDER'Unds'CELL'Unds'5d410f2a", "varSort": {"tag": "SortApp", "name": "SortList", "args": []}, "arg": {"tag": "Exists", "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "var": "VarACCOUNTS'Unds'FINAL", "varSort": {"tag": "SortApp", "name": "SortAccountCellMap", "args": []}, "arg": {"tag": "Exists", "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "var": "VarCHEATCODE'Unds'STORAGE'Unds'FINAL", "varSort": {"tag": "SortApp", "name": "SortMap", "args": []}, "arg": {"tag": "Exists", "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "var": "VarACCT'Unds'NONCE'Unds'FINAL", "varSort": {"tag": "SortApp", "name": "SortInt", "args": []}, "arg": {"tag": "Exists", "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "var": "VarACCT'Unds'ORIGSTORAGE'Unds'FINAL", "varSort": {"tag": "SortApp", "name": "SortMap", "args": []}, "arg": {"tag": "Exists", "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "var": "VarACCT'Unds'STORAGE'Unds'FINAL", "varSort": {"tag": "SortApp", "name": "SortMap", "args": []}, "arg": {"tag": "Exists", "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "var": "VarACCT'Unds'BALANCE'Unds'FINAL", "varSort": {"tag": "SortApp", "name": "SortInt", "args": []}, "arg": {"tag": "Exists", "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "var": "VarCHAINID'Unds'CELL'Unds'5d410f2a", "varSort": {"tag": "SortApp", "name": "SortInt", "args": []}, "arg": {"tag": "Exists", "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "var": "VarOMMERBLOCKHEADERS'Unds'CELL'Unds'5d410f2a", "varSort": {"tag": "SortApp", "name": "SortJSON", "args": []}, "arg": {"tag": "Exists", "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "var": "VarBASEFEE'Unds'CELL'Unds'5d410f2a", "varSort": {"tag": "SortApp", "name": "SortInt", "args": []}, "arg": {"tag": "Exists", "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "var": "VarBLOCKNONCE'Unds'CELL'Unds'5d410f2a", "varSort": {"tag": "SortApp", "name": "SortInt", "args": []}, "arg": {"tag": "Exists", "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "var": "VarMIXHASH'Unds'CELL'Unds'5d410f2a", "varSort": {"tag": "SortApp", "name": "SortInt", "args": []}, "arg": {"tag": "Exists", "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "var": "VarEXTRADATA'Unds'CELL'Unds'5d410f2a", "varSort": {"tag": "SortApp", "name": "SortBytes", "args": []}, "arg": {"tag": "Exists", "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "var": "VarTIMESTAMP'Unds'CELL'Unds'5d410f2a", "varSort": {"tag": "SortApp", "name": "SortInt", "args": []}, "arg": {"tag": "Exists", "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "var": "VarGASUSED'Unds'CELL'Unds'5d410f2a", "varSort": {"tag": "SortApp", "name": "SortGas", "args": []}, "arg": {"tag": "Exists", "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "var": "VarGASLIMIT'Unds'CELL'Unds'5d410f2a", "varSort": {"tag": "SortApp", "name": "SortInt", "args": []}, "arg": {"tag": "Exists", "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "var": "VarNUMBER'Unds'CELL'Unds'5d410f2a", "varSort": {"tag": "SortApp", "name": "SortInt", "args": []}, "arg": {"tag": "Exists", "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "var": "VarDIFFICULTY'Unds'CELL'Unds'5d410f2a", "varSort": {"tag": "SortApp", "name": "SortInt", "args": []}, "arg": {"tag": "Exists", "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "var": "VarLOGSBLOOM'Unds'CELL'Unds'5d410f2a", "varSort": {"tag": "SortApp", "name": "SortBytes", "args": []}, "arg": {"tag": "Exists", "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "var": "VarRECEIPTSROOT'Unds'CELL'Unds'5d410f2a", "varSort": {"tag": "SortApp", "name": "SortInt", "args": []}, "arg": {"tag": "Exists", "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "var": "VarTRANSACTIONSROOT'Unds'CELL'Unds'5d410f2a", "varSort": {"tag": "SortApp", "name": "SortInt", "args": []}, "arg": {"tag": "Exists", "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "var": "VarSTATEROOT'Unds'CELL'Unds'5d410f2a", "varSort": {"tag": "SortApp", "name": "SortInt", "args": []}, "arg": {"tag": "Exists", "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "var": "VarCOINBASE'Unds'CELL'Unds'5d410f2a", "varSort": {"tag": "SortApp", "name": "SortInt", "args": []}, "arg": {"tag": "Exists", "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "var": "VarOMMERSHASH'Unds'CELL'Unds'5d410f2a", "varSort": {"tag": "SortApp", "name": "SortInt", "args": []}, "arg": {"tag": "Exists", "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "var": "VarPREVIOUSHASH'Unds'CELL'Unds'5d410f2a", "varSort": {"tag": "SortApp", "name": "SortInt", "args": []}, "arg": {"tag": "Exists", "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "var": "VarBLOCKHASHES'Unds'CELL'Unds'5d410f2a", "varSort": {"tag": "SortApp", "name": "SortList", "args": []}, "arg": {"tag": "Exists", "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "var": "VarORIGIN'Unds'CELL'Unds'5d410f2a", "varSort": {"tag": "SortApp", "name": "SortAccount", "args": []}, "arg": {"tag": "Exists", "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "var": "VarGASPRICE'Unds'CELL'Unds'5d410f2a", "varSort": {"tag": "SortApp", "name": "SortInt", "args": []}, "arg": {"tag": "Exists", "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "var": "VarACCESSEDSTORAGE'Unds'CELL'Unds'5d410f2a", "varSort": {"tag": "SortApp", "name": "SortMap", "args": []}, "arg": {"tag": "Exists", "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "var": "VarACCESSEDACCOUNTS'Unds'CELL'Unds'5d410f2a", "varSort": {"tag": "SortApp", "name": "SortSet", "args": []}, "arg": {"tag": "Exists", "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "var": "VarREFUND'Unds'CELL'Unds'5d410f2a", "varSort": {"tag": "SortApp", "name": "SortInt", "args": []}, "arg": {"tag": "Exists", "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "var": "VarLOG'Unds'CELL'Unds'5d410f2a", "varSort": {"tag": "SortApp", "name": "SortList", "args": []}, "arg": {"tag": "Exists", "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "var": "VarSELFDESTRUCT'Unds'CELL'Unds'5d410f2a", "varSort": {"tag": "SortApp", "name": "SortSet", "args": []}, "arg": {"tag": "Exists", "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "var": "VarCALLDEPTH'Unds'CELL'Unds'5d410f2a", "varSort": {"tag": "SortApp", "name": "SortInt", "args": []}, "arg": {"tag": "Exists", "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "var": "VarSTATIC'Unds'CELL'Unds'5d410f2a", "varSort": {"tag": "SortApp", "name": "SortBool", "args": []}, "arg": {"tag": "Exists", "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "var": "VarCALLGAS'Unds'CELL'Unds'5d410f2a", "varSort": {"tag": "SortApp", "name": "SortGas", "args": []}, "arg": {"tag": "Exists", "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "var": "VarMEMORYUSED'Unds'CELL'Unds'5d410f2a", "varSort": {"tag": "SortApp", "name": "SortInt", "args": []}, "arg": {"tag": "Exists", "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "var": "VarGAS'Unds'CELL'Unds'5d410f2a", "varSort": {"tag": "SortApp", "name": "SortGas", "args": []}, "arg": {"tag": "Exists", "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "var": "VarPC'Unds'CELL'Unds'5d410f2a", "varSort": {"tag": "SortApp", "name": "SortInt", "args": []}, "arg": {"tag": "Exists", "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "var": "VarLOCALMEM'Unds'CELL'Unds'5d410f2a", "varSort": {"tag": "SortApp", "name": "SortBytes", "args": []}, "arg": {"tag": "Exists", "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "var": "VarWORDSTACK'Unds'CELL'Unds'5d410f2a", "varSort": {"tag": "SortApp", "name": "SortWordStack", "args": []}, "arg": {"tag": "Exists", "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "var": "VarCALLVALUE'Unds'CELL'Unds'5d410f2a", "varSort": {"tag": "SortApp", "name": "SortInt", "args": []}, "arg": {"tag": "Exists", "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "var": "VarCALLDATA'Unds'CELL'Unds'5d410f2a", "varSort": {"tag": "SortApp", "name": "SortBytes", "args": []}, "arg": {"tag": "Exists", "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "var": "VarCALLER'Unds'CELL'Unds'5d410f2a", "varSort": {"tag": "SortApp", "name": "SortAccount", "args": []}, "arg": {"tag": "Exists", "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "var": "VarJUMPDESTS'Unds'CELL'Unds'5d410f2a", "varSort": {"tag": "SortApp", "name": "SortSet", "args": []}, "arg": {"tag": "Exists", "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "var": "VarPROGRAM'Unds'CELL'Unds'5d410f2a", "varSort": {"tag": "SortApp", "name": "SortBytes", "args": []}, "arg": {"tag": "Exists", "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "var": "VarTOUCHEDACCOUNTS'Unds'CELL'Unds'5d410f2a", "varSort": {"tag": "SortApp", "name": "SortSet", "args": []}, "arg": {"tag": "Exists", "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "var": "VarINTERIMSTATES'Unds'CELL'Unds'5d410f2a", "varSort": {"tag": "SortApp", "name": "SortList", "args": []}, "arg": {"tag": "Exists", "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "var": "VarCALLSTACK'Unds'CELL'Unds'5d410f2a", "varSort": {"tag": "SortApp", "name": "SortList", "args": []}, "arg": {"tag": "Exists", "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "var": "VarSTATUSCODE'Unds'FINAL", "varSort": {"tag": "SortApp", "name": "SortStatusCode", "args": []}, "arg": {"tag": "Exists", "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "var": "VarOUTPUT'Unds'CELL'Unds'5d410f2a", "varSort": {"tag": "SortApp", "name": "SortBytes", "args": []}, "arg": {"tag": "Exists", "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "var": "VarSCHEDULE'Unds'CELL'Unds'5d410f2a", "varSort": {"tag": "SortApp", "name": "SortSchedule", "args": []}, "arg": {"tag": "Exists", "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "var": "VarMODE'Unds'CELL'Unds'5d410f2a", "varSort": {"tag": "SortApp", "name": "SortMode", "args": []}, "arg": {"tag": "Exists", "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "var": "VarEXIT'Unds'CODE'Unds'CELL'Unds'5d410f2a", "varSort": {"tag": "SortApp", "name": "SortInt", "args": []}, "arg": {"tag": "And", "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "first": {"tag": "App", "name": "Lbl'-LT-'generatedTop'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'-LT-'foundry'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'-LT-'kevm'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'-LT-'k'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "kseq", "sorts": [], "args": [{"tag": "App", "name": "Lbl'Hash'halt'Unds'EVM'Unds'KItem", "sorts": [], "args": []}, {"tag": "EVar", "name": "VarCONTINUATION", "sort": {"tag": "SortApp", "name": "SortK", "args": []}}]}]}, {"tag": "App", "name": "Lbl'-LT-'exit-code'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarEXIT'Unds'CODE'Unds'CELL'Unds'5d410f2a", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'mode'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarMODE'Unds'CELL'Unds'5d410f2a", "sort": {"tag": "SortApp", "name": "SortMode", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'schedule'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarSCHEDULE'Unds'CELL'Unds'5d410f2a", "sort": {"tag": "SortApp", "name": "SortSchedule", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'ethereum'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'-LT-'evm'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'-LT-'output'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarOUTPUT'Unds'CELL'Unds'5d410f2a", "sort": {"tag": "SortApp", "name": "SortBytes", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'statusCode'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarSTATUSCODE'Unds'FINAL", "sort": {"tag": "SortApp", "name": "SortStatusCode", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'callStack'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarCALLSTACK'Unds'CELL'Unds'5d410f2a", "sort": {"tag": "SortApp", "name": "SortList", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'interimStates'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarINTERIMSTATES'Unds'CELL'Unds'5d410f2a", "sort": {"tag": "SortApp", "name": "SortList", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'touchedAccounts'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarTOUCHEDACCOUNTS'Unds'CELL'Unds'5d410f2a", "sort": {"tag": "SortApp", "name": "SortSet", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'callState'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'-LT-'program'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarPROGRAM'Unds'CELL'Unds'5d410f2a", "sort": {"tag": "SortApp", "name": "SortBytes", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'jumpDests'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarJUMPDESTS'Unds'CELL'Unds'5d410f2a", "sort": {"tag": "SortApp", "name": "SortSet", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'id'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortAccount", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "728815563385977040452943777879061427756277306518"}]}]}, {"tag": "App", "name": "Lbl'-LT-'caller'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarCALLER'Unds'CELL'Unds'5d410f2a", "sort": {"tag": "SortApp", "name": "SortAccount", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'callData'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarCALLDATA'Unds'CELL'Unds'5d410f2a", "sort": {"tag": "SortApp", "name": "SortBytes", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'callValue'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarCALLVALUE'Unds'CELL'Unds'5d410f2a", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'wordStack'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarWORDSTACK'Unds'CELL'Unds'5d410f2a", "sort": {"tag": "SortApp", "name": "SortWordStack", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'localMem'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarLOCALMEM'Unds'CELL'Unds'5d410f2a", "sort": {"tag": "SortApp", "name": "SortBytes", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'pc'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarPC'Unds'CELL'Unds'5d410f2a", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'gas'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarGAS'Unds'CELL'Unds'5d410f2a", "sort": {"tag": "SortApp", "name": "SortGas", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'memoryUsed'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarMEMORYUSED'Unds'CELL'Unds'5d410f2a", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'callGas'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarCALLGAS'Unds'CELL'Unds'5d410f2a", "sort": {"tag": "SortApp", "name": "SortGas", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'static'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarSTATIC'Unds'CELL'Unds'5d410f2a", "sort": {"tag": "SortApp", "name": "SortBool", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'callDepth'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarCALLDEPTH'Unds'CELL'Unds'5d410f2a", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}]}]}, {"tag": "App", "name": "Lbl'-LT-'substate'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'-LT-'selfDestruct'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarSELFDESTRUCT'Unds'CELL'Unds'5d410f2a", "sort": {"tag": "SortApp", "name": "SortSet", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'log'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarLOG'Unds'CELL'Unds'5d410f2a", "sort": {"tag": "SortApp", "name": "SortList", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'refund'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarREFUND'Unds'CELL'Unds'5d410f2a", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'accessedAccounts'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarACCESSEDACCOUNTS'Unds'CELL'Unds'5d410f2a", "sort": {"tag": "SortApp", "name": "SortSet", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'accessedStorage'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarACCESSEDSTORAGE'Unds'CELL'Unds'5d410f2a", "sort": {"tag": "SortApp", "name": "SortMap", "args": []}}]}]}, {"tag": "App", "name": "Lbl'-LT-'gasPrice'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarGASPRICE'Unds'CELL'Unds'5d410f2a", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'origin'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarORIGIN'Unds'CELL'Unds'5d410f2a", "sort": {"tag": "SortApp", "name": "SortAccount", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'blockhashes'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarBLOCKHASHES'Unds'CELL'Unds'5d410f2a", "sort": {"tag": "SortApp", "name": "SortList", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'block'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'-LT-'previousHash'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarPREVIOUSHASH'Unds'CELL'Unds'5d410f2a", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'ommersHash'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarOMMERSHASH'Unds'CELL'Unds'5d410f2a", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'coinbase'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarCOINBASE'Unds'CELL'Unds'5d410f2a", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'stateRoot'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarSTATEROOT'Unds'CELL'Unds'5d410f2a", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'transactionsRoot'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarTRANSACTIONSROOT'Unds'CELL'Unds'5d410f2a", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'receiptsRoot'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarRECEIPTSROOT'Unds'CELL'Unds'5d410f2a", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'logsBloom'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarLOGSBLOOM'Unds'CELL'Unds'5d410f2a", "sort": {"tag": "SortApp", "name": "SortBytes", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'difficulty'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarDIFFICULTY'Unds'CELL'Unds'5d410f2a", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'number'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarNUMBER'Unds'CELL'Unds'5d410f2a", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'gasLimit'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarGASLIMIT'Unds'CELL'Unds'5d410f2a", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'gasUsed'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarGASUSED'Unds'CELL'Unds'5d410f2a", "sort": {"tag": "SortApp", "name": "SortGas", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'timestamp'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarTIMESTAMP'Unds'CELL'Unds'5d410f2a", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'extraData'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarEXTRADATA'Unds'CELL'Unds'5d410f2a", "sort": {"tag": "SortApp", "name": "SortBytes", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'mixHash'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarMIXHASH'Unds'CELL'Unds'5d410f2a", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'blockNonce'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarBLOCKNONCE'Unds'CELL'Unds'5d410f2a", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'baseFee'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarBASEFEE'Unds'CELL'Unds'5d410f2a", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'ommerBlockHeaders'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarOMMERBLOCKHEADERS'Unds'CELL'Unds'5d410f2a", "sort": {"tag": "SortApp", "name": "SortJSON", "args": []}}]}]}]}, {"tag": "App", "name": "Lbl'-LT-'network'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'-LT-'chainID'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarCHAINID'Unds'CELL'Unds'5d410f2a", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'accounts'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'Unds'AccountCellMap'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblAccountCellMapItem", "sorts": [], "args": [{"tag": "App", "name": "Lbl'-LT-'acctID'-GT-'", "sorts": [], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "728815563385977040452943777879061427756277306518"}]}, {"tag": "App", "name": "Lbl'-LT-'account'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'-LT-'acctID'-GT-'", "sorts": [], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "728815563385977040452943777879061427756277306518"}]}, {"tag": "App", "name": "Lbl'-LT-'balance'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarACCT'Unds'BALANCE'Unds'FINAL", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'code'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortBytes", "args": []}, {"tag": "SortApp", "name": "SortAccountCode", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortBytes", "args": []}, "value": "`\u0080`@R4\u0080\u0015a\u0000\u0010W`\u0000\u0080\u00fd[P`\u00046\u0010a\u0001\u0000W`\u00005`\u00e0\u001c\u0080c\u009a\u0013\u00b4`\u0011a\u0000\u0097W\u0080c\u00ea\u00ef=\u0014\u0011a\u0000fW\u0080c\u00ea\u00ef=\u0014\u0014a\u0001\u00c2W\u0080c\u00ec\u0084m\u00a6\u0014a\u0001\u00d5W\u0080c\u00f8\u00cc\u00bfG\u0014a\u0001\u00ddW\u0080c\u00fav&\u00d4\u0014a\u0001\u00f0W`\u0000\u0080\u00fd[\u0080c\u009a\u0013\u00b4`\u0014a\u0001\u0087W\u0080c\u00b1\u00ecy\u0081\u0014a\u0001\u009aW\u0080c\u00baAO\u00a6\u0014a\u0001\u00a2W\u0080c\u00d3P o\u0014a\u0001\u00baW`\u0000\u0080\u00fd[\u0080cN\u0018\u00fd\u000b\u0011a\u0000\u00d3W\u0080cN\u0018\u00fd\u000b\u0014a\u0001QW\u0080c_Ev\u001c\u0014a\u0001dW\u0080c}\u00bb\u000f\u00bf\u0014a\u0001lW\u0080c\u008e\u00af\u00adc\u0014a\u0001\u007fW`\u0000\u0080\u00fd[\u0080c\u001f\u0098\u0094\u00c2\u0014a\u0001\u0005W\u0080c0!\u0088|\u0014a\u0001\u000fW\u0080c:v\u0084c\u0014a\u0001\u0017W\u0080c?\u00a6\u00f8P\u0014a\u0001IW[`\u0000\u0080\u00fd[a\u0001\ra\u0001\u00fdV[\u0000[a\u0001\ra\u0002\u007fV[a\u0001,`\u0000\u0080Q` a\u00140\u00839\u0081Q\u0091R\u0081V[`@Q`\u0001`\u0001`\u00a0\u001b\u0003\u0090\u0091\u0016\u0081R` \u0001[`@Q\u0080\u0091\u0003\u0090\u00f3[a\u0001\ra\u0003JV[a\u0001\ra\u0001_6`\u0004a\u0010\u00e8V[a\u0003\u00d5V[a\u0001\ra\u0005\u00bbV[a\u0001\ra\u0001z6`\u0004a\u0011\fV[a\u0006\u00afV[a\u0001\ra\u0007}V[a\u0001\ra\u0001\u00956`\u0004a\u0011~V[a\b\u0006V[a\u0001\ra\b\u0083V[a\u0001\u00aaa\t\u001eV[`@Q\u0090\u0015\u0015\u0081R` \u0001a\u0001@V[a\u0001\ra\n=V[a\u0001\ra\u0001\u00d06`\u0004a\u0011\u0097V[a\nrV[a\u0001\ra\f\u00d7V[`\u0000Ta\u0001\u00aa\u0090b\u0001\u0000\u0000\u0090\u0004`\u00ff\u0016\u0081V[`\u0000Ta\u0001\u00aa\u0090`\u00ff\u0016\u0081V[`@Qc\u00c8\u008a^m`\u00e0\u001b\u0081Ra\u0001\u00f9`\u0004\u0082\u0001Ra\u0001\u0000`$\u0082\u0001R`\u0000\u0080Q` a\u00140\u00839\u0081Q\u0091R\u0090c\u00c8\u008a^m\u0090`D\u0001`\u0000`@Q\u0080\u0083\u0003\u0081`\u0000\u0087\u0080;\u0015\u0080\u0015a\u0002MW`\u0000\u0080\u00fd[PZ\u00f1\u0015\u0080\u0015a\u0002aW=`\u0000\u0080>=`\u0000\u00fd[PPPPa\u0002}a\u0001\u00f9`\u0001`\u0001`\u00a0\u001b\u0003\u00161a\u0001\u0000a\reV[V[`@\u0080Q\u0080\u0082\u0001\u0082R`\u001b\u0081R\u007fthis should be EVM bytecode\u0000\u0000\u0000\u0000\u0000` \u0082\u0001R\u0090QcZkc\u00c1`\u00e1\u001b\u0081R`\u0000\u0080Q` a\u00140\u00839\u0081Q\u0091R\u0090c\u00b4\u00d6\u00c7\u0082\u0090a\u0002\u00e5\u0090`|\u0090\u0085\u0090`\u0004\u0001a\u0012\u001cV[`\u0000`@Q\u0080\u0083\u0003\u0081`\u0000\u0087\u0080;\u0015\u0080\u0015a\u0002\u00ffW`\u0000\u0080\u00fd[PZ\u00f1\u0015\u0080\u0015a\u0003\u0013W=`\u0000\u0080>=`\u0000\u00fd[PPPPa\u0003G`|`\u0001`\u0001`\u00a0\u001b\u0003\u0016\u0080;\u0080` \u0001`@Q\u0090\u0081\u0001`@R\u0081\u0081R`\u0000\u0090\u0080` \u0001\u0090\u0093<\u0082a\u000eTV[PV[`@Qc-\u00035\u00ab`\u00e0\u001b\u0081R`\u0000`\u0004\u0082\u0001\u0081\u0090R\u0090`\u0000\u0080Q` a\u00140\u00839\u0081Q\u0091R\u0090c-\u00035\u00ab\u0090`$\u0001[` `@Q\u0080\u0083\u0003\u0081`\u0000\u0087Z\u00f1\u0015\u0080\u0015a\u0003\u009aW=`\u0000\u0080>=`\u0000\u00fd[PPPP`@Q=`\u001f\u0019`\u001f\u0082\u0001\u0016\u0082\u0001\u0080`@RP\u0081\u0001\u0090a\u0003\u00be\u0091\u0090a\u0012HV[\u0090Pa\u0003G\u0081g\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff\u0016`\na\reV[`@Qc-\u00035\u00ab`\u00e0\u001b\u0081R0`\u0004\u0082\u0001R`\u0000\u0090`\u0000\u0080Q` a\u00140\u00839\u0081Q\u0091R\u0090c-\u00035\u00ab\u0090`$\u0001` `@Q\u0080\u0083\u0003\u0081`\u0000\u0087Z\u00f1\u0015\u0080\u0015a\u0004#W=`\u0000\u0080>=`\u0000\u00fd[PPPP`@Q=`\u001f\u0019`\u001f\u0082\u0001\u0016\u0082\u0001\u0080`@RP\u0081\u0001\u0090a\u0004G\u0091\u0090a\u0012HV[`@Qc&1\u00f2\u00b1`\u00e1\u001b\u0081Rg\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff\u0080\u0083\u0016\u0090\u0085\u0016\u0011`\u0004\u0082\u0001R\u0090\u0091P`\u0000\u0080Q` a\u00140\u00839\u0081Q\u0091R\u0090cLc\u00e5b\u0090`$\u0001`\u0000`@Q\u0080\u0083\u0003\u0081`\u0000\u0087\u0080;\u0015\u0080\u0015a\u0004\u009fW`\u0000\u0080\u00fd[PZ\u00f1\u0015\u0080\u0015a\u0004\u00b3W=`\u0000\u0080>=`\u0000\u00fd[PP`@Qc\u00f8\u00e1\u008bW`\u00e0\u001b\u0081R0`\u0004\u0082\u0001Rg\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff\u0085\u0016`$\u0082\u0001R`\u0000\u0080Q` a\u00140\u00839\u0081Q\u0091R\u0092Pc\u00f8\u00e1\u008bW\u0091P`D\u0001`\u0000`@Q\u0080\u0083\u0003\u0081`\u0000\u0087\u0080;\u0015\u0080\u0015a\u0005\rW`\u0000\u0080\u00fd[PZ\u00f1\u0015\u0080\u0015a\u0005!W=`\u0000\u0080>=`\u0000\u00fd[PP`@Qc-\u00035\u00ab`\u00e0\u001b\u0081R0`\u0004\u0082\u0001Rg\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff\u0085\u0016\u0092P`\u0000\u0080Q` a\u00140\u00839\u0081Q\u0091R\u0091Pc-\u00035\u00ab\u0090`$\u0001` `@Q\u0080\u0083\u0003\u0081`\u0000\u0087Z\u00f1\u0015\u0080\u0015a\u0005|W=`\u0000\u0080>=`\u0000\u00fd[PPPP`@Q=`\u001f\u0019`\u001f\u0082\u0001\u0016\u0082\u0001\u0080`@RP\u0081\u0001\u0090a\u0005\u00a0\u0091\u0090a\u0012HV[g\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff\u0016\u0014a\u0005\u00b7Wa\u0005\u00b7a\u0012eV[PPV[`@Qc\u00f8\u00e1\u008bW`\u00e0\u001b\u0081R0`\u0004\u0082\u0001R`d`$\u0082\u0001R`\u0000\u0080Q` a\u00140\u00839\u0081Q\u0091R\u0090c\u00f8\u00e1\u008bW\u0090`D\u0001`\u0000`@Q\u0080\u0083\u0003\u0081`\u0000\u0087\u0080;\u0015\u0080\u0015a\u0006\bW`\u0000\u0080\u00fd[PZ\u00f1\u0015\u0080\u0015a\u0006\u001cW=`\u0000\u0080>=`\u0000\u00fd[PP`@Qc-\u00035\u00ab`\u00e0\u001b\u0081R0`\u0004\u0082\u0001R`\u0000\u0092P`\u0000\u0080Q` a\u00140\u00839\u0081Q\u0091R\u0091Pc-\u00035\u00ab\u0090`$\u0001[` `@Q\u0080\u0083\u0003\u0081`\u0000\u0087Z\u00f1\u0015\u0080\u0015a\u0006oW=`\u0000\u0080>=`\u0000\u00fd[PPPP`@Q=`\u001f\u0019`\u001f\u0082\u0001\u0016\u0082\u0001\u0080`@RP\u0081\u0001\u0090a\u0006\u0093\u0091\u0090a\u0012HV[\u0090P\u0080g\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff\u0016`d\u0014a\u0003GWa\u0003Ga\u0012eV[`@QcZkc\u00c1`\u00e1\u001b\u0081R`\u0000\u0080Q` a\u00140\u00839\u0081Q\u0091R\u0090c\u00b4\u00d6\u00c7\u0082\u0090a\u0006\u00e5\u0090`|\u0090\u0086\u0090\u0086\u0090`\u0004\u0001a\u0012{V[`\u0000`@Q\u0080\u0083\u0003\u0081`\u0000\u0087\u0080;\u0015\u0080\u0015a\u0006\u00ffW`\u0000\u0080\u00fd[PZ\u00f1\u0015\u0080\u0015a\u0007\u0013W=`\u0000\u0080>=`\u0000\u00fd[PPPPa\u0005\u00b7`|`\u0001`\u0001`\u00a0\u001b\u0003\u0016\u0080;\u0080` \u0001`@Q\u0090\u0081\u0001`@R\u0081\u0081R`\u0000\u0090\u0080` \u0001\u0090\u0093<\u0083\u0083\u0080\u0080`\u001f\u0001` \u0080\u0091\u0004\u0002` \u0001`@Q\u0090\u0081\u0001`@R\u0080\u0093\u0092\u0091\u0090\u0081\u0081R` \u0001\u0083\u0083\u0080\u0082\u00847`\u0000\u0092\u0001\u0091\u0090\u0091RPa\u000eT\u0092PPPV[`@Qc-\u00035\u00ab`\u00e0\u001b\u0081R0`\u0004\u0082\u0001R`\u0000\u0090`\u0000\u0080Q` a\u00140\u00839\u0081Q\u0091R\u0090c-\u00035\u00ab\u0090`$\u0001` `@Q\u0080\u0083\u0003\u0081`\u0000\u0087Z\u00f1\u0015\u0080\u0015a\u0007\u00cbW=`\u0000\u0080>=`\u0000\u00fd[PPPP`@Q=`\u001f\u0019`\u001f\u0082\u0001\u0016\u0082\u0001\u0080`@RP\u0081\u0001\u0090a\u0007\u00ef\u0091\u0090a\u0012HV[\u0090Pa\u0003G\u0081g\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff\u0016`\u0001a\reV[`@Qc\u00c8\u008a^m`\u00e0\u001b\u0081Ra\u0001H`\u0004\u0082\u0001R`$\u0081\u0001\u0082\u0090R`\u0000\u0080Q` a\u00140\u00839\u0081Q\u0091R\u0090c\u00c8\u008a^m\u0090`D\u0001`\u0000`@Q\u0080\u0083\u0003\u0081`\u0000\u0087\u0080;\u0015\u0080\u0015a\bUW`\u0000\u0080\u00fd[PZ\u00f1\u0015\u0080\u0015a\biW=`\u0000\u0080>=`\u0000\u00fd[PPPPa\u0003Ga\u0001H`\u0001`\u0001`\u00a0\u001b\u0003\u00161\u0082a\reV[`@Qc\u00f8\u00e1\u008bW`\u00e0\u001b\u0081R`d`\u0004\u0082\u0001\u0081\u0090R`$\u0082\u0001R`\u0000\u0080Q` a\u00140\u00839\u0081Q\u0091R\u0090c\u00f8\u00e1\u008bW\u0090`D\u0001`\u0000`@Q\u0080\u0083\u0003\u0081`\u0000\u0087\u0080;\u0015\u0080\u0015a\b\u00d1W`\u0000\u0080\u00fd[PZ\u00f1\u0015\u0080\u0015a\b\u00e5W=`\u0000\u0080>=`\u0000\u00fd[PP`@Qc-\u00035\u00ab`\u00e0\u001b\u0081R`d`\u0004\u0082\u0001R`\u0000\u0092P`\u0000\u0080Q` a\u00140\u00839\u0081Q\u0091R\u0091Pc-\u00035\u00ab\u0090`$\u0001a\u0006PV[`\u0000\u0080Ta\u0001\u0000\u0090\u0004`\u00ff\u0016\u0015a\t>WP`\u0000Ta\u0001\u0000\u0090\u0004`\u00ff\u0016\u0090V[`\u0000`\u0000\u0080Q` a\u00140\u00839\u0081Q\u0091R;\u0015a\n8W`@\u0080Q`\u0000\u0080Q` a\u00140\u00839\u0081Q\u0091R` \u0082\u0001\u0081\u0090Re\u0019\u0098Z[\u0019Y`\u00d2\u001b\u0082\u0084\u0001R\u0082Q\u0080\u0083\u0003\u0084\u0001\u0081R``\u0083\u0001\u0090\u0093R`\u0000\u0092\u0090\u0091a\t\u00c0\u0091\u007ff\u007f\u009dp\u00caA\u001dp\u00ea\u00d5\r\u008d\\\"\u0007\r\u00af\u00c3j\u00d7_=\u00cf^r7\u00b2*\u00de\u009a\u00ec\u00c4\u0091`\u0080\u0001a\u0012\u00bbV[`@\u0080Q`\u001f\u0019\u0081\u0084\u0003\u0001\u0081R\u0090\u0082\u0090Ra\t\u00da\u0091a\u0012\u00ecV[`\u0000`@Q\u0080\u0083\u0003\u0081`\u0000\u0086Z\u00f1\u0091PP=\u0080`\u0000\u0081\u0014a\n\u0017W`@Q\u0091P`\u001f\u0019`?=\u0001\u0016\u0082\u0001`@R=\u0082R=`\u0000` \u0084\u0001>a\n\u001cV[``\u0091P[P\u0091PP\u0080\u0080` \u0001\u0090Q\u0081\u0001\u0090a\n4\u0091\u0090a\u0013\bV[\u0091PP[\u0091\u0090PV[`@Qc-\u00035\u00ab`\u00e0\u001b\u0081R`d`\u0004\u0082\u0001R`\u0000\u0090`\u0000\u0080Q` a\u00140\u00839\u0081Q\u0091R\u0090c-\u00035\u00ab\u0090`$\u0001a\u0003{V[`@Qc&1\u00f2\u00b1`\u00e1\u001b\u0081R`\u0000\u0080Q` a\u00140\u00839\u0081Q\u0091R`\u0001`\u0001`\u00a0\u001b\u0003\u0083\u0016\u0081\u0014\u0015`\u0004\u0083\u0001R\u0090cLc\u00e5b\u0090`$\u0001`\u0000`@Q\u0080\u0083\u0003\u0081`\u0000\u0087\u0080;\u0015\u0080\u0015a\n\u00c4W`\u0000\u0080\u00fd[PZ\u00f1\u0015\u0080\u0015a\n\u00d8W=`\u0000\u0080>=`\u0000\u00fd[PP`@Qc&1\u00f2\u00b1`\u00e1\u001b\u0081R0`\u0001`\u0001`\u00a0\u001b\u0003\u0085\u0016\u0014\u0015`\u0004\u0082\u0001R`\u0000\u0080Q` a\u00140\u00839\u0081Q\u0091R\u0092PcLc\u00e5b\u0091P`$\u0001`\u0000`@Q\u0080\u0083\u0003\u0081`\u0000\u0087\u0080;\u0015\u0080\u0015a\u000b.W`\u0000\u0080\u00fd[PZ\u00f1\u0015\u0080\u0015a\u000bBW=`\u0000\u0080>=`\u0000\u00fd[PP`@Qc&1\u00f2\u00b1`\u00e1\u001b\u0081Rs?\u00ab\u0018F\"\u00dc\u0019\u00b6\u0010\u0093I\u00b9H\u0011I;\u00f2\u00a4Sb`\u0001`\u0001`\u00a0\u001b\u0003\u0085\u0016\u0014\u0015`\u0004\u0082\u0001R`\u0000\u0080Q` a\u00140\u00839\u0081Q\u0091R\u0092PcLc\u00e5b\u0091P`$\u0001`\u0000`@Q\u0080\u0083\u0003\u0081`\u0000\u0087\u0080;\u0015\u0080\u0015a\u000b\u00acW`\u0000\u0080\u00fd[PZ\u00f1\u0015\u0080\u0015a\u000b\u00c0W=`\u0000\u0080>=`\u0000\u00fd[PP`@Qc&1\u00f2\u00b1`\u00e1\u001b\u0081RsNY\u00b4HG\u00b3yW\u0085\u0088\u0092\f\u00a7\u008f\u00bf&\u00c0\u00b4\u0095l`\u0001`\u0001`\u00a0\u001b\u0003\u0085\u0016\u0014\u0015`\u0004\u0082\u0001R`\u0000\u0080Q` a\u00140\u00839\u0081Q\u0091R\u0092PcLc\u00e5b\u0091P`$\u0001`\u0000`@Q\u0080\u0083\u0003\u0081`\u0000\u0087\u0080;\u0015\u0080\u0015a\f*W`\u0000\u0080\u00fd[PZ\u00f1\u0015\u0080\u0015a\f>W=`\u0000\u0080>=`\u0000\u00fd[PP`@Qc-\u00035\u00ab`\u00e0\u001b\u0081R`\u0001`\u0001`\u00a0\u001b\u0003\u0084\u0016`\u0004\u0082\u0001R`\u0000\u0092P`\u0000\u0080Q` a\u00140\u00839\u0081Q\u0091R\u0091Pc-\u00035\u00ab\u0090`$\u0001` `@Q\u0080\u0083\u0003\u0081`\u0000\u0087Z\u00f1\u0015\u0080\u0015a\f\u0099W=`\u0000\u0080>=`\u0000\u00fd[PPPP`@Q=`\u001f\u0019`\u001f\u0082\u0001\u0016\u0082\u0001\u0080`@RP\u0081\u0001\u0090a\f\u00bd\u0091\u0090a\u0012HV[\u0090Pg\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff\u0081\u0016\u0015a\u0005\u00b7Wa\u0005\u00b7a\u0012eV[`@Qc-\u00035\u00ab`\u00e0\u001b\u0081R0`\u0004\u0082\u0001R`\u0000\u0090`\u0000\u0080Q` a\u00140\u00839\u0081Q\u0091R\u0090c-\u00035\u00ab\u0090`$\u0001` `@Q\u0080\u0083\u0003\u0081`\u0000\u0087Z\u00f1\u0015\u0080\u0015a\r%W=`\u0000\u0080>=`\u0000\u00fd[PPPP`@Q=`\u001f\u0019`\u001f\u0082\u0001\u0016\u0082\u0001\u0080`@RP\u0081\u0001\u0090a\rI\u0091\u0090a\u0012HV[\u0090P\u0080g\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff\u0016`\u0001\u0014a\u0003GWa\u0003Ga\u0012eV[\u0080\u0082\u0014a\u0005\u00b7W\u007fA0O\u00ac\u00d92=u\u00b1\u001b\u00cd\u00d6\t\u00cb8\u00ef\u00ff\u00fd\u00b0W\u0010\u00f7\u00ca\u00f0\u00e9\u00b1lm\u009dp\u009fP`@Qa\r\u00d6\u0090` \u0080\u0082R`\"\u0090\u0082\u0001R\u007fError: a == b not satisfied [uin`@\u0082\u0001Rat]`\u00f0\u001b``\u0082\u0001R`\u0080\u0001\u0090V[`@Q\u0080\u0091\u0003\u0090\u00a1\u007f\u00b2\u00de/\u00be\u0080\u001a\r\u00f6\u00c0\u00cb\u00dd\u00fdD\u008b\u00a3\u00c4\u001dH\u00a0@\u00ca5\u00c5l\u0081\u0096\u00ef\u000f\u00ca\u00e7!\u00a8\u0081`@Qa\u000e\r\u0091\u0090a\u0013*V[`@Q\u0080\u0091\u0003\u0090\u00a1\u007f\u00b2\u00de/\u00be\u0080\u001a\r\u00f6\u00c0\u00cb\u00dd\u00fdD\u008b\u00a3\u00c4\u001dH\u00a0@\u00ca5\u00c5l\u0081\u0096\u00ef\u000f\u00ca\u00e7!\u00a8\u0082`@Qa\u000eD\u0091\u0090a\u0013bV[`@Q\u0080\u0091\u0003\u0090\u00a1a\u0005\u00b7a\u000e^V[a\u0005\u00b7\u0082\u0082a\u000f^V[`\u0000\u0080Q` a\u00140\u00839\u0081Q\u0091R;\u0015a\u000fMW`@\u0080Q`\u0000\u0080Q` a\u00140\u00839\u0081Q\u0091R` \u0082\u0001\u0081\u0090Re\u0019\u0098Z[\u0019Y`\u00d2\u001b\u0092\u0082\u0001\u0092\u0090\u0092R`\u0001``\u0082\u0001R`\u0000\u0091\u0090\u007fp\u00ca\u0010\u00bb\u00d0\u00db\u00fd\u0090 \u00a9\u00f4\u00b14\u0002\u00c1l\u00b1 p^\r\u001c\n\u00ea\u00b1\u000f\u00a3S\u00aeXo\u00c4\u0090`\u0080\u0001`@\u0080Q`\u001f\u0019\u0081\u0084\u0003\u0001\u0081R\u0090\u0082\u0090Ra\u000e\u00ec\u0092\u0091` \u0001a\u0012\u00bbV[`@\u0080Q`\u001f\u0019\u0081\u0084\u0003\u0001\u0081R\u0090\u0082\u0090Ra\u000f\u0006\u0091a\u0012\u00ecV[`\u0000`@Q\u0080\u0083\u0003\u0081`\u0000\u0086Z\u00f1\u0091PP=\u0080`\u0000\u0081\u0014a\u000fCW`@Q\u0091P`\u001f\u0019`?=\u0001\u0016\u0082\u0001`@R=\u0082R=`\u0000` \u0084\u0001>a\u000fHV[``\u0091P[PPPP[`\u0000\u0080Ta\u00ff\u0000\u0019\u0016a\u0001\u0000\u0017\u0090UV[a\u000fh\u0082\u0082a\u0010EV[a\u0005\u00b7W\u007fA0O\u00ac\u00d92=u\u00b1\u001b\u00cd\u00d6\t\u00cb8\u00ef\u00ff\u00fd\u00b0W\u0010\u00f7\u00ca\u00f0\u00e9\u00b1lm\u009dp\u009fP`@Qa\u000f\u00d7\u0090` \u0080\u0082R`#\u0090\u0082\u0001R\u007fError: a == b not satisfied [byt`@\u0082\u0001Rbes]`\u00e8\u001b``\u0082\u0001R`\u0080\u0001\u0090V[`@Q\u0080\u0091\u0003\u0090\u00a1\u007f\u00d2n\u0016\u00ca\u00d4T\u0087\u0005\u00e4\u00c9\u00e2\u00d9O\u0098\u00ee\u0091\u00c2\u0089\b^\u00e4%YO\u00d5c_\u00a2\u0096L\u00cf\u0018\u0081`@Qa\u0010\u000e\u0091\u0090a\u0013\u008cV[`@Q\u0080\u0091\u0003\u0090\u00a1\u007f\u00d2n\u0016\u00ca\u00d4T\u0087\u0005\u00e4\u00c9\u00e2\u00d9O\u0098\u00ee\u0091\u00c2\u0089\b^\u00e4%YO\u00d5c_\u00a2\u0096L\u00cf\u0018\u0082`@Qa\u000eD\u0091\u0090a\u0013\u00c8V[\u0080Q\u0082Q`\u0001\u0091\u0090\u0003a\u0010\u00c8W`\u0000[\u0083Q\u0081\u0010\u0015a\u0010\u00c2W\u0082\u0081\u0081Q\u0081\u0010a\u0010pWa\u0010pa\u0013\u00f2V[` \u0001\u0001Q`\u00f8\u001c`\u00f8\u001b`\u0001`\u0001`\u00f8\u001b\u0003\u0019\u0016\u0084\u0082\u0081Q\u0081\u0010a\u0010\u0097Wa\u0010\u0097a\u0013\u00f2V[\u0001` \u0001Q`\u0001`\u0001`\u00f8\u001b\u0003\u0019\u0016\u0014a\u0010\u00b0W`\u0000\u0091P[\u0080a\u0010\u00ba\u0081a\u0014\bV[\u0091PPa\u0010UV[Pa\u0010\u00ccV[P`\u0000[\u0092\u0091PPV[g\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff\u0081\u0016\u0081\u0014a\u0003GW`\u0000\u0080\u00fd[`\u0000` \u0082\u0084\u0003\u0012\u0015a\u0010\u00faW`\u0000\u0080\u00fd[\u00815a\u0011\u0005\u0081a\u0010\u00d2V[\u0093\u0092PPPV[`\u0000\u0080` \u0083\u0085\u0003\u0012\u0015a\u0011\u001fW`\u0000\u0080\u00fd[\u00825g\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff\u0080\u0082\u0011\u0015a\u00117W`\u0000\u0080\u00fd[\u0081\u0085\u0001\u0091P\u0085`\u001f\u0083\u0001\u0012a\u0011KW`\u0000\u0080\u00fd[\u00815\u0081\u0081\u0011\u0015a\u0011ZW`\u0000\u0080\u00fd[\u0086` \u0082\u0085\u0001\u0001\u0011\u0015a\u0011lW`\u0000\u0080\u00fd[` \u0092\u0090\u0092\u0001\u0096\u0091\u0095P\u0090\u0093PPPPV[`\u0000` \u0082\u0084\u0003\u0012\u0015a\u0011\u0090W`\u0000\u0080\u00fd[P5\u0091\u0090PV[`\u0000` \u0082\u0084\u0003\u0012\u0015a\u0011\u00a9W`\u0000\u0080\u00fd[\u00815`\u0001`\u0001`\u00a0\u001b\u0003\u0081\u0016\u0081\u0014a\u0011\u0005W`\u0000\u0080\u00fd[`\u0000[\u0083\u0081\u0010\u0015a\u0011\u00dbW\u0081\u0081\u0001Q\u0083\u0082\u0001R` \u0001a\u0011\u00c3V[\u0083\u0081\u0011\u0015a\u0011\u00eaW`\u0000\u0084\u0084\u0001R[PPPPV[`\u0000\u0081Q\u0080\u0084Ra\u0012\b\u0081` \u0086\u0001` \u0086\u0001a\u0011\u00c0V[`\u001f\u0001`\u001f\u0019\u0016\u0092\u0090\u0092\u0001` \u0001\u0092\u0091PPV[`\u0001`\u0001`\u00a0\u001b\u0003\u0083\u0016\u0081R`@` \u0082\u0001\u0081\u0090R`\u0000\u0090a\u0012@\u0090\u0083\u0001\u0084a\u0011\u00f0V[\u0094\u0093PPPPV[`\u0000` \u0082\u0084\u0003\u0012\u0015a\u0012ZW`\u0000\u0080\u00fd[\u0081Qa\u0011\u0005\u0081a\u0010\u00d2V[cNH{q`\u00e0\u001b`\u0000R`\u0001`\u0004R`$`\u0000\u00fd[`\u0001`\u0001`\u00a0\u001b\u0003\u0084\u0016\u0081R`@` \u0082\u0001\u0081\u0090R\u0081\u0001\u0082\u0090R\u0081\u0083``\u0083\u00017`\u0000\u0081\u0083\u0001``\u0090\u0081\u0001\u0091\u0090\u0091R`\u001f\u0090\u0092\u0001`\u001f\u0019\u0016\u0001\u0001\u0092\u0091PPV[`\u0001`\u0001`\u00e0\u001b\u0003\u0019\u0083\u0016\u0081R\u0081Q`\u0000\u0090a\u0012\u00de\u0081`\u0004\u0085\u0001` \u0087\u0001a\u0011\u00c0V[\u0091\u0090\u0091\u0001`\u0004\u0001\u0093\u0092PPPV[`\u0000\u0082Qa\u0012\u00fe\u0081\u0084` \u0087\u0001a\u0011\u00c0V[\u0091\u0090\u0091\u0001\u0092\u0091PPV[`\u0000` \u0082\u0084\u0003\u0012\u0015a\u0013\u001aW`\u0000\u0080\u00fd[\u0081Q\u0080\u0015\u0015\u0081\u0014a\u0011\u0005W`\u0000\u0080\u00fd[`@\u0081R`\u0000a\u0013T`@\u0083\u0001`\n\u0081Ri\b\b\u0011^\u001c\u0019X\u00dd\u0019Y`\u00b2\u001b` \u0082\u0001R`@\u0001\u0090V[\u0090P\u0082` \u0083\u0001R\u0092\u0091PPV[`@\u0081R`\u0000a\u0013T`@\u0083\u0001`\n\u0081Ri\b\b\b\b\u0010X\u00dd\u001dX[`\u00b2\u001b` \u0082\u0001R`@\u0001\u0090V[`@\u0081R`\u0000a\u0013\u00b6`@\u0083\u0001`\n\u0081Ri\b\b\u0011^\u001c\u0019X\u00dd\u0019Y`\u00b2\u001b` \u0082\u0001R`@\u0001\u0090V[\u0082\u0081\u0003` \u0084\u0001Ra\u0012@\u0081\u0085a\u0011\u00f0V[`@\u0081R`\u0000a\u0013\u00b6`@\u0083\u0001`\n\u0081Ri\b\b\b\b\u0010X\u00dd\u001dX[`\u00b2\u001b` \u0082\u0001R`@\u0001\u0090V[cNH{q`\u00e0\u001b`\u0000R`2`\u0004R`$`\u0000\u00fd[`\u0000`\u0001\u0082\u0001a\u0014(WcNH{q`\u00e0\u001b`\u0000R`\u0011`\u0004R`$`\u0000\u00fd[P`\u0001\u0001\u0090V\u00fe\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000q\tp\u009e\u00cf\u00a9\u001a\u0080bo\u00f3\u0098\u009dh\u00f6\u007f[\u001d\u00d1-\u00a2dipfsX\"\u0012 \u00e2\u00c5\u00ea\u008b\u0092b\u00b8j\u00df\u00a9\u00a9.\fn\u00e3(F\u00a3\u00b2K\u0087\u00b9\u0014\u0001\u0091=-\u00c4o!\u00c9\u00fcdsolcC\u0000\b\r\u00003"}]}]}, {"tag": "App", "name": "Lbl'-LT-'storage'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarACCT'Unds'STORAGE'Unds'FINAL", "sort": {"tag": "SortApp", "name": "SortMap", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'origStorage'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarACCT'Unds'ORIGSTORAGE'Unds'FINAL", "sort": {"tag": "SortApp", "name": "SortMap", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'nonce'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarACCT'Unds'NONCE'Unds'FINAL", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}]}]}]}, {"tag": "App", "name": "Lbl'Unds'AccountCellMap'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblAccountCellMapItem", "sorts": [], "args": [{"tag": "App", "name": "Lbl'-LT-'acctID'-GT-'", "sorts": [], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "645326474426547203313410069153905908525362434349"}]}, {"tag": "App", "name": "Lbl'-LT-'account'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'-LT-'acctID'-GT-'", "sorts": [], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "645326474426547203313410069153905908525362434349"}]}, {"tag": "App", "name": "Lbl'-LT-'balance'-GT-'", "sorts": [], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "0"}]}, {"tag": "App", "name": "Lbl'-LT-'code'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortBytes", "args": []}, {"tag": "SortApp", "name": "SortAccountCode", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortBytes", "args": []}, "value": "\u0000"}]}]}, {"tag": "App", "name": "Lbl'-LT-'storage'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarCHEATCODE'Unds'STORAGE'Unds'FINAL", "sort": {"tag": "SortApp", "name": "SortMap", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'origStorage'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'Stop'Map", "sorts": [], "args": []}]}, {"tag": "App", "name": "Lbl'-LT-'nonce'-GT-'", "sorts": [], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "0"}]}]}]}, {"tag": "EVar", "name": "VarACCOUNTS'Unds'FINAL", "sort": {"tag": "SortApp", "name": "SortAccountCellMap", "args": []}}]}]}]}, {"tag": "App", "name": "Lbl'-LT-'txOrder'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarTXORDER'Unds'CELL'Unds'5d410f2a", "sort": {"tag": "SortApp", "name": "SortList", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'txPending'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarTXPENDING'Unds'CELL'Unds'5d410f2a", "sort": {"tag": "SortApp", "name": "SortList", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'messages'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarMESSAGES'Unds'CELL'Unds'5d410f2a", "sort": {"tag": "SortApp", "name": "SortMessageCellMap", "args": []}}]}]}]}]}, {"tag": "App", "name": "Lbl'-LT-'cheatcodes'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'-LT-'prank'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'-LT-'prevCaller'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarPREVCALLER'Unds'CELL'Unds'5d410f2a", "sort": {"tag": "SortApp", "name": "SortAccount", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'prevOrigin'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarPREVORIGIN'Unds'CELL'Unds'5d410f2a", "sort": {"tag": "SortApp", "name": "SortAccount", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'newCaller'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarNEWCALLER'Unds'CELL'Unds'5d410f2a", "sort": {"tag": "SortApp", "name": "SortAccount", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'newOrigin'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarNEWORIGIN'Unds'CELL'Unds'5d410f2a", "sort": {"tag": "SortApp", "name": "SortAccount", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'active'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarACTIVE'Unds'CELL'Unds'5d410f2a", "sort": {"tag": "SortApp", "name": "SortBool", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'depth'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarDEPTH'Unds'CELL'Unds'5d410f2a", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'singleCall'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarSINGLECALL'Unds'CELL'Unds'5d410f2a", "sort": {"tag": "SortApp", "name": "SortBool", "args": []}}]}]}, {"tag": "App", "name": "Lbl'-LT-'expectedRevert'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'-LT-'isRevertExpected'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarISREVERTEXPECTED'Unds'FINAL", "sort": {"tag": "SortApp", "name": "SortBool", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'expectedReason'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarEXPECTEDREASON'Unds'CELL'Unds'5d410f2a", "sort": {"tag": "SortApp", "name": "SortBytes", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'expectedDepth'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarEXPECTEDDEPTH'Unds'CELL'Unds'5d410f2a", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}]}]}, {"tag": "App", "name": "Lbl'-LT-'expectedOpcode'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'-LT-'isOpcodeExpected'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarISOPCODEEXPECTED'Unds'FINAL", "sort": {"tag": "SortApp", "name": "SortBool", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'expectedAddress'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarEXPECTEDADDRESS'Unds'CELL'Unds'5d410f2a", "sort": {"tag": "SortApp", "name": "SortAccount", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'expectedValue'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarEXPECTEDVALUE'Unds'CELL'Unds'5d410f2a", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'expectedData'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarEXPECTEDDATA'Unds'CELL'Unds'5d410f2a", "sort": {"tag": "SortApp", "name": "SortBytes", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'opcodeType'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarOPCODETYPE'Unds'CELL'Unds'5d410f2a", "sort": {"tag": "SortApp", "name": "SortOpcodeType", "args": []}}]}]}, {"tag": "App", "name": "Lbl'-LT-'expectEmit'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'-LT-'recordEvent'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarRECORDEVENT'Unds'FINAL", "sort": {"tag": "SortApp", "name": "SortBool", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'isEventExpected'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarISEVENTEXPECTED'Unds'FINAL", "sort": {"tag": "SortApp", "name": "SortBool", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'checkedTopics'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarCHECKEDTOPICS'Unds'CELL'Unds'5d410f2a", "sort": {"tag": "SortApp", "name": "SortList", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'checkedData'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarCHECKEDDATA'Unds'CELL'Unds'5d410f2a", "sort": {"tag": "SortApp", "name": "SortBool", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'expectedEventAddress'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarEXPECTEDEVENTADDRESS'Unds'CELL'Unds'5d410f2a", "sort": {"tag": "SortApp", "name": "SortAccount", "args": []}}]}]}, {"tag": "App", "name": "Lbl'-LT-'whitelist'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'-LT-'isCallWhitelistActive'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarISCALLWHITELISTACTIVE'Unds'FINAL", "sort": {"tag": "SortApp", "name": "SortBool", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'isStorageWhitelistActive'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarISSTORAGEWHITELISTACTIVE'Unds'FINAL", "sort": {"tag": "SortApp", "name": "SortBool", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'addressSet'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarADDRESSSET'Unds'FINAL", "sort": {"tag": "SortApp", "name": "SortSet", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'storageSlotSet'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarSTORAGESLOTSET'Unds'FINAL", "sort": {"tag": "SortApp", "name": "SortSet", "args": []}}]}]}]}]}, {"tag": "App", "name": "Lbl'-LT-'generatedCounter'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarGENERATEDCOUNTER'Unds'CELL'Unds'5d410f2a", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}]}]}, "second": {"tag": "Equals", "argSort": {"tag": "SortApp", "name": "SortBool", "args": []}, "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "first": {"tag": "DV", "sort": {"tag": "SortApp", "name": "SortBool", "args": []}, "value": "true"}, "second": {"tag": "App", "name": "Lblfoundry'Unds'success", "sorts": [], "args": [{"tag": "EVar", "name": "VarSTATUSCODE'Unds'FINAL", "sort": {"tag": "SortApp", "name": "SortStatusCode", "args": []}}, {"tag": "App", "name": "Lbl'Hash'lookup'LParUndsCommUndsRParUnds'EVM-TYPES'Unds'Int'Unds'Map'Unds'Int", "sorts": [], "args": [{"tag": "EVar", "name": "VarCHEATCODE'Unds'STORAGE'Unds'FINAL", "sort": {"tag": "SortApp", "name": "SortMap", "args": []}}, {"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "46308022326495007027972728677917914892729792999299745830475596687180801507328"}]}, {"tag": "EVar", "name": "VarISREVERTEXPECTED'Unds'FINAL", "sort": {"tag": "SortApp", "name": "SortBool", "args": []}}, {"tag": "EVar", "name": "VarISOPCODEEXPECTED'Unds'FINAL", "sort": {"tag": "SortApp", "name": "SortBool", "args": []}}, {"tag": "EVar", "name": "VarRECORDEVENT'Unds'FINAL", "sort": {"tag": "SortApp", "name": "SortBool", "args": []}}, {"tag": "EVar", "name": "VarISEVENTEXPECTED'Unds'FINAL", "sort": {"tag": "SortApp", "name": "SortBool", "args": []}}]}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} \ No newline at end of file diff --git a/test/jsonrpc-examples/foundry-proof.simplify.request b/test/jsonrpc-examples/foundry-proof.simplify.request new file mode 100644 index 000000000..3f3e8dd97 --- /dev/null +++ b/test/jsonrpc-examples/foundry-proof.simplify.request @@ -0,0 +1 @@ +{"jsonrpc": "2.0", "id": 1, "method": "simplify", "params": {"state": {"format": "KORE", "version": 1, "term": {"tag": "Ceil", "argSort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "arg": {"tag": "App", "name": "Lbl'-LT-'generatedTop'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'-LT-'foundry'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'-LT-'kevm'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'-LT-'k'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "kseq", "sorts": [], "args": [{"tag": "App", "name": "Lbl'Hash'execute'Unds'EVM'Unds'KItem", "sorts": [], "args": []}, {"tag": "EVar", "name": "VarCONTINUATION", "sort": {"tag": "SortApp", "name": "SortK", "args": []}}]}]}, {"tag": "App", "name": "Lbl'-LT-'exit-code'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarEXITCODE'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'mode'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "LblNORMAL", "sorts": [], "args": []}]}, {"tag": "App", "name": "Lbl'-LT-'schedule'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "LblLONDON'Unds'EVM", "sorts": [], "args": []}]}, {"tag": "App", "name": "Lbl'-LT-'ethereum'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'-LT-'evm'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'-LT-'output'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarOUTPUT'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortBytes", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'statusCode'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarSTATUSCODE", "sort": {"tag": "SortApp", "name": "SortStatusCode", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'callStack'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'Stop'List", "sorts": [], "args": []}]}, {"tag": "App", "name": "Lbl'-LT-'interimStates'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'Stop'List", "sorts": [], "args": []}]}, {"tag": "App", "name": "Lbl'-LT-'touchedAccounts'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarTOUCHEDACCOUNTS'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortSet", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'callState'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'-LT-'program'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'Hash'parseByteStack'LParUndsRParUnds'SERIALIZATION'Unds'Bytes'Unds'String", "sorts": [], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortString", "args": []}, "value": "0x608060405234801561001057600080fd5b50600436106101005760003560e01c80639a13b46011610097578063eaef3d1411610066578063eaef3d14146101c2578063ec846da6146101d5578063f8ccbf47146101dd578063fa7626d4146101f057600080fd5b80639a13b46014610187578063b1ec79811461019a578063ba414fa6146101a2578063d350206f146101ba57600080fd5b80634e18fd0b116100d35780634e18fd0b146101515780635f45761c146101645780637dbb0fbf1461016c5780638eafad631461017f57600080fd5b80631f9894c2146101055780633021887c1461010f5780633a768463146101175780633fa6f85014610149575b600080fd5b61010d6101fd565b005b61010d61027f565b61012c60008051602061143083398151915281565b6040516001600160a01b0390911681526020015b60405180910390f35b61010d61034a565b61010d61015f3660046110e8565b6103d5565b61010d6105bb565b61010d61017a36600461110c565b6106af565b61010d61077d565b61010d61019536600461117e565b610806565b61010d610883565b6101aa61091e565b6040519015158152602001610140565b61010d610a3d565b61010d6101d0366004611197565b610a72565b61010d610cd7565b6000546101aa9062010000900460ff1681565b6000546101aa9060ff1681565b60405163c88a5e6d60e01b81526101f9600482015261010060248201526000805160206114308339815191529063c88a5e6d90604401600060405180830381600087803b15801561024d57600080fd5b505af1158015610261573d6000803e3d6000fd5b5050505061027d6101f96001600160a01b031631610100610d65565b565b604080518082018252601b81527f746869732073686f756c642062652045564d2062797465636f6465000000000060208201529051635a6b63c160e11b81526000805160206114308339815191529063b4d6c782906102e590607c90859060040161121c565b600060405180830381600087803b1580156102ff57600080fd5b505af1158015610313573d6000803e3d6000fd5b50505050610347607c6001600160a01b0316803b806020016040519081016040528181526000908060200190933c82610e54565b50565b604051632d0335ab60e01b81526000600482018190529060008051602061143083398151915290632d0335ab906024015b6020604051808303816000875af115801561039a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103be9190611248565b90506103478167ffffffffffffffff16600a610d65565b604051632d0335ab60e01b815230600482015260009060008051602061143083398151915290632d0335ab906024016020604051808303816000875af1158015610423573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104479190611248565b604051632631f2b160e11b815267ffffffffffffffff80831690851611600482015290915060008051602061143083398151915290634c63e56290602401600060405180830381600087803b15801561049f57600080fd5b505af11580156104b3573d6000803e3d6000fd5b505060405163f8e18b5760e01b815230600482015267ffffffffffffffff85166024820152600080516020611430833981519152925063f8e18b579150604401600060405180830381600087803b15801561050d57600080fd5b505af1158015610521573d6000803e3d6000fd5b5050604051632d0335ab60e01b815230600482015267ffffffffffffffff851692506000805160206114308339815191529150632d0335ab906024016020604051808303816000875af115801561057c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105a09190611248565b67ffffffffffffffff16146105b7576105b7611265565b5050565b60405163f8e18b5760e01b8152306004820152606460248201526000805160206114308339815191529063f8e18b5790604401600060405180830381600087803b15801561060857600080fd5b505af115801561061c573d6000803e3d6000fd5b5050604051632d0335ab60e01b8152306004820152600092506000805160206114308339815191529150632d0335ab906024015b6020604051808303816000875af115801561066f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106939190611248565b90508067ffffffffffffffff1660641461034757610347611265565b604051635a6b63c160e11b81526000805160206114308339815191529063b4d6c782906106e590607c908690869060040161127b565b600060405180830381600087803b1580156106ff57600080fd5b505af1158015610713573d6000803e3d6000fd5b505050506105b7607c6001600160a01b0316803b806020016040519081016040528181526000908060200190933c83838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610e5492505050565b604051632d0335ab60e01b815230600482015260009060008051602061143083398151915290632d0335ab906024016020604051808303816000875af11580156107cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ef9190611248565b90506103478167ffffffffffffffff166001610d65565b60405163c88a5e6d60e01b81526101486004820152602481018290526000805160206114308339815191529063c88a5e6d90604401600060405180830381600087803b15801561085557600080fd5b505af1158015610869573d6000803e3d6000fd5b505050506103476101486001600160a01b03163182610d65565b60405163f8e18b5760e01b815260646004820181905260248201526000805160206114308339815191529063f8e18b5790604401600060405180830381600087803b1580156108d157600080fd5b505af11580156108e5573d6000803e3d6000fd5b5050604051632d0335ab60e01b815260646004820152600092506000805160206114308339815191529150632d0335ab90602401610650565b60008054610100900460ff161561093e5750600054610100900460ff1690565b60006000805160206114308339815191523b15610a385760408051600080516020611430833981519152602082018190526519985a5b195960d21b828401528251808303840181526060830190935260009290916109c0917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc4916080016112bb565b60408051601f19818403018152908290526109da916112ec565b6000604051808303816000865af19150503d8060008114610a17576040519150601f19603f3d011682016040523d82523d6000602084013e610a1c565b606091505b5091505080806020019051810190610a349190611308565b9150505b919050565b604051632d0335ab60e01b81526064600482015260009060008051602061143083398151915290632d0335ab9060240161037b565b604051632631f2b160e11b81526000805160206114308339815191526001600160a01b038316811415600483015290634c63e56290602401600060405180830381600087803b158015610ac457600080fd5b505af1158015610ad8573d6000803e3d6000fd5b5050604051632631f2b160e11b8152306001600160a01b038516141560048201526000805160206114308339815191529250634c63e5629150602401600060405180830381600087803b158015610b2e57600080fd5b505af1158015610b42573d6000803e3d6000fd5b5050604051632631f2b160e11b8152733fab184622dc19b6109349b94811493bf2a453626001600160a01b038516141560048201526000805160206114308339815191529250634c63e5629150602401600060405180830381600087803b158015610bac57600080fd5b505af1158015610bc0573d6000803e3d6000fd5b5050604051632631f2b160e11b8152734e59b44847b379578588920ca78fbf26c0b4956c6001600160a01b038516141560048201526000805160206114308339815191529250634c63e5629150602401600060405180830381600087803b158015610c2a57600080fd5b505af1158015610c3e573d6000803e3d6000fd5b5050604051632d0335ab60e01b81526001600160a01b0384166004820152600092506000805160206114308339815191529150632d0335ab906024016020604051808303816000875af1158015610c99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cbd9190611248565b905067ffffffffffffffff8116156105b7576105b7611265565b604051632d0335ab60e01b815230600482015260009060008051602061143083398151915290632d0335ab906024016020604051808303816000875af1158015610d25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d499190611248565b90508067ffffffffffffffff1660011461034757610347611265565b8082146105b7577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f50604051610dd69060208082526022908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b75696e604082015261745d60f01b606082015260800190565b60405180910390a17fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a881604051610e0d919061132a565b60405180910390a17fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a882604051610e449190611362565b60405180910390a16105b7610e5e565b6105b78282610f5e565b6000805160206114308339815191523b15610f4d5760408051600080516020611430833981519152602082018190526519985a5b195960d21b9282019290925260016060820152600091907f70ca10bbd0dbfd9020a9f4b13402c16cb120705e0d1c0aeab10fa353ae586fc49060800160408051601f1981840301815290829052610eec92916020016112bb565b60408051601f1981840301815290829052610f06916112ec565b6000604051808303816000865af19150503d8060008114610f43576040519150601f19603f3d011682016040523d82523d6000602084013e610f48565b606091505b505050505b6000805461ff001916610100179055565b610f688282611045565b6105b7577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f50604051610fd79060208082526023908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b62797460408201526265735d60e81b606082015260800190565b60405180910390a17fd26e16cad4548705e4c9e2d94f98ee91c289085ee425594fd5635fa2964ccf188160405161100e919061138c565b60405180910390a17fd26e16cad4548705e4c9e2d94f98ee91c289085ee425594fd5635fa2964ccf1882604051610e4491906113c8565b8051825160019190036110c85760005b83518110156110c257828181518110611070576110706113f2565b602001015160f81c60f81b6001600160f81b031916848281518110611097576110976113f2565b01602001516001600160f81b031916146110b057600091505b806110ba81611408565b915050611055565b506110cc565b5060005b92915050565b67ffffffffffffffff8116811461034757600080fd5b6000602082840312156110fa57600080fd5b8135611105816110d2565b9392505050565b6000806020838503121561111f57600080fd5b823567ffffffffffffffff8082111561113757600080fd5b818501915085601f83011261114b57600080fd5b81358181111561115a57600080fd5b86602082850101111561116c57600080fd5b60209290920196919550909350505050565b60006020828403121561119057600080fd5b5035919050565b6000602082840312156111a957600080fd5b81356001600160a01b038116811461110557600080fd5b60005b838110156111db5781810151838201526020016111c3565b838111156111ea576000848401525b50505050565b600081518084526112088160208601602086016111c0565b601f01601f19169290920160200192915050565b6001600160a01b0383168152604060208201819052600090611240908301846111f0565b949350505050565b60006020828403121561125a57600080fd5b8151611105816110d2565b634e487b7160e01b600052600160045260246000fd5b6001600160a01b03841681526040602082018190528101829052818360608301376000818301606090810191909152601f909201601f1916010192915050565b6001600160e01b03198316815281516000906112de8160048501602087016111c0565b919091016004019392505050565b600082516112fe8184602087016111c0565b9190910192915050565b60006020828403121561131a57600080fd5b8151801515811461110557600080fd5b60408152600061135460408301600a8152690808115e1c1958dd195960b21b602082015260400190565b905082602083015292915050565b60408152600061135460408301600a815269080808081058dd1d585b60b21b602082015260400190565b6040815260006113b660408301600a8152690808115e1c1958dd195960b21b602082015260400190565b828103602084015261124081856111f0565b6040815260006113b660408301600a815269080808081058dd1d585b60b21b602082015260400190565b634e487b7160e01b600052603260045260246000fd5b60006001820161142857634e487b7160e01b600052601160045260246000fd5b506001019056fe0000000000000000000000007109709ecfa91a80626ff3989d68f67f5b1dd12da2646970667358221220e2c5ea8b9262b86adfa9a92e0c6ee32846a3b24b87b91401913d2dc46f21c9fc64736f6c634300080d0033"}]}]}, {"tag": "App", "name": "Lbl'-LT-'jumpDests'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'Hash'computeValidJumpDests'LParUndsRParUnds'EVM'Unds'Set'Unds'Bytes", "sorts": [], "args": [{"tag": "App", "name": "Lbl'Hash'parseByteStack'LParUndsRParUnds'SERIALIZATION'Unds'Bytes'Unds'String", "sorts": [], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortString", "args": []}, "value": "0x608060405234801561001057600080fd5b50600436106101005760003560e01c80639a13b46011610097578063eaef3d1411610066578063eaef3d14146101c2578063ec846da6146101d5578063f8ccbf47146101dd578063fa7626d4146101f057600080fd5b80639a13b46014610187578063b1ec79811461019a578063ba414fa6146101a2578063d350206f146101ba57600080fd5b80634e18fd0b116100d35780634e18fd0b146101515780635f45761c146101645780637dbb0fbf1461016c5780638eafad631461017f57600080fd5b80631f9894c2146101055780633021887c1461010f5780633a768463146101175780633fa6f85014610149575b600080fd5b61010d6101fd565b005b61010d61027f565b61012c60008051602061143083398151915281565b6040516001600160a01b0390911681526020015b60405180910390f35b61010d61034a565b61010d61015f3660046110e8565b6103d5565b61010d6105bb565b61010d61017a36600461110c565b6106af565b61010d61077d565b61010d61019536600461117e565b610806565b61010d610883565b6101aa61091e565b6040519015158152602001610140565b61010d610a3d565b61010d6101d0366004611197565b610a72565b61010d610cd7565b6000546101aa9062010000900460ff1681565b6000546101aa9060ff1681565b60405163c88a5e6d60e01b81526101f9600482015261010060248201526000805160206114308339815191529063c88a5e6d90604401600060405180830381600087803b15801561024d57600080fd5b505af1158015610261573d6000803e3d6000fd5b5050505061027d6101f96001600160a01b031631610100610d65565b565b604080518082018252601b81527f746869732073686f756c642062652045564d2062797465636f6465000000000060208201529051635a6b63c160e11b81526000805160206114308339815191529063b4d6c782906102e590607c90859060040161121c565b600060405180830381600087803b1580156102ff57600080fd5b505af1158015610313573d6000803e3d6000fd5b50505050610347607c6001600160a01b0316803b806020016040519081016040528181526000908060200190933c82610e54565b50565b604051632d0335ab60e01b81526000600482018190529060008051602061143083398151915290632d0335ab906024015b6020604051808303816000875af115801561039a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103be9190611248565b90506103478167ffffffffffffffff16600a610d65565b604051632d0335ab60e01b815230600482015260009060008051602061143083398151915290632d0335ab906024016020604051808303816000875af1158015610423573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104479190611248565b604051632631f2b160e11b815267ffffffffffffffff80831690851611600482015290915060008051602061143083398151915290634c63e56290602401600060405180830381600087803b15801561049f57600080fd5b505af11580156104b3573d6000803e3d6000fd5b505060405163f8e18b5760e01b815230600482015267ffffffffffffffff85166024820152600080516020611430833981519152925063f8e18b579150604401600060405180830381600087803b15801561050d57600080fd5b505af1158015610521573d6000803e3d6000fd5b5050604051632d0335ab60e01b815230600482015267ffffffffffffffff851692506000805160206114308339815191529150632d0335ab906024016020604051808303816000875af115801561057c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105a09190611248565b67ffffffffffffffff16146105b7576105b7611265565b5050565b60405163f8e18b5760e01b8152306004820152606460248201526000805160206114308339815191529063f8e18b5790604401600060405180830381600087803b15801561060857600080fd5b505af115801561061c573d6000803e3d6000fd5b5050604051632d0335ab60e01b8152306004820152600092506000805160206114308339815191529150632d0335ab906024015b6020604051808303816000875af115801561066f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106939190611248565b90508067ffffffffffffffff1660641461034757610347611265565b604051635a6b63c160e11b81526000805160206114308339815191529063b4d6c782906106e590607c908690869060040161127b565b600060405180830381600087803b1580156106ff57600080fd5b505af1158015610713573d6000803e3d6000fd5b505050506105b7607c6001600160a01b0316803b806020016040519081016040528181526000908060200190933c83838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610e5492505050565b604051632d0335ab60e01b815230600482015260009060008051602061143083398151915290632d0335ab906024016020604051808303816000875af11580156107cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ef9190611248565b90506103478167ffffffffffffffff166001610d65565b60405163c88a5e6d60e01b81526101486004820152602481018290526000805160206114308339815191529063c88a5e6d90604401600060405180830381600087803b15801561085557600080fd5b505af1158015610869573d6000803e3d6000fd5b505050506103476101486001600160a01b03163182610d65565b60405163f8e18b5760e01b815260646004820181905260248201526000805160206114308339815191529063f8e18b5790604401600060405180830381600087803b1580156108d157600080fd5b505af11580156108e5573d6000803e3d6000fd5b5050604051632d0335ab60e01b815260646004820152600092506000805160206114308339815191529150632d0335ab90602401610650565b60008054610100900460ff161561093e5750600054610100900460ff1690565b60006000805160206114308339815191523b15610a385760408051600080516020611430833981519152602082018190526519985a5b195960d21b828401528251808303840181526060830190935260009290916109c0917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc4916080016112bb565b60408051601f19818403018152908290526109da916112ec565b6000604051808303816000865af19150503d8060008114610a17576040519150601f19603f3d011682016040523d82523d6000602084013e610a1c565b606091505b5091505080806020019051810190610a349190611308565b9150505b919050565b604051632d0335ab60e01b81526064600482015260009060008051602061143083398151915290632d0335ab9060240161037b565b604051632631f2b160e11b81526000805160206114308339815191526001600160a01b038316811415600483015290634c63e56290602401600060405180830381600087803b158015610ac457600080fd5b505af1158015610ad8573d6000803e3d6000fd5b5050604051632631f2b160e11b8152306001600160a01b038516141560048201526000805160206114308339815191529250634c63e5629150602401600060405180830381600087803b158015610b2e57600080fd5b505af1158015610b42573d6000803e3d6000fd5b5050604051632631f2b160e11b8152733fab184622dc19b6109349b94811493bf2a453626001600160a01b038516141560048201526000805160206114308339815191529250634c63e5629150602401600060405180830381600087803b158015610bac57600080fd5b505af1158015610bc0573d6000803e3d6000fd5b5050604051632631f2b160e11b8152734e59b44847b379578588920ca78fbf26c0b4956c6001600160a01b038516141560048201526000805160206114308339815191529250634c63e5629150602401600060405180830381600087803b158015610c2a57600080fd5b505af1158015610c3e573d6000803e3d6000fd5b5050604051632d0335ab60e01b81526001600160a01b0384166004820152600092506000805160206114308339815191529150632d0335ab906024016020604051808303816000875af1158015610c99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cbd9190611248565b905067ffffffffffffffff8116156105b7576105b7611265565b604051632d0335ab60e01b815230600482015260009060008051602061143083398151915290632d0335ab906024016020604051808303816000875af1158015610d25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d499190611248565b90508067ffffffffffffffff1660011461034757610347611265565b8082146105b7577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f50604051610dd69060208082526022908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b75696e604082015261745d60f01b606082015260800190565b60405180910390a17fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a881604051610e0d919061132a565b60405180910390a17fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a882604051610e449190611362565b60405180910390a16105b7610e5e565b6105b78282610f5e565b6000805160206114308339815191523b15610f4d5760408051600080516020611430833981519152602082018190526519985a5b195960d21b9282019290925260016060820152600091907f70ca10bbd0dbfd9020a9f4b13402c16cb120705e0d1c0aeab10fa353ae586fc49060800160408051601f1981840301815290829052610eec92916020016112bb565b60408051601f1981840301815290829052610f06916112ec565b6000604051808303816000865af19150503d8060008114610f43576040519150601f19603f3d011682016040523d82523d6000602084013e610f48565b606091505b505050505b6000805461ff001916610100179055565b610f688282611045565b6105b7577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f50604051610fd79060208082526023908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b62797460408201526265735d60e81b606082015260800190565b60405180910390a17fd26e16cad4548705e4c9e2d94f98ee91c289085ee425594fd5635fa2964ccf188160405161100e919061138c565b60405180910390a17fd26e16cad4548705e4c9e2d94f98ee91c289085ee425594fd5635fa2964ccf1882604051610e4491906113c8565b8051825160019190036110c85760005b83518110156110c257828181518110611070576110706113f2565b602001015160f81c60f81b6001600160f81b031916848281518110611097576110976113f2565b01602001516001600160f81b031916146110b057600091505b806110ba81611408565b915050611055565b506110cc565b5060005b92915050565b67ffffffffffffffff8116811461034757600080fd5b6000602082840312156110fa57600080fd5b8135611105816110d2565b9392505050565b6000806020838503121561111f57600080fd5b823567ffffffffffffffff8082111561113757600080fd5b818501915085601f83011261114b57600080fd5b81358181111561115a57600080fd5b86602082850101111561116c57600080fd5b60209290920196919550909350505050565b60006020828403121561119057600080fd5b5035919050565b6000602082840312156111a957600080fd5b81356001600160a01b038116811461110557600080fd5b60005b838110156111db5781810151838201526020016111c3565b838111156111ea576000848401525b50505050565b600081518084526112088160208601602086016111c0565b601f01601f19169290920160200192915050565b6001600160a01b0383168152604060208201819052600090611240908301846111f0565b949350505050565b60006020828403121561125a57600080fd5b8151611105816110d2565b634e487b7160e01b600052600160045260246000fd5b6001600160a01b03841681526040602082018190528101829052818360608301376000818301606090810191909152601f909201601f1916010192915050565b6001600160e01b03198316815281516000906112de8160048501602087016111c0565b919091016004019392505050565b600082516112fe8184602087016111c0565b9190910192915050565b60006020828403121561131a57600080fd5b8151801515811461110557600080fd5b60408152600061135460408301600a8152690808115e1c1958dd195960b21b602082015260400190565b905082602083015292915050565b60408152600061135460408301600a815269080808081058dd1d585b60b21b602082015260400190565b6040815260006113b660408301600a8152690808115e1c1958dd195960b21b602082015260400190565b828103602084015261124081856111f0565b6040815260006113b660408301600a815269080808081058dd1d585b60b21b602082015260400190565b634e487b7160e01b600052603260045260246000fd5b60006001820161142857634e487b7160e01b600052601160045260246000fd5b506001019056fe0000000000000000000000007109709ecfa91a80626ff3989d68f67f5b1dd12da2646970667358221220e2c5ea8b9262b86adfa9a92e0c6ee32846a3b24b87b91401913d2dc46f21c9fc64736f6c634300080d0033"}]}]}]}, {"tag": "App", "name": "Lbl'-LT-'id'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortAccount", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "728815563385977040452943777879061427756277306518"}]}]}, {"tag": "App", "name": "Lbl'-LT-'caller'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarCALLER'Unds'ID", "sort": {"tag": "SortApp", "name": "SortAccount", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'callData'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lblmethod'Unds'AccountParamsTest", "sorts": [], "args": [{"tag": "App", "name": "Lblcontract'Unds'AccountParamsTest", "sorts": [], "args": []}, {"tag": "App", "name": "Lblmethod'Unds'AccountParamsTest'Unds'testDealConcrete'Unds'", "sorts": [], "args": []}]}]}, {"tag": "App", "name": "Lbl'-LT-'callValue'-GT-'", "sorts": [], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "0"}]}, {"tag": "App", "name": "Lbl'-LT-'wordStack'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'Stop'WordStack'Unds'EVM-TYPES'Unds'WordStack", "sorts": [], "args": []}]}, {"tag": "App", "name": "Lbl'-LT-'localMem'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'Stop'Bytes'Unds'BYTES-HOOKED'Unds'Bytes", "sorts": [], "args": []}]}, {"tag": "App", "name": "Lbl'-LT-'pc'-GT-'", "sorts": [], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "0"}]}, {"tag": "App", "name": "Lbl'-LT-'gas'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortGas", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "9223372036854775807"}]}]}, {"tag": "App", "name": "Lbl'-LT-'memoryUsed'-GT-'", "sorts": [], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "0"}]}, {"tag": "App", "name": "Lbl'-LT-'callGas'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarCALLGAS'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortGas", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'static'-GT-'", "sorts": [], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortBool", "args": []}, "value": "false"}]}, {"tag": "App", "name": "Lbl'-LT-'callDepth'-GT-'", "sorts": [], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "0"}]}]}, {"tag": "App", "name": "Lbl'-LT-'substate'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'-LT-'selfDestruct'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarSELFDESTRUCT'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortSet", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'log'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'Stop'List", "sorts": [], "args": []}]}, {"tag": "App", "name": "Lbl'-LT-'refund'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarREFUND'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'accessedAccounts'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'Stop'Set", "sorts": [], "args": []}]}, {"tag": "App", "name": "Lbl'-LT-'accessedStorage'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'Stop'Map", "sorts": [], "args": []}]}]}, {"tag": "App", "name": "Lbl'-LT-'gasPrice'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarGASPRICE'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'origin'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarORIGIN'Unds'ID", "sort": {"tag": "SortApp", "name": "SortAccount", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'blockhashes'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarBLOCKHASHES'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortList", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'block'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'-LT-'previousHash'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarPREVIOUSHASH'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'ommersHash'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarOMMERSHASH'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'coinbase'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarCOINBASE'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'stateRoot'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarSTATEROOT'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'transactionsRoot'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarTRANSACTIONSROOT'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'receiptsRoot'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarRECEIPTSROOT'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'logsBloom'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarLOGSBLOOM'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortBytes", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'difficulty'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarDIFFICULTY'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'number'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarNUMBER'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'gasLimit'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarGASLIMIT'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'gasUsed'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarGASUSED'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortGas", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'timestamp'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarTIMESTAMP'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'extraData'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarEXTRADATA'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortBytes", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'mixHash'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarMIXHASH'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'blockNonce'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarBLOCKNONCE'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'baseFee'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarBASEFEE'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'ommerBlockHeaders'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarOMMERBLOCKHEADERS'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortJSON", "args": []}}]}]}]}, {"tag": "App", "name": "Lbl'-LT-'network'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'-LT-'chainID'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarCHAINID'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'accounts'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'Unds'AccountCellMap'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblAccountCellMapItem", "sorts": [], "args": [{"tag": "App", "name": "Lbl'-LT-'acctID'-GT-'", "sorts": [], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "728815563385977040452943777879061427756277306518"}]}, {"tag": "App", "name": "Lbl'-LT-'account'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'-LT-'acctID'-GT-'", "sorts": [], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "728815563385977040452943777879061427756277306518"}]}, {"tag": "App", "name": "Lbl'-LT-'balance'-GT-'", "sorts": [], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "0"}]}, {"tag": "App", "name": "Lbl'-LT-'code'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortBytes", "args": []}, {"tag": "SortApp", "name": "SortAccountCode", "args": []}], "args": [{"tag": "App", "name": "Lbl'Hash'parseByteStack'LParUndsRParUnds'SERIALIZATION'Unds'Bytes'Unds'String", "sorts": [], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortString", "args": []}, "value": "0x608060405234801561001057600080fd5b50600436106101005760003560e01c80639a13b46011610097578063eaef3d1411610066578063eaef3d14146101c2578063ec846da6146101d5578063f8ccbf47146101dd578063fa7626d4146101f057600080fd5b80639a13b46014610187578063b1ec79811461019a578063ba414fa6146101a2578063d350206f146101ba57600080fd5b80634e18fd0b116100d35780634e18fd0b146101515780635f45761c146101645780637dbb0fbf1461016c5780638eafad631461017f57600080fd5b80631f9894c2146101055780633021887c1461010f5780633a768463146101175780633fa6f85014610149575b600080fd5b61010d6101fd565b005b61010d61027f565b61012c60008051602061143083398151915281565b6040516001600160a01b0390911681526020015b60405180910390f35b61010d61034a565b61010d61015f3660046110e8565b6103d5565b61010d6105bb565b61010d61017a36600461110c565b6106af565b61010d61077d565b61010d61019536600461117e565b610806565b61010d610883565b6101aa61091e565b6040519015158152602001610140565b61010d610a3d565b61010d6101d0366004611197565b610a72565b61010d610cd7565b6000546101aa9062010000900460ff1681565b6000546101aa9060ff1681565b60405163c88a5e6d60e01b81526101f9600482015261010060248201526000805160206114308339815191529063c88a5e6d90604401600060405180830381600087803b15801561024d57600080fd5b505af1158015610261573d6000803e3d6000fd5b5050505061027d6101f96001600160a01b031631610100610d65565b565b604080518082018252601b81527f746869732073686f756c642062652045564d2062797465636f6465000000000060208201529051635a6b63c160e11b81526000805160206114308339815191529063b4d6c782906102e590607c90859060040161121c565b600060405180830381600087803b1580156102ff57600080fd5b505af1158015610313573d6000803e3d6000fd5b50505050610347607c6001600160a01b0316803b806020016040519081016040528181526000908060200190933c82610e54565b50565b604051632d0335ab60e01b81526000600482018190529060008051602061143083398151915290632d0335ab906024015b6020604051808303816000875af115801561039a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103be9190611248565b90506103478167ffffffffffffffff16600a610d65565b604051632d0335ab60e01b815230600482015260009060008051602061143083398151915290632d0335ab906024016020604051808303816000875af1158015610423573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104479190611248565b604051632631f2b160e11b815267ffffffffffffffff80831690851611600482015290915060008051602061143083398151915290634c63e56290602401600060405180830381600087803b15801561049f57600080fd5b505af11580156104b3573d6000803e3d6000fd5b505060405163f8e18b5760e01b815230600482015267ffffffffffffffff85166024820152600080516020611430833981519152925063f8e18b579150604401600060405180830381600087803b15801561050d57600080fd5b505af1158015610521573d6000803e3d6000fd5b5050604051632d0335ab60e01b815230600482015267ffffffffffffffff851692506000805160206114308339815191529150632d0335ab906024016020604051808303816000875af115801561057c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105a09190611248565b67ffffffffffffffff16146105b7576105b7611265565b5050565b60405163f8e18b5760e01b8152306004820152606460248201526000805160206114308339815191529063f8e18b5790604401600060405180830381600087803b15801561060857600080fd5b505af115801561061c573d6000803e3d6000fd5b5050604051632d0335ab60e01b8152306004820152600092506000805160206114308339815191529150632d0335ab906024015b6020604051808303816000875af115801561066f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106939190611248565b90508067ffffffffffffffff1660641461034757610347611265565b604051635a6b63c160e11b81526000805160206114308339815191529063b4d6c782906106e590607c908690869060040161127b565b600060405180830381600087803b1580156106ff57600080fd5b505af1158015610713573d6000803e3d6000fd5b505050506105b7607c6001600160a01b0316803b806020016040519081016040528181526000908060200190933c83838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610e5492505050565b604051632d0335ab60e01b815230600482015260009060008051602061143083398151915290632d0335ab906024016020604051808303816000875af11580156107cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ef9190611248565b90506103478167ffffffffffffffff166001610d65565b60405163c88a5e6d60e01b81526101486004820152602481018290526000805160206114308339815191529063c88a5e6d90604401600060405180830381600087803b15801561085557600080fd5b505af1158015610869573d6000803e3d6000fd5b505050506103476101486001600160a01b03163182610d65565b60405163f8e18b5760e01b815260646004820181905260248201526000805160206114308339815191529063f8e18b5790604401600060405180830381600087803b1580156108d157600080fd5b505af11580156108e5573d6000803e3d6000fd5b5050604051632d0335ab60e01b815260646004820152600092506000805160206114308339815191529150632d0335ab90602401610650565b60008054610100900460ff161561093e5750600054610100900460ff1690565b60006000805160206114308339815191523b15610a385760408051600080516020611430833981519152602082018190526519985a5b195960d21b828401528251808303840181526060830190935260009290916109c0917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc4916080016112bb565b60408051601f19818403018152908290526109da916112ec565b6000604051808303816000865af19150503d8060008114610a17576040519150601f19603f3d011682016040523d82523d6000602084013e610a1c565b606091505b5091505080806020019051810190610a349190611308565b9150505b919050565b604051632d0335ab60e01b81526064600482015260009060008051602061143083398151915290632d0335ab9060240161037b565b604051632631f2b160e11b81526000805160206114308339815191526001600160a01b038316811415600483015290634c63e56290602401600060405180830381600087803b158015610ac457600080fd5b505af1158015610ad8573d6000803e3d6000fd5b5050604051632631f2b160e11b8152306001600160a01b038516141560048201526000805160206114308339815191529250634c63e5629150602401600060405180830381600087803b158015610b2e57600080fd5b505af1158015610b42573d6000803e3d6000fd5b5050604051632631f2b160e11b8152733fab184622dc19b6109349b94811493bf2a453626001600160a01b038516141560048201526000805160206114308339815191529250634c63e5629150602401600060405180830381600087803b158015610bac57600080fd5b505af1158015610bc0573d6000803e3d6000fd5b5050604051632631f2b160e11b8152734e59b44847b379578588920ca78fbf26c0b4956c6001600160a01b038516141560048201526000805160206114308339815191529250634c63e5629150602401600060405180830381600087803b158015610c2a57600080fd5b505af1158015610c3e573d6000803e3d6000fd5b5050604051632d0335ab60e01b81526001600160a01b0384166004820152600092506000805160206114308339815191529150632d0335ab906024016020604051808303816000875af1158015610c99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cbd9190611248565b905067ffffffffffffffff8116156105b7576105b7611265565b604051632d0335ab60e01b815230600482015260009060008051602061143083398151915290632d0335ab906024016020604051808303816000875af1158015610d25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d499190611248565b90508067ffffffffffffffff1660011461034757610347611265565b8082146105b7577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f50604051610dd69060208082526022908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b75696e604082015261745d60f01b606082015260800190565b60405180910390a17fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a881604051610e0d919061132a565b60405180910390a17fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a882604051610e449190611362565b60405180910390a16105b7610e5e565b6105b78282610f5e565b6000805160206114308339815191523b15610f4d5760408051600080516020611430833981519152602082018190526519985a5b195960d21b9282019290925260016060820152600091907f70ca10bbd0dbfd9020a9f4b13402c16cb120705e0d1c0aeab10fa353ae586fc49060800160408051601f1981840301815290829052610eec92916020016112bb565b60408051601f1981840301815290829052610f06916112ec565b6000604051808303816000865af19150503d8060008114610f43576040519150601f19603f3d011682016040523d82523d6000602084013e610f48565b606091505b505050505b6000805461ff001916610100179055565b610f688282611045565b6105b7577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f50604051610fd79060208082526023908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b62797460408201526265735d60e81b606082015260800190565b60405180910390a17fd26e16cad4548705e4c9e2d94f98ee91c289085ee425594fd5635fa2964ccf188160405161100e919061138c565b60405180910390a17fd26e16cad4548705e4c9e2d94f98ee91c289085ee425594fd5635fa2964ccf1882604051610e4491906113c8565b8051825160019190036110c85760005b83518110156110c257828181518110611070576110706113f2565b602001015160f81c60f81b6001600160f81b031916848281518110611097576110976113f2565b01602001516001600160f81b031916146110b057600091505b806110ba81611408565b915050611055565b506110cc565b5060005b92915050565b67ffffffffffffffff8116811461034757600080fd5b6000602082840312156110fa57600080fd5b8135611105816110d2565b9392505050565b6000806020838503121561111f57600080fd5b823567ffffffffffffffff8082111561113757600080fd5b818501915085601f83011261114b57600080fd5b81358181111561115a57600080fd5b86602082850101111561116c57600080fd5b60209290920196919550909350505050565b60006020828403121561119057600080fd5b5035919050565b6000602082840312156111a957600080fd5b81356001600160a01b038116811461110557600080fd5b60005b838110156111db5781810151838201526020016111c3565b838111156111ea576000848401525b50505050565b600081518084526112088160208601602086016111c0565b601f01601f19169290920160200192915050565b6001600160a01b0383168152604060208201819052600090611240908301846111f0565b949350505050565b60006020828403121561125a57600080fd5b8151611105816110d2565b634e487b7160e01b600052600160045260246000fd5b6001600160a01b03841681526040602082018190528101829052818360608301376000818301606090810191909152601f909201601f1916010192915050565b6001600160e01b03198316815281516000906112de8160048501602087016111c0565b919091016004019392505050565b600082516112fe8184602087016111c0565b9190910192915050565b60006020828403121561131a57600080fd5b8151801515811461110557600080fd5b60408152600061135460408301600a8152690808115e1c1958dd195960b21b602082015260400190565b905082602083015292915050565b60408152600061135460408301600a815269080808081058dd1d585b60b21b602082015260400190565b6040815260006113b660408301600a8152690808115e1c1958dd195960b21b602082015260400190565b828103602084015261124081856111f0565b6040815260006113b660408301600a815269080808081058dd1d585b60b21b602082015260400190565b634e487b7160e01b600052603260045260246000fd5b60006001820161142857634e487b7160e01b600052601160045260246000fd5b506001019056fe0000000000000000000000007109709ecfa91a80626ff3989d68f67f5b1dd12da2646970667358221220e2c5ea8b9262b86adfa9a92e0c6ee32846a3b24b87b91401913d2dc46f21c9fc64736f6c634300080d0033"}]}]}]}, {"tag": "App", "name": "Lbl'-LT-'storage'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'Stop'Map", "sorts": [], "args": []}]}, {"tag": "App", "name": "Lbl'-LT-'origStorage'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'Stop'Map", "sorts": [], "args": []}]}, {"tag": "App", "name": "Lbl'-LT-'nonce'-GT-'", "sorts": [], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "1"}]}]}]}, {"tag": "App", "name": "LblAccountCellMapItem", "sorts": [], "args": [{"tag": "App", "name": "Lbl'-LT-'acctID'-GT-'", "sorts": [], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "645326474426547203313410069153905908525362434349"}]}, {"tag": "App", "name": "Lbl'-LT-'account'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'-LT-'acctID'-GT-'", "sorts": [], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "645326474426547203313410069153905908525362434349"}]}, {"tag": "App", "name": "Lbl'-LT-'balance'-GT-'", "sorts": [], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "0"}]}, {"tag": "App", "name": "Lbl'-LT-'code'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortBytes", "args": []}, {"tag": "SortApp", "name": "SortAccountCode", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortBytes", "args": []}, "value": "\u0000"}]}]}, {"tag": "App", "name": "Lbl'-LT-'storage'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'Stop'Map", "sorts": [], "args": []}]}, {"tag": "App", "name": "Lbl'-LT-'origStorage'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'Stop'Map", "sorts": [], "args": []}]}, {"tag": "App", "name": "Lbl'-LT-'nonce'-GT-'", "sorts": [], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "0"}]}]}]}]}]}, {"tag": "App", "name": "Lbl'-LT-'txOrder'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarTXORDER'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortList", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'txPending'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarTXPENDING'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortList", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'messages'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarMESSAGES'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortMessageCellMap", "args": []}}]}]}]}]}, {"tag": "App", "name": "Lbl'-LT-'cheatcodes'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'-LT-'prank'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'-LT-'prevCaller'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'Stop'Account'Unds'EVM-TYPES'Unds'Account", "sorts": [], "args": []}]}, {"tag": "App", "name": "Lbl'-LT-'prevOrigin'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'Stop'Account'Unds'EVM-TYPES'Unds'Account", "sorts": [], "args": []}]}, {"tag": "App", "name": "Lbl'-LT-'newCaller'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'Stop'Account'Unds'EVM-TYPES'Unds'Account", "sorts": [], "args": []}]}, {"tag": "App", "name": "Lbl'-LT-'newOrigin'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'Stop'Account'Unds'EVM-TYPES'Unds'Account", "sorts": [], "args": []}]}, {"tag": "App", "name": "Lbl'-LT-'active'-GT-'", "sorts": [], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortBool", "args": []}, "value": "false"}]}, {"tag": "App", "name": "Lbl'-LT-'depth'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarDEPTH'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'singleCall'-GT-'", "sorts": [], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortBool", "args": []}, "value": "false"}]}]}, {"tag": "App", "name": "Lbl'-LT-'expectedRevert'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'-LT-'isRevertExpected'-GT-'", "sorts": [], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortBool", "args": []}, "value": "false"}]}, {"tag": "App", "name": "Lbl'-LT-'expectedReason'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarEXPECTEDREASON'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortBytes", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'expectedDepth'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarEXPECTEDDEPTH'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}]}]}, {"tag": "App", "name": "Lbl'-LT-'expectedOpcode'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'-LT-'isOpcodeExpected'-GT-'", "sorts": [], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortBool", "args": []}, "value": "false"}]}, {"tag": "App", "name": "Lbl'-LT-'expectedAddress'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'Stop'Account'Unds'EVM-TYPES'Unds'Account", "sorts": [], "args": []}]}, {"tag": "App", "name": "Lbl'-LT-'expectedValue'-GT-'", "sorts": [], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "0"}]}, {"tag": "App", "name": "Lbl'-LT-'expectedData'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'Stop'Bytes'Unds'BYTES-HOOKED'Unds'Bytes", "sorts": [], "args": []}]}, {"tag": "App", "name": "Lbl'-LT-'opcodeType'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'Stop'OpcodeType'Unds'FOUNDRY-CHEAT-CODES'Unds'OpcodeType", "sorts": [], "args": []}]}]}, {"tag": "App", "name": "Lbl'-LT-'expectEmit'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'-LT-'recordEvent'-GT-'", "sorts": [], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortBool", "args": []}, "value": "false"}]}, {"tag": "App", "name": "Lbl'-LT-'isEventExpected'-GT-'", "sorts": [], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortBool", "args": []}, "value": "false"}]}, {"tag": "App", "name": "Lbl'-LT-'checkedTopics'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarCHECKEDTOPICS'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortList", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'checkedData'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarCHECKEDDATA'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortBool", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'expectedEventAddress'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarEXPECTEDEVENTADDRESS'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortAccount", "args": []}}]}]}, {"tag": "App", "name": "Lbl'-LT-'whitelist'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'-LT-'isCallWhitelistActive'-GT-'", "sorts": [], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortBool", "args": []}, "value": "false"}]}, {"tag": "App", "name": "Lbl'-LT-'isStorageWhitelistActive'-GT-'", "sorts": [], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortBool", "args": []}, "value": "false"}]}, {"tag": "App", "name": "Lbl'-LT-'addressSet'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'Stop'Set", "sorts": [], "args": []}]}, {"tag": "App", "name": "Lbl'-LT-'storageSlotSet'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'Stop'Set", "sorts": [], "args": []}]}]}]}]}, {"tag": "App", "name": "Lbl'-LT-'generatedCounter'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarGENERATEDCOUNTER'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}]}]}}}}} \ No newline at end of file diff --git a/test/jsonrpc-examples/foundry-proof2.simplify.request b/test/jsonrpc-examples/foundry-proof2.simplify.request new file mode 100644 index 000000000..f72a449c0 --- /dev/null +++ b/test/jsonrpc-examples/foundry-proof2.simplify.request @@ -0,0 +1 @@ +{"jsonrpc": "2.0", "id": 2, "method": "simplify", "params": {"state": {"format": "KORE", "version": 1, "term": {"tag": "And", "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "first": {"tag": "App", "name": "Lbl'-LT-'generatedTop'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'-LT-'foundry'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'-LT-'kevm'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'-LT-'k'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "kseq", "sorts": [], "args": [{"tag": "App", "name": "Lbl'Hash'execute'Unds'EVM'Unds'KItem", "sorts": [], "args": []}, {"tag": "EVar", "name": "VarCONTINUATION", "sort": {"tag": "SortApp", "name": "SortK", "args": []}}]}]}, {"tag": "App", "name": "Lbl'-LT-'exit-code'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarEXITCODE'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'mode'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "LblNORMAL", "sorts": [], "args": []}]}, {"tag": "App", "name": "Lbl'-LT-'schedule'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "LblLONDON'Unds'EVM", "sorts": [], "args": []}]}, {"tag": "App", "name": "Lbl'-LT-'ethereum'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'-LT-'evm'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'-LT-'output'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarOUTPUT'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortBytes", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'statusCode'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarSTATUSCODE", "sort": {"tag": "SortApp", "name": "SortStatusCode", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'callStack'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'Stop'List", "sorts": [], "args": []}]}, {"tag": "App", "name": "Lbl'-LT-'interimStates'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'Stop'List", "sorts": [], "args": []}]}, {"tag": "App", "name": "Lbl'-LT-'touchedAccounts'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarTOUCHEDACCOUNTS'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortSet", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'callState'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'-LT-'program'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'Hash'parseByteStack'LParUndsRParUnds'SERIALIZATION'Unds'Bytes'Unds'String", "sorts": [], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortString", "args": []}, "value": "0x608060405234801561001057600080fd5b50600436106101005760003560e01c80639a13b46011610097578063eaef3d1411610066578063eaef3d14146101c2578063ec846da6146101d5578063f8ccbf47146101dd578063fa7626d4146101f057600080fd5b80639a13b46014610187578063b1ec79811461019a578063ba414fa6146101a2578063d350206f146101ba57600080fd5b80634e18fd0b116100d35780634e18fd0b146101515780635f45761c146101645780637dbb0fbf1461016c5780638eafad631461017f57600080fd5b80631f9894c2146101055780633021887c1461010f5780633a768463146101175780633fa6f85014610149575b600080fd5b61010d6101fd565b005b61010d61027f565b61012c60008051602061143083398151915281565b6040516001600160a01b0390911681526020015b60405180910390f35b61010d61034a565b61010d61015f3660046110e8565b6103d5565b61010d6105bb565b61010d61017a36600461110c565b6106af565b61010d61077d565b61010d61019536600461117e565b610806565b61010d610883565b6101aa61091e565b6040519015158152602001610140565b61010d610a3d565b61010d6101d0366004611197565b610a72565b61010d610cd7565b6000546101aa9062010000900460ff1681565b6000546101aa9060ff1681565b60405163c88a5e6d60e01b81526101f9600482015261010060248201526000805160206114308339815191529063c88a5e6d90604401600060405180830381600087803b15801561024d57600080fd5b505af1158015610261573d6000803e3d6000fd5b5050505061027d6101f96001600160a01b031631610100610d65565b565b604080518082018252601b81527f746869732073686f756c642062652045564d2062797465636f6465000000000060208201529051635a6b63c160e11b81526000805160206114308339815191529063b4d6c782906102e590607c90859060040161121c565b600060405180830381600087803b1580156102ff57600080fd5b505af1158015610313573d6000803e3d6000fd5b50505050610347607c6001600160a01b0316803b806020016040519081016040528181526000908060200190933c82610e54565b50565b604051632d0335ab60e01b81526000600482018190529060008051602061143083398151915290632d0335ab906024015b6020604051808303816000875af115801561039a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103be9190611248565b90506103478167ffffffffffffffff16600a610d65565b604051632d0335ab60e01b815230600482015260009060008051602061143083398151915290632d0335ab906024016020604051808303816000875af1158015610423573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104479190611248565b604051632631f2b160e11b815267ffffffffffffffff80831690851611600482015290915060008051602061143083398151915290634c63e56290602401600060405180830381600087803b15801561049f57600080fd5b505af11580156104b3573d6000803e3d6000fd5b505060405163f8e18b5760e01b815230600482015267ffffffffffffffff85166024820152600080516020611430833981519152925063f8e18b579150604401600060405180830381600087803b15801561050d57600080fd5b505af1158015610521573d6000803e3d6000fd5b5050604051632d0335ab60e01b815230600482015267ffffffffffffffff851692506000805160206114308339815191529150632d0335ab906024016020604051808303816000875af115801561057c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105a09190611248565b67ffffffffffffffff16146105b7576105b7611265565b5050565b60405163f8e18b5760e01b8152306004820152606460248201526000805160206114308339815191529063f8e18b5790604401600060405180830381600087803b15801561060857600080fd5b505af115801561061c573d6000803e3d6000fd5b5050604051632d0335ab60e01b8152306004820152600092506000805160206114308339815191529150632d0335ab906024015b6020604051808303816000875af115801561066f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106939190611248565b90508067ffffffffffffffff1660641461034757610347611265565b604051635a6b63c160e11b81526000805160206114308339815191529063b4d6c782906106e590607c908690869060040161127b565b600060405180830381600087803b1580156106ff57600080fd5b505af1158015610713573d6000803e3d6000fd5b505050506105b7607c6001600160a01b0316803b806020016040519081016040528181526000908060200190933c83838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610e5492505050565b604051632d0335ab60e01b815230600482015260009060008051602061143083398151915290632d0335ab906024016020604051808303816000875af11580156107cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ef9190611248565b90506103478167ffffffffffffffff166001610d65565b60405163c88a5e6d60e01b81526101486004820152602481018290526000805160206114308339815191529063c88a5e6d90604401600060405180830381600087803b15801561085557600080fd5b505af1158015610869573d6000803e3d6000fd5b505050506103476101486001600160a01b03163182610d65565b60405163f8e18b5760e01b815260646004820181905260248201526000805160206114308339815191529063f8e18b5790604401600060405180830381600087803b1580156108d157600080fd5b505af11580156108e5573d6000803e3d6000fd5b5050604051632d0335ab60e01b815260646004820152600092506000805160206114308339815191529150632d0335ab90602401610650565b60008054610100900460ff161561093e5750600054610100900460ff1690565b60006000805160206114308339815191523b15610a385760408051600080516020611430833981519152602082018190526519985a5b195960d21b828401528251808303840181526060830190935260009290916109c0917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc4916080016112bb565b60408051601f19818403018152908290526109da916112ec565b6000604051808303816000865af19150503d8060008114610a17576040519150601f19603f3d011682016040523d82523d6000602084013e610a1c565b606091505b5091505080806020019051810190610a349190611308565b9150505b919050565b604051632d0335ab60e01b81526064600482015260009060008051602061143083398151915290632d0335ab9060240161037b565b604051632631f2b160e11b81526000805160206114308339815191526001600160a01b038316811415600483015290634c63e56290602401600060405180830381600087803b158015610ac457600080fd5b505af1158015610ad8573d6000803e3d6000fd5b5050604051632631f2b160e11b8152306001600160a01b038516141560048201526000805160206114308339815191529250634c63e5629150602401600060405180830381600087803b158015610b2e57600080fd5b505af1158015610b42573d6000803e3d6000fd5b5050604051632631f2b160e11b8152733fab184622dc19b6109349b94811493bf2a453626001600160a01b038516141560048201526000805160206114308339815191529250634c63e5629150602401600060405180830381600087803b158015610bac57600080fd5b505af1158015610bc0573d6000803e3d6000fd5b5050604051632631f2b160e11b8152734e59b44847b379578588920ca78fbf26c0b4956c6001600160a01b038516141560048201526000805160206114308339815191529250634c63e5629150602401600060405180830381600087803b158015610c2a57600080fd5b505af1158015610c3e573d6000803e3d6000fd5b5050604051632d0335ab60e01b81526001600160a01b0384166004820152600092506000805160206114308339815191529150632d0335ab906024016020604051808303816000875af1158015610c99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cbd9190611248565b905067ffffffffffffffff8116156105b7576105b7611265565b604051632d0335ab60e01b815230600482015260009060008051602061143083398151915290632d0335ab906024016020604051808303816000875af1158015610d25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d499190611248565b90508067ffffffffffffffff1660011461034757610347611265565b8082146105b7577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f50604051610dd69060208082526022908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b75696e604082015261745d60f01b606082015260800190565b60405180910390a17fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a881604051610e0d919061132a565b60405180910390a17fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a882604051610e449190611362565b60405180910390a16105b7610e5e565b6105b78282610f5e565b6000805160206114308339815191523b15610f4d5760408051600080516020611430833981519152602082018190526519985a5b195960d21b9282019290925260016060820152600091907f70ca10bbd0dbfd9020a9f4b13402c16cb120705e0d1c0aeab10fa353ae586fc49060800160408051601f1981840301815290829052610eec92916020016112bb565b60408051601f1981840301815290829052610f06916112ec565b6000604051808303816000865af19150503d8060008114610f43576040519150601f19603f3d011682016040523d82523d6000602084013e610f48565b606091505b505050505b6000805461ff001916610100179055565b610f688282611045565b6105b7577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f50604051610fd79060208082526023908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b62797460408201526265735d60e81b606082015260800190565b60405180910390a17fd26e16cad4548705e4c9e2d94f98ee91c289085ee425594fd5635fa2964ccf188160405161100e919061138c565b60405180910390a17fd26e16cad4548705e4c9e2d94f98ee91c289085ee425594fd5635fa2964ccf1882604051610e4491906113c8565b8051825160019190036110c85760005b83518110156110c257828181518110611070576110706113f2565b602001015160f81c60f81b6001600160f81b031916848281518110611097576110976113f2565b01602001516001600160f81b031916146110b057600091505b806110ba81611408565b915050611055565b506110cc565b5060005b92915050565b67ffffffffffffffff8116811461034757600080fd5b6000602082840312156110fa57600080fd5b8135611105816110d2565b9392505050565b6000806020838503121561111f57600080fd5b823567ffffffffffffffff8082111561113757600080fd5b818501915085601f83011261114b57600080fd5b81358181111561115a57600080fd5b86602082850101111561116c57600080fd5b60209290920196919550909350505050565b60006020828403121561119057600080fd5b5035919050565b6000602082840312156111a957600080fd5b81356001600160a01b038116811461110557600080fd5b60005b838110156111db5781810151838201526020016111c3565b838111156111ea576000848401525b50505050565b600081518084526112088160208601602086016111c0565b601f01601f19169290920160200192915050565b6001600160a01b0383168152604060208201819052600090611240908301846111f0565b949350505050565b60006020828403121561125a57600080fd5b8151611105816110d2565b634e487b7160e01b600052600160045260246000fd5b6001600160a01b03841681526040602082018190528101829052818360608301376000818301606090810191909152601f909201601f1916010192915050565b6001600160e01b03198316815281516000906112de8160048501602087016111c0565b919091016004019392505050565b600082516112fe8184602087016111c0565b9190910192915050565b60006020828403121561131a57600080fd5b8151801515811461110557600080fd5b60408152600061135460408301600a8152690808115e1c1958dd195960b21b602082015260400190565b905082602083015292915050565b60408152600061135460408301600a815269080808081058dd1d585b60b21b602082015260400190565b6040815260006113b660408301600a8152690808115e1c1958dd195960b21b602082015260400190565b828103602084015261124081856111f0565b6040815260006113b660408301600a815269080808081058dd1d585b60b21b602082015260400190565b634e487b7160e01b600052603260045260246000fd5b60006001820161142857634e487b7160e01b600052601160045260246000fd5b506001019056fe0000000000000000000000007109709ecfa91a80626ff3989d68f67f5b1dd12da2646970667358221220e2c5ea8b9262b86adfa9a92e0c6ee32846a3b24b87b91401913d2dc46f21c9fc64736f6c634300080d0033"}]}]}, {"tag": "App", "name": "Lbl'-LT-'jumpDests'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'Hash'computeValidJumpDests'LParUndsRParUnds'EVM'Unds'Set'Unds'Bytes", "sorts": [], "args": [{"tag": "App", "name": "Lbl'Hash'parseByteStack'LParUndsRParUnds'SERIALIZATION'Unds'Bytes'Unds'String", "sorts": [], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortString", "args": []}, "value": "0x608060405234801561001057600080fd5b50600436106101005760003560e01c80639a13b46011610097578063eaef3d1411610066578063eaef3d14146101c2578063ec846da6146101d5578063f8ccbf47146101dd578063fa7626d4146101f057600080fd5b80639a13b46014610187578063b1ec79811461019a578063ba414fa6146101a2578063d350206f146101ba57600080fd5b80634e18fd0b116100d35780634e18fd0b146101515780635f45761c146101645780637dbb0fbf1461016c5780638eafad631461017f57600080fd5b80631f9894c2146101055780633021887c1461010f5780633a768463146101175780633fa6f85014610149575b600080fd5b61010d6101fd565b005b61010d61027f565b61012c60008051602061143083398151915281565b6040516001600160a01b0390911681526020015b60405180910390f35b61010d61034a565b61010d61015f3660046110e8565b6103d5565b61010d6105bb565b61010d61017a36600461110c565b6106af565b61010d61077d565b61010d61019536600461117e565b610806565b61010d610883565b6101aa61091e565b6040519015158152602001610140565b61010d610a3d565b61010d6101d0366004611197565b610a72565b61010d610cd7565b6000546101aa9062010000900460ff1681565b6000546101aa9060ff1681565b60405163c88a5e6d60e01b81526101f9600482015261010060248201526000805160206114308339815191529063c88a5e6d90604401600060405180830381600087803b15801561024d57600080fd5b505af1158015610261573d6000803e3d6000fd5b5050505061027d6101f96001600160a01b031631610100610d65565b565b604080518082018252601b81527f746869732073686f756c642062652045564d2062797465636f6465000000000060208201529051635a6b63c160e11b81526000805160206114308339815191529063b4d6c782906102e590607c90859060040161121c565b600060405180830381600087803b1580156102ff57600080fd5b505af1158015610313573d6000803e3d6000fd5b50505050610347607c6001600160a01b0316803b806020016040519081016040528181526000908060200190933c82610e54565b50565b604051632d0335ab60e01b81526000600482018190529060008051602061143083398151915290632d0335ab906024015b6020604051808303816000875af115801561039a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103be9190611248565b90506103478167ffffffffffffffff16600a610d65565b604051632d0335ab60e01b815230600482015260009060008051602061143083398151915290632d0335ab906024016020604051808303816000875af1158015610423573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104479190611248565b604051632631f2b160e11b815267ffffffffffffffff80831690851611600482015290915060008051602061143083398151915290634c63e56290602401600060405180830381600087803b15801561049f57600080fd5b505af11580156104b3573d6000803e3d6000fd5b505060405163f8e18b5760e01b815230600482015267ffffffffffffffff85166024820152600080516020611430833981519152925063f8e18b579150604401600060405180830381600087803b15801561050d57600080fd5b505af1158015610521573d6000803e3d6000fd5b5050604051632d0335ab60e01b815230600482015267ffffffffffffffff851692506000805160206114308339815191529150632d0335ab906024016020604051808303816000875af115801561057c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105a09190611248565b67ffffffffffffffff16146105b7576105b7611265565b5050565b60405163f8e18b5760e01b8152306004820152606460248201526000805160206114308339815191529063f8e18b5790604401600060405180830381600087803b15801561060857600080fd5b505af115801561061c573d6000803e3d6000fd5b5050604051632d0335ab60e01b8152306004820152600092506000805160206114308339815191529150632d0335ab906024015b6020604051808303816000875af115801561066f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106939190611248565b90508067ffffffffffffffff1660641461034757610347611265565b604051635a6b63c160e11b81526000805160206114308339815191529063b4d6c782906106e590607c908690869060040161127b565b600060405180830381600087803b1580156106ff57600080fd5b505af1158015610713573d6000803e3d6000fd5b505050506105b7607c6001600160a01b0316803b806020016040519081016040528181526000908060200190933c83838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610e5492505050565b604051632d0335ab60e01b815230600482015260009060008051602061143083398151915290632d0335ab906024016020604051808303816000875af11580156107cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ef9190611248565b90506103478167ffffffffffffffff166001610d65565b60405163c88a5e6d60e01b81526101486004820152602481018290526000805160206114308339815191529063c88a5e6d90604401600060405180830381600087803b15801561085557600080fd5b505af1158015610869573d6000803e3d6000fd5b505050506103476101486001600160a01b03163182610d65565b60405163f8e18b5760e01b815260646004820181905260248201526000805160206114308339815191529063f8e18b5790604401600060405180830381600087803b1580156108d157600080fd5b505af11580156108e5573d6000803e3d6000fd5b5050604051632d0335ab60e01b815260646004820152600092506000805160206114308339815191529150632d0335ab90602401610650565b60008054610100900460ff161561093e5750600054610100900460ff1690565b60006000805160206114308339815191523b15610a385760408051600080516020611430833981519152602082018190526519985a5b195960d21b828401528251808303840181526060830190935260009290916109c0917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc4916080016112bb565b60408051601f19818403018152908290526109da916112ec565b6000604051808303816000865af19150503d8060008114610a17576040519150601f19603f3d011682016040523d82523d6000602084013e610a1c565b606091505b5091505080806020019051810190610a349190611308565b9150505b919050565b604051632d0335ab60e01b81526064600482015260009060008051602061143083398151915290632d0335ab9060240161037b565b604051632631f2b160e11b81526000805160206114308339815191526001600160a01b038316811415600483015290634c63e56290602401600060405180830381600087803b158015610ac457600080fd5b505af1158015610ad8573d6000803e3d6000fd5b5050604051632631f2b160e11b8152306001600160a01b038516141560048201526000805160206114308339815191529250634c63e5629150602401600060405180830381600087803b158015610b2e57600080fd5b505af1158015610b42573d6000803e3d6000fd5b5050604051632631f2b160e11b8152733fab184622dc19b6109349b94811493bf2a453626001600160a01b038516141560048201526000805160206114308339815191529250634c63e5629150602401600060405180830381600087803b158015610bac57600080fd5b505af1158015610bc0573d6000803e3d6000fd5b5050604051632631f2b160e11b8152734e59b44847b379578588920ca78fbf26c0b4956c6001600160a01b038516141560048201526000805160206114308339815191529250634c63e5629150602401600060405180830381600087803b158015610c2a57600080fd5b505af1158015610c3e573d6000803e3d6000fd5b5050604051632d0335ab60e01b81526001600160a01b0384166004820152600092506000805160206114308339815191529150632d0335ab906024016020604051808303816000875af1158015610c99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cbd9190611248565b905067ffffffffffffffff8116156105b7576105b7611265565b604051632d0335ab60e01b815230600482015260009060008051602061143083398151915290632d0335ab906024016020604051808303816000875af1158015610d25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d499190611248565b90508067ffffffffffffffff1660011461034757610347611265565b8082146105b7577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f50604051610dd69060208082526022908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b75696e604082015261745d60f01b606082015260800190565b60405180910390a17fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a881604051610e0d919061132a565b60405180910390a17fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a882604051610e449190611362565b60405180910390a16105b7610e5e565b6105b78282610f5e565b6000805160206114308339815191523b15610f4d5760408051600080516020611430833981519152602082018190526519985a5b195960d21b9282019290925260016060820152600091907f70ca10bbd0dbfd9020a9f4b13402c16cb120705e0d1c0aeab10fa353ae586fc49060800160408051601f1981840301815290829052610eec92916020016112bb565b60408051601f1981840301815290829052610f06916112ec565b6000604051808303816000865af19150503d8060008114610f43576040519150601f19603f3d011682016040523d82523d6000602084013e610f48565b606091505b505050505b6000805461ff001916610100179055565b610f688282611045565b6105b7577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f50604051610fd79060208082526023908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b62797460408201526265735d60e81b606082015260800190565b60405180910390a17fd26e16cad4548705e4c9e2d94f98ee91c289085ee425594fd5635fa2964ccf188160405161100e919061138c565b60405180910390a17fd26e16cad4548705e4c9e2d94f98ee91c289085ee425594fd5635fa2964ccf1882604051610e4491906113c8565b8051825160019190036110c85760005b83518110156110c257828181518110611070576110706113f2565b602001015160f81c60f81b6001600160f81b031916848281518110611097576110976113f2565b01602001516001600160f81b031916146110b057600091505b806110ba81611408565b915050611055565b506110cc565b5060005b92915050565b67ffffffffffffffff8116811461034757600080fd5b6000602082840312156110fa57600080fd5b8135611105816110d2565b9392505050565b6000806020838503121561111f57600080fd5b823567ffffffffffffffff8082111561113757600080fd5b818501915085601f83011261114b57600080fd5b81358181111561115a57600080fd5b86602082850101111561116c57600080fd5b60209290920196919550909350505050565b60006020828403121561119057600080fd5b5035919050565b6000602082840312156111a957600080fd5b81356001600160a01b038116811461110557600080fd5b60005b838110156111db5781810151838201526020016111c3565b838111156111ea576000848401525b50505050565b600081518084526112088160208601602086016111c0565b601f01601f19169290920160200192915050565b6001600160a01b0383168152604060208201819052600090611240908301846111f0565b949350505050565b60006020828403121561125a57600080fd5b8151611105816110d2565b634e487b7160e01b600052600160045260246000fd5b6001600160a01b03841681526040602082018190528101829052818360608301376000818301606090810191909152601f909201601f1916010192915050565b6001600160e01b03198316815281516000906112de8160048501602087016111c0565b919091016004019392505050565b600082516112fe8184602087016111c0565b9190910192915050565b60006020828403121561131a57600080fd5b8151801515811461110557600080fd5b60408152600061135460408301600a8152690808115e1c1958dd195960b21b602082015260400190565b905082602083015292915050565b60408152600061135460408301600a815269080808081058dd1d585b60b21b602082015260400190565b6040815260006113b660408301600a8152690808115e1c1958dd195960b21b602082015260400190565b828103602084015261124081856111f0565b6040815260006113b660408301600a815269080808081058dd1d585b60b21b602082015260400190565b634e487b7160e01b600052603260045260246000fd5b60006001820161142857634e487b7160e01b600052601160045260246000fd5b506001019056fe0000000000000000000000007109709ecfa91a80626ff3989d68f67f5b1dd12da2646970667358221220e2c5ea8b9262b86adfa9a92e0c6ee32846a3b24b87b91401913d2dc46f21c9fc64736f6c634300080d0033"}]}]}]}, {"tag": "App", "name": "Lbl'-LT-'id'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortAccount", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "728815563385977040452943777879061427756277306518"}]}]}, {"tag": "App", "name": "Lbl'-LT-'caller'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortAccount", "args": []}], "args": [{"tag": "EVar", "name": "VarCALLER'Unds'ID", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}]}]}, {"tag": "App", "name": "Lbl'-LT-'callData'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lblmethod'Unds'AccountParamsTest", "sorts": [], "args": [{"tag": "App", "name": "Lblcontract'Unds'AccountParamsTest", "sorts": [], "args": []}, {"tag": "App", "name": "Lblmethod'Unds'AccountParamsTest'Unds'testDealConcrete'Unds'", "sorts": [], "args": []}]}]}, {"tag": "App", "name": "Lbl'-LT-'callValue'-GT-'", "sorts": [], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "0"}]}, {"tag": "App", "name": "Lbl'-LT-'wordStack'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'Stop'WordStack'Unds'EVM-TYPES'Unds'WordStack", "sorts": [], "args": []}]}, {"tag": "App", "name": "Lbl'-LT-'localMem'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'Stop'Bytes'Unds'BYTES-HOOKED'Unds'Bytes", "sorts": [], "args": []}]}, {"tag": "App", "name": "Lbl'-LT-'pc'-GT-'", "sorts": [], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "0"}]}, {"tag": "App", "name": "Lbl'-LT-'gas'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortGas", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "9223372036854775807"}]}]}, {"tag": "App", "name": "Lbl'-LT-'memoryUsed'-GT-'", "sorts": [], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "0"}]}, {"tag": "App", "name": "Lbl'-LT-'callGas'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarCALLGAS'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortGas", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'static'-GT-'", "sorts": [], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortBool", "args": []}, "value": "false"}]}, {"tag": "App", "name": "Lbl'-LT-'callDepth'-GT-'", "sorts": [], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "0"}]}]}, {"tag": "App", "name": "Lbl'-LT-'substate'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'-LT-'selfDestruct'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarSELFDESTRUCT'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortSet", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'log'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'Stop'List", "sorts": [], "args": []}]}, {"tag": "App", "name": "Lbl'-LT-'refund'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarREFUND'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'accessedAccounts'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'Stop'Set", "sorts": [], "args": []}]}, {"tag": "App", "name": "Lbl'-LT-'accessedStorage'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'Stop'Map", "sorts": [], "args": []}]}]}, {"tag": "App", "name": "Lbl'-LT-'gasPrice'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarGASPRICE'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'origin'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortInt", "args": []}, {"tag": "SortApp", "name": "SortAccount", "args": []}], "args": [{"tag": "EVar", "name": "VarORIGIN'Unds'ID", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}]}]}, {"tag": "App", "name": "Lbl'-LT-'blockhashes'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarBLOCKHASHES'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortList", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'block'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'-LT-'previousHash'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarPREVIOUSHASH'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'ommersHash'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarOMMERSHASH'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'coinbase'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarCOINBASE'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'stateRoot'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarSTATEROOT'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'transactionsRoot'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarTRANSACTIONSROOT'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'receiptsRoot'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarRECEIPTSROOT'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'logsBloom'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarLOGSBLOOM'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortBytes", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'difficulty'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarDIFFICULTY'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'number'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarNUMBER'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'gasLimit'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarGASLIMIT'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'gasUsed'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarGASUSED'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortGas", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'timestamp'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarTIMESTAMP'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'extraData'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarEXTRADATA'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortBytes", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'mixHash'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarMIXHASH'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'blockNonce'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarBLOCKNONCE'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'baseFee'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarBASEFEE'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'ommerBlockHeaders'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarOMMERBLOCKHEADERS'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortJSON", "args": []}}]}]}]}, {"tag": "App", "name": "Lbl'-LT-'network'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'-LT-'chainID'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarCHAINID'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'accounts'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'Unds'AccountCellMap'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LblAccountCellMapItem", "sorts": [], "args": [{"tag": "App", "name": "Lbl'-LT-'acctID'-GT-'", "sorts": [], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "728815563385977040452943777879061427756277306518"}]}, {"tag": "App", "name": "Lbl'-LT-'account'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'-LT-'acctID'-GT-'", "sorts": [], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "728815563385977040452943777879061427756277306518"}]}, {"tag": "App", "name": "Lbl'-LT-'balance'-GT-'", "sorts": [], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "0"}]}, {"tag": "App", "name": "Lbl'-LT-'code'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortBytes", "args": []}, {"tag": "SortApp", "name": "SortAccountCode", "args": []}], "args": [{"tag": "App", "name": "Lbl'Hash'parseByteStack'LParUndsRParUnds'SERIALIZATION'Unds'Bytes'Unds'String", "sorts": [], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortString", "args": []}, "value": "0x608060405234801561001057600080fd5b50600436106101005760003560e01c80639a13b46011610097578063eaef3d1411610066578063eaef3d14146101c2578063ec846da6146101d5578063f8ccbf47146101dd578063fa7626d4146101f057600080fd5b80639a13b46014610187578063b1ec79811461019a578063ba414fa6146101a2578063d350206f146101ba57600080fd5b80634e18fd0b116100d35780634e18fd0b146101515780635f45761c146101645780637dbb0fbf1461016c5780638eafad631461017f57600080fd5b80631f9894c2146101055780633021887c1461010f5780633a768463146101175780633fa6f85014610149575b600080fd5b61010d6101fd565b005b61010d61027f565b61012c60008051602061143083398151915281565b6040516001600160a01b0390911681526020015b60405180910390f35b61010d61034a565b61010d61015f3660046110e8565b6103d5565b61010d6105bb565b61010d61017a36600461110c565b6106af565b61010d61077d565b61010d61019536600461117e565b610806565b61010d610883565b6101aa61091e565b6040519015158152602001610140565b61010d610a3d565b61010d6101d0366004611197565b610a72565b61010d610cd7565b6000546101aa9062010000900460ff1681565b6000546101aa9060ff1681565b60405163c88a5e6d60e01b81526101f9600482015261010060248201526000805160206114308339815191529063c88a5e6d90604401600060405180830381600087803b15801561024d57600080fd5b505af1158015610261573d6000803e3d6000fd5b5050505061027d6101f96001600160a01b031631610100610d65565b565b604080518082018252601b81527f746869732073686f756c642062652045564d2062797465636f6465000000000060208201529051635a6b63c160e11b81526000805160206114308339815191529063b4d6c782906102e590607c90859060040161121c565b600060405180830381600087803b1580156102ff57600080fd5b505af1158015610313573d6000803e3d6000fd5b50505050610347607c6001600160a01b0316803b806020016040519081016040528181526000908060200190933c82610e54565b50565b604051632d0335ab60e01b81526000600482018190529060008051602061143083398151915290632d0335ab906024015b6020604051808303816000875af115801561039a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103be9190611248565b90506103478167ffffffffffffffff16600a610d65565b604051632d0335ab60e01b815230600482015260009060008051602061143083398151915290632d0335ab906024016020604051808303816000875af1158015610423573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104479190611248565b604051632631f2b160e11b815267ffffffffffffffff80831690851611600482015290915060008051602061143083398151915290634c63e56290602401600060405180830381600087803b15801561049f57600080fd5b505af11580156104b3573d6000803e3d6000fd5b505060405163f8e18b5760e01b815230600482015267ffffffffffffffff85166024820152600080516020611430833981519152925063f8e18b579150604401600060405180830381600087803b15801561050d57600080fd5b505af1158015610521573d6000803e3d6000fd5b5050604051632d0335ab60e01b815230600482015267ffffffffffffffff851692506000805160206114308339815191529150632d0335ab906024016020604051808303816000875af115801561057c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105a09190611248565b67ffffffffffffffff16146105b7576105b7611265565b5050565b60405163f8e18b5760e01b8152306004820152606460248201526000805160206114308339815191529063f8e18b5790604401600060405180830381600087803b15801561060857600080fd5b505af115801561061c573d6000803e3d6000fd5b5050604051632d0335ab60e01b8152306004820152600092506000805160206114308339815191529150632d0335ab906024015b6020604051808303816000875af115801561066f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106939190611248565b90508067ffffffffffffffff1660641461034757610347611265565b604051635a6b63c160e11b81526000805160206114308339815191529063b4d6c782906106e590607c908690869060040161127b565b600060405180830381600087803b1580156106ff57600080fd5b505af1158015610713573d6000803e3d6000fd5b505050506105b7607c6001600160a01b0316803b806020016040519081016040528181526000908060200190933c83838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610e5492505050565b604051632d0335ab60e01b815230600482015260009060008051602061143083398151915290632d0335ab906024016020604051808303816000875af11580156107cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ef9190611248565b90506103478167ffffffffffffffff166001610d65565b60405163c88a5e6d60e01b81526101486004820152602481018290526000805160206114308339815191529063c88a5e6d90604401600060405180830381600087803b15801561085557600080fd5b505af1158015610869573d6000803e3d6000fd5b505050506103476101486001600160a01b03163182610d65565b60405163f8e18b5760e01b815260646004820181905260248201526000805160206114308339815191529063f8e18b5790604401600060405180830381600087803b1580156108d157600080fd5b505af11580156108e5573d6000803e3d6000fd5b5050604051632d0335ab60e01b815260646004820152600092506000805160206114308339815191529150632d0335ab90602401610650565b60008054610100900460ff161561093e5750600054610100900460ff1690565b60006000805160206114308339815191523b15610a385760408051600080516020611430833981519152602082018190526519985a5b195960d21b828401528251808303840181526060830190935260009290916109c0917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc4916080016112bb565b60408051601f19818403018152908290526109da916112ec565b6000604051808303816000865af19150503d8060008114610a17576040519150601f19603f3d011682016040523d82523d6000602084013e610a1c565b606091505b5091505080806020019051810190610a349190611308565b9150505b919050565b604051632d0335ab60e01b81526064600482015260009060008051602061143083398151915290632d0335ab9060240161037b565b604051632631f2b160e11b81526000805160206114308339815191526001600160a01b038316811415600483015290634c63e56290602401600060405180830381600087803b158015610ac457600080fd5b505af1158015610ad8573d6000803e3d6000fd5b5050604051632631f2b160e11b8152306001600160a01b038516141560048201526000805160206114308339815191529250634c63e5629150602401600060405180830381600087803b158015610b2e57600080fd5b505af1158015610b42573d6000803e3d6000fd5b5050604051632631f2b160e11b8152733fab184622dc19b6109349b94811493bf2a453626001600160a01b038516141560048201526000805160206114308339815191529250634c63e5629150602401600060405180830381600087803b158015610bac57600080fd5b505af1158015610bc0573d6000803e3d6000fd5b5050604051632631f2b160e11b8152734e59b44847b379578588920ca78fbf26c0b4956c6001600160a01b038516141560048201526000805160206114308339815191529250634c63e5629150602401600060405180830381600087803b158015610c2a57600080fd5b505af1158015610c3e573d6000803e3d6000fd5b5050604051632d0335ab60e01b81526001600160a01b0384166004820152600092506000805160206114308339815191529150632d0335ab906024016020604051808303816000875af1158015610c99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cbd9190611248565b905067ffffffffffffffff8116156105b7576105b7611265565b604051632d0335ab60e01b815230600482015260009060008051602061143083398151915290632d0335ab906024016020604051808303816000875af1158015610d25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d499190611248565b90508067ffffffffffffffff1660011461034757610347611265565b8082146105b7577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f50604051610dd69060208082526022908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b75696e604082015261745d60f01b606082015260800190565b60405180910390a17fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a881604051610e0d919061132a565b60405180910390a17fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a882604051610e449190611362565b60405180910390a16105b7610e5e565b6105b78282610f5e565b6000805160206114308339815191523b15610f4d5760408051600080516020611430833981519152602082018190526519985a5b195960d21b9282019290925260016060820152600091907f70ca10bbd0dbfd9020a9f4b13402c16cb120705e0d1c0aeab10fa353ae586fc49060800160408051601f1981840301815290829052610eec92916020016112bb565b60408051601f1981840301815290829052610f06916112ec565b6000604051808303816000865af19150503d8060008114610f43576040519150601f19603f3d011682016040523d82523d6000602084013e610f48565b606091505b505050505b6000805461ff001916610100179055565b610f688282611045565b6105b7577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f50604051610fd79060208082526023908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b62797460408201526265735d60e81b606082015260800190565b60405180910390a17fd26e16cad4548705e4c9e2d94f98ee91c289085ee425594fd5635fa2964ccf188160405161100e919061138c565b60405180910390a17fd26e16cad4548705e4c9e2d94f98ee91c289085ee425594fd5635fa2964ccf1882604051610e4491906113c8565b8051825160019190036110c85760005b83518110156110c257828181518110611070576110706113f2565b602001015160f81c60f81b6001600160f81b031916848281518110611097576110976113f2565b01602001516001600160f81b031916146110b057600091505b806110ba81611408565b915050611055565b506110cc565b5060005b92915050565b67ffffffffffffffff8116811461034757600080fd5b6000602082840312156110fa57600080fd5b8135611105816110d2565b9392505050565b6000806020838503121561111f57600080fd5b823567ffffffffffffffff8082111561113757600080fd5b818501915085601f83011261114b57600080fd5b81358181111561115a57600080fd5b86602082850101111561116c57600080fd5b60209290920196919550909350505050565b60006020828403121561119057600080fd5b5035919050565b6000602082840312156111a957600080fd5b81356001600160a01b038116811461110557600080fd5b60005b838110156111db5781810151838201526020016111c3565b838111156111ea576000848401525b50505050565b600081518084526112088160208601602086016111c0565b601f01601f19169290920160200192915050565b6001600160a01b0383168152604060208201819052600090611240908301846111f0565b949350505050565b60006020828403121561125a57600080fd5b8151611105816110d2565b634e487b7160e01b600052600160045260246000fd5b6001600160a01b03841681526040602082018190528101829052818360608301376000818301606090810191909152601f909201601f1916010192915050565b6001600160e01b03198316815281516000906112de8160048501602087016111c0565b919091016004019392505050565b600082516112fe8184602087016111c0565b9190910192915050565b60006020828403121561131a57600080fd5b8151801515811461110557600080fd5b60408152600061135460408301600a8152690808115e1c1958dd195960b21b602082015260400190565b905082602083015292915050565b60408152600061135460408301600a815269080808081058dd1d585b60b21b602082015260400190565b6040815260006113b660408301600a8152690808115e1c1958dd195960b21b602082015260400190565b828103602084015261124081856111f0565b6040815260006113b660408301600a815269080808081058dd1d585b60b21b602082015260400190565b634e487b7160e01b600052603260045260246000fd5b60006001820161142857634e487b7160e01b600052601160045260246000fd5b506001019056fe0000000000000000000000007109709ecfa91a80626ff3989d68f67f5b1dd12da2646970667358221220e2c5ea8b9262b86adfa9a92e0c6ee32846a3b24b87b91401913d2dc46f21c9fc64736f6c634300080d0033"}]}]}]}, {"tag": "App", "name": "Lbl'-LT-'storage'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'Stop'Map", "sorts": [], "args": []}]}, {"tag": "App", "name": "Lbl'-LT-'origStorage'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'Stop'Map", "sorts": [], "args": []}]}, {"tag": "App", "name": "Lbl'-LT-'nonce'-GT-'", "sorts": [], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "1"}]}]}]}, {"tag": "App", "name": "LblAccountCellMapItem", "sorts": [], "args": [{"tag": "App", "name": "Lbl'-LT-'acctID'-GT-'", "sorts": [], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "645326474426547203313410069153905908525362434349"}]}, {"tag": "App", "name": "Lbl'-LT-'account'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'-LT-'acctID'-GT-'", "sorts": [], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "645326474426547203313410069153905908525362434349"}]}, {"tag": "App", "name": "Lbl'-LT-'balance'-GT-'", "sorts": [], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "0"}]}, {"tag": "App", "name": "Lbl'-LT-'code'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "inj", "sorts": [{"tag": "SortApp", "name": "SortBytes", "args": []}, {"tag": "SortApp", "name": "SortAccountCode", "args": []}], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortBytes", "args": []}, "value": "\u0000"}]}]}, {"tag": "App", "name": "Lbl'-LT-'storage'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'Stop'Map", "sorts": [], "args": []}]}, {"tag": "App", "name": "Lbl'-LT-'origStorage'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'Stop'Map", "sorts": [], "args": []}]}, {"tag": "App", "name": "Lbl'-LT-'nonce'-GT-'", "sorts": [], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "0"}]}]}]}]}]}, {"tag": "App", "name": "Lbl'-LT-'txOrder'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarTXORDER'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortList", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'txPending'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarTXPENDING'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortList", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'messages'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarMESSAGES'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortMessageCellMap", "args": []}}]}]}]}]}, {"tag": "App", "name": "Lbl'-LT-'cheatcodes'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'-LT-'prank'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'-LT-'prevCaller'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'Stop'Account'Unds'EVM-TYPES'Unds'Account", "sorts": [], "args": []}]}, {"tag": "App", "name": "Lbl'-LT-'prevOrigin'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'Stop'Account'Unds'EVM-TYPES'Unds'Account", "sorts": [], "args": []}]}, {"tag": "App", "name": "Lbl'-LT-'newCaller'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'Stop'Account'Unds'EVM-TYPES'Unds'Account", "sorts": [], "args": []}]}, {"tag": "App", "name": "Lbl'-LT-'newOrigin'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'Stop'Account'Unds'EVM-TYPES'Unds'Account", "sorts": [], "args": []}]}, {"tag": "App", "name": "Lbl'-LT-'active'-GT-'", "sorts": [], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortBool", "args": []}, "value": "false"}]}, {"tag": "App", "name": "Lbl'-LT-'depth'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarDEPTH'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'singleCall'-GT-'", "sorts": [], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortBool", "args": []}, "value": "false"}]}]}, {"tag": "App", "name": "Lbl'-LT-'expectedRevert'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'-LT-'isRevertExpected'-GT-'", "sorts": [], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortBool", "args": []}, "value": "false"}]}, {"tag": "App", "name": "Lbl'-LT-'expectedReason'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarEXPECTEDREASON'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortBytes", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'expectedDepth'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarEXPECTEDDEPTH'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}]}]}, {"tag": "App", "name": "Lbl'-LT-'expectedOpcode'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'-LT-'isOpcodeExpected'-GT-'", "sorts": [], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortBool", "args": []}, "value": "false"}]}, {"tag": "App", "name": "Lbl'-LT-'expectedAddress'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'Stop'Account'Unds'EVM-TYPES'Unds'Account", "sorts": [], "args": []}]}, {"tag": "App", "name": "Lbl'-LT-'expectedValue'-GT-'", "sorts": [], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "0"}]}, {"tag": "App", "name": "Lbl'-LT-'expectedData'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'Stop'Bytes'Unds'BYTES-HOOKED'Unds'Bytes", "sorts": [], "args": []}]}, {"tag": "App", "name": "Lbl'-LT-'opcodeType'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'Stop'OpcodeType'Unds'FOUNDRY-CHEAT-CODES'Unds'OpcodeType", "sorts": [], "args": []}]}]}, {"tag": "App", "name": "Lbl'-LT-'expectEmit'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'-LT-'recordEvent'-GT-'", "sorts": [], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortBool", "args": []}, "value": "false"}]}, {"tag": "App", "name": "Lbl'-LT-'isEventExpected'-GT-'", "sorts": [], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortBool", "args": []}, "value": "false"}]}, {"tag": "App", "name": "Lbl'-LT-'checkedTopics'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarCHECKEDTOPICS'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortList", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'checkedData'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarCHECKEDDATA'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortBool", "args": []}}]}, {"tag": "App", "name": "Lbl'-LT-'expectedEventAddress'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarEXPECTEDEVENTADDRESS'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortAccount", "args": []}}]}]}, {"tag": "App", "name": "Lbl'-LT-'whitelist'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'-LT-'isCallWhitelistActive'-GT-'", "sorts": [], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortBool", "args": []}, "value": "false"}]}, {"tag": "App", "name": "Lbl'-LT-'isStorageWhitelistActive'-GT-'", "sorts": [], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortBool", "args": []}, "value": "false"}]}, {"tag": "App", "name": "Lbl'-LT-'addressSet'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'Stop'Set", "sorts": [], "args": []}]}, {"tag": "App", "name": "Lbl'-LT-'storageSlotSet'-GT-'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'Stop'Set", "sorts": [], "args": []}]}]}]}]}, {"tag": "App", "name": "Lbl'-LT-'generatedCounter'-GT-'", "sorts": [], "args": [{"tag": "EVar", "name": "VarGENERATEDCOUNTER'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}]}]}, "second": {"tag": "And", "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "first": {"tag": "Equals", "argSort": {"tag": "SortApp", "name": "SortBool", "args": []}, "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "first": {"tag": "DV", "sort": {"tag": "SortApp", "name": "SortBool", "args": []}, "value": "true"}, "second": {"tag": "App", "name": "Lbl'Unds'andBool'Unds'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'Unds-LT-Eqls'Int'Unds'", "sorts": [], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "0"}, {"tag": "EVar", "name": "VarCALLER'Unds'ID", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}]}, {"tag": "App", "name": "Lbl'Unds-LT-'Int'Unds'", "sorts": [], "args": [{"tag": "EVar", "name": "VarCALLER'Unds'ID", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}, {"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "1461501637330902918203684832716283019655932542976"}]}]}}, "second": {"tag": "And", "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "first": {"tag": "Equals", "argSort": {"tag": "SortApp", "name": "SortBool", "args": []}, "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "first": {"tag": "DV", "sort": {"tag": "SortApp", "name": "SortBool", "args": []}, "value": "true"}, "second": {"tag": "App", "name": "Lbl'Unds'andBool'Unds'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'Unds-LT-Eqls'Int'Unds'", "sorts": [], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "0"}, {"tag": "EVar", "name": "VarORIGIN'Unds'ID", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}]}, {"tag": "App", "name": "Lbl'Unds-LT-'Int'Unds'", "sorts": [], "args": [{"tag": "EVar", "name": "VarORIGIN'Unds'ID", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}, {"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "1461501637330902918203684832716283019655932542976"}]}]}}, "second": {"tag": "And", "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "first": {"tag": "Equals", "argSort": {"tag": "SortApp", "name": "SortBool", "args": []}, "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "first": {"tag": "DV", "sort": {"tag": "SortApp", "name": "SortBool", "args": []}, "value": "true"}, "second": {"tag": "App", "name": "Lbl'Unds'andBool'Unds'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'Unds-LT-Eqls'Int'Unds'", "sorts": [], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "0"}, {"tag": "EVar", "name": "VarNUMBER'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}]}, {"tag": "App", "name": "Lbl'Unds-LT-Eqls'Int'Unds'", "sorts": [], "args": [{"tag": "EVar", "name": "VarNUMBER'Unds'CELL", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}}, {"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "57896044618658097711785492504343953926634992332820282019728792003956564819967"}]}]}}, "second": {"tag": "And", "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "first": {"tag": "Equals", "argSort": {"tag": "SortApp", "name": "SortBool", "args": []}, "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "first": {"tag": "DV", "sort": {"tag": "SortApp", "name": "SortBool", "args": []}, "value": "true"}, "second": {"tag": "App", "name": "Lbl'Unds'andBool'Unds'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'Unds-LT-Eqls'Int'Unds'", "sorts": [], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "0"}, {"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "9223372036854775807"}]}, {"tag": "App", "name": "Lbl'Unds-LT-'Int'Unds'", "sorts": [], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "9223372036854775807"}, {"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "115792089237316195423570985008687907853269984665640564039457584007913129639936"}]}]}}, "second": {"tag": "And", "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "first": {"tag": "Equals", "argSort": {"tag": "SortApp", "name": "SortBool", "args": []}, "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "first": {"tag": "DV", "sort": {"tag": "SortApp", "name": "SortBool", "args": []}, "value": "true"}, "second": {"tag": "App", "name": "Lbl'Unds-LT-'Int'Unds'", "sorts": [], "args": [{"tag": "App", "name": "LbllengthBytes'LParUndsRParUnds'BYTES-HOOKED'Unds'Int'Unds'Bytes", "sorts": [], "args": [{"tag": "App", "name": "Lblmethod'Unds'AccountParamsTest", "sorts": [], "args": [{"tag": "App", "name": "Lblcontract'Unds'AccountParamsTest", "sorts": [], "args": []}, {"tag": "App", "name": "Lblmethod'Unds'AccountParamsTest'Unds'testDealConcrete'Unds'", "sorts": [], "args": []}]}]}, {"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "340282366920938463463374607431768211456"}]}}, "second": {"tag": "Equals", "argSort": {"tag": "SortApp", "name": "SortBool", "args": []}, "sort": {"tag": "SortApp", "name": "SortGeneratedTopCell", "args": []}, "first": {"tag": "DV", "sort": {"tag": "SortApp", "name": "SortBool", "args": []}, "value": "true"}, "second": {"tag": "App", "name": "Lbl'Unds'andBool'Unds'", "sorts": [], "args": [{"tag": "App", "name": "Lbl'Unds-LT-Eqls'Int'Unds'", "sorts": [], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "0"}, {"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "728815563385977040452943777879061427756277306518"}]}, {"tag": "App", "name": "Lbl'Unds-LT-'Int'Unds'", "sorts": [], "args": [{"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "728815563385977040452943777879061427756277306518"}, {"tag": "DV", "sort": {"tag": "SortApp", "name": "SortInt", "args": []}, "value": "1461501637330902918203684832716283019655932542976"}]}]}}}}}}}}}}} \ No newline at end of file diff --git a/test/jsonrpc-examples/not-json.error b/test/jsonrpc-examples/not-json.error new file mode 120000 index 000000000..42061c01a --- /dev/null +++ b/test/jsonrpc-examples/not-json.error @@ -0,0 +1 @@ +README.md \ No newline at end of file diff --git a/test/jsonrpc-examples/params.random.json b/test/jsonrpc-examples/params.random.json new file mode 120000 index 000000000..0d0de1c1f --- /dev/null +++ b/test/jsonrpc-examples/params.random.json @@ -0,0 +1 @@ +../rpc-integration/test-a-to-f/params-cut-point.json \ No newline at end of file diff --git a/test/jsonrpc-examples/state-a.kore.json b/test/jsonrpc-examples/state-a.kore.json new file mode 120000 index 000000000..849802223 --- /dev/null +++ b/test/jsonrpc-examples/state-a.kore.json @@ -0,0 +1 @@ +../rpc-integration/resources/a-to-f/state-a.json \ No newline at end of file diff --git a/test/jsonrpc-examples/state-a.spaghetti-formatted.kore.json b/test/jsonrpc-examples/state-a.spaghetti-formatted.kore.json new file mode 100644 index 000000000..683181eb7 --- /dev/null +++ b/test/jsonrpc-examples/state-a.spaghetti-formatted.kore.json @@ -0,0 +1 @@ +{"format":"KORE","version":1,"term":{"tag":"App","name":"Lbl'-LT-'generatedTop'-GT-'","sorts":[],"args":[{"tag":"App","name":"Lbl'-LT-'k'-GT-'","sorts":[],"args":[{"tag":"App","name":"kseq","sorts":[],"args":[{"tag":"App","name":"inj","sorts":[{"tag":"SortApp","name":"SortState","args":[]},{"tag":"SortApp","name":"SortKItem","args":[]}],"args":[{"tag":"DV","sort":{"tag":"SortApp","name":"SortState","args":[]},"value":"a"}]},{"tag":"App","name":"dotk","sorts":[],"args":[]}]}]},{"tag":"App","name":"Lbl'-LT-'generatedCounter'-GT-'","sorts":[],"args":[{"tag":"DV","sort":{"tag":"SortApp","name":"SortInt","args":[]},"value":"0"}]}]}} diff --git a/test/jsonrpc-examples/state-a.unformatted.execute.request b/test/jsonrpc-examples/state-a.unformatted.execute.request new file mode 100644 index 000000000..db30ded31 --- /dev/null +++ b/test/jsonrpc-examples/state-a.unformatted.execute.request @@ -0,0 +1 @@ +{"id":1,"jsonrpc":"2.0","method":"execute","params":{"cut-point-rules":["foo","bar"],"max-depth":42,"state":{"format":"KORE","term":{"args":[{"args":[{"args":[{"args":[{"sort":{"args":[],"name":"SortState","tag":"SortApp"},"tag":"DV","value":"a"}],"name":"inj","sorts":[{"args":[],"name":"SortState","tag":"SortApp"},{"args":[],"name":"SortKItem","tag":"SortApp"}],"tag":"App"},{"args":[],"name":"dotk","sorts":[],"tag":"App"}],"name":"kseq","sorts":[],"tag":"App"}],"name":"Lbl'-LT-'k'-GT-'","sorts":[],"tag":"App"},{"args":[{"sort":{"args":[],"name":"SortInt","tag":"SortApp"},"tag":"DV","value":"0"}],"name":"Lbl'-LT-'generatedCounter'-GT-'","sorts":[],"tag":"App"}],"name":"Lbl'-LT-'generatedTop'-GT-'","sorts":[],"tag":"App"},"version":1},"xdoesnot":"exist"}} \ No newline at end of file diff --git a/test/jsonrpc-examples/terminal.execute.response b/test/jsonrpc-examples/terminal.execute.response new file mode 120000 index 000000000..96d25b4de --- /dev/null +++ b/test/jsonrpc-examples/terminal.execute.response @@ -0,0 +1 @@ +../rpc-integration/test-a-to-f/response-terminal-rule.json \ No newline at end of file diff --git a/test/jsonrpc-examples/with-logging.simplify.response b/test/jsonrpc-examples/with-logging.simplify.response new file mode 120000 index 000000000..99393ea0b --- /dev/null +++ b/test/jsonrpc-examples/with-logging.simplify.response @@ -0,0 +1 @@ +../rpc-integration/test-simplify/response-with-logging.json \ No newline at end of file diff --git a/tools/kore-json-differ/Main.hs b/tools/kore-json-differ/Main.hs new file mode 100644 index 000000000..df3b8ddaf --- /dev/null +++ b/tools/kore-json-differ/Main.hs @@ -0,0 +1,40 @@ +{- | +Copyright : (c) Runtime Verification, 2023 +License : BSD-3-Clause +-} +module Main (main) where + +import Data.ByteString.Lazy.Char8 qualified as BS +import System.Environment (getArgs) +import System.Exit + +import Booster.JsonRpc.Utils + +usage :: String +usage = + unlines + [ "Display differences between two json files containing kore-rpc data" + , "" + , "Usage:" + , " [--help | KOREJSON1 KOREJSON2]" + , "" + , "where KOREJSON are paths to files containing a kore-rpc JSON request" + , "a kore-rpc JSON response, a kore term in JSON format, or other JSON." + ] + +main :: IO () +main = do + args <- getArgs + case args of + [] -> + putStrLn usage + _ + | "--help" `elem` args -> + putStrLn usage + [x, y] -> do + result <- diffJson x y + BS.putStrLn $ renderResult x y result + exitWith $ if isIdentical result then ExitSuccess else ExitFailure 1 + _other -> do + putStrLn $ "ERROR: program requires exactly two arguments.\n\n" <> usage + exitWith $ ExitFailure 2 diff --git a/tools/rpc-client/RpcClient.hs b/tools/rpc-client/RpcClient.hs index a03059c9f..d5af90b12 100644 --- a/tools/rpc-client/RpcClient.hs +++ b/tools/rpc-client/RpcClient.hs @@ -43,12 +43,21 @@ import Debug.Trace main :: IO () main = do - Options{host, port, mode, optionFile, options, postProcessing, prettify, time} <- + Options{host, port, mode, optionFile, options, postProcessing, prettify, time, dryRun} <- execParser parseOptions + request <- + trace "[Info] Preparing request data" $ + prepareRequestData mode optionFile options + when dryRun $ do + traceM "[Info] Dry-run mode, just showing request instead of sending" + let write + | Just (Expect True file) <- postProcessing = + trace ("[Info] Writing request to file " <> file) (BS.writeFile file) + | otherwise = BS.putStrLn + reformat = Json.encodePretty' rpcJsonConfig . Json.decode @Json.Value + write $ if not prettify then request else reformat request + exitSuccess runTCPClient host (show port) $ \s -> do - request <- - trace "[Info] Preparing request data" $ - prepareRequestData mode optionFile options start <- getTime Monotonic trace "[Info] Sending request..." $ sendAll s request @@ -58,7 +67,7 @@ main = do timeStr = timeSpecs start end hPutStrLn stderr $ "[info] Round trip time for request '" <> modeFile <> "' was " <> timeStr when time $ do - hPutStrLn stderr $ "[info] Saving timing for " <> modeFile + hPutStrLn stderr $ "[Info] Saving timing for " <> modeFile writeFile (modeFile <> ".time") timeStr trace "[Info] Response received." $ @@ -82,6 +91,7 @@ data Options = Options , postProcessing :: Maybe PostProcessing , prettify :: Bool , time :: Bool + , dryRun :: Bool } deriving stock (Show) @@ -134,6 +144,7 @@ parseOptions = <*> optional parsePostProcessing <*> prettifyOpt <*> timeOpt + <*> dryRunOpt hostOpt = strOption $ long "host" @@ -167,6 +178,7 @@ parseOptions = flagOpt name desc = flag False True $ long name <> help desc prettifyOpt = flagOpt "prettify" "format JSON before printing" timeOpt = flagOpt "time" "record the timing information between sending a request and receiving a response" + dryRunOpt = flagOpt "dry-run" "Do not send anything, just output the request" parsePostProcessing :: Parser PostProcessing parsePostProcessing = diff --git a/unit-tests/Test/Booster/JsonRpc/DiffTest.hs b/unit-tests/Test/Booster/JsonRpc/DiffTest.hs new file mode 100644 index 000000000..ee064f2f4 --- /dev/null +++ b/unit-tests/Test/Booster/JsonRpc/DiffTest.hs @@ -0,0 +1,83 @@ +{- | +Copyright : (c) Runtime Verification, 2022 +License : BSD-3-Clause +-} +module Test.Booster.JsonRpc.DiffTest ( + test_jsonDiff, +) where + +import Data.ByteString.Lazy.Char8 qualified as BS +import System.FilePath +import Test.Tasty +import Test.Tasty.Golden (findByExtension) +import Test.Tasty.HUnit + +import Booster.JsonRpc.Utils +import Kore.JsonRpc.Types (APIMethod (..)) +import Test.Booster.Util (testGoldenVsString) + +testDataDir :: FilePath +testDataDir = "test/jsonrpc-examples" + +typeExtensions :: [BS.ByteString] +typeExtensions = + ".error" + : ".random.json" + : ".kore.json" + : ".error.response" + : [ "." <> kind <> "." <> reqOrRes + | kind <- ["execute", "implies", "simplify", "add-module", "get-model"] + , reqOrRes <- ["request", "response"] + ] + +isTestFile :: FilePath -> Bool +isTestFile f = + let f' = BS.pack f + expectedDir = BS.pack $ testDataDir "expected" + in not (expectedDir `BS.isPrefixOf` f') + && any (`BS.isSuffixOf` f') typeExtensions + +typeFromExtension :: FilePath -> KoreRpcType +typeFromExtension name + | ".request" == ext = RpcReq $ readMethod kind + | ".response" == ext, ".error" == kind = RpcErr + | ".response" == ext = RpcResp $ readMethod kind + | ".error" == ext = NotRpcJs + | ".json" == ext, ".kore" == kind = RpcKore + | ".json" == ext, ".random" == kind = RpcJs + | otherwise = error $ "unexpected file name " <> takeFileName name + where + (name1, ext) = splitExtension name + kind = takeExtension name1 + + readMethod = \case + ".execute" -> ExecuteM + ".implies" -> ImpliesM + ".simplify" -> SimplifyM + ".add-module" -> AddModuleM + ".get-model" -> GetModelM + other -> error $ other <> ": No such API method" + +test_jsonDiff :: IO TestTree +test_jsonDiff = do + testFiles <- + filter isTestFile + <$> findByExtension [".error", ".json", ".request", ".response"] testDataDir + let classifications = + testGroup "Classify JSON files by their type in kore-rpc-types" $ + map classifyTest testFiles + comparisons = + testGroup "Pairwise comparison, expected results in files" $ + [compareTest f1 f2 | f1 <- testFiles, f2 <- testFiles, f1 /= f2] + pure $ testGroup "JSON diff tool tests" [classifications, comparisons] + where + classifyTest f = testCase ("Classify " <> takeFileName f) $ do + fileType <- rpcTypeOf . decodeKoreRpc <$> BS.readFile f + fileType @?= typeFromExtension f + compareTest f1 f2 = do + let expectedName = + testDataDir "expected" takeFileName f1 <> "@" <> takeFileName f2 + renderedDiff = renderResult f1 f2 <$> diffJson f1 f2 + testName = + takeFileName f1 <> " vs " <> takeFileName f2 + testGoldenVsString testName expectedName renderedDiff