[
  {
    "path": ".eslintignore",
    "content": "build/\ncoverage/\nnode_modules/\nsrc/registerServiceWorker.js\n"
  },
  {
    "path": ".eslintrc.js",
    "content": "module.exports = {\n  extends: [\n    'airbnb',\n    'react-app',\n    'plugin:jsx-a11y/recommended',\n    'plugin:import/typescript',\n    'prettier',\n  ],\n  plugins: ['jsx-a11y', 'prettier', 'import'],\n  settings: {\n    'import/resolver': {\n      typescript: {\n        alwaysTryTypes: true,\n        project: './tsconfig.json',\n      },\n      node: {\n        extensions: ['.js', '.jsx', '.ts', '.tsx'],\n      },\n    },\n  },\n  env: {\n    browser: true,\n    node: true,\n    jest: true,\n    es6: true,\n  },\n  rules: {\n    'prettier/prettier': [\n      'error',\n      {\n        endOfLine: 'auto',\n      },\n    ],\n    'react/jsx-filename-extension': [\n      1,\n      {\n        extensions: ['.ts', '.tsx', '.js', '.jsx'],\n      },\n    ],\n    'jsx-a11y/anchor-is-valid': [\n      'warn',\n      {\n        aspects: ['invalidHref'],\n      },\n    ],\n    'no-bitwise': 'off',\n    'import/extensions': [\n      'error',\n      'ignorePackages',\n      {\n        js: 'never',\n        jsx: 'never',\n        ts: 'never',\n        tsx: 'never',\n      },\n    ],\n    'react/jsx-uses-react': 'off',\n    'react/react-in-jsx-scope': 'off',\n    'react/require-default-props': 'off',\n    'import/prefer-default-export': 'off',\n    'no-use-before-define': 'off',\n    '@typescript-eslint/no-use-before-define': ['error'],\n    'import/no-extraneous-dependencies': [\n      'error',\n      {\n        devDependencies: [\n          '**/*.test.{js,jsx,ts,tsx}',\n          '**/test/**',\n          '**/setupTests.ts',\n          '**/svgTransform.js',\n        ],\n      },\n    ],\n    'no-shadow': 'off',\n    '@typescript-eslint/no-shadow': 'error',\n    'no-promise-executor-return': 'off',\n    'react/function-component-definition': 'off',\n  },\n  parser: '@typescript-eslint/parser',\n  parserOptions: {\n    allowImportExportEverywhere: true,\n  },\n  globals: {\n    ga: true,\n  },\n}\n"
  },
  {
    "path": ".github/dependabot.yml",
    "content": "version: 2\nupdates:\n  - package-ecosystem: npm\n    directory: '/'\n    schedule:\n      interval: quarterly\n      time: '15:00'\n    open-pull-requests-limit: 30\n"
  },
  {
    "path": ".github/pull_request_template.md",
    "content": "## High Level Overview of Change\n\n<!--\nPlease include a summary/list of the changes.\nIf too broad, please consider splitting into multiple PRs.\n-->\n\n### Context of Change\n\n<!--\nPlease include the context of a change.\nIf a bug fix, when was the bug introduced? What was the behavior?\nIf a new feature, why was this architecture chosen? What were the alternatives?\nIf a refactor, how is this better than the previous implementation?\n\nIf there is a design document for this feature, please link it here.\n-->\n\n### Type of Change\n\n<!--\nPlease check relevant options, delete irrelevant ones.\n-->\n\n- [ ] Bug fix (non-breaking change which fixes an issue)\n- [ ] New feature (non-breaking change which adds functionality)\n- [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)\n- [ ] Refactor (non-breaking change that only restructures code)\n- [ ] Tests (You added tests for code that already exists, or your new feature included in this PR)\n- [ ] Documentation Updates\n- [ ] Translation Updates\n- [ ] Release\n\n### Codebase Modernization\n\n<!--\nIn an effort to modernize the codebase, you should convert the files that you work with to React Hooks and TypeScript If this is not possible (e.g. it's too many changes, touching too many files, etc.) please explain why here.\n-->\n\n- [ ] Updated files to React Hooks\n- [ ] Updated files to TypeScript\n\n## Before / After\n\n<!--\nIf just refactoring / back-end changes, this can be just an in-English description of the change at a technical level.\nIf a UI change, screenshots should be included.\n-->\n\n## Test Plan\n\n<!--\nPlease describe the tests that you ran to verify your changes and provide instructions so that others can reproduce.\n-->\n\n<!--\n## Future Tasks\nFor future tasks related to PR.\n-->\n"
  },
  {
    "path": ".github/workflows/copilot-setup-steps.yml",
    "content": "name: Copilot Setup Steps\n\nenv:\n  NODE_VERSION: 22.x\n  VITE_VALIDATOR: vl.ripple.com\n  VITE_RIPPLED_WS_PORT: 51233\n  VITE_RIPPLED_HOST: fake.rippled.example.com\n  VITE_MAINNET_LINK: mainnet.example.com\n  VITE_TESTNET_LINK: testnet.example.com\n  VITE_CUSTOMNETWORK_LINK: custom.example.com\n  VITE_DATA_URL: https://data.xrpl.org/v1/network\n\non:\n  workflow_dispatch:\n  push:\n    branches: [main]\n  pull_request:\n    branches: [main]\n\njobs:\n  copilot-setup:\n    runs-on: ubuntu-latest\n\n    steps:\n      - uses: actions/checkout@v4\n      - name: Use Node.js ${{ env.NODE_VERSION }}\n        uses: actions/setup-node@v4\n        with:\n          node-version: ${{ env.NODE_VERSION }}\n\n      - name: Cache node modules\n        id: cache-nodemodules\n        uses: actions/cache@v4\n        env:\n          cache-name: cache-node-modules\n        with:\n          # caching node_modules\n          path: node_modules\n          key: ${{ env.NODE_VERSION }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}\n          restore-keys: |\n            ${{ env.NODE_VERSION }}-build-${{ env.cache-name }}-\n            ${{ env.NODE_VERSION }}-build-\n\n      - name: Install Dependencies\n        if: steps.cache-nodemodules.outputs.cache-hit != 'true'\n        run: npm ci\n"
  },
  {
    "path": ".github/workflows/nodejs.yml",
    "content": "name: Explorer CI\n\non:\n  push:\n    branches: [main]\n  pull_request:\n  workflow_dispatch:\n\nenv:\n  NODE_VERSION: 22.x\n\njobs:\n  lint:\n    runs-on: ubuntu-latest\n\n    steps:\n      - uses: actions/checkout@v5\n      - name: Use Node.js ${{ env.NODE_VERSION }}\n        uses: actions/setup-node@v4\n        with:\n          node-version: ${{ env.NODE_VERSION }}\n\n      - name: Cache node modules\n        id: cache-nodemodules\n        uses: actions/cache@v4\n        env:\n          cache-name: cache-node-modules\n        with:\n          # caching node_modules\n          path: node_modules\n          key: ${{ env.NODE_VERSION }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}\n          restore-keys: |\n            ${{ env.NODE_VERSION }}-build-${{ env.cache-name }}-\n            ${{ env.NODE_VERSION }}-build-\n\n      - name: Install Dependencies\n        if: steps.cache-nodemodules.outputs.cache-hit != 'true'\n        run: npm ci\n\n      - run: |\n          npm run lint:ci\n\n      # This runs the pre-commit hooks defined in .pre-commit-config.yaml\n      - uses: pre-commit/action@v3.0.1\n\n  test:\n    runs-on: ubuntu-latest\n\n    steps:\n      - uses: actions/checkout@v5\n      - name: Use Node.js ${{ env.NODE_VERSION }}\n        uses: actions/setup-node@v4\n        with:\n          node-version: ${{ env.NODE_VERSION }}\n\n      - name: Cache node modules\n        id: cache-nodemodules\n        uses: actions/cache@v4\n        env:\n          cache-name: cache-node-modules\n        with:\n          # caching node_modules\n          path: node_modules\n          key: ${{ env.NODE_VERSION }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}\n          restore-keys: |\n            ${{ env.NODE_VERSION }}-build-${{ env.cache-name }}-\n            ${{ env.NODE_VERSION }}-build-\n\n      - name: Install Dependencies\n        if: steps.cache-nodemodules.outputs.cache-hit != 'true'\n        run: npm ci\n\n      - run: npm run test:ci\n        env:\n          VITE_VALIDATOR: vl.ripple.com\n          VITE_RIPPLED_WS_PORT: 51233\n          VITE_RIPPLED_HOST: fake.rippled.example.com\n          VITE_MAINNET_LINK: mainnet.example.com\n          VITE_TESTNET_LINK: testnet.example.com\n          VITE_CUSTOMNETWORK_LINK: custom.example.com\n          VITE_DATA_URL: https://data.xrpl.org/v1/network\n\n  build:\n    runs-on: ubuntu-latest\n\n    steps:\n      - uses: actions/checkout@v5\n      - name: Use Node.js ${{ env.NODE_VERSION }}\n        uses: actions/setup-node@v4\n        with:\n          node-version: ${{ env.NODE_VERSION }}\n\n      - name: Cache node modules\n        id: cache-nodemodules\n        uses: actions/cache@v4\n        env:\n          cache-name: cache-node-modules\n        with:\n          # caching node_modules\n          path: node_modules\n          key: ${{ env.NODE_VERSION }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}\n          restore-keys: |\n            ${{ env.NODE_VERSION }}-build-${{ env.cache-name }}-\n            ${{ env.NODE_VERSION }}-build-\n\n      - name: Install Dependencies\n        if: steps.cache-nodemodules.outputs.cache-hit != 'true'\n        run: npm ci\n\n      - run: npm run build\n\n  typescript-check:\n    runs-on: ubuntu-latest\n\n    steps:\n      - uses: actions/checkout@v5\n      - name: Use Node.js ${{ env.NODE_VERSION }}\n        uses: actions/setup-node@v4\n        with:\n          node-version: ${{ env.NODE_VERSION }}\n\n      - name: Cache node modules\n        id: cache-nodemodules\n        uses: actions/cache@v4\n        env:\n          cache-name: cache-node-modules\n        with:\n          # caching node_modules\n          path: node_modules\n          key: ${{ env.NODE_VERSION }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}\n          restore-keys: |\n            ${{ env.NODE_VERSION }}-build-${{ env.cache-name }}-\n            ${{ env.NODE_VERSION }}-build-\n\n      - name: Install Dependencies\n        if: steps.cache-nodemodules.outputs.cache-hit != 'true'\n        run: npm ci\n\n      - run: npm run build-ts\n"
  },
  {
    "path": ".gitignore",
    "content": "# Dependency directories\nnode_modules/\n\n# testing\n/coverage\n\n# production\n/build\nsrc/**/*.css\nsrc/**/*.css.map\n\n# misc\n.DS_Store\n.env.local\n.env.development.local\n.env.test.local\n.env.production.local\n.env\n.node-version\n.claude/\n\n# Logs\nnpm-debug.log*\n\n# Runtime data\npids\n*.pid\n*.seed\n*.pid.lock\n\n# Optional npm cache directory\n.npm\n\n# Optional eslint cache\n.eslintcache\n\n# Output of 'npm pack'\n*.tgz\n\n# FACEBOOK GITIGNORE (https://github.com/facebook/react/blob/master/.gitignore)\n.DS_STORE\nnode_modules\n*~\n*.pyc\nstatic\n.grunt\n_SpecRunner.html\n__benchmarks__\nbuild/\nremote-repo/\ncoverage/\n.module-cache\n*.gem\ndocs/.bundle\ndocs/code\ndocs/_site\ndocs/.sass-cache\ndocs/js/*\ndocs/downloads/*.zip\ndocs/vendor/bundle\nfixtures/dom/public/react-dom.js\nfixtures/dom/public/react.js\ntest/the-files-to-test.generated.js\n*.log*\nchrome-user-data\n*.sublime-project\n*.sublime-workspace\n.idea\n*.iml\n*.swp\n*.swo\n*react*min*.js\n\n#DEV deployment\ndeploy.sh\n\n#ENV\n.env\n"
  },
  {
    "path": ".npmrc",
    "content": "engine-strict=true\n"
  },
  {
    "path": ".nvmrc",
    "content": "v22.14.0\n"
  },
  {
    "path": ".pre-commit-config.yaml",
    "content": "# .pre-commit-config.yaml\nrepos:\n  - repo: https://github.com/pre-commit/pre-commit-hooks\n    rev: v5.0.0\n    hooks:\n      - id: check-case-conflict\n      - id: check-illegal-windows-names\n      - id: check-json\n      - id: check-merge-conflict\n      - id: check-symlinks\n      - id: check-yaml\n      - id: detect-private-key\n      - id: end-of-file-fixer\n      - id: fix-byte-order-marker\n      - id: forbid-submodules\n      - id: mixed-line-ending\n      - id: trailing-whitespace\n\n  - repo: https://github.com/rbubley/mirrors-prettier\n    rev: 5ba47274f9b181bce26a5150a725577f3c336011 # frozen: v3.6.2\n    hooks:\n      - id: prettier\n        args: [--no-semi]\n"
  },
  {
    "path": ".prettierignore",
    "content": "build/\ncoverage/\nnode_modules/\n"
  },
  {
    "path": ".stylelintrc.js",
    "content": "module.exports = {\n  plugins: ['stylelint-scss'],\n  extends: [\n    'stylelint-config-standard',\n    'stylelint-config-recommended-scss',\n    'stylelint-config-idiomatic-order',\n  ],\n  rules: {\n    'at-rule-empty-line-before': null,\n    'import-notation': 'string',\n    'length-zero-no-unit': null,\n  },\n}\n"
  },
  {
    "path": ".vscode/extensions.json",
    "content": "{\n  \"recommendations\": [\n    \"dbaeumer.vscode-eslint\",\n    \"esbenp.prettier-vscode\",\n    \"stylelint.vscode-stylelint\",\n    \"vespa-dev-works.jestrunit\"\n  ]\n}\n"
  },
  {
    "path": ".vscode/settings.json",
    "content": "{\n  \"editor.tabSize\": 2,\n  \"[javascript]\": {\n    \"editor.defaultFormatter\": \"esbenp.prettier-vscode\",\n    \"editor.formatOnSave\": true\n  },\n  \"[javascriptreact]\": {\n    \"editor.defaultFormatter\": \"esbenp.prettier-vscode\",\n    \"editor.formatOnSave\": true\n  },\n  \"[typescript]\": {\n    \"editor.defaultFormatter\": \"esbenp.prettier-vscode\",\n    \"editor.formatOnSave\": true\n  },\n  \"[typescriptreact]\": {\n    \"editor.defaultFormatter\": \"esbenp.prettier-vscode\",\n    \"editor.formatOnSave\": true\n  },\n  \"javascript.preferences.importModuleSpecifier\": \"relative\",\n  \"typescript.preferences.importModuleSpecifier\": \"relative\",\n  \"eslint.alwaysShowStatus\": true,\n  \"eslint.lintTask.enable\": true,\n  \"eslint.codeAction.showDocumentation\": {\n    \"enable\": true\n  },\n  \"eslint.workingDirectories\": [\n    {\n      \"directory\": \"./server\",\n      \"changeProcessCWD\": true\n    },\n    {\n      \"directory\": \"./src\",\n      \"changeProcessCWD\": true\n    }\n  ],\n  \"editor.codeActionsOnSave\": {\n    \"source.fixAll.eslint\": \"explicit\",\n    \"source.fixAll.stylelint\": \"explicit\"\n  },\n  \"files.insertFinalNewline\": true,\n  \"files.trimFinalNewlines\": true,\n  \"files.trimTrailingWhitespace\": true,\n  \"jestRunIt.jestPath\": \"./backend/node_modules/.bin/jest\",\n  \"jestRunIt.jestConfigPath\": \"./backend/jest.config.js\",\n  \"css.validate\": false,\n  \"scss.validate\": false,\n  \"stylelint.validate\": [\"css\", \"scss\"],\n  \"search.exclude\": {\n    \"**/node_modules\": true,\n    \"**/*.code-search\": true,\n    \"**/*.svg\": true,\n    \"**/test/mock_data\": true,\n    \"package-lock.json\": true,\n    \"**/test/*.json\": true\n  },\n  \"cSpell.words\": [\n    \"camelcase\",\n    \"chopa\",\n    \"chopb\",\n    \"cimode\",\n    \"clawback\",\n    \"clsx\",\n    \"ctid\",\n    \"CUSTOMNETWORK\",\n    \"Decomp\",\n    \"esbuild\",\n    \"fakenode\",\n    \"Hant\",\n    \"healthz\",\n    \"hexbin\",\n    \"middlewares\",\n    \"MILLIS\",\n    \"moxios\",\n    \"mptoken\",\n    \"mpts\",\n    \"nftoken\",\n    \"nodemodules\",\n    \"pageview\",\n    \"paychannel\",\n    \"paychannels\",\n    \"permissioned\",\n    \"setfee\",\n    \"stylelint\",\n    \"svgr\",\n    \"topojson\",\n    \"trustlines\",\n    \"Txns\",\n    \"unauth\",\n    \"VITE\",\n    \"Xahau\",\n    \"xchain\",\n    \"xchainbridge\"\n  ]\n}\n"
  },
  {
    "path": "@types/env.d.ts",
    "content": "declare module '*.png'\ndeclare module '*.svg'\ndeclare module '*.jpeg'\ndeclare module '*.jpg'\n"
  },
  {
    "path": "@types/i18next.d.ts",
    "content": "// import the original type declarations\nimport 'i18next'\nimport defaultTranslations from '../public/locales/en-US/translations.json'\n\nexport type defaultTranslationsKey = keyof typeof defaultTranslations\n\nexport interface I18nextCustomTypeOptions {\n  returnNull: false\n  // custom namespace type if you changed it\n  defaultNS: 'translations'\n  // custom resources type\n  resources: {\n    translations: typeof defaultTranslations\n  }\n}\n\n// react-i18next versions higher than 11.11.0\ndeclare module 'i18next' {\n  // and extend them!\n  interface CustomTypeOptions extends I18nextCustomTypeOptions {}\n}\n"
  },
  {
    "path": "@types/index.d.ts",
    "content": "export {} // ensure types are picked up externally\n\ndeclare global {\n  interface Window {\n    dataLayer: any[]\n  }\n}\n"
  },
  {
    "path": "@types/react-i18next.d.ts",
    "content": "// import the original type declarations\nimport 'react-i18next'\n\n// react-i18next versions higher than 11.11.0\ndeclare module 'react-i18next' {\n  // and extend them!\n  interface CustomTypeOptions extends I18nextCustomTypeOptions {}\n}\n"
  },
  {
    "path": "@types/svgr.d.ts",
    "content": "/// <reference types=\"vite-plugin-svgr/client\" />\n"
  },
  {
    "path": "CODE_OF_CONDUCT.md",
    "content": "# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nIn the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to make participation in our project and our community a harassment-free experience for everyone, regardless of, but not limited to characteristics like age, body size, disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, religion, or sexual identity and orientation.\n\n## Our Standards\n\nExamples of behavior that contributes to creating a positive environment include:\n\n- Using welcoming and inclusive language\n- Being respectful of differing viewpoints and experiences\n- Gracefully accepting constructive criticism\n- Focusing on what is best for the community\n- Showing empathy towards other community members\n\nExamples of behavior that does not contribute to creating a positive environment include:\n\n- Using sexualized language or imagery and unwelcome sexual attention or advances\n- Trolling, insulting/derogatory comments, and personal or political attacks\n- Public or private harassment\n- Publishing others' private information, such as a physical or electronic address, without explicit permission\n- Other conduct which could reasonably be considered inappropriate in a professional setting\n\n## Our Responsibilities\n\nProject maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior.\n\nProject maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, harmful, or otherwise in violation of this Code of Conduct.\n\n## Scope\n\nThis Code of Conduct applies within all project spaces, and it also applies when an individual is representing the project or its community in public spaces. Examples of representing a project or community include using an official project email address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.\n\n## Enforcement\n\nInstances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at <ripplex@ripple.com>. All complaints will be reviewed and investigated and will result in a response that is deemed necessary and appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.\n\nProject maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.\n\n## Attribution\n\nThis Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html\n\n[homepage]: https://www.contributor-covenant.org\n\nFor answers to common questions about this code of conduct, see\nhttps://www.contributor-covenant.org/faq\n"
  },
  {
    "path": "CONTRIBUTING.md",
    "content": "# Contributing\n\nThanks for contributing to the explorer!\n\nWe're thrilled you're interested and your help is greatly appreciated. Contributing is a great way to learn about the XRP Ledger (XRPL).\n\n## Repository Layout\n\n- [server/](server/) - Backend code lives here\n- [src](src/) - Frontend code lives here\n- [public](public/) - Translations, fonts, and other misc files live here\n- [.env](.env.example) - Environment variables\n\n## Git setup\n\nYou need only to do this once and you have probably already done this if you already use git.\n\n1. Download git.\n2. Set your email address and name:\n3. git config --global user.email your@some-email.com\n4. git config --global user.name “Your Name Here”\n\n### Fork the repository\n\n1. Create a GitHub account if you haven’t already. Let’s assume your git account name is username.\n2. Go to https://github.com/ripple/explorer.\n3. Click on the “Watch”, “Star” and “Fork” buttons in the top right.\n4. That last command will fork a new copy of the repo in your personal git area at https://github.com/username/explorer\n\n### Clone the repository on your local machine.\n\n```\n$ git clone git@github.com:username/explorer.git --branch main\n$ cd explorer\n$ git remote add upstream git@github.com:ripple/explorer.git\n```\n\n### Start work in a new branch.\n\n```\n$ git fetch upstream main\n$ git checkout main\n$ git checkout -b your-branch-name\n$ git push --set-upstream origin your-branch-name\n```\n\nBring in recent changes to the “main” branch into your own branch\n\n```\n$ git fetch upstream main\n$ git pull upstream main\n```\n\n### Ask to submit code from a branch of your GitHub fork.\n\nYou must submit a pushed branch of your GitHub fork.\n\n1. Go to your fork of the code at https://github.com/username/explorer.\n2. Select the branch you want reviewed from the grey “branch” menu on the left of the page.\n3. Click on the green button marked “Compare & pull request” on the right of the page.\n4. Fill in the PR template, then press the green “Send pull request” button on the right side.\n\n## Requirements for a Successful Pull Request\n\nBefore being considered for review or merging, each pull request must:\n\n- Pass tests and linter locally\n  - running `$ npm run test` and `$ npm run lint` should show no errors or create additional warnings.\n- Be [marked as drafts](https://github.blog/2019-02-14-introducing-draft-pull-requests/) until they are ready for review.\n- Adhere to the [code of conduct](CODE_OF_CONDUCT.md) for this repository.\n\nAll new react components must be [function components](https://reactjs.org/docs/components-and-props.html) unless there is good reason to use classes.\n\n## CSS linting rules are extended from\n\n1.  [stylelint-config-standard](https://github.com/stylelint/stylelint-config-standard)\n1.  [stylelint-config-recommended-scss](https://github.com/kristerkari/stylelint-config-recommended-scss)\n1.  [stylelint-config-idiomatic-order](https://github.com/ream88/stylelint-config-idiomatic-order)\n\n## JSON viewer\n\nWe are using [react18-json-view](https://github.com/YYsuni/react18-json-view)\n\n## Analytics\n\nWe are using Google Analytics. For more info read the [documentation](https://developers.google.com/analytics/devguides/collection/analyticsjs/)\n\n## Visual Studio Code IDE\n\n[VSC](https://code.visualstudio.com/) is fast and reliable IDE if you choose to use it please do a following configurations\n\n### Install Extensions\n\n1.  DotENV\n1.  ESLint\n1.  Prettier - Code formatter\n\n### User Settings\n\n```\n{\n    \"explorer.confirmDelete\": false,\n    \"editor.formatOnSave\": true,\n    \"stylelint.enable\": true,\n    \"files.exclude\": {\n        \"node_modules/\": true,\n        \"coverage/\": true,\n        \"build/\": true,\n        \"src/**/*.css\": true\n    }\n}\n```\n\n## Useful Chrome add-on\n\n- [Dom listener](https://chrome.google.com/webstore/detail/domlistener/jlfdgnlpibogjanomigieemaembjeolj?hl=en)\n- [React Developer Tools](https://chrome.google.com/webstore/detail/react-developer-tools/fmkadmapgofadopljbjfkapdkoienihi/related?hl=en)\n- [Postman](https://chrome.google.com/webstore/detail/postman/fhbjgbiflinjbdggehcddcbncdddomop/related?hl=en)\n\n## Basic security\n\n### Update module dependencies\n\n1.  `npm install -g npm-check-updates`\n1.  to see the available updates `ncu`\n1.  to update the package.json `ncu -u`\n1.  [documentation](https://www.npmjs.com/package/npm-check-updates)\n\n### Clean your package.json\n\n1.  `npm install -g fixpack`\n1.  to re-write package.json run `fixpack`\n1.  [documentation](https://www.npmjs.com/package/fixpack)\n\n### Node Security (nsp)\n\n1.  `npm install -g nsp`\n1.  to check for security issues run `nsp check --output summary`\n1.  [documentation](https://www.npmjs.com/package/nsp)\n\n## bash_profile\n\n1.  `vim ~/.bash_profile`\n1.  paste the following config\n\n```\n## Show branch name in color\nfunction parse_git_branch () {\n  git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \\(.*\\)/ (\\1)/'\n}\nRED=\"\\[\\033[0;31m\\]\"\nYELLOW=\"\\[\\033[0;33m\\]\"\nGREEN=\"\\[\\033[0;32m\\]\"\nNO_COLOR=\"\\[\\033[0m\\]\"\nPS1=\"$GREEN\\u@\\h$NO_COLOR:\\w$YELLOW\\$(parse_git_branch)$NO_COLOR\\$ \"\n```\n\n## .gitconfig\n\n1.  `vim ~/.gitconfig`\n1.  paste the following config\n\n```\n## This is Git's per-user configuration file.\n[user]\n  name = %YOUR_NAME%\n  email = %YOUR_EMAIL%\n\n[alias]\n  co = checkout\n  ci = commit\n  st = status\n  br = branch\n  hist = log --pretty=format:\\\"%h %ad | %s%d [%an]\\\" --graph --date=short\n  type = cat-file -t\n  dump = cat-file -p\n  unstage = reset HEAD --\n  last = log -1 HEAD\n```\n"
  },
  {
    "path": "LICENSE",
    "content": "MIT License\n\nCopyright (c) 2018 Ripple\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "README.md",
    "content": "[![Release](https://img.shields.io/github/v/release/ripple/explorer.svg)](https://github.com/ripple/explorer/releases)\n[![Build](https://github.com/ripple/explorer/actions/workflows/nodejs.yml/badge.svg)](https://github.com/ripple/explorer/actions)\n[![License](https://img.shields.io/github/license/ripple/explorer)](https://github.com/ripple/explorer/blob/main/LICENSE)\n\n# XRPL Explorer\n\nThis repo contains the source code for the block explorer of the XRP Ledger hosted at livenet.xrpl.org.\n\nThis project uses [Vite](https://vitejs.dev/). You can find information about how to use it [here](https://vitejs.dev/guide/cli.html).\n\n## Basic requirements\n\n### Install Node and NPM\n\nThe project requires node@22. Follow installation instructions on [nodejs.org](https://nodejs.org/en/).\n\n(Recommended) Install using [nvm](https://github.com/nvm-sh/nvm).\n\nMake sure to use npm version 8+ by running `npm install -g npm@latest` after you install Node.\n\n### Copy example env\n\n`cp .env.example .env`\n\n## Install, compile, and run\n\n- `npm install` then\n- `npm start` for development mode, or\n- `npm run build` then `npm run prod-server` for production mode\n\n### Installing on Apple Silicon\n\nSince `canvas` does not provide pre-built binaries for Apple chips during `npm install` it will try to compile it manually. To get this to succeed you need to install several dependencies by following the instructions [here](https://github.com/Automattic/node-canvas#compiling).\n\n## Running on Parallel Networks\n\n### Testnet mode\n\n1. Replace `VITE_RIPPLED_HOST=s2.ripple.com` with `VITE_RIPPLED_HOST=s.altnet.rippletest.net` in the `.env` file\n1. Add `VITE_ENVIRONMENT=testnet` to `.env` to enable TESTNET banner\n\n### Devnet mode\n\n1. Replace `VITE_RIPPLED_HOST=s2.ripple.com` with `VITE_RIPPLED_HOST=s.devnet.rippletest.net` in the `.env` file\n1. Add `VITE_ENVIRONMENT=devnet` to `.env` to enable TESTNET banner\n\n## Testing\n\n### Run unit tests\n\n- Run tests in watch mode `npm test`\n- Run test to produce coverage `npm run test:coverage`\n- To open coverage HTML report in app root do `open coverage/index.html`\n\n### Debugging Unit Tests in Chrome\n\n1.  Place `debugger;` in your unit test\n1.  Do `npm run test:debug`\n1.  Open `about:inspect` in Chrome\n1.  Click on `inspect` link\n1.  Chrome Developer Tools will be open, click `play` button\n1.  Now test will start running and will stop on your `debugger;`\n1.  You know the rest ;)\n\n## Targeted view sizes\n\n1.  phone-only: 0px - 375px\n1.  tablet-portrait-up: 375px - 600px\n1.  tablet-landscape-up: 600px - 900px\n1.  desktop-up: 900px - 1200px\n1.  big-desktop-up: 1200px and up\n\n## Targeted languages\n\n1. US English (default)\n1. Spanish\n1. French\n1. Japanese\n1. Korean\n\nWhen updating translation entires or adding new languages consult the guide [Translating](./docs/translating.md).\n\n## Additional Documentation\n\n- [How to define transactions](./src/containers/shared/components/Transaction/README.md)\n- [Routing](./docs/routing.md)\n\n## React Documentation\n\n- Latest news in [react blog](https://reactjs.org/blog)\n- [React documentation](https://react.dev)\n- [How to think in react](https://reactjs.org/docs/thinking-in-react.html) and break down components\n"
  },
  {
    "path": "babel.config.js",
    "content": "module.exports = {\n  presets: ['@babel/react', '@babel/env'],\n  plugins: [\n    [\n      '@babel/plugin-transform-react-jsx',\n      {\n        runtime: 'automatic',\n      },\n    ],\n  ],\n}\n"
  },
  {
    "path": "docs/analytics.md",
    "content": "## Variables\n\n| Name                 | Description                                                        | Values                                                                         | Page                     |\n| -------------------- | ------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------ |\n| network              | Which named network we are viewing                                 | `mainnet`, `testnet`, `devnet`, `amm-devnet`, `custom` , or more in the future | All pages                |\n| entrypoint           | The URI the explorer connects to for data                          |                                                                                | All pages                |\n| transaction_type     | The `TransactionType` field on a transaction                       |                                                                                | `/transactions/*`        |\n| transaction_category | An explorer specific grouping of transactions                      | `PAYMENT`, `DEX`, `NFT`, `ACCOUNT`, `PSEUDO`, `OTHER`, or `XCHAIN`             | `/transactions/*`        |\n| transaction_action   | An explorer specific grouping of transactions                      | `CREATE`, `MODIFY`, `FINISH`, `CANCEL`, or `SEND`                              | `/transactions/*`        |\n| tec_code             | The failure code for a transaction                                 |                                                                                | `/transactions/*`        |\n| account_id           |                                                                    |                                                                                | `/accounts/*`            |\n| issuer               | The issuer of a token                                              | The accountId of the issuer                                                    | `/tokens/*`, `/nft`      |\n| currency_code        |                                                                    | Ex. USD or SOLO                                                                | `/tokens/*`              |\n| asset1               | The first asset of an AMM                                          | Formatted {currencyCode}.{issuer}                                              | `/accounts/*` for an AMM |\n| asset2               | The first second asset of an AMM                                   | Formatted {currencyCode}.{issuer}                                              | `/accounts/*` for an AMM |\n| nftoken_id           |                                                                    |                                                                                | `/nft`                   |\n| search_term          | The search term                                                    |                                                                                | All pages                |\n| search_category      | The parsed category searched by as determined by parsing the value | Ex `accounts`, `transactions`                                                  | All pages                |\n| validator            | Public key of the validator viewed                                 |                                                                                | `/validator`             |\n\n## Events\n\n| Name           | Description                                               | Variables                           | Page                                                           |\n| -------------- | --------------------------------------------------------- | ----------------------------------- | -------------------------------------------------------------- |\n| search         | User used the global search                               | `search_term` and `search_category` | All pages                                                      |\n| mobile_menu    | User opens the menu                                       |                                     | All pages                                                      |\n| network_switch | User switches networks                                    | network, endpoint                   | All pages                                                      |\n| load_more      | User chooses to load more data                            |                                     | `/accounts/*/transactions`, `/nft/transactions/*`, `/tokens/*` |\n| not_found      | When showing a soft 404. Previously used a path of `/404` |                                     |                                                                |\n\n## Techniques\n\n- Use the `screen_view` event once the data is available to make the call. For example on the transaction page wait until we get the transaction back to know the `transactionType` instead of sending an event to say the page was visited and then to say we have all information needed.\n- Send entire url path for page view events. The details can be parsed out later.\n- Use the AdSwerve browser plugin to debug analytics.\n- It is okay to use the tracking id on all servers including local, dev, and staging servers. The data can be trimmed down on Google's side.\n\n## Tracking Code\n\nPaste this code as high in the <head> of the page as possible:\n\n```\n<!-- Google Tag Manager -->\n<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':\nnew Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],\nj=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=\n'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);\n})(window,document,'script','dataLayer','GTM-KCQZ3L8');</script>\n<!-- End Google Tag Manager -->\n```\n\nAdditionally, paste this code immediately after the opening **<body>** tag:\n\n```\n<!-- Google Tag Manager (noscript) -->\n<noscript><iframe src=\"https://www.googletagmanager.com/ns.html?id=GTM-KCQZ3L8\"\nheight=\"0\" width=\"0\" style=\"display:none;visibility:hidden\"></iframe></noscript>\n<!-- End Google Tag Manager (noscript) -->\n```\n"
  },
  {
    "path": "docs/routing.md",
    "content": "## Typed Routes\n\nThe explorer uses some enhancements to `react-router` to provide type checking to routes.\n\n### `RouteDefinition`\n\n`useRouteParams` and `RouteLink` take these objects to provide type checking for params.\n\nIn the future these objects can provide a common way to support legacy routes.\n\nex.\n\n```\nexport const ACCOUNT_ROUTE: RouteDefinition<{\n    id?: string\n    tab?: 'assets' | 'transactions'\n    assetType?: 'issued' | 'nfts'\n}> = {\n    path: '/accounts/:id?/:tab?/:assetType?',\n}\n```\n\n### `useRouteParams`\n\nA new hook which takes a `RouteDefinition` and wraps `react-router`'s `useRouteParams`. This will derive the type of the params from the definition.\n\nex. `const { id = '', assetType = 'issued' } = useRouteParams(ACCOUNT_ROUTE)`\n\n### `RouteLink`\n\nA wrapper for `react-router`'s `Link` that takes a `RouteDefinition` and an object of params that will be type checked.\n\nEx. `<RouteLink to={ACCOUNT_ROUTE} params={{ id: owner }}>{owner}</RouteLink>`\n\nExample that will fail to compile `<RouteLink to={ACCOUNT_ROUTE} params={{ something: owner }}>{owner}</RouteLink>`\n"
  },
  {
    "path": "docs/translating.md",
    "content": "# Translating the Application\n\n## How Languages Are Defined\n\n1. Add the new language code and language name to the map `supportedLanguages` in [/src/i18n/baseConfig.ts](../src/i18n/baseConfig.ts)\n2. Create a folder in [/public/locales/](../public/locales) with the language code as its name.\n3. Add a new file, `translations.json`, to the new folder.\n4. Translate all the entries. If you prefer to use the English version just set the value to `null`.\n\n   Example file: [/public/locales/ja-JP/translations.json](../public/locales/ja-JP/translations.json)\n\n## Updating Existing Translations\n\nWhen making changes to the base (English) language file follow the guide based on the type and scope of the change.\n\n### New Entry\n\n1. Create entry in `en-US/translations.json`\n2. Add an entry to all other `translation.json` files. Set the value to be `null` (which means it will default to using the English version).\n\n## Existing Entry\n\n1. Update the entry in `en-US/translations.json`\n2. If the meaning does **NOT** change materially, you can leave them as is. Ex. \"Please check your transaction hash\" => \"Please check your transaction hash or CTID.\"\n3. If the entry has a new meaning than before, set the value to `null` in all other `translation.json` files.\n   _Note that changing a translation to `null` causes it to fall back to the English version, and is a signal to language contributors that they may want to provide a fresh localization._\n"
  },
  {
    "path": "entrypoint.sh",
    "content": "#!/bin/sh\nset -e\n\ncd /explorer\n\n# we build on container startup because react needs the env variables present\n/usr/local/bin/node server\n"
  },
  {
    "path": "jest.config.js",
    "content": "module.exports = {\n  roots: ['<rootDir>/src'],\n  setupFilesAfterEnv: ['<rootDir>/src/setupTests.ts'],\n  testMatch: [\n    '<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}',\n    '<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}',\n  ],\n  testEnvironment: 'jsdom',\n  transform: {\n    '^.+\\\\.(ts|tsx)?$': ['ts-jest', { diagnostics: { warnOnly: true } }],\n    '^.+\\\\.(js|jsx)$': 'babel-jest',\n    '^.+\\\\.(svg)$': '<rootDir>/testUtils/svgTransform.js',\n    '^.+\\\\.(css|scss)$': '<rootDir>/testUtils/cssTransform.js',\n    '^.+\\\\.(png)$': '<rootDir>/testUtils/imageTransform.js',\n  },\n  transformIgnorePatterns: ['node_modules/(?!arc)/(?!d3)'],\n  moduleNameMapper: {\n    '\\\\.svg\\\\?url$': '<rootDir>/testUtils/svgUrlTransform.js',\n    'd3-hexbin': '<rootDir>/node_modules/d3-hexbin/build/d3-hexbin.min.js',\n    d3: '<rootDir>/node_modules/d3/dist/d3.min.js',\n  },\n  clearMocks: true,\n  resetMocks: true,\n  collectCoverageFrom: [\n    'src/**/*.{js,jsx,ts,tsx}',\n    '!<rootDir>/node_modules/',\n    '!src/index.js',\n    '!src/i18n/*',\n    '!src/setupTests.js',\n    '!src/setupProxy.js',\n    '!src/registerServiceWorker.js',\n    '!src/containers/shared/images/*',\n    '!src/containers/test/*',\n    '!src/coverage/*',\n    '!testUtils/*',\n  ],\n  coverageThreshold: {\n    global: { branches: 70, functions: 80, lines: 80, statements: 80 },\n  },\n  coverageReporters: ['text', 'text-summary', 'html'],\n  verbatimModuleSyntax: false,\n}\n"
  },
  {
    "path": "package.json",
    "content": "{\n  \"name\": \"explorer\",\n  \"description\": \"XRPL Data Visualization\",\n  \"version\": \"1.5.0\",\n  \"overrides\": {\n    \"stylelint-order\": \"^8.1.1\"\n  },\n  \"dependencies\": {\n    \"@rollup/plugin-inject\": \"^5.0.5\",\n    \"@vitejs/plugin-react\": \"^5.1.1\",\n    \"@xrplf/isomorphic\": \"^1.0.0-beta.1\",\n    \"assert\": \"^2.1.0\",\n    \"autoprefixer\": \"^10.4.20\",\n    \"axios\": \"^1.13.5\",\n    \"body-parser\": \"^1.20.3\",\n    \"buffer\": \"^6.0.3\",\n    \"bunyan\": \"^1.8.15\",\n    \"classnames\": \"^2.5.1\",\n    \"compression\": \"^1.7.4\",\n    \"d3\": \"^7.9.0\",\n    \"d3-geo\": \"^3.1.0\",\n    \"d3-hexbin\": \"^0.2.2\",\n    \"d3-scale\": \"^4.0.2\",\n    \"debug\": \"^4.4.1\",\n    \"dotenv\": \"^17.2.3\",\n    \"esbuild\": \"^0.25.9\",\n    \"events\": \"^3.3.0\",\n    \"express\": \"^4.21.2\",\n    \"i18next\": \"^23.9.0\",\n    \"i18next-browser-languagedetector\": \"^7.2.1\",\n    \"i18next-http-backend\": \"^3.0.2\",\n    \"jest-environment-jsdom\": \"^30.3.0\",\n    \"prop-types\": \"^15.8.1\",\n    \"react\": \"^18.3.1\",\n    \"react-dom\": \"^18.3.1\",\n    \"react-error-boundary\": \"^4.0.13\",\n    \"react-helmet-async\": \"^2.0.4\",\n    \"react-i18next\": \"15.4.1\",\n    \"react-query\": \"^3.39.3\",\n    \"react-router\": \"^7.9.5\",\n    \"react18-json-view\": \"^0.2.8\",\n    \"recharts\": \"^2.15.3\",\n    \"ripple-address-codec\": \"^5.0.0\",\n    \"ripple-binary-codec\": \"^2.4.1\",\n    \"topojson-client\": \"^3.0.0\",\n    \"usehooks-ts\": \"^3.1.0\",\n    \"vite\": \"^7.3.2\",\n    \"vite-plugin-environment\": \"^1.1.3\",\n    \"vite-plugin-html\": \"^3.2.2\",\n    \"vite-plugin-svgr\": \"^4.5.0\",\n    \"vite-tsconfig-paths\": \"^5.1.4\",\n    \"xrpl-client\": \"^2.4.0\"\n  },\n  \"devDependencies\": {\n    \"@babel/eslint-parser\": \"^7.22.6\",\n    \"@babel/preset-env\": \"^7.25.7\",\n    \"@babel/preset-react\": \"^7.27.1\",\n    \"@testing-library/jest-dom\": \"^6.7.0\",\n    \"@testing-library/react\": \"^13.4.0\",\n    \"@testing-library/user-event\": \"^14.6.1\",\n    \"@types/create-hash\": \"^1.2.6\",\n    \"@types/jest\": \"^30.0.0\",\n    \"@types/lodash\": \"^4.17.20\",\n    \"@types/node\": \"^22.14.0\",\n    \"@types/react\": \"^18.3.28\",\n    \"@types/react-dom\": \"^18.3.7\",\n    \"@typescript-eslint/eslint-plugin\": \"^8.32.1\",\n    \"@typescript-eslint/parser\": \"^8.32.1\",\n    \"@xrplf/prettier-config\": \"^1.9.1\",\n    \"babel-jest\": \"^29.7.0\",\n    \"eslint\": \"^8.57.0\",\n    \"eslint-config-airbnb\": \"^19.0.4\",\n    \"eslint-config-prettier\": \"^9.1.0\",\n    \"eslint-config-react-app\": \"^7.0.1\",\n    \"eslint-import-resolver-typescript\": \"^4.4.4\",\n    \"eslint-plugin-flowtype\": \"^8.0.3\",\n    \"eslint-plugin-import\": \"^2.31.0\",\n    \"eslint-plugin-jsx-a11y\": \"^6.9.0\",\n    \"eslint-plugin-prettier\": \"^5.5.4\",\n    \"eslint-plugin-react\": \"^7.34.2\",\n    \"eslint-plugin-react-hooks\": \"^4.6.2\",\n    \"jest-websocket-mock\": \"^2.5.0\",\n    \"lint-staged\": \"^15.2.10\",\n    \"mock-socket\": \"^9.1.5\",\n    \"moxios\": \"^0.4.0\",\n    \"nodemon\": \"^3.1.4\",\n    \"npm-run-all\": \"^4.1.5\",\n    \"prettier\": \"3.6.2\",\n    \"react-error-overlay\": \"6.0.11\",\n    \"sass\": \"^1.80.5\",\n    \"source-map-explorer\": \"^2.5.3\",\n    \"stylelint\": \"^17.8.0\",\n    \"stylelint-config-idiomatic-order\": \"^10.0.0\",\n    \"stylelint-config-recommended-scss\": \"^17.0.0\",\n    \"stylelint-config-standard\": \"^40.0.0\",\n    \"stylelint-order\": \"^8.1.1\",\n    \"stylelint-prettier\": \"^5.0.3\",\n    \"stylelint-scss\": \"^7.0.0\",\n    \"ts-jest\": \"^29.4.1\",\n    \"ts-node\": \"^10.9.2\",\n    \"typescript\": \"^5.9.3\",\n    \"xrpl\": \"^4.5.0\"\n  },\n  \"resolutions\": {\n    \"jest-environment-jsdom\": \"29.3.1\",\n    \"rollup\": \"npm:@rollup/wasm-node@^4.59.0\"\n  },\n  \"lint-staged\": {\n    \"src/**/*.{js,jsx,json,scss}\": [\n      \"prettier --write\",\n      \"git add\"\n    ]\n  },\n  \"main\": \"index\",\n  \"private\": true,\n  \"scripts\": {\n    \"analyze\": \"source-map-explorer build/static/js/main.*\",\n    \"build\": \"vite build\",\n    \"build-ts\": \"tsc --build\",\n    \"dev-client\": \"vite serve\",\n    \"dev-server\": \"NODE_ENV=development PORT=5001 nodemon --watch server --watch build server|bunyan || true\",\n    \"lint\": \"run-s \\\"lint:js -- --fix\\\" \\\"lint:css -- --fix\\\" \\\"format -- --log-level error\\\"\",\n    \"lint:ci\": \"run-s lint:js lint:css \\\"format:check -- --log-level error\\\"\",\n    \"lint:css\": \"node_modules/.bin/stylelint src/**/*.scss\",\n    \"lint:js\": \"node_modules/.bin/eslint --ext=js --ext=jsx --ext=ts --ext=tsx --color --max-warnings 0 .\",\n    \"format\": \"prettier --write .\",\n    \"format:check\": \"prettier --check .\",\n    \"precommit\": \"lint-staged\",\n    \"prod-server\": \"node server|bunyan\",\n    \"start\": \"run-p dev-server dev-client\",\n    \"test\": \"jest --env=jsdom --watch\",\n    \"test:all\": \"run-s lint:ci test:ci\",\n    \"test:ci\": \"jest --coverage --ci --color --env=jsdom --no-cache --runInBand\",\n    \"test:debug\": \"jest --inspect-brk --runInBand --env=jsdom\",\n    \"test:coverage\": \"npm run test -- --coverage --watchAll=false\"\n  },\n  \"browserslist\": [\n    \">0.2%\",\n    \"not dead\",\n    \"not ie <= 11\",\n    \"not op_mini all\"\n  ],\n  \"prettier\": \"@xrplf/prettier-config\",\n  \"engines\": {\n    \"node\": \">=22.0.0 <23\",\n    \"npm\": \">=9.0.0 <11.0.0\"\n  }\n}\n"
  },
  {
    "path": "public/.htaccess",
    "content": "Options -MultiViews\nRewriteEngine On\nRewriteCond %{REQUEST_FILENAME} !-f\nRewriteRule ^ index.html [QSA,L]\n"
  },
  {
    "path": "public/countries.json",
    "content": "{\n  \"type\": \"Topology\",\n  \"objects\": {\n    \"countries\": {\n      \"type\": \"GeometryCollection\",\n      \"geometries\": [\n        { \"type\": \"Polygon\", \"arcs\": [[0, 1, 2, 3, 4, 5]], \"id\": \"004\" },\n        {\n          \"type\": \"MultiPolygon\",\n          \"arcs\": [[[6, 7, 8, 9]], [[10, 11, 12]]],\n          \"id\": \"024\"\n        },\n        { \"type\": \"Polygon\", \"arcs\": [[13, 14, 15, 16, 17]], \"id\": \"008\" },\n        { \"type\": \"Polygon\", \"arcs\": [[18, 19, 20, 21, 22]], \"id\": \"784\" },\n        {\n          \"type\": \"MultiPolygon\",\n          \"arcs\": [[[23, 24]], [[25, 26, 27, 28, 29, 30]]],\n          \"id\": \"032\"\n        },\n        { \"type\": \"Polygon\", \"arcs\": [[31, 32, 33, 34, 35]], \"id\": \"051\" },\n        {\n          \"type\": \"MultiPolygon\",\n          \"arcs\": [\n            [[36]],\n            [[37]],\n            [[38]],\n            [[39]],\n            [[40]],\n            [[41]],\n            [[42]],\n            [[43]]\n          ],\n          \"id\": \"010\"\n        },\n        { \"type\": \"Polygon\", \"arcs\": [[44]], \"id\": \"260\" },\n        { \"type\": \"MultiPolygon\", \"arcs\": [[[45]], [[46]]], \"id\": \"036\" },\n        {\n          \"type\": \"Polygon\",\n          \"arcs\": [[47, 48, 49, 50, 51, 52, 53]],\n          \"id\": \"040\"\n        },\n        {\n          \"type\": \"MultiPolygon\",\n          \"arcs\": [[[54, -35]], [[55, 56, -33, 57, 58]]],\n          \"id\": \"031\"\n        },\n        { \"type\": \"Polygon\", \"arcs\": [[59, 60, 61]], \"id\": \"108\" },\n        { \"type\": \"Polygon\", \"arcs\": [[62, 63, 64, 65, 66]], \"id\": \"056\" },\n        { \"type\": \"Polygon\", \"arcs\": [[67, 68, 69, 70, 71]], \"id\": \"204\" },\n        { \"type\": \"Polygon\", \"arcs\": [[72, 73, 74, -70, 75, 76]], \"id\": \"854\" },\n        { \"type\": \"Polygon\", \"arcs\": [[77, 78, 79]], \"id\": \"050\" },\n        { \"type\": \"Polygon\", \"arcs\": [[80, 81, 82, 83, 84, 85]], \"id\": \"100\" },\n        {\n          \"type\": \"MultiPolygon\",\n          \"arcs\": [[[86]], [[87]], [[88]]],\n          \"id\": \"044\"\n        },\n        { \"type\": \"Polygon\", \"arcs\": [[89, 90, 91]], \"id\": \"070\" },\n        { \"type\": \"Polygon\", \"arcs\": [[92, 93, 94, 95, 96]], \"id\": \"112\" },\n        { \"type\": \"Polygon\", \"arcs\": [[97, 98, 99]], \"id\": \"084\" },\n        { \"type\": \"Polygon\", \"arcs\": [[100, 101, 102, 103, -31]], \"id\": \"068\" },\n        {\n          \"type\": \"Polygon\",\n          \"arcs\": [[-27, 104, -103, 105, 106, 107, 108, 109, 110, 111, 112]],\n          \"id\": \"076\"\n        },\n        { \"type\": \"Polygon\", \"arcs\": [[113, 114]], \"id\": \"096\" },\n        { \"type\": \"Polygon\", \"arcs\": [[115, 116]], \"id\": \"064\" },\n        { \"type\": \"Polygon\", \"arcs\": [[117, 118, 119, 120]], \"id\": \"072\" },\n        {\n          \"type\": \"Polygon\",\n          \"arcs\": [[121, 122, 123, 124, 125, 126, 127]],\n          \"id\": \"140\"\n        },\n        {\n          \"type\": \"MultiPolygon\",\n          \"arcs\": [\n            [[128]],\n            [[129]],\n            [[130]],\n            [[131]],\n            [[132]],\n            [[133]],\n            [[134]],\n            [[135]],\n            [[136]],\n            [[137]],\n            [[138, 139, 140, 141]],\n            [[142]],\n            [[143]],\n            [[144]],\n            [[145]],\n            [[146]],\n            [[147]],\n            [[148]],\n            [[149]],\n            [[150]],\n            [[151]],\n            [[152]],\n            [[153]],\n            [[154]],\n            [[155]],\n            [[156]],\n            [[157]],\n            [[158]],\n            [[159]],\n            [[160]]\n          ],\n          \"id\": \"124\"\n        },\n        { \"type\": \"Polygon\", \"arcs\": [[-51, 161, 162, 163]], \"id\": \"756\" },\n        {\n          \"type\": \"MultiPolygon\",\n          \"arcs\": [[[-24, 164]], [[-30, 165, 166, -101]]],\n          \"id\": \"152\"\n        },\n        {\n          \"type\": \"MultiPolygon\",\n          \"arcs\": [\n            [[167]],\n            [\n              [\n                168, 169, 170, 171, 172, 173, -117, 174, 175, 176, 177, -4, 178,\n                179, 180, 181, 182, 183\n              ]\n            ]\n          ],\n          \"id\": \"156\"\n        },\n        {\n          \"type\": \"Polygon\",\n          \"arcs\": [[184, 185, 186, 187, -73, 188]],\n          \"id\": \"384\"\n        },\n        {\n          \"type\": \"Polygon\",\n          \"arcs\": [[189, 190, 191, 192, 193, 194, -128, 195]],\n          \"id\": \"120\"\n        },\n        {\n          \"type\": \"Polygon\",\n          \"arcs\": [\n            [196, 197, -60, 198, 199, 200, 201, -10, 202, -13, 203, -126, 204]\n          ],\n          \"id\": \"180\"\n        },\n        {\n          \"type\": \"Polygon\",\n          \"arcs\": [[-12, 205, 206, -196, -127, -204]],\n          \"id\": \"178\"\n        },\n        {\n          \"type\": \"Polygon\",\n          \"arcs\": [[207, 208, 209, 210, 211, -107, 212]],\n          \"id\": \"170\"\n        },\n        { \"type\": \"Polygon\", \"arcs\": [[213, 214, 215, 216]], \"id\": \"188\" },\n        { \"type\": \"Polygon\", \"arcs\": [[217]], \"id\": \"192\" },\n        { \"type\": \"Polygon\", \"arcs\": [[218, 219]], \"id\": \"-99\" },\n        { \"type\": \"Polygon\", \"arcs\": [[220, -220]], \"id\": \"196\" },\n        { \"type\": \"Polygon\", \"arcs\": [[-53, 221, 222, 223]], \"id\": \"203\" },\n        {\n          \"type\": \"Polygon\",\n          \"arcs\": [[224, 225, -222, -52, -164, 226, 227, -64, 228, 229, 230]],\n          \"id\": \"276\"\n        },\n        { \"type\": \"Polygon\", \"arcs\": [[231, 232, 233, 234]], \"id\": \"262\" },\n        {\n          \"type\": \"MultiPolygon\",\n          \"arcs\": [[[235]], [[-231, 236]]],\n          \"id\": \"208\"\n        },\n        { \"type\": \"Polygon\", \"arcs\": [[237, 238]], \"id\": \"214\" },\n        {\n          \"type\": \"Polygon\",\n          \"arcs\": [[239, 240, 241, 242, 243, 244, 245, 246]],\n          \"id\": \"012\"\n        },\n        { \"type\": \"Polygon\", \"arcs\": [[247, -208, 248]], \"id\": \"218\" },\n        { \"type\": \"Polygon\", \"arcs\": [[249, 250, 251, 252, 253]], \"id\": \"818\" },\n        { \"type\": \"Polygon\", \"arcs\": [[254, 255, 256, -235]], \"id\": \"232\" },\n        { \"type\": \"Polygon\", \"arcs\": [[257, 258, 259, 260]], \"id\": \"724\" },\n        { \"type\": \"Polygon\", \"arcs\": [[261, 262, 263]], \"id\": \"233\" },\n        {\n          \"type\": \"Polygon\",\n          \"arcs\": [[-234, 264, 265, 266, 267, 268, 269, -255]],\n          \"id\": \"231\"\n        },\n        { \"type\": \"Polygon\", \"arcs\": [[270, 271, 272, 273]], \"id\": \"246\" },\n        { \"type\": \"MultiPolygon\", \"arcs\": [[[274]], [[275]]], \"id\": \"242\" },\n        { \"type\": \"Polygon\", \"arcs\": [[276]], \"id\": \"238\" },\n        {\n          \"type\": \"MultiPolygon\",\n          \"arcs\": [\n            [[277, 278, 279, -111]],\n            [[280]],\n            [[281, -227, -163, 282, 283, -259, 284, -66]]\n          ],\n          \"id\": \"250\"\n        },\n        { \"type\": \"Polygon\", \"arcs\": [[285, 286, -190, -207]], \"id\": \"266\" },\n        {\n          \"type\": \"MultiPolygon\",\n          \"arcs\": [[[287, 288]], [[289]]],\n          \"id\": \"826\"\n        },\n        { \"type\": \"Polygon\", \"arcs\": [[290, 291, -58, -32, 292]], \"id\": \"268\" },\n        { \"type\": \"Polygon\", \"arcs\": [[293, -189, -77, 294]], \"id\": \"288\" },\n        {\n          \"type\": \"Polygon\",\n          \"arcs\": [[295, 296, 297, 298, 299, 300, -187]],\n          \"id\": \"324\"\n        },\n        { \"type\": \"Polygon\", \"arcs\": [[301, 302]], \"id\": \"270\" },\n        { \"type\": \"Polygon\", \"arcs\": [[303, 304, -299]], \"id\": \"624\" },\n        { \"type\": \"Polygon\", \"arcs\": [[305, -191, -287]], \"id\": \"226\" },\n        {\n          \"type\": \"MultiPolygon\",\n          \"arcs\": [[[306]], [[307, -15, 308, -84, 309]]],\n          \"id\": \"300\"\n        },\n        { \"type\": \"Polygon\", \"arcs\": [[310]], \"id\": \"304\" },\n        {\n          \"type\": \"Polygon\",\n          \"arcs\": [[311, 312, -100, 313, 314, 315]],\n          \"id\": \"320\"\n        },\n        { \"type\": \"Polygon\", \"arcs\": [[316, 317, -109, 318]], \"id\": \"328\" },\n        {\n          \"type\": \"Polygon\",\n          \"arcs\": [[319, 320, -315, 321, 322]],\n          \"id\": \"340\"\n        },\n        {\n          \"type\": \"Polygon\",\n          \"arcs\": [[323, -92, 324, 325, 326, 327]],\n          \"id\": \"191\"\n        },\n        { \"type\": \"Polygon\", \"arcs\": [[-239, 328]], \"id\": \"332\" },\n        {\n          \"type\": \"Polygon\",\n          \"arcs\": [[-48, 329, 330, 331, 332, -328, 333]],\n          \"id\": \"348\"\n        },\n        {\n          \"type\": \"MultiPolygon\",\n          \"arcs\": [\n            [[334]],\n            [[335, 336]],\n            [[337]],\n            [[338]],\n            [[339]],\n            [[340]],\n            [[341]],\n            [[342]],\n            [[343, 344]],\n            [[345]],\n            [[346]],\n            [[347, 348]],\n            [[349]]\n          ],\n          \"id\": \"360\"\n        },\n        {\n          \"type\": \"Polygon\",\n          \"arcs\": [[-177, 350, -175, -116, -174, 351, -80, 352, 353]],\n          \"id\": \"356\"\n        },\n        { \"type\": \"Polygon\", \"arcs\": [[354, -288]], \"id\": \"372\" },\n        {\n          \"type\": \"Polygon\",\n          \"arcs\": [[355, -6, 356, 357, 358, 359, -55, -34, -57, 360]],\n          \"id\": \"364\"\n        },\n        {\n          \"type\": \"Polygon\",\n          \"arcs\": [[361, 362, 363, 364, 365, 366, -359]],\n          \"id\": \"368\"\n        },\n        { \"type\": \"Polygon\", \"arcs\": [[367]], \"id\": \"352\" },\n        {\n          \"type\": \"Polygon\",\n          \"arcs\": [[368, 369, 370, -254, 371, 372, 373]],\n          \"id\": \"376\"\n        },\n        {\n          \"type\": \"MultiPolygon\",\n          \"arcs\": [[[374]], [[375]], [[376, 377, -283, -162, -50]]],\n          \"id\": \"380\"\n        },\n        { \"type\": \"Polygon\", \"arcs\": [[378]], \"id\": \"388\" },\n        {\n          \"type\": \"Polygon\",\n          \"arcs\": [[-369, 379, -365, 380, 381, -371, 382]],\n          \"id\": \"400\"\n        },\n        {\n          \"type\": \"MultiPolygon\",\n          \"arcs\": [[[383]], [[384]], [[385]]],\n          \"id\": \"392\"\n        },\n        {\n          \"type\": \"Polygon\",\n          \"arcs\": [[386, 387, 388, 389, -181, 390]],\n          \"id\": \"398\"\n        },\n        {\n          \"type\": \"Polygon\",\n          \"arcs\": [[391, 392, 393, 394, -267, 395]],\n          \"id\": \"404\"\n        },\n        { \"type\": \"Polygon\", \"arcs\": [[-391, -180, 396, 397]], \"id\": \"417\" },\n        { \"type\": \"Polygon\", \"arcs\": [[398, 399, 400, 401]], \"id\": \"116\" },\n        { \"type\": \"Polygon\", \"arcs\": [[402, 403]], \"id\": \"410\" },\n        { \"type\": \"Polygon\", \"arcs\": [[-18, 404, 405, 406]], \"id\": \"-99\" },\n        { \"type\": \"Polygon\", \"arcs\": [[407, 408, -363]], \"id\": \"414\" },\n        {\n          \"type\": \"Polygon\",\n          \"arcs\": [[409, 410, -172, 411, -400]],\n          \"id\": \"418\"\n        },\n        { \"type\": \"Polygon\", \"arcs\": [[-373, 412, 413]], \"id\": \"422\" },\n        { \"type\": \"Polygon\", \"arcs\": [[414, 415, -296, -186]], \"id\": \"430\" },\n        {\n          \"type\": \"Polygon\",\n          \"arcs\": [[416, -247, 417, 418, -252, 419, 420]],\n          \"id\": \"434\"\n        },\n        { \"type\": \"Polygon\", \"arcs\": [[421]], \"id\": \"144\" },\n        { \"type\": \"Polygon\", \"arcs\": [[422]], \"id\": \"426\" },\n        { \"type\": \"Polygon\", \"arcs\": [[423, 424, 425, -93, 426]], \"id\": \"440\" },\n        { \"type\": \"Polygon\", \"arcs\": [[-228, -282, -65]], \"id\": \"442\" },\n        {\n          \"type\": \"Polygon\",\n          \"arcs\": [[427, -264, 428, -94, -426]],\n          \"id\": \"428\"\n        },\n        { \"type\": \"Polygon\", \"arcs\": [[-244, 429, 430]], \"id\": \"504\" },\n        { \"type\": \"Polygon\", \"arcs\": [[431, 432]], \"id\": \"498\" },\n        { \"type\": \"Polygon\", \"arcs\": [[433]], \"id\": \"450\" },\n        {\n          \"type\": \"Polygon\",\n          \"arcs\": [[434, -98, -313, 435, 436]],\n          \"id\": \"484\"\n        },\n        {\n          \"type\": \"Polygon\",\n          \"arcs\": [[-407, 437, -85, -309, -14]],\n          \"id\": \"807\"\n        },\n        {\n          \"type\": \"Polygon\",\n          \"arcs\": [[438, -241, 439, -74, -188, -301, 440]],\n          \"id\": \"466\"\n        },\n        {\n          \"type\": \"Polygon\",\n          \"arcs\": [[441, -78, -352, -173, -411, 442]],\n          \"id\": \"104\"\n        },\n        {\n          \"type\": \"Polygon\",\n          \"arcs\": [[443, -325, -91, 444, -405, -17]],\n          \"id\": \"499\"\n        },\n        { \"type\": \"Polygon\", \"arcs\": [[445, -183]], \"id\": \"496\" },\n        {\n          \"type\": \"Polygon\",\n          \"arcs\": [[446, 447, 448, 449, 450, 451, 452, 453]],\n          \"id\": \"508\"\n        },\n        {\n          \"type\": \"Polygon\",\n          \"arcs\": [[454, 455, 456, -242, -439]],\n          \"id\": \"478\"\n        },\n        { \"type\": \"Polygon\", \"arcs\": [[-454, 457, 458]], \"id\": \"454\" },\n        {\n          \"type\": \"MultiPolygon\",\n          \"arcs\": [[[459, 460]], [[-348, 461, -115, 462]]],\n          \"id\": \"458\"\n        },\n        { \"type\": \"Polygon\", \"arcs\": [[463, -8, 464, -119, 465]], \"id\": \"516\" },\n        { \"type\": \"Polygon\", \"arcs\": [[466]], \"id\": \"540\" },\n        {\n          \"type\": \"Polygon\",\n          \"arcs\": [[-75, -440, -240, -417, 467, -194, 468, -71]],\n          \"id\": \"562\"\n        },\n        { \"type\": \"Polygon\", \"arcs\": [[469, -72, -469, -193]], \"id\": \"566\" },\n        { \"type\": \"Polygon\", \"arcs\": [[470, -323, 471, -215]], \"id\": \"558\" },\n        { \"type\": \"Polygon\", \"arcs\": [[-229, -63, 472]], \"id\": \"528\" },\n        {\n          \"type\": \"MultiPolygon\",\n          \"arcs\": [[[473, -274, 474, 475]], [[476]], [[477]], [[478]]],\n          \"id\": \"578\"\n        },\n        { \"type\": \"Polygon\", \"arcs\": [[-351, -176]], \"id\": \"524\" },\n        { \"type\": \"MultiPolygon\", \"arcs\": [[[479]], [[480]]], \"id\": \"554\" },\n        {\n          \"type\": \"MultiPolygon\",\n          \"arcs\": [[[481, 482, -22, 483]], [[-20, 484]]],\n          \"id\": \"512\"\n        },\n        {\n          \"type\": \"Polygon\",\n          \"arcs\": [[-178, -354, 485, -357, -5]],\n          \"id\": \"586\"\n        },\n        { \"type\": \"Polygon\", \"arcs\": [[486, -217, 487, -210]], \"id\": \"591\" },\n        {\n          \"type\": \"Polygon\",\n          \"arcs\": [[-167, 488, -249, -213, -106, -102]],\n          \"id\": \"604\"\n        },\n        {\n          \"type\": \"MultiPolygon\",\n          \"arcs\": [\n            [[489]],\n            [[490]],\n            [[491]],\n            [[492]],\n            [[493]],\n            [[494]],\n            [[495]]\n          ],\n          \"id\": \"608\"\n        },\n        {\n          \"type\": \"MultiPolygon\",\n          \"arcs\": [[[496]], [[497]], [[-344, 498]], [[499]]],\n          \"id\": \"598\"\n        },\n        {\n          \"type\": \"Polygon\",\n          \"arcs\": [[-226, 500, 501, -427, -97, 502, 503, -223]],\n          \"id\": \"616\"\n        },\n        { \"type\": \"Polygon\", \"arcs\": [[504]], \"id\": \"630\" },\n        {\n          \"type\": \"Polygon\",\n          \"arcs\": [[505, 506, -404, 507, -169]],\n          \"id\": \"408\"\n        },\n        { \"type\": \"Polygon\", \"arcs\": [[-261, 508]], \"id\": \"620\" },\n        { \"type\": \"Polygon\", \"arcs\": [[-104, -105, -26]], \"id\": \"600\" },\n        { \"type\": \"Polygon\", \"arcs\": [[-383, -370]], \"id\": \"275\" },\n        { \"type\": \"Polygon\", \"arcs\": [[509, 510]], \"id\": \"634\" },\n        {\n          \"type\": \"Polygon\",\n          \"arcs\": [[511, -433, 512, 513, -81, 514, -332]],\n          \"id\": \"642\"\n        },\n        {\n          \"type\": \"MultiPolygon\",\n          \"arcs\": [\n            [[515]],\n            [[-502, 516, -424]],\n            [[517]],\n            [[518]],\n            [[519]],\n            [[520]],\n            [[521]],\n            [\n              [\n                -506, -184, -446, -182, -390, 522, -59, -292, 523, 524, -95,\n                -429, -263, 525, -271, -474, 526\n              ]\n            ],\n            [[527]],\n            [[528]],\n            [[529]]\n          ],\n          \"id\": \"643\"\n        },\n        { \"type\": \"Polygon\", \"arcs\": [[530, -61, -198, 531]], \"id\": \"646\" },\n        { \"type\": \"Polygon\", \"arcs\": [[-243, -457, 532, -430]], \"id\": \"732\" },\n        {\n          \"type\": \"Polygon\",\n          \"arcs\": [[533, -381, -364, -409, 534, -511, 535, -23, -483, 536]],\n          \"id\": \"682\"\n        },\n        {\n          \"type\": \"Polygon\",\n          \"arcs\": [[537, 538, -123, 539, -420, -251, 540, -256, -270, 541]],\n          \"id\": \"729\"\n        },\n        {\n          \"type\": \"Polygon\",\n          \"arcs\": [[542, -268, -395, 543, -205, -125, 544, -538]],\n          \"id\": \"728\"\n        },\n        {\n          \"type\": \"Polygon\",\n          \"arcs\": [[545, -455, -441, -300, -305, 546, -303]],\n          \"id\": \"686\"\n        },\n        {\n          \"type\": \"MultiPolygon\",\n          \"arcs\": [[[547]], [[548]], [[549]], [[550]], [[551]]],\n          \"id\": \"090\"\n        },\n        { \"type\": \"Polygon\", \"arcs\": [[552, -297, -416]], \"id\": \"694\" },\n        { \"type\": \"Polygon\", \"arcs\": [[553, -316, -321]], \"id\": \"222\" },\n        { \"type\": \"Polygon\", \"arcs\": [[-265, -233, 554, 555]], \"id\": \"-99\" },\n        { \"type\": \"Polygon\", \"arcs\": [[-396, -266, -556, 556]], \"id\": \"706\" },\n        {\n          \"type\": \"Polygon\",\n          \"arcs\": [[-86, -438, -406, -445, -90, -324, -333, -515]],\n          \"id\": \"688\"\n        },\n        {\n          \"type\": \"Polygon\",\n          \"arcs\": [[557, -279, 558, -110, -318]],\n          \"id\": \"740\"\n        },\n        {\n          \"type\": \"Polygon\",\n          \"arcs\": [[-504, 559, -330, -54, -224]],\n          \"id\": \"703\"\n        },\n        {\n          \"type\": \"Polygon\",\n          \"arcs\": [[-49, -334, -327, 560, -377]],\n          \"id\": \"705\"\n        },\n        { \"type\": \"Polygon\", \"arcs\": [[-475, -273, 561]], \"id\": \"752\" },\n        { \"type\": \"Polygon\", \"arcs\": [[562, -450]], \"id\": \"748\" },\n        {\n          \"type\": \"Polygon\",\n          \"arcs\": [[-380, -374, -414, 563, 564, -366]],\n          \"id\": \"760\"\n        },\n        {\n          \"type\": \"Polygon\",\n          \"arcs\": [[-468, -421, -540, -122, -195]],\n          \"id\": \"148\"\n        },\n        { \"type\": \"Polygon\", \"arcs\": [[565, -295, -76, -69]], \"id\": \"768\" },\n        {\n          \"type\": \"Polygon\",\n          \"arcs\": [[566, -461, 567, -443, -410, -399]],\n          \"id\": \"764\"\n        },\n        { \"type\": \"Polygon\", \"arcs\": [[-397, -179, -3, 568]], \"id\": \"762\" },\n        {\n          \"type\": \"Polygon\",\n          \"arcs\": [[-356, 569, -388, 570, -1]],\n          \"id\": \"795\"\n        },\n        { \"type\": \"Polygon\", \"arcs\": [[571, -336]], \"id\": \"626\" },\n        { \"type\": \"Polygon\", \"arcs\": [[572]], \"id\": \"780\" },\n        { \"type\": \"Polygon\", \"arcs\": [[-246, 573, -418]], \"id\": \"788\" },\n        {\n          \"type\": \"MultiPolygon\",\n          \"arcs\": [[[-293, -36, -360, -367, -565, 574]], [[-310, -83, 575]]],\n          \"id\": \"792\"\n        },\n        { \"type\": \"Polygon\", \"arcs\": [[576]], \"id\": \"158\" },\n        {\n          \"type\": \"Polygon\",\n          \"arcs\": [\n            [-393, 577, -447, -459, 578, -201, 579, -199, -62, -531, 580]\n          ],\n          \"id\": \"834\"\n        },\n        {\n          \"type\": \"Polygon\",\n          \"arcs\": [[-532, -197, -544, -394, -581]],\n          \"id\": \"800\"\n        },\n        {\n          \"type\": \"Polygon\",\n          \"arcs\": [[-525, 581, -513, -432, -512, -331, -560, -503, -96]],\n          \"id\": \"804\"\n        },\n        { \"type\": \"Polygon\", \"arcs\": [[-113, 582, -28]], \"id\": \"858\" },\n        {\n          \"type\": \"MultiPolygon\",\n          \"arcs\": [\n            [[583]],\n            [[584]],\n            [[585]],\n            [[586]],\n            [[587]],\n            [[588, -437, 589, -139]],\n            [[590]],\n            [[591]],\n            [[592]],\n            [[-141, 593]]\n          ],\n          \"id\": \"840\"\n        },\n        {\n          \"type\": \"Polygon\",\n          \"arcs\": [[-571, -387, -398, -569, -2]],\n          \"id\": \"860\"\n        },\n        { \"type\": \"Polygon\", \"arcs\": [[594, -319, -108, -212]], \"id\": \"862\" },\n        { \"type\": \"Polygon\", \"arcs\": [[595, -401, -412, -171]], \"id\": \"704\" },\n        { \"type\": \"MultiPolygon\", \"arcs\": [[[596]], [[597]]], \"id\": \"548\" },\n        { \"type\": \"Polygon\", \"arcs\": [[598, -537, -482]], \"id\": \"887\" },\n        {\n          \"type\": \"Polygon\",\n          \"arcs\": [[-466, -118, 599, -451, -563, -449, 600], [-423]],\n          \"id\": \"710\"\n        },\n        {\n          \"type\": \"Polygon\",\n          \"arcs\": [[-458, -453, 601, -120, -465, -7, -202, -579]],\n          \"id\": \"894\"\n        },\n        { \"type\": \"Polygon\", \"arcs\": [[-600, -121, -602, -452]], \"id\": \"716\" }\n      ]\n    },\n    \"land\": {\n      \"type\": \"GeometryCollection\",\n      \"geometries\": [\n        {\n          \"type\": \"MultiPolygon\",\n          \"arcs\": [\n            [\n              [\n                595, 401, 566, 459, 567, 441, 78, 352, 485, 357, 361, 407, 534,\n                509, 535, 18, 484, 20, 483, 598, 533, 381, 249, 540, 256, 231,\n                554, 556, 391, 577, 447, 600, 463, 8, 202, 10, 205, 285, 305,\n                191, 469, 67, 565, 293, 184, 414, 552, 297, 303, 546, 301, 545,\n                455, 532, 430, 244, 573, 418, 252, 371, 412, 563, 574, 290, 523,\n                581, 513, 81, 575, 307, 15, 443, 325, 560, 377, 283, 259, 508,\n                257, 284, 66, 472, 229, 236, 224, 500, 516, 424, 427, 261, 525,\n                271, 561, 475, 526, 506, 402, 507, 169\n              ],\n              [123, 544, 538],\n              [199, 579],\n              [542, 268, 541],\n              [388, 522, 55, 360, 569]\n            ],\n            [[24, 164]],\n            [\n              [\n                582, 28, 165, 488, 247, 208, 486, 213, 470, 319, 553, 311, 435,\n                589, 139, 593, 141, 588, 434, 98, 313, 321, 471, 215, 487, 210,\n                594, 316, 557, 279, 111\n              ],\n              [558, 277]\n            ],\n            [[36]],\n            [[37]],\n            [[38]],\n            [[39]],\n            [[40]],\n            [[41]],\n            [[42]],\n            [[43]],\n            [[44]],\n            [[45]],\n            [[46]],\n            [[86]],\n            [[87]],\n            [[88]],\n            [[461, 113, 462, 348]],\n            [[128]],\n            [[129]],\n            [[130]],\n            [[131]],\n            [[132]],\n            [[133]],\n            [[134]],\n            [[135]],\n            [[136]],\n            [[137]],\n            [[142]],\n            [[143]],\n            [[144]],\n            [[145]],\n            [[146]],\n            [[147]],\n            [[148]],\n            [[149]],\n            [[150]],\n            [[151]],\n            [[152]],\n            [[153]],\n            [[154]],\n            [[155]],\n            [[156]],\n            [[157]],\n            [[158]],\n            [[159]],\n            [[160]],\n            [[167]],\n            [[217]],\n            [[218, 220]],\n            [[235]],\n            [[237, 328]],\n            [[274]],\n            [[275]],\n            [[276]],\n            [[280]],\n            [[288, 354]],\n            [[289]],\n            [[306]],\n            [[310]],\n            [[334]],\n            [[336, 571]],\n            [[337]],\n            [[338]],\n            [[339]],\n            [[340]],\n            [[341]],\n            [[342]],\n            [[344, 498]],\n            [[345]],\n            [[346]],\n            [[349]],\n            [[367]],\n            [[374]],\n            [[375]],\n            [[378]],\n            [[383]],\n            [[384]],\n            [[385]],\n            [[421]],\n            [[433]],\n            [[466]],\n            [[476]],\n            [[477]],\n            [[478]],\n            [[479]],\n            [[480]],\n            [[489]],\n            [[490]],\n            [[491]],\n            [[492]],\n            [[493]],\n            [[494]],\n            [[495]],\n            [[496]],\n            [[497]],\n            [[499]],\n            [[504]],\n            [[515]],\n            [[517]],\n            [[518]],\n            [[519]],\n            [[520]],\n            [[521]],\n            [[527]],\n            [[528]],\n            [[529]],\n            [[547]],\n            [[548]],\n            [[549]],\n            [[550]],\n            [[551]],\n            [[572]],\n            [[576]],\n            [[583]],\n            [[584]],\n            [[585]],\n            [[586]],\n            [[587]],\n            [[590]],\n            [[591]],\n            [[592]],\n            [[596]],\n            [[597]]\n          ]\n        }\n      ]\n    }\n  },\n  \"arcs\": [\n    [\n      [67002, 71642],\n      [284, -224],\n      [209, 79],\n      [58, 268],\n      [219, 89],\n      [157, 180],\n      [55, 472],\n      [234, 114],\n      [44, 211],\n      [131, -158],\n      [84, -19]\n    ],\n    [\n      [68477, 72654],\n      [154, -4],\n      [210, -124]\n    ],\n    [\n      [68841, 72526],\n      [85, -72],\n      [201, 189],\n      [93, -114],\n      [90, 271],\n      [166, -12],\n      [43, 86],\n      [29, 239],\n      [120, 205],\n      [150, -134],\n      [-30, -181],\n      [84, -28],\n      [-26, -496],\n      [110, -194],\n      [97, 125],\n      [123, 58],\n      [173, 265],\n      [192, -44],\n      [286, -1]\n    ],\n    [\n      [70827, 72688],\n      [50, -169]\n    ],\n    [\n      [70877, 72519],\n      [-162, -67],\n      [-141, -109],\n      [-319, -68],\n      [-298, -124],\n      [-163, -258],\n      [66, -250],\n      [32, -294],\n      [-139, -248],\n      [12, -227],\n      [-76, -213],\n      [-265, 18],\n      [110, -390],\n      [-177, -150],\n      [-118, -356],\n      [15, -355],\n      [-108, -166],\n      [-103, 55],\n      [-212, -77],\n      [-31, -166],\n      [-207, 1],\n      [-154, -334],\n      [-10, -503],\n      [-361, -246],\n      [-194, 52],\n      [-56, -129],\n      [-166, 75],\n      [-278, -88],\n      [-465, 301]\n    ],\n    [\n      [66909, 68203],\n      [252, 536],\n      [-23, 380],\n      [-210, 100],\n      [-22, 375],\n      [-91, 472],\n      [119, 323],\n      [-121, 87],\n      [76, 430],\n      [113, 736]\n    ],\n    [\n      [56642, 44124],\n      [29, -184],\n      [-32, -286],\n      [49, -277],\n      [-41, -222],\n      [24, -203],\n      [-579, 7],\n      [-13, -1880],\n      [188, -483],\n      [181, -369]\n    ],\n    [\n      [56448, 40227],\n      [-510, -241],\n      [-673, 83],\n      [-192, 284],\n      [-1126, -26],\n      [-42, -41],\n      [-166, 267],\n      [-180, 17],\n      [-166, -100],\n      [-134, -113]\n    ],\n    [\n      [53259, 40357],\n      [-26, 372],\n      [38, 519],\n      [96, 541],\n      [15, 254],\n      [90, 532],\n      [66, 243],\n      [159, 386],\n      [90, 263],\n      [29, 438],\n      [-15, 335],\n      [-83, 211],\n      [-74, 358],\n      [-68, 355],\n      [15, 122],\n      [85, 235],\n      [-84, 570],\n      [-57, 396],\n      [-139, 374],\n      [26, 115]\n    ],\n    [\n      [53422, 46976],\n      [115, 79],\n      [80, -11],\n      [98, 71],\n      [820, -8],\n      [68, -440],\n      [80, -354],\n      [64, -191],\n      [106, -309],\n      [184, 47],\n      [91, 83],\n      [154, -83],\n      [42, 148],\n      [69, 344],\n      [172, 23],\n      [15, 103],\n      [142, 2],\n      [-24, -213],\n      [337, 5],\n      [5, -372],\n      [56, -228],\n      [-41, -356],\n      [21, -363],\n      [93, -219],\n      [-15, -703],\n      [68, 54],\n      [121, -15],\n      [172, 89],\n      [127, -35]\n    ],\n    [\n      [53383, 47159],\n      [-74, 444]\n    ],\n    [\n      [53309, 47603],\n      [112, 255],\n      [84, 100],\n      [104, -203]\n    ],\n    [\n      [53609, 47755],\n      [-101, -124],\n      [-45, -152],\n      [-9, -258],\n      [-71, -62]\n    ],\n    [\n      [55719, 75309],\n      [-35, -201],\n      [39, -254],\n      [115, -144]\n    ],\n    [\n      [55838, 74710],\n      [-5, -155],\n      [-91, -85],\n      [-16, -192],\n      [-129, -287]\n    ],\n    [\n      [55597, 73991],\n      [-48, 41],\n      [-5, 130],\n      [-154, 199],\n      [-24, 281],\n      [23, 403],\n      [38, 184],\n      [-47, 93]\n    ],\n    [\n      [55380, 75322],\n      [-18, 188],\n      [120, 291],\n      [18, -111],\n      [75, 52]\n    ],\n    [\n      [55575, 75742],\n      [59, -159],\n      [66, -60],\n      [19, -214]\n    ],\n    [\n      [64327, 64904],\n      [49, 29],\n      [11, -162],\n      [217, 93],\n      [230, -15],\n      [168, -18],\n      [190, 400],\n      [207, 379],\n      [176, 364]\n    ],\n    [\n      [65575, 65974],\n      [52, -202]\n    ],\n    [\n      [65627, 65772],\n      [38, -466]\n    ],\n    [\n      [65665, 65306],\n      [-142, -3],\n      [-23, -384],\n      [50, -82],\n      [-126, -117],\n      [-1, -241],\n      [-81, -245],\n      [-7, -238]\n    ],\n    [\n      [65335, 63996],\n      [-56, -125],\n      [-835, 298],\n      [-106, 599],\n      [-11, 136]\n    ],\n    [\n      [31400, 18145],\n      [-168, 16],\n      [-297, 1],\n      [0, 1319]\n    ],\n    [\n      [30935, 19481],\n      [106, -274],\n      [139, -443],\n      [361, -355],\n      [389, -147],\n      [-125, -296],\n      [-264, -29],\n      [-141, 208]\n    ],\n    [\n      [32587, 37434],\n      [511, -964],\n      [227, -89],\n      [339, -437],\n      [286, -231],\n      [40, -261],\n      [-273, -898],\n      [280, -160],\n      [312, -91],\n      [220, 95],\n      [252, 453],\n      [45, 521]\n    ],\n    [\n      [34826, 35372],\n      [138, 114],\n      [139, -341],\n      [-6, -472],\n      [-234, -326],\n      [-186, -241],\n      [-314, -573],\n      [-370, -806]\n    ],\n    [\n      [33993, 32727],\n      [-70, -473],\n      [-74, -607],\n      [3, -588],\n      [-61, -132],\n      [-21, -382]\n    ],\n    [\n      [33770, 30545],\n      [-19, -308],\n      [353, -506],\n      [-38, -408],\n      [173, -257],\n      [-14, -289],\n      [-267, -757],\n      [-412, -317],\n      [-557, -123],\n      [-305, 59],\n      [59, -352],\n      [-57, -442],\n      [51, -298],\n      [-167, -208],\n      [-284, -82],\n      [-267, 216],\n      [-108, -155],\n      [39, -587],\n      [188, -178],\n      [152, 186],\n      [82, -307],\n      [-255, -183],\n      [-223, -367],\n      [-41, -595],\n      [-66, -316],\n      [-262, -2],\n      [-218, -302],\n      [-80, -443],\n      [273, -433],\n      [266, -119],\n      [-96, -531],\n      [-328, -333],\n      [-180, -692],\n      [-254, -234],\n      [-113, -276],\n      [89, -614],\n      [185, -342],\n      [-117, 30]\n    ],\n    [\n      [30952, 19680],\n      [-257, 93],\n      [-672, 79],\n      [-115, 344],\n      [6, 443],\n      [-185, -38],\n      [-98, 214],\n      [-24, 626],\n      [213, 260],\n      [88, 375],\n      [-33, 299],\n      [148, 504],\n      [101, 782],\n      [-30, 347],\n      [122, 112],\n      [-30, 223],\n      [-129, 118],\n      [92, 248],\n      [-126, 224],\n      [-65, 682],\n      [112, 120],\n      [-47, 720],\n      [65, 605],\n      [75, 527],\n      [166, 215],\n      [-84, 576],\n      [-1, 543],\n      [210, 386],\n      [-7, 494],\n      [159, 576],\n      [1, 544],\n      [-72, 108],\n      [-128, 1020],\n      [171, 607],\n      [-27, 572],\n      [100, 537],\n      [182, 555],\n      [196, 367],\n      [-83, 232],\n      [58, 190],\n      [-9, 985],\n      [302, 291],\n      [96, 614],\n      [-34, 148]\n    ],\n    [\n      [31359, 37147],\n      [231, 534],\n      [364, -144],\n      [163, -427],\n      [109, 475],\n      [316, -24],\n      [45, -127]\n    ],\n    [\n      [62106, 74858],\n      [386, 92]\n    ],\n    [\n      [62492, 74950],\n      [57, -155],\n      [106, -103],\n      [-56, -148],\n      [148, -202],\n      [-78, -189],\n      [118, -160],\n      [124, -97],\n      [7, -410]\n    ],\n    [\n      [62918, 73486],\n      [-101, -17]\n    ],\n    [\n      [62817, 73469],\n      [-113, 342],\n      [1, 91],\n      [-123, -2],\n      [-82, 159],\n      [-58, -16]\n    ],\n    [\n      [62442, 74043],\n      [-109, 172],\n      [-207, 147],\n      [27, 288],\n      [-47, 208]\n    ],\n    [\n      [33452, 3290],\n      [-82, -301],\n      [-81, -266],\n      [-582, 81],\n      [-621, -35],\n      [-348, 197],\n      [0, 23],\n      [-152, 174],\n      [625, -23],\n      [599, -58],\n      [207, 243],\n      [147, 208],\n      [288, -243]\n    ],\n    [\n      [5775, 3611],\n      [-533, -81],\n      [-364, 208],\n      [-163, 209],\n      [-11, 35],\n      [-180, 162],\n      [169, 220],\n      [517, -93],\n      [277, -185],\n      [212, -209],\n      [76, -266]\n    ],\n    [\n      [37457, 4468],\n      [342, -255],\n      [120, -359],\n      [33, -254],\n      [11, -301],\n      [-430, -186],\n      [-452, -150],\n      [-522, -139],\n      [-582, -116],\n      [-658, 35],\n      [-365, 197],\n      [49, 243],\n      [593, 162],\n      [239, 197],\n      [174, 254],\n      [126, 220],\n      [168, 209],\n      [180, 243],\n      [141, 0],\n      [414, 127],\n      [419, -127]\n    ],\n    [\n      [16330, 7154],\n      [359, -93],\n      [332, 104],\n      [-158, -208],\n      [-261, -151],\n      [-386, 47],\n      [-278, 208],\n      [60, 197],\n      [332, -104]\n    ],\n    [\n      [15122, 7165],\n      [425, -231],\n      [-164, 23],\n      [-359, 58],\n      [-381, 162],\n      [202, 127],\n      [277, -139]\n    ],\n    [\n      [22505, 8080],\n      [305, -81],\n      [304, 69],\n      [163, -335],\n      [-217, 46],\n      [-337, -23],\n      [-343, 23],\n      [-376, -35],\n      [-283, 116],\n      [-146, 243],\n      [174, 104],\n      [353, -81],\n      [403, -46]\n    ],\n    [\n      [30985, 8657],\n      [33, -266],\n      [-49, -231],\n      [-76, -220],\n      [-326, -81],\n      [-311, -116],\n      [-364, 11],\n      [136, 232],\n      [-327, -81],\n      [-310, -81],\n      [-212, 174],\n      [-16, 243],\n      [305, 231],\n      [190, 70],\n      [321, -23],\n      [82, 301],\n      [16, 219],\n      [-6, 475],\n      [158, 278],\n      [256, 93],\n      [147, -220],\n      [65, -220],\n      [120, -267],\n      [92, -254],\n      [76, -267]\n    ],\n    [\n      [0, 529],\n      [16, -5],\n      [245, 344],\n      [501, -185],\n      [32, 21],\n      [294, 188],\n      [38, -7],\n      [32, -4],\n      [402, -246],\n      [352, 246],\n      [63, 34],\n      [816, 104],\n      [265, -138],\n      [130, -71],\n      [419, -196],\n      [789, -151],\n      [625, -185],\n      [1072, -139],\n      [800, 162],\n      [1181, -116],\n      [669, -185],\n      [734, 174],\n      [773, 162],\n      [60, 278],\n      [-1094, 23],\n      [-898, 139],\n      [-234, 231],\n      [-745, 128],\n      [49, 266],\n      [103, 243],\n      [104, 220],\n      [-55, 243],\n      [-462, 162],\n      [-212, 209],\n      [-430, 185],\n      [675, -35],\n      [642, 93],\n      [402, -197],\n      [495, 173],\n      [457, 220],\n      [223, 197],\n      [-98, 243],\n      [-359, 162],\n      [-408, 174],\n      [-571, 35],\n      [-500, 81],\n      [-539, 58],\n      [-180, 220],\n      [-359, 185],\n      [-217, 208],\n      [-87, 672],\n      [136, -58],\n      [250, -185],\n      [457, 58],\n      [441, 81],\n      [228, -255],\n      [441, 58],\n      [370, 127],\n      [348, 162],\n      [315, 197],\n      [419, 58],\n      [-11, 220],\n      [-97, 220],\n      [81, 208],\n      [359, 104],\n      [163, -196],\n      [425, 115],\n      [321, 151],\n      [397, 12],\n      [375, 57],\n      [376, 139],\n      [299, 128],\n      [337, 127],\n      [218, -35],\n      [190, -46],\n      [414, 81],\n      [370, -104],\n      [381, 11],\n      [364, 81],\n      [375, -57],\n      [414, -58],\n      [386, 23],\n      [403, -12],\n      [413, -11],\n      [381, 23],\n      [283, 174],\n      [337, 92],\n      [349, -127],\n      [331, 104],\n      [300, 208],\n      [179, -185],\n      [98, -208],\n      [180, -197],\n      [288, 174],\n      [332, -220],\n      [375, -70],\n      [321, -162],\n      [392, 35],\n      [354, 104],\n      [418, -23],\n      [376, -81],\n      [381, -104],\n      [147, 254],\n      [-180, 197],\n      [-136, 209],\n      [-359, 46],\n      [-158, 220],\n      [-60, 220],\n      [-98, 440],\n      [213, -81],\n      [364, -35],\n      [359, 35],\n      [327, -93],\n      [283, -174],\n      [119, -208],\n      [376, -35],\n      [359, 81],\n      [381, 116],\n      [342, 70],\n      [283, -139],\n      [370, 46],\n      [239, 451],\n      [224, -266],\n      [321, -104],\n      [348, 58],\n      [228, -232],\n      [365, -23],\n      [337, -69],\n      [332, -128],\n      [218, 220],\n      [108, 209],\n      [278, -232],\n      [381, 58],\n      [283, -127],\n      [190, -197],\n      [370, 58],\n      [288, 127],\n      [283, 151],\n      [337, 81],\n      [392, 69],\n      [354, 81],\n      [272, 127],\n      [163, 186],\n      [65, 254],\n      [-32, 244],\n      [-87, 231],\n      [-98, 232],\n      [-87, 231],\n      [-71, 209],\n      [-16, 231],\n      [27, 232],\n      [130, 220],\n      [109, 243],\n      [44, 231],\n      [-55, 255],\n      [-32, 232],\n      [136, 266],\n      [152, 173],\n      [180, 220],\n      [190, 186],\n      [223, 173],\n      [109, 255],\n      [152, 162],\n      [174, 151],\n      [267, 34],\n      [174, 186],\n      [196, 115],\n      [228, 70],\n      [202, 150],\n      [157, 186],\n      [218, 69],\n      [163, -151],\n      [-103, -196],\n      [-283, -174],\n      [-120, -127],\n      [-206, 92],\n      [-229, -58],\n      [-190, -139],\n      [-202, -150],\n      [-136, -174],\n      [-38, -231],\n      [17, -220],\n      [130, -197],\n      [-190, -139],\n      [-261, -46],\n      [-153, -197],\n      [-163, -185],\n      [-174, -255],\n      [-44, -220],\n      [98, -243],\n      [147, -185],\n      [229, -139],\n      [212, -185],\n      [114, -232],\n      [60, -220],\n      [82, -232],\n      [130, -196],\n      [82, -220],\n      [38, -544],\n      [81, -220],\n      [22, -232],\n      [87, -231],\n      [-38, -313],\n      [-152, -243],\n      [-163, -197],\n      [-370, -81],\n      [-125, -208],\n      [-169, -197],\n      [-419, -220],\n      [-370, -93],\n      [-348, -127],\n      [-376, -128],\n      [-223, -243],\n      [-446, -23],\n      [-489, 23],\n      [-441, -46],\n      [-468, 0],\n      [87, -232],\n      [424, -104],\n      [311, -162],\n      [174, -208],\n      [-310, -185],\n      [-479, 58],\n      [-397, -151],\n      [-17, -243],\n      [-11, -232],\n      [327, -196],\n      [60, -220],\n      [353, -220],\n      [588, -93],\n      [500, -162],\n      [398, -185],\n      [506, -186],\n      [690, -92],\n      [681, -162],\n      [473, -174],\n      [517, -197],\n      [272, -278],\n      [136, -220],\n      [337, 209],\n      [457, 173],\n      [484, 186],\n      [577, 150],\n      [495, 162],\n      [691, 12],\n      [680, -81],\n      [560, -139],\n      [180, 255],\n      [386, 173],\n      [702, 12],\n      [550, 127],\n      [522, 128],\n      [577, 81],\n      [614, 104],\n      [430, 150],\n      [-196, 209],\n      [-119, 208],\n      [0, 220],\n      [-539, -23],\n      [-571, -93],\n      [-544, 0],\n      [-77, 220],\n      [39, 440],\n      [125, 128],\n      [397, 138],\n      [468, 139],\n      [337, 174],\n      [337, 174],\n      [251, 231],\n      [380, 104],\n      [376, 81],\n      [190, 47],\n      [430, 23],\n      [408, 81],\n      [343, 116],\n      [337, 139],\n      [305, 139],\n      [386, 185],\n      [245, 197],\n      [261, 173],\n      [82, 232],\n      [-294, 139],\n      [98, 243],\n      [185, 185],\n      [288, 116],\n      [305, 139],\n      [283, 185],\n      [217, 232],\n      [136, 277],\n      [202, 163],\n      [331, -35],\n      [136, -197],\n      [332, -23],\n      [11, 220],\n      [142, 231],\n      [299, -58],\n      [71, -220],\n      [331, -34],\n      [360, 104],\n      [348, 69],\n      [315, -34],\n      [120, -243],\n      [305, 196],\n      [283, 105],\n      [315, 81],\n      [310, 81],\n      [283, 139],\n      [310, 92],\n      [240, 128],\n      [168, 208],\n      [207, -151],\n      [288, 81],\n      [202, -277],\n      [157, -209],\n      [316, 116],\n      [125, 232],\n      [283, 162],\n      [365, -35],\n      [108, -220],\n      [229, 220],\n      [299, 69],\n      [326, 23],\n      [294, -11],\n      [310, -70],\n      [300, -34],\n      [130, -197],\n      [180, -174],\n      [304, 104],\n      [327, 24],\n      [315, 0],\n      [310, 11],\n      [278, 81],\n      [294, 70],\n      [245, 162],\n      [261, 104],\n      [283, 58],\n      [212, 162],\n      [152, 324],\n      [158, 197],\n      [288, -93],\n      [109, -208],\n      [239, -139],\n      [289, 46],\n      [196, -208],\n      [206, -151],\n      [283, 139],\n      [98, 255],\n      [250, 104],\n      [289, 197],\n      [272, 81],\n      [326, 116],\n      [218, 127],\n      [228, 139],\n      [218, 127],\n      [261, -69],\n      [250, 208],\n      [180, 162],\n      [261, -11],\n      [229, 139],\n      [54, 208],\n      [234, 162],\n      [228, 116],\n      [278, 93],\n      [256, 46],\n      [244, -35],\n      [262, -58],\n      [223, -162],\n      [27, -254],\n      [245, -197],\n      [168, -162],\n      [332, -70],\n      [185, -162],\n      [229, -162],\n      [266, -35],\n      [223, 116],\n      [240, 243],\n      [261, -127],\n      [272, -70],\n      [261, -69],\n      [272, -46],\n      [277, 0],\n      [229, -614],\n      [-11, -150],\n      [-33, -267],\n      [-266, -150],\n      [-218, -220],\n      [38, -232],\n      [310, 12],\n      [-38, -232],\n      [-141, -220],\n      [-131, -243],\n      [212, -185],\n      [321, -58],\n      [321, 104],\n      [153, 232],\n      [92, 220],\n      [153, 185],\n      [174, 174],\n      [70, 208],\n      [147, 289],\n      [174, 58],\n      [316, 24],\n      [277, 69],\n      [283, 93],\n      [136, 231],\n      [82, 220],\n      [190, 220],\n      [272, 151],\n      [234, 115],\n      [153, 197],\n      [157, 104],\n      [202, 93],\n      [277, -58],\n      [250, 58],\n      [272, 69],\n      [305, -34],\n      [201, 162],\n      [142, 393],\n      [103, -162],\n      [131, -278],\n      [234, -115],\n      [266, -47],\n      [267, 70],\n      [283, -46],\n      [261, -12],\n      [174, 58],\n      [234, -35],\n      [212, -127],\n      [250, 81],\n      [300, 0],\n      [255, 81],\n      [289, -81],\n      [185, 197],\n      [141, 196],\n      [191, 163],\n      [348, 439],\n      [179, -81],\n      [212, -162],\n      [185, -208],\n      [354, -359],\n      [272, -12],\n      [256, 0],\n      [299, 70],\n      [299, 81],\n      [229, 162],\n      [190, 174],\n      [310, 23],\n      [207, 127],\n      [218, -116],\n      [141, -185],\n      [196, -185],\n      [305, 23],\n      [190, -150],\n      [332, -151],\n      [348, -58],\n      [288, 47],\n      [218, 185],\n      [185, 185],\n      [250, 46],\n      [251, -81],\n      [288, -58],\n      [261, 93],\n      [250, 0],\n      [245, -58],\n      [256, -58],\n      [250, 104],\n      [299, 93],\n      [283, 23],\n      [316, 0],\n      [255, 58],\n      [251, 46],\n      [76, 290],\n      [11, 243],\n      [174, -162],\n      [49, -266],\n      [92, -244],\n      [115, -196],\n      [234, -105],\n      [315, 35],\n      [365, 12],\n      [250, 35],\n      [364, 0],\n      [262, 11],\n      [364, -23],\n      [310, -46],\n      [196, -186],\n      [-54, -220],\n      [179, -173],\n      [299, -139],\n      [310, -151],\n      [360, -104],\n      [375, -92],\n      [283, -93],\n      [315, -12],\n      [180, 197],\n      [245, -162],\n      [212, -185],\n      [245, -139],\n      [337, -58],\n      [321, -69],\n      [136, -232],\n      [316, -139],\n      [212, -208],\n      [310, -93],\n      [321, 12],\n      [299, -35],\n      [332, 12],\n      [332, -47],\n      [310, -81],\n      [288, -139],\n      [289, -116],\n      [195, -173],\n      [-32, -232],\n      [-147, -208],\n      [-125, -266],\n      [-98, -209],\n      [-131, -243],\n      [-364, -93],\n      [-163, -208],\n      [-360, -127],\n      [-125, -232],\n      [-190, -220],\n      [-201, -185],\n      [-115, -243],\n      [-70, -220],\n      [-28, -266],\n      [6, -220],\n      [158, -232],\n      [60, -220],\n      [130, -208],\n      [517, -81],\n      [109, -255],\n      [-501, -93],\n      [-424, -127],\n      [-528, -23],\n      [-234, -336],\n      [-49, -278],\n      [-119, -220],\n      [-147, -220],\n      [370, -196],\n      [141, -244],\n      [239, -219],\n      [338, -197],\n      [386, -186],\n      [419, -185],\n      [636, -185],\n      [142, -289],\n      [800, -128],\n      [53, -45],\n      [208, -175],\n      [767, 151],\n      [636, -186],\n      [-99520, -142]\n    ],\n    [\n      [69148, 21851],\n      [179, -186],\n      [263, -74],\n      [9, -112],\n      [-77, -269],\n      [-427, -38],\n      [-7, 314],\n      [41, 244],\n      [19, 121]\n    ],\n    [\n      [90387, 26479],\n      [269, -204],\n      [151, 81],\n      [217, 113],\n      [166, -39],\n      [20, -702],\n      [-95, -203],\n      [-29, -476],\n      [-97, 162],\n      [-193, -412],\n      [-57, 32],\n      [-171, 19],\n      [-171, 505],\n      [-38, 390],\n      [-160, 515],\n      [7, 271],\n      [181, -52]\n    ],\n    [\n      [89877, 42448],\n      [100, -464],\n      [179, 223],\n      [92, -250],\n      [133, -231],\n      [-29, -262],\n      [60, -506],\n      [42, -295],\n      [70, -72],\n      [75, -505],\n      [-27, -307],\n      [90, -400],\n      [301, -309],\n      [197, -281],\n      [186, -257],\n      [-37, -143],\n      [159, -371],\n      [108, -639],\n      [111, 130],\n      [113, -256],\n      [68, 91],\n      [48, -626],\n      [197, -363],\n      [129, -226],\n      [217, -478],\n      [78, -475],\n      [7, -337],\n      [-19, -365],\n      [132, -502],\n      [-16, -523],\n      [-48, -274],\n      [-75, -527],\n      [6, -339],\n      [-55, -423],\n      [-123, -538],\n      [-205, -290],\n      [-102, -458],\n      [-93, -292],\n      [-82, -510],\n      [-107, -294],\n      [-70, -442],\n      [-36, -407],\n      [14, -187],\n      [-159, -205],\n      [-311, -22],\n      [-257, -242],\n      [-127, -229],\n      [-168, -254],\n      [-230, 262],\n      [-170, 104],\n      [43, 308],\n      [-152, -112],\n      [-243, -428],\n      [-240, 160],\n      [-158, 94],\n      [-159, 42],\n      [-269, 171],\n      [-179, 364],\n      [-52, 449],\n      [-64, 298],\n      [-137, 240],\n      [-267, 71],\n      [91, 287],\n      [-67, 438],\n      [-136, -408],\n      [-247, -109],\n      [146, 327],\n      [42, 341],\n      [107, 289],\n      [-22, 438],\n      [-226, -504],\n      [-174, -202],\n      [-106, -470],\n      [-217, 243],\n      [9, 313],\n      [-174, 429],\n      [-147, 221],\n      [52, 137],\n      [-356, 358],\n      [-195, 17],\n      [-267, 287],\n      [-498, -56],\n      [-359, -211],\n      [-317, -197],\n      [-265, 39],\n      [-294, -303],\n      [-241, -137],\n      [-53, -309],\n      [-103, -240],\n      [-236, -15],\n      [-174, -52],\n      [-246, 107],\n      [-199, -64],\n      [-191, -27],\n      [-165, -315],\n      [-81, 26],\n      [-140, -167],\n      [-133, -187],\n      [-203, 23],\n      [-186, 0],\n      [-295, 377],\n      [-149, 113],\n      [6, 338],\n      [138, 81],\n      [47, 134],\n      [-10, 212],\n      [34, 411],\n      [-31, 350],\n      [-147, 598],\n      [-45, 337],\n      [12, 336],\n      [-111, 385],\n      [-7, 174],\n      [-123, 235],\n      [-35, 463],\n      [-158, 467],\n      [-39, 252],\n      [122, -255],\n      [-93, 548],\n      [137, -171],\n      [83, -229],\n      [-5, 303],\n      [-138, 465],\n      [-26, 186],\n      [-65, 177],\n      [31, 341],\n      [56, 146],\n      [38, 295],\n      [-29, 346],\n      [114, 425],\n      [21, -450],\n      [118, 406],\n      [225, 198],\n      [136, 252],\n      [212, 217],\n      [126, 46],\n      [77, -73],\n      [219, 220],\n      [168, 66],\n      [42, 129],\n      [74, 54],\n      [153, -14],\n      [292, 173],\n      [151, 262],\n      [71, 316],\n      [163, 300],\n      [13, 236],\n      [7, 321],\n      [194, 502],\n      [117, -510],\n      [119, 118],\n      [-99, 279],\n      [87, 287],\n      [122, -128],\n      [34, 449],\n      [152, 291],\n      [67, 233],\n      [140, 101],\n      [4, 165],\n      [122, -69],\n      [5, 148],\n      [122, 85],\n      [134, 80],\n      [205, -271],\n      [155, -350],\n      [173, -4],\n      [177, -56],\n      [-59, 325],\n      [133, 473],\n      [126, 155],\n      [-44, 147],\n      [121, 338],\n      [168, 208],\n      [142, -70],\n      [234, 111],\n      [-5, 302],\n      [-204, 195],\n      [148, 86],\n      [184, -147],\n      [148, -242],\n      [234, -151],\n      [79, 60],\n      [172, -182],\n      [162, 169],\n      [105, -51],\n      [65, 113],\n      [127, -292],\n      [-74, -316],\n      [-105, -239],\n      [-96, -20],\n      [32, -236],\n      [-81, -295],\n      [-99, -291],\n      [20, -166],\n      [221, -327],\n      [214, -189],\n      [143, -204],\n      [201, -350],\n      [78, 1],\n      [145, -151],\n      [43, -183],\n      [265, -200],\n      [183, 202],\n      [55, 317],\n      [56, 262],\n      [34, 324],\n      [85, 470],\n      [-39, 286],\n      [20, 171],\n      [-32, 339],\n      [37, 445],\n      [53, 120],\n      [-43, 197],\n      [67, 313],\n      [52, 325],\n      [7, 168],\n      [104, 222],\n      [78, -289],\n      [19, -371],\n      [70, -71],\n      [11, -249],\n      [101, -300],\n      [21, -335],\n      [-10, -214]\n    ],\n    [\n      [54716, 79012],\n      [-21, -241],\n      [-156, -2],\n      [53, -128],\n      [-92, -380]\n    ],\n    [\n      [54500, 78261],\n      [-53, -100],\n      [-243, -14],\n      [-140, -134],\n      [-229, 45]\n    ],\n    [\n      [53835, 78058],\n      [-398, 153],\n      [-62, 205],\n      [-274, -102],\n      [-32, -113],\n      [-169, 84]\n    ],\n    [\n      [52900, 78285],\n      [-142, 16],\n      [-125, 108],\n      [42, 145],\n      [-10, 104]\n    ],\n    [\n      [52665, 78658],\n      [83, 33],\n      [141, -164],\n      [39, 156],\n      [245, -25],\n      [199, 106],\n      [133, -18],\n      [87, -121],\n      [26, 100],\n      [-40, 385],\n      [100, 75],\n      [98, 272]\n    ],\n    [\n      [53776, 79457],\n      [206, -190],\n      [157, 242],\n      [98, 44],\n      [215, -180],\n      [131, 30],\n      [128, -111]\n    ],\n    [\n      [54711, 79292],\n      [-23, -75],\n      [28, -205]\n    ],\n    [\n      [62817, 73469],\n      [-190, 78],\n      [-141, 273],\n      [-44, 223]\n    ],\n    [\n      [63495, 75281],\n      [146, -311],\n      [141, -419],\n      [130, -28],\n      [85, -159],\n      [-228, -47],\n      [-49, -459],\n      [-48, -207],\n      [-101, -138],\n      [7, -293]\n    ],\n    [\n      [63578, 73220],\n      [-69, -29],\n      [-173, 309],\n      [95, 292],\n      [-82, 174],\n      [-104, -44],\n      [-327, -436]\n    ],\n    [\n      [62492, 74950],\n      [68, 96],\n      [207, -169],\n      [149, -36],\n      [38, 70],\n      [-136, 319],\n      [72, 82]\n    ],\n    [\n      [62890, 75312],\n      [78, -20],\n      [191, -359],\n      [122, -40],\n      [48, 150],\n      [166, 238]\n    ],\n    [\n      [58149, 47921],\n      [-17, 713],\n      [-70, 268]\n    ],\n    [\n      [58062, 48902],\n      [169, -46],\n      [85, 336],\n      [147, -38]\n    ],\n    [\n      [58463, 49154],\n      [16, -233],\n      [60, -134],\n      [3, -192],\n      [-69, -124],\n      [-108, -308],\n      [-101, -214],\n      [-115, -28]\n    ],\n    [\n      [50920, 80916],\n      [204, -47],\n      [257, 123],\n      [176, -258],\n      [153, -138]\n    ],\n    [\n      [51710, 80596],\n      [-32, -400]\n    ],\n    [\n      [51678, 80196],\n      [-72, -22],\n      [-30, -331]\n    ],\n    [\n      [51576, 79843],\n      [-243, 269],\n      [-143, -46],\n      [-194, 279],\n      [-129, 237],\n      [-129, 10],\n      [-40, 207]\n    ],\n    [\n      [50698, 80799],\n      [222, 117]\n    ],\n    [\n      [50747, 54278],\n      [-229, -69]\n    ],\n    [\n      [50518, 54209],\n      [-69, 407],\n      [13, 1357],\n      [-56, 122],\n      [-11, 290],\n      [-96, 207],\n      [-85, 174],\n      [35, 311]\n    ],\n    [\n      [50249, 57077],\n      [96, 67],\n      [56, 258],\n      [136, 56],\n      [61, 176]\n    ],\n    [\n      [50598, 57634],\n      [93, 173],\n      [100, 2],\n      [212, -340]\n    ],\n    [\n      [51003, 57469],\n      [-11, -197],\n      [62, -350],\n      [-54, -238],\n      [29, -159],\n      [-135, -366],\n      [-86, -181],\n      [-52, -372],\n      [7, -376],\n      [-16, -952]\n    ],\n    [\n      [49214, 56277],\n      [-190, 152],\n      [-130, -22],\n      [-97, -149],\n      [-125, 125],\n      [-49, 195],\n      [-125, 129]\n    ],\n    [\n      [48498, 56707],\n      [-18, 343],\n      [76, 250],\n      [-7, 200],\n      [221, 490],\n      [41, 405],\n      [76, 144],\n      [134, -79],\n      [116, 120],\n      [38, 152],\n      [216, 265],\n      [53, 184],\n      [259, 246],\n      [153, 84],\n      [70, -114],\n      [178, 3]\n    ],\n    [\n      [50104, 59400],\n      [-22, -286],\n      [37, -269],\n      [156, -386],\n      [9, -286],\n      [320, -134],\n      [-6, -405]\n    ],\n    [\n      [50249, 57077],\n      [-243, 13]\n    ],\n    [\n      [50006, 57090],\n      [-128, 47],\n      [-90, -96],\n      [-123, 43],\n      [-482, -27],\n      [-7, -336],\n      [38, -444]\n    ],\n    [\n      [75742, 63602],\n      [-6, -424],\n      [-97, 90],\n      [18, -476]\n    ],\n    [\n      [75657, 62792],\n      [-79, 308],\n      [-16, 301],\n      [-53, 285],\n      [-116, 344],\n      [-256, 23],\n      [25, -243],\n      [-87, -329],\n      [-118, 120],\n      [-41, -108],\n      [-78, 65],\n      [-108, 53]\n    ],\n    [\n      [74730, 63611],\n      [-43, 486],\n      [-96, 444],\n      [47, 356],\n      [-171, 159],\n      [62, 215],\n      [173, 220],\n      [-200, 313],\n      [98, 401],\n      [220, -255],\n      [133, -30],\n      [24, -410],\n      [265, -81],\n      [257, 8],\n      [160, -101],\n      [-128, -500],\n      [-124, -34],\n      [-86, -336],\n      [152, -306],\n      [46, 377],\n      [76, 2],\n      [147, -937]\n    ],\n    [\n      [56293, 76715],\n      [80, -243],\n      [108, 43],\n      [213, -92],\n      [408, -31],\n      [138, 150],\n      [327, 138],\n      [202, -215],\n      [163, -62]\n    ],\n    [\n      [57932, 76403],\n      [-144, -245],\n      [-101, -422],\n      [89, -337]\n    ],\n    [\n      [57776, 75399],\n      [-239, 79],\n      [-283, -186]\n    ],\n    [\n      [57254, 75292],\n      [-3, -294],\n      [-252, -56],\n      [-196, 206],\n      [-222, -162],\n      [-206, 17]\n    ],\n    [\n      [56375, 75003],\n      [-20, 391],\n      [-139, 189]\n    ],\n    [\n      [56216, 75583],\n      [46, 84],\n      [-30, 70],\n      [47, 188],\n      [105, 185],\n      [-135, 255],\n      [-24, 216],\n      [68, 134]\n    ],\n    [\n      [28462, 64617],\n      [-68, -29],\n      [-70, 340],\n      [-104, 171],\n      [60, 375],\n      [84, -23],\n      [97, -491],\n      [1, -343]\n    ],\n    [\n      [28383, 66284],\n      [-303, -95],\n      [-19, 219],\n      [130, 47],\n      [184, -18],\n      [8, -153]\n    ],\n    [\n      [28611, 66290],\n      [-48, -420],\n      [-51, 75],\n      [4, 309],\n      [-124, 234],\n      [-1, 67],\n      [220, -265]\n    ],\n    [\n      [55279, 77084],\n      [100, 2],\n      [-69, -260],\n      [134, -227],\n      [-41, -278],\n      [-65, -27]\n    ],\n    [\n      [55338, 76294],\n      [-52, -53],\n      [-90, -138],\n      [-41, -325]\n    ],\n    [\n      [55155, 75778],\n      [-246, 224],\n      [-105, 247],\n      [-106, 130],\n      [-127, 221],\n      [-61, 183],\n      [-136, 277],\n      [59, 245],\n      [99, -136],\n      [60, 123],\n      [130, 13],\n      [239, -98],\n      [192, 8],\n      [126, -131]\n    ],\n    [\n      [56523, 82432],\n      [268, -4],\n      [302, 223],\n      [64, 333],\n      [228, 190],\n      [-26, 264]\n    ],\n    [\n      [57359, 83438],\n      [169, 100],\n      [298, 228]\n    ],\n    [\n      [57826, 83766],\n      [293, -149],\n      [39, -146],\n      [146, 70],\n      [272, -141],\n      [27, -277],\n      [-60, -159],\n      [174, -387],\n      [113, -108],\n      [-16, -107],\n      [187, -104],\n      [80, -157],\n      [-108, -129],\n      [-224, 20],\n      [-54, -55],\n      [66, -196],\n      [68, -379]\n    ],\n    [\n      [58829, 81362],\n      [-239, -35],\n      [-85, -129],\n      [-18, -298],\n      [-111, 57],\n      [-250, -28],\n      [-73, 138],\n      [-104, -103],\n      [-105, 86],\n      [-218, 12],\n      [-310, 141],\n      [-281, 47],\n      [-215, -14],\n      [-152, -160],\n      [-133, -23]\n    ],\n    [\n      [56535, 81053],\n      [-6, 263],\n      [-85, 274],\n      [166, 121],\n      [2, 235],\n      [-77, 225],\n      [-12, 261]\n    ],\n    [\n      [25238, 61101],\n      [-2, 87],\n      [33, 27],\n      [51, -70],\n      [99, 357],\n      [53, 8]\n    ],\n    [\n      [25472, 61510],\n      [1, -87],\n      [53, -3],\n      [-5, -160],\n      [-45, -256],\n      [24, -91],\n      [-29, -212],\n      [18, -56],\n      [-32, -299],\n      [-55, -156],\n      [-50, -19],\n      [-55, -205]\n    ],\n    [\n      [25297, 59966],\n      [-83, 0],\n      [22, 667],\n      [2, 468]\n    ],\n    [\n      [31359, 37147],\n      [-200, -81],\n      [-109, 814],\n      [-150, 663],\n      [88, 572],\n      [-146, 250],\n      [-37, 426],\n      [-136, 402]\n    ],\n    [\n      [30669, 40193],\n      [175, 638],\n      [-119, 496],\n      [63, 199],\n      [-49, 219],\n      [108, 295],\n      [6, 503],\n      [13, 415],\n      [60, 200],\n      [-240, 951]\n    ],\n    [\n      [30686, 44109],\n      [206, -50],\n      [143, 13],\n      [62, 179],\n      [243, 239],\n      [147, 222],\n      [363, 100],\n      [-29, -443],\n      [34, -227],\n      [-23, -396],\n      [302, -529],\n      [311, -98],\n      [109, -220],\n      [188, -117],\n      [115, -172],\n      [175, 6],\n      [161, -175],\n      [12, -342],\n      [55, -172],\n      [3, -255],\n      [-81, -10],\n      [107, -688],\n      [533, -24],\n      [-41, -342],\n      [30, -233],\n      [151, -166],\n      [66, -367],\n      [-49, -465],\n      [-77, -259],\n      [27, -337],\n      [-87, -122]\n    ],\n    [\n      [33842, 38659],\n      [-4, 182],\n      [-259, 302],\n      [-258, 9],\n      [-484, -172],\n      [-133, -520],\n      [-7, -318],\n      [-110, -708]\n    ],\n    [\n      [34826, 35372],\n      [54, 341],\n      [38, 350],\n      [0, 325],\n      [-100, 107],\n      [-104, -96],\n      [-103, 26],\n      [-33, 228],\n      [-26, 541],\n      [-52, 177],\n      [-187, 160],\n      [-114, -116],\n      [-293, 113],\n      [18, 802],\n      [-82, 329]\n    ],\n    [\n      [30686, 44109],\n      [-157, -102],\n      [-126, 68],\n      [18, 898],\n      [-228, -348],\n      [-245, 15],\n      [-105, 315],\n      [-184, 34],\n      [59, 254],\n      [-155, 359],\n      [-115, 532],\n      [73, 108],\n      [0, 250],\n      [168, 171],\n      [-28, 319],\n      [71, 206],\n      [20, 275],\n      [318, 402],\n      [227, 114],\n      [37, 89],\n      [251, -28]\n    ],\n    [\n      [30585, 48040],\n      [125, 1620],\n      [6, 256],\n      [-43, 339],\n      [-123, 215],\n      [1, 430],\n      [156, 97],\n      [56, -61],\n      [9, 226],\n      [-162, 61],\n      [-4, 370],\n      [541, -13],\n      [92, 203],\n      [77, -187],\n      [55, -349],\n      [52, 73]\n    ],\n    [\n      [31423, 51320],\n      [153, -312],\n      [216, 38],\n      [54, 181],\n      [206, 138],\n      [115, 97],\n      [32, 250],\n      [198, 168],\n      [-15, 124],\n      [-235, 51],\n      [-39, 372],\n      [12, 396],\n      [-125, 153],\n      [52, 55],\n      [206, -76],\n      [221, -148],\n      [80, 140],\n      [200, 92],\n      [310, 221],\n      [102, 225],\n      [-37, 167]\n    ],\n    [\n      [33129, 53652],\n      [145, 26],\n      [64, -136],\n      [-36, -259],\n      [96, -90],\n      [63, -274],\n      [-77, -209],\n      [-44, -502],\n      [71, -299],\n      [20, -274],\n      [171, -277],\n      [137, -29],\n      [30, 116],\n      [88, 25],\n      [126, 104],\n      [90, 157],\n      [154, -50],\n      [67, 21]\n    ],\n    [\n      [34294, 51702],\n      [151, -48],\n      [25, 120],\n      [-46, 118],\n      [28, 171],\n      [112, -53],\n      [131, 61],\n      [159, -125]\n    ],\n    [\n      [34854, 51946],\n      [121, -122],\n      [86, 160],\n      [62, -25],\n      [38, -166],\n      [133, 42],\n      [107, 224],\n      [85, 436],\n      [164, 540]\n    ],\n    [\n      [35650, 53035],\n      [95, 28],\n      [69, -327],\n      [155, -1033],\n      [149, -97],\n      [7, -408],\n      [-208, -487],\n      [86, -178],\n      [491, -92],\n      [10, -593],\n      [211, 388],\n      [349, -212],\n      [462, -361],\n      [135, -346],\n      [-45, -327],\n      [323, 182],\n      [540, -313],\n      [415, 23],\n      [411, -489],\n      [355, -662],\n      [214, -170],\n      [237, -24],\n      [101, -186],\n      [94, -752],\n      [46, -358],\n      [-110, -977],\n      [-142, -385],\n      [-391, -822],\n      [-177, -668],\n      [-206, -513],\n      [-69, -11],\n      [-78, -435],\n      [20, -1107],\n      [-77, -910],\n      [-30, -390],\n      [-88, -233],\n      [-49, -790],\n      [-282, -771],\n      [-47, -610],\n      [-225, -256],\n      [-65, -355],\n      [-302, 2],\n      [-437, -227],\n      [-195, -263],\n      [-311, -173],\n      [-327, -470],\n      [-235, -586],\n      [-41, -441],\n      [46, -326],\n      [-51, -597],\n      [-63, -289],\n      [-195, -325],\n      [-308, -1040],\n      [-244, -468],\n      [-189, -277],\n      [-127, -562],\n      [-183, -337]\n    ],\n    [\n      [35174, 30629],\n      [-77, 334],\n      [122, 280],\n      [-160, 402],\n      [-218, 327],\n      [-286, 379],\n      [-103, -18],\n      [-279, 457],\n      [-180, -63]\n    ],\n    [\n      [81723, 53254],\n      [110, 221],\n      [236, 323]\n    ],\n    [\n      [82069, 53798],\n      [-13, -291],\n      [-16, -377],\n      [-133, 19],\n      [-58, -202],\n      [-126, 307]\n    ],\n    [\n      [75471, 66988],\n      [113, -189],\n      [-20, -363],\n      [-227, -17],\n      [-234, 39],\n      [-175, -92],\n      [-252, 224],\n      [-6, 119]\n    ],\n    [\n      [74670, 66709],\n      [184, 439],\n      [150, 150],\n      [198, -137],\n      [147, -14],\n      [122, -159]\n    ],\n    [\n      [58175, 37528],\n      [-393, -435],\n      [-249, -442],\n      [-93, -393],\n      [-83, -222],\n      [-152, -47],\n      [-48, -283],\n      [-28, -184],\n      [-178, -138],\n      [-226, 29],\n      [-133, 166],\n      [-117, 71],\n      [-135, -137],\n      [-68, -283],\n      [-132, -177],\n      [-139, -264],\n      [-199, -60],\n      [-62, 207],\n      [26, 360],\n      [-165, 562],\n      [-75, 88]\n    ],\n    [\n      [55526, 35946],\n      [0, 1725],\n      [274, 20],\n      [8, 2105],\n      [207, 19],\n      [428, 207],\n      [106, -243],\n      [177, 231],\n      [85, 2],\n      [156, 133]\n    ],\n    [\n      [56967, 40145],\n      [50, -44]\n    ],\n    [\n      [57017, 40101],\n      [107, -473],\n      [56, -105],\n      [87, -342],\n      [315, -649],\n      [119, -64],\n      [0, -208],\n      [82, -375],\n      [215, -90],\n      [177, -267]\n    ],\n    [\n      [54244, 54965],\n      [229, 44],\n      [52, 152],\n      [46, -11],\n      [69, -134],\n      [350, 226],\n      [118, 230],\n      [145, 207],\n      [-28, 208],\n      [78, 54],\n      [269, -36],\n      [261, 273],\n      [201, 645],\n      [141, 239],\n      [176, 101]\n    ],\n    [\n      [56351, 57163],\n      [31, -253],\n      [160, -369],\n      [1, -241],\n      [-45, -246],\n      [18, -184],\n      [96, -170]\n    ],\n    [\n      [56612, 55700],\n      [212, -258]\n    ],\n    [\n      [56824, 55442],\n      [152, -239],\n      [2, -192],\n      [187, -308],\n      [116, -255],\n      [70, -355],\n      [208, -234],\n      [44, -187]\n    ],\n    [\n      [57603, 53672],\n      [-91, -63],\n      [-178, 14],\n      [-209, 62],\n      [-104, -51],\n      [-41, -143],\n      [-90, -18],\n      [-110, 125],\n      [-309, -295],\n      [-127, 60],\n      [-38, -46],\n      [-83, -357],\n      [-207, 115],\n      [-203, 59],\n      [-177, 218],\n      [-229, 200],\n      [-149, -190],\n      [-108, -300],\n      [-25, -412]\n    ],\n    [\n      [55125, 52650],\n      [-178, 33],\n      [-188, 99],\n      [-166, -313],\n      [-146, -550]\n    ],\n    [\n      [54447, 51919],\n      [-29, 172],\n      [-12, 269],\n      [-127, 190],\n      [-103, 305],\n      [-23, 212],\n      [-132, 309],\n      [23, 176],\n      [-28, 249],\n      [21, 458],\n      [67, 107],\n      [140, 599]\n    ],\n    [\n      [32315, 78082],\n      [202, -79],\n      [257, 16],\n      [-137, -242],\n      [-102, -38],\n      [-353, 250],\n      [-69, 198],\n      [105, 183],\n      [97, -288]\n    ],\n    [\n      [32831, 79592],\n      [-135, -11],\n      [-360, 186],\n      [-258, 279],\n      [96, 49],\n      [365, -148],\n      [284, -247],\n      [8, -108]\n    ],\n    [\n      [15692, 79240],\n      [-140, -82],\n      [-456, 269],\n      [-84, 209],\n      [-248, 207],\n      [-50, 168],\n      [-286, 107],\n      [-107, 321],\n      [24, 137],\n      [291, -129],\n      [171, -89],\n      [261, -63],\n      [94, -204],\n      [138, -280],\n      [277, -244],\n      [115, -327]\n    ],\n    [\n      [34407, 80527],\n      [-184, -517],\n      [181, 199],\n      [187, -126],\n      [-98, -206],\n      [247, -162],\n      [128, 144],\n      [277, -182],\n      [-86, -433],\n      [194, 101],\n      [36, -313],\n      [86, -367],\n      [-117, -520],\n      [-125, -22],\n      [-183, 111],\n      [60, 484],\n      [-77, 75],\n      [-322, -513],\n      [-166, 21],\n      [196, 277],\n      [-267, 144],\n      [-298, -35],\n      [-539, 18],\n      [-43, 175],\n      [173, 208],\n      [-121, 160],\n      [234, 356],\n      [287, 941],\n      [172, 336],\n      [241, 204],\n      [129, -26],\n      [-54, -160],\n      [-148, -372]\n    ],\n    [\n      [13005, 82584],\n      [131, -76],\n      [267, 47],\n      [-84, -671],\n      [242, -475],\n      [-111, 1],\n      [-167, 270],\n      [-103, 272],\n      [-140, 184],\n      [-51, 260],\n      [16, 188]\n    ],\n    [\n      [27981, 87304],\n      [-108, -310],\n      [-123, 50],\n      [-73, 176],\n      [13, 41],\n      [107, 177],\n      [114, -13],\n      [70, -121]\n    ],\n    [\n      [27250, 87631],\n      [-325, -326],\n      [-196, 13],\n      [-61, 160],\n      [207, 273],\n      [381, -6],\n      [-6, -114]\n    ],\n    [\n      [26344, 89371],\n      [51, -259],\n      [143, 91],\n      [161, -155],\n      [304, -203],\n      [318, -184],\n      [25, -281],\n      [204, 46],\n      [199, -196],\n      [-247, -186],\n      [-432, 142],\n      [-156, 266],\n      [-275, -314],\n      [-396, -306],\n      [-95, 346],\n      [-377, -57],\n      [242, 292],\n      [35, 465],\n      [95, 542],\n      [201, -49]\n    ],\n    [\n      [28926, 90253],\n      [-312, -30],\n      [-69, 289],\n      [118, 331],\n      [255, 82],\n      [217, -163],\n      [3, -253],\n      [-32, -82],\n      [-180, -174]\n    ],\n    [\n      [23431, 91410],\n      [-173, -207],\n      [-374, 179],\n      [-226, -65],\n      [-380, 266],\n      [245, 183],\n      [194, 256],\n      [295, -168],\n      [166, -106],\n      [84, -112],\n      [169, -226]\n    ],\n    [\n      [31350, 77248],\n      [-181, 334],\n      [0, 805],\n      [-123, 171],\n      [-187, -100],\n      [-92, 155],\n      [-212, -446],\n      [-84, -460],\n      [-99, -269],\n      [-118, -91],\n      [-89, -30],\n      [-28, -146],\n      [-512, 0],\n      [-422, -4],\n      [-125, -109],\n      [-294, -425],\n      [-34, -46],\n      [-89, -231],\n      [-255, 1],\n      [-273, -3],\n      [-125, -93],\n      [44, -116],\n      [25, -181],\n      [-5, -60],\n      [-363, -293],\n      [-286, -93],\n      [-323, -316],\n      [-70, 0],\n      [-94, 93],\n      [-31, 85],\n      [6, 61],\n      [61, 207],\n      [131, 325],\n      [81, 349],\n      [-56, 514],\n      [-59, 536],\n      [-290, 277],\n      [35, 105],\n      [-41, 73],\n      [-76, 0],\n      [-56, 93],\n      [-14, 140],\n      [-54, -61],\n      [-75, 18],\n      [17, 59],\n      [-65, 58],\n      [-27, 155],\n      [-216, 189],\n      [-224, 197],\n      [-272, 229],\n      [-261, 214],\n      [-248, -167],\n      [-91, -6],\n      [-342, 154],\n      [-225, -77],\n      [-269, 183],\n      [-284, 94],\n      [-194, 36],\n      [-86, 100],\n      [-49, 325],\n      [-94, -3],\n      [-1, -227],\n      [-575, 0],\n      [-951, 0],\n      [-944, 0],\n      [-833, 0],\n      [-834, 0],\n      [-819, 0],\n      [-847, 0],\n      [-273, 0],\n      [-825, 0],\n      [-788, 0]\n    ],\n    [\n      [15878, 79530],\n      [-38, 1],\n      [-537, 581],\n      [-199, 255],\n      [-503, 244],\n      [-155, 523],\n      [40, 363],\n      [-356, 252],\n      [-48, 476],\n      [-336, 429],\n      [-6, 304]\n    ],\n    [\n      [13740, 82958],\n      [154, 285],\n      [-7, 373],\n      [-473, 376],\n      [-284, 674],\n      [-173, 424],\n      [-255, 266],\n      [-187, 242],\n      [-147, 306],\n      [-279, -192],\n      [-270, -330],\n      [-247, 388],\n      [-194, 259],\n      [-271, 164],\n      [-273, 17],\n      [1, 3364],\n      [2, 2193]\n    ],\n    [\n      [10837, 91767],\n      [518, -142],\n      [438, -285],\n      [289, -54],\n      [244, 247],\n      [336, 184],\n      [413, -72],\n      [416, 259],\n      [455, 148],\n      [191, -245],\n      [207, 138],\n      [62, 278],\n      [192, -63],\n      [470, -530],\n      [369, 401],\n      [38, -449],\n      [341, 97],\n      [105, 173],\n      [337, -34],\n      [424, -248],\n      [650, -217],\n      [383, -100],\n      [272, 38],\n      [374, -300],\n      [-390, -293],\n      [502, -127],\n      [750, 70],\n      [236, 103],\n      [296, -354],\n      [302, 299],\n      [-283, 251],\n      [179, 202],\n      [338, 27],\n      [223, 59],\n      [224, -141],\n      [279, -321],\n      [310, 47],\n      [491, -266],\n      [431, 94],\n      [405, -14],\n      [-32, 367],\n      [247, 103],\n      [431, -200],\n      [-2, -559],\n      [177, 471],\n      [223, -16],\n      [126, 594],\n      [-298, 364],\n      [-324, 239],\n      [22, 653],\n      [329, 429],\n      [366, -95],\n      [281, -261],\n      [378, -666],\n      [-247, -290],\n      [517, -120],\n      [-1, -604],\n      [371, 463],\n      [332, -380],\n      [-83, -438],\n      [269, -399],\n      [290, 427],\n      [202, 510],\n      [16, 649],\n      [394, -46],\n      [411, -87],\n      [373, -293],\n      [17, -293],\n      [-207, -315],\n      [196, -316],\n      [-36, -288],\n      [-544, -413],\n      [-386, -91],\n      [-287, 178],\n      [-83, -297],\n      [-268, -498],\n      [-81, -259],\n      [-322, -399],\n      [-397, -39],\n      [-220, -250],\n      [-18, -384],\n      [-323, -74],\n      [-340, -479],\n      [-301, -665],\n      [-108, -466],\n      [-16, -686],\n      [409, -99],\n      [125, -553],\n      [130, -448],\n      [388, 117],\n      [517, -256],\n      [277, -225],\n      [199, -279],\n      [348, -163],\n      [294, -248],\n      [459, -34],\n      [302, -58],\n      [-45, -511],\n      [86, -594],\n      [201, -661],\n      [414, -561],\n      [214, 192],\n      [150, 607],\n      [-145, 934],\n      [-196, 311],\n      [445, 276],\n      [314, 415],\n      [154, 411],\n      [-23, 395],\n      [-188, 502],\n      [-338, 445],\n      [328, 619],\n      [-121, 535],\n      [-93, 922],\n      [194, 137],\n      [476, -161],\n      [286, -57],\n      [230, 155],\n      [258, -200],\n      [342, -343],\n      [85, -229],\n      [495, -45],\n      [-8, -496],\n      [92, -747],\n      [254, -92],\n      [201, -348],\n      [402, 328],\n      [266, 652],\n      [184, 274],\n      [216, -527],\n      [362, -754],\n      [307, -709],\n      [-112, -371],\n      [370, -333],\n      [250, -338],\n      [442, -152],\n      [179, -189],\n      [110, -500],\n      [216, -78],\n      [112, -223],\n      [20, -664],\n      [-202, -222],\n      [-199, -207],\n      [-458, -210],\n      [-349, -486],\n      [-470, -96],\n      [-594, 125],\n      [-417, 4],\n      [-287, -41],\n      [-233, -424],\n      [-354, -262],\n      [-401, -782],\n      [-320, -545],\n      [236, 97],\n      [446, 776],\n      [583, 493],\n      [415, 58],\n      [246, -289],\n      [-262, -397],\n      [88, -637],\n      [91, -446],\n      [361, -295],\n      [459, 86],\n      [278, 664],\n      [19, -429],\n      [180, -214],\n      [-344, -387],\n      [-615, -351],\n      [-276, -239],\n      [-310, -426],\n      [-211, 44],\n      [-11, 500],\n      [483, 488],\n      [-445, -19],\n      [-309, -72]\n    ],\n    [\n      [18287, 93781],\n      [-139, -277],\n      [618, 179],\n      [386, -298],\n      [314, 302],\n      [254, -194],\n      [227, -580],\n      [140, 244],\n      [-197, 606],\n      [244, 86],\n      [276, -94],\n      [311, -239],\n      [175, -575],\n      [86, -417],\n      [466, -293],\n      [502, -279],\n      [-31, -260],\n      [-456, -48],\n      [178, -227],\n      [-94, -217],\n      [-503, 93],\n      [-478, 160],\n      [-322, -36],\n      [-522, -201],\n      [-704, -88],\n      [-494, -56],\n      [-151, 279],\n      [-379, 161],\n      [-246, -66],\n      [-343, 468],\n      [185, 62],\n      [429, 101],\n      [392, -26],\n      [362, 103],\n      [-537, 138],\n      [-594, -47],\n      [-394, 12],\n      [-146, 217],\n      [644, 237],\n      [-428, -9],\n      [-485, 156],\n      [233, 443],\n      [193, 235],\n      [744, 359],\n      [284, -114]\n    ],\n    [\n      [20972, 93958],\n      [-244, -390],\n      [-434, 413],\n      [95, 83],\n      [372, 24],\n      [211, -130]\n    ],\n    [\n      [28794, 93770],\n      [25, -163],\n      [-296, 17],\n      [-299, 13],\n      [-304, -80],\n      [-80, 36],\n      [-306, 313],\n      [12, 213],\n      [133, 39],\n      [636, -63],\n      [479, -325]\n    ],\n    [\n      [25955, 93803],\n      [219, -369],\n      [256, 477],\n      [704, 242],\n      [477, -611],\n      [-42, -387],\n      [550, 172],\n      [263, 235],\n      [616, -299],\n      [383, -282],\n      [36, -258],\n      [515, 134],\n      [290, -376],\n      [670, -234],\n      [242, -238],\n      [263, -553],\n      [-510, -275],\n      [654, -386],\n      [441, -130],\n      [400, -543],\n      [437, -39],\n      [-87, -414],\n      [-487, -687],\n      [-342, 253],\n      [-437, 568],\n      [-359, -74],\n      [-35, -338],\n      [292, -344],\n      [377, -272],\n      [114, -157],\n      [181, -584],\n      [-96, -425],\n      [-350, 160],\n      [-697, 473],\n      [393, -509],\n      [289, -357],\n      [45, -206],\n      [-753, 236],\n      [-596, 343],\n      [-337, 287],\n      [97, 167],\n      [-414, 304],\n      [-405, 286],\n      [5, -171],\n      [-803, -94],\n      [-235, 203],\n      [183, 435],\n      [522, 10],\n      [571, 76],\n      [-92, 211],\n      [96, 294],\n      [360, 576],\n      [-77, 261],\n      [-107, 203],\n      [-425, 286],\n      [-563, 201],\n      [178, 150],\n      [-294, 367],\n      [-245, 34],\n      [-219, 201],\n      [-149, -175],\n      [-503, -76],\n      [-1011, 132],\n      [-588, 174],\n      [-450, 89],\n      [-231, 207],\n      [290, 270],\n      [-394, 2],\n      [-88, 599],\n      [213, 528],\n      [286, 241],\n      [717, 158],\n      [-204, -382]\n    ],\n    [\n      [22123, 94208],\n      [331, -124],\n      [496, 75],\n      [72, -172],\n      [-259, -283],\n      [420, -254],\n      [-50, -532],\n      [-455, -229],\n      [-268, 50],\n      [-192, 225],\n      [-690, 456],\n      [5, 189],\n      [567, -73],\n      [-306, 386],\n      [329, 286]\n    ],\n    [\n      [24112, 93575],\n      [-298, -442],\n      [-317, 22],\n      [-173, 519],\n      [4, 294],\n      [145, 251],\n      [276, 161],\n      [579, -20],\n      [530, -144],\n      [-415, -526],\n      [-331, -115]\n    ],\n    [\n      [16539, 92755],\n      [-731, -285],\n      [-147, 259],\n      [-641, 312],\n      [119, 250],\n      [192, 432],\n      [241, 388],\n      [-272, 362],\n      [939, 93],\n      [397, -123],\n      [709, -33],\n      [270, -171],\n      [298, -249],\n      [-349, -149],\n      [-681, -415],\n      [-344, -414],\n      [0, -257]\n    ],\n    [\n      [23996, 94879],\n      [-151, -229],\n      [-403, 44],\n      [-337, 155],\n      [148, 266],\n      [399, 159],\n      [243, -208],\n      [101, -187]\n    ],\n    [\n      [22639, 95907],\n      [212, -273],\n      [9, -303],\n      [-127, -440],\n      [-458, -60],\n      [-298, 94],\n      [5, 345],\n      [-455, -46],\n      [-18, 457],\n      [299, -18],\n      [419, 201],\n      [390, -34],\n      [22, 77]\n    ],\n    [\n      [19941, 95601],\n      [109, -210],\n      [247, 99],\n      [291, -26],\n      [49, -289],\n      [-169, -281],\n      [-940, -91],\n      [-701, -256],\n      [-423, -14],\n      [-35, 193],\n      [577, 261],\n      [-1255, -70],\n      [-389, 106],\n      [379, 577],\n      [262, 165],\n      [782, -199],\n      [493, -350],\n      [485, -45],\n      [-397, 565],\n      [255, 215],\n      [286, -68],\n      [94, -282]\n    ],\n    [\n      [23699, 96131],\n      [308, -190],\n      [547, 1],\n      [240, -194],\n      [-64, -222],\n      [319, -134],\n      [177, -140],\n      [374, -26],\n      [406, -50],\n      [441, 128],\n      [566, 51],\n      [451, -42],\n      [298, -223],\n      [62, -244],\n      [-174, -157],\n      [-414, -127],\n      [-355, 72],\n      [-797, -91],\n      [-570, -11],\n      [-449, 73],\n      [-738, 190],\n      [-96, 325],\n      [-34, 293],\n      [-279, 258],\n      [-574, 72],\n      [-322, 183],\n      [104, 242],\n      [573, -37]\n    ],\n    [\n      [17722, 96454],\n      [-38, -454],\n      [-214, -205],\n      [-259, -29],\n      [-517, -252],\n      [-444, -91],\n      [-377, 128],\n      [472, 442],\n      [570, 383],\n      [426, -9],\n      [381, 87]\n    ],\n    [\n      [23933, 96380],\n      [-126, -17],\n      [-521, 38],\n      [-74, 165],\n      [559, -9],\n      [195, -109],\n      [-33, -68]\n    ],\n    [\n      [19392, 96485],\n      [-518, -170],\n      [-411, 191],\n      [224, 188],\n      [406, 60],\n      [392, -92],\n      [-93, -177]\n    ],\n    [\n      [19538, 97019],\n      [-339, -115],\n      [-461, 1],\n      [5, 84],\n      [285, 177],\n      [149, -27],\n      [361, -120]\n    ],\n    [\n      [23380, 96697],\n      [-411, -122],\n      [-226, 138],\n      [-119, 221],\n      [-22, 245],\n      [360, -24],\n      [162, -39],\n      [332, -205],\n      [-76, -214]\n    ],\n    [\n      [22205, 96856],\n      [108, -247],\n      [-453, 66],\n      [-457, 192],\n      [-619, 21],\n      [268, 176],\n      [-335, 142],\n      [-21, 227],\n      [546, -81],\n      [751, -215],\n      [212, -281]\n    ],\n    [\n      [25828, 97644],\n      [334, -190],\n      [-381, -176],\n      [-513, -445],\n      [-492, -42],\n      [-575, 76],\n      [-299, 240],\n      [4, 215],\n      [220, 157],\n      [-508, -4],\n      [-306, 196],\n      [-176, 268],\n      [193, 262],\n      [192, 180],\n      [285, 42],\n      [-122, 135],\n      [646, 30],\n      [355, -315],\n      [468, -127],\n      [455, -112],\n      [220, -390]\n    ],\n    [\n      [30972, 99681],\n      [742, -47],\n      [597, -75],\n      [508, -161],\n      [-12, -157],\n      [-678, -257],\n      [-672, -119],\n      [-251, -133],\n      [605, 3],\n      [-656, -358],\n      [-452, -167],\n      [-476, -483],\n      [-573, -98],\n      [-177, -120],\n      [-841, -64],\n      [383, -74],\n      [-192, -105],\n      [230, -292],\n      [-264, -202],\n      [-429, -167],\n      [-132, -232],\n      [-388, -176],\n      [39, -134],\n      [475, 23],\n      [6, -144],\n      [-742, -355],\n      [-726, 163],\n      [-816, -91],\n      [-414, 71],\n      [-525, 31],\n      [-35, 284],\n      [514, 133],\n      [-137, 427],\n      [170, 41],\n      [742, -255],\n      [-379, 379],\n      [-450, 113],\n      [225, 229],\n      [492, 141],\n      [79, 206],\n      [-392, 231],\n      [-118, 304],\n      [759, -26],\n      [220, -64],\n      [433, 216],\n      [-625, 68],\n      [-972, -38],\n      [-491, 201],\n      [-232, 239],\n      [-324, 173],\n      [-61, 202],\n      [413, 112],\n      [324, 19],\n      [545, 96],\n      [409, 220],\n      [344, -30],\n      [300, -166],\n      [211, 319],\n      [367, 95],\n      [498, 65],\n      [849, 24],\n      [148, -63],\n      [802, 100],\n      [601, -38],\n      [602, -37]\n    ],\n    [\n      [52900, 78285],\n      [-22, -242],\n      [-122, -100],\n      [-206, 75],\n      [-60, -239],\n      [-132, -19],\n      [-48, 94],\n      [-156, -200],\n      [-134, -28],\n      [-120, 126]\n    ],\n    [\n      [51900, 77752],\n      [-95, 259],\n      [-133, -92],\n      [5, 267],\n      [203, 332],\n      [-9, 150],\n      [126, -54],\n      [77, 101]\n    ],\n    [\n      [52074, 78715],\n      [236, -4],\n      [57, 128],\n      [298, -181]\n    ],\n    [\n      [31400, 18145],\n      [-92, -239],\n      [-238, -183],\n      [-137, 19],\n      [-164, 48],\n      [-202, 177],\n      [-291, 86],\n      [-350, 330],\n      [-283, 317],\n      [-383, 662],\n      [229, -124],\n      [390, -395],\n      [369, -212],\n      [143, 271],\n      [90, 405],\n      [256, 244],\n      [198, -70]\n    ],\n    [\n      [30952, 19680],\n      [-247, 4],\n      [-134, -145],\n      [-250, -213],\n      [-45, -552],\n      [-118, -14],\n      [-313, 192],\n      [-318, 412],\n      [-346, 338],\n      [-87, 374],\n      [79, 346],\n      [-140, 393],\n      [-36, 1007],\n      [119, 568],\n      [293, 457],\n      [-422, 172],\n      [265, 522],\n      [94, 982],\n      [309, -208],\n      [145, 1224],\n      [-186, 157],\n      [-87, -738],\n      [-175, 83],\n      [87, 845],\n      [95, 1095],\n      [127, 404],\n      [-80, 576],\n      [-22, 666],\n      [117, 19],\n      [170, 954],\n      [192, 945],\n      [118, 881],\n      [-64, 885],\n      [83, 487],\n      [-34, 730],\n      [163, 721],\n      [50, 1143],\n      [89, 1227],\n      [87, 1321],\n      [-20, 967],\n      [-58, 832]\n    ],\n    [\n      [30452, 39739],\n      [143, 151],\n      [74, 303]\n    ],\n    [\n      [80649, 61615],\n      [-240, -284],\n      [-228, 183],\n      [-8, 509],\n      [137, 267],\n      [304, 166],\n      [159, -14],\n      [62, -226],\n      [-122, -260],\n      [-64, -341]\n    ],\n    [\n      [86288, 75628],\n      [-179, 348],\n      [-111, -331],\n      [-429, -254],\n      [44, -312],\n      [-241, 22],\n      [-131, 185],\n      [-191, -419],\n      [-306, -318],\n      [-227, -379]\n    ],\n    [\n      [84517, 74170],\n      [-388, -171],\n      [-204, -277],\n      [-300, -161],\n      [148, 274],\n      [-58, 230],\n      [220, 397],\n      [-147, 310],\n      [-242, -209],\n      [-314, -411],\n      [-171, -381],\n      [-272, -29],\n      [-142, -275],\n      [147, -400],\n      [227, -97],\n      [9, -265],\n      [220, -173],\n      [311, 422],\n      [247, -230],\n      [179, -15],\n      [45, -310],\n      [-393, -165],\n      [-130, -319],\n      [-270, -296],\n      [-142, -414],\n      [299, -325],\n      [109, -581],\n      [169, -541],\n      [189, -454],\n      [-5, -439],\n      [-174, -161],\n      [66, -315],\n      [164, -184],\n      [-43, -481],\n      [-71, -468],\n      [-155, -53],\n      [-203, -640],\n      [-225, -775],\n      [-258, -705],\n      [-382, -545],\n      [-386, -498],\n      [-313, -68],\n      [-170, -262],\n      [-96, 192],\n      [-157, -294],\n      [-388, -296],\n      [-294, -90],\n      [-95, -624],\n      [-154, -35],\n      [-73, 429],\n      [66, 228],\n      [-373, 189],\n      [-131, -96]\n    ],\n    [\n      [80013, 63313],\n      [-280, 154],\n      [-132, 240],\n      [44, 340],\n      [-254, 108],\n      [-134, 222],\n      [-236, -315],\n      [-271, -68],\n      [-221, 3],\n      [-149, -145]\n    ],\n    [\n      [78380, 63852],\n      [-144, -86],\n      [42, -676],\n      [-148, 16],\n      [-25, 139]\n    ],\n    [\n      [78105, 63245],\n      [-9, 244],\n      [-203, -172],\n      [-121, 109],\n      [-206, 222],\n      [81, 490],\n      [-176, 115],\n      [-66, 544],\n      [-293, -98],\n      [33, 701],\n      [263, 493],\n      [11, 487],\n      [-8, 452],\n      [-121, 141],\n      [-93, 348],\n      [-162, -44]\n    ],\n    [\n      [77035, 67277],\n      [-300, 89],\n      [94, 248],\n      [-130, 367],\n      [-198, -249],\n      [-233, 145],\n      [-321, -376],\n      [-252, -439],\n      [-224, -74]\n    ],\n    [\n      [74670, 66709],\n      [-23, 465],\n      [-170, -124]\n    ],\n    [\n      [74477, 67050],\n      [-324, 57],\n      [-314, 136],\n      [-225, 259],\n      [-216, 117],\n      [-93, 284],\n      [-157, 84],\n      [-280, 385],\n      [-223, 182],\n      [-115, -141]\n    ],\n    [\n      [72530, 68413],\n      [-386, 413],\n      [-273, 374],\n      [-78, 651],\n      [200, -79],\n      [9, 301],\n      [-111, 303],\n      [28, 482],\n      [-298, 692]\n    ],\n    [\n      [71621, 71550],\n      [-457, 239],\n      [-82, 454],\n      [-205, 276]\n    ],\n    [\n      [70827, 72688],\n      [-42, 337],\n      [10, 230],\n      [-169, 134],\n      [-91, -59],\n      [-70, 546]\n    ],\n    [\n      [70465, 73876],\n      [79, 136],\n      [-39, 138],\n      [266, 279],\n      [192, 116],\n      [294, -80],\n      [105, 378],\n      [356, 70],\n      [99, 234],\n      [438, 320],\n      [39, 134]\n    ],\n    [\n      [72294, 75601],\n      [-22, 337],\n      [190, 154],\n      [-250, 1026],\n      [550, 236],\n      [143, 131],\n      [200, 1058],\n      [551, -194],\n      [155, 267],\n      [13, 592],\n      [230, 56],\n      [212, 393]\n    ],\n    [\n      [74266, 79657],\n      [109, 49]\n    ],\n    [\n      [74375, 79706],\n      [73, -413],\n      [233, -313],\n      [396, -222],\n      [192, -476],\n      [-107, -690],\n      [100, -256],\n      [330, -101],\n      [374, -83],\n      [336, -368],\n      [171, -66],\n      [127, -544],\n      [163, -351],\n      [306, 14],\n      [574, -133],\n      [369, 82],\n      [274, -88],\n      [411, -359],\n      [336, 1],\n      [123, -184],\n      [324, 318],\n      [448, 205],\n      [417, 22],\n      [324, 208],\n      [200, 316],\n      [194, 199],\n      [-45, 195],\n      [-89, 227],\n      [146, 381],\n      [156, -53],\n      [286, -120],\n      [277, 313],\n      [423, 229],\n      [204, 391],\n      [195, 168],\n      [404, 78],\n      [219, -66],\n      [30, 210],\n      [-251, 413],\n      [-223, 189],\n      [-214, -219],\n      [-274, 92],\n      [-157, -74],\n      [-72, 241],\n      [197, 590],\n      [135, 446]\n    ],\n    [\n      [82410, 80055],\n      [333, -223],\n      [392, 373],\n      [-3, 260],\n      [251, 627],\n      [155, 189],\n      [-4, 326],\n      [-152, 141],\n      [229, 294],\n      [345, 106],\n      [369, 16],\n      [415, -176],\n      [244, -217],\n      [172, -596],\n      [104, -254],\n      [97, -363],\n      [103, -579],\n      [483, -189],\n      [329, -420],\n      [112, -555],\n      [423, -1],\n      [240, 233],\n      [459, 175],\n      [-146, -532],\n      [-107, -216],\n      [-96, -647],\n      [-186, -575],\n      [-338, 104],\n      [-238, -208],\n      [73, -506],\n      [-40, -698],\n      [-142, -16],\n      [2, -300]\n    ],\n    [\n      [49206, 53531],\n      [-126, -7],\n      [-194, 116],\n      [-178, -7],\n      [-329, -103],\n      [-193, -170],\n      [-275, -217],\n      [-54, 15]\n    ],\n    [\n      [47857, 53158],\n      [22, 487],\n      [26, 74],\n      [-8, 233],\n      [-118, 247],\n      [-88, 40],\n      [-81, 162],\n      [60, 262],\n      [-28, 286],\n      [13, 172]\n    ],\n    [\n      [47655, 55121],\n      [44, 0],\n      [17, 258],\n      [-22, 114],\n      [27, 82],\n      [103, 71],\n      [-69, 473],\n      [-64, 245],\n      [23, 200],\n      [55, 46]\n    ],\n    [\n      [47769, 56610],\n      [36, 54],\n      [77, -89],\n      [215, -5],\n      [51, 172],\n      [48, -11],\n      [80, 67],\n      [43, -253],\n      [65, 74],\n      [114, 88]\n    ],\n    [\n      [49214, 56277],\n      [74, -841],\n      [-117, -496],\n      [-73, -667],\n      [121, -509],\n      [-13, -233]\n    ],\n    [\n      [53632, 51919],\n      [-35, 32],\n      [-164, -76],\n      [-169, 79],\n      [-132, -38]\n    ],\n    [\n      [53132, 51916],\n      [-452, 13]\n    ],\n    [\n      [52680, 51929],\n      [40, 466],\n      [-108, 391],\n      [-127, 100],\n      [-56, 265],\n      [-72, 85],\n      [4, 163]\n    ],\n    [\n      [52361, 53399],\n      [71, 418],\n      [132, 570],\n      [81, 6],\n      [165, 345],\n      [105, 10],\n      [156, -243],\n      [191, 199],\n      [26, 246],\n      [63, 238],\n      [43, 299],\n      [148, 243],\n      [56, 414],\n      [59, 132],\n      [39, 307],\n      [74, 377],\n      [234, 457],\n      [14, 196],\n      [31, 107],\n      [-110, 235]\n    ],\n    [\n      [53939, 57955],\n      [9, 188],\n      [78, 34]\n    ],\n    [\n      [54026, 58177],\n      [111, -378],\n      [18, -392],\n      [-10, -393],\n      [151, -537],\n      [-155, 6],\n      [-78, -42],\n      [-127, 60],\n      [-60, -279],\n      [164, -345],\n      [121, -100],\n      [39, -245],\n      [87, -407],\n      [-43, -160]\n    ],\n    [\n      [54447, 51919],\n      [-20, -319],\n      [-220, 140],\n      [-225, 156],\n      [-350, 23]\n    ],\n    [\n      [58564, 52653],\n      [-16, -691],\n      [111, -80],\n      [-89, -210],\n      [-107, -157],\n      [-106, -308],\n      [-59, -274],\n      [-15, -475],\n      [-65, -225],\n      [-2, -446]\n    ],\n    [\n      [58216, 49787],\n      [-80, -165],\n      [-10, -351],\n      [-38, -46],\n      [-26, -323]\n    ],\n    [\n      [58149, 47921],\n      [50, -544],\n      [-27, -307]\n    ],\n    [\n      [58172, 47070],\n      [55, -343],\n      [161, -330]\n    ],\n    [\n      [58388, 46397],\n      [150, -745]\n    ],\n    [\n      [58538, 45652],\n      [-109, 60],\n      [-373, -99],\n      [-75, -71],\n      [-79, -377],\n      [62, -261],\n      [-49, -699],\n      [-34, -593],\n      [75, -105],\n      [194, -230],\n      [76, 107],\n      [23, -637],\n      [-212, 5],\n      [-114, 325],\n      [-103, 252],\n      [-213, 82],\n      [-62, 310],\n      [-170, -187],\n      [-222, 83],\n      [-93, 268],\n      [-176, 55],\n      [-131, -15],\n      [-15, 184],\n      [-96, 15]\n    ],\n    [\n      [53422, 46976],\n      [-39, 183]\n    ],\n    [\n      [53609, 47755],\n      [73, -60],\n      [95, 226],\n      [152, -6],\n      [17, -167],\n      [104, -105],\n      [164, 370],\n      [161, 289],\n      [71, 189],\n      [-10, 486],\n      [121, 574],\n      [127, 304],\n      [183, 285],\n      [32, 189],\n      [7, 216],\n      [45, 205],\n      [-14, 335],\n      [34, 524],\n      [55, 368],\n      [83, 316],\n      [16, 357]\n    ],\n    [\n      [57603, 53672],\n      [169, -488],\n      [124, -71],\n      [75, 99],\n      [128, -39],\n      [155, 125],\n      [66, -252],\n      [244, -393]\n    ],\n    [\n      [53309, 47603],\n      [-228, 626]\n    ],\n    [\n      [53081, 48229],\n      [212, 326],\n      [-105, 391],\n      [95, 148],\n      [187, 73],\n      [23, 261],\n      [148, -283],\n      [245, -25],\n      [85, 279],\n      [36, 393],\n      [-31, 461],\n      [-131, 350],\n      [120, 684],\n      [-69, 117],\n      [-207, -48],\n      [-78, 305],\n      [21, 258]\n    ],\n    [\n      [29063, 50490],\n      [-119, 140],\n      [-137, 195],\n      [-79, -94],\n      [-235, 82],\n      [-68, 255],\n      [-52, -10],\n      [-278, 338]\n    ],\n    [\n      [28095, 51396],\n      [-37, 183],\n      [103, 44],\n      [-12, 296],\n      [65, 214],\n      [138, 40],\n      [117, 371],\n      [106, 310],\n      [-102, 141],\n      [52, 343],\n      [-62, 540],\n      [59, 155],\n      [-44, 500],\n      [-112, 315]\n    ],\n    [\n      [28366, 54848],\n      [36, 287],\n      [89, -43],\n      [52, 176],\n      [-64, 348],\n      [34, 86]\n    ],\n    [\n      [28513, 55702],\n      [143, -18],\n      [209, 412],\n      [114, 63],\n      [3, 195],\n      [51, 500],\n      [159, 274],\n      [175, 11],\n      [22, 123],\n      [218, -49],\n      [218, 298],\n      [109, 132],\n      [134, 285],\n      [98, -36],\n      [73, -156],\n      [-54, -199]\n    ],\n    [\n      [30185, 57537],\n      [-178, -99],\n      [-71, -295],\n      [-107, -169],\n      [-81, -220],\n      [-34, -422],\n      [-77, -345],\n      [144, -40],\n      [35, -271],\n      [62, -130],\n      [21, -238],\n      [-33, -219],\n      [10, -123],\n      [69, -49],\n      [66, -207],\n      [357, 57],\n      [161, -75],\n      [196, -508],\n      [112, 63],\n      [200, -32],\n      [158, 68],\n      [99, -102],\n      [-50, -318],\n      [-62, -199],\n      [-22, -423],\n      [56, -393],\n      [79, -175],\n      [9, -133],\n      [-140, -294],\n      [100, -130],\n      [74, -207],\n      [85, -589]\n    ],\n    [\n      [30585, 48040],\n      [-139, 314],\n      [-83, 14],\n      [179, 602],\n      [-213, 276],\n      [-166, -51],\n      [-101, 103],\n      [-153, -157],\n      [-207, 74],\n      [-163, 620],\n      [-129, 152],\n      [-89, 279],\n      [-184, 280],\n      [-74, -56]\n    ],\n    [\n      [26954, 55439],\n      [-151, 131],\n      [-56, 124],\n      [32, 103],\n      [-11, 130],\n      [-77, 142],\n      [-109, 116],\n      [-95, 76],\n      [-19, 173],\n      [-73, 105],\n      [18, -172],\n      [-55, -141],\n      [-64, 164],\n      [-89, 58],\n      [-38, 120],\n      [2, 179],\n      [36, 187],\n      [-78, 83],\n      [64, 114]\n    ],\n    [\n      [26191, 57131],\n      [42, 76],\n      [183, -156],\n      [63, 77],\n      [89, -50],\n      [46, -121],\n      [82, -40],\n      [66, 126]\n    ],\n    [\n      [26762, 57043],\n      [70, -321],\n      [108, -238],\n      [130, -252]\n    ],\n    [\n      [27070, 56232],\n      [-107, -53],\n      [1, -238],\n      [58, -88],\n      [-41, -70],\n      [10, -107],\n      [-23, -120],\n      [-14, -117]\n    ],\n    [\n      [27147, 64280],\n      [240, -42],\n      [219, -7],\n      [261, -201],\n      [110, -216],\n      [260, 66],\n      [98, -138],\n      [235, -366],\n      [173, -267],\n      [92, 8],\n      [165, -120],\n      [-20, -167],\n      [205, -24],\n      [210, -242],\n      [-33, -138],\n      [-185, -75],\n      [-187, -29],\n      [-191, 46],\n      [-398, -57],\n      [186, 329],\n      [-113, 154],\n      [-179, 39],\n      [-96, 171],\n      [-66, 336],\n      [-157, -23],\n      [-259, 159],\n      [-83, 124],\n      [-362, 91],\n      [-97, 115],\n      [104, 148],\n      [-273, 30],\n      [-199, -307],\n      [-115, -8],\n      [-40, -144],\n      [-138, -65],\n      [-118, 56],\n      [146, 183],\n      [60, 213],\n      [126, 131],\n      [142, 116],\n      [210, 56],\n      [67, 65]\n    ],\n    [\n      [59092, 71341],\n      [19, 3],\n      [40, 143],\n      [200, -8],\n      [253, 176],\n      [-188, -251],\n      [21, -111]\n    ],\n    [\n      [59437, 71293],\n      [-30, 21],\n      [-53, -45],\n      [-42, 12],\n      [-14, -22],\n      [-5, 59],\n      [-20, 37],\n      [-54, 6],\n      [-75, -51],\n      [-52, 31]\n    ],\n    [\n      [59437, 71293],\n      [8, -48],\n      [-285, -240],\n      [-136, 77],\n      [-64, 237],\n      [132, 22]\n    ],\n    [\n      [53776, 79457],\n      [-157, 254],\n      [-141, 142],\n      [-30, 249],\n      [-49, 176],\n      [202, 129],\n      [103, 147],\n      [200, 114],\n      [70, 113],\n      [73, -68],\n      [124, 62]\n    ],\n    [\n      [54171, 80775],\n      [132, -191],\n      [207, -51],\n      [-17, -163],\n      [151, -122],\n      [41, 153],\n      [191, -66],\n      [26, -185],\n      [207, -36],\n      [127, -291]\n    ],\n    [\n      [55236, 79823],\n      [-82, -1],\n      [-43, -106],\n      [-64, -26],\n      [-18, -134],\n      [-54, -28],\n      [-7, -55],\n      [-95, -61],\n      [-123, 10],\n      [-39, -130]\n    ],\n    [\n      [52756, 83065],\n      [4, -228],\n      [281, -138],\n      [-3, -210],\n      [283, 111],\n      [156, 162],\n      [313, -233],\n      [132, -189]\n    ],\n    [\n      [53922, 82340],\n      [64, -300],\n      [-77, -158],\n      [101, -210],\n      [69, -316],\n      [-22, -204],\n      [114, -377]\n    ],\n    [\n      [52074, 78715],\n      [35, 421],\n      [140, 404],\n      [-400, 109],\n      [-131, 155]\n    ],\n    [\n      [51718, 79804],\n      [16, 259],\n      [-56, 133]\n    ],\n    [\n      [51710, 80596],\n      [-47, 619],\n      [167, 0],\n      [70, 222],\n      [69, 541],\n      [-51, 200]\n    ],\n    [\n      [51918, 82178],\n      [54, 125],\n      [232, 32],\n      [52, -130],\n      [188, 291],\n      [-63, 222],\n      [-13, 335]\n    ],\n    [\n      [52368, 83053],\n      [210, -78],\n      [178, 90]\n    ],\n    [\n      [61966, 58083],\n      [66, -183],\n      [-9, -245],\n      [-158, -142],\n      [119, -161]\n    ],\n    [\n      [61984, 57352],\n      [-102, -317]\n    ],\n    [\n      [61882, 57035],\n      [-62, 106],\n      [-67, -42],\n      [-155, 10],\n      [-4, 180],\n      [-22, 163],\n      [94, 277],\n      [98, 261]\n    ],\n    [\n      [61764, 57990],\n      [119, -51],\n      [83, 144]\n    ],\n    [\n      [53524, 83435],\n      [-166, -478],\n      [-291, 333],\n      [-39, 246],\n      [408, 195],\n      [88, -296]\n    ],\n    [\n      [52368, 83053],\n      [-113, 328],\n      [-8, 604],\n      [46, 159],\n      [80, 177],\n      [244, 37],\n      [98, 163],\n      [223, 167],\n      [-9, -304],\n      [-82, -192],\n      [33, -166],\n      [151, -89],\n      [-68, -223],\n      [-83, 64],\n      [-200, -425],\n      [76, -288]\n    ],\n    [\n      [30080, 62227],\n      [34, 101],\n      [217, -3],\n      [165, -152],\n      [73, 15],\n      [50, -209],\n      [152, 11],\n      [-9, -176],\n      [124, -21],\n      [136, -217],\n      [-103, -240],\n      [-132, 128],\n      [-127, -25],\n      [-92, 28],\n      [-50, -107],\n      [-106, -37],\n      [-43, 144],\n      [-92, -85],\n      [-111, -405],\n      [-71, 94],\n      [-14, 170]\n    ],\n    [\n      [30081, 61241],\n      [5, 161],\n      [-71, 177],\n      [68, 99],\n      [21, 228],\n      [-24, 321]\n    ],\n    [\n      [53333, 64447],\n      [-952, -1126],\n      [-804, -1161],\n      [-392, -263]\n    ],\n    [\n      [51185, 61897],\n      [-308, -58],\n      [-3, 376],\n      [-129, 96],\n      [-173, 169],\n      [-66, 277],\n      [-937, 1289],\n      [-937, 1289]\n    ],\n    [\n      [48632, 65335],\n      [-1045, 1431]\n    ],\n    [\n      [47587, 66766],\n      [6, 114],\n      [-1, 40]\n    ],\n    [\n      [47592, 66920],\n      [-2, 700],\n      [449, 436],\n      [277, 90],\n      [227, 159],\n      [107, 295],\n      [324, 234],\n      [12, 438],\n      [161, 51],\n      [126, 219],\n      [363, 99],\n      [51, 230],\n      [-73, 125],\n      [-96, 624],\n      [-17, 359],\n      [-104, 379]\n    ],\n    [\n      [49397, 71358],\n      [267, 323],\n      [300, 102],\n      [175, 244],\n      [268, 180],\n      [471, 105],\n      [459, 48],\n      [140, -87],\n      [262, 232],\n      [297, 5],\n      [113, -137],\n      [190, 35]\n    ],\n    [\n      [52339, 72408],\n      [-57, -303],\n      [44, -563],\n      [-65, -487],\n      [-171, -330],\n      [24, -445],\n      [227, -352],\n      [3, -143],\n      [171, -238],\n      [118, -1061]\n    ],\n    [\n      [52633, 68486],\n      [90, -522],\n      [15, -274],\n      [-49, -482],\n      [21, -270],\n      [-36, -323],\n      [24, -371],\n      [-110, -247],\n      [164, -431],\n      [11, -253],\n      [99, -330],\n      [130, 109],\n      [219, -275],\n      [122, -370]\n    ],\n    [\n      [27693, 48568],\n      [148, 442],\n      [-60, 258],\n      [-106, -275],\n      [-166, 259],\n      [56, 167],\n      [-47, 536],\n      [97, 89],\n      [52, 368],\n      [105, 381],\n      [-20, 241],\n      [153, 126],\n      [190, 236]\n    ],\n    [\n      [29063, 50490],\n      [38, -449],\n      [-86, -384],\n      [-303, -619],\n      [-334, -233],\n      [-170, -514],\n      [-53, -398],\n      [-157, -243],\n      [-116, 298],\n      [-113, 64],\n      [-114, -47],\n      [-8, 216],\n      [79, 141],\n      [-33, 246]\n    ],\n    [\n      [59700, 68010],\n      [-78, -238],\n      [-60, -446],\n      [-75, -308],\n      [-65, -103],\n      [-93, 191],\n      [-125, 263],\n      [-198, 847],\n      [-29, -53],\n      [115, -624],\n      [171, -594],\n      [210, -920],\n      [102, -321],\n      [90, -334],\n      [249, -654],\n      [-55, -103],\n      [9, -384],\n      [323, -530],\n      [49, -121]\n    ],\n    [\n      [60240, 63578],\n      [-1102, 0],\n      [-1077, 0],\n      [-1117, 0]\n    ],\n    [\n      [56944, 63578],\n      [0, 2175],\n      [0, 2101],\n      [-83, 476],\n      [71, 365],\n      [-43, 253],\n      [101, 283]\n    ],\n    [\n      [56990, 69231],\n      [369, 10],\n      [268, -156],\n      [275, -175],\n      [129, -92],\n      [214, 188],\n      [114, 169],\n      [245, 49],\n      [198, -75],\n      [75, -293],\n      [65, 193],\n      [222, -140],\n      [217, -33],\n      [137, 149]\n    ],\n    [\n      [59518, 69025],\n      [182, -1015]\n    ],\n    [\n      [61764, 57990],\n      [-95, 191],\n      [-114, 346],\n      [-124, 190],\n      [-71, 204],\n      [-242, 237],\n      [-191, 7],\n      [-67, 124],\n      [-163, -139],\n      [-168, 268],\n      [-87, -441],\n      [-323, 124]\n    ],\n    [\n      [60119, 59101],\n      [-30, 236],\n      [120, 868],\n      [27, 393],\n      [88, 181],\n      [204, 97],\n      [141, 337]\n    ],\n    [\n      [60669, 61213],\n      [161, -684],\n      [77, -542],\n      [152, -288],\n      [379, -558],\n      [154, -336],\n      [151, -341],\n      [87, -203],\n      [136, -178]\n    ],\n    [\n      [47490, 75324],\n      [14, 420],\n      [-114, 257],\n      [393, 426],\n      [340, -106],\n      [373, 3],\n      [296, -101],\n      [230, 31],\n      [449, -19]\n    ],\n    [\n      [49471, 76235],\n      [111, -230],\n      [511, -268],\n      [101, 127],\n      [313, -267],\n      [322, 77]\n    ],\n    [\n      [50829, 75674],\n      [15, -344],\n      [-263, -393],\n      [-356, -125],\n      [-25, -199],\n      [-171, -327],\n      [-107, -481],\n      [108, -338],\n      [-160, -263],\n      [-60, -384],\n      [-210, -118],\n      [-197, -454],\n      [-352, -9],\n      [-265, 11],\n      [-174, -209],\n      [-106, -223],\n      [-136, 49],\n      [-103, 199],\n      [-79, 340],\n      [-259, 92]\n    ],\n    [\n      [47929, 72498],\n      [-23, 195],\n      [103, 222],\n      [38, 161],\n      [-96, 175],\n      [77, 388],\n      [-111, 355],\n      [120, 48],\n      [11, 280],\n      [45, 86],\n      [3, 461],\n      [129, 160],\n      [-78, 296],\n      [-162, 21],\n      [-47, -75],\n      [-164, 0],\n      [-70, 289],\n      [-113, -86],\n      [-101, -150]\n    ],\n    [\n      [56753, 84725],\n      [32, 349],\n      [-102, -75],\n      [-176, 210],\n      [-24, 340],\n      [351, 164],\n      [350, 86],\n      [301, -97],\n      [287, 17]\n    ],\n    [\n      [57772, 85719],\n      [42, -103],\n      [-198, -341],\n      [83, -551],\n      [-120, -187]\n    ],\n    [\n      [57579, 84537],\n      [-229, 1],\n      [-239, 219],\n      [-121, 73],\n      [-237, -105]\n    ],\n    [\n      [61882, 57035],\n      [-61, -209],\n      [103, -325],\n      [102, -285],\n      [106, -210],\n      [909, -702],\n      [233, 4]\n    ],\n    [\n      [63274, 55308],\n      [-785, -1773],\n      [-362, -26],\n      [-247, -417],\n      [-178, -11],\n      [-76, -186]\n    ],\n    [\n      [61626, 52895],\n      [-190, 0],\n      [-112, 200],\n      [-254, -247],\n      [-82, -247],\n      [-185, 47],\n      [-62, 68],\n      [-65, -16],\n      [-87, 6],\n      [-352, 502],\n      [-193, 0],\n      [-95, 194],\n      [0, 332],\n      [-145, 99]\n    ],\n    [\n      [59804, 53833],\n      [-164, 643],\n      [-127, 137],\n      [-48, 236],\n      [-141, 288],\n      [-171, 42],\n      [95, 337],\n      [147, 14],\n      [42, 181]\n    ],\n    [\n      [59437, 55711],\n      [-4, 531]\n    ],\n    [\n      [59433, 56242],\n      [82, 618],\n      [132, 166],\n      [28, 241],\n      [119, 451],\n      [168, 293],\n      [112, 582],\n      [45, 508]\n    ],\n    [\n      [57942, 91385],\n      [-41, -414],\n      [425, -394],\n      [-256, -445],\n      [323, -673],\n      [-187, -506],\n      [250, -440],\n      [-113, -385],\n      [411, -405],\n      [-105, -301],\n      [-258, -341],\n      [-594, -755]\n    ],\n    [\n      [57797, 86326],\n      [-504, -47],\n      [-489, -216],\n      [-452, -125],\n      [-161, 323],\n      [-269, 193],\n      [62, 582],\n      [-135, 533],\n      [133, 345],\n      [252, 371],\n      [635, 640],\n      [185, 124],\n      [-28, 250],\n      [-387, 279]\n    ],\n    [\n      [56639, 89578],\n      [-93, 230],\n      [-8, 910],\n      [-433, 402],\n      [-371, 289]\n    ],\n    [\n      [55734, 91409],\n      [167, 156],\n      [309, -312],\n      [362, 29],\n      [298, -143],\n      [265, 262],\n      [137, 433],\n      [431, 200],\n      [356, -235],\n      [-117, -414]\n    ],\n    [\n      [99547, 40335],\n      [96, -171],\n      [-46, -308],\n      [-172, -81],\n      [-153, 73],\n      [-27, 260],\n      [107, 203],\n      [126, -74],\n      [69, 98]\n    ],\n    [\n      [0, 41087],\n      [57, 27],\n      [-34, -284],\n      [-23, -32],\n      [99822, -145],\n      [-177, -124],\n      [-36, 220],\n      [139, 121],\n      [88, 33],\n      [-99836, 184]\n    ],\n    [\n      [33000, 19946],\n      [333, 354],\n      [236, -148],\n      [167, 237],\n      [222, -266],\n      [-83, -207],\n      [-375, -177],\n      [-125, 207],\n      [-236, -266],\n      [-139, 266]\n    ],\n    [\n      [34854, 51946],\n      [70, 252],\n      [24, 269],\n      [48, 253],\n      [-107, 349]\n    ],\n    [\n      [34889, 53069],\n      [-22, 404],\n      [144, 508]\n    ],\n    [\n      [35011, 53981],\n      [95, -65],\n      [204, -140],\n      [294, -499],\n      [46, -242]\n    ],\n    [\n      [52655, 75484],\n      [-92, -456],\n      [-126, 120],\n      [-64, 398],\n      [56, 219],\n      [179, 226],\n      [47, -507]\n    ],\n    [\n      [51576, 79843],\n      [62, -52],\n      [80, 13]\n    ],\n    [\n      [51900, 77752],\n      [-11, -167],\n      [82, -222],\n      [-97, -180],\n      [72, -457],\n      [151, -75],\n      [-32, -256]\n    ],\n    [\n      [52065, 76395],\n      [-252, -334],\n      [-548, 160],\n      [-404, -192],\n      [-32, -355]\n    ],\n    [\n      [49471, 76235],\n      [144, 354],\n      [53, 1177],\n      [-287, 620],\n      [-205, 299],\n      [-424, 227],\n      [-28, 431],\n      [360, 129],\n      [466, -152],\n      [-88, 669],\n      [263, -254],\n      [646, 461],\n      [84, 484],\n      [243, 119]\n    ],\n    [\n      [53081, 48229],\n      [-285, 596],\n      [-184, 488],\n      [-169, 610],\n      [9, 196],\n      [61, 189],\n      [67, 430],\n      [56, 438]\n    ],\n    [\n      [52636, 51176],\n      [94, 35],\n      [404, -6],\n      [-2, 711]\n    ],\n    [\n      [48278, 82406],\n      [-210, 122],\n      [-172, -9],\n      [57, 317],\n      [-57, 317]\n    ],\n    [\n      [47896, 83153],\n      [233, 24],\n      [298, -365],\n      [-149, -406]\n    ],\n    [\n      [49165, 85222],\n      [-297, -639],\n      [283, 81],\n      [304, -3],\n      [-72, -481],\n      [-250, -530],\n      [287, -38],\n      [22, -62],\n      [248, -697],\n      [190, -95],\n      [171, -673],\n      [79, -233],\n      [337, -113],\n      [-34, -378],\n      [-142, -173],\n      [111, -305],\n      [-250, -310],\n      [-371, 6],\n      [-473, -163],\n      [-130, 116],\n      [-183, -276],\n      [-257, 67],\n      [-195, -226],\n      [-148, 118],\n      [407, 621],\n      [249, 127],\n      [-2, 1],\n      [-434, 98],\n      [-79, 235],\n      [291, 183],\n      [-152, 319],\n      [52, 387],\n      [413, -54],\n      [1, 0],\n      [40, 343],\n      [-186, 364],\n      [-4, 8],\n      [-337, 104],\n      [-66, 160],\n      [101, 264],\n      [-92, 163],\n      [-149, -279],\n      [-17, 569],\n      [-140, 301],\n      [101, 611],\n      [216, 480],\n      [222, -47],\n      [335, 49]\n    ],\n    [\n      [61542, 75120],\n      [42, 252],\n      [-70, 403],\n      [-160, 218],\n      [-154, 68],\n      [-102, 181]\n    ],\n    [\n      [61098, 76242],\n      [34, 70],\n      [235, -101],\n      [409, -96],\n      [378, -283],\n      [48, -110],\n      [169, 93],\n      [259, -124],\n      [85, -242],\n      [175, -137]\n    ],\n    [\n      [62106, 74858],\n      [-268, 290],\n      [-296, -28]\n    ],\n    [\n      [50294, 54083],\n      [-436, -346],\n      [-154, -203],\n      [-250, -171],\n      [-248, 168]\n    ],\n    [\n      [50006, 57090],\n      [-20, -184],\n      [116, -305],\n      [-1, -429],\n      [27, -466],\n      [69, -215],\n      [-61, -532],\n      [22, -294],\n      [74, -375],\n      [62, -207]\n    ],\n    [\n      [47655, 55121],\n      [-78, 15],\n      [-57, -238],\n      [-78, 3],\n      [-55, 126],\n      [19, 237],\n      [-116, 362],\n      [-73, -67],\n      [-59, -13]\n    ],\n    [\n      [47158, 55546],\n      [-77, -34],\n      [3, 217],\n      [-44, 155],\n      [9, 171],\n      [-60, 249],\n      [-78, 211],\n      [-222, 1],\n      [-65, -112],\n      [-76, -13],\n      [-48, -128],\n      [-32, -163],\n      [-148, -260]\n    ],\n    [\n      [46320, 55840],\n      [-122, 349],\n      [-108, 232],\n      [-71, 76],\n      [-69, 118],\n      [-32, 261],\n      [-41, 130],\n      [-80, 97]\n    ],\n    [\n      [45797, 57103],\n      [123, 288],\n      [84, -11],\n      [73, 99],\n      [61, 1],\n      [44, 78],\n      [-24, 196],\n      [31, 62],\n      [5, 200]\n    ],\n    [\n      [46194, 58016],\n      [134, -6],\n      [200, -144],\n      [61, 13],\n      [21, 66],\n      [151, -47],\n      [40, 33]\n    ],\n    [\n      [46801, 57931],\n      [16, -216],\n      [44, 1],\n      [73, 78],\n      [46, -19],\n      [77, -150],\n      [119, -48],\n      [76, 128],\n      [90, 79],\n      [67, 83],\n      [55, -15],\n      [62, -130],\n      [33, -163],\n      [114, -248],\n      [-57, -152],\n      [-11, -192],\n      [59, 58],\n      [35, -69],\n      [-15, -176],\n      [85, -170]\n    ],\n    [\n      [45321, 58350],\n      [36, 262]\n    ],\n    [\n      [45357, 58612],\n      [302, 17],\n      [63, 140],\n      [88, 9],\n      [110, -145],\n      [86, -3],\n      [92, 99],\n      [56, -170],\n      [-120, -133],\n      [-121, 11],\n      [-119, 124],\n      [-103, -136],\n      [-50, -5],\n      [-67, -83],\n      [-253, 13]\n    ],\n    [\n      [45797, 57103],\n      [-149, 247],\n      [-117, 39],\n      [-63, 166],\n      [1, 90],\n      [-84, 125],\n      [-18, 127]\n    ],\n    [\n      [45367, 57897],\n      [147, 96],\n      [92, -19],\n      [75, 67],\n      [513, -25]\n    ],\n    [\n      [52636, 51176],\n      [-52, 90],\n      [96, 663]\n    ],\n    [\n      [56583, 71675],\n      [152, -199],\n      [216, 34],\n      [207, -42],\n      [-7, -103],\n      [151, 71],\n      [-35, -175],\n      [-400, -50],\n      [3, 98],\n      [-339, 115],\n      [52, 251]\n    ],\n    [\n      [57237, 74699],\n      [-169, 17],\n      [-145, 56],\n      [-336, -154],\n      [192, -332],\n      [-141, -96],\n      [-154, -1],\n      [-147, 305],\n      [-52, -130],\n      [62, -353],\n      [139, -277],\n      [-105, -129],\n      [155, -273],\n      [137, -171],\n      [4, -334],\n      [-257, 157],\n      [82, -302],\n      [-176, -62],\n      [105, -521],\n      [-184, -8],\n      [-228, 257],\n      [-104, 473],\n      [-49, 393],\n      [-108, 272],\n      [-143, 337],\n      [-18, 168]\n    ],\n    [\n      [55838, 74710],\n      [182, 53],\n      [106, 129],\n      [150, -12],\n      [46, 103],\n      [53, 20]\n    ],\n    [\n      [57254, 75292],\n      [135, -157],\n      [-86, -369],\n      [-66, -67]\n    ],\n    [\n      [37010, 99398],\n      [932, 353],\n      [975, -27],\n      [354, 218],\n      [982, 57],\n      [2219, -74],\n      [1737, -469],\n      [-513, -227],\n      [-1062, -26],\n      [-1496, -58],\n      [140, -105],\n      [984, 65],\n      [836, -204],\n      [540, 181],\n      [231, -212],\n      [-305, -344],\n      [707, 220],\n      [1348, 229],\n      [833, -114],\n      [156, -253],\n      [-1132, -420],\n      [-157, -136],\n      [-888, -102],\n      [643, -28],\n      [-324, -431],\n      [-224, -383],\n      [9, -658],\n      [333, -386],\n      [-434, -24],\n      [-457, -187],\n      [513, -313],\n      [65, -502],\n      [-297, -55],\n      [360, -508],\n      [-617, -42],\n      [322, -241],\n      [-91, -208],\n      [-391, -91],\n      [-388, -2],\n      [348, -400],\n      [4, -263],\n      [-549, 244],\n      [-143, -158],\n      [375, -148],\n      [364, -361],\n      [105, -476],\n      [-495, -114],\n      [-214, 228],\n      [-344, 340],\n      [95, -401],\n      [-322, -311],\n      [732, -25],\n      [383, -32],\n      [-745, -515],\n      [-755, -466],\n      [-813, -204],\n      [-306, -2],\n      [-288, -228],\n      [-386, -624],\n      [-597, -414],\n      [-192, -24],\n      [-370, -145],\n      [-399, -138],\n      [-238, -365],\n      [-4, -415],\n      [-141, -388],\n      [-453, -472],\n      [112, -462],\n      [-125, -488],\n      [-142, -577],\n      [-391, -36],\n      [-410, 482],\n      [-556, 3],\n      [-269, 324],\n      [-186, 577],\n      [-481, 735],\n      [-141, 385],\n      [-38, 530],\n      [-384, 546],\n      [100, 435],\n      [-186, 208],\n      [275, 691],\n      [418, 220],\n      [110, 247],\n      [58, 461],\n      [-318, -209],\n      [-151, -88],\n      [-249, -84],\n      [-341, 193],\n      [-19, 401],\n      [109, 314],\n      [258, 9],\n      [567, -157],\n      [-478, 375],\n      [-249, 202],\n      [-276, -83],\n      [-232, 147],\n      [310, 550],\n      [-169, 220],\n      [-220, 409],\n      [-335, 626],\n      [-353, 230],\n      [3, 247],\n      [-745, 346],\n      [-590, 43],\n      [-743, -24],\n      [-677, -44],\n      [-323, 188],\n      [-482, 372],\n      [729, 186],\n      [559, 31],\n      [-1188, 154],\n      [-627, 241],\n      [39, 229],\n      [1051, 285],\n      [1018, 284],\n      [107, 214],\n      [-750, 213],\n      [243, 235],\n      [961, 413],\n      [404, 63],\n      [-115, 265],\n      [658, 156],\n      [854, 93],\n      [853, 5],\n      [303, -184],\n      [737, 325],\n      [663, -221],\n      [390, -46],\n      [577, -192],\n      [-660, 318],\n      [38, 253]\n    ],\n    [\n      [24973, 58695],\n      [-142, 103],\n      [-174, 11],\n      [-127, 117],\n      [-149, 244]\n    ],\n    [\n      [24381, 59170],\n      [7, 172],\n      [32, 138],\n      [-39, 111],\n      [133, 481],\n      [357, 2],\n      [7, 201],\n      [-45, 36],\n      [-31, 128],\n      [-103, 136],\n      [-103, 198],\n      [125, 1],\n      [1, 333],\n      [259, 1],\n      [257, -7]\n    ],\n    [\n      [25297, 59966],\n      [90, -107],\n      [24, 88],\n      [82, -75]\n    ],\n    [\n      [25493, 59872],\n      [-127, -225],\n      [-131, -166],\n      [-20, -113],\n      [22, -116],\n      [-58, -150]\n    ],\n    [\n      [25179, 59102],\n      [-65, -37],\n      [15, -69],\n      [-52, -66],\n      [-95, -149],\n      [-9, -86]\n    ],\n    [\n      [33400, 55523],\n      [183, -217],\n      [171, -385],\n      [8, -304],\n      [105, -14],\n      [149, -289],\n      [109, -205]\n    ],\n    [\n      [34125, 54109],\n      [-44, -532],\n      [-169, -154],\n      [15, -139],\n      [-51, -305],\n      [123, -429],\n      [89, -1],\n      [37, -333],\n      [169, -514]\n    ],\n    [\n      [33129, 53652],\n      [-188, 448],\n      [75, 163],\n      [-5, 273],\n      [171, 95],\n      [69, 110],\n      [-95, 220],\n      [24, 215],\n      [220, 347]\n    ],\n    [\n      [25745, 58251],\n      [-48, 185],\n      [-84, 51]\n    ],\n    [\n      [25613, 58487],\n      [19, 237],\n      [-38, 64],\n      [-57, 42],\n      [-122, -70],\n      [-10, 79],\n      [-84, 95],\n      [-60, 118],\n      [-82, 50]\n    ],\n    [\n      [25493, 59872],\n      [29, -23],\n      [61, 104],\n      [79, 8],\n      [26, -48],\n      [43, 29],\n      [129, -53],\n      [128, 15],\n      [90, 66],\n      [32, 66],\n      [89, -31],\n      [66, -40],\n      [73, 14],\n      [55, 51],\n      [127, -82],\n      [44, -13],\n      [85, -110],\n      [80, -132],\n      [101, -91],\n      [73, -162]\n    ],\n    [\n      [26903, 59440],\n      [-95, 12],\n      [-38, -81],\n      [-97, -77],\n      [-70, 0],\n      [-61, -76],\n      [-56, 27],\n      [-47, 90],\n      [-29, -17],\n      [-36, -141],\n      [-27, 5],\n      [-4, -121],\n      [-97, -163],\n      [-51, -70],\n      [-29, -74],\n      [-82, 120],\n      [-60, -158],\n      [-58, 4],\n      [-65, -14],\n      [6, -290],\n      [-41, -5],\n      [-35, -135],\n      [-86, -25]\n    ],\n    [\n      [55230, 77704],\n      [67, -229],\n      [89, -169],\n      [-107, -222]\n    ],\n    [\n      [55155, 75778],\n      [-31, -100]\n    ],\n    [\n      [55124, 75678],\n      [-261, 218],\n      [-161, 213],\n      [-254, 176],\n      [-233, 434],\n      [56, 45],\n      [-127, 248],\n      [-5, 200],\n      [-179, 93],\n      [-85, -255],\n      [-82, 198],\n      [6, 205],\n      [10, 9]\n    ],\n    [\n      [53809, 77462],\n      [194, -20],\n      [51, 100],\n      [94, -97],\n      [109, -11],\n      [-1, 165],\n      [97, 60],\n      [27, 239],\n      [221, 157]\n    ],\n    [\n      [54601, 78055],\n      [88, -73],\n      [208, -253],\n      [229, -114],\n      [104, 89]\n    ],\n    [\n      [30081, 61241],\n      [-185, 100],\n      [-131, -41],\n      [-169, 43],\n      [-130, -110],\n      [-149, 184],\n      [24, 190],\n      [256, -82],\n      [210, -47],\n      [100, 131],\n      [-127, 256],\n      [2, 226],\n      [-175, 92],\n      [62, 163],\n      [170, -26],\n      [241, -93]\n    ],\n    [\n      [54716, 79012],\n      [141, -151],\n      [103, -65],\n      [233, 73],\n      [22, 118],\n      [111, 18],\n      [135, 92],\n      [30, -38],\n      [130, 74],\n      [66, 139],\n      [91, 36],\n      [297, -180],\n      [59, 61]\n    ],\n    [\n      [56134, 79189],\n      [155, -161],\n      [19, -159]\n    ],\n    [\n      [56308, 78869],\n      [-170, -123],\n      [-131, -401],\n      [-168, -401],\n      [-223, -111]\n    ],\n    [\n      [55616, 77833],\n      [-173, 26],\n      [-213, -155]\n    ],\n    [\n      [54601, 78055],\n      [-54, 200],\n      [-47, 6]\n    ],\n    [\n      [83531, 44530],\n      [-117, -11],\n      [-368, 414],\n      [259, 116],\n      [146, -180],\n      [97, -180],\n      [-17, -159]\n    ],\n    [\n      [84713, 45326],\n      [28, -117],\n      [5, -179]\n    ],\n    [\n      [84746, 45030],\n      [-181, -441],\n      [-238, -130],\n      [-33, 71],\n      [25, 201],\n      [119, 360],\n      [275, 235]\n    ],\n    [\n      [82749, 45797],\n      [100, -158],\n      [172, 48],\n      [69, -251],\n      [-321, -119],\n      [-193, -79],\n      [-149, 5],\n      [95, 340],\n      [153, 5],\n      [74, 209]\n    ],\n    [\n      [84139, 45797],\n      [-41, -328],\n      [-417, -168],\n      [-370, 73],\n      [0, 216],\n      [220, 123],\n      [174, -177],\n      [185, 45],\n      [249, 216]\n    ],\n    [\n      [80172, 46575],\n      [533, -59],\n      [61, 244],\n      [515, -284],\n      [101, -383],\n      [417, -108],\n      [341, -351],\n      [-317, -225],\n      [-306, 238],\n      [-251, -16],\n      [-288, 44],\n      [-260, 106],\n      [-322, 225],\n      [-204, 59],\n      [-116, -74],\n      [-506, 243],\n      [-48, 254],\n      [-255, 44],\n      [191, 564],\n      [337, -35],\n      [224, -231],\n      [115, -45],\n      [38, -210]\n    ],\n    [\n      [87423, 46908],\n      [-143, -402],\n      [-27, 445],\n      [49, 212],\n      [58, 200],\n      [63, -173],\n      [0, -282]\n    ],\n    [\n      [85346, 48536],\n      [-104, -196],\n      [-192, 108],\n      [-54, 254],\n      [281, 29],\n      [69, -195]\n    ],\n    [\n      [86241, 48752],\n      [101, -452],\n      [-234, 244],\n      [-232, 49],\n      [-157, -39],\n      [-192, 21],\n      [65, 325],\n      [344, 24],\n      [305, -172]\n    ],\n    [\n      [89166, 49043],\n      [5, -1925],\n      [4, -1925]\n    ],\n    [\n      [89175, 45193],\n      [-247, 485],\n      [-282, 118],\n      [-69, -168],\n      [-352, -18],\n      [118, 481],\n      [175, 164],\n      [-72, 642],\n      [-134, 496],\n      [-538, 500],\n      [-229, 50],\n      [-417, 546],\n      [-82, -287],\n      [-107, -52],\n      [-63, 216],\n      [-1, 257],\n      [-212, 290],\n      [299, 213],\n      [198, -11],\n      [-23, 156],\n      [-407, 1],\n      [-110, 352],\n      [-248, 109],\n      [-117, 293],\n      [374, 143],\n      [142, 192],\n      [446, -242],\n      [44, -220],\n      [78, -955],\n      [287, -354],\n      [232, 627],\n      [319, 356],\n      [247, 1],\n      [238, -206],\n      [206, -212],\n      [298, -113]\n    ],\n    [\n      [84788, 51419],\n      [-223, -587],\n      [-209, -113],\n      [-267, 115],\n      [-463, -29],\n      [-243, -85],\n      [-39, -447],\n      [248, -526],\n      [150, 268],\n      [518, 201],\n      [-22, -272],\n      [-121, 86],\n      [-121, -347],\n      [-245, -229],\n      [263, -757],\n      [-50, -203],\n      [249, -682],\n      [-2, -388],\n      [-148, -173],\n      [-109, 207],\n      [134, 484],\n      [-273, -229],\n      [-69, 164],\n      [36, 228],\n      [-200, 346],\n      [21, 576],\n      [-186, -179],\n      [24, -689],\n      [11, -846],\n      [-176, -85],\n      [-119, 173],\n      [79, 544],\n      [-43, 570],\n      [-117, 4],\n      [-86, 405],\n      [115, 387],\n      [40, 469],\n      [139, 891],\n      [58, 243],\n      [237, 439],\n      [217, -174],\n      [350, -82],\n      [319, 25],\n      [275, 429],\n      [48, -132]\n    ],\n    [\n      [85746, 51249],\n      [-15, -517],\n      [-143, 58],\n      [-42, -359],\n      [114, -312],\n      [-78, -71],\n      [-112, 374],\n      [-82, 755],\n      [56, 472],\n      [92, 215],\n      [20, -322],\n      [164, -52],\n      [26, -241]\n    ],\n    [\n      [80461, 51765],\n      [47, -395],\n      [190, -334],\n      [179, 121],\n      [177, -43],\n      [162, 299],\n      [133, 52],\n      [263, -166],\n      [226, 126],\n      [143, 822],\n      [107, 205],\n      [96, 672],\n      [319, 0],\n      [241, -100]\n    ],\n    [\n      [82744, 53024],\n      [-158, -533],\n      [204, -560],\n      [-48, -272],\n      [312, -546],\n      [-329, -70],\n      [-93, -403],\n      [12, -535],\n      [-267, -404],\n      [-7, -589],\n      [-107, -903],\n      [-41, 210],\n      [-316, -266],\n      [-110, 361],\n      [-198, 34],\n      [-139, 189],\n      [-330, -212],\n      [-101, 285],\n      [-182, -32],\n      [-229, 68],\n      [-43, 793],\n      [-138, 164],\n      [-134, 505],\n      [-38, 517],\n      [32, 548],\n      [165, 392]\n    ],\n    [\n      [79393, 47122],\n      [-308, -12],\n      [-234, 494],\n      [-356, 482],\n      [-119, 358],\n      [-210, 481],\n      [-138, 443],\n      [-212, 827],\n      [-244, 493],\n      [-81, 508],\n      [-103, 461],\n      [-250, 372],\n      [-145, 506],\n      [-209, 330],\n      [-290, 652],\n      [-24, 300],\n      [178, -24],\n      [430, -114],\n      [246, -577],\n      [215, -401],\n      [153, -246],\n      [263, -635],\n      [283, -9],\n      [233, -405],\n      [161, -495],\n      [211, -270],\n      [-111, -482],\n      [159, -205],\n      [100, -15],\n      [47, -412],\n      [97, -330],\n      [204, -52],\n      [135, -374],\n      [-70, -735],\n      [-11, -914]\n    ],\n    [\n      [72530, 68413],\n      [-176, -268],\n      [-108, -553],\n      [269, -224],\n      [262, -289],\n      [362, -332],\n      [381, -76],\n      [160, -301],\n      [215, -56],\n      [334, -138],\n      [231, 10],\n      [32, 234],\n      [-36, 375],\n      [21, 255]\n    ],\n    [\n      [77035, 67277],\n      [20, -224],\n      [-97, -108],\n      [23, -364],\n      [-199, 107],\n      [-359, -408],\n      [8, -338],\n      [-153, -496],\n      [-14, -288],\n      [-124, -487],\n      [-217, 135],\n      [-11, -612],\n      [-63, -201],\n      [30, -251],\n      [-137, -140]\n    ],\n    [\n      [74730, 63611],\n      [-39, -216],\n      [-189, 7],\n      [-343, -122],\n      [16, -445],\n      [-148, -349],\n      [-400, -398],\n      [-311, -695],\n      [-209, -373],\n      [-276, -387],\n      [-1, -271],\n      [-138, -146],\n      [-251, -212],\n      [-129, -31],\n      [-84, -450],\n      [58, -769],\n      [15, -490],\n      [-118, -561],\n      [-1, -1004],\n      [-144, -29],\n      [-126, -450],\n      [84, -195],\n      [-253, -168],\n      [-93, -401],\n      [-112, -170],\n      [-263, 552],\n      [-128, 827],\n      [-107, 596],\n      [-97, 279],\n      [-148, 568],\n      [-69, 739],\n      [-48, 369],\n      [-253, 811],\n      [-115, 1145],\n      [-83, 756],\n      [1, 716],\n      [-54, 553],\n      [-404, -353],\n      [-196, 70],\n      [-362, 716],\n      [133, 214],\n      [-82, 232],\n      [-326, 501]\n    ],\n    [\n      [68937, 64577],\n      [185, 395],\n      [612, -2],\n      [-56, 507],\n      [-156, 300],\n      [-31, 455],\n      [-182, 265],\n      [306, 619],\n      [323, -45],\n      [290, 620],\n      [174, 599],\n      [270, 593],\n      [-4, 421],\n      [236, 342],\n      [-224, 292],\n      [-96, 400],\n      [-99, 517],\n      [137, 255],\n      [421, -144],\n      [310, 88],\n      [268, 496]\n    ],\n    [\n      [48278, 82406],\n      [46, -422],\n      [-210, -528],\n      [-493, -349],\n      [-393, 89],\n      [225, 617],\n      [-145, 601],\n      [378, 463],\n      [210, 276]\n    ],\n    [\n      [64978, 72558],\n      [244, 114],\n      [197, 338],\n      [186, -17],\n      [122, 110],\n      [197, -55],\n      [308, -299],\n      [221, -65],\n      [318, -523],\n      [207, -21],\n      [24, -498]\n    ],\n    [\n      [66909, 68203],\n      [137, -310],\n      [112, -357],\n      [266, -260],\n      [7, -520],\n      [133, -96],\n      [23, -272],\n      [-400, -305],\n      [-105, -687]\n    ],\n    [\n      [67082, 65396],\n      [-523, 179],\n      [-303, 136],\n      [-313, 76],\n      [-118, 725],\n      [-133, 105],\n      [-214, -106],\n      [-280, -286],\n      [-339, 196],\n      [-281, 454],\n      [-267, 168],\n      [-186, 561],\n      [-205, 788],\n      [-149, -96],\n      [-177, 196],\n      [-104, -231]\n    ],\n    [\n      [63490, 68261],\n      [-153, 311],\n      [-3, 314],\n      [-89, 0],\n      [46, 428],\n      [-143, 449],\n      [-340, 324],\n      [-193, 562],\n      [65, 461],\n      [139, 204],\n      [-21, 345],\n      [-182, 177],\n      [-180, 705]\n    ],\n    [\n      [62436, 72541],\n      [-152, 473],\n      [55, 183],\n      [-87, 678],\n      [190, 168]\n    ],\n    [\n      [63578, 73220],\n      [88, -436],\n      [263, -123],\n      [193, -296],\n      [395, -102],\n      [434, 156],\n      [27, 139]\n    ],\n    [\n      [63490, 68261],\n      [-164, 29]\n    ],\n    [\n      [63326, 68290],\n      [-187, 49],\n      [-204, -567]\n    ],\n    [\n      [62935, 67772],\n      [-516, 47],\n      [-784, 1188],\n      [-413, 414],\n      [-335, 160]\n    ],\n    [\n      [60887, 69581],\n      [-112, 720]\n    ],\n    [\n      [60775, 70301],\n      [615, 614],\n      [105, 715],\n      [-26, 431],\n      [152, 146],\n      [142, 369]\n    ],\n    [\n      [61763, 72576],\n      [119, 92],\n      [324, -77],\n      [97, -150],\n      [133, 100]\n    ],\n    [\n      [45969, 89843],\n      [-64, -382],\n      [314, -403],\n      [-361, -451],\n      [-801, -405],\n      [-240, -107],\n      [-365, 87],\n      [-775, 187],\n      [273, 261],\n      [-605, 289],\n      [492, 114],\n      [-12, 174],\n      [-583, 137],\n      [188, 385],\n      [421, 87],\n      [433, -400],\n      [422, 321],\n      [349, -167],\n      [453, 315],\n      [461, -42]\n    ],\n    [\n      [59922, 69905],\n      [-49, -186]\n    ],\n    [\n      [59873, 69719],\n      [-100, 82],\n      [-58, -394],\n      [69, -66],\n      [-71, -81],\n      [-12, -156],\n      [131, 80]\n    ],\n    [\n      [59832, 69184],\n      [7, -230],\n      [-139, -944]\n    ],\n    [\n      [59518, 69025],\n      [80, 194],\n      [-19, 34],\n      [74, 276],\n      [56, 446],\n      [40, 149],\n      [8, 6]\n    ],\n    [\n      [59757, 70130],\n      [93, -1],\n      [25, 104],\n      [75, 8]\n    ],\n    [\n      [59950, 70241],\n      [4, -242],\n      [-38, -90],\n      [6, -4]\n    ],\n    [\n      [54311, 73167],\n      [-100, -465],\n      [41, -183],\n      [-58, -303],\n      [-213, 222],\n      [-141, 64],\n      [-387, 300],\n      [38, 304],\n      [325, -54],\n      [284, 64],\n      [211, 51]\n    ],\n    [\n      [52558, 74927],\n      [166, -419],\n      [-39, -782],\n      [-126, 38],\n      [-113, -197],\n      [-105, 156],\n      [-11, 713],\n      [-64, 338],\n      [153, -30],\n      [139, 183]\n    ],\n    [\n      [53835, 78058],\n      [-31, -291],\n      [67, -251]\n    ],\n    [\n      [53871, 77516],\n      [-221, 86],\n      [-226, -210],\n      [15, -293],\n      [-34, -168],\n      [91, -301],\n      [261, -298],\n      [140, -488],\n      [309, -476],\n      [217, 3],\n      [68, -130],\n      [-78, -118],\n      [249, -214],\n      [204, -178],\n      [238, -308],\n      [29, -111],\n      [-52, -211],\n      [-154, 276],\n      [-242, 97],\n      [-116, -382],\n      [200, -219],\n      [-33, -309],\n      [-116, -35],\n      [-148, -506],\n      [-116, -46],\n      [1, 181],\n      [57, 317],\n      [60, 126],\n      [-108, 342],\n      [-85, 298],\n      [-115, 74],\n      [-82, 255],\n      [-179, 107],\n      [-120, 238],\n      [-206, 38],\n      [-217, 267],\n      [-254, 384],\n      [-189, 340],\n      [-86, 585],\n      [-138, 68],\n      [-226, 195],\n      [-128, -80],\n      [-161, -274],\n      [-115, -43]\n    ],\n    [\n      [28453, 61504],\n      [187, -53],\n      [147, -142],\n      [46, -161],\n      [-195, -11],\n      [-84, -99],\n      [-156, 95],\n      [-159, 215],\n      [34, 135],\n      [116, 41],\n      [64, -20]\n    ],\n    [\n      [59922, 69905],\n      [309, -234],\n      [544, 630]\n    ],\n    [\n      [60887, 69581],\n      [-53, -89],\n      [-556, -296],\n      [277, -591],\n      [-92, -101],\n      [-46, -197],\n      [-212, -82],\n      [-66, -213],\n      [-120, -182],\n      [-310, 94]\n    ],\n    [\n      [59709, 67924],\n      [-9, 86]\n    ],\n    [\n      [59832, 69184],\n      [41, 173],\n      [0, 362]\n    ],\n    [\n      [87399, 70756],\n      [35, -203],\n      [-156, -357],\n      [-114, 189],\n      [-143, -137],\n      [-73, -346],\n      [-181, 168],\n      [2, 281],\n      [154, 352],\n      [158, -68],\n      [114, 248],\n      [204, -127]\n    ],\n    [\n      [89159, 72524],\n      [-104, -472],\n      [48, -296],\n      [-145, -416],\n      [-355, -278],\n      [-488, -36],\n      [-396, -675],\n      [-186, 227],\n      [-12, 442],\n      [-483, -130],\n      [-329, -279],\n      [-325, -11],\n      [282, -435],\n      [-186, -1004],\n      [-179, -248],\n      [-135, 229],\n      [69, 533],\n      [-176, 172],\n      [-113, 405],\n      [263, 182],\n      [145, 371],\n      [280, 306],\n      [203, 403],\n      [553, 177],\n      [297, -121],\n      [291, 1050],\n      [185, -282],\n      [408, 591],\n      [158, 229],\n      [174, 723],\n      [-47, 664],\n      [117, 374],\n      [295, 108],\n      [152, -819],\n      [-9, -479],\n      [-256, -595],\n      [4, -610]\n    ],\n    [\n      [89974, 76679],\n      [195, -126],\n      [197, 250],\n      [62, -663],\n      [-412, -162],\n      [-244, -587],\n      [-436, 404],\n      [-152, -646],\n      [-308, -9],\n      [-39, 587],\n      [138, 455],\n      [296, 33],\n      [81, 817],\n      [83, 460],\n      [326, -615],\n      [213, -198]\n    ],\n    [\n      [69711, 75551],\n      [-159, -109],\n      [-367, -412],\n      [-121, -422],\n      [-104, -4],\n      [-76, 280],\n      [-353, 19],\n      [-57, 484],\n      [-135, 4],\n      [21, 593],\n      [-333, 431],\n      [-476, -46],\n      [-326, -86],\n      [-265, 533],\n      [-227, 223],\n      [-431, 423],\n      [-52, 51],\n      [-715, -349],\n      [11, -2178]\n    ],\n    [\n      [65546, 74986],\n      [-142, -29],\n      [-195, 463],\n      [-188, 166],\n      [-315, -123],\n      [-123, -197]\n    ],\n    [\n      [64583, 75266],\n      [-15, 144],\n      [68, 246],\n      [-53, 206],\n      [-322, 202],\n      [-125, 530],\n      [-154, 150],\n      [-9, 192],\n      [270, -56],\n      [11, 432],\n      [236, 96],\n      [243, -88],\n      [50, 576],\n      [-50, 365],\n      [-278, -28],\n      [-236, 144],\n      [-321, -260],\n      [-259, -124]\n    ],\n    [\n      [63639, 77993],\n      [-142, 96],\n      [29, 304],\n      [-177, 395],\n      [-207, -17],\n      [-235, 401],\n      [160, 448],\n      [-81, 120],\n      [222, 649],\n      [285, -342],\n      [35, 431],\n      [573, 643],\n      [434, 15],\n      [612, -409],\n      [329, -239],\n      [295, 249],\n      [440, 12],\n      [356, -306],\n      [80, 175],\n      [391, -25],\n      [69, 280],\n      [-450, 406],\n      [267, 288],\n      [-52, 161],\n      [266, 153],\n      [-200, 405],\n      [127, 202],\n      [1039, 205],\n      [136, 146],\n      [695, 218],\n      [250, 245],\n      [499, -127],\n      [88, -612],\n      [290, 144],\n      [356, -202],\n      [-23, -322],\n      [267, 33],\n      [696, 558],\n      [-102, -185],\n      [355, -457],\n      [620, -1500],\n      [148, 309],\n      [383, -340],\n      [399, 151],\n      [154, -106],\n      [133, -341],\n      [194, -115],\n      [119, -251],\n      [358, 79],\n      [147, -361]\n    ],\n    [\n      [72294, 75601],\n      [-171, 87],\n      [-140, 212],\n      [-412, 62],\n      [-461, 16],\n      [-100, -65],\n      [-396, 248],\n      [-158, -122],\n      [-43, -349],\n      [-457, 204],\n      [-183, -84],\n      [-62, -259]\n    ],\n    [\n      [61551, 49585],\n      [-195, -236],\n      [-68, -246],\n      [-104, -44],\n      [-40, -416],\n      [-89, -238],\n      [-54, -393],\n      [-112, -195]\n    ],\n    [\n      [60889, 47817],\n      [-399, 590],\n      [-19, 343],\n      [-1007, 1203],\n      [-47, 65]\n    ],\n    [\n      [59417, 50018],\n      [-3, 627],\n      [80, 239],\n      [137, 391],\n      [101, 431],\n      [-123, 678],\n      [-32, 296],\n      [-132, 411]\n    ],\n    [\n      [59445, 53091],\n      [171, 352],\n      [188, 390]\n    ],\n    [\n      [61626, 52895],\n      [-243, -670],\n      [3, -2152],\n      [165, -488]\n    ],\n    [\n      [70465, 73876],\n      [-526, -89],\n      [-343, 192],\n      [-301, -46],\n      [26, 340],\n      [303, -98],\n      [101, 182]\n    ],\n    [\n      [69725, 74357],\n      [212, -58],\n      [355, 425],\n      [-329, 311],\n      [-198, -147],\n      [-205, 223],\n      [234, 382],\n      [-83, 58]\n    ],\n    [\n      [78495, 57780],\n      [-66, 713],\n      [178, 492],\n      [359, 112],\n      [261, -84]\n    ],\n    [\n      [79227, 59013],\n      [229, -232],\n      [126, 407],\n      [246, -217]\n    ],\n    [\n      [79828, 58971],\n      [64, -394],\n      [-34, -708],\n      [-467, -455],\n      [122, -358],\n      [-292, -43],\n      [-240, -238]\n    ],\n    [\n      [78981, 56775],\n      [-233, 87],\n      [-112, 307],\n      [-141, 611]\n    ],\n    [\n      [85652, 73393],\n      [240, -697],\n      [68, -383],\n      [3, -681],\n      [-105, -325],\n      [-252, -113],\n      [-222, -245],\n      [-250, -51],\n      [-31, 322],\n      [51, 443],\n      [-122, 615],\n      [206, 99],\n      [-190, 506]\n    ],\n    [\n      [85048, 72883],\n      [17, 54],\n      [124, -21],\n      [108, 266],\n      [197, 29],\n      [118, 39],\n      [40, 143]\n    ],\n    [\n      [55575, 75742],\n      [52, 132]\n    ],\n    [\n      [55627, 75874],\n      [66, 43],\n      [38, 196],\n      [50, 33],\n      [40, -84],\n      [52, -36],\n      [36, -94],\n      [46, -28],\n      [54, -110],\n      [39, 4],\n      [-31, -144],\n      [-33, -71],\n      [9, -44]\n    ],\n    [\n      [55993, 75539],\n      [-62, -23],\n      [-164, -91],\n      [-13, -121],\n      [-35, 5]\n    ],\n    [\n      [63326, 68290],\n      [58, -261],\n      [-25, -135],\n      [89, -445]\n    ],\n    [\n      [63448, 67449],\n      [-196, -16],\n      [-69, 282],\n      [-248, 57]\n    ],\n    [\n      [79227, 59013],\n      [90, 266],\n      [12, 500],\n      [-224, 515],\n      [-18, 583],\n      [-211, 480],\n      [-210, 40],\n      [-56, -205],\n      [-163, -17],\n      [-83, 104],\n      [-293, -353],\n      [-6, 530],\n      [68, 623],\n      [-188, 27],\n      [-16, 355],\n      [-120, 182]\n    ],\n    [\n      [77809, 62643],\n      [59, 218],\n      [237, 384]\n    ],\n    [\n      [78380, 63852],\n      [162, -466],\n      [125, -537],\n      [342, -5],\n      [108, -515],\n      [-178, -155],\n      [-80, -212],\n      [333, -353],\n      [231, -699],\n      [175, -520],\n      [210, -411],\n      [70, -418],\n      [-50, -590]\n    ],\n    [\n      [59757, 70130],\n      [99, 482],\n      [138, 416],\n      [5, 21]\n    ],\n    [\n      [59999, 71049],\n      [125, -31],\n      [45, -231],\n      [-151, -223],\n      [-68, -323]\n    ],\n    [\n      [47857, 53158],\n      [-73, -5],\n      [-286, 282],\n      [-252, 449],\n      [-237, 324],\n      [-187, 381]\n    ],\n    [\n      [46822, 54589],\n      [66, 189],\n      [15, 172],\n      [126, 320],\n      [129, 276]\n    ],\n    [\n      [54125, 64088],\n      [-197, -220],\n      [-156, 324],\n      [-439, 255]\n    ],\n    [\n      [52633, 68486],\n      [136, 137],\n      [24, 250],\n      [-30, 244],\n      [191, 228],\n      [86, 189],\n      [135, 170],\n      [16, 454]\n    ],\n    [\n      [53191, 70158],\n      [326, -204],\n      [117, 51],\n      [232, -98],\n      [368, -264],\n      [130, -526],\n      [250, -114],\n      [391, -248],\n      [296, -293],\n      [136, 153],\n      [133, 272],\n      [-65, 452],\n      [87, 288],\n      [200, 277],\n      [192, 80],\n      [375, -121],\n      [95, -264],\n      [104, -2],\n      [88, -101],\n      [276, -70],\n      [68, -195]\n    ],\n    [\n      [56944, 63578],\n      [0, -1180],\n      [-320, -2],\n      [-3, -248]\n    ],\n    [\n      [56621, 62148],\n      [-1108, 1131],\n      [-1108, 1132],\n      [-280, -323]\n    ],\n    [\n      [72718, 55024],\n      [-42, -615],\n      [-116, -168],\n      [-242, -135],\n      [-132, 470],\n      [-49, 849],\n      [126, 959],\n      [192, -328],\n      [129, -416],\n      [134, -616]\n    ],\n    [\n      [58049, 33472],\n      [96, -178],\n      [-85, -288],\n      [-47, -192],\n      [-155, -93],\n      [-51, -188],\n      [-99, -59],\n      [-209, 454],\n      [148, 374],\n      [151, 232],\n      [130, 120],\n      [121, -182]\n    ],\n    [\n      [56314, 82678],\n      [-23, 150],\n      [30, 162],\n      [-123, 94],\n      [-291, 103]\n    ],\n    [\n      [55907, 83187],\n      [-59, 497]\n    ],\n    [\n      [55848, 83684],\n      [318, 181],\n      [466, -38],\n      [273, 59],\n      [39, -123],\n      [148, -38],\n      [267, -287]\n    ],\n    [\n      [56523, 82432],\n      [-67, 182],\n      [-142, 64]\n    ],\n    [\n      [55848, 83684],\n      [10, 445],\n      [136, 371],\n      [262, 202],\n      [221, -442],\n      [223, 12],\n      [53, 453]\n    ],\n    [\n      [57579, 84537],\n      [134, -136],\n      [24, -287],\n      [89, -348]\n    ],\n    [\n      [47592, 66920],\n      [-42, 0],\n      [7, -317],\n      [-172, -19],\n      [-90, -134],\n      [-126, 0],\n      [-100, 76],\n      [-234, -63],\n      [-91, -460],\n      [-86, -44],\n      [-131, -745],\n      [-386, -637],\n      [-92, -816],\n      [-114, -265],\n      [-33, -213],\n      [-625, -48],\n      [-5, 1]\n    ],\n    [\n      [45272, 63236],\n      [13, 274],\n      [106, 161],\n      [91, 308],\n      [-18, 200],\n      [96, 417],\n      [155, 376],\n      [93, 95],\n      [74, 344],\n      [6, 315],\n      [100, 365],\n      [185, 216],\n      [177, 603],\n      [5, 8],\n      [139, 227],\n      [259, 65],\n      [218, 404],\n      [140, 158],\n      [232, 493],\n      [-70, 735],\n      [106, 508],\n      [37, 312],\n      [179, 399],\n      [278, 270],\n      [206, 244],\n      [186, 612],\n      [87, 362],\n      [205, -2],\n      [167, -251],\n      [264, 41],\n      [288, -131],\n      [121, -6]\n    ],\n    [\n      [57394, 79070],\n      [66, 87],\n      [185, 58],\n      [204, -184],\n      [115, -22],\n      [125, -159],\n      [-20, -200],\n      [101, -97],\n      [40, -247],\n      [97, -150],\n      [-19, -88],\n      [52, -60],\n      [-74, -44],\n      [-164, 18],\n      [-27, 81],\n      [-58, -47],\n      [20, -106],\n      [-76, -188],\n      [-49, -203],\n      [-70, -64]\n    ],\n    [\n      [57842, 77455],\n      [-50, 270],\n      [30, 252],\n      [-9, 259],\n      [-160, 352],\n      [-89, 249],\n      [-86, 175],\n      [-84, 58]\n    ],\n    [\n      [63761, 43212],\n      [74, -251],\n      [69, -390],\n      [45, -711],\n      [72, -276],\n      [-28, -284],\n      [-49, -174],\n      [-94, 347],\n      [-53, -175],\n      [53, -438],\n      [-24, -250],\n      [-77, -137],\n      [-18, -500],\n      [-109, -689],\n      [-137, -814],\n      [-172, -1120],\n      [-106, -821],\n      [-125, -685],\n      [-226, -140],\n      [-243, -250],\n      [-160, 151],\n      [-220, 211],\n      [-77, 312],\n      [-18, 524],\n      [-98, 471],\n      [-26, 425],\n      [50, 426],\n      [128, 102],\n      [1, 197],\n      [133, 447],\n      [25, 377],\n      [-65, 280],\n      [-52, 372],\n      [-23, 544],\n      [97, 331],\n      [38, 375],\n      [138, 22],\n      [155, 121],\n      [103, 107],\n      [122, 7],\n      [158, 337],\n      [229, 364],\n      [83, 297],\n      [-38, 253],\n      [118, -71],\n      [153, 410],\n      [6, 356],\n      [92, 264],\n      [96, -254]\n    ],\n    [\n      [23016, 65864],\n      [-107, -518],\n      [-49, -426],\n      [-20, -791],\n      [-27, -289],\n      [48, -322],\n      [86, -288],\n      [56, -458],\n      [184, -440],\n      [65, -337],\n      [109, -291],\n      [295, -157],\n      [114, -247],\n      [244, 165],\n      [212, 60],\n      [208, 106],\n      [175, 101],\n      [176, 241],\n      [67, 345],\n      [22, 496],\n      [48, 173],\n      [188, 155],\n      [294, 137],\n      [246, -21],\n      [169, 50],\n      [66, -125],\n      [-9, -285],\n      [-149, -351],\n      [-66, -360],\n      [51, -103],\n      [-42, -255],\n      [-69, -461],\n      [-71, 152],\n      [-58, -10]\n    ],\n    [\n      [24381, 59170],\n      [-314, 636],\n      [-144, 191],\n      [-226, 155],\n      [-156, -43],\n      [-223, -223],\n      [-140, -58],\n      [-196, 156],\n      [-208, 112],\n      [-260, 271],\n      [-208, 83],\n      [-314, 275],\n      [-233, 282],\n      [-70, 158],\n      [-155, 35],\n      [-284, 187],\n      [-116, 270],\n      [-299, 335],\n      [-139, 373],\n      [-66, 288],\n      [93, 57],\n      [-29, 169],\n      [64, 153],\n      [1, 204],\n      [-93, 266],\n      [-25, 235],\n      [-94, 298],\n      [-244, 587],\n      [-280, 462],\n      [-135, 368],\n      [-238, 241],\n      [-51, 145],\n      [42, 365],\n      [-142, 138],\n      [-164, 287],\n      [-69, 412],\n      [-149, 48],\n      [-162, 311],\n      [-130, 288],\n      [-12, 184],\n      [-149, 446],\n      [-99, 452],\n      [5, 227],\n      [-201, 234],\n      [-93, -25],\n      [-159, 163],\n      [-44, -240],\n      [46, -284],\n      [27, -444],\n      [95, -243],\n      [206, -407],\n      [46, -139],\n      [42, -42],\n      [37, -203],\n      [49, 8],\n      [56, -381],\n      [85, -150],\n      [59, -210],\n      [174, -300],\n      [92, -550],\n      [83, -259],\n      [77, -277],\n      [15, -311],\n      [134, -20],\n      [112, -268],\n      [100, -264],\n      [-6, -106],\n      [-117, -217],\n      [-49, 3],\n      [-74, 359],\n      [-181, 337],\n      [-201, 286],\n      [-142, 150],\n      [9, 432],\n      [-42, 320],\n      [-132, 183],\n      [-191, 264],\n      [-37, -76],\n      [-70, 154],\n      [-171, 143],\n      [-164, 343],\n      [20, 44],\n      [115, -33],\n      [103, 221],\n      [10, 266],\n      [-214, 422],\n      [-163, 163],\n      [-102, 369],\n      [-103, 388],\n      [-129, 472],\n      [-113, 531]\n    ],\n    [\n      [17464, 69802],\n      [316, 46],\n      [353, 64],\n      [-26, -116],\n      [419, -287],\n      [634, -416],\n      [552, 4],\n      [221, 0],\n      [0, 244],\n      [481, 0],\n      [102, -210],\n      [142, -186],\n      [165, -260],\n      [92, -309],\n      [69, -325],\n      [144, -178],\n      [230, -177],\n      [175, 467],\n      [227, 11],\n      [196, -236],\n      [139, -404],\n      [96, -346],\n      [164, -337],\n      [61, -414],\n      [78, -277],\n      [217, -184],\n      [197, -130],\n      [108, 18]\n    ],\n    [\n      [55993, 75539],\n      [95, 35],\n      [128, 9]\n    ],\n    [\n      [46619, 59216],\n      [93, 107],\n      [47, 348],\n      [88, 14],\n      [194, -165],\n      [157, 117],\n      [107, -39],\n      [42, 131],\n      [1114, 9],\n      [62, 414],\n      [-48, 73],\n      [-134, 2550],\n      [-134, 2550],\n      [425, 10]\n    ],\n    [\n      [51185, 61897],\n      [1, -1361],\n      [-152, -394],\n      [-24, -364],\n      [-247, -94],\n      [-379, -51],\n      [-102, -210],\n      [-178, -23]\n    ],\n    [\n      [46801, 57931],\n      [13, 184],\n      [-24, 229],\n      [-104, 166],\n      [-54, 338],\n      [-13, 368]\n    ],\n    [\n      [77375, 56448],\n      [-27, 439],\n      [86, 452],\n      [-94, 350],\n      [23, 644],\n      [-113, 306],\n      [-90, 707],\n      [-50, 746],\n      [-121, 490],\n      [-183, -297],\n      [-315, -421],\n      [-156, 53],\n      [-172, 138],\n      [96, 732],\n      [-58, 554],\n      [-218, 681],\n      [34, 213],\n      [-163, 76],\n      [-197, 481]\n    ],\n    [\n      [77809, 62643],\n      [-159, -137],\n      [-162, -256],\n      [-196, -26],\n      [-127, -639],\n      [-117, -107],\n      [134, -519],\n      [177, -431],\n      [113, -390],\n      [-101, -514],\n      [-96, -109],\n      [66, -296],\n      [185, -470],\n      [32, -330],\n      [-4, -274],\n      [108, -539],\n      [-152, -551],\n      [-135, -607]\n    ],\n    [\n      [55380, 75322],\n      [-58, 46],\n      [-78, 192],\n      [-120, 118]\n    ],\n    [\n      [55338, 76294],\n      [74, -101],\n      [40, -82],\n      [91, -63],\n      [106, -123],\n      [-22, -51]\n    ],\n    [\n      [74375, 79706],\n      [292, 102],\n      [530, 509],\n      [423, 278],\n      [242, -182],\n      [289, -8],\n      [186, -276],\n      [277, -22],\n      [402, -148],\n      [270, 411],\n      [-113, 348],\n      [288, 612],\n      [311, -244],\n      [252, -69],\n      [327, -152],\n      [53, -443],\n      [394, -248],\n      [263, 109],\n      [351, 78],\n      [279, -78],\n      [272, -284],\n      [168, -302],\n      [258, 6],\n      [350, -96],\n      [255, 146],\n      [366, 98],\n      [407, 416],\n      [166, -63],\n      [146, -198],\n      [331, 49]\n    ],\n    [\n      [59599, 43773],\n      [209, 48],\n      [334, -166],\n      [73, 74],\n      [193, 16],\n      [99, 177],\n      [167, -10],\n      [303, 230],\n      [221, 342]\n    ],\n    [\n      [61198, 44484],\n      [45, -265],\n      [-11, -588],\n      [34, -519],\n      [11, -923],\n      [49, -290],\n      [-83, -422],\n      [-108, -410],\n      [-177, -366],\n      [-254, -225],\n      [-313, -287],\n      [-313, -634],\n      [-107, -108],\n      [-194, -420],\n      [-115, -136],\n      [-23, -421],\n      [132, -448],\n      [54, -346],\n      [4, -177],\n      [49, 29],\n      [-8, -579],\n      [-45, -275],\n      [65, -101],\n      [-41, -245],\n      [-116, -211],\n      [-229, -199],\n      [-334, -320],\n      [-122, -219],\n      [24, -248],\n      [71, -40],\n      [-24, -311]\n    ],\n    [\n      [59119, 34780],\n      [-211, 5]\n    ],\n    [\n      [58908, 34785],\n      [-24, 261],\n      [-41, 265]\n    ],\n    [\n      [58843, 35311],\n      [-23, 212],\n      [49, 659],\n      [-72, 419],\n      [-133, 832]\n    ],\n    [\n      [58664, 37433],\n      [292, 671],\n      [74, 426],\n      [42, 53],\n      [31, 348],\n      [-45, 175],\n      [12, 442],\n      [54, 409],\n      [0, 748],\n      [-145, 190],\n      [-132, 43],\n      [-60, 146],\n      [-128, 125],\n      [-232, -12],\n      [-18, 220]\n    ],\n    [\n      [58409, 41417],\n      [-26, 421],\n      [843, 487]\n    ],\n    [\n      [59226, 42325],\n      [159, -284],\n      [77, 54],\n      [110, -149],\n      [16, -237],\n      [-59, -274],\n      [21, -417],\n      [181, -365],\n      [85, 410],\n      [120, 124],\n      [-24, 760],\n      [-116, 427],\n      [-100, 191],\n      [-97, -9],\n      [-77, 768],\n      [77, 449]\n    ],\n    [\n      [46619, 59216],\n      [-184, 405],\n      [-168, 435],\n      [-184, 157],\n      [-133, 173],\n      [-155, -6],\n      [-135, -129],\n      [-138, 51],\n      [-96, -189]\n    ],\n    [\n      [45426, 60113],\n      [-24, 318],\n      [78, 291],\n      [34, 557],\n      [-30, 583],\n      [-34, 294],\n      [28, 295],\n      [-72, 281],\n      [-146, 255]\n    ],\n    [\n      [45260, 62987],\n      [60, 197],\n      [1088, -4],\n      [-53, 853],\n      [68, 304],\n      [261, 53],\n      [-9, 1512],\n      [911, -31],\n      [1, 895]\n    ],\n    [\n      [59226, 42325],\n      [-147, 153],\n      [85, 549],\n      [87, 205],\n      [-53, 490],\n      [56, 479],\n      [47, 160],\n      [-71, 501],\n      [-131, 264]\n    ],\n    [\n      [59099, 45126],\n      [273, -110],\n      [55, -164],\n      [95, -275],\n      [77, -804]\n    ],\n    [\n      [78372, 54256],\n      [64, -56],\n      [164, -356],\n      [116, -396],\n      [16, -398],\n      [-29, -269],\n      [27, -203],\n      [20, -349],\n      [98, -163],\n      [109, -523],\n      [-5, -199],\n      [-197, -40],\n      [-263, 438],\n      [-329, 469],\n      [-32, 301],\n      [-161, 395],\n      [-38, 489],\n      [-100, 322],\n      [30, 431],\n      [-61, 250]\n    ],\n    [\n      [77801, 54399],\n      [48, 105],\n      [227, -258],\n      [22, -304],\n      [183, 71],\n      [91, 243]\n    ],\n    [\n      [80461, 51765],\n      [204, -202],\n      [214, 110],\n      [56, 500],\n      [119, 112],\n      [333, 128],\n      [199, 467],\n      [137, 374]\n    ],\n    [\n      [82069, 53798],\n      [214, 411],\n      [140, 462],\n      [112, 2],\n      [143, -299],\n      [13, -257],\n      [183, -165],\n      [231, -177],\n      [-20, -232],\n      [-186, -29],\n      [50, -289],\n      [-205, -201]\n    ],\n    [\n      [54540, 33696],\n      [-207, 446],\n      [-108, 432],\n      [-62, 575],\n      [-68, 428],\n      [-93, 910],\n      [-7, 707],\n      [-35, 322],\n      [-108, 243],\n      [-144, 489],\n      [-146, 708],\n      [-60, 371],\n      [-226, 577],\n      [-17, 453]\n    ],\n    [\n      [56448, 40227],\n      [228, 134],\n      [180, -34],\n      [109, -133],\n      [2, -49]\n    ],\n    [\n      [55526, 35946],\n      [0, -2182],\n      [-248, -302],\n      [-149, -43],\n      [-175, 112],\n      [-125, 43],\n      [-47, 252],\n      [-109, 162],\n      [-133, -292]\n    ],\n    [\n      [96049, 38125],\n      [228, -366],\n      [144, -272],\n      [-105, -142],\n      [-153, 160],\n      [-199, 266],\n      [-179, 313],\n      [-184, 416],\n      [-38, 201],\n      [119, -9],\n      [156, -201],\n      [122, -200],\n      [89, -166]\n    ],\n    [\n      [54125, 64088],\n      [68, -919],\n      [104, -153],\n      [4, -188],\n      [116, -203],\n      [-60, -254],\n      [-107, -1199],\n      [-15, -769],\n      [-354, -557],\n      [-120, -778],\n      [115, -219],\n      [0, -380],\n      [178, -13],\n      [-28, -279]\n    ],\n    [\n      [53939, 57955],\n      [-52, -13],\n      [-188, 647],\n      [-65, 24],\n      [-217, -331],\n      [-215, 173],\n      [-150, 34],\n      [-80, -83],\n      [-163, 18],\n      [-164, -252],\n      [-141, -14],\n      [-337, 305],\n      [-131, -145],\n      [-142, 10],\n      [-104, 223],\n      [-279, 221],\n      [-298, -70],\n      [-72, -128],\n      [-39, -340],\n      [-80, -238],\n      [-19, -527]\n    ],\n    [\n      [52361, 53399],\n      [-289, -213],\n      [-105, 31],\n      [-107, -132],\n      [-222, 13],\n      [-149, 370],\n      [-91, 427],\n      [-197, 389],\n      [-209, -7],\n      [-245, 1]\n    ],\n    [\n      [26191, 57131],\n      [-96, 186],\n      [-130, 238],\n      [-61, 200],\n      [-117, 185],\n      [-140, 267],\n      [31, 91],\n      [46, -88],\n      [21, 41]\n    ],\n    [\n      [26903, 59440],\n      [-24, -57],\n      [-14, -132],\n      [29, -216],\n      [-64, -202],\n      [-30, -237],\n      [-9, -261],\n      [15, -152],\n      [7, -266],\n      [-43, -58],\n      [-26, -253],\n      [19, -156],\n      [-56, -151],\n      [12, -159],\n      [43, -97]\n    ],\n    [\n      [50920, 80916],\n      [143, 162],\n      [244, 869],\n      [380, 248],\n      [231, -17]\n    ],\n    [\n      [58639, 91676],\n      [-473, -237],\n      [-224, -54]\n    ],\n    [\n      [55734, 91409],\n      [-172, -24],\n      [-41, -389],\n      [-523, 95],\n      [-74, -329],\n      [-267, 2],\n      [-183, -421],\n      [-278, -655],\n      [-431, -831],\n      [101, -202],\n      [-97, -234],\n      [-275, 10],\n      [-180, -554],\n      [17, -784],\n      [177, -300],\n      [-92, -694],\n      [-231, -405],\n      [-122, -341]\n    ],\n    [\n      [53063, 85353],\n      [-187, 363],\n      [-548, -684],\n      [-371, -138],\n      [-384, 301],\n      [-99, 635],\n      [-88, 1363],\n      [256, 381],\n      [733, 496],\n      [549, 609],\n      [508, 824],\n      [668, 1141],\n      [465, 444],\n      [763, 741],\n      [610, 259],\n      [457, -31],\n      [423, 489],\n      [506, -26],\n      [499, 118],\n      [869, -433],\n      [-358, -158],\n      [305, -371]\n    ],\n    [\n      [56867, 96577],\n      [-620, -241],\n      [-490, 137],\n      [191, 152],\n      [-167, 189],\n      [575, 119],\n      [110, -222],\n      [401, -134]\n    ],\n    [\n      [55069, 97669],\n      [915, -440],\n      [-699, -233],\n      [-155, -435],\n      [-243, -111],\n      [-132, -490],\n      [-335, -23],\n      [-598, 361],\n      [252, 210],\n      [-416, 170],\n      [-541, 499],\n      [-216, 463],\n      [757, 212],\n      [152, -207],\n      [396, 8],\n      [105, 202],\n      [408, 20],\n      [350, -206]\n    ],\n    [\n      [57068, 98086],\n      [545, -207],\n      [-412, -318],\n      [-806, -70],\n      [-819, 98],\n      [-50, 163],\n      [-398, 11],\n      [-304, 271],\n      [858, 165],\n      [403, -142],\n      [281, 177],\n      [702, -148]\n    ],\n    [\n      [98060, 26404],\n      [63, -244],\n      [198, 239],\n      [80, -249],\n      [0, -249],\n      [-103, -274],\n      [-182, -435],\n      [-142, -238],\n      [103, -284],\n      [-214, -7],\n      [-238, -223],\n      [-75, -387],\n      [-157, -597],\n      [-219, -264],\n      [-138, -169],\n      [-256, 13],\n      [-180, 194],\n      [-302, 42],\n      [-46, 217],\n      [149, 438],\n      [349, 583],\n      [179, 111],\n      [200, 225],\n      [238, 310],\n      [167, 306],\n      [123, 441],\n      [106, 149],\n      [41, 330],\n      [195, 273],\n      [61, -251]\n    ],\n    [\n      [98502, 29218],\n      [202, -622],\n      [5, 403],\n      [126, -161],\n      [41, -447],\n      [224, -192],\n      [188, -48],\n      [158, 226],\n      [141, -69],\n      [-67, -524],\n      [-85, -345],\n      [-212, 12],\n      [-74, -179],\n      [26, -254],\n      [-41, -110],\n      [-105, -319],\n      [-138, -404],\n      [-214, -236],\n      [-48, 155],\n      [-116, 85],\n      [160, 486],\n      [-91, 326],\n      [-299, 236],\n      [8, 214],\n      [201, 206],\n      [47, 455],\n      [-13, 382],\n      [-113, 396],\n      [8, 104],\n      [-133, 244],\n      [-218, 523],\n      [-117, 418],\n      [104, 46],\n      [151, -328],\n      [216, -153],\n      [78, -526]\n    ],\n    [\n      [64752, 60417],\n      [-91, 413],\n      [-217, 975]\n    ],\n    [\n      [64444, 61805],\n      [833, 591],\n      [185, 1182],\n      [-127, 418]\n    ],\n    [\n      [65665, 65306],\n      [125, -404],\n      [155, -214],\n      [203, -78],\n      [165, -107],\n      [125, -339],\n      [75, -196],\n      [100, -75],\n      [-1, -132],\n      [-101, -352],\n      [-44, -166],\n      [-117, -189],\n      [-104, -404],\n      [-126, 31],\n      [-58, -141],\n      [-44, -300],\n      [34, -395],\n      [-26, -72],\n      [-128, 2],\n      [-174, -221],\n      [-27, -288],\n      [-63, -125],\n      [-173, 5],\n      [-109, -149],\n      [1, -238],\n      [-134, -165],\n      [-153, 56],\n      [-186, -199],\n      [-128, -34]\n    ],\n    [\n      [65575, 65974],\n      [80, 201],\n      [35, -51],\n      [-26, -244],\n      [-37, -108]\n    ],\n    [\n      [68937, 64577],\n      [-203, 150],\n      [-83, 424],\n      [-215, 450],\n      [-512, -111],\n      [-451, -11],\n      [-391, -83]\n    ],\n    [\n      [28366, 54848],\n      [-93, 170],\n      [-59, 319],\n      [68, 158],\n      [-70, 40],\n      [-52, 196],\n      [-138, 164],\n      [-122, -38],\n      [-56, -205],\n      [-112, -149],\n      [-61, -20],\n      [-27, -123],\n      [132, -321],\n      [-75, -76],\n      [-40, -87],\n      [-130, -30],\n      [-48, 353],\n      [-36, -101],\n      [-92, 35],\n      [-56, 238],\n      [-114, 39],\n      [-72, 69],\n      [-119, -1],\n      [-8, -128],\n      [-32, 89]\n    ],\n    [\n      [27070, 56232],\n      [100, -212],\n      [-6, -126],\n      [111, -26],\n      [26, 48],\n      [77, -145],\n      [136, 42],\n      [119, 150],\n      [168, 119],\n      [95, 176],\n      [153, -34],\n      [-10, -58],\n      [155, -21],\n      [124, -102],\n      [90, -177],\n      [105, -164]\n    ],\n    [\n      [30452, 39739],\n      [-279, 340],\n      [-24, 242],\n      [-551, 593],\n      [-498, 646],\n      [-214, 365],\n      [-115, 488],\n      [46, 170],\n      [-236, 775],\n      [-274, 1090],\n      [-262, 1177],\n      [-114, 269],\n      [-87, 435],\n      [-216, 386],\n      [-198, 239],\n      [90, 264],\n      [-134, 563],\n      [86, 414],\n      [221, 373]\n    ],\n    [\n      [85104, 55551],\n      [28, -392],\n      [16, -332],\n      [-94, -540],\n      [-102, 602],\n      [-130, -300],\n      [89, -435],\n      [-79, -277],\n      [-327, 343],\n      [-78, 428],\n      [84, 280],\n      [-176, 280],\n      [-87, -245],\n      [-131, 23],\n      [-205, -330],\n      [-46, 173],\n      [109, 498],\n      [175, 166],\n      [151, 223],\n      [98, -268],\n      [212, 162],\n      [45, 264],\n      [196, 15],\n      [-16, 457],\n      [225, -280],\n      [23, -297],\n      [20, -218]\n    ],\n    [\n      [84439, 56653],\n      [-100, -195],\n      [-87, -373],\n      [-87, -175],\n      [-171, 409],\n      [57, 158],\n      [70, 165],\n      [30, 367],\n      [153, 35],\n      [-44, -398],\n      [205, 570],\n      [-26, -563]\n    ],\n    [\n      [82917, 56084],\n      [-369, -561],\n      [136, 414],\n      [200, 364],\n      [167, 409],\n      [146, 587],\n      [49, -482],\n      [-183, -325],\n      [-146, -406]\n    ],\n    [\n      [83856, 57606],\n      [166, -183],\n      [177, 1],\n      [-5, -247],\n      [-129, -251],\n      [-176, -178],\n      [-10, 275],\n      [20, 301],\n      [-43, 282]\n    ],\n    [\n      [84861, 57766],\n      [78, -660],\n      [-214, 157],\n      [5, -199],\n      [68, -364],\n      [-132, -133],\n      [-11, 416],\n      [-84, 31],\n      [-43, 357],\n      [163, -47],\n      [-4, 224],\n      [-169, 451],\n      [266, -13],\n      [77, -220]\n    ],\n    [\n      [83757, 58301],\n      [-74, -510],\n      [-119, 295],\n      [-142, 450],\n      [238, -22],\n      [97, -213]\n    ],\n    [\n      [83700, 61512],\n      [171, -168],\n      [85, 153],\n      [26, -150],\n      [-46, -245],\n      [95, -423],\n      [-73, -491],\n      [-164, -196],\n      [-43, -476],\n      [62, -471],\n      [147, -65],\n      [123, 70],\n      [347, -328],\n      [-27, -321],\n      [91, -142],\n      [-29, -272],\n      [-216, 290],\n      [-103, 310],\n      [-71, -217],\n      [-177, 354],\n      [-253, -87],\n      [-138, 130],\n      [14, 244],\n      [87, 151],\n      [-83, 136],\n      [-36, -213],\n      [-137, 340],\n      [-41, 257],\n      [-11, 566],\n      [112, -195],\n      [29, 925],\n      [90, 535],\n      [169, -1]\n    ],\n    [\n      [93299, 46550],\n      [-78, -59],\n      [-120, 227],\n      [-122, 375],\n      [-59, 450],\n      [38, 57],\n      [30, -175],\n      [84, -134],\n      [135, -375],\n      [131, -200],\n      [-39, -166]\n    ],\n    [\n      [92217, 47343],\n      [-146, -48],\n      [-44, -166],\n      [-152, -144],\n      [-142, -138],\n      [-148, 1],\n      [-228, 171],\n      [-158, 165],\n      [23, 183],\n      [249, -86],\n      [152, 46],\n      [42, 283],\n      [40, 15],\n      [27, -314],\n      [158, 45],\n      [78, 202],\n      [155, 211],\n      [-30, 348],\n      [166, 11],\n      [56, -97],\n      [-5, -327],\n      [-93, -361]\n    ],\n    [\n      [89166, 49043],\n      [482, -407],\n      [513, -338],\n      [192, -302],\n      [154, -297],\n      [43, -349],\n      [462, -365],\n      [68, -313],\n      [-256, -64],\n      [62, -393],\n      [248, -388],\n      [180, -627],\n      [159, 20],\n      [-11, -262],\n      [215, -100],\n      [-84, -111],\n      [295, -249],\n      [-30, -171],\n      [-184, -41],\n      [-69, 153],\n      [-238, 66],\n      [-281, 89],\n      [-216, 377],\n      [-158, 325],\n      [-144, 517],\n      [-362, 259],\n      [-235, -169],\n      [-170, -195],\n      [35, -436],\n      [-218, -203],\n      [-155, 99],\n      [-288, 25]\n    ],\n    [\n      [92538, 47921],\n      [-87, -157],\n      [-52, 348],\n      [-65, 229],\n      [-126, 193],\n      [-158, 252],\n      [-200, 174],\n      [77, 143],\n      [150, -166],\n      [94, -130],\n      [117, -142],\n      [111, -248],\n      [106, -189],\n      [33, -307]\n    ],\n    [\n      [53922, 82340],\n      [189, 174],\n      [434, 273],\n      [350, 200],\n      [277, -100],\n      [21, -144],\n      [268, -7]\n    ],\n    [\n      [55461, 82736],\n      [342, -67],\n      [511, 9]\n    ],\n    [\n      [56535, 81053],\n      [139, -515],\n      [-29, -166],\n      [-138, -69],\n      [-252, -491],\n      [71, -266],\n      [-60, 35]\n    ],\n    [\n      [56266, 79581],\n      [-264, 227],\n      [-200, -84],\n      [-131, 61],\n      [-165, -127],\n      [-140, 210],\n      [-114, -81],\n      [-16, 36]\n    ],\n    [\n      [31588, 61519],\n      [142, -52],\n      [50, -118],\n      [-71, -149],\n      [-209, 4],\n      [-163, -21],\n      [-16, 253],\n      [40, 86],\n      [227, -3]\n    ],\n    [\n      [86288, 75628],\n      [39, -104]\n    ],\n    [\n      [86327, 75524],\n      [-106, 36],\n      [-120, -200],\n      [-83, -202],\n      [10, -424],\n      [-143, -130],\n      [-50, -105],\n      [-104, -174],\n      [-185, -97],\n      [-121, -159],\n      [-9, -256],\n      [-32, -65],\n      [111, -96],\n      [157, -259]\n    ],\n    [\n      [85048, 72883],\n      [-135, 112],\n      [-34, -111],\n      [-81, -49],\n      [-10, 112],\n      [-72, 54],\n      [-75, 94],\n      [76, 260],\n      [66, 69],\n      [-25, 108],\n      [71, 319],\n      [-18, 96],\n      [-163, 65],\n      [-131, 158]\n    ],\n    [\n      [47929, 72498],\n      [-112, -153],\n      [-146, 83],\n      [-143, -65],\n      [42, 462],\n      [-26, 363],\n      [-124, 55],\n      [-67, 224],\n      [22, 386],\n      [111, 215],\n      [20, 239],\n      [58, 355],\n      [-6, 250],\n      [-56, 212],\n      [-12, 200]\n    ],\n    [\n      [64113, 65205],\n      [-18, 430],\n      [75, 310],\n      [76, 64],\n      [84, -185],\n      [5, -346],\n      [-61, -348]\n    ],\n    [\n      [64274, 65130],\n      [-77, -42],\n      [-84, 117]\n    ],\n    [\n      [56308, 78869],\n      [120, 127],\n      [172, -65],\n      [178, -3],\n      [129, -144],\n      [95, 91],\n      [205, 56],\n      [69, 139],\n      [118, 0]\n    ],\n    [\n      [57842, 77455],\n      [124, -109],\n      [131, 95],\n      [126, -101]\n    ],\n    [\n      [58223, 77340],\n      [6, -152],\n      [-135, -128],\n      [-84, 56],\n      [-78, -713]\n    ],\n    [\n      [56293, 76715],\n      [-51, 103],\n      [65, 99],\n      [-69, 74],\n      [-87, -133],\n      [-162, 172],\n      [-22, 244],\n      [-169, 139],\n      [-31, 188],\n      [-151, 232]\n    ],\n    [\n      [89901, 80562],\n      [280, -1046],\n      [-411, 195],\n      [-171, -854],\n      [271, -605],\n      [-8, -413],\n      [-211, 356],\n      [-182, -457],\n      [-51, 496],\n      [31, 575],\n      [-32, 638],\n      [64, 446],\n      [13, 790],\n      [-163, 581],\n      [24, 808],\n      [257, 271],\n      [-110, 274],\n      [123, 83],\n      [73, -391],\n      [96, -569],\n      [-7, -581],\n      [114, -597]\n    ],\n    [\n      [55461, 82736],\n      [63, 260],\n      [383, 191]\n    ],\n    [\n      [99999, 92429],\n      [-305, -30],\n      [-49, 187],\n      [-99645, 247],\n      [36, 24],\n      [235, -1],\n      [402, -169],\n      [-24, -81],\n      [-286, -141],\n      [-363, -36],\n      [99999, 0]\n    ],\n    [\n      [89889, 93835],\n      [-421, -4],\n      [-569, 66],\n      [-49, 31],\n      [263, 234],\n      [348, 54],\n      [394, -226],\n      [34, -155]\n    ],\n    [\n      [91869, 94941],\n      [-321, -234],\n      [-444, 53],\n      [-516, 233],\n      [66, 192],\n      [518, -89],\n      [697, -155]\n    ],\n    [\n      [90301, 95224],\n      [-219, -439],\n      [-1023, 16],\n      [-461, -139],\n      [-550, 384],\n      [149, 406],\n      [366, 111],\n      [734, -26],\n      [1004, -313]\n    ],\n    [\n      [65981, 92363],\n      [-164, -52],\n      [-907, 77],\n      [-74, 262],\n      [-503, 158],\n      [-40, 320],\n      [284, 126],\n      [-10, 323],\n      [551, 503],\n      [-255, 73],\n      [665, 518],\n      [-75, 268],\n      [621, 312],\n      [917, 380],\n      [925, 110],\n      [475, 220],\n      [541, 76],\n      [193, -233],\n      [-187, -184],\n      [-984, -293],\n      [-848, -282],\n      [-863, -562],\n      [-414, -577],\n      [-435, -568],\n      [56, -491],\n      [531, -484]\n    ],\n    [\n      [63639, 77993],\n      [-127, -350],\n      [-269, -97],\n      [-276, -610],\n      [252, -561],\n      [-27, -398],\n      [303, -696]\n    ],\n    [\n      [61098, 76242],\n      [-354, 499],\n      [-317, 223],\n      [-240, 347],\n      [202, 95],\n      [231, 494],\n      [-156, 234],\n      [410, 241],\n      [-8, 129],\n      [-249, -95]\n    ],\n    [\n      [60617, 78409],\n      [9, 262],\n      [143, 165],\n      [269, 43],\n      [44, 197],\n      [-62, 326],\n      [113, 310],\n      [-3, 173],\n      [-410, 192],\n      [-162, -6],\n      [-172, 277],\n      [-213, -94],\n      [-352, 208],\n      [6, 116],\n      [-99, 256],\n      [-222, 29],\n      [-23, 183],\n      [70, 120],\n      [-178, 334],\n      [-288, -57],\n      [-84, 30],\n      [-70, -134],\n      [-104, 23]\n    ],\n    [\n      [57772, 85719],\n      [316, 327],\n      [-291, 280]\n    ],\n    [\n      [58639, 91676],\n      [286, 206],\n      [456, -358],\n      [761, -140],\n      [1050, -668],\n      [213, -281],\n      [18, -393],\n      [-308, -311],\n      [-454, -157],\n      [-1240, 449],\n      [-204, -75],\n      [453, -433],\n      [18, -274],\n      [18, -604],\n      [358, -180],\n      [217, -153],\n      [36, 286],\n      [-168, 254],\n      [177, 224],\n      [672, -368],\n      [233, 144],\n      [-186, 433],\n      [647, 578],\n      [256, -34],\n      [260, -206],\n      [161, 406],\n      [-231, 352],\n      [136, 353],\n      [-204, 367],\n      [777, -190],\n      [158, -331],\n      [-351, -73],\n      [1, -328],\n      [219, -203],\n      [429, 128],\n      [68, 377],\n      [580, 282],\n      [970, 507],\n      [209, -29],\n      [-273, -359],\n      [344, -61],\n      [199, 202],\n      [521, 16],\n      [412, 245],\n      [317, -356],\n      [315, 391],\n      [-291, 343],\n      [145, 195],\n      [820, -179],\n      [385, -185],\n      [1006, -675],\n      [186, 309],\n      [-282, 313],\n      [-8, 125],\n      [-335, 58],\n      [92, 280],\n      [-149, 461],\n      [-8, 189],\n      [512, 535],\n      [183, 537],\n      [206, 116],\n      [736, -156],\n      [57, -328],\n      [-263, -479],\n      [173, -189],\n      [89, -413],\n      [-63, -809],\n      [307, -362],\n      [-120, -395],\n      [-544, -839],\n      [318, -87],\n      [110, 213],\n      [306, 151],\n      [74, 293],\n      [240, 281],\n      [-162, 336],\n      [130, 390],\n      [-304, 49],\n      [-67, 328],\n      [222, 593],\n      [-361, 482],\n      [497, 398],\n      [-64, 421],\n      [139, 13],\n      [145, -328],\n      [-109, -570],\n      [297, -108],\n      [-127, 426],\n      [465, 233],\n      [577, 31],\n      [513, -337],\n      [-247, 492],\n      [-28, 630],\n      [483, 119],\n      [669, -26],\n      [602, 77],\n      [-226, 309],\n      [321, 388],\n      [319, 16],\n      [540, 293],\n      [734, 79],\n      [93, 162],\n      [729, 55],\n      [227, -133],\n      [624, 314],\n      [510, -10],\n      [77, 255],\n      [265, 252],\n      [656, 242],\n      [476, -191],\n      [-378, -146],\n      [629, -90],\n      [75, -292],\n      [254, 143],\n      [812, -7],\n      [626, -289],\n      [223, -221],\n      [-69, -307],\n      [-307, -175],\n      [-730, -328],\n      [-209, -175],\n      [345, -83],\n      [410, -149],\n      [251, 112],\n      [141, -379],\n      [122, 153],\n      [444, 93],\n      [892, -97],\n      [67, -276],\n      [1162, -88],\n      [15, 451],\n      [590, -104],\n      [443, 4],\n      [449, -312],\n      [128, -378],\n      [-165, -247],\n      [349, -465],\n      [437, -240],\n      [268, 620],\n      [446, -266],\n      [473, 159],\n      [538, -182],\n      [204, 166],\n      [455, -83],\n      [-201, 549],\n      [367, 256],\n      [2509, -384],\n      [236, -351],\n      [727, -451],\n      [1122, 112],\n      [553, -98],\n      [231, -244],\n      [-33, -432],\n      [342, -168],\n      [372, 121],\n      [492, 15],\n      [525, -116],\n      [526, 66],\n      [484, -526],\n      [344, 189],\n      [-224, 378],\n      [123, 262],\n      [886, -165],\n      [578, 36],\n      [799, -282],\n      [-99610, -258],\n      [681, -451],\n      [728, -588],\n      [-24, -367],\n      [187, -147],\n      [-64, 429],\n      [754, -88],\n      [544, -553],\n      [-276, -257],\n      [-455, -61],\n      [-7, -578],\n      [-111, -122],\n      [-260, 17],\n      [-212, 206],\n      [-369, 172],\n      [-62, 257],\n      [-283, 96],\n      [-315, -76],\n      [-151, 207],\n      [60, 219],\n      [-333, -140],\n      [126, -278],\n      [-158, -251],\n      [99997, -3],\n      [-357, -260],\n      [-360, 44],\n      [250, -315],\n      [166, -487],\n      [128, -159],\n      [32, -244],\n      [-71, -157],\n      [-518, 129],\n      [-777, -445],\n      [-247, -69],\n      [-425, -415],\n      [-403, -362],\n      [-102, -269],\n      [-397, 409],\n      [-724, -464],\n      [-126, 219],\n      [-268, -253],\n      [-371, 81],\n      [-90, -388],\n      [-333, -572],\n      [10, -239],\n      [316, -132],\n      [-37, -860],\n      [-258, -22],\n      [-119, -494],\n      [116, -255],\n      [-486, -302],\n      [-96, -674],\n      [-415, -144],\n      [-83, -600],\n      [-400, -551],\n      [-103, 407],\n      [-119, 862],\n      [-155, 1313],\n      [134, 819],\n      [234, 353],\n      [14, 276],\n      [432, 132],\n      [496, 744],\n      [479, 608],\n      [499, 471],\n      [223, 833],\n      [-337, -50],\n      [-167, -487],\n      [-705, -649],\n      [-227, 727],\n      [-717, -201],\n      [-696, -990],\n      [230, -362],\n      [-620, -154],\n      [-430, -61],\n      [20, 427],\n      [-431, 90],\n      [-344, -291],\n      [-850, 102],\n      [-914, -175],\n      [-899, -1153],\n      [-1065, -1394],\n      [438, -74],\n      [136, -370],\n      [270, -132],\n      [178, 295],\n      [305, -38],\n      [401, -650],\n      [9, -503],\n      [-217, -590],\n      [-23, -705],\n      [-126, -945],\n      [-418, -855],\n      [-94, -409],\n      [-377, -688],\n      [-374, -682],\n      [-179, -349],\n      [-370, -346],\n      [-175, -8],\n      [-175, 287],\n      [-373, -432],\n      [-43, -197]\n    ],\n    [\n      [79187, 96845],\n      [-1566, -228],\n      [507, 776],\n      [229, 66],\n      [208, -38],\n      [704, -336],\n      [-82, -240]\n    ],\n    [\n      [64204, 98169],\n      [-373, -78],\n      [-250, -45],\n      [-39, -97],\n      [-324, -98],\n      [-301, 140],\n      [158, 185],\n      [-618, 18],\n      [542, 107],\n      [422, 8],\n      [57, -160],\n      [159, 142],\n      [262, 97],\n      [412, -129],\n      [-107, -90]\n    ],\n    [\n      [77760, 97184],\n      [-606, -73],\n      [-773, 170],\n      [-462, 226],\n      [-213, 423],\n      [-379, 117],\n      [722, 404],\n      [600, 133],\n      [540, -297],\n      [640, -572],\n      [-69, -531]\n    ],\n    [\n      [58449, 49909],\n      [110, -333],\n      [-16, -348],\n      [-80, -74]\n    ],\n    [\n      [58216, 49787],\n      [67, -60],\n      [166, 182]\n    ],\n    [\n      [45260, 62987],\n      [12, 249]\n    ],\n    [\n      [61883, 60238],\n      [-37, 252],\n      [-83, 178],\n      [-22, 236],\n      [-143, 212],\n      [-148, 495],\n      [-79, 482],\n      [-192, 406],\n      [-124, 97],\n      [-184, 563],\n      [-32, 411],\n      [12, 350],\n      [-159, 655],\n      [-130, 231],\n      [-150, 122],\n      [-92, 339],\n      [15, 133],\n      [-77, 306],\n      [-81, 132],\n      [-108, 440],\n      [-170, 476],\n      [-141, 406],\n      [-139, -3],\n      [44, 325],\n      [12, 206],\n      [34, 236]\n    ],\n    [\n      [63448, 67449],\n      [109, -510],\n      [137, -135],\n      [47, -207],\n      [190, -249],\n      [16, -243],\n      [-27, -197],\n      [35, -199],\n      [80, -165],\n      [37, -194],\n      [41, -145]\n    ],\n    [\n      [64274, 65130],\n      [53, -226]\n    ],\n    [\n      [64444, 61805],\n      [-801, -226],\n      [-259, -266],\n      [-199, -620],\n      [-130, -99],\n      [-70, 197],\n      [-106, -30],\n      [-269, 60],\n      [-50, 59],\n      [-321, -14],\n      [-75, -53],\n      [-114, 153],\n      [-74, -290],\n      [28, -249],\n      [-121, -189]\n    ],\n    [\n      [59434, 56171],\n      [-39, 12],\n      [5, 294],\n      [-33, 203],\n      [-143, 233],\n      [-34, 426],\n      [34, 436],\n      [-129, 41],\n      [-19, -132],\n      [-167, -30],\n      [67, -173],\n      [23, -355],\n      [-152, -324],\n      [-138, -426],\n      [-144, -61],\n      [-233, 345],\n      [-105, -122],\n      [-29, -172],\n      [-143, -112],\n      [-9, -122],\n      [-277, 0],\n      [-38, 122],\n      [-200, 20],\n      [-100, -101],\n      [-77, 51],\n      [-143, 344],\n      [-48, 163],\n      [-200, -81],\n      [-76, -274],\n      [-72, -528],\n      [-95, -111],\n      [-85, -65]\n    ],\n    [\n      [56635, 55672],\n      [-23, 28]\n    ],\n    [\n      [56351, 57163],\n      [3, 143],\n      [-102, 174],\n      [-3, 343],\n      [-58, 228],\n      [-98, -34],\n      [28, 217],\n      [72, 246],\n      [-32, 245],\n      [92, 181],\n      [-58, 138],\n      [73, 365],\n      [127, 435],\n      [240, -41],\n      [-14, 2345]\n    ],\n    [\n      [60240, 63578],\n      [90, -580],\n      [-61, -107],\n      [40, -608],\n      [102, -706],\n      [106, -145],\n      [152, -219]\n    ],\n    [\n      [59433, 56242],\n      [1, -71]\n    ],\n    [\n      [59434, 56171],\n      [3, -460]\n    ],\n    [\n      [59445, 53091],\n      [-171, -272],\n      [-195, 1],\n      [-224, -138],\n      [-176, 132],\n      [-115, -161]\n    ],\n    [\n      [56824, 55442],\n      [-189, 230]\n    ],\n    [\n      [45357, 58612],\n      [-115, 460],\n      [-138, 210],\n      [122, 112],\n      [134, 415],\n      [66, 304]\n    ],\n    [\n      [45367, 57897],\n      [-46, 453]\n    ],\n    [\n      [95032, 44386],\n      [78, -203],\n      [-194, 4],\n      [-106, 363],\n      [166, -142],\n      [56, -22]\n    ],\n    [\n      [94680, 44747],\n      [-108, -14],\n      [-170, 60],\n      [-58, 91],\n      [17, 235],\n      [183, -93],\n      [91, -124],\n      [45, -155]\n    ],\n    [\n      [94910, 44908],\n      [-42, -109],\n      [-206, 512],\n      [-57, 353],\n      [94, 0],\n      [100, -473],\n      [111, -283]\n    ],\n    [\n      [94409, 45654],\n      [12, -119],\n      [-218, 251],\n      [-152, 212],\n      [-104, 197],\n      [41, 60],\n      [128, -142],\n      [228, -272],\n      [65, -187]\n    ],\n    [\n      [93760, 46238],\n      [-56, -33],\n      [-121, 134],\n      [-114, 243],\n      [14, 99],\n      [166, -250],\n      [111, -193]\n    ],\n    [\n      [46822, 54589],\n      [-75, 44],\n      [-200, 238],\n      [-144, 316],\n      [-49, 216],\n      [-34, 437]\n    ],\n    [\n      [25613, 58487],\n      [-31, -139],\n      [-161, 9],\n      [-100, 57],\n      [-115, 117],\n      [-154, 37],\n      [-79, 127]\n    ],\n    [\n      [61984, 57352],\n      [91, -109],\n      [54, -245],\n      [125, -247],\n      [138, -2],\n      [262, 151],\n      [302, 70],\n      [245, 184],\n      [138, 39],\n      [99, 108],\n      [158, 20]\n    ],\n    [\n      [63596, 57321],\n      [-2, -9],\n      [-1, -244],\n      [0, -596],\n      [0, -308],\n      [-125, -363],\n      [-194, -493]\n    ],\n    [\n      [63596, 57321],\n      [89, 12],\n      [128, 88],\n      [147, 59],\n      [132, 202],\n      [105, 2],\n      [6, -163],\n      [-25, -344],\n      [1, -310],\n      [-59, -214],\n      [-78, -639],\n      [-134, -659],\n      [-172, -755],\n      [-238, -866],\n      [-237, -661],\n      [-327, -806],\n      [-278, -479],\n      [-415, -586],\n      [-259, -450],\n      [-304, -715],\n      [-64, -312],\n      [-63, -140]\n    ],\n    [\n      [34125, 54109],\n      [333, -119],\n      [30, 107],\n      [225, 43],\n      [298, -159]\n    ],\n    [\n      [34889, 53069],\n      [109, -351],\n      [-49, -254],\n      [-24, -270],\n      [-71, -248]\n    ],\n    [\n      [56266, 79581],\n      [-77, -154],\n      [-55, -238]\n    ],\n    [\n      [53809, 77462],\n      [62, 54]\n    ],\n    [\n      [56639, 89578],\n      [-478, -167],\n      [-269, -413],\n      [43, -361],\n      [-441, -475],\n      [-537, -509],\n      [-202, -832],\n      [198, -416],\n      [265, -328],\n      [-255, -666],\n      [-289, -138],\n      [-106, -992],\n      [-157, -554],\n      [-337, 57],\n      [-158, -468],\n      [-321, -27],\n      [-89, 558],\n      [-232, 671],\n      [-211, 835]\n    ],\n    [\n      [58908, 34785],\n      [-56, -263],\n      [-163, -63],\n      [-166, 320],\n      [-2, 204],\n      [76, 222],\n      [26, 172],\n      [80, 42],\n      [140, -108]\n    ],\n    [\n      [59999, 71049],\n      [-26, 452],\n      [68, 243]\n    ],\n    [\n      [60041, 71744],\n      [74, 129],\n      [75, 130],\n      [15, 329],\n      [91, -115],\n      [306, 165],\n      [147, -112],\n      [229, 2],\n      [320, 222],\n      [149, -10],\n      [316, 92]\n    ],\n    [\n      [50518, 54209],\n      [-224, -126]\n    ],\n    [\n      [78495, 57780],\n      [-249, 271],\n      [-238, -11],\n      [41, 464],\n      [-245, -3],\n      [-22, -650],\n      [-150, -863],\n      [-90, -522],\n      [19, -428],\n      [181, -18],\n      [113, -539],\n      [50, -512],\n      [155, -338],\n      [168, -69],\n      [144, -306]\n    ],\n    [\n      [77801, 54399],\n      [-110, 227],\n      [-47, 292],\n      [-148, 334],\n      [-135, 280],\n      [-45, -347],\n      [-53, 328],\n      [30, 369],\n      [82, 566]\n    ],\n    [\n      [68841, 72526],\n      [156, 598],\n      [-60, 440],\n      [-204, 140],\n      [72, 261],\n      [232, -28],\n      [132, 326],\n      [89, 380],\n      [371, 137],\n      [-58, -274],\n      [40, -164],\n      [114, 15]\n    ],\n    [\n      [64978, 72558],\n      [-52, 417],\n      [40, 618],\n      [-216, 200],\n      [71, 405],\n      [-184, 34],\n      [61, 498],\n      [262, -145],\n      [244, 189],\n      [-202, 355],\n      [-80, 338],\n      [-224, -151],\n      [-28, -433],\n      [-87, 383]\n    ],\n    [\n      [65546, 74986],\n      [313, 8],\n      [-45, 297],\n      [237, 204],\n      [234, 343],\n      [374, -312],\n      [30, -471],\n      [106, -121],\n      [301, 27],\n      [93, -108],\n      [137, -609],\n      [317, -408],\n      [181, -278],\n      [291, -289],\n      [369, -253],\n      [-7, -362]\n    ],\n    [\n      [84713, 45326],\n      [32, 139],\n      [239, 133],\n      [194, 20],\n      [87, 74],\n      [105, -74],\n      [-102, -160],\n      [-289, -258],\n      [-233, -170]\n    ],\n    [\n      [32866, 56937],\n      [160, 77],\n      [58, -21],\n      [-11, -440],\n      [-232, -65],\n      [-50, 53],\n      [81, 163],\n      [-6, 233]\n    ],\n    [\n      [52339, 72408],\n      [302, 239],\n      [195, -71],\n      [-9, -299],\n      [236, 217],\n      [20, -113],\n      [-139, -290],\n      [-2, -273],\n      [96, -147],\n      [-36, -511],\n      [-183, -297],\n      [53, -322],\n      [143, -10],\n      [70, -281],\n      [106, -92]\n    ],\n    [\n      [60041, 71744],\n      [-102, 268],\n      [105, 222],\n      [-169, -51],\n      [-233, 136],\n      [-191, -340],\n      [-421, -66],\n      [-225, 317],\n      [-300, 20],\n      [-64, -245],\n      [-192, -70],\n      [-268, 314],\n      [-303, -11],\n      [-165, 588],\n      [-203, 328],\n      [135, 459],\n      [-176, 283],\n      [308, 565],\n      [428, 23],\n      [117, 449],\n      [529, -78],\n      [334, 383],\n      [324, 167],\n      [459, 13],\n      [485, -417],\n      [399, -228],\n      [323, 91],\n      [239, -53],\n      [328, 309]\n    ],\n    [\n      [57776, 75399],\n      [33, -228],\n      [243, -190],\n      [-51, -145],\n      [-330, -33],\n      [-118, -182],\n      [-232, -319],\n      [-87, 276],\n      [3, 121]\n    ],\n    [\n      [83826, 64992],\n      [-167, -947],\n      [-119, -485],\n      [-146, 499],\n      [-32, 438],\n      [163, 581],\n      [223, 447],\n      [127, -176],\n      [-49, -357]\n    ],\n    [\n      [60889, 47817],\n      [-128, -728],\n      [16, -335],\n      [178, -216],\n      [8, -153],\n      [-76, -357],\n      [16, -180],\n      [-18, -282],\n      [97, -370],\n      [115, -583],\n      [101, -129]\n    ],\n    [\n      [59099, 45126],\n      [-157, 177],\n      [-177, 100],\n      [-111, 99],\n      [-116, 150]\n    ],\n    [\n      [58388, 46397],\n      [-161, 331],\n      [-55, 342]\n    ],\n    [\n      [58449, 49909],\n      [98, 71],\n      [304, -7],\n      [566, 45]\n    ],\n    [\n      [60617, 78409],\n      [-222, -48],\n      [-185, -191],\n      [-260, -31],\n      [-239, -220],\n      [16, -368],\n      [136, -142],\n      [284, 35],\n      [-55, -210],\n      [-304, -103],\n      [-377, -342],\n      [-154, 121],\n      [61, 277],\n      [-304, 173],\n      [50, 113],\n      [265, 197],\n      [-80, 135],\n      [-432, 149],\n      [-19, 221],\n      [-257, -73],\n      [-103, -325],\n      [-215, -437]\n    ],\n    [\n      [35174, 30629],\n      [-121, -372],\n      [-313, -328],\n      [-205, 118],\n      [-151, -63],\n      [-256, 253],\n      [-189, -19],\n      [-169, 327]\n    ],\n    [\n      [6794, 61855],\n      [-41, -99],\n      [-69, 84],\n      [8, 165],\n      [-46, 216],\n      [14, 65],\n      [48, 97],\n      [-19, 116],\n      [16, 55],\n      [21, -11],\n      [107, -100],\n      [49, -51],\n      [45, -79],\n      [71, -207],\n      [-7, -33],\n      [-108, -126],\n      [-89, -92]\n    ],\n    [\n      [6645, 62777],\n      [-94, -43],\n      [-47, 125],\n      [-32, 48],\n      [-3, 37],\n      [27, 50],\n      [99, -56],\n      [73, -90],\n      [-23, -71]\n    ],\n    [\n      [6456, 63091],\n      [-9, -63],\n      [-149, 17],\n      [21, 72],\n      [137, -26]\n    ],\n    [\n      [6207, 63177],\n      [-15, -34],\n      [-19, 8],\n      [-97, 21],\n      [-35, 133],\n      [-11, 24],\n      [74, 82],\n      [23, -38],\n      [80, -196]\n    ],\n    [\n      [5737, 63567],\n      [-33, -58],\n      [-93, 107],\n      [14, 43],\n      [43, 58],\n      [64, -12],\n      [5, -138]\n    ],\n    [\n      [31350, 77248],\n      [48, -194],\n      [-296, -286],\n      [-286, -204],\n      [-293, -175],\n      [-147, -351],\n      [-47, -133],\n      [-3, -313],\n      [92, -313],\n      [115, -15],\n      [-29, 216],\n      [83, -131],\n      [-22, -169],\n      [-188, -96],\n      [-133, 11],\n      [-205, -103],\n      [-121, -29],\n      [-162, -29],\n      [-231, -171],\n      [408, 111],\n      [82, -112],\n      [-389, -177],\n      [-177, -1],\n      [8, 72],\n      [-84, -164],\n      [82, -27],\n      [-60, -424],\n      [-203, -455],\n      [-20, 152],\n      [-61, 30],\n      [-91, 148],\n      [57, -318],\n      [69, -105],\n      [5, -223],\n      [-89, -230],\n      [-157, -472],\n      [-25, 24],\n      [86, 402],\n      [-142, 225],\n      [-33, 491],\n      [-53, -255],\n      [59, -375],\n      [-183, 93],\n      [191, -191],\n      [12, -562],\n      [79, -41],\n      [29, -204],\n      [39, -591],\n      [-176, -439],\n      [-288, -175],\n      [-182, -346],\n      [-139, -38],\n      [-141, -217],\n      [-39, -199],\n      [-305, -383],\n      [-157, -281],\n      [-131, -351],\n      [-43, -419],\n      [50, -411],\n      [92, -505],\n      [124, -418],\n      [1, -256],\n      [132, -685],\n      [-9, -398],\n      [-12, -230],\n      [-69, -361],\n      [-83, -75],\n      [-137, 72],\n      [-44, 259],\n      [-105, 136],\n      [-148, 508],\n      [-129, 452],\n      [-42, 231],\n      [57, 393],\n      [-77, 325],\n      [-217, 494],\n      [-108, 90],\n      [-281, -268],\n      [-49, 30],\n      [-135, 275],\n      [-174, 147],\n      [-314, -75],\n      [-247, 66],\n      [-212, -41],\n      [-114, -92],\n      [50, -157],\n      [-5, -240],\n      [59, -117],\n      [-53, -77],\n      [-103, 87],\n      [-104, -112],\n      [-202, 18],\n      [-207, 312],\n      [-242, -73],\n      [-202, 137],\n      [-173, -42],\n      [-234, -138],\n      [-253, -438],\n      [-276, -255],\n      [-152, -282],\n      [-63, -266],\n      [-3, -407],\n      [14, -284],\n      [52, -201]\n    ],\n    [\n      [17464, 69802],\n      [-46, 302],\n      [-180, 340],\n      [-130, 71],\n      [-30, 169],\n      [-156, 30],\n      [-100, 159],\n      [-258, 59],\n      [-71, 95],\n      [-33, 324],\n      [-270, 594],\n      [-231, 821],\n      [10, 137],\n      [-123, 195],\n      [-215, 495],\n      [-38, 482],\n      [-148, 323],\n      [61, 489],\n      [-10, 507],\n      [-89, 453],\n      [109, 557],\n      [34, 536],\n      [33, 536],\n      [-50, 792],\n      [-88, 506],\n      [-80, 274],\n      [33, 115],\n      [402, -200],\n      [148, -558],\n      [69, 156],\n      [-45, 484],\n      [-94, 485]\n    ],\n    [\n      [7498, 84325],\n      [-277, -225],\n      [-142, 152],\n      [-43, 277],\n      [252, 210],\n      [148, 90],\n      [185, -40],\n      [117, -183],\n      [-240, -281]\n    ],\n    [\n      [4006, 85976],\n      [-171, -92],\n      [-182, 110],\n      [-168, 161],\n      [274, 101],\n      [220, -54],\n      [27, -226]\n    ],\n    [\n      [2297, 88264],\n      [171, -113],\n      [173, 61],\n      [225, -156],\n      [276, -79],\n      [-23, -64],\n      [-211, -125],\n      [-211, 128],\n      [-106, 107],\n      [-245, -34],\n      [-66, 52],\n      [17, 223]\n    ],\n    [\n      [13740, 82958],\n      [-153, 223],\n      [-245, 188],\n      [-78, 515],\n      [-358, 478],\n      [-150, 558],\n      [-267, 38],\n      [-441, 15],\n      [-326, 170],\n      [-574, 613],\n      [-266, 112],\n      [-486, 211],\n      [-385, -51],\n      [-546, 272],\n      [-330, 252],\n      [-309, -125],\n      [58, -411],\n      [-154, -38],\n      [-321, -123],\n      [-245, -199],\n      [-308, -126],\n      [-39, 348],\n      [125, 580],\n      [295, 182],\n      [-76, 148],\n      [-354, -329],\n      [-190, -394],\n      [-400, -420],\n      [203, -287],\n      [-262, -424],\n      [-299, -248],\n      [-278, -180],\n      [-69, -261],\n      [-434, -305],\n      [-87, -278],\n      [-325, -252],\n      [-191, 45],\n      [-259, -165],\n      [-282, -201],\n      [-231, -197],\n      [-477, -169],\n      [-43, 99],\n      [304, 276],\n      [271, 182],\n      [296, 324],\n      [345, 66],\n      [137, 243],\n      [385, 353],\n      [62, 119],\n      [205, 208],\n      [48, 448],\n      [141, 349],\n      [-320, -179],\n      [-90, 102],\n      [-150, -215],\n      [-181, 300],\n      [-75, -212],\n      [-104, 294],\n      [-278, -236],\n      [-170, 0],\n      [-24, 352],\n      [50, 216],\n      [-179, 211],\n      [-361, -113],\n      [-235, 277],\n      [-190, 142],\n      [-1, 334],\n      [-214, 252],\n      [108, 340],\n      [226, 330],\n      [99, 303],\n      [225, 43],\n      [191, -94],\n      [224, 285],\n      [201, -51],\n      [212, 183],\n      [-52, 270],\n      [-155, 106],\n      [205, 228],\n      [-170, -7],\n      [-295, -128],\n      [-85, -131],\n      [-219, 131],\n      [-392, -67],\n      [-407, 142],\n      [-117, 238],\n      [-351, 343],\n      [390, 247],\n      [620, 289],\n      [228, 0],\n      [-38, -296],\n      [586, 23],\n      [-225, 366],\n      [-342, 225],\n      [-197, 296],\n      [-267, 252],\n      [-381, 187],\n      [155, 309],\n      [493, 19],\n      [350, 270],\n      [66, 287],\n      [284, 281],\n      [271, 68],\n      [526, 262],\n      [256, -40],\n      [427, 315],\n      [421, -124],\n      [201, -266],\n      [123, 114],\n      [469, -35],\n      [-16, -136],\n      [425, -101],\n      [283, 59],\n      [585, -186],\n      [534, -56],\n      [214, -77],\n      [370, 96],\n      [421, -177],\n      [302, -83]\n    ],\n    [\n      [30185, 57537],\n      [-8, -139],\n      [-163, -69],\n      [91, -268],\n      [-3, -309],\n      [-123, -344],\n      [105, -468],\n      [120, 38],\n      [62, 427],\n      [-86, 208],\n      [-14, 447],\n      [346, 241],\n      [-38, 278],\n      [97, 186],\n      [100, -415],\n      [195, -9],\n      [180, -330],\n      [11, -195],\n      [249, -6],\n      [297, 61],\n      [159, -264],\n      [213, -74],\n      [155, 185],\n      [4, 149],\n      [344, 35],\n      [333, 9],\n      [-236, -175],\n      [95, -279],\n      [222, -44],\n      [210, -291],\n      [45, -473],\n      [144, 13],\n      [109, -139]\n    ],\n    [\n      [80013, 63313],\n      [-371, -505],\n      [-231, -558],\n      [-61, -410],\n      [212, -623],\n      [260, -772],\n      [252, -365],\n      [169, -475],\n      [127, -1093],\n      [-37, -1039],\n      [-232, -389],\n      [-318, -381],\n      [-227, -492],\n      [-346, -550],\n      [-101, 378],\n      [78, 401],\n      [-206, 335]\n    ],\n    [\n      [96623, 40851],\n      [-92, -78],\n      [-93, 259],\n      [10, 158],\n      [175, -339]\n    ],\n    [\n      [96418, 41756],\n      [45, -476],\n      [-75, 74],\n      [-58, -32],\n      [-39, 163],\n      [-6, 453],\n      [133, -182]\n    ],\n    [\n      [64752, 60417],\n      [-201, -158],\n      [-54, -263],\n      [-6, -201],\n      [-277, -249],\n      [-444, -276],\n      [-249, -417],\n      [-122, -33],\n      [-83, 35],\n      [-163, -245],\n      [-177, -114],\n      [-233, -30],\n      [-70, -34],\n      [-61, -156],\n      [-73, -43],\n      [-43, -150],\n      [-137, 13],\n      [-89, -80],\n      [-192, 30],\n      [-72, 345],\n      [8, 323],\n      [-46, 174],\n      [-54, 437],\n      [-80, 243],\n      [56, 29],\n      [-29, 270],\n      [34, 114],\n      [-12, 257]\n    ],\n    [\n      [58175, 37528],\n      [113, -7],\n      [134, -100],\n      [94, 71],\n      [148, -59]\n    ],\n    [\n      [59119, 34780],\n      [-70, -430],\n      [-32, -491],\n      [-72, -267],\n      [-190, -298],\n      [-54, -86],\n      [-118, -300],\n      [-77, -303],\n      [-158, -424],\n      [-314, -609],\n      [-196, -355],\n      [-210, -269],\n      [-290, -229],\n      [-141, -31],\n      [-36, -164],\n      [-169, 88],\n      [-138, -113],\n      [-301, 114],\n      [-168, -72],\n      [-115, 31],\n      [-286, -233],\n      [-238, -94],\n      [-171, -223],\n      [-127, -14],\n      [-117, 210],\n      [-94, 11],\n      [-120, 264],\n      [-13, -82],\n      [-37, 159],\n      [2, 346],\n      [-90, 396],\n      [89, 108],\n      [-7, 453],\n      [-182, 553],\n      [-139, 501],\n      [-1, 1],\n      [-199, 768]\n    ],\n    [\n      [58409, 41417],\n      [-210, -81],\n      [-159, -235],\n      [-33, -205],\n      [-100, -46],\n      [-241, -486],\n      [-154, -383],\n      [-94, -13],\n      [-90, 68],\n      [-311, 65]\n    ]\n  ],\n  \"bbox\": [-180, -85.60903777459767, 180, 83.64513000000001],\n  \"transform\": {\n    \"scale\": [0.0036000360003600037, 0.00169255860333201],\n    \"translate\": [-180, -85.60903777459767]\n  }\n}\n"
  },
  {
    "path": "public/locales/ca-CA/translations.json",
    "content": "{\n  \"action\": \"acció\",\n  \"assets\": \"Actius\",\n  \"assets.no_nfts_message\": \"No s'han trobat NFTs\",\n  \"assets.no_mpts_message\": null,\n  \"network\": \"Xarxa\",\n  \"amendments\": \"Amendments\",\n  \"network_name\": \"Xarxa desconeguda\",\n  \"network_name_testnet\": \"Testnet\",\n  \"network_name_mainnet\": \"Mainnet\",\n  \"network_name_devnet\": \"Devnet\",\n  \"network_name_xahau_mainnet\": \"Xahau Mainnet\",\n  \"network_name_xahau_testnet\": \"Xahau Testnet\",\n  \"network_name_custom\": \"Custom\",\n  \"app.meta.description\": \"Explorador de l'XRPL\",\n  \"app.meta.author\": \"Ripple\",\n  \"explorer\": \"Explorador\",\n  \"xrpl_org\": \"XRPL.org\",\n  \"github\": \"GitHub\",\n  \"header.search.placeholder\": \"Cerca per adreça, ledger o Txn\",\n  \"xrp\": \"XRP\",\n  \"xrpl_explorer\": \"Explorador XRPL\",\n  \"ledgers\": \"Ledgers\",\n  \"ledger\": \"Ledger\",\n  \"taxon\": \"Taxon\",\n  \"token_id\": \"ID del Token\",\n  \"token_transactions\": \"Transaccions de Tokens\",\n  \"transactions\": \"Transaccions\",\n  \"transaction_short\": \"TX\",\n  \"nodes\": \"Nodes\",\n  \"validator\": \"Validador\",\n  \"validators\": \"Validadors\",\n  \"upgrade_status\": \"Estat de l'actualització\",\n  \"version\": \"v{{number}}\",\n  \"component_error\": \"Alguna cosa no ha anat bé!\",\n  \"1H\": \"1H\",\n  \"24H\": \"24H\",\n  \"30D\": \"30D\",\n  \"total_transactions\": \"# de Txns\",\n  \"total_fees\": \"Total de comissions\",\n  \"async_component_failed\": \"Error en carregar el component\",\n  \"account_not_found\": \"No s'ha trobat el compte\",\n  \"account_empty_title\": \"No s'ha proporcionat l'ID del compte\",\n  \"account_empty_hint\": \"Introdueix l'ID d'un compte en el requadre de cerca\",\n  \"check_account_id\": \"Si us plau, comproba l'ID del teu compte\",\n  \"accounts.xrp_balance\": \"Saldo d'XRP\",\n  \"accounts.other_balances\": \"Altres saldos\",\n  \"accounts.other_balances_short\": \"Alt. Sal.\",\n  \"amount\": \"Quantitat\",\n  \"currency_code\": \"Codi de la Moneda\",\n  \"currency_balance\": \"<0>{{currency}}</0> Saldo\",\n  \"load_more_action\": \"Carrega'n més...\",\n  \"account_transactions\": \"Transaccions del compte\",\n  \"transaction_type\": \"Tipus de transacció\",\n  \"transaction_action_CANCEL\": \"Cancel·lar\",\n  \"transaction_action_CREATE\": \"Crear\",\n  \"transaction_action_FINISH\": \"Acabar\",\n  \"transaction_action_MODIFY\": \"Modificar\",\n  \"transaction_action_SEND\": \"Enviar\",\n  \"transaction_category_ACCOUNT\": \"Compte\",\n  \"transaction_category_DEX\": \"Dex (AMM, Ofertes, Trust Sets, Tokens)\",\n  \"transaction_category_NFT\": \"NFT\",\n  \"transaction_category_PAYMENT\": \"Pagament\",\n  \"transaction_category_PSUEDO\": \"Pseudo-Tx\",\n  \"transaction_category_OTHER\": null,\n  \"transaction_legend_toggle_hide\": \"Amaga la llegenda\",\n  \"transaction_legend_toggle_show\": \"Mostra la llegenda\",\n  \"transactions.date_header\": \"Data/hora (UTC)\",\n  \"no_transactions_message\": \"No s'han trobat transaccions\",\n  \"get_vault_transactions_failed\": null,\n  \"retry_action\": \"Reintenta...\",\n  \"uh_oh\": \"Òndia!\",\n  \"not_found_default_title\": \"No s'ha trobat la pàgina\",\n  \"not_found_check_url\": \"Si us plau, comproba l'URL\",\n  \"not_found\": \"No s'ha trobat\",\n  \"hash_not_found\": null,\n  \"buy\": \"Compra\",\n  \"sell\": \"Ven\",\n  \"price\": \"Preu\",\n  \"ledger_index\": \"Index del Ledger\",\n  \"to\": \"a\",\n  \"from\": \"de\",\n  \"request\": null,\n  \"terms\": null,\n  \"send\": \"Enviar\",\n  \"delivered\": \"Entregat\",\n  \"cancel_offer\": \"Cancel·la Oferta\",\n  \"convert_maximum\": \"Converteix tot\",\n  \"convert_to\": \"Converteix a\",\n  \"using_at_most\": \"Utilitzar com a màxim\",\n  \"partial_payment_allowed\": \"pagament parcial permès\",\n  \"set_limit\": \"Estableix el límit de confiança\",\n  \"escrow\": \"escrow\",\n  \"cancel_escrow\": \"cancel·la escrow\",\n  \"finish_escrow\": \"finalitza escrow\",\n  \"escrow_amount\": \"quantitat d'escrow\",\n  \"escrow_destination\": \"destinació de l'escrow\",\n  \"escrow_transaction\": \"txn d'escrow\",\n  \"escrow_condition_short\": \"condició de l'escrow\",\n  \"escrow_fulfillment\": \"execució de l'escrow\",\n  \"condition\": \"condició\",\n  \"fulfillment\": \"execució\",\n  \"cancel_after\": \"cancel·lar després de\",\n  \"finish_after\": \"finalitzar després de\",\n  \"settle_delay\": \"Endarrariment en l'assentament\",\n  \"channel_id\": \"ID del canal\",\n  \"seconds\": \"segons\",\n  \"seconds_short\": \"seg.\",\n  \"regular_key\": \"clau regular\",\n  \"unset_regular_key\": \"Desactiva la clau regular\",\n  \"unset_signer_list\": \"Desactiva la llista de signants\",\n  \"set_flag\": \"Establir flag\",\n  \"clear_flag\": \"Desactivar flag\",\n  \"email_hash\": \"email hash\",\n  \"message_key\": \"Camp Message Key\",\n  \"out_of\": \"de\",\n  \"weight\": \"pes\",\n  \"the_account\": \"El compte\",\n  \"create_payment_channel\": \"creará un canal de pagament a\",\n  \"destination_tag\": \"etiqueta de destinació\",\n  \"source_tag\": \"etiqueta d'origen\",\n  \"channel_settle_delay\": \"El canal té un endarreriment d'assentament de\",\n  \"the_channel_id_is\": \"L'ID del canal és\",\n  \"the_channel_amount_is\": \"La quantitat del canal és\",\n  \"update_payment_channel\": \"Actualitzará el canal de pagament\",\n  \"the_channel_balance_is\": \"El saldo demanat del canal és\",\n  \"amm_delete_description\": \"Ha intentat eliminar l'AMM per <Asset/> i <Asset2/>.\",\n  \"amm_delete_description_caveat\": \"Si hi hagués més de 512 trustlines, això només n'elimina 512\",\n  \"payment_channel_closed_description\": \"El canal de pagament es tancarà, qualsevol saldo restant s'enviarà al seu compte d'origen\",\n  \"set_signer_list_description\": \"Estableix el mínim quòrum de signants en {{quorum}} amb la següent llista de signants\",\n  \"unset_signer_list_description\": \"Ha eliminat tots els signants del compte\",\n  \"transaction_initiated_by\": \"La transacció va ser iniciada per\",\n  \"increase_channel_amount_by\": \"Incrementarà la quantitat del canal en\",\n  \"channel_amount_increase\": \"increment de la quantitat del canal\",\n  \"channel_amount\": \"quantitat del canal\",\n  \"total_claimed\": \"total reclamat\",\n  \"amount_claimed\": \"quantitat reclamada\",\n  \"close_request\": \"tanca la sol·licitud\",\n  \"renew_channel\": \"renova el canal\",\n  \"payment_channel_closed\": \"Canal de pagament tancat\",\n  \"paychannel_node_line1\": \"<1><0>{{action}}</0></1> un PayChannel node de <3><0>{{account}}</0></3> a <5><0>{{counterAccount}}</0></5>\",\n  \"paychannel_amount_changed\": \"Quantitat canviada en <1><0>{{difference}}</0><1><0>{{currency}}</0></1></1> de <3><0>{{previous}}</0><1><0>{{currency}}</0></1></3> to <5><0>{{final}}</0><1><0>{{currency}}</0></1></5>\",\n  \"paychannel_balance_changed\": \"Saldo canviat en <1><0>{{difference}}</0><1><0>{{currency}}</0></1></1> de <3><0>{{previous}}</0><1><0>{{currency}}</0></1></3> to <5><0>{{final}}</0><1><0>{{currency}}</0></1></5>\",\n  \"setfee_fees_description\": \"Futures transaccions requeriran una comissió de com a mínim <amount />.\",\n  \"setfee_reserves_description\": \"Els comptes ara han de tenir una comissió base de <base /> i un <increment /> addicional de la reserva per cada objecte afegit al compte\",\n  \"setfee_docs_description\": \"Visita la documentació: <0>Comissions</0>\",\n  \"setfee_base_fee\": \"Comissió base\",\n  \"setfee_reserve\": \"Reserva\",\n  \"setfee_reserve_increment\": \"Increment de la reserva\",\n  \"formatted_date\": \"Data/Hora ({{timeZone}})\",\n  \"transaction_type_name_AMMCreate\": \"Crear AMM\",\n  \"transaction_type_name_AMMDelete\": \"Eliminar AMM\",\n  \"transaction_type_name_AMMDeposit\": \"Dipositar AMM\",\n  \"transaction_type_name_AMMWithdraw\": \"Treure AMM\",\n  \"transaction_type_name_AMMVote\": \"Votar AMM\",\n  \"transaction_type_name_AMMBid\": \"Pujar AMM\",\n  \"transaction_type_name_AMMClawback\": null,\n  \"transaction_type_name_AccountSet\": \"Account Set\",\n  \"transaction_type_name_Batch\": null,\n  \"transaction_type_name_CheckCancel\": \"Cancel·lar Check\",\n  \"transaction_type_name_CheckCash\": \"Cobrar Check\",\n  \"transaction_type_name_CheckCreate\": \"Crear de Check\",\n  \"transaction_type_name_CredentialAccept\": null,\n  \"transaction_type_name_CredentialCreate\": null,\n  \"transaction_type_name_CredentialDelete\": null,\n  \"transaction_type_name_DelegateSet\": null,\n  \"transaction_type_name_DIDDelete\": \"Eliminar DID\",\n  \"transaction_type_name_DIDSet\": \"Establir DID\",\n  \"transaction_type_name_DepositPreauth\": \"Preautoritzar Diposit\",\n  \"transaction_type_name_Error_Cases\": \"Casos d'error\",\n  \"transaction_type_name_EscrowCancel\": \"Cancel·lar Escrow\",\n  \"transaction_type_name_EscrowCreate\": \"Crear Escrow\",\n  \"transaction_type_name_EscrowFinish\": \"Finalitzar Escrow\",\n  \"transaction_type_name_Invoke\": \"Invocar\",\n  \"transaction_type_name_LoanBrokerSet\": null,\n  \"transaction_type_name_LoanBrokerDelete\": null,\n  \"transaction_type_name_LoanBrokerCoverDeposit\": null,\n  \"transaction_type_name_LoanBrokerCoverWithdraw\": null,\n  \"transaction_type_name_LoanBrokerCoverClawback\": null,\n  \"transaction_type_name_LoanSet\": null,\n  \"transaction_type_name_LoanDelete\": null,\n  \"transaction_type_name_LoanManage\": null,\n  \"transaction_type_name_LoanPay\": null,\n  \"transaction_type_name_MPTokenIssuanceCreate\": null,\n  \"transaction_type_name_MPTokenIssuanceDestroy\": null,\n  \"transaction_type_name_MPTokenIssuanceSet\": null,\n  \"transaction_type_name_MPTokenAuthorize\": null,\n  \"transaction_type_name_NFTokenAcceptOffer\": \"Acceptar oferta NFT\",\n  \"transaction_type_name_NFTokenBurn\": \"Cremar NFT\",\n  \"transaction_type_name_NFTokenCancelOffer\": \"Cancel·lar oferta NFT\",\n  \"transaction_type_name_NFTokenCreateOffer\": \"Crear oferta NFT\",\n  \"transaction_type_name_NFTokenMint\": \"Encunyar NFT\",\n  \"transaction_type_name_OfferCancel\": \"Cancel·lar Oferta\",\n  \"transaction_type_name_OfferCreate\": \"Crear Ofertae\",\n  \"transaction_type_name_OracleDelete\": null,\n  \"transaction_type_name_OracleSet\": null,\n  \"transaction_type_name_Payment\": \"Pagament\",\n  \"transaction_type_name_PaymentChannelClaim\": \"Reclamar al Canal de Pagament\",\n  \"transaction_type_name_PaymentChannelCreate\": \"Crear Canal de Pagament\",\n  \"transaction_type_name_PaymentChannelFund\": \"Dipositar en Canal de Pagament\",\n  \"transaction_type_name_PermissionedDomainDelete\": null,\n  \"transaction_type_name_PermissionedDomainSet\": null,\n  \"transaction_type_name_SetHook\": \"Establir Hook\",\n  \"transaction_type_name_SetRegularKey\": \"Establir Clau Regular\",\n  \"transaction_type_name_SignerListSet\": \"Etablir Llista de Signantst\",\n  \"transaction_type_name_TicketCreate\": \"Crear tiquet\",\n  \"transaction_type_name_TrustSet\": \"Establir Confiança\",\n  \"transaction_type_name_VaultCreate\": null,\n  \"transaction_type_name_VaultSet\": null,\n  \"transaction_type_name_VaultDeposit\": null,\n  \"transaction_type_name_VaultWithdraw\": null,\n  \"transaction_type_name_VaultClawback\": null,\n  \"transaction_type_name_VaultDelete\": null,\n  \"transaction_type_name_XChainAccountCreateCommit\": \"Compromís de creació de compte XChain\",\n  \"transaction_type_name_XChainAddAccountCreateAttestation\": \"Afegir confirmació de creació de compte XChain\",\n  \"transaction_type_name_XChainAddClaimAttestation\": \"Afegir petició de confirmació XChain\",\n  \"transaction_type_name_XChainClaim\": \"Reclamar XChain\",\n  \"transaction_type_name_XChainCommit\": \"Compromís XChain\",\n  \"transaction_type_name_XChainCreateBridge\": \"Crear pont XChain\",\n  \"transaction_type_name_XChainCreateClaimID\": \"Crear reclamació d'ID XChain\",\n  \"transaction_type_name_XChainModifyBridge\": \"Modificar pont XChain\",\n  \"transaction_type_name_EnableAmendment\": \"Activar Amendment\",\n  \"transaction_type_name_SetFee\": \"Establir comissió\",\n  \"transaction_type_name_UNLModify\": \"Modificar UNL\",\n  \"transaction_type_name_AccountDelete\": \"Eliminar Compte\",\n  \"generic_error\": \"Alguna cosa no ha anat bé...\",\n  \"not_your_fault\": \"Probablement no és culpa teva\",\n  \"come_back_later\": \"Estarà disponible aviat\",\n  \"invalid_ledger_id\": \"L'ID del ledger no és vàlid\",\n  \"invalid_transaction_hash\": \"El hash de la transacció no és vàlid\",\n  \"ledger_not_found\": \"No s'ha tobat el Ledger\",\n  \"check_ledger_id\": \"Si us plau, comprova l'ID del ledger\",\n  \"server_ledgers_hint\": \"Aquest node ({{connection.server.publicKey, truncate(length: 10)}}) només conté els ledgers {{connection.ledger.validated}}\",\n  \"use_search\": \"Si us plau, utilitza la cerca\",\n  \"ledger_has_no_trans\": \"Aquest ledger no té transaccions\",\n  \"less_than\": \"Menys que\",\n  \"transaction_not_found\": \"No s'ha trobat la transacció\",\n  \"transaction_empty_title\": \"No s'ha proporcionat el hash de la transacció\",\n  \"transaction_empty_hint\": \"Introdueix el hash de la transacció en el requadre de cerca\",\n  \"validator_not_found\": \"No s'ha trobat el validador\",\n  \"check_transaction_hash\": \"Si us plau, comprova el hash de la transacció o el CTID\",\n  \"wrong_network\": \"Aquest CTID correspon a una xarxa different\",\n  \"check_validator_key\": \"Si us plau, comprova la teva clau de validador\",\n  \"transaction\": \"Transacció\",\n  \"success\": \"Ha tingut èxit\",\n  \"fail\": \"Ha fallat\",\n  \"simple\": \"Simple\",\n  \"detailed\": \"Detallada\",\n  \"details\": \"Detalls\",\n  \"history\": \"Història\",\n  \"voting\": \"Votant\",\n  \"raw\": \"Raw\",\n  \"expand\": \"Expandir\",\n  \"collapse\": \"Contraure\",\n  \"try_detailed_raw\": \"Intenta visió `Detallada` o `Raw`\",\n  \"account\": \"Compte\",\n  \"transaction_cost\": \"Cost de transacció\",\n  \"transaction_cost_short\": \"Cost Txn.\",\n  \"sequence_number\": \"Número de seqüència\",\n  \"sequence_number_short\": \"Seqüència #\",\n  \"serial\": \"Serial\",\n  \"n_a\": \"N/A\",\n  \"memos\": \"Memos\",\n  \"flags\": \"Flags\",\n  \"status\": \"Estat\",\n  \"successful_transaction\": \"La transacció ha tingut èxit\",\n  \"fail_transaction\": \"La transacció ha fallat amb un codi d'estat de <0>{{code}}</0>\",\n  \"transaction_validated\": \", i validada al ledger \",\n  \"on\": \" en \",\n  \"description\": \"Descripció\",\n  \"signers\": \"Signants\",\n  \"decoded_hex\": \"hex descodificat\",\n  \"transaction_consumed_fee\": \"Enviar aquesta transacció ha consumit\",\n  \"meta\": \"Meta\",\n  \"number_of_affected_node\": \"Ha afectat {{count}} nodes en el ledger:\",\n  \"nodes_type\": \"{{action}} nodes\",\n  \"node_meta_type\": \"{{action}} un node amb el tipus\",\n  \"transaction_balance_line_one\": \"<1><0>{{action}}</0></1> un <3><0>{{currency}}</0></3> RippleState node entre <5><0>{{account}}</0></5> i <7><0>{{counterAccount}}</0></7>\",\n  \"transaction_balance_line_two\": \"El saldo ha canviat en <1><0>{{change}}</0></1> de <3><0>{{previousBalance}}</0></3> a <5><0>{{finalBalance}}</0></5>\",\n  \"transaction_outstanding_balance_line_two\": null,\n  \"transaction_owned_directory\": \"{{action}} un node DirectoryNode propietat de\",\n  \"transaction_unowned_directory\": \"{{action}} un node DirectoryNode\",\n  \"transaction_mptoken_line_one\": null,\n  \"transaction_mpt_issuance_line_one\": null,\n  \"owned_account_root\": \"{{action}} el node AccountRoot de\",\n  \"unowned_account_root\": \"{{action}} el node AccountRoot\",\n  \"account_balance_increased\": \"El saldo ha incrementat en <1><0>{{difference}}</0><1><0>{{currency}}</0></1></1> de <3><0>{{previous}}</0><1><0>{{currency}}</0></1></3> a <5><0>{{final}}</0><1><0>{{currency}}</0></1></5>\",\n  \"account_balance_decreased\": \"El saldo ha disminuït en <1><0>{{difference}}</0><1><0>{{currency}}</0></1></1> de <3><0>{{previous}}</0><1><0>{{currency}}</0></1></3> a <5><0>{{final}}</0><1><0>{{currency}}</0></1></5>\",\n  \"decreased_from_to\": \"disminuït en <1><0>{{change}}</0></1> de <3><0>{{previous}}</0></3> a <5><0>{{final}}</0></5>\",\n  \"offer_node_meta\": \"<1><0>{{action}}</0></1> un <3><0>{{pair}}</0></3> node d'oferta propietat de <5><0>{{account}}</0></5> amb seqüència # <7><0>{{sequence}}</0></7>\",\n  \"offer_replaces\": \"Aquesta oferta substitueix l'oferta existent #\",\n  \"offer_partially_filled\": \"S'ha satisfet l'oferta parcialment\",\n  \"offer_filled\": \"S'ha satisfet l'oferta\",\n  \"offer_cancelled\": \"S'ha cancel·lat l'oferta\",\n  \"offer_replaced\": \"L'oferta s'ha substituït per la nova oferta #\",\n  \"offer_lack_of_funds\": \"L'oferta s'ha satisfet parcialment i després cancel·lada per manca de fons\",\n  \"transaction_sequence\": \"El número de seqüència és\",\n  \"trust_set_description\": \"Estableix <1><0>{{amount}}</0></1> com la màxima quantitat de <3><0>{{currency}}</0></3> de <5><0>{{issuer}}</0></5> que <7><0>{{account}}</0></7> vol tenir\",\n  \"payment_desc_line_1\": \"El pagament és de <source/> a <destination/>\",\n  \"the_source_tag_is\": \"L'etiqueta d'origen és \",\n  \"the_destination_tag_is\": \"L'etiqueta de destinació és\",\n  \"payment_desc_line_4\": \"S'ha ordenat que enviés\",\n  \"payment_desc_line_5\": \"gastant un màxim de\",\n  \"payment_desc_line_6\": \"La quantitat de fet enviada ha estat\",\n  \"offer_cancel_description\": \"La transacció cancel·larà del compte l'oferta #\",\n  \"offer_create_desc_line_1\": \"El compte <1><0>{{account}}</0></1>  ha ofert pagar <3><0>{{takerGets}}</0><1><0>{{currency}}</0></1></3> per rebre <5><0>{{takerPays}}</0><1><0>{{currency}}</0></1></5>\",\n  \"offer_create_desc_line_2\": \"El tipus de canvi per aquesta oferta és\",\n  \"offer_create_desc_line_3\": \"La transacció també cancel·larà del compte l'oferta existent #\",\n  \"offer_create_desc_line_5\": \"Aquesta oferta és aplicable al domini permès\",\n  \"offer_will_expire_desc\": \"L'oferta expira el <1><0>{{date}}</0></1> llevat que es cancel·li o es consumeixi abans del\",\n  \"offer_did_expire_desc\": \"L'oferta va expirar el <1><0>{{date}}</0></1> llevat que es cancel·lés o es consumís abans d'aquell moment\",\n  \"escrow_is_from\": \"L'escrow és de <1><0>{{account}}</0></1> a <3><0>{{destination}}</0></3>\",\n  \"escrow_is_created_by\": \"L'escrow va ser creat per <1><0>{{account}}</0></1> i els fons seran retornats al mateix compte\",\n  \"escrowed_amount\": \"Ha posat en escrow\",\n  \"escrow_condition\": \"L'escrow the úna condició de compliment de\",\n  \"describe_cancel_after\": \"Pot ser cancel·la després de\",\n  \"describe_finish_after\": \"Pot ser finalitzat després de\",\n  \"escrow_completion_desc\": \"L'acompliment wa ser executat per\",\n  \"escrow_completion_desc_2\": \"La quantitat posada en escrow de <1><0>{{amount}}</0></1> ha estat enviada a <3><0>{{destination}}</0></3>\",\n  \"escrow_finish_fulfillment_desc\": \"La condició de l'escrow és satisfeta per\",\n  \"escrow_cancellation_desc\": \"La cancel·lació va ser executada per\",\n  \"escrow_cancellation_desc_2\": \"La quantitat en escrow de <1><0>{{amount}}</0></1> ha estat retornada a <3><0>{{owner}}</0></3>\",\n  \"escrow_after_transaction_cost\": \"després dels costos de transacció\",\n  \"escrow_created_by_desc\": \"L'escrow va ser creat per <1><0>{{account}}</0></1> amb la transacció <3><0>{{transaction}}</0></3>\",\n  \"set_regular_key_description\": \"Estableix la Clau Regular del compte a\",\n  \"unset_regular_key_description\": \"Elimina la Claur Regular del compte\",\n  \"set_flag_description\": \"Estableix flag del compte\",\n  \"clear_flag_description\": \"Elimina flag del compte\",\n  \"set_domain_description\": \"Estableix el domini del compte en\",\n  \"set_email_description\": \"Estableix el hash del correu electrònic del compte en\",\n  \"set_message_key_description\": \"Estableix el camp Message Key del compte en\",\n  \"set_nftoken_minter_description\": \"Estableix <0>{{account}}</0> com l'encunyador autoritzat per aquest compte\",\n  \"deposit_auth\": \"Autoritza <1><0>{{account}}</0></1> a enviar pagaments a aquest compte\",\n  \"deposit_unauth\": \"Elimina l'autorització de <1><0>{{account}}</0></1> per enviar pagaments a aquest compte\",\n  \"deposit_auth_credentials\": null,\n  \"deposit_unauth_credentials\": null,\n  \"invalid_xrpl_address\": \"Adreça de l'XRPL no vàlida\",\n  \"loading\": \"Carregant\",\n  \"get_ledger_failed\": \"Incapaç de carregar el ledger\",\n  \"get_transaction_failed\": \"Incapaç de carregar la transacció\",\n  \"get_validator_failed\": \"Incapaç de carregar el validador\",\n  \"get_account_state_failed\": \"Incapaç de carregar l'estat del compte\",\n  \"get_account_transactions_failed\": \"Incapaç de carregar les transaccions del compte\",\n  \"get_account_transactions_try\": \"Intenta carregar més transaccions\",\n  \"pubkey\": \"pubkey\",\n  \"node_pubkey\": \"node pubkey\",\n  \"ip\": \"ip\",\n  \"state\": \"estat\",\n  \"rippled_version\": \"versió\",\n  \"last_ledger\": \"últim ledger\",\n  \"uptime\": \"període de funcionament\",\n  \"peers\": \"peers\",\n  \"in_out\": \"(in:out)\",\n  \"ledger_history\": \"història de ledgers\",\n  \"quorum\": \"quòrum\",\n  \"load\": \"carrega\",\n  \"latency\": \"latència\",\n  \"amendment_id\": \"id\",\n  \"amendment_name\": \"nom\",\n  \"voters\": \"votants\",\n  \"threshold\": \"llindar\",\n  \"consensus\": \"consens\",\n  \"enabled\": \"activat\",\n  \"disabled\": null,\n  \"on_tx\": \"en la (tx)\",\n  \"yes\": \"Sí\",\n  \"no\": \"No\",\n  \"deprecated\": \"obsolet\",\n  \"domain\": \"domini\",\n  \"unl\": \"unl\",\n  \"fee\": \"comissió\",\n  \"ledger_interval\": \"mitjana d'interval dels ledgers\",\n  \"load_fee\": \"comissió de c+arrega\",\n  \"txn_sec\": \"txn/seg.\",\n  \"txn_ledger\": \"mitjana txn/ledger\",\n  \"avg_fee\": \"mitjana comissió Txn\",\n  \"txn_count\": \"compte de txn\",\n  \"nUnlCol\": \"nUNL\",\n  \"nUnl\": \"VALIDADORS a la nUNL\",\n  \"fees\": \"comissions\",\n  \"total\": \"total\",\n  \"missing\": \"absent\",\n  \"authorize\": \"autoritza\",\n  \"unauthorize\": \"desautoritza\",\n  \"missed_validations\": \"{{count}} validacions perdudes\",\n  \"incomplete\": \"incomplet\",\n  \"base_fee\": \"Comissío Base\",\n  \"account_reserve\": \"Reserva de Compte\",\n  \"object_reserve\": \"Reserva d'Objectes\",\n  \"vote\": \"Vota\",\n  \"no_amendment_in_voting\": \"No hi ha amendments en votació en aquest moment per aquesta xarxa.\",\n  \"required\": \"requerit\",\n  \"source\": \"fount\",\n  \"destination\": \"destinació\",\n  \"claimed\": \"reclamat\",\n  \"remaining\": \"restant\",\n  \"inbound_total\": \"total entrant\",\n  \"outbound_total\": \"total sortint\",\n  \"payment_channels\": \"Canals de pagament\",\n  \"available_in\": \"Disponible en\",\n  \"channels\": \"canals\",\n  \"account_info\": \"Informació del compte\",\n  \"reserve\": \"reserva\",\n  \"current_sequence\": \"seqüència actual\",\n  \"escrows\": \"escrows\",\n  \"nodes_found\": \"nodes trobats\",\n  \"unmapped\": \"no mapejat\",\n  \"validators_found\": \"validadors trobats\",\n  \"pause\": \"pausa\",\n  \"resume\": \"reprèn\",\n  \"flag_ledger\": \"Flag Ledger\",\n  \"ticket\": \"Tiquet\",\n  \"ticket_sequence\": \"Seqüència del tiquet\",\n  \"ticket_count\": \"Comptador del tiquet\",\n  \"ticket_used\": \"un tiquet ha estat utilitzat per aquesta transacció\",\n  \"token\": \"Token\",\n  \"tokens\": \"Tokens\",\n  \"total_issuers\": \"Total Encunyadors\",\n  \"total_tokens\": \"Total Tokens\",\n  \"top_trading_pairs\": \"Parells d'intercanvi TOP\",\n  \"issuer_address\": \"Adreça d'encunyador\",\n  \"obligations\": \"Obligació\",\n  \"settings\": \"Configuració\",\n  \"rank\": \"Classificació\",\n  \"market_cap\": \"Market Cap\",\n  \"volume_24h\": \"Volum (24H)\",\n  \"no_tokens_message\": \"No s'han trobat tokens.\",\n  \"no_pairs_message\": \"No s'han trobat parells d'intercanvi\",\n  \"high\": \"Alt\",\n  \"low\": \"Baix\",\n  \"rank_message\": \"Els tokens estan classificats pel nombre de trustlines.\",\n  \"obligations_message\": \"Les obligacions són el nombre total de cada token encunyat a les adreces destinatarias que l'han rebut\",\n  \"issuer\": \"Encunyador\",\n  \"pair\": \"Parell\",\n  \"asset_pair\": null,\n  \"offer_range\": \"Rang de l'oferta\",\n  \"custom_network\": \"Xarxa personalitzada\",\n  \"custom_network_input_help\": \"Introdueix l'URL d'una xarxa personalitzada per accedir a la informació de la xarxa.\",\n  \"custom_network_input\": \"Escriu l'URL de la xarxa personalitzada\",\n  \"custom_networks\": \"Xarxes personalitzades\",\n  \"no_network_selected\": \"No s'ha seleccionat cap xarxa personalitzada\",\n  \"locking_chain_door\": \"Locking Chain Door\",\n  \"locking_chain_issue\": \"Locking Chain Issue\",\n  \"issuing_chain_door\": \"Issuing Chain Door\",\n  \"issuing_chain_issue\": \"Issuing Chain Issue\",\n  \"signature_reward\": \"Recompensa de signatura\",\n  \"min_account_create_amount\": \"Quantiat mínima de creació de compte\",\n  \"other_chain_source\": \"Una altra font de la cadena\",\n  \"xchain_claim_id\": \"Reclamació d'ID XChain\",\n  \"check_nft_id\": \"Si us plau, comprova l'ID de l'NFT\",\n  \"get_nft_state_failed\": \"No és possible carregar l'NFT\",\n  \"minted\": \"Encunyat\",\n  \"taxon_id\": \"ID del Taxon\",\n  \"transfer_fee\": \"Comissió de transferència\",\n  \"burnable\": \"Destruïble\",\n  \"only_xrp\": \"Només XRP\",\n  \"transferable\": \"Transferible\",\n  \"buy_offers\": \"Ofertes de Compra\",\n  \"sell_offers\": \"Ofertes de Venda\",\n  \"offer_index\": \"ID de l'Oferta\",\n  \"no_sell_offers\": \"No hi ha Ofertes de venda\",\n  \"no_buy_offers\": \"No hi ha ofertes de compra\",\n  \"validator_history.chain\": \"Xarxa\",\n  \"validator_history.date\": \"Data\",\n  \"validator_history.missed\": \"Perduda\",\n  \"validator_history.score\": \"Puntuació\",\n  \"seller\": \"Venedor\",\n  \"buyer\": \"Comprador\",\n  \"offerer\": \"Ofertador\",\n  \"token_taxon\": \"Taxon del Token\",\n  \"uri\": \"URI\",\n  \"owner\": \"Propietari\",\n  \"other_chain_destination\": \"Destinació a una altra xarxa\",\n  \"%_of_total_nodes_validators\": \"% total de nodes i validadors\",\n  \"version_display\": \"Versió: {{version}}\",\n  \"validator_count\": \"# de Validadors: {{val_count}}\",\n  \"node_count\": \"# de Nodes: {{node_count}}\",\n  \"current_stable_version\": \"Versió estable actual\",\n  \"stable_version\": \"{{stableVersion}}\",\n  \"nftoken_minter\": \"Encunyador NFT\",\n  \"is_burned\": \"Destruït\",\n  \"fee_rate\": \"taxa de comissió\",\n  \"last_affecting_transaction\": \"Última transacció afectada tx\",\n  \"Version\": \"Versió\",\n  \"increased_by\": \"incrementat en\",\n  \"trading_fee\": \"Comissió d'intercanvi\",\n  \"tvl\": \"TVL\",\n  \"account_address\": \"Adreça del Comtpe\",\n  \"asset1\": \"Actiu 1\",\n  \"asset2\": \"Actiu 2\",\n  \"asset1out\": \"Actiu 1 fora\",\n  \"asset2out\": \"Actiu 2 fora\",\n  \"asset1in\": \"Actiu 1 dins\",\n  \"asset2in\": \"Actiu 2 dins\",\n  \"effective_price\": \"Preu real\",\n  \"amm_account_id\": \"ID de Comtpe AMM\",\n  \"lp_tokens\": \"Tokens LP\",\n  \"min_slot_price\": \"Preu mínim de l'obertura\",\n  \"max_slot_price\": \" Preu màxim de l'obertura\",\n  \"auth_accounts\": \"Comtpes autoritzats\",\n  \"network_cannot_be_crawled\": \"Aquesta xarxa no pot ser indexada\",\n  \"check_crawl_existed\": \"Si us plau, contacta l'operador per assegurar-te que tenen l'indexació accessible o un seient vl.\",\n  \"peer_crawled_context\": \"Per més context, visita https://xrpl.org/peer-crawler.html\",\n  \"xchainbridge\": \"XChainBridge\",\n  \"xchain_account_claim_count\": \"XChain Account Claim Count\",\n  \"xchain_account_create_count\": \"XChain Account Create Count\",\n  \"min_signer_quorum\": \"Pes mínim <0>{{quorum}}</0> requerit\",\n  \"holder\": \"Holder\",\n  \"action_from\": \"<0><0>{{action}}</0></0> <1><0>{{amount}}</0></1> de <3><0>{{destination}}</0></3>\",\n  \"action_from_and\": null,\n  \"claws_back\": \"Recuperar\",\n  \"claws_back_from\": \"<source/> recuperar-se de <destination/>\",\n  \"instruct_to_claw\": \"L'import màxim recuperable és <amount/>\",\n  \"hook\": \"Hook\",\n  \"hooks\": \"Hooks\",\n  \"hook_emitted\": \"aquesta transacció ha estat emesa per un Hook\",\n  \"emit_details\": \"Emet detalls\",\n  \"hook_parameters\": \"Paràmetres del Hook\",\n  \"hook_executions\": \"Execucions del Hook\",\n  \"emit_generation\": \"Número <0>{{emit}}</0> en la línia de transaccions generades\",\n  \"emit_hook_hash\": \"Emesa pel hook <0>{{hash}}</0>\",\n  \"emit_parent\": \"Emesa per un hook executat per <0>{{hash}}</0>\",\n  \"emit_callback\": \"L'assumpte de la recuperació és <0>{{callback}}<0>\",\n  \"hook_exec_hash\": \"Ha executat el hook <0>{{hash}}</0>\",\n  \"hook_exec_account\": \"Al compte <0>{{account}}</0>\",\n  \"hook_exec_return\": \"Ha retornat el codi <0>{{code}}</0> amb string \\\"<1>{{string}}</1>\\\"\",\n  \"hook_exec_emit_count\": \"Emès <0>{{count}}</0> transaccions\",\n  \"hash\": \"Hash\",\n  \"grant\": \"Subvenció\",\n  \"namespace\": \"Namespace\",\n  \"api_version\": \"Versió API\",\n  \"triggered_on\": \"Executat en\",\n  \"name\": \"nom\",\n  \"introduced_in\": \"Introduït en\",\n  \"yeas\": \"Sís\",\n  \"nays\": \"Nos\",\n  \"eta\": \"Temps d'arribada prevista\",\n  \"amendment_summary\": \"Resum de l'Amendment\",\n  \"not\": \"no\",\n  \"enable_tx\": \"Activa tx\",\n  \"all\": \"Tot\",\n  \"yeas_count\": \"# vots pel sí: {{yeas_count}}\",\n  \"nays_count\": \"# vots pel no: {{nays_count}}\",\n  \"yeas_percent\": \"% de vots pel sí: {{yeas_percent}}%\",\n  \"nays_percent\": \"% de vots pel no: {{nays_percent}}%\",\n  \"%_of_validators\": \"% de validadors\",\n  \"amendment_not_found\": \"No s'ha trobat l'amendment\",\n  \"check_amendment_key\": \"Si us plau, comprova la clau del teu amendment\",\n  \"did_document\": \"Document DID\",\n  \"attestation\": \"Declaració\",\n  \"note\": \"Nota\",\n  \"indicate_unl\": \"indica un validador en una UNL\",\n  \"transaction_tokens_involved\": \"<Currency/> i <Currency2/>\",\n  \"transaction_tokens_swapped\": \"<Currency/> per <Currency2/>\",\n  \"oracle_document_id\": null,\n  \"provider\": null,\n  \"last_update_time\": null,\n  \"asset_class\": null,\n  \"trading_pairs\": null,\n  \"deleted\": null,\n  \"holders_count\": null,\n  \"trustlines\": null,\n  \"website\": null,\n  \"mpt_issuance_id\": null,\n  \"asset_scale\": null,\n  \"metadata\": null,\n  \"max_amount\": null,\n  \"mpt_holder\": null,\n  \"check_mpt_id\": null,\n  \"outstanding_amount\": null,\n  \"locked\": null,\n  \"can_lock\": null,\n  \"require_auth\": null,\n  \"can_escrow\": null,\n  \"can_trade\": null,\n  \"can_transfer\": null,\n  \"can_clawback\": null,\n  \"enable_amendment_name\": null,\n  \"amendment_status\": null,\n  \"expected_date\": null,\n  \"base\": null,\n  \"credential_type\": null,\n  \"credential_issuer\": null,\n  \"subject\": null,\n  \"expiration\": null,\n  \"domain_id\": null,\n  \"accepted_credentials\": null,\n  \"credential_ids\": null,\n  \"data\": null,\n  \"finish_function\": null,\n  \"quorum_description\": null,\n  \"avg_fee_description\": null,\n  \"ledger_interval_description\": null,\n  \"txn_ledger_description\": null,\n  \"txn_sec_description\": null,\n  \"load_fee_description\": null,\n  \"nUnl_description\": null,\n  \"computation_allowance\": null,\n  \"gas\": null,\n  \"delegate\": null,\n  \"permissions\": null,\n  \"pertaining_to_the_Permissioned_Domain\": null,\n  \"tx_delegated_to\": null,\n  \"account_delegates_to\": null,\n  \"delegate_to\": null,\n  \"volume\": null,\n  \"holders\": null,\n  \"trades\": null,\n  \"no_of_tokens\": null,\n  \"volume_24h_total\": null,\n  \"volume_24h_total_description\": null,\n  \"market_cap_metric_description\": null,\n  \"market_cap_description\": null,\n  \"24h_description\": null,\n  \"volume_description\": null,\n  \"trades_description\": null,\n  \"tvl_description\": null,\n  \"stablecoin_description\": null,\n  \"stablecoin\": null,\n  \"wrapped\": null,\n  \"tokens_footnote\": null,\n  \"xrplmeta_guidelines\": null,\n  \"inner_transaction\": null,\n  \"batch_table_detail_count\": null,\n  \"batch_table_detail_list\": null,\n  \"batch_description\": null,\n  \"batch\": null,\n  \"successful\": null,\n  \"failed\": null,\n  \"not-validated\": null,\n  \"asset\": null,\n  \"assets_maximum\": null,\n  \"mptoken_metadata\": null,\n  \"withdrawal_policy\": null,\n  \"account_creates_vault\": null,\n  \"vault_id\": null,\n  \"single_asset_vault\": null,\n  \"loan_broker_id\": null,\n  \"loan_id\": null,\n  \"management_fee_rate\": null,\n  \"debt_maximum\": null,\n  \"cover_rate_minimum\": null,\n  \"cover_rate_liquidation\": null,\n  \"counterparty\": null,\n  \"principal_requested\": null,\n  \"payment_total\": null,\n  \"payment_interval\": null,\n  \"grace_period\": null,\n  \"loan_origination_fee\": null,\n  \"loan_service_fee\": null,\n  \"late_payment_fee\": null,\n  \"close_payment_fee\": null,\n  \"full_payment_fee\": null,\n  \"overpayment_fee\": null,\n  \"interest_rate\": null,\n  \"late_interest_rate\": null,\n  \"close_interest_rate\": null,\n  \"overpayment_interest_rate\": null,\n  \"set_vault_data\": null,\n  \"set_vault_assets_maximum\": null,\n  \"set_vault_domain_id\": null,\n  \"account_deposits_into_vault\": null,\n  \"account_withdraws_from_vault\": null,\n  \"account_clawbacks_from_vault\": null,\n  \"account_clawbacks_from_vault_amount_omitted\": null,\n  \"account_deletes_vault\": null,\n  \"vault_create_table_detail\": null,\n  \"withdraws\": null,\n  \"deletes\": null,\n  \"vault_delete_table_detail\": null,\n  \"account_flag_title_lsf_global_freeze\": null,\n  \"account_flag_title_lsf_disable_master\": null,\n  \"account_flag_title_lsf_default_ripple\": null,\n  \"account_flag_title_lsf_allow_trustline_clawback\": null,\n  \"account_flag_title_lsf_allow_trustline_locking\": null,\n  \"account_flag_title_lsf_require_destination_tag\": null,\n  \"account_flag_title_lsf_no_freeze\": null,\n  \"account_flag_title_lsf_require_auth\": null,\n  \"account_flag_title_lsf_disallow_xrp\": null,\n  \"account_flag_title_lsf_disallow_incoming_trustline\": null,\n  \"account_flag_title_lsf_disallow_incoming_pay_chan\": null,\n  \"account_flag_title_lsf_disallow_incoming_nft_token_offer\": null,\n  \"account_flag_title_asf_authorized_nft_token_minter\": null,\n  \"account_flag_title_lsf_disallow_incoming_check\": null,\n  \"account_flag_title_lsf_deposit_auth\": null,\n  \"account_flag_title_asf_account_txn_id\": null,\n  \"account_flag_description_lsf_global_freeze\": null,\n  \"account_flag_description_lsf_disable_master\": null,\n  \"account_flag_description_lsf_default_ripple\": null,\n  \"account_flag_description_lsf_allow_trustline_clawback\": null,\n  \"account_flag_description_lsf_allow_trustline_locking\": null,\n  \"account_flag_description_lsf_require_destination_tag\": null,\n  \"account_flag_description_lsf_no_freeze\": null,\n  \"account_flag_description_lsf_require_auth\": null,\n  \"account_flag_description_lsf_disallow_xrp\": null,\n  \"account_flag_description_lsf_disallow_incoming_trustline\": null,\n  \"account_flag_description_lsf_disallow_incoming_pay_chan\": null,\n  \"account_flag_description_lsf_disallow_incoming_nft_token_offer\": null,\n  \"account_flag_description_asf_authorized_nft_token_minter\": null,\n  \"account_flag_description_lsf_disallow_incoming_check\": null,\n  \"account_flag_description_lsf_deposit_auth\": null,\n  \"account_flag_description_asf_account_txn_id\": null,\n  \"account_page_address\": null,\n  \"account_page_address_tag\": null,\n  \"account_page_classic_address\": null,\n  \"account_page_deleted_account_label\": null,\n  \"account_page_deleted_account_warning\": null,\n  \"account_page_extended_address\": null,\n  \"account_page_domain\": null,\n  \"account_page_reserve_balance\": null,\n  \"account_page_xrp_balance\": null,\n  \"account_page_xrp_balance_in_usd\": null,\n  \"account_page_account_properties\": null,\n  \"account_page_flags\": null,\n  \"account_page_flag_status_enabled\": null,\n  \"account_page_flag_status_disabled\": null,\n  \"account_page_signers\": null,\n  \"account_page_signer_weight\": null,\n  \"account_page_details\": null,\n  \"account_page_current_sequence\": null,\n  \"account_page_ticket_count\": null,\n  \"account_page_email_hash\": null,\n  \"account_page_payment_channels\": null,\n  \"account_page_payment_channels_text\": null,\n  \"account_page_nft_minter\": null,\n  \"account_page_asset_held_title\": null,\n  \"account_page_asset_issued_title\": null,\n  \"account_page_asset_tab_iou\": null,\n  \"account_page_asset_tab_lptoken\": null,\n  \"account_page_asset_tab_mpt\": null,\n  \"account_page_asset_tab_nft\": null,\n  \"account_page_asset_table_column_amm_instance\": null,\n  \"account_page_asset_table_column_amm_pair\": null,\n  \"account_page_asset_table_column_asset_class\": null,\n  \"account_page_asset_table_column_balance\": null,\n  \"account_page_asset_table_column_balance_usd\": null,\n  \"account_page_asset_table_column_circulating_supply\": null,\n  \"account_page_asset_table_column_currency_code\": null,\n  \"account_page_asset_table_column_frozen\": null,\n  \"account_page_asset_table_column_highest_bid\": null,\n  \"account_page_asset_table_column_holders\": null,\n  \"account_page_asset_table_column_issuer\": null,\n  \"account_page_asset_table_column_locked\": null,\n  \"account_page_asset_table_column_lowest_ask\": null,\n  \"account_page_asset_table_column_price_usd\": null,\n  \"account_page_asset_table_column_share\": null,\n  \"account_page_asset_table_column_supply\": null,\n  \"account_page_asset_table_column_ticker\": null,\n  \"account_page_asset_table_column_token_id\": null,\n  \"account_page_asset_table_column_transfer_fee\": null,\n  \"account_page_asset_table_column_trustlines\": null,\n  \"account_page_asset_table_column_url\": null,\n  \"account_page_asset_table_mpt_locked_global\": null,\n  \"account_page_asset_table_mpt_locked_individual\": null,\n  \"account_page_asset_table_no_iou\": null,\n  \"account_page_asset_table_no_lptoken\": null,\n  \"account_page_asset_table_no_mpt\": null,\n  \"account_page_asset_table_no_nft\": null,\n  \"tx_hash\": null,\n  \"timestamp\": null,\n  \"amount_in\": null,\n  \"amount_out\": null,\n  \"rate\": null,\n  \"refresh_data\": null,\n  \"token_page.general_overview\": null,\n  \"token_page.market_data\": null,\n  \"token_page.all_tx\": null,\n  \"token_page.dex_tx\": null,\n  \"token_page.transfers_tx\": null,\n  \"token_page.holders_table\": null,\n  \"token_page.issuer\": null,\n  \"token_page.price\": null,\n  \"token_page.holders\": null,\n  \"token_page.supply\": null,\n  \"token_page.market_cap\": null,\n  \"token_page.volume_24h\": null,\n  \"token_page.trades_24h\": null,\n  \"token_page.amm_tvl\": null,\n  \"token_page.transfer_fee\": null,\n  \"token_page.holders_rank\": null,\n  \"token_page.holders_num_tokens\": null,\n  \"token_page.holders_percent_supply\": null,\n  \"token_page.holders_no_holders\": null,\n  \"token_page.holders_usd_value\": null,\n  \"token_page.transfers_no_transfers\": null,\n  \"token_page.circulating_supply\": null,\n  \"token_page.dex_type\": null,\n  \"token_page.dex_amount_in_tooltip\": null,\n  \"token_page.dex_amount_out_tooltip\": null,\n  \"token_page.dex_rate_tooltip\": null,\n  \"token_page.dex_no_trades\": null,\n  \"token_page.token_label\": null,\n  \"token_page.category_text\": null,\n  \"token_type.iou\": null,\n  \"token_type.mpt\": null,\n  \"iou_page.trustlines\": null,\n  \"mpt_page.metadata_warning\": null,\n  \"data_available_from_notice\": null,\n  \"copied\": null,\n  \"click_to_copy\": null,\n  \"withdraw\": null,\n  \"delete\": null,\n  \"rates\": null,\n  \"loan_broker_rates_detail\": null,\n  \"loan_rates_detail\": null,\n  \"loan_fees_detail\": null,\n  \"loan_terms_detail\": null,\n  \"no_limit\": null,\n  \"first_loss_capital\": null,\n  \"vault\": null,\n  \"vault_not_found\": null,\n  \"invalid_vault_id\": null,\n  \"check_vault_id\": null,\n  \"get_vault_failed\": null,\n  \"private_vault\": null,\n  \"perm_domain_id\": null,\n  \"total_value_locked\": null,\n  \"shares\": null,\n  \"assets_available\": null,\n  \"unrealized_loss\": null,\n  \"other_data\": null,\n  \"max_total_supply\": null,\n  \"available_to_borrow\": null,\n  \"not_available\": null,\n  \"first_come_first_served\": null,\n  \"loans\": null,\n  \"loan_broker\": null,\n  \"total_debt\": null,\n  \"maximum_debt\": null,\n  \"management_fee\": null,\n  \"borrower\": null,\n  \"amount_requested\": null,\n  \"outstanding_balance\": null,\n  \"loan_status_current\": null,\n  \"loan_status_default\": null,\n  \"all_loans\": null,\n  \"loan_status_impaired\": null,\n  \"loan_status_paid_off\": null,\n  \"next_due_date\": null,\n  \"origination_date\": null,\n  \"frequency\": null,\n  \"installments\": null,\n  \"prepayment_fee\": null,\n  \"no_loans_message\": null,\n  \"loan_default_detected\": null,\n  \"no_loan_brokers_message\": null,\n  \"depositors_fetch_error\": null,\n  \"no_depositors_message\": null,\n  \"depositors\": null,\n  \"percent_of_supply\": null,\n  \"value\": null,\n  \"currency_toggle_help\": null,\n  \"currency_toggle_description\": null,\n  \"currency_toggle_loading\": null,\n  \"currency_toggle_loading_description\": null,\n  \"currency_toggle_unavailable\": null,\n  \"currency_toggle_unavailable_description\": null,\n  \"vaults\": null,\n  \"vaults_tvl\": null,\n  \"vaults_tvl_description\": null,\n  \"vaults_outstanding_loans\": null,\n  \"vaults_outstanding_loans_description\": null,\n  \"vaults_loans_originated\": null,\n  \"vaults_loans_originated_description\": null,\n  \"vaults_avg_interest_rate\": null,\n  \"vaults_avg_interest_rate_description\": null,\n  \"vaults_num_vaults\": null,\n  \"vaults_num_vaults_description\": null,\n  \"vaults_utilization_ratio\": null,\n  \"vaults_utilization_ratio_description\": null,\n  \"vaults_filter_all_assets\": null,\n  \"vaults_filter_stablecoins\": null,\n  \"vaults_search_placeholder\": null,\n  \"vaults_table_vault_id\": null,\n  \"vaults_table_asset\": null,\n  \"vaults_table_tvl\": null,\n  \"vaults_table_outstanding_loans\": null,\n  \"vaults_table_utilization_ratio\": null,\n  \"vaults_table_avg_interest_rate\": null,\n  \"vaults_table_website\": null,\n  \"vaults_no_results\": null,\n  \"vaults_disclaimer\": null,\n  \"amm_pool\": null,\n  \"basic_info\": null,\n  \"market_data\": null,\n  \"auction\": null,\n  \"created_on\": null,\n  \"volume_24h_tooltip\": null,\n  \"fees_24h\": null,\n  \"fees_24h_tooltip\": null,\n  \"apr_24h\": null,\n  \"apr_24h_tooltip\": null,\n  \"current_holder\": null,\n  \"discounted_fee\": null,\n  \"price_paid\": null,\n  \"replacement_cost\": null,\n  \"all_transactions\": null,\n  \"dex_trades\": null,\n  \"deposits\": null,\n  \"withdrawals\": null,\n  \"lp_tokens_received\": null,\n  \"lp_tokens_redeemed\": null,\n  \"tvl_and_volume\": null,\n  \"no_deposits\": null,\n  \"no_withdrawals\": null,\n  \"liquidity_providers\": null,\n  \"balance\": null,\n  \"lp_token_currency_code\": null,\n  \"asset_2\": null,\n  \"usd_value\": null,\n  \"amm_pool_deleted_label\": null,\n  \"amm_pool_deleted_text\": null,\n  \"amms\": null,\n  \"top_1000_amms\": null,\n  \"general_info\": null,\n  \"number_of_amms\": null,\n  \"number_of_lps\": null,\n  \"number_of_amms_tooltip\": null,\n  \"number_of_lps_tooltip\": null,\n  \"search_amms\": null,\n  \"tvl_tooltip\": null,\n  \"volume_24h_all_tooltip\": null\n}\n"
  },
  {
    "path": "public/locales/en-US/translations.json",
    "content": "{\n  \"action\": \"action\",\n  \"assets\": \"Assets\",\n  \"assets.no_nfts_message\": \"No NFTs found.\",\n  \"assets.no_mpts_message\": \"No MPTs found.\",\n  \"network\": \"Network\",\n  \"amendments\": \"Amendments\",\n  \"network_name\": \"Unknown Network\",\n  \"network_name_testnet\": \"Testnet\",\n  \"network_name_mainnet\": \"Mainnet\",\n  \"network_name_devnet\": \"Devnet\",\n  \"network_name_xahau_mainnet\": \"Xahau Mainnet\",\n  \"network_name_xahau_testnet\": \"Xahau Testnet\",\n  \"network_name_custom\": \"Custom\",\n  \"app.meta.description\": \"XRPL Network Explorer\",\n  \"app.meta.author\": \"Ripple\",\n  \"explorer\": \"Explorer\",\n  \"xrpl_org\": \"XRPL.org\",\n  \"github\": \"GitHub\",\n  \"header.search.placeholder\": \"Search by Token, Address, Ledger, Txn, VaultID or LedgerHash\",\n  \"xrp\": \"XRP\",\n  \"xrpl_explorer\": \"XRPL Explorer\",\n  \"ledgers\": \"Ledgers\",\n  \"ledger\": \"Ledger\",\n  \"taxon\": \"Taxon\",\n  \"token_id\": \"Token ID\",\n  \"token_transactions\": \"Token Transactions\",\n  \"transactions\": \"Transactions\",\n  \"transaction_short\": \"TX\",\n  \"nodes\": \"Nodes\",\n  \"validator\": \"Validator\",\n  \"validators\": \"Validators\",\n  \"upgrade_status\": \"Upgrade Status\",\n  \"version\": \"v{{number}}\",\n  \"component_error\": \"Something bad happened!\",\n  \"1H\": \"1H\",\n  \"24H\": \"24H\",\n  \"30D\": \"30D\",\n  \"total_transactions\": \"# of Txns\",\n  \"total_fees\": \"Total Fees\",\n  \"async_component_failed\": \"Failed to load Component\",\n  \"account_not_found\": \"Account not found\",\n  \"account_empty_title\": \"No account ID was supplied\",\n  \"account_empty_hint\": \"Enter an account ID in the search box\",\n  \"check_account_id\": \"Please check your account ID\",\n  \"accounts.xrp_balance\": \"XRP Balance\",\n  \"accounts.other_balances\": \"Other Balances\",\n  \"accounts.other_balances_short\": \"Other Bal.\",\n  \"amount\": \"Amount\",\n  \"currency_code\": \"Currency Code\",\n  \"currency_balance\": \"<0>{{currency}}</0> Balance\",\n  \"load_more_action\": \"Load more...\",\n  \"account_transactions\": \"Account Transactions\",\n  \"transaction_type\": \"Transaction Type\",\n  \"transaction_action_CANCEL\": \"Cancel\",\n  \"transaction_action_CREATE\": \"Create\",\n  \"transaction_action_FINISH\": \"Finish\",\n  \"transaction_action_MODIFY\": \"Modify\",\n  \"transaction_action_SEND\": \"Send\",\n  \"transaction_category_ACCOUNT\": \"Account\",\n  \"transaction_category_DEX\": \"Dex (AMM, Offers, Trust Sets, Tokens)\",\n  \"transaction_category_NFT\": \"NFT\",\n  \"transaction_category_PAYMENT\": \"Payment\",\n  \"transaction_category_PSEUDO\": \"Pseudo-Tx\",\n  \"transaction_category_XCHAIN\": \"XChain\",\n  \"transaction_category_OTHER\": \"Other\",\n  \"transaction_legend_toggle_hide\": \"Hide Legend\",\n  \"transaction_legend_toggle_show\": \"Show Legend\",\n  \"transactions.date_header\": \"Date/time (UTC)\",\n  \"no_transactions_message\": \"No transactions found.\",\n  \"get_vault_transactions_failed\": \"Unable to load vault transactions at this time.\",\n  \"retry_action\": \"Retry...\",\n  \"uh_oh\": \"UH-OH!\",\n  \"not_found_default_title\": \"Page Not Found\",\n  \"not_found_check_url\": \"Please double check your URL\",\n  \"not_found\": \"Not found\",\n  \"hash_not_found\": \"Could not find any Transactions, Vaults, Ledgers or NFTs that match the specified ID\",\n  \"buy\": \"Buy\",\n  \"sell\": \"Sell\",\n  \"price\": \"Price\",\n  \"ledger_index\": \"Ledger Index\",\n  \"to\": \"to\",\n  \"from\": \"from\",\n  \"request\": \"Request\",\n  \"terms\": \"Terms\",\n  \"send\": \"Send\",\n  \"delivered\": \"Delivered\",\n  \"cancel_offer\": \"Cancel Offer\",\n  \"convert_maximum\": \"Convert Max\",\n  \"convert_to\": \"Convert to\",\n  \"using_at_most\": \"Using at most\",\n  \"partial_payment_allowed\": \"partial payment allowed\",\n  \"set_limit\": \"Set Trust Limit\",\n  \"escrow\": \"escrow\",\n  \"cancel_escrow\": \"cancel escrow\",\n  \"finish_escrow\": \"finish escrow\",\n  \"escrow_amount\": \"escrow amount\",\n  \"escrow_destination\": \"escrow destination\",\n  \"escrow_transaction\": \"escrow txn\",\n  \"escrow_condition_short\": \"escrow condition\",\n  \"escrow_fulfillment\": \"escrow fulfillment\",\n  \"condition\": \"condition\",\n  \"fulfillment\": \"fulfillment\",\n  \"cancel_after\": \"cancel after\",\n  \"finish_after\": \"finish after\",\n  \"settle_delay\": \"Settlement Delay\",\n  \"channel_id\": \"Channel ID\",\n  \"seconds\": \"seconds\",\n  \"seconds_short\": \"sec.\",\n  \"regular_key\": \"regular key\",\n  \"unset_regular_key\": \"unset regular key\",\n  \"unset_signer_list\": \"unset signer list\",\n  \"set_flag\": \"set flag\",\n  \"clear_flag\": \"clear flag\",\n  \"email_hash\": \"email hash\",\n  \"message_key\": \"message key\",\n  \"out_of\": \"of\",\n  \"weight\": \"weight\",\n  \"the_account\": \"The account\",\n  \"create_payment_channel\": \"will create a payment channel to\",\n  \"destination_tag\": \"destination tag\",\n  \"source_tag\": \"source tag\",\n  \"channel_settle_delay\": \"The channel has a settlement delay of\",\n  \"the_channel_id_is\": \"The channel ID is\",\n  \"the_channel_amount_is\": \"The channel amount is\",\n  \"update_payment_channel\": \"It will update the payment channel\",\n  \"the_channel_balance_is\": \"The channel balance claimed is\",\n  \"amm_delete_description\": \"Attempted to delete the AMM for <Asset/> and <Asset2/>.\",\n  \"amm_delete_description_caveat\": \"If there were more than 512 trustlines, this only removes 512 trustlines instead.\",\n  \"payment_channel_closed_description\": \"The payment channel will be closed, any remaining balance will be returned to the source account\",\n  \"set_signer_list_description\": \"It sets the minimum signer quorum at {{quorum}} with the following list of signers\",\n  \"unset_signer_list_description\": \"It removed all signers from the account\",\n  \"transaction_initiated_by\": \"The transaction was initiated by\",\n  \"increase_channel_amount_by\": \"It will increase the channel amount by\",\n  \"channel_amount_increase\": \"channel amount increase\",\n  \"channel_amount\": \"channel amount\",\n  \"total_claimed\": \"total claimed\",\n  \"amount_claimed\": \"amount claimed\",\n  \"close_request\": \"close channel request\",\n  \"renew_channel\": \"renew chanel\",\n  \"payment_channel_closed\": \"payment channel closed\",\n  \"paychannel_node_line1\": \"It <1><0>{{action}}</0></1> a PayChannel node from <3><0>{{account}}</0></3> to <5><0>{{counterAccount}}</0></5>\",\n  \"paychannel_amount_changed\": \"Amount changed by <1><0>{{difference}}</0><1><0>{{currency}}</0></1></1> from <3><0>{{previous}}</0><1><0>{{currency}}</0></1></3> to <5><0>{{final}}</0><1><0>{{currency}}</0></1></5>\",\n  \"paychannel_balance_changed\": \"Balance changed by <1><0>{{difference}}</0><1><0>{{currency}}</0></1></1> from <3><0>{{previous}}</0><1><0>{{currency}}</0></1></3> to <5><0>{{final}}</0><1><0>{{currency}}</0></1></5>\",\n  \"setfee_fees_description\": \"Future transactions will require a minimum fee of <amount />.\",\n  \"setfee_reserves_description\": \"Accounts must now hold a base of <base /> and an additional <increment /> for each additional object that account owns.\",\n  \"setfee_docs_description\": \"Visit the docs: <0>Fees</0>\",\n  \"setfee_base_fee\": \"Base Fee\",\n  \"setfee_reserve\": \"Reserve\",\n  \"setfee_reserve_increment\": \"Reserve Increment\",\n  \"formatted_date\": \"Date/Time ({{timeZone}})\",\n  \"transaction_type_name_AMMCreate\": \"AMM Create\",\n  \"transaction_type_name_AMMDelete\": \"AMM Delete\",\n  \"transaction_type_name_AMMDeposit\": \"AMM Deposit\",\n  \"transaction_type_name_AMMWithdraw\": \"AMM Withdraw\",\n  \"transaction_type_name_AMMVote\": \"AMM Vote\",\n  \"transaction_type_name_AMMBid\": \"AMM Bid\",\n  \"transaction_type_name_AMMClawback\": \"AMMClawback\",\n  \"transaction_type_name_AccountSet\": \"Account Set\",\n  \"transaction_type_name_Batch\": \"Batch\",\n  \"transaction_type_name_CheckCancel\": \"Check Cancel\",\n  \"transaction_type_name_CheckCash\": \"Check Cash\",\n  \"transaction_type_name_CheckCreate\": \"Check Create\",\n  \"transaction_type_name_CredentialAccept\": \"Credential Accept\",\n  \"transaction_type_name_CredentialCreate\": \"Credential Create\",\n  \"transaction_type_name_CredentialDelete\": \"Credential Delete\",\n  \"transaction_type_name_DelegateSet\": \"Delegate Set\",\n  \"transaction_type_name_DIDDelete\": \"DID Delete\",\n  \"transaction_type_name_DIDSet\": \"DID Set\",\n  \"transaction_type_name_DepositPreauth\": \"Deposit Preauth\",\n  \"transaction_type_name_Error_Cases\": \"Error Cases\",\n  \"transaction_type_name_EscrowCancel\": \"Escrow Cancel\",\n  \"transaction_type_name_EscrowCreate\": \"Escrow Create\",\n  \"transaction_type_name_EscrowFinish\": \"Escrow Finish\",\n  \"transaction_type_name_Invoke\": \"Invoke\",\n  \"transaction_type_name_LoanBrokerSet\": \"Loan Broker Set\",\n  \"transaction_type_name_LoanBrokerDelete\": \"Loan Broker Delete\",\n  \"transaction_type_name_LoanBrokerCoverDeposit\": \"Loan Broker Cover Deposit\",\n  \"transaction_type_name_LoanBrokerCoverWithdraw\": \"Loan Broker Cover Withdraw\",\n  \"transaction_type_name_LoanBrokerCoverClawback\": \"Loan Broker Cover Clawback\",\n  \"transaction_type_name_LoanSet\": \"Loan Set\",\n  \"transaction_type_name_LoanDelete\": \"Loan Delete\",\n  \"transaction_type_name_LoanManage\": \"Loan Manage\",\n  \"transaction_type_name_LoanPay\": \"Loan Pay\",\n  \"transaction_type_name_MPTokenIssuanceCreate\": \"MPT Issuance Create\",\n  \"transaction_type_name_MPTokenIssuanceDestroy\": \"MPT Issuance Destroy\",\n  \"transaction_type_name_MPTokenIssuanceSet\": \"MPT Issuance Set\",\n  \"transaction_type_name_MPTokenAuthorize\": \"MPT Authorize\",\n  \"transaction_type_name_NFTokenAcceptOffer\": \"NFT Accept Offer\",\n  \"transaction_type_name_NFTokenBurn\": \"NFT Burn\",\n  \"transaction_type_name_NFTokenCancelOffer\": \"NFT Cancel Offer\",\n  \"transaction_type_name_NFTokenCreateOffer\": \"NFT Create Offer\",\n  \"transaction_type_name_NFTokenMint\": \"NFT Mint\",\n  \"transaction_type_name_OfferCancel\": \"Offer Cancel\",\n  \"transaction_type_name_OfferCreate\": \"Offer Create\",\n  \"transaction_type_name_OracleDelete\": \"Oracle Delete\",\n  \"transaction_type_name_OracleSet\": \"Oracle Set\",\n  \"transaction_type_name_Payment\": \"Payment\",\n  \"transaction_type_name_PaymentChannelClaim\": \"Payment Channel Claim\",\n  \"transaction_type_name_PaymentChannelCreate\": \"Payment Channel Create\",\n  \"transaction_type_name_PaymentChannelFund\": \"Payment Channel Fund\",\n  \"transaction_type_name_PermissionedDomainDelete\": \"Permissioned Domain Delete\",\n  \"transaction_type_name_PermissionedDomainSet\": \"Permissioned Domain Set\",\n  \"transaction_type_name_SetHook\": \"Set Hook\",\n  \"transaction_type_name_SetRegularKey\": \"Set Regular Key\",\n  \"transaction_type_name_SignerListSet\": \"Signer List Set\",\n  \"transaction_type_name_TicketCreate\": \"Ticket Create\",\n  \"transaction_type_name_TrustSet\": \"Trust Set\",\n  \"transaction_type_name_VaultCreate\": \"Vault Create\",\n  \"transaction_type_name_VaultSet\": \"Vault Set\",\n  \"transaction_type_name_VaultDeposit\": \"Vault Deposit\",\n  \"transaction_type_name_VaultWithdraw\": \"Vault Withdraw\",\n  \"transaction_type_name_VaultClawback\": \"Vault Clawback\",\n  \"transaction_type_name_VaultDelete\": \"Vault Delete\",\n  \"transaction_type_name_XChainAccountCreateCommit\": \"XChain Account Create Commit\",\n  \"transaction_type_name_XChainAddAccountCreateAttestation\": \"XChain Add Account Create Attestation\",\n  \"transaction_type_name_XChainAddClaimAttestation\": \"XChain Add Claim Attestation\",\n  \"transaction_type_name_XChainClaim\": \"XChain Claim\",\n  \"transaction_type_name_XChainCommit\": \"XChain Commit\",\n  \"transaction_type_name_XChainCreateBridge\": \"XChain Create Bridge\",\n  \"transaction_type_name_XChainCreateClaimID\": \"XChain Create Claim ID\",\n  \"transaction_type_name_XChainModifyBridge\": \"XChain Modify Bridge\",\n  \"transaction_type_name_EnableAmendment\": \"Enable Amendment\",\n  \"transaction_type_name_SetFee\": \"Set Fee\",\n  \"transaction_type_name_UNLModify\": \"UNL Modify\",\n  \"transaction_type_name_AccountDelete\": \"Account Delete\",\n  \"generic_error\": \"Something bad happened\",\n  \"not_your_fault\": \"It's probably not your fault\",\n  \"come_back_later\": \"It will be available soon\",\n  \"invalid_ledger_id\": \"The ledger id is invalid\",\n  \"invalid_transaction_hash\": \"The transaction hash is invalid\",\n  \"ledger_not_found\": \"Ledger not Found\",\n  \"check_ledger_id\": \"Please check your ledger id\",\n  \"server_ledgers_hint\": \"This node ({{connection.server.publicKey, truncate(length: 10)}}) only contains ledgers {{connection.ledger.validated}}\",\n  \"use_search\": \"Please use our search\",\n  \"ledger_has_no_trans\": \"This ledger does not have any transactions\",\n  \"less_than\": \"Less than\",\n  \"transaction_not_found\": \"Transaction not found\",\n  \"transaction_empty_title\": \"No transaction hash supplied\",\n  \"transaction_empty_hint\": \"Enter a transaction hash in the search box\",\n  \"validator_not_found\": \"Validator not found\",\n  \"check_transaction_hash\": \"Please check your transaction hash or CTID.\",\n  \"wrong_network\": \"This CTID applies to a different network.\",\n  \"check_validator_key\": \"Please check your validator key\",\n  \"transaction\": \"Transaction\",\n  \"success\": \"Success\",\n  \"fail\": \"Fail\",\n  \"simple\": \"Simple\",\n  \"detailed\": \"Detailed\",\n  \"details\": \"Details\",\n  \"history\": \"History\",\n  \"voting\": \"Voting\",\n  \"raw\": \"Raw\",\n  \"expand\": \"Expand\",\n  \"collapse\": \"Collapse\",\n  \"try_detailed_raw\": \"Try `Detailed` or `Raw` view\",\n  \"account\": \"Account\",\n  \"transaction_cost\": \"Transaction Cost\",\n  \"transaction_cost_short\": \"Txn. Cost\",\n  \"sequence_number\": \"Sequence Number\",\n  \"sequence_number_short\": \"Sequence #\",\n  \"serial\": \"Serial\",\n  \"n_a\": \"N/A\",\n  \"memos\": \"Memos\",\n  \"flags\": \"Flags\",\n  \"status\": \"Status\",\n  \"successful_transaction\": \"This transaction was successful\",\n  \"fail_transaction\": \"This transaction failed with a status code of <0>{{code}}</0>\",\n  \"transaction_validated\": \", and validated in ledger \",\n  \"on\": \" on \",\n  \"description\": \"Description\",\n  \"signers\": \"Signers\",\n  \"decoded_hex\": \"decoded hex\",\n  \"transaction_consumed_fee\": \"Sending this transaction consumed\",\n  \"meta\": \"Meta\",\n  \"number_of_affected_node\": \"It affected {{count}} nodes in the ledger:\",\n  \"nodes_type\": \"{{action}} nodes\",\n  \"node_meta_type\": \"It {{action}} a node with type\",\n  \"transaction_balance_line_one\": \"It <1><0>{{action}}</0></1> a <4><0>{{currency}}</0></4> RippleState node between <6><0>{{account}}</0></6> and <8><0>{{counterAccount}}</0></8>\",\n  \"transaction_balance_line_two\": \"Balance changed by <1><0>{{change}}</0></1> from <3><0>{{previousBalance}}</0></3> to <5><0>{{finalBalance}}</0></5>\",\n  \"transaction_outstanding_balance_line_two\": \"Outstanding balance changed by <1><0>{{change}}</0></1> from <3><0>{{previousBalance}}</0></3> to <5><0>{{finalBalance}}</0></5>\",\n  \"transaction_owned_directory\": \"It {{action}} a DirectoryNode node owned by\",\n  \"transaction_unowned_directory\": \"It {{action}} a DirectoryNode node\",\n  \"transaction_mptoken_line_one\": \"It <1><0>{{action}}</0></1> an MPToken node of <3><0>{{account}}</0></3>\",\n  \"transaction_mpt_issuance_line_one\": \"It <1><0>{{action}}</0></1> an MPTokenIssuance node of <3><0>{{account}}</0></3>\",\n  \"owned_account_root\": \"It {{action}} the AccountRoot node of\",\n  \"unowned_account_root\": \"It {{action}} the AccountRoot node\",\n  \"account_balance_increased\": \"Balance increased by <1><0>{{difference}}</0><1><0>{{currency}}</0></1></1> from <3><0>{{previous}}</0><1><0>{{currency}}</0></1></3> to <5><0>{{final}}</0><1><0>{{currency}}</0></1></5>\",\n  \"account_balance_decreased\": \"Balance decreased by <1><0>{{difference}}</0><1><0>{{currency}}</0></1></1> from <3><0>{{previous}}</0><1><0>{{currency}}</0></1></3> to <5><0>{{final}}</0><1><0>{{currency}}</0></1></5>\",\n  \"decreased_from_to\": \"decreased by <1><0>{{change}}</0></1> from <3><0>{{previous}}</0></3> to <5><0>{{final}}</0></5>\",\n  \"offer_node_meta\": \"It {{action}} a <Currency/> / <Currency2/> offer node owned by <Account/> with sequence # {{sequence}}\",\n  \"offer_replaces\": \"This offer replaces the existing offer #\",\n  \"offer_partially_filled\": \"The offer was partially filled.\",\n  \"offer_filled\": \"The offer was filled.\",\n  \"offer_cancelled\": \"The offer was cancelled.\",\n  \"offer_replaced\": \"This offer was replaced by the new offer #\",\n  \"offer_lack_of_funds\": \"The offer was partially filled, then cancelled due to lack of funds.\",\n  \"transaction_sequence\": \"The transaction's sequence number is\",\n  \"trust_set_description\": \"It establishes <1><0>{{amount}}</0></1> as the maximum amount of <3><0>{{currency}}</0></3> from <5><0>{{issuer}}</0></5> that <7><0>{{account}}</0></7> is willing to hold\",\n  \"payment_desc_line_1\": \"The payment is from <source/> to <destination/>\",\n  \"the_source_tag_is\": \"The source tag is \",\n  \"the_destination_tag_is\": \"The destination tag is\",\n  \"payment_desc_line_4\": \"It was instructed to deliver\",\n  \"payment_desc_line_5\": \"by spending up to\",\n  \"payment_desc_line_6\": \"The actual amount delivered was\",\n  \"offer_cancel_description\": \"The transaction will cancel the account's existing offer #\",\n  \"offer_create_desc_line_1\": \"The account <1><0>{{account}}</0></1>  offered to pay <3><0>{{takerGets}}</0><1><0>{{currency}}</0></1></3> in order to receive <5><0>{{takerPays}}</0><1><0>{{currency}}</0></1></5>\",\n  \"offer_create_desc_line_2\": \"The exchange rate for this offer is\",\n  \"offer_create_desc_line_3\": \"The transaction will also cancel the account's existing offer #\",\n  \"offer_create_desc_line_5\": \"This Offer is applicable to the Permissioned Domain\",\n  \"offer_will_expire_desc\": \"The offer expires on <1><0>{{date}}</0></1> unless canceled or consumed before then\",\n  \"offer_did_expire_desc\": \"The offer expired on <1><0>{{date}}</0></1> unless cancelled or consumed before then\",\n  \"escrow_is_from\": \"The escrow is from <1><0>{{account}}</0></1> to <3><0>{{destination}}</0></3>\",\n  \"escrow_is_created_by\": \"The escrow was created by <1><0>{{account}}</0></1> and the funds will be returned to the same account\",\n  \"escrowed_amount\": \"It escrowed\",\n  \"escrow_condition\": \"The escrow has a fulfillment condition of\",\n  \"describe_cancel_after\": \"It can be cancelled after\",\n  \"describe_finish_after\": \"It can be finished after\",\n  \"escrow_completion_desc\": \"Completion was triggered by\",\n  \"escrow_completion_desc_2\": \"The escrowed amount of <1><0>{{amount}}</0></1> was delivered to <3><0>{{destination}}</0></3>\",\n  \"escrow_finish_fulfillment_desc\": \"The escrow condition is fulfilled by\",\n  \"escrow_cancellation_desc\": \"Cancellation was triggered by\",\n  \"escrow_cancellation_desc_2\": \"The escrowed amount of <1><0>{{amount}}</0></1> was returned to <3><0>{{owner}}</0></3>\",\n  \"escrow_after_transaction_cost\": \"after transaction cost\",\n  \"escrow_created_by_desc\": \"The escrow was created by <1><0>{{account}}</0></1> with transaction <3><0>{{transaction}}</0></3>\",\n  \"set_regular_key_description\": \"It sets the account's regular key to\",\n  \"unset_regular_key_description\": \"It removes the account's regular key\",\n  \"set_flag_description\": \"It sets the account flag\",\n  \"clear_flag_description\": \"It clears the account flag\",\n  \"set_domain_description\": \"It sets the account domain as\",\n  \"set_email_description\": \"It sets the account email hash as\",\n  \"set_message_key_description\": \"It sets the account message key as\",\n  \"set_nftoken_minter_description\": \"It sets <0>{{account}}</0> as the authorized minter for this account\",\n  \"deposit_auth\": \"It authorizes <1><0>{{account}}</0></1> to send payments to this account\",\n  \"deposit_unauth\": \"It removes the authorization for <1><0>{{account}}</0></1> to send payments to this account\",\n  \"deposit_auth_credentials\": \"It authorizes the following credentials:\",\n  \"deposit_unauth_credentials\": \"It removes the authorization for the following credentials:\",\n  \"invalid_xrpl_address\": \"Invalid XRPL address\",\n  \"loading\": \"Loading\",\n  \"get_ledger_failed\": \"Unable to load ledger\",\n  \"get_transaction_failed\": \"Unable to load transaction\",\n  \"get_validator_failed\": \"Unable to load validator\",\n  \"get_account_state_failed\": \"Unable to load account state\",\n  \"get_account_transactions_failed\": \"Unable to load account transactions\",\n  \"get_account_transactions_try\": \"Try loading more transactions\",\n  \"pubkey\": \"pubkey\",\n  \"node_pubkey\": \"node pubkey\",\n  \"ip\": \"ip\",\n  \"state\": \"state\",\n  \"rippled_version\": \"version\",\n  \"last_ledger\": \"last ledger\",\n  \"uptime\": \"uptime\",\n  \"peers\": \"peers\",\n  \"in_out\": \"(in:out)\",\n  \"ledger_history\": \"ledger history\",\n  \"quorum\": \"quorum\",\n  \"load\": \"load\",\n  \"latency\": \"latency\",\n  \"amendment_id\": \"id\",\n  \"amendment_name\": \"name\",\n  \"voters\": \"voters\",\n  \"threshold\": \"threshold\",\n  \"consensus\": \"consensus\",\n  \"enabled\": \"enabled\",\n  \"disabled\": \"disabled\",\n  \"on_tx\": \"on (tx)\",\n  \"yes\": \"Yes\",\n  \"no\": \"No\",\n  \"deprecated\": \"deprecated\",\n  \"domain\": \"domain\",\n  \"unl\": \"unl\",\n  \"fee\": \"fee\",\n  \"ledger_interval\": \"avg. ledger interval\",\n  \"load_fee\": \"load fee\",\n  \"txn_sec\": \"txn/sec.\",\n  \"txn_ledger\": \"avg. txn/ledger\",\n  \"avg_fee\": \"Avg. Txn Fee\",\n  \"txn_count\": \"txn count\",\n  \"nUnlCol\": \"nUNL\",\n  \"nUnl\": \"VALIDATORS ON nUNL\",\n  \"fees\": \"fees\",\n  \"total\": \"total\",\n  \"missing\": \"missing\",\n  \"authorize\": \"authorize\",\n  \"unauthorize\": \"unauthorize\",\n  \"missed_validations\": \"{{count}} missed validations\",\n  \"incomplete\": \"incomplete\",\n  \"base_fee\": \"Base Fee\",\n  \"account_reserve\": \"Account Reserve\",\n  \"object_reserve\": \"Object Reserve\",\n  \"vote\": \"Vote\",\n  \"no_amendment_in_voting\": \"There is no amendment in voting for this network at the moment.\",\n  \"required\": \"required\",\n  \"source\": \"source\",\n  \"destination\": \"destination\",\n  \"claimed\": \"claimed\",\n  \"remaining\": \"remaining\",\n  \"inbound_total\": \"inbound total\",\n  \"outbound_total\": \"outbound total\",\n  \"payment_channels\": \"payment channels\",\n  \"available_in\": \"available in\",\n  \"channels\": \"channels\",\n  \"account_info\": \"account info\",\n  \"reserve\": \"reserve\",\n  \"current_sequence\": \"current sequence\",\n  \"escrows\": \"escrows\",\n  \"nodes_found\": \"nodes found\",\n  \"unmapped\": \"unmapped\",\n  \"validators_found\": \"validators found\",\n  \"pause\": \"pause\",\n  \"resume\": \"resume\",\n  \"flag_ledger\": \"Flag Ledger\",\n  \"ticket\": \"Ticket\",\n  \"ticket_sequence\": \"Ticket Sequence\",\n  \"ticket_count\": \"Ticket Count\",\n  \"ticket_used\": \"a Ticket was used for this Transaction\",\n  \"token\": \"Token\",\n  \"tokens\": \"Tokens\",\n  \"total_issuers\": \"Total Issuers\",\n  \"total_tokens\": \"Total Tokens\",\n  \"top_trading_pairs\": \"Top Trading Pairs\",\n  \"issuer_address\": \"Issuer Address\",\n  \"obligations\": \"Obligations\",\n  \"settings\": \"Settings\",\n  \"rank\": \"Rank\",\n  \"market_cap\": \"Market Cap\",\n  \"volume_24h\": \"Volume (24H)\",\n  \"no_tokens_message\": \"No tokens found.\",\n  \"no_pairs_message\": \"No trading pairs found\",\n  \"high\": \"High\",\n  \"low\": \"Low\",\n  \"rank_message\": \"Tokens are ranked by number of trustlines.\",\n  \"obligations_message\": \"Obligations are the total amounts of each token issued to addresses\",\n  \"issuer\": \"Issuer\",\n  \"pair\": \"Pair\",\n  \"asset_pair\": \"Asset Pair\",\n  \"offer_range\": \"Offer Range\",\n  \"custom_network\": \"Custom Network\",\n  \"custom_network_input_help\": \"Enter custom network URL to access network's data.\",\n  \"custom_network_input\": \"Type in URL of custom network\",\n  \"custom_networks\": \"Custom Networks\",\n  \"no_network_selected\": \"No Custom Network Selected\",\n  \"locking_chain_door\": \"Locking Chain Door\",\n  \"locking_chain_issue\": \"Locking Chain Issue\",\n  \"issuing_chain_door\": \"Issuing Chain Door\",\n  \"issuing_chain_issue\": \"Issuing Chain Issue\",\n  \"signature_reward\": \"Signature Reward\",\n  \"min_account_create_amount\": \"Minimum Account Creation Amount\",\n  \"other_chain_source\": \"Other Chain Source\",\n  \"xchain_claim_id\": \"XChain Claim ID\",\n  \"check_nft_id\": \"Please check your NFT ID\",\n  \"get_nft_state_failed\": \"Unable to load NFT\",\n  \"minted\": \"Minted\",\n  \"taxon_id\": \"Taxon ID\",\n  \"transfer_fee\": \"Transfer Fee\",\n  \"burnable\": \"Burnable\",\n  \"only_xrp\": \"Only XRP\",\n  \"transferable\": \"Transferable\",\n  \"buy_offers\": \"Buy Offers\",\n  \"sell_offers\": \"Sell Offers\",\n  \"offer_index\": \"Offer ID\",\n  \"no_sell_offers\": \"No sell offers\",\n  \"no_buy_offers\": \"No buy offers\",\n  \"validator_history.chain\": \"Chain\",\n  \"validator_history.date\": \"Date (UTC)\",\n  \"validator_history.missed\": \"Missed\",\n  \"validator_history.score\": \"Score\",\n  \"seller\": \"Seller\",\n  \"buyer\": \"Buyer\",\n  \"offerer\": \"Offerer\",\n  \"token_taxon\": \"Token Taxon\",\n  \"uri\": \"URI\",\n  \"owner\": \"Owner\",\n  \"other_chain_destination\": \"Other Chain Destination\",\n  \"%_of_total_nodes_validators\": \"% of Total Nodes & Validators\",\n  \"version_display\": \"Version: {{version}}\",\n  \"validator_count\": \"# of Validators: {{val_count}}\",\n  \"node_count\": \"# of Nodes: {{node_count}}\",\n  \"current_stable_version\": \"Current Stable Version\",\n  \"stable_version\": \"{{stableVersion}}\",\n  \"nftoken_minter\": \"NFT Minter\",\n  \"is_burned\": \"Burned\",\n  \"fee_rate\": \"Fee Rate\",\n  \"last_affecting_transaction\": \"Last affecting tx\",\n  \"Version\": \"Version\",\n  \"increased_by\": \"increased by\",\n  \"trading_fee\": \"Trading Fee\",\n  \"tvl\": \"TVL\",\n  \"account_address\": \"Account Address\",\n  \"asset1\": \"Asset 1\",\n  \"asset2\": \"Asset 2\",\n  \"asset1out\": \"Asset 1 Out\",\n  \"asset2out\": \"Asset 2 Out\",\n  \"asset1in\": \"Asset 1 In\",\n  \"asset2in\": \"Asset 2 In\",\n  \"effective_price\": \"Effective Price\",\n  \"amm_account_id\": \"AMM Account ID\",\n  \"lp_tokens\": \"LP Tokens\",\n  \"min_slot_price\": \"Minimum Slot Price\",\n  \"max_slot_price\": \" Maximum Slot Price\",\n  \"auth_accounts\": \"Authorized Accounts\",\n  \"network_cannot_be_crawled\": \"This network cannot be crawled\",\n  \"check_crawl_existed\": \"Please contact the operator to make sure they have /crawl accessible or a vl set.\",\n  \"peer_crawled_context\": \"For more context, see https://xrpl.org/peer-crawler.html\",\n  \"xchainbridge\": \"XChainBridge\",\n  \"xchain_account_claim_count\": \"XChain Account Claim Count\",\n  \"xchain_account_create_count\": \"XChain Account Create Count\",\n  \"min_signer_quorum\": \"Minimum weight <0>{{quorum}}</0> required\",\n  \"holder\": \"Holder\",\n  \"action_from\": \"<0><0>{{action}}</0></0> <1><0>{{amount}}</0></1> from <3><0>{{destination}}</0></3>\",\n  \"action_from_and\": \"<0><0>{{action}}</0></0> <1><0>{{amount1}}</0></1> and <3><0>{{amount2}}</0></3> from <5><0>{{destination}}</0></5>\",\n  \"claws_back\": \"Claws back\",\n  \"claws_back_from\": \"<source/> claws back from <destination/>\",\n  \"instruct_to_claw\": \"The max clawback amount is <amount/>\",\n  \"hook\": \"Hook\",\n  \"hooks\": \"Hooks\",\n  \"hook_emitted\": \"this Transaction was emitted by a Hook\",\n  \"emit_details\": \"Emit Details\",\n  \"hook_parameters\": \"Hook Parameters\",\n  \"hook_executions\": \"Hook Executions\",\n  \"emit_generation\": \"Number {{emit}} in the line of generated transactions\",\n  \"emit_hook_hash\": \"Emitted by the hook {{hash}}\",\n  \"emit_parent\": \"Emitted by a hook triggered by <0>{{hash}}</0>\",\n  \"emit_callback\": \"The emit callback is <0>{{callback}}<0>\",\n  \"hook_exec_hash\": \"It triggered the hook {{hash}}\",\n  \"hook_exec_account\": \"On the account <0>{{account}}</0>\",\n  \"hook_exec_return\": \"Returned the code {{code}} with string \\\"{{string}}\\\"\",\n  \"hook_exec_emit_count\": \"Emitted {{count}} transactions\",\n  \"hash\": \"Hash\",\n  \"grant\": \"Grant\",\n  \"namespace\": \"Namespace\",\n  \"api_version\": \"API Version\",\n  \"triggered_on\": \"Triggered On\",\n  \"name\": \"name\",\n  \"introduced_in\": \"Introduced In\",\n  \"yeas\": \"yeas\",\n  \"nays\": \"nays\",\n  \"eta\": \"eta\",\n  \"amendment_summary\": \"Amendment Summary\",\n  \"not\": \"not\",\n  \"enable_tx\": \"Enable tx\",\n  \"all\": \"all\",\n  \"yeas_count\": \"# of Yea Votes: {{yeas_count}}\",\n  \"nays_count\": \"# of Nay Votes: {{nays_count}}\",\n  \"yeas_percent\": \"% of Yea Votes: {{yeas_percent}}%\",\n  \"nays_percent\": \"% of Nay Votes: {{nays_percent}}%\",\n  \"%_of_validators\": \"% of Validators\",\n  \"amendment_not_found\": \"Amendment not found\",\n  \"check_amendment_key\": \"Please check your amendment key\",\n  \"did_document\": \"DID Document\",\n  \"attestation\": \"Attestation\",\n  \"note\": \"Note\",\n  \"indicate_unl\": \"indicates a validator on an UNL\",\n  \"transaction_tokens_involved\": \"<Currency/> and <Currency2/>\",\n  \"transaction_tokens_swapped\": \"<Currency/> for <Currency2/>\",\n  \"oracle_document_id\": \"Oracle Document ID\",\n  \"provider\": \"Provider\",\n  \"last_update_time\": \"Last Update Time\",\n  \"asset_class\": \"Asset Class\",\n  \"trading_pairs\": \"Trading Pairs\",\n  \"deleted\": \"Deleted\",\n  \"holders_count\": \"HOLDERS: {{holders}}\",\n  \"trustlines\": \" TRUSTLINES: {{trustlines}}\",\n  \"website\": \"Website\",\n  \"mpt_issuance_id\": \"MPT Issuance ID\",\n  \"asset_scale\": \"Asset Scale\",\n  \"metadata\": \"Metadata\",\n  \"max_amount\": \"Max Amount\",\n  \"mpt_holder\": \"MPT Holder\",\n  \"check_mpt_id\": \"Please check your MPT Issuance ID\",\n  \"outstanding_amount\": \"Issued Amount\",\n  \"locked\": \"Locked\",\n  \"can_lock\": \"Can Lock\",\n  \"require_auth\": \"Require Auth\",\n  \"can_escrow\": \"Can Escrow\",\n  \"can_trade\": \"Can Trade\",\n  \"can_transfer\": \"Can Transfer\",\n  \"can_clawback\": \"Can Clawback\",\n  \"enable_amendment_name\": \"Amendment Name\",\n  \"amendment_status\": \"Amendment Status\",\n  \"expected_date\": \"Expected Date\",\n  \"base\": \"Base\",\n  \"credential_type\": \"Credential Type\",\n  \"credential_issuer\": \"Credential Issuer\",\n  \"subject\": \"Subject\",\n  \"expiration\": \"Expiration\",\n  \"domain_id\": \"Domain ID\",\n  \"accepted_credentials\": \"Accepted Credentials\",\n  \"credential_ids\": \"Credential IDs\",\n  \"data\": \"Data\",\n  \"finish_function\": \"Finish Function\",\n  \"quorum_description\": \"Min. number of trusted validations needed to confirm a ledger\",\n  \"avg_fee_description\": \"Avg. transaction fee across the past 50 ledgers\",\n  \"ledger_interval_description\": \"Avg. time between ledger closures over the past 50 ledgers\",\n  \"txn_ledger_description\": \"Avg. number of transactions per ledger over the past 50 ledgers\",\n  \"txn_sec_description\": \"Total transactions over the past 50 ledgers divided by the time it took to close them\",\n  \"load_fee_description\": \"Current reference transaction cost (base fee) for this ledger version\",\n  \"nUnl_description\": \"No. of validators in NegativeUNL (nUNL)\",\n  \"computation_allowance\": \"Computation Allowance\",\n  \"gas\": \"Gas\",\n  \"delegate\": \"Delegate\",\n  \"permissions\": \"Permissions\",\n  \"pertaining_to_the_Permissioned_Domain\": \"pertaining to the Permissioned Domain\",\n  \"tx_delegated_to\": \"The transaction is delegated to <Account/>\",\n  \"account_delegates_to\": \"<Account/> delegates <Permissions/> permissions to <Authorize/>\",\n  \"delegate_to\": \"<DelegateLabel/> <Permissions/> permissions to <Account/>\",\n  \"volume\": \"Volume\",\n  \"holders\": \"Holders\",\n  \"trades\": \"Trades\",\n  \"no_of_tokens\": \"# of Tokens\",\n  \"volume_24h_total\": \"DEX Traded Volume (24H)\",\n  \"volume_24h_total_description\": \"Total USD value of trades on the DEX in the past 24h\",\n  \"market_cap_metric_description\": \"Circulating supply multiplied by price of all tokens\",\n  \"market_cap_description\": \"Circulating supply multiplied by price\",\n  \"24h_description\": \"Price change over the past 24h\",\n  \"volume_description\": \"Total USD value of all DEX trades in the past 24h\",\n  \"trades_description\": \"Number of DEX trades executed in the past 24h\",\n  \"tvl_description\": \"USD value of token in AMMs\",\n  \"stablecoin_description\": \"Market cap of all tokens classified as stablecoins\",\n  \"stablecoin\": \"Stablecoin\",\n  \"wrapped\": \"Wrapped\",\n  \"tokens_footnote\": \"*This table includes only tokens with XRPL Meta trust levels 1-3. Learn more in <Link/>.\",\n  \"xrplmeta_guidelines\": \"XRPL Meta's guidelines\",\n  \"inner_transaction\": \"Inner Transaction\",\n  \"batch_table_detail_count\": \"<BatchLabel/> {{batch_count}} transactions\",\n  \"batch_table_detail_list\": \"Applied Inner Transactions: <TxList/>\",\n  \"batch_description\": \"Batch Signers: <SignerList/>\",\n  \"batch\": \"Batch\",\n  \"successful\": \"Successful\",\n  \"failed\": \"Failed (<Status/>)\",\n  \"not-validated\": \"Not Validated\",\n  \"asset\": \"Asset\",\n  \"assets_maximum\": \"Assets Maximum\",\n  \"mptoken_metadata\": \"MPToken Metadata\",\n  \"withdrawal_policy\": \"Withdrawal Policy\",\n  \"account_creates_vault\": \"<Account/> created a vault for <Asset/>\",\n  \"vault_id\": \"Vault ID\",\n  \"single_asset_vault\": \"Single Asset Vault\",\n  \"loan_broker_id\": \"Loan Broker ID\",\n  \"loan_id\": \"Loan ID\",\n  \"management_fee_rate\": \"Management Fee Rate\",\n  \"debt_maximum\": \"Debt Maximum\",\n  \"cover_rate_minimum\": \"Cover Rate Minimum\",\n  \"cover_rate_liquidation\": \"Cover Rate Liquidation\",\n  \"counterparty\": \"Counterparty\",\n  \"principal_requested\": \"Principal Requested\",\n  \"payment_total\": \"Payment Total\",\n  \"payment_interval\": \"Payment Interval\",\n  \"grace_period\": \"Grace Period\",\n  \"loan_origination_fee\": \"Loan Origination Fee\",\n  \"loan_service_fee\": \"Loan Service Fee\",\n  \"late_payment_fee\": \"Late Payment Fee\",\n  \"close_payment_fee\": \"Close Payment Fee\",\n  \"full_payment_fee\": \"Full Payment Fee\",\n  \"overpayment_fee\": \"Overpayment Fee\",\n  \"interest_rate\": \"Interest Rate\",\n  \"late_interest_rate\": \"Late Interest Rate\",\n  \"close_interest_rate\": \"Close Interest Rate\",\n  \"overpayment_interest_rate\": \"Overpayment Interest Rate\",\n  \"set_vault_data\": \"It sets the Vault Data to <Data/>\",\n  \"set_vault_assets_maximum\": \"It sets the Vault Assets Maximum to <AssetsMaximum/>\",\n  \"set_vault_domain_id\": \"It sets the Vault DomainID to <DomainID/>\",\n  \"account_deposits_into_vault\": \"<Account/> deposits <Amount/> into Vault ID <VaultID/>\",\n  \"account_withdraws_from_vault\": \"<Account/> withdraws <Amount/> from Vault ID <VaultID/><Destination/>\",\n  \"account_clawbacks_from_vault\": \"<Account/> clawbacks<Amount/> from <Holder/>\",\n  \"account_clawbacks_from_vault_amount_omitted\": \"<Account/> clawbacks all remaining funds from <Holder/>\",\n  \"account_deletes_vault\": \"<Account/> deleted a vault with ID <VaultID/>\",\n  \"vault_create_table_detail\": \"vault for <Asset/>\",\n  \"withdraws\": \"withdraws\",\n  \"deletes\": \"deletes\",\n  \"vault_delete_table_detail\": \"vault with id\",\n  \"account_flag_title_lsf_global_freeze\": \"Global Freeze\",\n  \"account_flag_title_lsf_disable_master\": \"Master Key Disabled\",\n  \"account_flag_title_lsf_default_ripple\": \"Rippling\",\n  \"account_flag_title_lsf_allow_trustline_clawback\": \"Clawback\",\n  \"account_flag_title_lsf_allow_trustline_locking\": \"Escrow\",\n  \"account_flag_title_lsf_require_destination_tag\": \"Require Destination Tag\",\n  \"account_flag_title_lsf_no_freeze\": \"No Freeze\",\n  \"account_flag_title_lsf_require_auth\": \"Require Authorization\",\n  \"account_flag_title_lsf_disallow_xrp\": \"No XRP Allowed\",\n  \"account_flag_title_lsf_disallow_incoming_trustline\": \"Block Trustlines\",\n  \"account_flag_title_lsf_disallow_incoming_pay_chan\": \"Block Payment Channels\",\n  \"account_flag_title_lsf_disallow_incoming_nft_token_offer\": \"Block NFT Offers\",\n  \"account_flag_title_asf_authorized_nft_token_minter\": \"NFT Minter\",\n  \"account_flag_title_lsf_disallow_incoming_check\": \"Block Checks\",\n  \"account_flag_title_lsf_deposit_auth\": \"Deposit Authorization\",\n  \"account_flag_title_asf_account_txn_id\": \"Track Account Latest Transaction\",\n  \"account_flag_description_lsf_global_freeze\": \"Freeze all assets issued by this account.\",\n  \"account_flag_description_lsf_disable_master\": \"Disable the account's master key pair.\",\n  \"account_flag_description_lsf_default_ripple\": \"Enable rippling on this account's trust lines by default.\",\n  \"account_flag_description_lsf_allow_trustline_clawback\": \"Allow account to claw back tokens it has issued.\",\n  \"account_flag_description_lsf_allow_trustline_locking\": \"Allow Trust Line tokens (IOUs) issued by this account to be held in escrow.\",\n  \"account_flag_description_lsf_require_destination_tag\": \"Require a destination tag to send transactions to this account.\",\n  \"account_flag_description_lsf_no_freeze\": \"Permanently give up the ability to freeze individual trust lines or disable Global Freeze. This flag can never be disabled after being enabled.\",\n  \"account_flag_description_lsf_require_auth\": \"Require authorization for users to hold balances issued by this address.\",\n  \"account_flag_description_lsf_disallow_xrp\": \"XRP should not be sent to this account.\",\n  \"account_flag_description_lsf_disallow_incoming_trustline\": \"Block incoming trust lines.\",\n  \"account_flag_description_lsf_disallow_incoming_pay_chan\": \"Block incoming Payment Channels.\",\n  \"account_flag_description_lsf_disallow_incoming_nft_token_offer\": \"Block incoming NFTokenOffers.\",\n  \"account_flag_description_asf_authorized_nft_token_minter\": \"Enable to allow another account to mint non-fungible tokens (NFTokens) on this account's behalf.\",\n  \"account_flag_description_lsf_disallow_incoming_check\": \"Block incoming Checks.\",\n  \"account_flag_description_lsf_deposit_auth\": \"Enable Deposit Authorization on this account.\",\n  \"account_flag_description_asf_account_txn_id\": \"Track the ID of this account's most recent transaction.\",\n  \"account_page_address\": \"Address\",\n  \"account_page_address_tag\": \"Tag\",\n  \"account_page_classic_address\": \"Classic Address\",\n  \"account_page_deleted_account_label\": \"Account Deleted\",\n  \"account_page_deleted_account_warning\": \"This account has been deleted from the XRP Ledger. Historical data is shown for reference only.\",\n  \"account_page_extended_address\": \"Extended Address (X-Address)\",\n  \"account_page_domain\": \"Domain\",\n  \"account_page_reserve_balance\": \"Reserve Balance\",\n  \"account_page_xrp_balance\": \"XRP Balance\",\n  \"account_page_xrp_balance_in_usd\": \"XRP Balance (USD)\",\n  \"account_page_account_properties\": \"Account Properties\",\n  \"account_page_flags\": \"Flags\",\n  \"account_page_flag_status_enabled\": \"Enabled\",\n  \"account_page_flag_status_disabled\": \"Disabled\",\n  \"account_page_signers\": \"Signers\",\n  \"account_page_signer_weight\": \"Weight\",\n  \"account_page_details\": \"Details\",\n  \"account_page_current_sequence\": \"Current Sequence\",\n  \"account_page_ticket_count\": \"Ticket Count\",\n  \"account_page_email_hash\": \"Email Hash\",\n  \"account_page_payment_channels\": \"Payment Channels\",\n  \"account_page_payment_channels_text\": \"{{currency}} available in {{number}} channel(s)\",\n  \"account_page_nft_minter\": \"NFT Minter\",\n  \"account_page_asset_held_title\": \"Assets Held\",\n  \"account_page_asset_issued_title\": \"Assets Issued\",\n  \"account_page_asset_tab_iou\": \"IOUs ({{count}})\",\n  \"account_page_asset_tab_lptoken\": \"LP Tokens ({{count}})\",\n  \"account_page_asset_tab_mpt\": \"MPTs ({{count}})\",\n  \"account_page_asset_tab_nft\": \"NFTs ({{count}})\",\n  \"account_page_asset_table_column_amm_instance\": \"AMM Instance\",\n  \"account_page_asset_table_column_amm_pair\": \"AMM Pair\",\n  \"account_page_asset_table_column_asset_class\": \"Asset Class\",\n  \"account_page_asset_table_column_balance\": \"Balance\",\n  \"account_page_asset_table_column_balance_usd\": \"Balance (USD)\",\n  \"account_page_asset_table_column_circulating_supply\": \"Circ Supply\",\n  \"account_page_asset_table_column_currency_code\": \"Currency Code\",\n  \"account_page_asset_table_column_frozen\": \"Frozen\",\n  \"account_page_asset_table_column_highest_bid\": \"Highest Bid\",\n  \"account_page_asset_table_column_holders\": \"Holders\",\n  \"account_page_asset_table_column_issuer\": \"Issuer\",\n  \"account_page_asset_table_column_locked\": \"Locked\",\n  \"account_page_asset_table_column_lowest_ask\": \"Lowest Ask\",\n  \"account_page_asset_table_column_price_usd\": \"Price (USD)\",\n  \"account_page_asset_table_column_share\": \"Share (%)\",\n  \"account_page_asset_table_column_supply\": \"Supply\",\n  \"account_page_asset_table_column_ticker\": \"Ticker\",\n  \"account_page_asset_table_column_token_id\": \"Token ID\",\n  \"account_page_asset_table_column_transfer_fee\": \"Transfer Fee\",\n  \"account_page_asset_table_column_trustlines\": \"Trustlines\",\n  \"account_page_asset_table_column_url\": \"URL\",\n  \"account_page_asset_table_mpt_locked_global\": \"Global\",\n  \"account_page_asset_table_mpt_locked_individual\": \"Individual\",\n  \"account_page_asset_table_no_iou\": \"No IOUs found\",\n  \"account_page_asset_table_no_lptoken\": \"No LP Tokens found\",\n  \"account_page_asset_table_no_mpt\": \"No MPTs found\",\n  \"account_page_asset_table_no_nft\": \"No NFTs found\",\n  \"tx_hash\": \"Tx Hash\",\n  \"timestamp\": \"Timestamp (UTC)\",\n  \"amount_in\": \"Amount In\",\n  \"amount_out\": \"Amount Out\",\n  \"rate\": \"Rate\",\n  \"refresh_data\": \"Refresh data\",\n  \"token_page.general_overview\": \"General Overview\",\n  \"token_page.market_data\": \"Market Data\",\n  \"token_page.all_tx\": \"All Token Transactions\",\n  \"token_page.dex_tx\": \"DEX Trades\",\n  \"token_page.transfers_tx\": \"Transfers\",\n  \"token_page.holders_table\": \"Holders\",\n  \"token_page.issuer\": \"Issuer\",\n  \"token_page.price\": \"Price\",\n  \"token_page.holders\": \"# of Holders\",\n  \"token_page.supply\": \"Supply\",\n  \"token_page.market_cap\": \"Market Cap\",\n  \"token_page.volume_24h\": \"Traded Volume (24H)\",\n  \"token_page.trades_24h\": \"# of Trades (24H)\",\n  \"token_page.amm_tvl\": \"AMM TVL\",\n  \"token_page.transfer_fee\": \"Transfer Fee\",\n  \"token_page.holders_rank\": \"Rank\",\n  \"token_page.holders_num_tokens\": \"# of Tokens\",\n  \"token_page.holders_percent_supply\": \"% of Supply\",\n  \"token_page.holders_no_holders\": \"No holders found\",\n  \"token_page.holders_usd_value\": \"USD Value\",\n  \"token_page.transfers_no_transfers\": \"No transfers found\",\n  \"token_page.circulating_supply\": \"Circ Supply\",\n  \"token_page.dex_type\": \"Type\",\n  \"token_page.dex_amount_in_tooltip\": \"The amount of tokens sent by the \\\"FROM\\\" account in the trade\",\n  \"token_page.dex_amount_out_tooltip\": \"The amount of tokens sent out by the \\\"TO\\\" account in the trade\",\n  \"token_page.dex_rate_tooltip\": \"Amount Out / Amount In\",\n  \"token_page.dex_no_trades\": \"No dex trades found\",\n  \"token_page.token_label\": \"Token\",\n  \"token_page.category_text\": \"IOU\",\n  \"token_type.iou\": \"IOU\",\n  \"token_type.mpt\": \"MPT\",\n  \"iou_page.trustlines\": \"# of Trustlines\",\n  \"mpt_page.metadata_warning\": \"This MPT does not have metadata, or its metadata does not follow the <a>recommended metadata standards</a>. As a result, general overview and market data will be limited.\",\n  \"data_available_from_notice\": \"Data displayed is from 3/22/2024, 08:11:41 PM UTC onwards\",\n  \"copied\": \"Copied\",\n  \"click_to_copy\": \"Click to copy\",\n  \"withdraw\": \"withdraw\",\n  \"delete\": \"delete\",\n  \"rates\": \"rates\",\n  \"loan_broker_rates_detail\": \"<ManagementFeeRate/><CoverRateMinimum/><CoverRateLiquidation/>\",\n  \"loan_rates_detail\": \"<InterestRate/><LateInterestRate/><OverpaymentFee/>\",\n  \"loan_fees_detail\": \"<LoanOriginationFee/><LoanServiceFee/>\",\n  \"loan_terms_detail\": \"<PaymentTotal/><PaymentInterval/><GracePeriod/>\",\n  \"no_limit\": \"No Limit\",\n  \"first_loss_capital\": \"first-loss capital\",\n  \"vault\": \"Vault\",\n  \"vault_not_found\": \"Vault not found\",\n  \"invalid_vault_id\": \"Invalid vault ID\",\n  \"check_vault_id\": \"Please check the vault ID\",\n  \"get_vault_failed\": \"Unable to load vault information at this time. Please try again later.\",\n  \"private_vault\": \"Private Vault\",\n  \"perm_domain_id\": \"Permissioned Domain ID\",\n  \"total_value_locked\": \"Total Value Locked (TVL)\",\n  \"shares\": \"Shares\",\n  \"assets_available\": \"Assets Available\",\n  \"unrealized_loss\": \"Unrealized Loss\",\n  \"other_data\": \"Other Data\",\n  \"max_total_supply\": \"Max Total Supply\",\n  \"available_to_borrow\": \"Available to Borrow\",\n  \"not_available\": \"Not available\",\n  \"first_come_first_served\": \"First Come First Served\",\n  \"loans\": \"Loans\",\n  \"loan_broker\": \"Loan Broker\",\n  \"total_debt\": \"Total Debt\",\n  \"maximum_debt\": \"Maximum Debt\",\n  \"management_fee\": \"Management Fee\",\n  \"borrower\": \"Borrower\",\n  \"amount_requested\": \"Amount Requested\",\n  \"outstanding_balance\": \"Outstanding Balance\",\n  \"loan_status_current\": \"Current\",\n  \"loan_status_default\": \"Default\",\n  \"all_loans\": \"All Loans\",\n  \"loan_status_impaired\": \"Impaired\",\n  \"loan_status_paid_off\": \"Paid Off\",\n  \"next_due_date\": \"Next Due Date\",\n  \"origination_date\": \"Origination Date\",\n  \"frequency\": \"Frequency\",\n  \"installments\": \"Installments\",\n  \"prepayment_fee\": \"Prepayment Fee\",\n  \"no_loans_message\": \"No loans found for this broker.\",\n  \"loan_default_detected\": \"Loan default detected in this broker.\",\n  \"no_loan_brokers_message\": \"No loan brokers have been set up for this vault.\",\n  \"depositors_fetch_error\": \"Unable to fetch depositors information\",\n  \"no_depositors_message\": \"No depositors found for this vault.\",\n  \"depositors\": \"Depositors\",\n  \"percent_of_supply\": \"% of Supply\",\n  \"value\": \"Value\",\n  \"currency_toggle_help\": \"Toggle to view values in native-currency or USD\",\n  \"currency_toggle_description\": \"Toggle to view values in native-currency or USD\",\n  \"currency_toggle_loading\": \"Loading USD conversion rate...\",\n  \"currency_toggle_loading_description\": \"Loading USD conversion rate...\",\n  \"currency_toggle_unavailable\": \"USD conversion not available for this token\",\n  \"currency_toggle_unavailable_description\": \"USD conversion not available for this token\",\n  \"vaults\": \"Vaults\",\n  \"vaults_tvl\": \"Total Value Locked (TVL)\",\n  \"vaults_tvl_description\": \"USD value of tokens deposited in all vaults\",\n  \"vaults_outstanding_loans\": \"Outstanding Loans\",\n  \"vaults_outstanding_loans_description\": \"USD value of all outstanding loans\",\n  \"vaults_loans_originated\": \"Loans Originated\",\n  \"vaults_loans_originated_description\": \"USD value of all originated loans since protocol launch\",\n  \"vaults_avg_interest_rate\": \"Avg. Interest Rate\",\n  \"vaults_avg_interest_rate_description\": \"Weighted average interest rate of outstanding loans\",\n  \"vaults_num_vaults\": \"# of Vaults\",\n  \"vaults_num_vaults_description\": \"Number of vaults with transactions in the last 30 days\",\n  \"vaults_utilization_ratio\": \"Utilization Ratio\",\n  \"vaults_utilization_ratio_description\": \"Outstanding loans / total value locked\",\n  \"vaults_filter_all_assets\": \"All Assets\",\n  \"vaults_filter_stablecoins\": \"Stablecoins\",\n  \"vaults_search_placeholder\": \"Search Accounts, Vault Names, Assets, Websites\",\n  \"vaults_table_vault_id\": \"Vault ID\",\n  \"vaults_table_asset\": \"Asset\",\n  \"vaults_table_tvl\": \"TVL (USD)\",\n  \"vaults_table_outstanding_loans\": \"Outstanding Loans\",\n  \"vaults_table_utilization_ratio\": \"Utilization Ratio\",\n  \"vaults_table_avg_interest_rate\": \"Avg. Interest Rate\",\n  \"vaults_table_website\": \"Website\",\n  \"vaults_no_results\": \"No vaults found.\",\n  \"vaults_disclaimer\": \"*Only vaults utilizing XRP and assets with a Trust Level ≥1 (per <0>XRPL Meta</0>) within the stablecoin asset class are displayed.\",\n  \"amm_pool\": \"AMM Pool\",\n  \"basic_info\": \"Basic Info\",\n  \"market_data\": \"Market Data\",\n  \"auction\": \"Auction\",\n  \"created_on\": \"Created On\",\n  \"volume_24h_tooltip\": \"Total DEX trade volume on this AMM from 00:00–23:59 UTC of the previous day\",\n  \"fees_24h\": \"Fees (24H)\",\n  \"fees_24h_tooltip\": \"Total trading fees earned by this AMM from 00:00–23:59 UTC of the previous day\",\n  \"apr_24h\": \"APR (24H)\",\n  \"apr_24h_tooltip\": \"Annualized return based on fees from 00:00–23:59 UTC of the previous day relative to TVL\",\n  \"current_holder\": \"Current Holder\",\n  \"discounted_fee\": \"Discounted Trading Fee\",\n  \"price_paid\": \"Price Paid\",\n  \"replacement_cost\": \"Replacement Cost\",\n  \"all_transactions\": \"All Transactions\",\n  \"dex_trades\": \"DEX Trades\",\n  \"deposits\": \"Deposits\",\n  \"withdrawals\": \"Withdrawals\",\n  \"lp_tokens_received\": \"LP Tokens Received\",\n  \"lp_tokens_redeemed\": \"LP Tokens Redeemed\",\n  \"tvl_and_volume\": \"Total Value Locked and Volume\",\n  \"no_deposits\": \"No deposits found.\",\n  \"no_withdrawals\": \"No withdrawals found.\",\n  \"liquidity_providers\": \"Liquidity Providers\",\n  \"balance\": \"Balance\",\n  \"lp_token_currency_code\": \"LP Token\",\n  \"asset_2\": \"Asset 2\",\n  \"usd_value\": \"USD Value\",\n  \"amm_pool_deleted_label\": \"AMM Pool Deleted\",\n  \"amm_pool_deleted_text\": \"This AMM pool has been deleted. All assets have been withdrawn and the pool is no longer active. Historical data is still available below.\",\n  \"amms\": \"AMMs\",\n  \"top_1000_amms\": \"Top 1,000 AMMs\",\n  \"general_info\": \"General Info\",\n  \"number_of_amms\": \"# of AMMs\",\n  \"number_of_lps\": \"# of LPs\",\n  \"number_of_amms_tooltip\": \"Number of active AMM pools with deposit/withdrawal activity\",\n  \"number_of_lps_tooltip\": \"Number of unique liquidity providers across all AMM pools\",\n  \"search_amms\": \"Search AMMs\",\n  \"tvl_tooltip\": \"Total value locked across all active AMM pools\",\n  \"volume_24h_all_tooltip\": \"Total DEX trading volume across all active AMM pools from 00:00–23:59 UTC of the previous day\"\n}\n"
  },
  {
    "path": "public/locales/es-ES/translations.json",
    "content": "{\n  \"action\": \"acción\",\n  \"assets\": \"Activos\",\n  \"assets.no_nfts_message\": \"NFTs no encontrados.\",\n  \"assets.no_mpts_message\": null,\n  \"network\": \"Red\",\n  \"amendments\": null,\n  \"network_name\": \"Red Desconocida\",\n  \"network_name_testnet\": \"Testnet\",\n  \"network_name_mainnet\": \"Mainnet\",\n  \"network_name_devnet\": \"Devnet\",\n  \"network_name_xahau_mainnet\": \"Xahau Mainnet\",\n  \"network_name_xahau_testnet\": \"Xahau Testnet\",\n  \"network_name_custom\": \"Personalizada\",\n  \"app.meta.description\": \"Explorador de la Red XRPL\",\n  \"app.meta.author\": \"Ripple\",\n  \"explorer\": \"Explorador\",\n  \"xrpl_org\": \"XRPL.org\",\n  \"github\": \"GitHub\",\n  \"header.search.placeholder\": \"Buscar por Dirección, Libro Contable o Transacción\",\n  \"xrp\": \"XRP\",\n  \"xrpl_explorer\": \"Explorador XRPL\",\n  \"ledgers\": \"Registros\",\n  \"ledger\": \"Registro\",\n  \"taxon\": \"Taxón\",\n  \"token_id\": \"ID del Token\",\n  \"token_transactions\": \"Transacciones de Token\",\n  \"transactions\": \"Transacciones\",\n  \"transaction_short\": \"TX\",\n  \"nodes\": \"Nodos\",\n  \"validator\": \"Validador\",\n  \"validators\": \"Validadores\",\n  \"upgrade_status\": \"Estado de Actualización\",\n  \"version\": \"v{{number}}\",\n  \"component_error\": \"¡Algo malo ha ocurrido!\",\n  \"1H\": \"1H\",\n  \"24H\": \"24H\",\n  \"30D\": \"30D\",\n  \"total_transactions\": \"# de Txs\",\n  \"total_fees\": \"Comisiones Totales\",\n  \"async_component_failed\": \"Fallo al cargar Componente\",\n  \"account_not_found\": \"Cuenta no encontrada\",\n  \"account_empty_title\": \"El ID de la cuenta no fue facilitado\",\n  \"account_empty_hint\": \"Introduce un ID de cuenta en la caja de búsqueda\",\n  \"check_account_id\": \"Por favor, comprueba el ID de tu cuenta\",\n  \"accounts.xrp_balance\": \"Balance XRP\",\n  \"accounts.other_balances\": \"Otros Balances\",\n  \"accounts.other_balances_short\": \"Otros Bal.\",\n  \"amount\": \"Cantidad\",\n  \"currency_code\": \"Código de Divisa\",\n  \"currency_balance\": \"Balance <0>{{currency}}</0>\",\n  \"load_more_action\": \"Cargar más...\",\n  \"account_transactions\": \"Transacciones de la Cuenta\",\n  \"transaction_type\": \"Tipo de Transacción\",\n  \"transaction_action_CANCEL\": \"Cancelación\",\n  \"transaction_action_CREATE\": \"Creación\",\n  \"transaction_action_FINISH\": \"Finalización\",\n  \"transaction_action_MODIFY\": \"Modificación\",\n  \"transaction_action_SEND\": \"Envío\",\n  \"transaction_category_ACCOUNT\": \"Cuenta\",\n  \"transaction_category_DEX\": \"Dex (AMM, Ofertas, Trust Sets, Tokens)\",\n  \"transaction_category_NFT\": \"NFT\",\n  \"transaction_category_PAYMENT\": \"Pago\",\n  \"transaction_category_PSEUDO\": \"Pseudo-Tx\",\n  \"transaction_category_XCHAIN\": null,\n  \"transaction_category_OTHER\": null,\n  \"transaction_legend_toggle_hide\": \"Ocultar Leyenda\",\n  \"transaction_legend_toggle_show\": \"Mostrar Leyenda\",\n  \"transactions.date_header\": \"Fecha/hora (UTC)\",\n  \"no_transactions_message\": \"No se han encontrado transacciones.\",\n  \"get_vault_transactions_failed\": null,\n  \"retry_action\": \"Volver a intentar...\",\n  \"uh_oh\": \"¡UH-OH!\",\n  \"not_found_default_title\": \"Página No Encontrada\",\n  \"not_found_check_url\": \"Por favor, comprueba tu URL\",\n  \"not_found\": \"No encontrado\",\n  \"hash_not_found\": null,\n  \"buy\": \"Comprar\",\n  \"sell\": \"Vender\",\n  \"price\": \"Precio\",\n  \"ledger_index\": \"Índice del Libro Contable\",\n  \"to\": \"a\",\n  \"from\": \"desde\",\n  \"request\": null,\n  \"terms\": null,\n  \"send\": \"Enviar\",\n  \"delivered\": \"Enviado\",\n  \"cancel_offer\": \"Cancelar Oferta\",\n  \"convert_maximum\": \"Convertir Máx\",\n  \"convert_to\": \"Convertir a\",\n  \"using_at_most\": \"Utilizando como mucho\",\n  \"partial_payment_allowed\": \"pago parcial permitido\",\n  \"set_limit\": \"Añadir Límite de Confianza\",\n  \"escrow\": \"depósito\",\n  \"cancel_escrow\": \"cancelar depósito\",\n  \"finish_escrow\": \"finalizar depósito\",\n  \"escrow_amount\": \"cantidad del depósito\",\n  \"escrow_destination\": \"destino del depósito\",\n  \"escrow_transaction\": \"tx del depósito\",\n  \"escrow_condition_short\": \"condición del depósito\",\n  \"escrow_fulfillment\": \"cumplimiento del depósito\",\n  \"condition\": \"condición\",\n  \"fulfillment\": \"cumplimiento\",\n  \"cancel_after\": \"cancelar después\",\n  \"finish_after\": \"finalizado después de\",\n  \"settle_delay\": \"Retraso del Acuerdo\",\n  \"channel_id\": \"ID del canal\",\n  \"seconds\": \"segundos\",\n  \"seconds_short\": \"seg.\",\n  \"regular_key\": \"clave normal\",\n  \"unset_regular_key\": \"Desconfigurar clave normal\",\n  \"unset_signer_list\": \"Desconfigurar lista de firmantes\",\n  \"set_flag\": \"establecer bandera\",\n  \"clear_flag\": \"borrar bandera\",\n  \"email_hash\": \"hash de email\",\n  \"message_key\": \"clave de mensaje\",\n  \"out_of\": \"de\",\n  \"weight\": \"peso\",\n  \"the_account\": \"La cuenta\",\n  \"create_payment_channel\": \"creará un canal de pago para\",\n  \"destination_tag\": \"etiqueta de destino\",\n  \"source_tag\": \"etiqueta de origen\",\n  \"channel_settle_delay\": \"El canal tiene un retraso de acuerdo de\",\n  \"the_channel_id_is\": \"El ID del canal es\",\n  \"the_channel_amount_is\": \"La cantidad del canal es\",\n  \"update_payment_channel\": \"Se actualizará el canal de pago\",\n  \"the_channel_balance_is\": \"El balance reclamado del canal es\",\n  \"amm_delete_description\": \"Se intentó eliminar el AMM para <Asset/> y <Asset2/>.\",\n  \"amm_delete_description_caveat\": \"Si hubiese más de 512 líneas de confianza, esto solo borrará 512 líneas de confianza.\",\n  \"payment_channel_closed_description\": \"El canal de pago será cerrado, cualquier balance restante será devuelto a la cuenta de origen\",\n  \"set_signer_list_description\": \"Se añade un acuerdo mínimo de firmantes de {{quorum}} con la siguiente lista de firmantes\",\n  \"unset_signer_list_description\": \"Eliminó todos los firmantes de la cuenta\",\n  \"transaction_initiated_by\": \"La transacción fue iniciada por\",\n  \"increase_channel_amount_by\": \"Incrementará la cantidad del canal en\",\n  \"channel_amount_increase\": \"cantidad del canal aumentada\",\n  \"channel_amount\": \"cantidad de canal\",\n  \"total_claimed\": \"total reclamado\",\n  \"amount_claimed\": \"cantidad reclamada\",\n  \"close_request\": \"petición de cierre de canal\",\n  \"renew_channel\": \"renovar el canal\",\n  \"payment_channel_closed\": \"canal de pago cerrado\",\n  \"paychannel_node_line1\": \"Se <1><0>{{action}}</0></1> a un nodo PayChannel desde <3><0>{{account}}</0></3> a <5><0>{{counterAccount}}</0></5>\",\n  \"paychannel_amount_changed\": \"Cantidad cambiada por <1><0>{{difference}}</0><1><0>{{currency}}</0></1></1> desde <3><0>{{previous}}</0><1><0>{{currency}}</0></1></3> a <5><0>{{final}}</0><1><0>{{currency}}</0></1></5>\",\n  \"paychannel_balance_changed\": \"Balance cambiado por <1><0>{{difference}}</0><1><0>{{currency}}</0></1></1> desde <3><0>{{previous}}</0><1><0>{{currency}}</0></1></3> a <5><0>{{final}}</0><1><0>{{currency}}</0></1></5>\",\n  \"setfee_fees_description\": \"Transacciones futuras necesitarán una comisión mínima de <amount />.\",\n  \"setfee_reserves_description\": \"Las cuentas necesitan ahora tener una base de <base /> y un adicional <increment /> por cada objecto adicional que la cuenta sea dueña.\",\n  \"setfee_docs_description\": \"Visita la documentación: <0>Fees</0>\",\n  \"setfee_base_fee\": \"Comisión base\",\n  \"setfee_reserve\": \"Reserva\",\n  \"setfee_reserve_increment\": \"Incremento de la Reserva\",\n  \"formatted_date\": \"Fecha/Hora ({{timeZone}})\",\n  \"transaction_type_name_AMMCreate\": \"Crear AMM\",\n  \"transaction_type_name_AMMDelete\": null,\n  \"transaction_type_name_AMMDeposit\": \"Depositar AMM\",\n  \"transaction_type_name_AMMWithdraw\": \"Retirar AMM \",\n  \"transaction_type_name_AMMVote\": \"Votar AMM\",\n  \"transaction_type_name_AMMBid\": \"Puja AMM\",\n  \"transaction_type_name_AMMClawback\": null,\n  \"transaction_type_name_AccountSet\": \"Configurar Cuenta\",\n  \"transaction_type_name_Batch\": null,\n  \"transaction_type_name_CheckCancel\": \"Cancelar Cheque\",\n  \"transaction_type_name_CheckCash\": \"Cobrar Cheque\",\n  \"transaction_type_name_CheckCreate\": \"Crear Cheque\",\n  \"transaction_type_name_CredentialAccept\": null,\n  \"transaction_type_name_CredentialCreate\": null,\n  \"transaction_type_name_CredentialDelete\": null,\n  \"transaction_type_name_DelegateSet\": null,\n  \"transaction_type_name_DIDDelete\": null,\n  \"transaction_type_name_DIDSet\": null,\n  \"transaction_type_name_DepositPreauth\": \"Preautorizar Depósito\",\n  \"transaction_type_name_Error_Cases\": \"Casos de Error\",\n  \"transaction_type_name_EscrowCancel\": \"Cancelar Depósito\",\n  \"transaction_type_name_EscrowCreate\": \"Crear Depósito\",\n  \"transaction_type_name_EscrowFinish\": \"Finalizar Depósito\",\n  \"transaction_type_name_Invoke\": null,\n  \"transaction_type_name_LoanBrokerSet\": null,\n  \"transaction_type_name_LoanBrokerDelete\": null,\n  \"transaction_type_name_LoanBrokerCoverDeposit\": null,\n  \"transaction_type_name_LoanBrokerCoverWithdraw\": null,\n  \"transaction_type_name_LoanBrokerCoverClawback\": null,\n  \"transaction_type_name_LoanSet\": null,\n  \"transaction_type_name_LoanDelete\": null,\n  \"transaction_type_name_LoanManage\": null,\n  \"transaction_type_name_LoanPay\": null,\n  \"transaction_type_name_MPTokenIssuanceCreate\": null,\n  \"transaction_type_name_MPTokenIssuanceDestroy\": null,\n  \"transaction_type_name_MPTokenIssuanceSet\": null,\n  \"transaction_type_name_MPTokenAuthorize\": null,\n  \"transaction_type_name_NFTokenAcceptOffer\": \"Aceptar Oferta NFT\",\n  \"transaction_type_name_NFTokenBurn\": \"Quemar NFT\",\n  \"transaction_type_name_NFTokenCancelOffer\": \"Cancelar Oferta NFT\",\n  \"transaction_type_name_NFTokenCreateOffer\": \"Crear Oferta NFT\",\n  \"transaction_type_name_NFTokenMint\": \"Acuñar NFT\",\n  \"transaction_type_name_OfferCancel\": \"Cancelar Oferta\",\n  \"transaction_type_name_OfferCreate\": \"Crear Oferta\",\n  \"transaction_type_name_OracleDelete\": null,\n  \"transaction_type_name_OracleSet\": null,\n  \"transaction_type_name_Payment\": \"Pago\",\n  \"transaction_type_name_PaymentChannelClaim\": \"Reclamar Canal de Pago\",\n  \"transaction_type_name_PaymentChannelCreate\": \"Crear Canal de Pago\",\n  \"transaction_type_name_PaymentChannelFund\": \"Añadir Fondos a Canal de Pago\",\n  \"transaction_type_name_PermissionedDomainDelete\": null,\n  \"transaction_type_name_PermissionedDomainSet\": null,\n  \"transaction_type_name_SetHook\": \"Añadir Hook\",\n  \"transaction_type_name_SetRegularKey\": \"Configurar Clave Normal\",\n  \"transaction_type_name_SignerListSet\": \"Configurar Lista de Firmantes\",\n  \"transaction_type_name_TicketCreate\": \"Creación de Ticket\",\n  \"transaction_type_name_TrustSet\": \"Configurar Confianza\",\n  \"transaction_type_name_VaultCreate\": null,\n  \"transaction_type_name_VaultSet\": null,\n  \"transaction_type_name_VaultDeposit\": null,\n  \"transaction_type_name_VaultWithdraw\": null,\n  \"transaction_type_name_VaultClawback\": null,\n  \"transaction_type_name_VaultDelete\": null,\n  \"transaction_type_name_XChainAccountCreateCommit\": \"Commit de Creación de Cuenta XChain\",\n  \"transaction_type_name_XChainAddAccountCreateAttestation\": \"Añadir Atestado de Creación de Cuenta XChain\",\n  \"transaction_type_name_XChainAddClaimAttestation\": \"Añadir Atestado de Reclamo XChain\",\n  \"transaction_type_name_XChainClaim\": \"Reclamar XChain\",\n  \"transaction_type_name_XChainCommit\": \"Commit XChain\",\n  \"transaction_type_name_XChainCreateBridge\": \"Crear Puente XChain\",\n  \"transaction_type_name_XChainCreateClaimID\": \"Crear ID de Reclamo XChain\",\n  \"transaction_type_name_XChainModifyBridge\": \"Modificar Puente XChain\",\n  \"transaction_type_name_EnableAmendment\": \"Habilitar Enmienda\",\n  \"transaction_type_name_SetFee\": \"Modificar Comisión\",\n  \"transaction_type_name_UNLModify\": \"Modificar UNL\",\n  \"transaction_type_name_AccountDelete\": \"Borrar Cuenta\",\n  \"generic_error\": \"Algo malo ocurrió\",\n  \"not_your_fault\": \"Es probable que no sea culpa tuya\",\n  \"come_back_later\": \"Estará disponible pronto\",\n  \"invalid_ledger_id\": \"El id del libro contable es inválido\",\n  \"invalid_transaction_hash\": \"El hash de la transacción es inválido\",\n  \"ledger_not_found\": \"Libro Contable no Encontrado\",\n  \"check_ledger_id\": \"Por favor, comprueba el id de tu libro contable\",\n  \"server_ledgers_hint\": \"Este nodo ({{connection.server.publicKey, truncate(length: 10)}}) solo contiene libros contables {{connection.ledger.validated}}\",\n  \"use_search\": \"Por favor, utiliza nuestra búsqueda\",\n  \"ledger_has_no_trans\": \"Este libro contable no tiene ninguna transacción\",\n  \"less_than\": \"Menos que\",\n  \"transaction_not_found\": \"Transacción no encontrada\",\n  \"transaction_empty_title\": \"No se han facilitado hashes de transacciones\",\n  \"transaction_empty_hint\": \"Introduce un hash de transacción en la caja de búsqueda\",\n  \"validator_not_found\": \"Validador no encontrado\",\n  \"check_transaction_hash\": \"Por favor, comprueba tu hash de transacción\",\n  \"wrong_network\": null,\n  \"check_validator_key\": \"Por favor, comprueba la clave de tu validador\",\n  \"transaction\": \"Transacción\",\n  \"success\": \"Éxito\",\n  \"fail\": \"Fallo\",\n  \"simple\": \"Simple\",\n  \"detailed\": \"Detallado\",\n  \"details\": \"Detalles\",\n  \"history\": \"Histórico\",\n  \"voting\": null,\n  \"raw\": \"En Bruto\",\n  \"expand\": \"Expandir\",\n  \"collapse\": \"Contraer\",\n  \"try_detailed_raw\": \"Prueba las vistas `Detallado` o `En Bruto`\",\n  \"account\": \"Cuenta\",\n  \"transaction_cost\": \"Coste de la Transacción\",\n  \"transaction_cost_short\": \"Coste Tx.\",\n  \"sequence_number\": \"Número de Secuencia\",\n  \"sequence_number_short\": \"Secuencia #\",\n  \"serial\": \"Serial\",\n  \"n_a\": \"N/A\",\n  \"memos\": \"Notas\",\n  \"flags\": \"Banderas\",\n  \"status\": \"Estado\",\n  \"successful_transaction\": \"La transacción fue exitosa\",\n  \"fail_transaction\": \"Esta transacción ha fallado con un código de estado de <0>{{code}}</0>\",\n  \"transaction_validated\": \", y validada en el libro contable \",\n  \"on\": \" el \",\n  \"description\": \"Descripción\",\n  \"signers\": \"Firmantes\",\n  \"decoded_hex\": \"hex descodificado\",\n  \"transaction_consumed_fee\": \"Enviar esta transacción consumió\",\n  \"meta\": \"Meta\",\n  \"number_of_affected_node\": \"Afectó a {{count}} nodos en el libro contable:\",\n  \"nodes_type\": \"{{action}} nodos\",\n  \"node_meta_type\": \"Se {{action}} un nodo de tipo\",\n  \"transaction_balance_line_one\": \"Se <1><0>{{action}}</0></1> un nodo RippleState <3><0>{{currency}}</0></3> entre <5><0>{{account}}</0></5> y <7><0>{{counterAccount}}</0></7>\",\n  \"transaction_balance_line_two\": \"Balance modificado por <1><0>{{change}}</0></1> de <3><0>{{previousBalance}}</0></3> a <5><0>{{finalBalance}}</0></5>\",\n  \"transaction_outstanding_balance_line_two\": null,\n  \"transaction_owned_directory\": \"Se {{action}} un nodo DirectoryNode propiedad de\",\n  \"transaction_unowned_directory\": \"Se {{action}} un nodo DirectoryNode\",\n  \"transaction_mptoken_line_one\": null,\n  \"transaction_mpt_issuance_line_one\": null,\n  \"owned_account_root\": \"Se {{action}} el nodo AccountRoot de\",\n  \"unowned_account_root\": \"Se {{action}} el nodo AccountRoot\",\n  \"account_balance_increased\": \"Balance incrementado en <1><0>{{difference}}</0><1><0>{{currency}}</0></1></1> de <3><0>{{previous}}</0><1><0>{{currency}}</0></1></3> a <5><0>{{final}}</0><1><0>{{currency}}</0></1></5>\",\n  \"account_balance_decreased\": \"Balance disminuido en <1><0>{{difference}}</0><1><0>{{currency}}</0></1></1> de <3><0>{{previous}}</0><1><0>{{currency}}</0></1></3> a <5><0>{{final}}</0><1><0>{{currency}}</0></1></5>\",\n  \"decreased_from_to\": \"disminuido por <1><0>{{change}}</0></1> de <3><0>{{previous}}</0></3> a <5><0>{{final}}</0></5>\",\n  \"offer_node_meta\": \"Se <1><0>{{action}}</0></1> el nodo de oferta <3><0>{{pair}}</0></3> perteneciente a <5><0>{{account}}</0></5> con secuencia # <7><0>{{sequence}}</0></7>\",\n  \"offer_replaces\": \"Esta oferta reemplaza la oferta existente #\",\n  \"offer_partially_filled\": \"La oferta fue parcialmente completada\",\n  \"offer_filled\": \"La oferta fue completada\",\n  \"offer_cancelled\": \"La oferta fue cancelada\",\n  \"offer_replaced\": \"Esta oferta fue reemplazada por una nueva oferta #\",\n  \"offer_lack_of_funds\": \"La oferta fue parcialmente completada, después cancelada por la falta de fondos\",\n  \"transaction_sequence\": \"El número de secuencia de la transacción es\",\n  \"trust_set_description\": \"Se establece <1><0>{{amount}}</0></1> como la cantidad máxima de <3><0>{{currency}}</0></3> de <5><0>{{issuer}}</0></5> que <7><0>{{account}}</0></7> está dispuesta a tener\",\n  \"payment_desc_line_1\": \"El pago es desde <source/> a <destination/>\",\n  \"the_source_tag_is\": \"La etiqueta de origen es \",\n  \"the_destination_tag_is\": \"La etiqueta de destino es\",\n  \"payment_desc_line_4\": \"Se dieron instrucciones de enviar\",\n  \"payment_desc_line_5\": \"gastando hasta\",\n  \"payment_desc_line_6\": \"La cantidad real enviada fue\",\n  \"offer_cancel_description\": \"La transacción cancelará la oferta existente de la cuenta #\",\n  \"offer_create_desc_line_1\": \"La cuenta <1><0>{{account}}</0></1> se ofrece a pagar <3><0>{{takerGets}}</0><1><0>{{currency}}</0></1></3> a cambio de recibir <5><0>{{takerPays}}</0><1><0>{{currency}}</0></1></5>\",\n  \"offer_create_desc_line_2\": \"El tipo de cambio de esta oferta es\",\n  \"offer_create_desc_line_3\": \"La transacción cancelará también la oferta existente de la cuenta #\",\n  \"offer_create_desc_line_5\": \"Esta oferta es aplicable al dominio permiso\",\n  \"offer_will_expire_desc\": \"La oferta expirará el <1><0>{{date}}</0></1> a no ser que se cancele o se consuma antes\",\n  \"offer_did_expire_desc\": \"La oferta expiró el <1><0>{{date}}</0></1> a no ser que se cancelase o se consumiese antes\",\n  \"escrow_is_from\": \"El depósito es desde <1><0>{{account}}</0></1> a <3><0>{{destination}}</0></3>\",\n  \"escrow_is_created_by\": \"El depósito fue creado por <1><0>{{account}}</0></1> y los fondos serán devueltos a la misma cuenta\",\n  \"escrowed_amount\": \"Se depositó\",\n  \"escrow_condition\": \"El depósito tiene una condición de cumplimiento de\",\n  \"describe_cancel_after\": \"Se puede cancelar tras\",\n  \"describe_finish_after\": \"Se puede finalizar tras\",\n  \"escrow_completion_desc\": \"La finalización se descencadenó por\",\n  \"escrow_completion_desc_2\": \"La cantidad depositada de <1><0>{{amount}}</0></1> fue enviada a <3><0>{{destination}}</0></3>\",\n  \"escrow_finish_fulfillment_desc\": \"La condición del depósito fue completada por\",\n  \"escrow_cancellation_desc\": \"La cancelación fue producida por\",\n  \"escrow_cancellation_desc_2\": \"La cantidad depositada de <1><0>{{amount}}</0></1> fue devuelta a <3><0>{{owner}}</0></3>\",\n  \"escrow_after_transaction_cost\": \"tras el coste de transacción\",\n  \"escrow_created_by_desc\": \"El depósito fue creado por <1><0>{{account}}</0></1> con la transacción <3><0>{{transaction}}</0></3>\",\n  \"set_regular_key_description\": \"Establece la clave normal de cuenta a\",\n  \"unset_regular_key_description\": \"Elimina la clave normal de la cuenta\",\n  \"set_flag_description\": \"Establece la bandera de cuenta\",\n  \"clear_flag_description\": \"Limpia la bandera de cuenta\",\n  \"set_domain_description\": \"Establece el dominio de cuenta como\",\n  \"set_email_description\": \"Establece el hash de email de cuenta como\",\n  \"set_message_key_description\": \"Establece la clave de mensaje de cuenta como\",\n  \"set_nftoken_minter_description\": \"Se establece a <0>{{account}}</0> como el acuñador autorizado para esta cuenta\",\n  \"deposit_auth\": \"Se autoriza a <1><0>{{account}}</0></1> a enviar pagos a esta cuenta\",\n  \"deposit_unauth\": \"Se elimina la autorización a <1><0>{{account}}</0></1> para enviar pagos a esta cuenta\",\n  \"deposit_auth_credentials\": null,\n  \"deposit_unauth_credentials\": null,\n  \"invalid_xrpl_address\": \"Dirección XRPL inválida\",\n  \"loading\": \"Cargando\",\n  \"get_ledger_failed\": \"No ha sido posible cargar el libro contable\",\n  \"get_transaction_failed\": \"No ha sido posible cargar la transacción\",\n  \"get_validator_failed\": \"No ha sido posible cargar el validador\",\n  \"get_account_state_failed\": \"No ha sido posible cargar el estado de la cuenta\",\n  \"get_account_transactions_failed\": \"No ha sido posible cargar las transacciones de la cuenta\",\n  \"get_account_transactions_try\": \"Intentando cargar más transacciones\",\n  \"pubkey\": \"clave pública\",\n  \"node_pubkey\": \"clave pública del nodo\",\n  \"ip\": \"ip\",\n  \"state\": \"estado\",\n  \"rippled_version\": \"versión\",\n  \"last_ledger\": \"último libro contable\",\n  \"uptime\": \"activo\",\n  \"peers\": \"pares\",\n  \"in_out\": \"(entrada:salida)\",\n  \"ledger_history\": \"histórico contable\",\n  \"quorum\": \"cuórum\",\n  \"load\": \"carga\",\n  \"latency\": \"latencia\",\n  \"amendment_id\": null,\n  \"amendment_name\": null,\n  \"voters\": null,\n  \"threshold\": null,\n  \"consensus\": null,\n  \"enabled\": null,\n  \"disabled\": null,\n  \"on_tx\": null,\n  \"yes\": null,\n  \"no\": null,\n  \"deprecated\": null,\n  \"domain\": \"dominio\",\n  \"unl\": \"unl\",\n  \"fee\": \"comisión\",\n  \"ledger_interval\": \"lapso entre libros prom.\",\n  \"load_fee\": \"comisión de carga\",\n  \"txn_sec\": \"txs/seg.\",\n  \"txn_ledger\": \"Txs/libro prom.\",\n  \"avg_fee\": \"Comisión Tx Prom.\",\n  \"txn_count\": \"núm de txs\",\n  \"nUnlCol\": \"nUNL\",\n  \"nUnl\": \"VALIDADORES EN nUNL\",\n  \"fees\": \"comisiones\",\n  \"total\": \"total\",\n  \"missing\": \"perdidos\",\n  \"authorize\": \"autorizar\",\n  \"unauthorize\": \"desautorizar\",\n  \"missed_validations\": \"{{count}} validaciones perdidas\",\n  \"incomplete\": \"incompleto\",\n  \"base_fee\": null,\n  \"account_reserve\": null,\n  \"object_reserve\": null,\n  \"vote\": null,\n  \"no_amendment_in_voting\": null,\n  \"required\": \"requerido\",\n  \"source\": \"fuente\",\n  \"destination\": \"destino\",\n  \"claimed\": \"reclamado\",\n  \"remaining\": \"restante\",\n  \"inbound_total\": \"entrante total\",\n  \"outbound_total\": \"saliente total\",\n  \"payment_channels\": \"canales de pago\",\n  \"available_in\": \"disponible en\",\n  \"channels\": \"canales\",\n  \"account_info\": \"info de la cuenta\",\n  \"reserve\": \"reserva\",\n  \"current_sequence\": \"secuencia actual\",\n  \"escrows\": \"depósitos\",\n  \"nodes_found\": \"nodos encontrados\",\n  \"unmapped\": \"no mapeados\",\n  \"validators_found\": \"validadores encontrados\",\n  \"pause\": \"pausar\",\n  \"resume\": \"continuar\",\n  \"flag_ledger\": \"Bandera Libro Contable\",\n  \"ticket\": \"Ticket\",\n  \"ticket_sequence\": \"Secuencia de Ticket\",\n  \"ticket_count\": \"Número de Tickets\",\n  \"ticket_used\": \"un Ticket fue utilizado para esta Transacción\",\n  \"token\": \"Token\",\n  \"tokens\": \"Tokens\",\n  \"total_issuers\": \"Emisores Totales\",\n  \"total_tokens\": \"Tokens Totales\",\n  \"top_trading_pairs\": \"Top Pares de Cambio\",\n  \"issuer_address\": \"Dirección del Emisor\",\n  \"obligations\": \"Obligaciones\",\n  \"settings\": \"Ajustes\",\n  \"rank\": \"Rank\",\n  \"market_cap\": \"Cap. Mercado\",\n  \"volume_24h\": \"Volumen (24H)\",\n  \"no_tokens_message\": \"No se han encontrado tokens.\",\n  \"no_pairs_message\": \"No trading pairs found\",\n  \"high\": \"Álto\",\n  \"low\": \"Bajo\",\n  \"rank_message\": \"Tokens ordenados por número de líneas de confianza.\",\n  \"obligations_message\": \"Obligaciones son las cantidades totales de cada token emitido a direcciones\",\n  \"issuer\": \"Emisor\",\n  \"pair\": \"Par\",\n  \"asset_pair\": null,\n  \"offer_range\": \"Rango de Oferta\",\n  \"custom_network\": \"Red Personalizada\",\n  \"custom_network_input_help\": \"Introduce la URL de la red personalizada para acceder a la información de la red.\",\n  \"custom_network_input\": \"Introduce la URL de la red personalizada\",\n  \"custom_networks\": \"Redes Personalizadas\",\n  \"no_network_selected\": \"Red Personalizada No Seleccionada\",\n  \"locking_chain_door\": \"Bloqueando Puerta de la Cadena\",\n  \"locking_chain_issue\": \"Bloqueando Cadena Emisora\",\n  \"issuing_chain_door\": \"Emitiendo Puerta de la Cadena\",\n  \"issuing_chain_issue\": \"Emitiendo Cadena Emisora\",\n  \"signature_reward\": \"Recompensa de Firma\",\n  \"min_account_create_amount\": \"Cantidad Mínima de Creación de Cuenta\",\n  \"other_chain_source\": \"Otra Fuente de Cadena\",\n  \"xchain_claim_id\": \"ID del Reclamo XChain\",\n  \"check_nft_id\": \"Por favor, comprueba el ID de tu NFT\",\n  \"get_nft_state_failed\": \"No es posible cargar el NFT\",\n  \"minted\": \"Acuñado\",\n  \"taxon_id\": \"ID Taxón\",\n  \"transfer_fee\": \"Comisión de Transferencia\",\n  \"burnable\": \"Quemable\",\n  \"only_xrp\": \"Sólo XRP\",\n  \"transferable\": \"Transferible\",\n  \"buy_offers\": \"Ofertas de Compra\",\n  \"sell_offers\": \"Ofertas de Venta\",\n  \"offer_index\": \"ID de la Oferta\",\n  \"no_sell_offers\": \"Sin ofertas de venta\",\n  \"no_buy_offers\": \"Sin ofertas de compra\",\n  \"validator_history.chain\": \"Cadena\",\n  \"validator_history.date\": \"Fecha (UTC)\",\n  \"validator_history.missed\": \"Perdidos\",\n  \"validator_history.score\": \"Puntuación\",\n  \"seller\": \"Vendedor\",\n  \"buyer\": \"Comprador\",\n  \"offerer\": \"Offerer\",\n  \"token_taxon\": \"Taxón Token\",\n  \"uri\": \"URI\",\n  \"owner\": \"Dueño\",\n  \"other_chain_destination\": \"Otro Destino de Cadena\",\n  \"%_of_total_nodes_validators\": \"% Total de Nodos y Validadores\",\n  \"version_display\": \"Versión: {{version}}\",\n  \"validator_count\": \"# de Validadores: {{val_count}}\",\n  \"node_count\": \"# de Nodos: {{node_count}}\",\n  \"current_stable_version\": \"Versión Estable Actual\",\n  \"stable_version\": \"{{stableVersion}}\",\n  \"nftoken_minter\": \"Acuñador NFT\",\n  \"is_burned\": \"Quemado\",\n  \"fee_rate\": \"Tarifa\",\n  \"last_affecting_transaction\": \"Última tx afectada\",\n  \"Version\": \"Versión\",\n  \"increased_by\": \"incrementado por\",\n  \"trading_fee\": \"Comisión de Cambio\",\n  \"tvl\": \"TVL\",\n  \"account_address\": \"Dirección de la Cuenta\",\n  \"asset1\": \"Activo 1\",\n  \"asset2\": \"Activo 2\",\n  \"asset1out\": \"Activo 1 Saliente\",\n  \"asset2out\": \"Activo 2 Saliente\",\n  \"asset1in\": \"Activo 1 Entrante\",\n  \"asset2in\": \"Activo 2 Entrante\",\n  \"effective_price\": \"Precio Efectivo\",\n  \"amm_account_id\": \"ID de Cuenta AMM\",\n  \"lp_tokens\": \"Tokens LP\",\n  \"min_slot_price\": \"Precio Mínimo de Puja\",\n  \"max_slot_price\": \" Precio Máximo de Puja\",\n  \"auth_accounts\": \"Cuentas Autorizadas\",\n  \"network_cannot_be_crawled\": \"Esta red no se puede rastrear\",\n  \"check_crawl_existed\": \"Por favor, contacta con el operador para asegurarte de que tienen acceso a /crawl o un  vl incluido.\",\n  \"peer_crawled_context\": \"Para más contexto, mira https://xrpl.org/peer-crawler.html\",\n  \"xchainbridge\": \"XChainBridge\",\n  \"xchain_account_claim_count\": \"Contador de Reclamación de Cuentas XChain\",\n  \"xchain_account_create_count\": \"Contador de Creación de Cuentas XChain\",\n  \"min_signer_quorum\": \"Peso mínimo <0>{{quorum}}</0> requerido\",\n  \"holder\": \"Titular\",\n  \"action_from\": \"<0><0>{{action}}</0></0> <1><0>{{amount}}</0></1> desde <3><0>{{destination}}</0></3>\",\n  \"action_from_and\": null,\n  \"claws_back\": \"Recupera\",\n  \"claws_back_from\": \"<source/> recupera desde <destination/>\",\n  \"instruct_to_claw\": \"La cantidad máx recuperada es <amount/>\",\n  \"hook\": \"Hook\",\n  \"hooks\": \"Hooks\",\n  \"hook_emitted\": \"esta Transacción fue emitida por un Hook\",\n  \"emit_details\": \"Detalles de la Emisión\",\n  \"hook_parameters\": \"Parámetros del Hook\",\n  \"hook_executions\": \"Ejecuciones del Hook\",\n  \"emit_generation\": \"Número <0>{{emit}}</0> en la línea de transacciones generadas\",\n  \"emit_hook_hash\": \"Emitido por el hook <0>{{hash}}</0>\",\n  \"emit_parent\": \"Emitido por un hook disparado por <0>{{hash}}</0>\",\n  \"emit_callback\": \"La llamada de vuelta emitida es <0>{{callback}}<0>\",\n  \"hook_exec_hash\": \"Ha disparado el hook <0>{{hash}}</0>\",\n  \"hook_exec_account\": \"En la cuenta <0>{{account}}</0>\",\n  \"hook_exec_return\": \"Devuelto el código <0>{{code}}</0> con la cadena \\\"<1>{{string}}</1>\\\"\",\n  \"hook_exec_emit_count\": \"Emitida/s <0>{{count}}</0> transacción/es\",\n  \"hash\": \"Hash\",\n  \"grant\": \"Subvención\",\n  \"namespace\": \"Espacio de Nombres\",\n  \"api_version\": \"Versión API\",\n  \"triggered_on\": \"Activado En\",\n  \"name\": \"Nombre\",\n  \"introduced_in\": \"Introducido en\",\n  \"yeas\": \"síes\",\n  \"nays\": \"noes\",\n  \"eta\": \"eta\",\n  \"amendment_summary\": \"Resumen de la enmienda\",\n  \"not\": \"no\",\n  \"enable_tx\": \"TX de activación\",\n  \"all\": \"todos\",\n  \"yeas_count\": \"# de votos Sí: {{yeas_count}}\",\n  \"nays_count\": \"# de votos No: {{nays_count}}\",\n  \"yeas_percent\": \"% de votos Sí: {{yeas_percent}}%\",\n  \"nays_percent\": \"% de votos No: {{nays_percent}}%\",\n  \"%_of_validators\": \"% de validadores\",\n  \"amendment_not_found\": \"Enmienda no encontrada\",\n  \"check_amendment_key\": \"Por favor, comprueba tu llave de enmienda\",\n  \"did_document\": \"Documento DID\",\n  \"attestation\": \"Atestado\",\n  \"note\": \"Nota\",\n  \"indicate_unl\": \"indica a un validador en una UNL\",\n  \"transaction_tokens_involved\": \"<Currency/> y <Currency2/>\",\n  \"transaction_tokens_swapped\": \"<Currency/> por <Currency2/>\",\n  \"oracle_document_id\": \"ID del Documento de Oracle\",\n  \"provider\": \"Proveedor\",\n  \"last_update_time\": \"Última Hora de Actualización\",\n  \"asset_class\": \"Clase de Activo\",\n  \"trading_pairs\": \"Pares de Comercio\",\n  \"deleted\": \"Eliminado\",\n  \"holders_count\": \"Titulares: {{holders}}\",\n  \"trustlines\": \"LÍNEAS DE CONFIANZA: {{trustlines}}\",\n  \"website\": \"Sitio Web\",\n  \"mpt_issuance_id\": \"ID de Emisión MPT\",\n  \"asset_scale\": \"Escala del Activo\",\n  \"metadata\": \"Metadatos\",\n  \"max_amount\": \"Cantidad Máxima\",\n  \"mpt_holder\": \"Titular MPT\",\n  \"check_mpt_id\": \"Por favor, verifica tu ID de Emisión MPT\",\n  \"outstanding_amount\": \"Cantidad Emitida\",\n  \"locked\": \"Bloqueado\",\n  \"can_lock\": \"Se Puede Bloquear\",\n  \"require_auth\": \"Requiere Autenticación\",\n  \"can_escrow\": \"Puede Hacer Escrow\",\n  \"can_trade\": \"Puede Comerciar\",\n  \"can_transfer\": \"Puede Transferir\",\n  \"can_clawback\": \"Puede Recuperar\",\n  \"enable_amendment_name\": null,\n  \"amendment_status\": null,\n  \"expected_date\": null,\n  \"base\": null,\n  \"credential_type\": null,\n  \"credential_issuer\": null,\n  \"subject\": null,\n  \"expiration\": null,\n  \"domain_id\": null,\n  \"accepted_credentials\": null,\n  \"credential_ids\": null,\n  \"data\": null,\n  \"finish_function\": null,\n  \"quorum_description\": null,\n  \"avg_fee_description\": null,\n  \"ledger_interval_description\": null,\n  \"txn_ledger_description\": null,\n  \"txn_sec_description\": null,\n  \"load_fee_description\": null,\n  \"nUnl_description\": null,\n  \"computation_allowance\": null,\n  \"gas\": null,\n  \"delegate\": null,\n  \"permissions\": null,\n  \"pertaining_to_the_Permissioned_Domain\": null,\n  \"tx_delegated_to\": null,\n  \"account_delegates_to\": null,\n  \"delegate_to\": null,\n  \"volume\": null,\n  \"holders\": null,\n  \"trades\": null,\n  \"no_of_tokens\": null,\n  \"volume_24h_total\": null,\n  \"volume_24h_total_description\": null,\n  \"market_cap_metric_description\": null,\n  \"market_cap_description\": null,\n  \"24h_description\": null,\n  \"volume_description\": null,\n  \"trades_description\": null,\n  \"tvl_description\": null,\n  \"stablecoin_description\": null,\n  \"stablecoin\": null,\n  \"wrapped\": null,\n  \"tokens_footnote\": null,\n  \"xrplmeta_guidelines\": null,\n  \"inner_transaction\": null,\n  \"batch_table_detail_count\": null,\n  \"batch_table_detail_list\": null,\n  \"batch_description\": null,\n  \"batch\": null,\n  \"successful\": null,\n  \"failed\": null,\n  \"not-validated\": null,\n  \"asset\": null,\n  \"assets_maximum\": null,\n  \"mptoken_metadata\": null,\n  \"withdrawal_policy\": null,\n  \"account_creates_vault\": null,\n  \"vault_id\": null,\n  \"single_asset_vault\": null,\n  \"loan_broker_id\": null,\n  \"loan_id\": null,\n  \"management_fee_rate\": null,\n  \"debt_maximum\": null,\n  \"cover_rate_minimum\": null,\n  \"cover_rate_liquidation\": null,\n  \"counterparty\": null,\n  \"principal_requested\": null,\n  \"payment_total\": null,\n  \"payment_interval\": null,\n  \"grace_period\": null,\n  \"loan_origination_fee\": null,\n  \"loan_service_fee\": null,\n  \"late_payment_fee\": null,\n  \"close_payment_fee\": null,\n  \"full_payment_fee\": null,\n  \"overpayment_fee\": null,\n  \"interest_rate\": null,\n  \"late_interest_rate\": null,\n  \"close_interest_rate\": null,\n  \"overpayment_interest_rate\": null,\n  \"set_vault_data\": null,\n  \"set_vault_assets_maximum\": null,\n  \"set_vault_domain_id\": null,\n  \"account_deposits_into_vault\": null,\n  \"account_withdraws_from_vault\": null,\n  \"account_clawbacks_from_vault\": null,\n  \"account_clawbacks_from_vault_amount_omitted\": null,\n  \"account_deletes_vault\": null,\n  \"vault_create_table_detail\": null,\n  \"withdraws\": null,\n  \"deletes\": null,\n  \"vault_delete_table_detail\": null,\n  \"account_flag_title_lsf_global_freeze\": null,\n  \"account_flag_title_lsf_disable_master\": null,\n  \"account_flag_title_lsf_default_ripple\": null,\n  \"account_flag_title_lsf_allow_trustline_clawback\": null,\n  \"account_flag_title_lsf_allow_trustline_locking\": null,\n  \"account_flag_title_lsf_require_destination_tag\": null,\n  \"account_flag_title_lsf_no_freeze\": null,\n  \"account_flag_title_lsf_require_auth\": null,\n  \"account_flag_title_lsf_disallow_xrp\": null,\n  \"account_flag_title_lsf_disallow_incoming_trustline\": null,\n  \"account_flag_title_lsf_disallow_incoming_pay_chan\": null,\n  \"account_flag_title_lsf_disallow_incoming_nft_token_offer\": null,\n  \"account_flag_title_asf_authorized_nft_token_minter\": null,\n  \"account_flag_title_lsf_disallow_incoming_check\": null,\n  \"account_flag_title_lsf_deposit_auth\": null,\n  \"account_flag_title_asf_account_txn_id\": null,\n  \"account_flag_description_lsf_global_freeze\": null,\n  \"account_flag_description_lsf_disable_master\": null,\n  \"account_flag_description_lsf_default_ripple\": null,\n  \"account_flag_description_lsf_allow_trustline_clawback\": null,\n  \"account_flag_description_lsf_allow_trustline_locking\": null,\n  \"account_flag_description_lsf_require_destination_tag\": null,\n  \"account_flag_description_lsf_no_freeze\": null,\n  \"account_flag_description_lsf_require_auth\": null,\n  \"account_flag_description_lsf_disallow_xrp\": null,\n  \"account_flag_description_lsf_disallow_incoming_trustline\": null,\n  \"account_flag_description_lsf_disallow_incoming_pay_chan\": null,\n  \"account_flag_description_lsf_disallow_incoming_nft_token_offer\": null,\n  \"account_flag_description_asf_authorized_nft_token_minter\": null,\n  \"account_flag_description_lsf_disallow_incoming_check\": null,\n  \"account_flag_description_lsf_deposit_auth\": null,\n  \"account_flag_description_asf_account_txn_id\": null,\n  \"account_page_address\": null,\n  \"account_page_address_tag\": null,\n  \"account_page_classic_address\": null,\n  \"account_page_deleted_account_label\": null,\n  \"account_page_deleted_account_warning\": null,\n  \"account_page_extended_address\": null,\n  \"account_page_domain\": null,\n  \"account_page_reserve_balance\": null,\n  \"account_page_xrp_balance\": null,\n  \"account_page_xrp_balance_in_usd\": null,\n  \"account_page_account_properties\": null,\n  \"account_page_flags\": null,\n  \"account_page_flag_status_enabled\": null,\n  \"account_page_flag_status_disabled\": null,\n  \"account_page_signers\": null,\n  \"account_page_signer_weight\": null,\n  \"account_page_details\": null,\n  \"account_page_current_sequence\": null,\n  \"account_page_ticket_count\": null,\n  \"account_page_email_hash\": null,\n  \"account_page_payment_channels\": null,\n  \"account_page_payment_channels_text\": null,\n  \"account_page_nft_minter\": null,\n  \"account_page_asset_held_title\": null,\n  \"account_page_asset_issued_title\": null,\n  \"account_page_asset_tab_iou\": null,\n  \"account_page_asset_tab_lptoken\": null,\n  \"account_page_asset_tab_mpt\": null,\n  \"account_page_asset_tab_nft\": null,\n  \"account_page_asset_table_column_amm_instance\": null,\n  \"account_page_asset_table_column_amm_pair\": null,\n  \"account_page_asset_table_column_asset_class\": null,\n  \"account_page_asset_table_column_balance\": null,\n  \"account_page_asset_table_column_balance_usd\": null,\n  \"account_page_asset_table_column_circulating_supply\": null,\n  \"account_page_asset_table_column_currency_code\": null,\n  \"account_page_asset_table_column_frozen\": null,\n  \"account_page_asset_table_column_highest_bid\": null,\n  \"account_page_asset_table_column_holders\": null,\n  \"account_page_asset_table_column_issuer\": null,\n  \"account_page_asset_table_column_locked\": null,\n  \"account_page_asset_table_column_lowest_ask\": null,\n  \"account_page_asset_table_column_price_usd\": null,\n  \"account_page_asset_table_column_share\": null,\n  \"account_page_asset_table_column_supply\": null,\n  \"account_page_asset_table_column_ticker\": null,\n  \"account_page_asset_table_column_token_id\": null,\n  \"account_page_asset_table_column_transfer_fee\": null,\n  \"account_page_asset_table_column_trustlines\": null,\n  \"account_page_asset_table_column_url\": null,\n  \"account_page_asset_table_mpt_locked_global\": null,\n  \"account_page_asset_table_mpt_locked_individual\": null,\n  \"account_page_asset_table_no_iou\": null,\n  \"account_page_asset_table_no_lptoken\": null,\n  \"account_page_asset_table_no_mpt\": null,\n  \"account_page_asset_table_no_nft\": null,\n  \"tx_hash\": null,\n  \"timestamp\": null,\n  \"amount_in\": null,\n  \"amount_out\": null,\n  \"rate\": null,\n  \"refresh_data\": null,\n  \"token_page.general_overview\": null,\n  \"token_page.market_data\": null,\n  \"token_page.all_tx\": null,\n  \"token_page.dex_tx\": null,\n  \"token_page.transfers_tx\": null,\n  \"token_page.holders_table\": null,\n  \"token_page.issuer\": null,\n  \"token_page.price\": null,\n  \"token_page.holders\": null,\n  \"token_page.supply\": null,\n  \"token_page.market_cap\": null,\n  \"token_page.volume_24h\": null,\n  \"token_page.trades_24h\": null,\n  \"token_page.amm_tvl\": null,\n  \"token_page.transfer_fee\": null,\n  \"token_page.holders_rank\": null,\n  \"token_page.holders_num_tokens\": null,\n  \"token_page.holders_percent_supply\": null,\n  \"token_page.holders_no_holders\": null,\n  \"token_page.holders_usd_value\": null,\n  \"token_page.transfers_no_transfers\": null,\n  \"token_page.circulating_supply\": null,\n  \"token_page.dex_type\": null,\n  \"token_page.dex_amount_in_tooltip\": null,\n  \"token_page.dex_amount_out_tooltip\": null,\n  \"token_page.dex_rate_tooltip\": null,\n  \"token_page.dex_no_trades\": null,\n  \"token_page.token_label\": null,\n  \"token_page.category_text\": null,\n  \"token_type.iou\": null,\n  \"token_type.mpt\": null,\n  \"iou_page.trustlines\": null,\n  \"mpt_page.metadata_warning\": null,\n  \"data_available_from_notice\": null,\n  \"copied\": null,\n  \"click_to_copy\": null,\n  \"withdraw\": null,\n  \"delete\": null,\n  \"rates\": null,\n  \"loan_broker_rates_detail\": null,\n  \"loan_rates_detail\": null,\n  \"loan_fees_detail\": null,\n  \"loan_terms_detail\": null,\n  \"no_limit\": null,\n  \"first_loss_capital\": null,\n  \"vault\": null,\n  \"vault_not_found\": null,\n  \"invalid_vault_id\": null,\n  \"check_vault_id\": null,\n  \"get_vault_failed\": null,\n  \"private_vault\": null,\n  \"perm_domain_id\": null,\n  \"total_value_locked\": null,\n  \"shares\": null,\n  \"assets_available\": null,\n  \"unrealized_loss\": null,\n  \"other_data\": null,\n  \"max_total_supply\": null,\n  \"available_to_borrow\": null,\n  \"not_available\": null,\n  \"first_come_first_served\": null,\n  \"loans\": null,\n  \"loan_broker\": null,\n  \"total_debt\": null,\n  \"maximum_debt\": null,\n  \"management_fee\": null,\n  \"borrower\": null,\n  \"amount_requested\": null,\n  \"outstanding_balance\": null,\n  \"loan_status_current\": null,\n  \"loan_status_default\": null,\n  \"all_loans\": null,\n  \"loan_status_impaired\": null,\n  \"loan_status_paid_off\": null,\n  \"next_due_date\": null,\n  \"origination_date\": null,\n  \"frequency\": null,\n  \"installments\": null,\n  \"prepayment_fee\": null,\n  \"no_loans_message\": null,\n  \"loan_default_detected\": null,\n  \"no_loan_brokers_message\": null,\n  \"depositors_fetch_error\": null,\n  \"no_depositors_message\": null,\n  \"depositors\": null,\n  \"percent_of_supply\": null,\n  \"value\": null,\n  \"currency_toggle_help\": null,\n  \"currency_toggle_description\": null,\n  \"currency_toggle_loading\": null,\n  \"currency_toggle_loading_description\": null,\n  \"currency_toggle_unavailable\": null,\n  \"currency_toggle_unavailable_description\": null,\n  \"vaults\": null,\n  \"vaults_tvl\": null,\n  \"vaults_tvl_description\": null,\n  \"vaults_outstanding_loans\": null,\n  \"vaults_outstanding_loans_description\": null,\n  \"vaults_loans_originated\": null,\n  \"vaults_loans_originated_description\": null,\n  \"vaults_avg_interest_rate\": null,\n  \"vaults_avg_interest_rate_description\": null,\n  \"vaults_num_vaults\": null,\n  \"vaults_num_vaults_description\": null,\n  \"vaults_utilization_ratio\": null,\n  \"vaults_utilization_ratio_description\": null,\n  \"vaults_filter_all_assets\": null,\n  \"vaults_filter_stablecoins\": null,\n  \"vaults_search_placeholder\": null,\n  \"vaults_table_vault_id\": null,\n  \"vaults_table_asset\": null,\n  \"vaults_table_tvl\": null,\n  \"vaults_table_outstanding_loans\": null,\n  \"vaults_table_utilization_ratio\": null,\n  \"vaults_table_avg_interest_rate\": null,\n  \"vaults_table_website\": null,\n  \"vaults_no_results\": null,\n  \"vaults_disclaimer\": null,\n  \"amm_pool\": null,\n  \"basic_info\": null,\n  \"market_data\": null,\n  \"auction\": null,\n  \"created_on\": null,\n  \"volume_24h_tooltip\": null,\n  \"fees_24h\": null,\n  \"fees_24h_tooltip\": null,\n  \"apr_24h\": null,\n  \"apr_24h_tooltip\": null,\n  \"current_holder\": null,\n  \"discounted_fee\": null,\n  \"price_paid\": null,\n  \"replacement_cost\": null,\n  \"all_transactions\": null,\n  \"dex_trades\": null,\n  \"deposits\": null,\n  \"withdrawals\": null,\n  \"lp_tokens_received\": null,\n  \"lp_tokens_redeemed\": null,\n  \"tvl_and_volume\": null,\n  \"no_deposits\": null,\n  \"no_withdrawals\": null,\n  \"liquidity_providers\": null,\n  \"balance\": null,\n  \"lp_token_currency_code\": null,\n  \"asset_2\": null,\n  \"usd_value\": null,\n  \"amm_pool_deleted_label\": null,\n  \"amm_pool_deleted_text\": null,\n  \"amms\": null,\n  \"top_1000_amms\": null,\n  \"general_info\": null,\n  \"number_of_amms\": null,\n  \"number_of_lps\": null,\n  \"number_of_amms_tooltip\": null,\n  \"number_of_lps_tooltip\": null,\n  \"search_amms\": null,\n  \"tvl_tooltip\": null,\n  \"volume_24h_all_tooltip\": null\n}\n"
  },
  {
    "path": "public/locales/fr-FR/translations.json",
    "content": "{\n  \"action\": \"action\",\n  \"assets\": \"Actifs\",\n  \"assets.no_nfts_message\": \"Aucun NFT trouvé.\",\n  \"assets.no_mpts_message\": null,\n  \"network\": \"Réseau\",\n  \"amendments\": null,\n  \"network_name\": \"Réseau inconnu\",\n  \"network_name_testnet\": \"Testnet\",\n  \"network_name_mainnet\": \"Mainnet\",\n  \"network_name_devnet\": \"Devnet\",\n  \"network_name_xahau_mainnet\": \"Xahau Mainnet\",\n  \"network_name_xahau_testnet\": \"Xahau Testnet\",\n  \"network_name_custom\": \"Personnalisé\",\n  \"app.meta.description\": \"Explorateur XRPL\",\n  \"app.meta.author\": \"Ripple\",\n  \"explorer\": \"Explorateur\",\n  \"xrpl_org\": \"XRPL.org\",\n  \"github\": \"GitHub\",\n  \"header.search.placeholder\": \"Rechercher par adresse, registre ou transaction\",\n  \"xrp\": \"XRP\",\n  \"xrpl_explorer\": \"Explorateur XRPL\",\n  \"ledgers\": \"Registres\",\n  \"ledger\": \"Registre\",\n  \"taxon\": \"Taxon\",\n  \"token_id\": \"Token ID\",\n  \"token_transactions\": \"Transactions du token\",\n  \"transactions\": \"Transactions\",\n  \"transaction_short\": \"TX\",\n  \"nodes\": \"Noeuds\",\n  \"validator\": \"Validateur\",\n  \"validators\": \"Validateurs\",\n  \"upgrade_status\": \"Statut des versions\",\n  \"version\": \"v{{number}}\",\n  \"component_error\": \"Une erreur s'est produite!\",\n  \"1H\": \"1H\",\n  \"24H\": \"24H\",\n  \"30D\": \"30J\",\n  \"total_transactions\": \"# de Txns\",\n  \"total_fees\": \"Frais Totaux\",\n  \"async_component_failed\": \"Impossible de charger le composant\",\n  \"account_not_found\": \"Compte non trouvé\",\n  \"account_empty_title\": \"Aucun id de compte n'a été fourni\",\n  \"account_empty_hint\": \"Saisissez un id de compte dans le champs de recherche\",\n  \"check_account_id\": \"Vérifiez votre ID de compte\",\n  \"accounts.xrp_balance\": \"Solde XRP\",\n  \"accounts.other_balances\": \"Autres soldes\",\n  \"accounts.other_balances_short\": \"Soldes\",\n  \"amount\": \"Montant\",\n  \"currency_code\": \"Code FX\",\n  \"currency_balance\": \"Solde <0>{{currency}}</0>\",\n  \"load_more_action\": \"Charger plus...\",\n  \"account_transactions\": \"Transactions\",\n  \"transaction_type\": \"Type de transaction\",\n  \"transaction_action_CANCEL\": \"Annulé\",\n  \"transaction_action_CREATE\": \"Créé\",\n  \"transaction_action_FINISH\": \"Confirmé\",\n  \"transaction_action_MODIFY\": \"Modifié\",\n  \"transaction_action_SEND\": \"Transféré\",\n  \"transaction_category_ACCOUNT\": \"Compte\",\n  \"transaction_category_DEX\": \"Dex (AMM, Offres, Trust Sets, Tokens)\",\n  \"transaction_category_NFT\": \"NFT\",\n  \"transaction_category_PAYMENT\": \"Paiement\",\n  \"transaction_category_PSEUDO\": \"Pseudo-Tx\",\n  \"transaction_category_XCHAIN\": null,\n  \"transaction_category_OTHER\": null,\n  \"transaction_legend_toggle_hide\": \"Masquer la légende\",\n  \"transaction_legend_toggle_show\": \"Afficher la légende\",\n  \"transactions.date_header\": \"Date/heure (UTC)\",\n  \"no_transactions_message\": \"Aucune transaction trouvée\",\n  \"get_vault_transactions_failed\": null,\n  \"retry_action\": \"Réessayer...\",\n  \"uh_oh\": \"Oups!\",\n  \"not_found_default_title\": \"Page non trouvée\",\n  \"not_found_check_url\": \"Veuillez vérifier l'URL\",\n  \"not_found\": \"Non trouvé\",\n  \"hash_not_found\": null,\n  \"buy\": \"Acheter\",\n  \"sell\": \"Vendre\",\n  \"price\": \"Prix\",\n  \"ledger_index\": \"Index du ledger\",\n  \"to\": \"à\",\n  \"from\": \"de\",\n  \"request\": null,\n  \"terms\": null,\n  \"send\": \"Envoyer\",\n  \"delivered\": \"Livré\",\n  \"cancel_offer\": \"Annuler l'offre\",\n  \"convert_maximum\": \"Convertir le Max\",\n  \"convert_to\": \"Convertir en\",\n  \"using_at_most\": \"Utiliser au maximum\",\n  \"partial_payment_allowed\": \"paiement partiel autorisé\",\n  \"set_limit\": \"Limite de confiance\",\n  \"escrow\": \"séquestre\",\n  \"cancel_escrow\": \"annuler le séquestre\",\n  \"finish_escrow\": \"terminez le séquestre\",\n  \"escrow_amount\": \"montant du séquestre\",\n  \"escrow_destination\": \"destination du séquestre\",\n  \"escrow_transaction\": \"transaction de séquestre\",\n  \"escrow_condition_short\": \"condition de séquestre\",\n  \"escrow_fulfillment\": \"exécution du séquestre\",\n  \"condition\": \"état\",\n  \"fulfillment\": \"execution\",\n  \"cancel_after\": \"annuler ensuite\",\n  \"finish_after\": \"finir ensuite\",\n  \"settle_delay\": \"Délai de règlement\",\n  \"channel_id\": \"Identifiant du canal\",\n  \"seconds\": \"secondes\",\n  \"seconds_short\": \"sec.\",\n  \"regular_key\": \"clé\",\n  \"unset_regular_key\": \"clé non définie\",\n  \"unset_signer_list\": \"liste de signataires non définie\",\n  \"set_flag\": \"définir un tag\",\n  \"clear_flag\": \"supprimer le tag\",\n  \"email_hash\": \"hash du mail\",\n  \"message_key\": \"clé du message\",\n  \"out_of\": \"de\",\n  \"weight\": \"poids\",\n  \"the_account\": \"Le compte\",\n  \"create_payment_channel\": \"créera un canal de paiement à\",\n  \"destination_tag\": \"tag de destination\",\n  \"source_tag\": \"tag de la source\",\n  \"channel_settle_delay\": \"Le canal a un délai de confirmation de\",\n  \"the_channel_id_is\": \"L'ID de la chaîne est\",\n  \"the_channel_amount_is\": \"Le montant du canal est\",\n  \"update_payment_channel\": \"Le canal de paiement sera mis à jour\",\n  \"the_channel_balance_is\": \"Le solde du canal récupéré est de\",\n  \"amm_delete_description\": \"Tentative de suppression de l'AMM pour <Asset/> er <Asset2/>.\",\n  \"amm_delete_description_caveat\": \"Si il y a plus de 512 trustlines, seules 512 trustlines seront supprimées.\",\n  \"payment_channel_closed_description\": \"Le canal de paiement sera fermé, tout solde restant sera retourné au compte source\",\n  \"set_signer_list_description\": \"Fixe le quorum minimum de signataires à {{quorum}} avec la liste suivante de signataires\",\n  \"unset_signer_list_description\": \"Tous les signataires du compte ont été supprimés\",\n  \"transaction_initiated_by\": \"La transaction a été initiée par\",\n  \"increase_channel_amount_by\": \"Le montant du canal sera augmenté de\",\n  \"channel_amount_increase\": \"augmenter le montant du canal\",\n  \"channel_amount\": \"montant du canal\",\n  \"total_claimed\": \"total réclamé\",\n  \"amount_claimed\": \"montant réclamé\",\n  \"close_request\": \"demande de fermeture de canal\",\n  \"renew_channel\": \"renouveler le canal\",\n  \"payment_channel_closed\": \"Le canal de paiement est fermé\",\n  \"paychannel_node_line1\": \"Il <1><0>{{action}}</0></1> un nœud PayChannel de <3><0>{{account}}</0></3> à <5><0>{{counterAccount}}</0></5>\",\n  \"paychannel_amount_changed\": \"Montant modifié de <1><0>{{difference}}</0><1><0>{{currency}}</0></1></1> de <3><0>{{previous}}</0><1><0>{{currency}}</0></1></3> à <5><0>{{final}}</0><1><0>{{currency}}</0></1></5>\",\n  \"paychannel_balance_changed\": \"Le solde a changé de <1><0>{{différence}}</0><1><0>{{devise}}</0></1></1> de <3><0>{{précédent}}</0><1><0>{{devise}}</0></1></3> à <5><0>{{final}}</0><1><0>{{devise}}</0></1></5>\",\n  \"setfee_fees_description\": \"Les futures transactions nécessiteront des frais minimum de <amount />.\",\n  \"setfee_reserves_description\": \"Les comptes doivent désormais détenir une base de <base /> et un supplément de <increment /> pour chaque objet supplémentaire dont le compte est propriétaire.\",\n  \"setfee_docs_description\": \"Voir la documentation : <0>Frais</0>\",\n  \"setfee_base_fee\": \"Frais de base\",\n  \"setfee_reserve\": \"Réserve\",\n  \"setfee_reserve_increment\": \"Incrément de réserve\",\n  \"formatted_date\": \"Date/Heure ({{timeZone}})\",\n  \"transaction_type_name_AMMCreate\": \"AMM créé\",\n  \"transaction_type_name_AMMDelete\": \"AMM supprimé\",\n  \"transaction_type_name_AMMDeposit\": \"Dépôt sur un AMM\",\n  \"transaction_type_name_AMMWithdraw\": \"Retrait depuis un AMM\",\n  \"transaction_type_name_AMMVote\": \"Vote AMM\",\n  \"transaction_type_name_AMMBid\": \"Offre AMM créée\",\n  \"transaction_type_name_AMMClawback\": null,\n  \"transaction_type_name_AccountSet\": \"Compte défini\",\n  \"transaction_type_name_Batch\": null,\n  \"transaction_type_name_CheckCancel\": \"Chèque annulé\",\n  \"transaction_type_name_CheckCash\": \"Chèque remis\",\n  \"transaction_type_name_CheckCreate\": \"Chèque créé\",\n  \"transaction_type_name_CredentialAccept\": null,\n  \"transaction_type_name_CredentialCreate\": null,\n  \"transaction_type_name_CredentialDelete\": null,\n  \"transaction_type_name_DelegateSet\": null,\n  \"transaction_type_name_DIDDelete\": null,\n  \"transaction_type_name_DIDSet\": null,\n  \"transaction_type_name_DepositPreauth\": \"Dépôt préautorisé\",\n  \"transaction_type_name_Error_Cases\": \"Cas d'erreur\",\n  \"transaction_type_name_EscrowCancel\": \"séquestre annulé\",\n  \"transaction_type_name_EscrowCreate\": \"séquestre créé\",\n  \"transaction_type_name_EscrowFinish\": \"Séquestre finalisé\",\n  \"transaction_type_name_Invoke\": \"Invocation\",\n  \"transaction_type_name_LoanBrokerSet\": null,\n  \"transaction_type_name_LoanBrokerDelete\": null,\n  \"transaction_type_name_LoanBrokerCoverDeposit\": null,\n  \"transaction_type_name_LoanBrokerCoverWithdraw\": null,\n  \"transaction_type_name_LoanBrokerCoverClawback\": null,\n  \"transaction_type_name_LoanSet\": null,\n  \"transaction_type_name_LoanDelete\": null,\n  \"transaction_type_name_LoanManage\": null,\n  \"transaction_type_name_LoanPay\": null,\n  \"transaction_type_name_MPTokenIssuanceCreate\": null,\n  \"transaction_type_name_MPTokenIssuanceDestroy\": null,\n  \"transaction_type_name_MPTokenIssuanceSet\": null,\n  \"transaction_type_name_MPTokenAuthorize\": null,\n  \"transaction_type_name_NFTokenAcceptOffer\": \"Offre NFT acceptée\",\n  \"transaction_type_name_NFTokenBurn\": \"NFT détruit\",\n  \"transaction_type_name_NFTokenCancelOffer\": \"Offre NFT annulée\",\n  \"transaction_type_name_NFTokenCreateOffer\": \"Offre NFT créée\",\n  \"transaction_type_name_NFTokenMint\": \"NFT forgé\",\n  \"transaction_type_name_OfferCancel\": \"Offre annulée\",\n  \"transaction_type_name_OfferCreate\": \"Offre créée\",\n  \"transaction_type_name_OracleDelete\": null,\n  \"transaction_type_name_OracleSet\": null,\n  \"transaction_type_name_Payment\": \"Paiement effectué\",\n  \"transaction_type_name_PaymentChannelClaim\": \"Canal de paiement  réclamé\",\n  \"transaction_type_name_PaymentChannelCreate\": \"Canal de paiement créé\",\n  \"transaction_type_name_PaymentChannelFund\": \"Canal provisionné\",\n  \"transaction_type_name_PermissionedDomainDelete\": null,\n  \"transaction_type_name_PermissionedDomainSet\": null,\n  \"transaction_type_name_SetHook\": \"Crochet enregistré\",\n  \"transaction_type_name_SetRegularKey\": \"Clé régulière définie\",\n  \"transaction_type_name_SignerListSet\": \"Liste de signataires établie\",\n  \"transaction_type_name_TicketCreate\": \"Ticket créé\",\n  \"transaction_type_name_TrustSet\": \"Ligne de confiance créée\",\n  \"transaction_type_name_VaultCreate\": null,\n  \"transaction_type_name_VaultSet\": null,\n  \"transaction_type_name_VaultDeposit\": null,\n  \"transaction_type_name_VaultWithdraw\": null,\n  \"transaction_type_name_VaultClawback\": null,\n  \"transaction_type_name_VaultDelete\": null,\n  \"transaction_type_name_XChainAccountCreateCommit\": \"Compte XChain créé\",\n  \"transaction_type_name_XChainAddAccountCreateAttestation\": \"Attestation de compte xChain créée\",\n  \"transaction_type_name_XChainAddClaimAttestation\": \"Attestation de Réclamation XChain créée\",\n  \"transaction_type_name_XChainClaim\": \"Réclamation XChain effectuée\",\n  \"transaction_type_name_XChainCommit\": \"Enregistrement XChain créé\",\n  \"transaction_type_name_XChainCreateBridge\": \"Pont XChain créé\",\n  \"transaction_type_name_XChainCreateClaimID\": \"ID de réclamation XChain créé\",\n  \"transaction_type_name_XChainModifyBridge\": \"Pont XChain modifié\",\n  \"transaction_type_name_EnableAmendment\": \"Amendement activé\",\n  \"transaction_type_name_SetFee\": \"Frais définis\",\n  \"transaction_type_name_UNLModify\": \"UNL modifié\",\n  \"transaction_type_name_AccountDelete\": \"Compte supprimé\",\n  \"generic_error\": \"Une erreur s'est produite\",\n  \"not_your_fault\": \"Ce n'est probablement pas de votre faute\",\n  \"come_back_later\": \"L'action sera bientôt disponible\",\n  \"invalid_ledger_id\": \"L'identifiant du registre est invalide\",\n  \"invalid_transaction_hash\": \"Le hash de la transaction est invalide\",\n  \"ledger_not_found\": \"Registre introuvable\",\n  \"check_ledger_id\": \"Veuillez vérifier votre id de registre\",\n  \"server_ledgers_hint\": \"Ce nœud ({{connection.server.publicKey, truncate(length: 10)}}) ne contient que les registres {{connection.ledger.validated}}.\",\n  \"use_search\": \"Merci d'utiliser notre outil de recherche\",\n  \"ledger_has_no_trans\": \"Ce registre n'a aucune transaction.\",\n  \"less_than\": \"Moins de\",\n  \"transaction_not_found\": \"Transaction non trouvée.\",\n  \"transaction_empty_title\": \"Aucun hash de transaction fourni\",\n  \"transaction_empty_hint\": \"Entrez un hash de transaction dans la zone de recherche\",\n  \"validator_not_found\": \"Validateur non trouvé\",\n  \"check_transaction_hash\": \"Veuillez vérifier le hash de la transaction\",\n  \"wrong_network\": null,\n  \"check_validator_key\": \"Veuillez vérifier la clé du validateur\",\n  \"transaction\": \"Transaction\",\n  \"success\": \"Succès\",\n  \"fail\": \"Échec\",\n  \"simple\": \"Simple\",\n  \"detailed\": \"Détailé\",\n  \"details\": \"Détails\",\n  \"history\": \"Histoire\",\n  \"voting\": null,\n  \"raw\": \"Brut\",\n  \"expand\": \"Développer\",\n  \"collapse\": \"Réduire\",\n  \"try_detailed_raw\": \"Essayez la \\\"Vue détaillée\\\" ou la \\\"Vue brute\\\"\",\n  \"account\": \"Compte\",\n  \"transaction_cost\": \"Coût de transaction\",\n  \"transaction_cost_short\": \"Coût de Tx.\",\n  \"sequence_number\": \"Numéro de séquence\",\n  \"sequence_number_short\": \"Séquence #\",\n  \"serial\": \"Numéro de série\",\n  \"n_a\": \"ND\",\n  \"memos\": \"Mémos\",\n  \"flags\": \"Etiquettes\",\n  \"status\": \"Statut\",\n  \"successful_transaction\": \"Cette transaction est confirmée\",\n  \"fail_transaction\": \"Cette transaction a échoué avec un code de statut de <0>{{code}}</0>\",\n  \"transaction_validated\": \" et inscrite dans le registre \",\n  \"on\": \" en date du \",\n  \"description\": \"Description\",\n  \"signers\": \"Signataires\",\n  \"decoded_hex\": \"hexadécimal décodé\",\n  \"transaction_consumed_fee\": \"L'envoi de cette transaction a consommé \",\n  \"meta\": \"Métadonnées\",\n  \"number_of_affected_node\": \"La transaction a affecté {{count}} nœuds dans le registre.\",\n  \"nodes_type\": \"{{action}} nodes\",\n  \"node_meta_type\": \"It {{action}} a node with type\",\n  \"transaction_balance_line_one\": \"It <1><0>{{action}}</0></1> a <3><0>{{currency}}</0></3> RippleState node between <5><0>{{account}}</0></5> and <7><0>{{counterAccount}}</0></7>\",\n  \"transaction_balance_line_two\": \"Solde modifié de <1><0>{{change}}</0></1>: de <3><0>{{previousBalance}}</0></3> à <5><0>{{finalBalance}}</0></5>\",\n  \"transaction_outstanding_balance_line_two\": null,\n  \"transaction_owned_directory\": \"It {{action}} a DirectoryNode node owned by\",\n  \"transaction_unowned_directory\": \"It {{action}} a DirectoryNode node\",\n  \"transaction_mptoken_line_one\": null,\n  \"transaction_mpt_issuance_line_one\": null,\n  \"owned_account_root\": \"It {{action}} the AccountRoot node of\",\n  \"unowned_account_root\": \"It {{action}} the AccountRoot node\",\n  \"account_balance_increased\": \"Solde augmenté de <1><0>{{difference}}</0><1><0>{{currency}}</0></1></1>: de <3><0>{{previous}}</0><1><0>{{currency}}</0></1></3> à <5><0>{{final}}</0><1><0>{{currency}}</0></1></5>\",\n  \"account_balance_decreased\": \"Solde diminué de <1><0>{{différence}}</0><1><0>{{devise}}</0></1></1>: de <3><0>{{précédent}}</0><1><0>{{devise}}</0></1></3> à <5><0>{{final}}</0><1><0>{{devise}}</0></1></5>\",\n  \"decreased_from_to\": \"diminué de <1><0>{{change}}</0></1>: de <3><0>{{previous}}</0></3> à <5><0>{{final}}</0></5>\",\n  \"offer_node_meta\": \"It <1><0>{{action}}</0></1> a <3><0>{{pair}}</0></3> offer node owned by <5><0>{{account}}</0></5> with sequence # <7><0>{{sequence}}</0></7>\",\n  \"offer_replaces\": \"Cette offre remplace l'offre existante #\",\n  \"offer_partially_filled\": \"L'offre a été partiellement remplie.\",\n  \"offer_filled\": \"L'offre a été comblée.\",\n  \"offer_cancelled\": \"L'offre a été annulée.\",\n  \"offer_replaced\": \"Cette offre a été remplacée par la nouvelle offre #\",\n  \"offer_lack_of_funds\": \"L'offre a été partiellement remplie, puis annulée en raison d'un manque de fonds.\",\n  \"transaction_sequence\": \"Le numéro de séquence de la transaction est le\",\n  \"trust_set_description\": \"Établit que le montant maximum que <7><0>{{account}}</0></7> est prêt à détenir en provenance de <5><0>{{issuer}}</0></5> est de <1><0>{{amount}}</0></1><3><0>{{currency}}</0></3>.\",\n  \"payment_desc_line_1\": \"Le paiement est de <source/> à <destination/>.\",\n  \"the_source_tag_is\": \"L'étiquette source est\",\n  \"the_destination_tag_is\": \"L'étiquette de destination est\",\n  \"payment_desc_line_4\": \"Il a été instruit de livrer\",\n  \"payment_desc_line_5\": \"en dépensant jusqu'à\",\n  \"payment_desc_line_6\": \"La quantité réelle livrée était de\",\n  \"offer_cancel_description\": \"La transaction annulera l'offre existante du compte #\",\n  \"offer_create_desc_line_1\": \"Le compte <1><0>{{account}}</0></1> offre de payer <3><0>{{takerGets}}</0><1><0>{{currency}}</0></1></3> pour recevoir <5><0>{{takerPays}}</0><1><0>{{currency}}</0></1></5>\",\n  \"offer_create_desc_line_2\": \"Le taux de change pour cette offre est de \",\n  \"offer_create_desc_line_3\": \"La transaction annulera également l'offre existante du compte #\",\n  \"offer_create_desc_line_5\": \"Cette offre est applicable au domaine permis\",\n  \"offer_will_expire_desc\": \"L'offre expire le {{date}} sauf annulation ou consommation préalable.\",\n  \"offer_did_expire_desc\": \"L'offre expire le <1><0>{{date}}</0></1> sauf annulation ou consommation préalable.\",\n  \"escrow_is_from\": \"Le séquestre est de <1><0>{{account}}</0></1> à <3><0>{{destination}}</0></3>\",\n  \"escrow_is_created_by\": \"Le séquestre a été créé par <1><0>{{account}}</0></1> et les fonds seront retournés au même compte.\",\n  \"escrowed_amount\": \"Mis en séquestre\",\n  \"escrow_condition\": \"Le séquestre a une condition de réalisation\",\n  \"describe_cancel_after\": \"Peur être annulé après\",\n  \"describe_finish_after\": \"Peut être terminé après\",\n  \"escrow_completion_desc\": \"La finalisation a été déclenchée par\",\n  \"escrow_completion_desc_2\": \"Le montant en séquestre de <1><0>{{amount}}</0></1> a été remis à <3><0>{{destination}}</0></3>\",\n  \"escrow_finish_fulfillment_desc\": \"La condition de séquestre est remplie par\",\n  \"escrow_cancellation_desc\": \"L'annulation a été déclenchée par\",\n  \"escrow_cancellation_desc_2\": \"Le montant placé en séquestre de <1><0>{{amount}}</0></1> a été restitué à <3><0>{{owner}}</0></3>\",\n  \"escrow_after_transaction_cost\": \"frais après transaction\",\n  \"escrow_created_by_desc\": \"Le séquestre a été créé par <1><0>{{account}}</0></1> avec la transaction <3><0>{{transaction}}</0></3>\",\n  \"set_regular_key_description\": \"Définit la clé régulière du compte en tant que\",\n  \"unset_regular_key_description\": \"Supprime la clé régulière du compte.\",\n  \"set_flag_description\": \"Définit l'étiquette du compte\",\n  \"clear_flag_description\": \"Efface l'étiquette du compte\",\n  \"set_domain_description\": \"Définit le domaine du compte en tant que\",\n  \"set_email_description\": \"Définit le hash de l'email du compte.\",\n  \"set_message_key_description\": \"Définit la clé du message du compte en tant que\",\n  \"set_nftoken_minter_description\": \"Définit <0>{{account}}</0> comme le forgeur autorisé pour ce compte.\",\n  \"deposit_auth\": \"Autorise <1><0>{{account}}</0></1> à envoyer des paiements vers ce compte.\",\n  \"deposit_unauth\": \"Supprime l'autorisation pour <1><0>{{account}}</0></1> d'envoyer des paiements à ce compte.\",\n  \"deposit_auth_credentials\": null,\n  \"deposit_unauth_credentials\": null,\n  \"invalid_xrpl_address\": \"Adresse XRPL invalide\",\n  \"loading\": \"Chargement en cours\",\n  \"get_ledger_failed\": \"Impossible de charger le registre\",\n  \"get_transaction_failed\": \"Impossible de charger la transaction\",\n  \"get_validator_failed\": \"Impossible de charger le validateur.\",\n  \"get_account_state_failed\": \"Impossible de charger l'état du compte\",\n  \"get_account_transactions_failed\": \"Impossible de charger les transactions du compte\",\n  \"get_account_transactions_try\": \"Essayer de charger plus de transactions\",\n  \"pubkey\": \"clé publique\",\n  \"node_pubkey\": \"clé publique de nœud\",\n  \"ip\": \"adresse IP\",\n  \"state\": \"état\",\n  \"rippled_version\": \"version\",\n  \"last_ledger\": \"dernier registre\",\n  \"uptime\": \"disponibilité\",\n  \"peers\": \"pairs\",\n  \"in_out\": \"(entrée:sortie)\",\n  \"ledger_history\": \"historique\",\n  \"quorum\": \"quorum\",\n  \"load\": \"charger\",\n  \"latency\": \"latence\",\n  \"amendment_id\": null,\n  \"amendment_name\": null,\n  \"voters\": null,\n  \"threshold\": null,\n  \"consensus\": null,\n  \"enabled\": null,\n  \"disabled\": null,\n  \"on_tx\": null,\n  \"yes\": null,\n  \"no\": null,\n  \"deprecated\": null,\n  \"domain\": \"domaine\",\n  \"unl\": \"unl\",\n  \"fee\": \"frais\",\n  \"ledger_interval\": \"registre toutes les\",\n  \"load_fee\": \"frais d'initialisation\",\n  \"txn_sec\": \"txn/sec.\",\n  \"txn_ledger\": \"moy. txn/compte\",\n  \"avg_fee\": \"Frais moyen\",\n  \"txn_count\": \"Transactions\",\n  \"nUnlCol\": \"nUNL\",\n  \"nUnl\": \"VALIDATEURS SUR nUNL\",\n  \"fees\": \"frais\",\n  \"total\": \"total\",\n  \"missing\": \"manquant\",\n  \"authorize\": \"autoriser\",\n  \"unauthorize\": \"non autorisé\",\n  \"missed_validations\": \"{{count}} validations manquées\",\n  \"incomplete\": \"incomplet\",\n  \"base_fee\": null,\n  \"account_reserve\": null,\n  \"object_reserve\": null,\n  \"vote\": null,\n  \"no_amendment_in_voting\": null,\n  \"required\": \"requis\",\n  \"source\": \"source\",\n  \"destination\": \"destination\",\n  \"claimed\": \"revendiqué\",\n  \"remaining\": \"reste\",\n  \"inbound_total\": \"total entrant\",\n  \"outbound_total\": \"total sortant\",\n  \"payment_channels\": \"canaux de paiement\",\n  \"available_in\": \"disponible dans\",\n  \"channels\": \"canaux\",\n  \"account_info\": \"informations du compte\",\n  \"reserve\": \"réserve\",\n  \"current_sequence\": \"séquence actuelle\",\n  \"escrows\": \"séquestres\",\n  \"nodes_found\": \"nœuds trouvés\",\n  \"unmapped\": \"non répertoriés\",\n  \"validators_found\": \"validateurs trouvés\",\n  \"pause\": \"mettre en pause\",\n  \"resume\": \"reprendre\",\n  \"flag_ledger\": \"Marquer le ledger\",\n  \"ticket\": \"Ticket\",\n  \"ticket_sequence\": \"Séquence de tickets\",\n  \"ticket_count\": \"Nombre de tickets\",\n  \"ticket_used\": \"Un ticket a été utilisé pour cette transaction.\",\n  \"token\": \"Jeton\",\n  \"tokens\": \"Jetons\",\n  \"total_issuers\": \"Émetteurs totaux\",\n  \"total_tokens\": \"Total des jetons\",\n  \"top_trading_pairs\": \"Principales paires\",\n  \"issuer_address\": \"Adresse de l'émetteur\",\n  \"obligations\": \"Obligations\",\n  \"settings\": \"Paramètres\",\n  \"rank\": \"Rang\",\n  \"market_cap\": \"Capitalisation\",\n  \"volume_24h\": \"Volume (24H)\",\n  \"no_tokens_message\": \"Aucun jeton trouvé.\",\n  \"no_pairs_message\": \"Aucune paire trouvée\",\n  \"high\": \"Élevé\",\n  \"low\": \"Bas\",\n  \"rank_message\": \"Les jetons sont classés par nombre de lignes de confiance.\",\n  \"obligations_message\": \"Les obligations sont les montants totaux de chaque jeton émis aux adresses.\",\n  \"issuer\": \"Émetteur\",\n  \"pair\": \"Paire\",\n  \"asset_pair\": null,\n  \"offer_range\": \"Plage d'offre\",\n  \"custom_network\": \"Réseau personnalisé\",\n  \"custom_network_input_help\": \"Entrez l'URL personnalisée du réseau pour accéder aux données du réseau.\",\n  \"custom_network_input\": \"Tapez l'URL du réseau personnalisé\",\n  \"custom_networks\": \"Réseaux personnalisés\",\n  \"no_network_selected\": \"Aucun réseau personnalisé sélectionné\",\n  \"locking_chain_door\": \"Point d'accès à la chaîne séquestre\",\n  \"locking_chain_issue\": \"Problème sur la chaine séquestre\",\n  \"issuing_chain_door\": \"Point d'accès à la chaîne d'origine\",\n  \"issuing_chain_issue\": \"Chaîne d'émission\",\n  \"signature_reward\": \"Frais de signature\",\n  \"min_account_create_amount\": \"Montant minimum pour la création de compte\",\n  \"other_chain_source\": \"Autre source de chaîne.\",\n  \"xchain_claim_id\": \"XChain Claim ID: Identifiant de réclamation XChain\",\n  \"check_nft_id\": \"Veuillez vérifier votre identifiant NFT.\",\n  \"get_nft_state_failed\": \"Impossible de charger le NFT.\",\n  \"minted\": \"Forgé\",\n  \"taxon_id\": \"Identifiant de taxon\",\n  \"transfer_fee\": \"Frais de transfert\",\n  \"burnable\": \"Destructible\",\n  \"only_xrp\": \"Uniquement XRP\",\n  \"transferable\": \"Transférable\",\n  \"buy_offers\": \"Offres d'achat\",\n  \"sell_offers\": \"Offres de vente\",\n  \"offer_index\": \"ID de l'offre\",\n  \"no_sell_offers\": \"Aucune offre de vente\",\n  \"no_buy_offers\": \"Aucune offre d'achat\",\n  \"validator_history.chain\": \"Chaîne\",\n  \"validator_history.date\": \"Date (UTC)\",\n  \"validator_history.missed\": \"Manqué\",\n  \"validator_history.score\": \"Score\",\n  \"seller\": \"Vendeur\",\n  \"buyer\": \"Acheteur\",\n  \"offerer\": \"Offrant\",\n  \"token_taxon\": \"Taxon du jeton\",\n  \"uri\": \"URI\",\n  \"owner\": \"Propriétaire\",\n  \"other_chain_destination\": \"Autre destination de chaîne\",\n  \"%_of_total_nodes_validators\": \"% des nœuds et des validateurs\",\n  \"version_display\": \"Version: {{version}}\",\n  \"validator_count\": \"nb de Validateurs: {{val_count}}\",\n  \"node_count\": \"nb de Nœuds: {{node_count}}\",\n  \"current_stable_version\": \"Version Stable Actuelle\",\n  \"stable_version\": \"{{stableVersion}}\",\n  \"nftoken_minter\": \"Créateur du NFT\",\n  \"is_burned\": \"Détruit\",\n  \"fee_rate\": \"Frais\",\n  \"last_affecting_transaction\": \"Dernière transaction affectée\",\n  \"Version\": \"Version\",\n  \"increased_by\": \"augmenté de\",\n  \"trading_fee\": \"Commission\",\n  \"tvl\": \"TVL\",\n  \"account_address\": \"Adresse du compte\",\n  \"asset1\": \"Actif 1\",\n  \"asset2\": \"Actif 2\",\n  \"asset1out\": \"Actif 1 Sortant\",\n  \"asset2out\": \"Actif 2 Sortant\",\n  \"asset1in\": \"Actif 1 Entrant\",\n  \"asset2in\": \"Actif 2 Entrant\",\n  \"effective_price\": \"Prix effectif\",\n  \"amm_account_id\": \"Identifiant du compte AMM\",\n  \"lp_tokens\": \"Jetons LP\",\n  \"min_slot_price\": \"Prix minimum de l'emplacement\",\n  \"max_slot_price\": \"Prix maximum de l'emplacement\",\n  \"auth_accounts\": \"Comptes autorisés\",\n  \"network_cannot_be_crawled\": \"Ce réseau ne peut pas être exploré.\",\n  \"check_crawl_existed\": \"Veuillez contacter l'opérateur pour vous assurer qu'il dispose d'un accès /crawl accessible ou d'un ensemble vl.\",\n  \"peer_crawled_context\": \"Pour plus de contexte, voir https://xrpl.org/peer-crawler.html\",\n  \"xchainbridge\": \"Pont XChain\",\n  \"xchain_account_claim_count\": \"Nombre de réclamations de compte XChain\",\n  \"xchain_account_create_count\": \"Nombre de compte XChain créés\",\n  \"min_signer_quorum\": \"Poids minimum <0>{{quorum}}</0> requis.\",\n  \"holder\": \"Titulaire\",\n  \"action_from\": \"<0><0>{{action}}</0></0> <1><0>{{amount}}</0></1> de <3><0>{{destination}}</0></3>\",\n  \"action_from_and\": null,\n  \"claws_back\": \"Recouvrement\",\n  \"claws_back_from\": \"Recouvrement de <destination/>\",\n  \"instruct_to_claw\": \"Le montant maximum récupérable est de <montant/>.\",\n  \"hook\": \"Hook\",\n  \"hooks\": \"Hooks\",\n  \"hook_emitted\": \"Cette transaction a été émise par un hook.\",\n  \"emit_details\": \"Détails de l'émission\",\n  \"hook_parameters\": \"Paramètres du hook\",\n  \"hook_executions\": \"Exécutions de crochet\",\n  \"emit_generation\": \"Nombre <0>{{emit}}</0> dans la ligne des transactions générées.\",\n  \"emit_hook_hash\": \"Émis par le crochet <0>{{hash}}</0>\",\n  \"emit_parent\": \"Émis par un crochet déclenché par <0>{{hash}}</0>\",\n  \"emit_callback\": \"Le rappel d'émission est <0>{{callback}}<0>\",\n  \"hook_exec_hash\": \"Le hook <0>{{hash}}</0> a été déclenché\",\n  \"hook_exec_account\": \"Sur le compte <0>{{account}}</0>\",\n  \"hook_exec_return\": \"Le code retourné est <0>{{code}}</0> avec la valeur \\\"<1>{{string}}</1>\\\".\",\n  \"hook_exec_emit_count\": \"<0>{{count}}</0> transactions émises\",\n  \"hash\": \"Hash\",\n  \"grant\": \"Allocation\",\n  \"namespace\": \"Espace de noms\",\n  \"api_version\": \"Version API\",\n  \"triggered_on\": \"Déclenché Par\",\n  \"name\": null,\n  \"introduced_in\": null,\n  \"yeas\": null,\n  \"nays\": null,\n  \"eta\": null,\n  \"amendment_summary\": null,\n  \"not\": null,\n  \"enable_tx\": null,\n  \"all\": null,\n  \"yeas_count\": null,\n  \"nays_count\": null,\n  \"yeas_percent\": null,\n  \"nays_percent\": null,\n  \"%_of_validators\": null,\n  \"amendment_not_found\": null,\n  \"check_amendment_key\": null,\n  \"did_document\": null,\n  \"attestation\": null,\n  \"note\": null,\n  \"indicate_unl\": null,\n  \"transaction_tokens_involved\": null,\n  \"transaction_tokens_swapped\": null,\n  \"oracle_document_id\": null,\n  \"provider\": null,\n  \"last_update_time\": null,\n  \"asset_class\": null,\n  \"trading_pairs\": null,\n  \"deleted\": null,\n  \"holders_count\": null,\n  \"trustlines\": null,\n  \"website\": null,\n  \"mpt_issuance_id\": null,\n  \"asset_scale\": null,\n  \"metadata\": null,\n  \"max_amount\": null,\n  \"mpt_holder\": null,\n  \"check_mpt_id\": null,\n  \"outstanding_amount\": null,\n  \"locked\": null,\n  \"can_lock\": null,\n  \"require_auth\": null,\n  \"can_escrow\": null,\n  \"can_trade\": null,\n  \"can_transfer\": null,\n  \"can_clawback\": null,\n  \"enable_amendment_name\": null,\n  \"amendment_status\": null,\n  \"expected_date\": null,\n  \"base\": null,\n  \"credential_type\": null,\n  \"credential_issuer\": null,\n  \"subject\": null,\n  \"expiration\": null,\n  \"domain_id\": null,\n  \"accepted_credentials\": null,\n  \"credential_ids\": null,\n  \"data\": null,\n  \"finish_function\": null,\n  \"quorum_description\": null,\n  \"avg_fee_description\": null,\n  \"ledger_interval_description\": null,\n  \"txn_ledger_description\": null,\n  \"txn_sec_description\": null,\n  \"load_fee_description\": null,\n  \"nUnl_description\": null,\n  \"computation_allowance\": null,\n  \"gas\": null,\n  \"delegate\": null,\n  \"permissions\": null,\n  \"pertaining_to_the_Permissioned_Domain\": null,\n  \"tx_delegated_to\": null,\n  \"account_delegates_to\": null,\n  \"delegate_to\": null,\n  \"volume\": null,\n  \"holders\": null,\n  \"trades\": null,\n  \"no_of_tokens\": null,\n  \"volume_24h_total\": null,\n  \"volume_24h_total_description\": null,\n  \"market_cap_metric_description\": null,\n  \"market_cap_description\": null,\n  \"24h_description\": null,\n  \"volume_description\": null,\n  \"trades_description\": null,\n  \"tvl_description\": null,\n  \"stablecoin_description\": null,\n  \"stablecoin\": null,\n  \"wrapped\": null,\n  \"tokens_footnote\": null,\n  \"xrplmeta_guidelines\": null,\n  \"inner_transaction\": null,\n  \"batch_table_detail_count\": null,\n  \"batch_table_detail_list\": null,\n  \"batch_description\": null,\n  \"batch\": null,\n  \"successful\": null,\n  \"failed\": null,\n  \"not-validated\": null,\n  \"asset\": null,\n  \"assets_maximum\": null,\n  \"mptoken_metadata\": null,\n  \"withdrawal_policy\": null,\n  \"account_creates_vault\": null,\n  \"vault_id\": null,\n  \"single_asset_vault\": null,\n  \"loan_broker_id\": null,\n  \"loan_id\": null,\n  \"management_fee_rate\": null,\n  \"debt_maximum\": null,\n  \"cover_rate_minimum\": null,\n  \"cover_rate_liquidation\": null,\n  \"counterparty\": null,\n  \"principal_requested\": null,\n  \"payment_total\": null,\n  \"payment_interval\": null,\n  \"grace_period\": null,\n  \"loan_origination_fee\": null,\n  \"loan_service_fee\": null,\n  \"late_payment_fee\": null,\n  \"close_payment_fee\": null,\n  \"full_payment_fee\": null,\n  \"overpayment_fee\": null,\n  \"interest_rate\": null,\n  \"late_interest_rate\": null,\n  \"close_interest_rate\": null,\n  \"overpayment_interest_rate\": null,\n  \"set_vault_data\": null,\n  \"set_vault_assets_maximum\": null,\n  \"set_vault_domain_id\": null,\n  \"account_deposits_into_vault\": null,\n  \"account_withdraws_from_vault\": null,\n  \"account_clawbacks_from_vault\": null,\n  \"account_clawbacks_from_vault_amount_omitted\": null,\n  \"account_deletes_vault\": null,\n  \"vault_create_table_detail\": null,\n  \"withdraws\": null,\n  \"deletes\": null,\n  \"vault_delete_table_detail\": null,\n  \"account_flag_title_lsf_global_freeze\": null,\n  \"account_flag_title_lsf_disable_master\": null,\n  \"account_flag_title_lsf_default_ripple\": null,\n  \"account_flag_title_lsf_allow_trustline_clawback\": null,\n  \"account_flag_title_lsf_allow_trustline_locking\": null,\n  \"account_flag_title_lsf_require_destination_tag\": null,\n  \"account_flag_title_lsf_no_freeze\": null,\n  \"account_flag_title_lsf_require_auth\": null,\n  \"account_flag_title_lsf_disallow_xrp\": null,\n  \"account_flag_title_lsf_disallow_incoming_trustline\": null,\n  \"account_flag_title_lsf_disallow_incoming_pay_chan\": null,\n  \"account_flag_title_lsf_disallow_incoming_nft_token_offer\": null,\n  \"account_flag_title_asf_authorized_nft_token_minter\": null,\n  \"account_flag_title_lsf_disallow_incoming_check\": null,\n  \"account_flag_title_lsf_deposit_auth\": null,\n  \"account_flag_title_asf_account_txn_id\": null,\n  \"account_flag_description_lsf_global_freeze\": null,\n  \"account_flag_description_lsf_disable_master\": null,\n  \"account_flag_description_lsf_default_ripple\": null,\n  \"account_flag_description_lsf_allow_trustline_clawback\": null,\n  \"account_flag_description_lsf_allow_trustline_locking\": null,\n  \"account_flag_description_lsf_require_destination_tag\": null,\n  \"account_flag_description_lsf_no_freeze\": null,\n  \"account_flag_description_lsf_require_auth\": null,\n  \"account_flag_description_lsf_disallow_xrp\": null,\n  \"account_flag_description_lsf_disallow_incoming_trustline\": null,\n  \"account_flag_description_lsf_disallow_incoming_pay_chan\": null,\n  \"account_flag_description_lsf_disallow_incoming_nft_token_offer\": null,\n  \"account_flag_description_asf_authorized_nft_token_minter\": null,\n  \"account_flag_description_lsf_disallow_incoming_check\": null,\n  \"account_flag_description_lsf_deposit_auth\": null,\n  \"account_flag_description_asf_account_txn_id\": null,\n  \"account_page_address\": null,\n  \"account_page_address_tag\": null,\n  \"account_page_classic_address\": null,\n  \"account_page_deleted_account_label\": null,\n  \"account_page_deleted_account_warning\": null,\n  \"account_page_extended_address\": null,\n  \"account_page_domain\": null,\n  \"account_page_reserve_balance\": null,\n  \"account_page_xrp_balance\": null,\n  \"account_page_xrp_balance_in_usd\": null,\n  \"account_page_account_properties\": null,\n  \"account_page_flags\": null,\n  \"account_page_flag_status_enabled\": null,\n  \"account_page_flag_status_disabled\": null,\n  \"account_page_signers\": null,\n  \"account_page_signer_weight\": null,\n  \"account_page_details\": null,\n  \"account_page_current_sequence\": null,\n  \"account_page_ticket_count\": null,\n  \"account_page_email_hash\": null,\n  \"account_page_payment_channels\": null,\n  \"account_page_payment_channels_text\": null,\n  \"account_page_nft_minter\": null,\n  \"account_page_asset_held_title\": null,\n  \"account_page_asset_issued_title\": null,\n  \"account_page_asset_tab_iou\": null,\n  \"account_page_asset_tab_lptoken\": null,\n  \"account_page_asset_tab_mpt\": null,\n  \"account_page_asset_tab_nft\": null,\n  \"account_page_asset_table_column_amm_instance\": null,\n  \"account_page_asset_table_column_amm_pair\": null,\n  \"account_page_asset_table_column_asset_class\": null,\n  \"account_page_asset_table_column_balance\": null,\n  \"account_page_asset_table_column_balance_usd\": null,\n  \"account_page_asset_table_column_circulating_supply\": null,\n  \"account_page_asset_table_column_currency_code\": null,\n  \"account_page_asset_table_column_frozen\": null,\n  \"account_page_asset_table_column_highest_bid\": null,\n  \"account_page_asset_table_column_holders\": null,\n  \"account_page_asset_table_column_issuer\": null,\n  \"account_page_asset_table_column_locked\": null,\n  \"account_page_asset_table_column_lowest_ask\": null,\n  \"account_page_asset_table_column_price_usd\": null,\n  \"account_page_asset_table_column_share\": null,\n  \"account_page_asset_table_column_supply\": null,\n  \"account_page_asset_table_column_ticker\": null,\n  \"account_page_asset_table_column_token_id\": null,\n  \"account_page_asset_table_column_transfer_fee\": null,\n  \"account_page_asset_table_column_trustlines\": null,\n  \"account_page_asset_table_column_url\": null,\n  \"account_page_asset_table_mpt_locked_global\": null,\n  \"account_page_asset_table_mpt_locked_individual\": null,\n  \"account_page_asset_table_no_iou\": null,\n  \"account_page_asset_table_no_lptoken\": null,\n  \"account_page_asset_table_no_mpt\": null,\n  \"account_page_asset_table_no_nft\": null,\n  \"tx_hash\": null,\n  \"timestamp\": null,\n  \"amount_in\": null,\n  \"amount_out\": null,\n  \"rate\": null,\n  \"refresh_data\": null,\n  \"token_page.general_overview\": null,\n  \"token_page.market_data\": null,\n  \"token_page.all_tx\": null,\n  \"token_page.dex_tx\": null,\n  \"token_page.transfers_tx\": null,\n  \"token_page.holders_table\": null,\n  \"token_page.issuer\": null,\n  \"token_page.price\": null,\n  \"token_page.holders\": null,\n  \"token_page.supply\": null,\n  \"token_page.market_cap\": null,\n  \"token_page.volume_24h\": null,\n  \"token_page.trades_24h\": null,\n  \"token_page.amm_tvl\": null,\n  \"token_page.transfer_fee\": null,\n  \"token_page.holders_rank\": null,\n  \"token_page.holders_num_tokens\": null,\n  \"token_page.holders_percent_supply\": null,\n  \"token_page.holders_no_holders\": null,\n  \"token_page.holders_usd_value\": null,\n  \"token_page.transfers_no_transfers\": null,\n  \"token_page.circulating_supply\": null,\n  \"token_page.dex_type\": null,\n  \"token_page.dex_amount_in_tooltip\": null,\n  \"token_page.dex_amount_out_tooltip\": null,\n  \"token_page.dex_rate_tooltip\": null,\n  \"token_page.dex_no_trades\": null,\n  \"token_page.token_label\": null,\n  \"token_page.category_text\": null,\n  \"token_type.iou\": null,\n  \"token_type.mpt\": null,\n  \"iou_page.trustlines\": null,\n  \"mpt_page.metadata_warning\": null,\n  \"data_available_from_notice\": null,\n  \"copied\": null,\n  \"click_to_copy\": null,\n  \"withdraw\": null,\n  \"delete\": null,\n  \"rates\": null,\n  \"loan_broker_rates_detail\": null,\n  \"loan_rates_detail\": null,\n  \"loan_fees_detail\": null,\n  \"loan_terms_detail\": null,\n  \"no_limit\": null,\n  \"first_loss_capital\": null,\n  \"vault\": null,\n  \"vault_not_found\": null,\n  \"invalid_vault_id\": null,\n  \"check_vault_id\": null,\n  \"get_vault_failed\": null,\n  \"private_vault\": null,\n  \"perm_domain_id\": null,\n  \"total_value_locked\": null,\n  \"shares\": null,\n  \"assets_available\": null,\n  \"unrealized_loss\": null,\n  \"other_data\": null,\n  \"max_total_supply\": null,\n  \"available_to_borrow\": null,\n  \"not_available\": null,\n  \"first_come_first_served\": null,\n  \"loans\": null,\n  \"loan_broker\": null,\n  \"total_debt\": null,\n  \"maximum_debt\": null,\n  \"management_fee\": null,\n  \"borrower\": null,\n  \"amount_requested\": null,\n  \"outstanding_balance\": null,\n  \"loan_status_current\": null,\n  \"loan_status_default\": null,\n  \"all_loans\": null,\n  \"loan_status_impaired\": null,\n  \"loan_status_paid_off\": null,\n  \"next_due_date\": null,\n  \"origination_date\": null,\n  \"frequency\": null,\n  \"installments\": null,\n  \"prepayment_fee\": null,\n  \"no_loans_message\": null,\n  \"loan_default_detected\": null,\n  \"no_loan_brokers_message\": null,\n  \"depositors_fetch_error\": null,\n  \"no_depositors_message\": null,\n  \"depositors\": null,\n  \"percent_of_supply\": null,\n  \"value\": null,\n  \"currency_toggle_help\": null,\n  \"currency_toggle_description\": null,\n  \"currency_toggle_loading\": null,\n  \"currency_toggle_loading_description\": null,\n  \"currency_toggle_unavailable\": null,\n  \"currency_toggle_unavailable_description\": null,\n  \"vaults\": null,\n  \"vaults_tvl\": null,\n  \"vaults_tvl_description\": null,\n  \"vaults_outstanding_loans\": null,\n  \"vaults_outstanding_loans_description\": null,\n  \"vaults_loans_originated\": null,\n  \"vaults_loans_originated_description\": null,\n  \"vaults_avg_interest_rate\": null,\n  \"vaults_avg_interest_rate_description\": null,\n  \"vaults_num_vaults\": null,\n  \"vaults_num_vaults_description\": null,\n  \"vaults_utilization_ratio\": null,\n  \"vaults_utilization_ratio_description\": null,\n  \"vaults_filter_all_assets\": null,\n  \"vaults_filter_stablecoins\": null,\n  \"vaults_search_placeholder\": null,\n  \"vaults_table_vault_id\": null,\n  \"vaults_table_asset\": null,\n  \"vaults_table_tvl\": null,\n  \"vaults_table_outstanding_loans\": null,\n  \"vaults_table_utilization_ratio\": null,\n  \"vaults_table_avg_interest_rate\": null,\n  \"vaults_table_website\": null,\n  \"vaults_no_results\": null,\n  \"vaults_disclaimer\": null,\n  \"amm_pool\": null,\n  \"basic_info\": null,\n  \"market_data\": null,\n  \"auction\": null,\n  \"created_on\": null,\n  \"volume_24h_tooltip\": null,\n  \"fees_24h\": null,\n  \"fees_24h_tooltip\": null,\n  \"apr_24h\": null,\n  \"apr_24h_tooltip\": null,\n  \"current_holder\": null,\n  \"discounted_fee\": null,\n  \"price_paid\": null,\n  \"replacement_cost\": null,\n  \"all_transactions\": null,\n  \"dex_trades\": null,\n  \"deposits\": null,\n  \"withdrawals\": null,\n  \"lp_tokens_received\": null,\n  \"lp_tokens_redeemed\": null,\n  \"tvl_and_volume\": null,\n  \"no_deposits\": null,\n  \"no_withdrawals\": null,\n  \"liquidity_providers\": null,\n  \"balance\": null,\n  \"lp_token_currency_code\": null,\n  \"asset_2\": null,\n  \"usd_value\": null,\n  \"amm_pool_deleted_label\": null,\n  \"amm_pool_deleted_text\": null,\n  \"amms\": null,\n  \"top_1000_amms\": null,\n  \"general_info\": null,\n  \"number_of_amms\": null,\n  \"number_of_lps\": null,\n  \"number_of_amms_tooltip\": null,\n  \"number_of_lps_tooltip\": null,\n  \"search_amms\": null,\n  \"tvl_tooltip\": null,\n  \"volume_24h_all_tooltip\": null\n}\n"
  },
  {
    "path": "public/locales/ja-JP/translations.json",
    "content": "{\n  \"action\": \"アクション\",\n  \"assets\": \"資産\",\n  \"assets.no_nfts_message\": \"NFTが見つかりません。\",\n  \"assets.no_mpts_message\": null,\n  \"network\": \"ネットワーク\",\n  \"amendments\": \"Amendment\",\n  \"network_name\": \"不明なネットワーク\",\n  \"network_name_testnet\": \"Testnet\",\n  \"network_name_mainnet\": \"Mainnet\",\n  \"network_name_devnet\": \"Devnet\",\n  \"network_name_xahau_mainnet\": \"Xahau Mainnet\",\n  \"network_name_xahau_testnet\": \"Xahau Testnet\",\n  \"network_name_custom\": \"Custom\",\n  \"app.meta.description\": \"XRPLネットワークエクスプローラ\",\n  \"app.meta.author\": \"Ripple\",\n  \"explorer\": \"エクスプローラ\",\n  \"xrpl_org\": \"XRPL.org\",\n  \"github\": \"GitHub\",\n  \"header.search.placeholder\": \"トークン、アドレス、Ledger、トランザクションで検索\",\n  \"xrp\": \"XRP\",\n  \"xrpl_explorer\": \"XRPL エクスプローラ\",\n  \"ledgers\": null,\n  \"ledger\": null,\n  \"taxon\": null,\n  \"token_id\": null,\n  \"token_transactions\": \"Tokenトランザクション\",\n  \"transactions\": \"トランザクション\",\n  \"transaction_short\": \"TX\",\n  \"nodes\": \"ノード\",\n  \"validator\": \"バリデータ\",\n  \"validators\": \"バリデータ\",\n  \"upgrade_status\": \"アップグレード情報\",\n  \"version\": null,\n  \"component_error\": \"不具合が発生しました！\",\n  \"1H\": \"1時間\",\n  \"24H\": \"24時間\",\n  \"30D\": \"30日\",\n  \"total_transactions\": \"トランザクション数\",\n  \"total_fees\": \"合計トランザクション手数料\",\n  \"async_component_failed\": \"コンポーネントの読み込みに失敗しました\",\n  \"account_not_found\": \"アカウントが見つかりません\",\n  \"account_empty_title\": \"アカウントIDが入力されていません\",\n  \"account_empty_hint\": \"検索欄にアカウントIDを入力してください\",\n  \"check_account_id\": \"アカウント IDを確認してください\",\n  \"accounts.xrp_balance\": \"XRP 残高\",\n  \"accounts.other_balances\": \"その他の残高\",\n  \"accounts.other_balances_short\": \"その他残高\",\n  \"amount\": \"金額\",\n  \"currency_code\": \"通貨名\",\n  \"currency_balance\": \"<0>{{currency}}</0> 残高\",\n  \"load_more_action\": \"さらに読み込む...\",\n  \"account_transactions\": \"アカウントのトランザクション\",\n  \"transaction_type\": \"タイプ\",\n  \"transaction_action_CANCEL\": \"キャンセル\",\n  \"transaction_action_CREATE\": \"作成\",\n  \"transaction_action_FINISH\": \"終了\",\n  \"transaction_action_MODIFY\": \"変更\",\n  \"transaction_action_SEND\": \"送信\",\n  \"transaction_category_ACCOUNT\": \"アカウント\",\n  \"transaction_category_DEX\": \"Dex (AMM, オファー, トラストライン, トークン)\",\n  \"transaction_category_NFT\": \"NFT\",\n  \"transaction_category_PAYMENT\": \"支払い\",\n  \"transaction_category_PSEUDO\": \"擬似Tx\",\n  \"transaction_category_XCHAIN\": null,\n  \"transaction_category_OTHER\": null,\n  \"transaction_legend_toggle_hide\": \"凡例を閉じる\",\n  \"transaction_legend_toggle_show\": \"凡例を開く\",\n  \"transactions.date_header\": \"日付/時刻 (UTC)\",\n  \"no_transactions_message\": \"該当するトランザクションはありません。\",\n  \"get_vault_transactions_failed\": null,\n  \"retry_action\": \"再試行...\",\n  \"uh_oh\": \"うわっ!\",\n  \"not_found_default_title\": \"ページが見つかりません\",\n  \"not_found_check_url\": \"URLを再確認してください\",\n  \"not_found\": \"見つかりません\",\n  \"hash_not_found\": null,\n  \"buy\": \"買い\",\n  \"sell\": \"売り\",\n  \"price\": \"価格\",\n  \"ledger_index\": \"Ledgerインデックス\",\n  \"to\": \"送信先\",\n  \"from\": \"送信元\",\n  \"request\": null,\n  \"terms\": null,\n  \"send\": \"送金\",\n  \"delivered\": \"送金済み\",\n  \"cancel_offer\": \"オファー取消\",\n  \"convert_maximum\": \"最大変換量\",\n  \"convert_to\": \"変換先\",\n  \"using_at_most\": \"最大送信量\",\n  \"partial_payment_allowed\": \"部分支払いが許可されています\",\n  \"set_limit\": \"トラスト制限額の設定\",\n  \"escrow\": \"エスクロー\",\n  \"cancel_escrow\": \"エスクローのキャンセル\",\n  \"finish_escrow\": \"エスクローの終了\",\n  \"escrow_amount\": \"エスクローの金額\",\n  \"escrow_destination\": \"エスクローの宛先\",\n  \"escrow_transaction\": \"エスクロートランザクション\",\n  \"escrow_condition_short\": \"エスクローの条件\",\n  \"escrow_fulfillment\": \"エスクローの履行\",\n  \"condition\": \"条件\",\n  \"fulfillment\": \"履行\",\n  \"cancel_after\": \"キャンセル可能日時\",\n  \"finish_after\": \"終了可能日時\",\n  \"settle_delay\": \"決済待機時間\",\n  \"channel_id\": \"チャンネルID\",\n  \"seconds\": \"秒\",\n  \"seconds_short\": \"秒\",\n  \"regular_key\": \"レギュラーキー\",\n  \"unset_regular_key\": \"レギュラーキーの解除\",\n  \"unset_signer_list\": \"署名者リストの解除\",\n  \"set_flag\": \"フラグの設定\",\n  \"clear_flag\": \"フラグの解除\",\n  \"email_hash\": \"メールアドレスのハッシュ\",\n  \"message_key\": \"メッセージキー\",\n  \"out_of\": \"of\",\n  \"weight\": \"定足数\",\n  \"the_account\": null,\n  \"create_payment_channel\": null,\n  \"destination_tag\": \"宛先タグ\",\n  \"source_tag\": \"送信元タグ\",\n  \"channel_settle_delay\": null,\n  \"the_channel_id_is\": null,\n  \"the_channel_amount_is\": null,\n  \"update_payment_channel\": null,\n  \"the_channel_balance_is\": null,\n  \"amm_delete_description\": null,\n  \"amm_delete_description_caveat\": null,\n  \"payment_channel_closed_description\": null,\n  \"set_signer_list_description\": \"アカウントの署名者の最小定足数を {{quorum}} に設定します\",\n  \"unset_signer_list_description\": \"アカウントからすべての署名者を削除します\",\n  \"transaction_initiated_by\": null,\n  \"increase_channel_amount_by\": null,\n  \"channel_amount_increase\": null,\n  \"channel_amount\": null,\n  \"total_claimed\": null,\n  \"amount_claimed\": null,\n  \"close_request\": null,\n  \"renew_channel\": null,\n  \"payment_channel_closed\": null,\n  \"paychannel_node_line1\": null,\n  \"paychannel_amount_changed\": null,\n  \"paychannel_balance_changed\": null,\n  \"setfee_fees_description\": \"今後のトランザクションは手数料として最低 <amount /> が必要となります。\",\n  \"setfee_reserves_description\": \"アカウントは、 <base /> の基本準備金と、そのアカウントが所有する追加のオブジェクトごとに、追加の <increment /> を保持する必要が生じました。\",\n  \"setfee_docs_description\": \"ドキュメントをご覧ください: <0>Fees</0>\",\n  \"setfee_base_fee\": \"基本手数料\",\n  \"setfee_reserve\": \"アカウント準備金\",\n  \"setfee_reserve_increment\": \"オブジェクト準備金\",\n  \"formatted_date\": \"日付/時間 ({{timeZone}})\",\n  \"transaction_type_name_AMMCreate\": \"AMMの作成\",\n  \"transaction_type_name_AMMDelete\": \"AMMの削除\",\n  \"transaction_type_name_AMMDeposit\": \"AMMへの預入\",\n  \"transaction_type_name_AMMWithdraw\": \"AMMからの引出\",\n  \"transaction_type_name_AMMVote\": \"AMMへの投票\",\n  \"transaction_type_name_AMMBid\": \"AMMへの入札\",\n  \"transaction_type_name_AMMClawback\": null,\n  \"transaction_type_name_AccountSet\": \"アカウント設定\",\n  \"transaction_type_name_Batch\": null,\n  \"transaction_type_name_CheckCancel\": \"チェックの取消\",\n  \"transaction_type_name_CheckCash\": \"チェックの現金化\",\n  \"transaction_type_name_CheckCreate\": \"チェックの作成\",\n  \"transaction_type_name_CredentialAccept\": null,\n  \"transaction_type_name_CredentialCreate\": null,\n  \"transaction_type_name_CredentialDelete\": null,\n  \"transaction_type_name_DelegateSet\": null,\n  \"transaction_type_name_DIDDelete\": null,\n  \"transaction_type_name_DIDSet\": null,\n  \"transaction_type_name_DepositPreauth\": \"入金の事前承認\",\n  \"transaction_type_name_Error_Cases\": \"エラーケース\",\n  \"transaction_type_name_EscrowCancel\": \"エスクローの取消\",\n  \"transaction_type_name_EscrowCreate\": \"エスクローの作成\",\n  \"transaction_type_name_EscrowFinish\": \"エスクロー終了\",\n  \"transaction_type_name_Invoke\": \"呼び出し\",\n  \"transaction_type_name_LoanBrokerSet\": null,\n  \"transaction_type_name_LoanBrokerDelete\": null,\n  \"transaction_type_name_LoanBrokerCoverDeposit\": null,\n  \"transaction_type_name_LoanBrokerCoverWithdraw\": null,\n  \"transaction_type_name_LoanBrokerCoverClawback\": null,\n  \"transaction_type_name_LoanSet\": null,\n  \"transaction_type_name_LoanDelete\": null,\n  \"transaction_type_name_LoanManage\": null,\n  \"transaction_type_name_LoanPay\": null,\n  \"transaction_type_name_MPTokenIssuanceCreate\": null,\n  \"transaction_type_name_MPTokenIssuanceDestroy\": null,\n  \"transaction_type_name_MPTokenIssuanceSet\": null,\n  \"transaction_type_name_MPTokenAuthorize\": null,\n  \"transaction_type_name_NFTokenAcceptOffer\": \"NFTオファーの承認\",\n  \"transaction_type_name_NFTokenBurn\": \"NFTのバーン\",\n  \"transaction_type_name_NFTokenCancelOffer\": \"NFTオファーの取り消し\",\n  \"transaction_type_name_NFTokenCreateOffer\": \"NFTオファーの作成\",\n  \"transaction_type_name_NFTokenMint\": \"NFTのミント\",\n  \"transaction_type_name_OfferCancel\": \"オファーの取消\",\n  \"transaction_type_name_OfferCreate\": \"オファーの作成\",\n  \"transaction_type_name_OracleDelete\": \"オラクルの削除\",\n  \"transaction_type_name_OracleSet\": \"オラクルの設定\",\n  \"transaction_type_name_Payment\": \"支払い\",\n  \"transaction_type_name_PaymentChannelClaim\": \"ペイメントチャネル請求\",\n  \"transaction_type_name_PaymentChannelCreate\": \"ペイメントチャネル作成\",\n  \"transaction_type_name_PaymentChannelFund\": \"ペイメントチャネル資金\",\n  \"transaction_type_name_PermissionedDomainDelete\": null,\n  \"transaction_type_name_PermissionedDomainSet\": null,\n  \"transaction_type_name_SetHook\": \"Hookの設定\",\n  \"transaction_type_name_SetRegularKey\": \"レギュラーキーの設定\",\n  \"transaction_type_name_SignerListSet\": \"署名者リスト設定\",\n  \"transaction_type_name_TicketCreate\": \"チケットの作成\",\n  \"transaction_type_name_TrustSet\": \"トラスト設定\",\n  \"transaction_type_name_VaultCreate\": null,\n  \"transaction_type_name_VaultSet\": null,\n  \"transaction_type_name_VaultDeposit\": null,\n  \"transaction_type_name_VaultWithdraw\": null,\n  \"transaction_type_name_VaultClawback\": null,\n  \"transaction_type_name_VaultDelete\": null,\n  \"transaction_type_name_XChainAccountCreateCommit\": null,\n  \"transaction_type_name_XChainAddAccountCreateAttestation\": null,\n  \"transaction_type_name_XChainAddClaimAttestation\": null,\n  \"transaction_type_name_XChainClaim\": null,\n  \"transaction_type_name_XChainCommit\": null,\n  \"transaction_type_name_XChainCreateBridge\": null,\n  \"transaction_type_name_XChainCreateClaimID\": null,\n  \"transaction_type_name_XChainModifyBridge\": null,\n  \"transaction_type_name_EnableAmendment\": \"Amendmentの有効化\",\n  \"transaction_type_name_SetFee\": \"手数料設定\",\n  \"transaction_type_name_UNLModify\": \"UNLの変更\",\n  \"transaction_type_name_AccountDelete\": \"アカウントの削除\",\n  \"generic_error\": \"不具合が発生しました\",\n  \"not_your_fault\": \"システム側のエラーの可能性があります\",\n  \"come_back_later\": \"今後利用可能になる予定です\",\n  \"invalid_ledger_id\": \"Ledger IDが無効です\",\n  \"invalid_transaction_hash\": \"トランザクションのハッシュ値が無効です\",\n  \"ledger_not_found\": \"Ledgerが見つかりません\",\n  \"check_ledger_id\": \"Ledger IDを確認してください\",\n  \"server_ledgers_hint\": null,\n  \"use_search\": \"検索機能をご利用ください\",\n  \"ledger_has_no_trans\": \"Ledgerにはトランザクションがありません\",\n  \"less_than\": \"未満\",\n  \"transaction_not_found\": \"トランザクションが見つかりません\",\n  \"transaction_empty_title\": \"トランザクションハッシュが指定されていません\",\n  \"transaction_empty_hint\": \"検索欄にトランザクションハッシュを入力してください\",\n  \"validator_not_found\": \"バリデータが見つかりません\",\n  \"check_transaction_hash\": \"トランザクションのハッシュ値を確認してください\",\n  \"wrong_network\": null,\n  \"check_validator_key\": \"バリデータのキーを確認してください\",\n  \"transaction\": \"トランザクション\",\n  \"success\": \"成功\",\n  \"fail\": \"失敗\",\n  \"simple\": \"シンプル\",\n  \"detailed\": \"詳細\",\n  \"details\": \"詳細\",\n  \"history\": \"履歴\",\n  \"voting\": \"投票中\",\n  \"raw\": \"生データ\",\n  \"expand\": \"展開\",\n  \"collapse\": \"折りたたみ\",\n  \"try_detailed_raw\": \"`詳細`または`生データ`をご覧ください。\",\n  \"account\": \"アカウント\",\n  \"transaction_cost\": \"トランザクション手数料\",\n  \"transaction_cost_short\": \"手数料\",\n  \"sequence_number\": \"シーケンス番号\",\n  \"sequence_number_short\": \"シーケンス番号\",\n  \"serial\": \"シリアル\",\n  \"n_a\": \"該当なし\",\n  \"memos\": \"メモ\",\n  \"flags\": \"フラグ\",\n  \"status\": \"ステータス\",\n  \"successful_transaction\": \"このトランザクションは正常に終了しました。\",\n  \"fail_transaction\": \"このトランザクションの処理に失敗しました。ステータスコードは <0>{{code}}</0> です\",\n  \"transaction_validated\": \"次のLedgerで検証済です :\",\n  \"on\": null,\n  \"description\": \"説明\",\n  \"signers\": \"署名者\",\n  \"decoded_hex\": \"デコード済16進数\",\n  \"transaction_consumed_fee\": \"このトランザクションでの消費XRP量： \",\n  \"meta\": \"メタデータ\",\n  \"number_of_affected_node\": \"次の {{count}}　のノードが変更されました。\",\n  \"nodes_type\": \"{{action}} ノード\",\n  \"node_meta_type\": \"ノードを {{action}} します: \",\n  \"transaction_balance_line_one\": \"<5><0>{{account}}</0></5> と <7><0>{{counterAccount}}</0></7> の間の <3><0>{{currency}}</0></3> RippleState ノードを <1><0>{{action}}</0></1> しました。\",\n  \"transaction_balance_line_two\": \"残高が <1><0>{{change}}</0></1> 変更され、<3><0>{{previousBalance}}</0></3> から <5><0>{{finalBalance}}</0></5> になりました。\",\n  \"transaction_outstanding_balance_line_two\": null,\n  \"transaction_owned_directory\": \"次の所有者のDirectoryNodeノードを {{action}} しました :\",\n  \"transaction_unowned_directory\": \"DirectoryNodeノードを {{action}} しました。\",\n  \"transaction_mptoken_line_one\": null,\n  \"transaction_mpt_issuance_line_one\": null,\n  \"owned_account_root\": \"次のアカウントのAccountRootノードを {{action}} しました： \",\n  \"unowned_account_root\": \"AccountRootノードを {{action}} しました。\",\n  \"account_balance_increased\": \"残高が <1><0>{{diffrence}}</0><1><0>{{currency}}</0></1></1> 増加し、<3><0>{{previous}}</0><1><0>{{currency}}</0></1></3> から <5><0>{{final}}</0><1><0>{{currency}}</0></1></5> になりました。\",\n  \"account_balance_decreased\": \"残高が <1><0>{{difference}}</0><1><0>{{currency}}</0></1></1> 減少し、<3><0>{{previous}}</0><1><0>{{currency}}</0></1></3> から <5><0>{{final}}</0><1><0>{{currency}}</0></1></5> になりました。\",\n  \"decreased_from_to\": \"は <1><0>{{change}}</0></1> 減少させ、<3><0>{{previous}}</0></3> から <5><0>{{final}}</0></5> になりました。\",\n  \"offer_node_meta\": \"シーケンス番号 <7><0>{{sequence}}</0></7> の <5><0>{{account}}</0></5> の <3><0>{{pair}}</0></3> オファーノードを <1><0>{{action}}</0></1> しました。\",\n  \"offer_replaces\": \"このオファーは次のオファー番号を置換します： \",\n  \"offer_partially_filled\": \"オファーの一部が約定しました。\",\n  \"offer_filled\": \"オファーが約定しました。\",\n  \"offer_cancelled\": \"オファーは取り消されました。\",\n  \"offer_replaced\": \"このオファーは次の新しいオファー番号に置換されました： \",\n  \"offer_lack_of_funds\": \"オファーの一部は約定しましたが、資金不足のため取り消されました。\",\n  \"transaction_sequence\": \"トランザクションのシーケンス番号： \",\n  \"trust_set_description\": \"<7><0>{{account}}</0></7> が保持可能な <5><0>{{issuer}}</0></5> からの <3><0>{{currency}}</0></3> の最大額は、<1><0>{{amount}}</0></1> に設定されました。\",\n  \"payment_desc_line_1\": \"支払いは、<source/> から <destination/> に対して行われます\",\n  \"the_source_tag_is\": \"支払い元のタグは\",\n  \"the_destination_tag_is\": \"支払い先のタグは\",\n  \"payment_desc_line_4\": \"支払い指示の額は\",\n  \"payment_desc_line_5\": \"、許容する支払い限度額は\",\n  \"payment_desc_line_6\": \"実際に支払われた額は\",\n  \"offer_cancel_description\": \"トランザクションによって、アカウントの次のオファー番号が取り消されました： \",\n  \"offer_create_desc_line_1\": \"<1><0>{{account}}</0></1> は、<5><0>{{takerPays}}</0><1><0>{{currency}}</0></1></5> を取得するために、<3><0>{{takerGets}}</0><1><0>{{currency}}</0></1></3> を支払うオファーを作成しました。\",\n  \"offer_create_desc_line_2\": \"このオファーの変換レートは\",\n  \"offer_create_desc_line_3\": \"トランザクションによって、アカウントの次のオファー番号も取り消されます :\",\n  \"offer_create_desc_line_5\": \"このオファーは許可ドメインに適用されます\",\n  \"offer_will_expire_desc\": \"オファーは、それまでに取り消されるか約定しない限り、<1><0>{{date}}</0></1> に失効します。\",\n  \"offer_did_expire_desc\": \"オファーは <1><0>{{date}}</0></1> に失効しました。\",\n  \"escrow_is_from\": \"エスクローは、<1><0>{{account}}</0></1> から <3><0>{{destination}}</0></3> に行われます。\",\n  \"escrow_is_created_by\": \"エスクローは <1><0>{{account}}</0></1> によって作成されており、資金は同じアカウントに返金されます。\",\n  \"escrowed_amount\": \"次の金額がエスクローされました：\",\n  \"escrow_condition\": \"エスクローの履行条件： \",\n  \"describe_cancel_after\": \"次の日時以降にキャンセル可能です： \",\n  \"describe_finish_after\": \"次の日時以降に終了可能です： \",\n  \"escrow_completion_desc\": \"次のアカウントにより執行が発動されました： \",\n  \"escrow_completion_desc_2\": \"エスクローされた <1><0>{{amount}}</0></1> は <3><0>{{destination}}</0></3> へ送金されました。\",\n  \"escrow_finish_fulfillment_desc\": \"次のアカウントにより履行されました： \",\n  \"escrow_cancellation_desc\": \"次のアカウントにり取り消しが執行されました： \",\n  \"escrow_cancellation_desc_2\": \"エスクローされた <1><0>{{amount}}</0></1> は <3><0>{{owner}}</0></3>　へ返金されました。\",\n  \"escrow_after_transaction_cost\": null,\n  \"escrow_created_by_desc\": \"エスクローは <1><0>{{account}}</0></1> のトランザクション <3><0>{{transaction}}</0></3> によって作成されました。\",\n  \"set_regular_key_description\": \"このアカウントのレギュラーキーを次のアカウントに設定しました： \",\n  \"unset_regular_key_description\": \"このアカウントのレギュラーキーを削除しました。\",\n  \"set_flag_description\": \"アカウントのフラグを設定しました： \",\n  \"clear_flag_description\": \"アカウントのフラグを削除しました： \",\n  \"set_domain_description\": \"アカウントのドメインを設定しました： \",\n  \"set_email_description\": \"アカウントのメールアドレスハッシュを設定しました： \",\n  \"set_message_key_description\": \"アカウントのメッセージキーを設定しました： \",\n  \"set_nftoken_minter_description\": \"<0>{{account}}</0> をNFTの認可発行者として設定しました。\",\n  \"deposit_auth\": \"<1><0>{{account}}</0></1> からの送金を許可しました\",\n  \"deposit_unauth\": \"<1><0>{{account}}</0></1> からの送金の許可を削除しました\",\n  \"deposit_auth_credentials\": null,\n  \"deposit_unauth_credentials\": null,\n  \"invalid_xrpl_address\": \"不正なXRPLアドレスです\",\n  \"loading\": \"読み込み中\",\n  \"get_ledger_failed\": \"レジャ情報ーを取得することができません\",\n  \"get_transaction_failed\": \"トランザクション情報を取得することができません\",\n  \"get_validator_failed\": \"バリデータ情報を取得することができません\",\n  \"get_account_state_failed\": \"アカウント情報を取得することができません\",\n  \"get_account_transactions_failed\": \"アカウントのトランザクションを取得することができません\",\n  \"get_account_transactions_try\": null,\n  \"pubkey\": \"公開鍵\",\n  \"node_pubkey\": \"ノードの公開鍵\",\n  \"ip\": \"IPアドレス\",\n  \"state\": \"状態\",\n  \"rippled_version\": \"バージョン\",\n  \"last_ledger\": \"最新レジャー\",\n  \"uptime\": \"稼働時間\",\n  \"peers\": \"ピア\",\n  \"in_out\": \"(in:out)\",\n  \"ledger_history\": \"レジャー履歴\",\n  \"quorum\": \"定足数\",\n  \"load\": \"読み込み\",\n  \"latency\": \"遅延\",\n  \"amendment_id\": null,\n  \"amendment_name\": \"Amendment名\",\n  \"voters\": \"投票\",\n  \"threshold\": \"閾値\",\n  \"consensus\": \"合意\",\n  \"enabled\": \"有効\",\n  \"disabled\": null,\n  \"on_tx\": null,\n  \"yes\": \"はい\",\n  \"no\": \"いいえ\",\n  \"deprecated\": \"非推奨\",\n  \"domain\": \"ドメイン\",\n  \"unl\": \"unl\",\n  \"fee\": \"手数料\",\n  \"ledger_interval\": \"平均レジャーインターバル\",\n  \"load_fee\": \"トランザクション手数料\",\n  \"txn_sec\": \"txn/秒\",\n  \"txn_ledger\": \"平均トランザクション数/レジャー\",\n  \"avg_fee\": \"平均トランザクション手数料\",\n  \"txn_count\": \"txn数\",\n  \"nUnlCol\": \"nUNL\",\n  \"nUnl\": \"nUNLバリデータ\",\n  \"fees\": \"手数料\",\n  \"total\": \"合計\",\n  \"missing\": \"欠落\",\n  \"authorize\": null,\n  \"unauthorize\": null,\n  \"missed_validations\": \"バリデーション失敗数:{{count}}\",\n  \"incomplete\": null,\n  \"base_fee\": \"基本手数料\",\n  \"account_reserve\": \"アカウント準備金\",\n  \"object_reserve\": \"オブジェクト準備金\",\n  \"vote\": \"投票\",\n  \"no_amendment_in_voting\": \"投票中のAmendmentはありません\",\n  \"required\": \"必須\",\n  \"source\": \"送金元\",\n  \"destination\": \"宛先\",\n  \"claimed\": \"請求済み\",\n  \"remaining\": \"残り\",\n  \"inbound_total\": \"受信合計\",\n  \"outbound_total\": \"送信合計\",\n  \"payment_channels\": \"ペイメントチャンネル\",\n  \"available_in\": null,\n  \"channels\": \"チャンネル\",\n  \"account_info\": \"アカウント情報\",\n  \"reserve\": \"準備金\",\n  \"current_sequence\": \"現在のシーケンス\",\n  \"escrows\": \"エスクロー\",\n  \"nodes_found\": \"検出されたノード\",\n  \"unmapped\": \"マッピングなし\",\n  \"validators_found\": \"検出されたバリデータ\",\n  \"pause\": \"停止\",\n  \"resume\": \"再開\",\n  \"flag_ledger\": \"フラグレジャー\",\n  \"ticket\": \"チケット\",\n  \"ticket_sequence\": \"チケットシーケンス番号\",\n  \"ticket_count\": \"チケット数\",\n  \"ticket_used\": \"このトランザクションではチケットが使用されました\",\n  \"token\": \"トークン\",\n  \"tokens\": \"トークン\",\n  \"total_issuers\": \"総発行者数\",\n  \"total_tokens\": \"トークン総計\",\n  \"top_trading_pairs\": \"上位の取引ペア\",\n  \"issuer_address\": \"発行者アドレス\",\n  \"obligations\": \"負債\",\n  \"settings\": \"設定\",\n  \"rank\": \"ランク\",\n  \"market_cap\": \"時価総額\",\n  \"volume_24h\": \"取引高 (24H)\",\n  \"no_tokens_message\": \"トークンが見つかりません\",\n  \"no_pairs_message\": \"売買ペアが見つかりません\",\n  \"high\": \"高\",\n  \"low\": \"安\",\n  \"rank_message\": \"トークンはトラストラインの数でランク付けされています。\",\n  \"obligations_message\": \"負債とは、アドレスに対して発行された各トークンの総額のことです\",\n  \"issuer\": \"発行者\",\n  \"pair\": \"ペア\",\n  \"asset_pair\": null,\n  \"offer_range\": \"オファーの範囲\",\n  \"custom_network\": \"カスタムネットワーク\",\n  \"custom_network_input_help\": \"ネットワークのデータにアクセスするためのカスタムネットワークURLを入力してください。\",\n  \"custom_network_input\": \"カスタムネットワークのURLを入力してください\",\n  \"custom_networks\": \"カスタムネットワーク\",\n  \"no_network_selected\": \"カスタムネットワークが選択されていません\",\n  \"locking_chain_door\": null,\n  \"locking_chain_issue\": null,\n  \"issuing_chain_door\": null,\n  \"issuing_chain_issue\": null,\n  \"signature_reward\": null,\n  \"min_account_create_amount\": null,\n  \"other_chain_source\": null,\n  \"xchain_claim_id\": null,\n  \"check_nft_id\": \"NFT IDを確認してください\",\n  \"get_nft_state_failed\": \"NFTの情報を取得することができません\",\n  \"minted\": \"ミント\",\n  \"taxon_id\": null,\n  \"transfer_fee\": \"ロイヤリティ\",\n  \"burnable\": null,\n  \"only_xrp\": null,\n  \"transferable\": null,\n  \"buy_offers\": \"購入オファー\",\n  \"sell_offers\": \"売却オファー\",\n  \"offer_index\": \"オファーID\",\n  \"no_sell_offers\": \"売却オファーがありません\",\n  \"no_buy_offers\": \"購入オファーがありません\",\n  \"validator_history.chain\": \"チェーン\",\n  \"validator_history.date\": \"日付 (UTC)\",\n  \"validator_history.missed\": \"失敗\",\n  \"validator_history.score\": \"スコア\",\n  \"seller\": \"売却者\",\n  \"buyer\": \"購入者\",\n  \"offerer\": \"オファー所有者\",\n  \"token_taxon\": null,\n  \"uri\": \"URI\",\n  \"owner\": \"所有者\",\n  \"other_chain_destination\": null,\n  \"%_of_total_nodes_validators\": null,\n  \"version_display\": \"バージョン: {{version}}\",\n  \"validator_count\": \"バリデータの数: {{val_count}}\",\n  \"node_count\": \"ノードの数: {{node_count}}\",\n  \"current_stable_version\": \"現在の安定バージョン\",\n  \"stable_version\": null,\n  \"nftoken_minter\": \"NFT発行者\",\n  \"is_burned\": \"バーン済み\",\n  \"fee_rate\": \"手数料レート\",\n  \"last_affecting_transaction\": \"最新の関連トランザクション\",\n  \"Version\": \"バージョン\",\n  \"increased_by\": null,\n  \"trading_fee\": \"取引手数料\",\n  \"tvl\": \"TVM\",\n  \"account_address\": \"アカウントアドレス\",\n  \"asset1\": \"資産1\",\n  \"asset2\": \"資産2\",\n  \"asset1out\": \"資産1 出金\",\n  \"asset2out\": \"資産2 出金\",\n  \"asset1in\": \"資産1 入金\",\n  \"asset2in\": \"資産2 入金\",\n  \"effective_price\": null,\n  \"amm_account_id\": \"AMMアカウント\",\n  \"lp_tokens\": \"LPトークン\",\n  \"min_slot_price\": \"最小スロット価格\",\n  \"max_slot_price\": \"最大スロット価格\",\n  \"auth_accounts\": \"認可されたアカウント\",\n  \"network_cannot_be_crawled\": null,\n  \"check_crawl_existed\": null,\n  \"peer_crawled_context\": null,\n  \"xchainbridge\": null,\n  \"xchain_account_claim_count\": null,\n  \"xchain_account_create_count\": null,\n  \"min_signer_quorum\": null,\n  \"holder\": null,\n  \"action_from\": null,\n  \"action_from_and\": null,\n  \"claws_back\": null,\n  \"claws_back_from\": null,\n  \"instruct_to_claw\": null,\n  \"hook\": \"Hook\",\n  \"hooks\": \"Hooks\",\n  \"hook_emitted\": \"このトランザクションはHookによって作成されました\",\n  \"emit_details\": \"Emitの詳細\",\n  \"hook_parameters\": \"Hookパラメータ\",\n  \"hook_executions\": \"Hookの実行\",\n  \"emit_generation\": \"作成されたトランザクションのNumber <0>{{emit}}</0>\",\n  \"emit_hook_hash\": \"Hook {{hash}} によって作成されました\",\n  \"emit_parent\": \"トランザクション <0>{{hash}}</0> にトリガーされたHookによって作成されました\",\n  \"emit_callback\": \"Emitコールバックは <0>{{callback}}<0>\",\n  \"hook_exec_hash\": \"Hook {{hash}} がトリガーされました\",\n  \"hook_exec_account\": \"アカウント: <0>{{account}}</0>\",\n  \"hook_exec_return\": \"結果: \\\"{{string}}\\\" ,コード: {{code}}\",\n  \"hook_exec_emit_count\": \"このHookから{{count}}トランザクションが作成されました\",\n  \"hash\": \"Hash\",\n  \"grant\": null,\n  \"namespace\": \"ネームスペース\",\n  \"api_version\": \"APIバージョン\",\n  \"triggered_on\": \"次のトランザクションによってトリガー\",\n  \"name\": \"名称\",\n  \"introduced_in\": \"導入されたバージョン\",\n  \"yeas\": \"賛成\",\n  \"nays\": \"反対\",\n  \"eta\": \"予定時刻\",\n  \"amendment_summary\": \"Amendmentの概要\",\n  \"not\": null,\n  \"enable_tx\": null,\n  \"all\": null,\n  \"yeas_count\": \"賛成票: {{yeas_count}}\",\n  \"nays_count\": \"反対票: {{nays_count}}\",\n  \"yeas_percent\": \"賛成票の割合: {{yeas_percent}}%\",\n  \"nays_percent\": \"反対票の割合: {{nays_percent}}%\",\n  \"%_of_validators\": \"バリデータ(%)\",\n  \"amendment_not_found\": \"Amendmentが見つかりません\",\n  \"check_amendment_key\": \"AmendmentIDを確認してください\",\n  \"did_document\": null,\n  \"attestation\": null,\n  \"note\": null,\n  \"indicate_unl\": null,\n  \"transaction_tokens_involved\": null,\n  \"transaction_tokens_swapped\": null,\n  \"oracle_document_id\": \"オラクルドキュメントID\",\n  \"provider\": \"プロバイダ\",\n  \"last_update_time\": \"最終更新時刻\",\n  \"asset_class\": \"資産クラス\",\n  \"trading_pairs\": \"取引ペア\",\n  \"deleted\": \"削除\",\n  \"holders_count\": \"保有者: {{holders}}\",\n  \"trustlines\": \"トラストライン: {{trustlines}}\",\n  \"website\": \"Webサイト\",\n  \"mpt_issuance_id\": null,\n  \"asset_scale\": null,\n  \"metadata\": null,\n  \"max_amount\": null,\n  \"mpt_holder\": null,\n  \"check_mpt_id\": null,\n  \"outstanding_amount\": null,\n  \"locked\": null,\n  \"can_lock\": null,\n  \"require_auth\": null,\n  \"can_escrow\": null,\n  \"can_trade\": null,\n  \"can_transfer\": null,\n  \"can_clawback\": null,\n  \"enable_amendment_name\": null,\n  \"amendment_status\": null,\n  \"expected_date\": null,\n  \"base\": null,\n  \"credential_type\": null,\n  \"credential_issuer\": null,\n  \"subject\": null,\n  \"expiration\": null,\n  \"domain_id\": null,\n  \"accepted_credentials\": null,\n  \"credential_ids\": null,\n  \"data\": null,\n  \"finish_function\": null,\n  \"quorum_description\": null,\n  \"avg_fee_description\": null,\n  \"ledger_interval_description\": null,\n  \"txn_ledger_description\": null,\n  \"txn_sec_description\": null,\n  \"load_fee_description\": null,\n  \"nUnl_description\": null,\n  \"computation_allowance\": null,\n  \"gas\": null,\n  \"delegate\": null,\n  \"permissions\": null,\n  \"pertaining_to_the_Permissioned_Domain\": null,\n  \"tx_delegated_to\": null,\n  \"account_delegates_to\": null,\n  \"delegate_to\": null,\n  \"volume\": null,\n  \"holders\": null,\n  \"trades\": null,\n  \"no_of_tokens\": null,\n  \"volume_24h_total\": null,\n  \"volume_24h_total_description\": null,\n  \"market_cap_metric_description\": null,\n  \"market_cap_description\": null,\n  \"24h_description\": null,\n  \"volume_description\": null,\n  \"trades_description\": null,\n  \"tvl_description\": null,\n  \"stablecoin_description\": null,\n  \"stablecoin\": null,\n  \"wrapped\": null,\n  \"tokens_footnote\": null,\n  \"xrplmeta_guidelines\": null,\n  \"inner_transaction\": null,\n  \"batch_table_detail_count\": null,\n  \"batch_table_detail_list\": null,\n  \"batch_description\": null,\n  \"batch\": null,\n  \"successful\": null,\n  \"failed\": null,\n  \"not-validated\": null,\n  \"asset\": null,\n  \"assets_maximum\": null,\n  \"mptoken_metadata\": null,\n  \"withdrawal_policy\": null,\n  \"account_creates_vault\": null,\n  \"vault_id\": null,\n  \"single_asset_vault\": null,\n  \"loan_broker_id\": null,\n  \"loan_id\": null,\n  \"management_fee_rate\": null,\n  \"debt_maximum\": null,\n  \"cover_rate_minimum\": null,\n  \"cover_rate_liquidation\": null,\n  \"counterparty\": null,\n  \"principal_requested\": null,\n  \"payment_total\": null,\n  \"payment_interval\": null,\n  \"grace_period\": null,\n  \"loan_origination_fee\": null,\n  \"loan_service_fee\": null,\n  \"late_payment_fee\": null,\n  \"close_payment_fee\": null,\n  \"full_payment_fee\": null,\n  \"overpayment_fee\": null,\n  \"interest_rate\": null,\n  \"late_interest_rate\": null,\n  \"close_interest_rate\": null,\n  \"overpayment_interest_rate\": null,\n  \"set_vault_data\": null,\n  \"set_vault_assets_maximum\": null,\n  \"set_vault_domain_id\": null,\n  \"account_deposits_into_vault\": null,\n  \"account_withdraws_from_vault\": null,\n  \"account_clawbacks_from_vault\": null,\n  \"account_clawbacks_from_vault_amount_omitted\": null,\n  \"account_deletes_vault\": null,\n  \"vault_create_table_detail\": null,\n  \"withdraws\": null,\n  \"deletes\": null,\n  \"vault_delete_table_detail\": null,\n  \"account_flag_title_lsf_global_freeze\": null,\n  \"account_flag_title_lsf_disable_master\": null,\n  \"account_flag_title_lsf_default_ripple\": null,\n  \"account_flag_title_lsf_allow_trustline_clawback\": null,\n  \"account_flag_title_lsf_allow_trustline_locking\": null,\n  \"account_flag_title_lsf_require_destination_tag\": null,\n  \"account_flag_title_lsf_no_freeze\": null,\n  \"account_flag_title_lsf_require_auth\": null,\n  \"account_flag_title_lsf_disallow_xrp\": null,\n  \"account_flag_title_lsf_disallow_incoming_trustline\": null,\n  \"account_flag_title_lsf_disallow_incoming_pay_chan\": null,\n  \"account_flag_title_lsf_disallow_incoming_nft_token_offer\": null,\n  \"account_flag_title_asf_authorized_nft_token_minter\": null,\n  \"account_flag_title_lsf_disallow_incoming_check\": null,\n  \"account_flag_title_lsf_deposit_auth\": null,\n  \"account_flag_title_asf_account_txn_id\": null,\n  \"account_flag_description_lsf_global_freeze\": null,\n  \"account_flag_description_lsf_disable_master\": null,\n  \"account_flag_description_lsf_default_ripple\": null,\n  \"account_flag_description_lsf_allow_trustline_clawback\": null,\n  \"account_flag_description_lsf_allow_trustline_locking\": null,\n  \"account_flag_description_lsf_require_destination_tag\": null,\n  \"account_flag_description_lsf_no_freeze\": null,\n  \"account_flag_description_lsf_require_auth\": null,\n  \"account_flag_description_lsf_disallow_xrp\": null,\n  \"account_flag_description_lsf_disallow_incoming_trustline\": null,\n  \"account_flag_description_lsf_disallow_incoming_pay_chan\": null,\n  \"account_flag_description_lsf_disallow_incoming_nft_token_offer\": null,\n  \"account_flag_description_asf_authorized_nft_token_minter\": null,\n  \"account_flag_description_lsf_disallow_incoming_check\": null,\n  \"account_flag_description_lsf_deposit_auth\": null,\n  \"account_flag_description_asf_account_txn_id\": null,\n  \"account_page_address\": null,\n  \"account_page_address_tag\": null,\n  \"account_page_classic_address\": null,\n  \"account_page_deleted_account_label\": null,\n  \"account_page_deleted_account_warning\": null,\n  \"account_page_extended_address\": null,\n  \"account_page_domain\": null,\n  \"account_page_reserve_balance\": null,\n  \"account_page_xrp_balance\": null,\n  \"account_page_xrp_balance_in_usd\": null,\n  \"account_page_account_properties\": null,\n  \"account_page_flags\": null,\n  \"account_page_flag_status_enabled\": null,\n  \"account_page_flag_status_disabled\": null,\n  \"account_page_signers\": null,\n  \"account_page_signer_weight\": null,\n  \"account_page_details\": null,\n  \"account_page_current_sequence\": null,\n  \"account_page_ticket_count\": null,\n  \"account_page_email_hash\": null,\n  \"account_page_payment_channels\": null,\n  \"account_page_payment_channels_text\": null,\n  \"account_page_nft_minter\": null,\n  \"account_page_asset_held_title\": null,\n  \"account_page_asset_issued_title\": null,\n  \"account_page_asset_tab_iou\": null,\n  \"account_page_asset_tab_lptoken\": null,\n  \"account_page_asset_tab_mpt\": null,\n  \"account_page_asset_tab_nft\": null,\n  \"account_page_asset_table_column_amm_instance\": null,\n  \"account_page_asset_table_column_amm_pair\": null,\n  \"account_page_asset_table_column_asset_class\": null,\n  \"account_page_asset_table_column_balance\": null,\n  \"account_page_asset_table_column_balance_usd\": null,\n  \"account_page_asset_table_column_circulating_supply\": null,\n  \"account_page_asset_table_column_currency_code\": null,\n  \"account_page_asset_table_column_frozen\": null,\n  \"account_page_asset_table_column_highest_bid\": null,\n  \"account_page_asset_table_column_holders\": null,\n  \"account_page_asset_table_column_issuer\": null,\n  \"account_page_asset_table_column_locked\": null,\n  \"account_page_asset_table_column_lowest_ask\": null,\n  \"account_page_asset_table_column_price_usd\": null,\n  \"account_page_asset_table_column_share\": null,\n  \"account_page_asset_table_column_supply\": null,\n  \"account_page_asset_table_column_ticker\": null,\n  \"account_page_asset_table_column_token_id\": null,\n  \"account_page_asset_table_column_transfer_fee\": null,\n  \"account_page_asset_table_column_trustlines\": null,\n  \"account_page_asset_table_column_url\": null,\n  \"account_page_asset_table_mpt_locked_global\": null,\n  \"account_page_asset_table_mpt_locked_individual\": null,\n  \"account_page_asset_table_no_iou\": null,\n  \"account_page_asset_table_no_lptoken\": null,\n  \"account_page_asset_table_no_mpt\": null,\n  \"account_page_asset_table_no_nft\": null,\n  \"tx_hash\": null,\n  \"timestamp\": null,\n  \"amount_in\": null,\n  \"amount_out\": null,\n  \"rate\": null,\n  \"refresh_data\": null,\n  \"token_page.general_overview\": null,\n  \"token_page.market_data\": null,\n  \"token_page.all_tx\": null,\n  \"token_page.dex_tx\": null,\n  \"token_page.transfers_tx\": null,\n  \"token_page.holders_table\": null,\n  \"token_page.issuer\": null,\n  \"token_page.price\": null,\n  \"token_page.holders\": null,\n  \"token_page.supply\": null,\n  \"token_page.market_cap\": null,\n  \"token_page.volume_24h\": null,\n  \"token_page.trades_24h\": null,\n  \"token_page.amm_tvl\": null,\n  \"token_page.transfer_fee\": null,\n  \"token_page.holders_rank\": null,\n  \"token_page.holders_num_tokens\": null,\n  \"token_page.holders_percent_supply\": null,\n  \"token_page.holders_no_holders\": null,\n  \"token_page.holders_usd_value\": null,\n  \"token_page.transfers_no_transfers\": null,\n  \"token_page.circulating_supply\": null,\n  \"token_page.dex_type\": null,\n  \"token_page.dex_amount_in_tooltip\": null,\n  \"token_page.dex_amount_out_tooltip\": null,\n  \"token_page.dex_rate_tooltip\": null,\n  \"token_page.dex_no_trades\": null,\n  \"token_page.token_label\": null,\n  \"token_page.category_text\": null,\n  \"token_type.iou\": null,\n  \"token_type.mpt\": null,\n  \"iou_page.trustlines\": null,\n  \"mpt_page.metadata_warning\": null,\n  \"data_available_from_notice\": null,\n  \"copied\": null,\n  \"click_to_copy\": null,\n  \"withdraw\": null,\n  \"delete\": null,\n  \"rates\": null,\n  \"loan_broker_rates_detail\": null,\n  \"loan_rates_detail\": null,\n  \"loan_fees_detail\": null,\n  \"loan_terms_detail\": null,\n  \"no_limit\": null,\n  \"first_loss_capital\": null,\n  \"vault\": null,\n  \"vault_not_found\": null,\n  \"invalid_vault_id\": null,\n  \"check_vault_id\": null,\n  \"get_vault_failed\": null,\n  \"private_vault\": null,\n  \"perm_domain_id\": null,\n  \"total_value_locked\": null,\n  \"shares\": null,\n  \"assets_available\": null,\n  \"unrealized_loss\": null,\n  \"other_data\": null,\n  \"max_total_supply\": null,\n  \"available_to_borrow\": null,\n  \"not_available\": null,\n  \"first_come_first_served\": null,\n  \"loans\": null,\n  \"loan_broker\": null,\n  \"total_debt\": null,\n  \"maximum_debt\": null,\n  \"management_fee\": null,\n  \"borrower\": null,\n  \"amount_requested\": null,\n  \"outstanding_balance\": null,\n  \"loan_status_current\": null,\n  \"loan_status_default\": null,\n  \"all_loans\": null,\n  \"loan_status_impaired\": null,\n  \"loan_status_paid_off\": null,\n  \"next_due_date\": null,\n  \"origination_date\": null,\n  \"frequency\": null,\n  \"installments\": null,\n  \"prepayment_fee\": null,\n  \"no_loans_message\": null,\n  \"loan_default_detected\": null,\n  \"no_loan_brokers_message\": null,\n  \"depositors_fetch_error\": null,\n  \"no_depositors_message\": null,\n  \"depositors\": null,\n  \"percent_of_supply\": null,\n  \"value\": null,\n  \"currency_toggle_help\": null,\n  \"currency_toggle_description\": null,\n  \"currency_toggle_loading\": null,\n  \"currency_toggle_loading_description\": null,\n  \"currency_toggle_unavailable\": null,\n  \"currency_toggle_unavailable_description\": null,\n  \"vaults\": null,\n  \"vaults_tvl\": null,\n  \"vaults_tvl_description\": null,\n  \"vaults_outstanding_loans\": null,\n  \"vaults_outstanding_loans_description\": null,\n  \"vaults_loans_originated\": null,\n  \"vaults_loans_originated_description\": null,\n  \"vaults_avg_interest_rate\": null,\n  \"vaults_avg_interest_rate_description\": null,\n  \"vaults_num_vaults\": null,\n  \"vaults_num_vaults_description\": null,\n  \"vaults_utilization_ratio\": null,\n  \"vaults_utilization_ratio_description\": null,\n  \"vaults_filter_all_assets\": null,\n  \"vaults_filter_stablecoins\": null,\n  \"vaults_search_placeholder\": null,\n  \"vaults_table_vault_id\": null,\n  \"vaults_table_asset\": null,\n  \"vaults_table_tvl\": null,\n  \"vaults_table_outstanding_loans\": null,\n  \"vaults_table_utilization_ratio\": null,\n  \"vaults_table_avg_interest_rate\": null,\n  \"vaults_table_website\": null,\n  \"vaults_no_results\": null,\n  \"vaults_disclaimer\": null,\n  \"amm_pool\": null,\n  \"basic_info\": null,\n  \"market_data\": null,\n  \"auction\": null,\n  \"created_on\": null,\n  \"volume_24h_tooltip\": null,\n  \"fees_24h\": null,\n  \"fees_24h_tooltip\": null,\n  \"apr_24h\": null,\n  \"apr_24h_tooltip\": null,\n  \"current_holder\": null,\n  \"discounted_fee\": null,\n  \"price_paid\": null,\n  \"replacement_cost\": null,\n  \"all_transactions\": null,\n  \"dex_trades\": null,\n  \"deposits\": null,\n  \"withdrawals\": null,\n  \"lp_tokens_received\": null,\n  \"lp_tokens_redeemed\": null,\n  \"tvl_and_volume\": null,\n  \"no_deposits\": null,\n  \"no_withdrawals\": null,\n  \"liquidity_providers\": null,\n  \"balance\": null,\n  \"lp_token_currency_code\": null,\n  \"asset_2\": null,\n  \"usd_value\": null,\n  \"amm_pool_deleted_label\": null,\n  \"amm_pool_deleted_text\": null,\n  \"amms\": null,\n  \"top_1000_amms\": null,\n  \"general_info\": null,\n  \"number_of_amms\": null,\n  \"number_of_lps\": null,\n  \"number_of_amms_tooltip\": null,\n  \"number_of_lps_tooltip\": null,\n  \"search_amms\": null,\n  \"tvl_tooltip\": null,\n  \"volume_24h_all_tooltip\": null\n}\n"
  },
  {
    "path": "public/locales/ko-KR/translations.json",
    "content": "{\n  \"action\": \"action\",\n  \"assets\": \"자산\",\n  \"assets.no_nfts_message\": \"NFT를 찾을 수 없습니다.\",\n  \"assets.no_mpts_message\": null,\n  \"network\": \"네트워크\",\n  \"amendments\": null,\n  \"network_name\": \"알 수 없는 네트워크\",\n  \"network_name_testnet\": \"Testnet\",\n  \"network_name_mainnet\": \"Mainnet\",\n  \"network_name_devnet\": \"Devnet\",\n  \"network_name_xahau_mainnet\": \"Xahau Mainnet\",\n  \"network_name_xahau_testnet\": \"Xahau Testnet\",\n  \"network_name_custom\": \"Custom\",\n  \"app.meta.description\": \"XRPL 네트워크 탐색기\",\n  \"app.meta.author\": \"리플\",\n  \"explorer\": \"탐색기\",\n  \"xrpl_org\": \"XRPL.org\",\n  \"github\": \"GitHub\",\n  \"header.search.placeholder\": \"주소, 원장 또는 트랜잭션으로 검색\",\n  \"xrp\": \"XRP\",\n  \"xrpl_explorer\": \"XRPL 네트워크 탐색기\",\n  \"ledgers\": \"원장\",\n  \"ledger\": \"원장\",\n  \"taxon\": \"분류\",\n  \"token_id\": \"토큰 ID\",\n  \"token_transactions\": \"토큰 관련 트랜잭션\",\n  \"transactions\": \"트랜잭션\",\n  \"transaction_short\": \"TX\",\n  \"nodes\": \"노드\",\n  \"validator\": \"검증자\",\n  \"validators\": \"검증자\",\n  \"upgrade_status\": \"업그레이드 상태\",\n  \"version\": \"v{{number}}\",\n  \"component_error\": \"문제가 발생했습니다!\",\n  \"1H\": \"1시간\",\n  \"24H\": \"24시간\",\n  \"30D\": \"30일\",\n  \"total_transactions\": \"트랜잭션 수\",\n  \"total_fees\": \"총 수수료\",\n  \"async_component_failed\": \"컴포넌트 로드 실패\",\n  \"account_not_found\": \"계정을 찾을 수 없습니다\",\n  \"account_empty_title\": \"계정 ID가 제공되지 않았습니다\",\n  \"account_empty_hint\": \"검색 창에 계정 ID를 입력하세요\",\n  \"check_account_id\": \"계정 ID를 확인하세요\",\n  \"accounts.xrp_balance\": \"XRP 잔고\",\n  \"accounts.other_balances\": \"기타 잔고\",\n  \"accounts.other_balances_short\": \"기타 잔액\",\n  \"amount\": \"금액\",\n  \"currency_code\": \"통화 코드\",\n  \"currency_balance\": \"<0>{{currency}}</0> 잔고\",\n  \"load_more_action\": \"더 보기...\",\n  \"account_transactions\": \"계정 트랜잭션 내역\",\n  \"transaction_type\": \"트랜잭션 유형\",\n  \"transaction_action_CANCEL\": \"취소\",\n  \"transaction_action_CREATE\": \"생성\",\n  \"transaction_action_FINISH\": \"완료\",\n  \"transaction_action_MODIFY\": \"수정\",\n  \"transaction_action_SEND\": \"전송\",\n  \"transaction_category_ACCOUNT\": \"계정\",\n  \"transaction_category_DEX\": \"Dex (AMM, Offers, Trust Sets, 토큰)\",\n  \"transaction_category_NFT\": \"NFT\",\n  \"transaction_category_PAYMENT\": \"결제\",\n  \"transaction_category_PSEUDO\": \"유사 트랜잭션\",\n  \"transaction_category_XCHAIN\": null,\n  \"transaction_category_OTHER\": null,\n  \"transaction_legend_toggle_hide\": \"범례 숨기기\",\n  \"transaction_legend_toggle_show\": \"범례 보이기\",\n  \"transactions.date_header\": \"날짜/시간 (UTC)\",\n  \"no_transactions_message\": \"트랜잭션 내역이 없습니다.\",\n  \"get_vault_transactions_failed\": null,\n  \"retry_action\": \"다시 시도해주세요\",\n  \"uh_oh\": \"문제가 발생했습니다!\",\n  \"not_found_default_title\": \"페이지를 찾을 수 없습니다\",\n  \"not_found_check_url\": \"URL을 다시 확인해주세요\",\n  \"not_found\": \"찾을 수 없습니다\",\n  \"hash_not_found\": null,\n  \"buy\": \"구매\",\n  \"sell\": \"판매\",\n  \"price\": \"가격\",\n  \"ledger_index\": \"원장 인덱스\",\n  \"to\": \"까지\",\n  \"from\": \"로부터\",\n  \"request\": null,\n  \"terms\": null,\n  \"send\": \"전송\",\n  \"delivered\": \"전달 완료\",\n  \"cancel_offer\": \"제안 취소\",\n  \"convert_maximum\": \"최대로 변환\",\n  \"convert_to\": \"로 변환\",\n  \"using_at_most\": \"최대한 사용\",\n  \"partial_payment_allowed\": \"부분 결제 허용\",\n  \"set_limit\": \"신뢰 한도 설정\",\n  \"escrow\": \"에스크로\",\n  \"cancel_escrow\": \"에스크로 취소\",\n  \"finish_escrow\": \"에스크로 완료\",\n  \"escrow_amount\": \"에스크로 금액\",\n  \"escrow_destination\": \"에스크로 목적지\",\n  \"escrow_transaction\": \"에스크로 트랜잭션\",\n  \"escrow_condition_short\": \"에스크로 조건\",\n  \"escrow_fulfillment\": \"에스크로 이행\",\n  \"condition\": \"조건\",\n  \"fulfillment\": \"이행\",\n  \"cancel_after\": \" 후 취소\",\n  \"finish_after\": \" 후 완료\",\n  \"settle_delay\": \"결제 지연\",\n  \"channel_id\": \"채널 ID\",\n  \"seconds\": \"초\",\n  \"seconds_short\": \"초\",\n  \"regular_key\": \"정규 키\",\n  \"unset_regular_key\": \"정규 키 해제\",\n  \"unset_signer_list\": \"서명자 목록 해제\",\n  \"set_flag\": \"플래그 설정\",\n  \"clear_flag\": \"플래그 해제\",\n  \"email_hash\": \"이메일 해시\",\n  \"message_key\": \"메시지 키\",\n  \"out_of\": \"of\",\n  \"weight\": \"가중치\",\n  \"the_account\": \"해당 계정은\",\n  \"create_payment_channel\": \"결제 채널을 생성할 것입니다\",\n  \"destination_tag\": \"목적지 태그\",\n  \"source_tag\": \"소스 태그\",\n  \"channel_settle_delay\": \"이 채널은 결제 지연 기간이 있습니다\",\n  \"the_channel_id_is\": \"채널 ID는\",\n  \"the_channel_amount_is\": \"채널 금액은\",\n  \"update_payment_channel\": \"결제 채널이 업데이트 될 것입니다\",\n  \"the_channel_balance_is\": \"청구된 채널 잔액은\",\n  \"amm_delete_description\": null,\n  \"amm_delete_description_caveat\": null,\n  \"payment_channel_closed_description\": \"결제 채널이 닫히며, 남은 잔액은 원래 계정으로 반환됩니다\",\n  \"set_signer_list_description\": \"서명자 목록으로 최소 서명자 수를 {{quorum}}로 설정합니다\",\n  \"unset_signer_list_description\": \"모든 서명자가 계정에서 제거되었습니다\",\n  \"transaction_initiated_by\": \"트랜잭션을 시작한 계정은\",\n  \"increase_channel_amount_by\": \"채널 금액을 증가시킬 것입니다\",\n  \"channel_amount_increase\": \"채널 금액 증가\",\n  \"channel_amount\": \"채널 금액\",\n  \"total_claimed\": \"총 청구액\",\n  \"amount_claimed\": \"청구액\",\n  \"close_request\": \"채널 종료 요청\",\n  \"renew_channel\": \"채널 갱신\",\n  \"payment_channel_closed\": \"결제 채널이 종료되었습니다\",\n  \"paychannel_node_line1\": \"<1><0>{{action}}</0></1>가 페이채널 노드를 <3><0>{{account}}</0></3>에서 <5><0>{{counterAccount}}</0></5>로 변경하였습니다\",\n  \"paychannel_amount_changed\": \"금액이 <1><0>{{difference}}</0><1><0>{{currency}}</0></1></1> 만큼, <3><0>{{previous}}</0><1><0>{{currency}}</0></1></3>에서 <5><0>{{final}}</0><1><0>{{currency}}</0></1></5>로 변경되었습니다\",\n  \"paychannel_balance_changed\": \"잔액이 <1><0>{{difference}}</0><1><0>{{currency}}</0></1></1>만큼, <3><0>{{previous}}</0><1><0>{{currency}}</0></1></3>에서 <5><0>{{final}}</0><1><0>{{currency}}</0></1></5>로 변경되었습니다\",\n  \"setfee_fees_description\": \"향후 트랜잭션에는 최소한 <amount />의 수수료가 필요합니다.\",\n  \"setfee_reserves_description\": \"계정은 이제 기본으로 <base />를 보유하며, 해당 계정이 소유한 추가적인 객체마다 <increment />를 더 보유해야 합니다.\",\n  \"setfee_docs_description\": \"문서를 참조하세요: <0>수수료</0>\",\n  \"setfee_base_fee\": \"기본 수수료\",\n  \"setfee_reserve\": \"보유자산\",\n  \"setfee_reserve_increment\": \"보유자산 증가량\",\n  \"formatted_date\": \"날짜/시간 ({{timeZone}})\",\n  \"transaction_type_name_AMMCreate\": \"AMM 생성\",\n  \"transaction_type_name_AMMDelete\": null,\n  \"transaction_type_name_AMMDeposit\": \"AMM 입금\",\n  \"transaction_type_name_AMMWithdraw\": \"AMM 출금\",\n  \"transaction_type_name_AMMVote\": \"AMM 투표\",\n  \"transaction_type_name_AMMBid\": \"AMM 입찰\",\n  \"transaction_type_name_AMMClawback\": null,\n  \"transaction_type_name_AccountSet\": \"계정 설정\",\n  \"transaction_type_name_Batch\": null,\n  \"transaction_type_name_CheckCancel\": \"수표 취소\",\n  \"transaction_type_name_CheckCash\": \"수표 현금화\",\n  \"transaction_type_name_CheckCreate\": \"수표 생성\",\n  \"transaction_type_name_CredentialAccept\": null,\n  \"transaction_type_name_CredentialCreate\": null,\n  \"transaction_type_name_CredentialDelete\": null,\n  \"transaction_type_name_DelegateSet\": null,\n  \"transaction_type_name_DIDDelete\": null,\n  \"transaction_type_name_DIDSet\": null,\n  \"transaction_type_name_DepositPreauth\": \"예치 인증\",\n  \"transaction_type_name_Error_Cases\": \"오류 사례\",\n  \"transaction_type_name_EscrowCancel\": \"에스크로 취소\",\n  \"transaction_type_name_EscrowCreate\": \"에스크로 생성\",\n  \"transaction_type_name_EscrowFinish\": \"에스크로 완료\",\n  \"transaction_type_name_Invoke\": null,\n  \"transaction_type_name_LoanBrokerSet\": null,\n  \"transaction_type_name_LoanBrokerDelete\": null,\n  \"transaction_type_name_LoanBrokerCoverDeposit\": null,\n  \"transaction_type_name_LoanBrokerCoverWithdraw\": null,\n  \"transaction_type_name_LoanBrokerCoverClawback\": null,\n  \"transaction_type_name_LoanSet\": null,\n  \"transaction_type_name_LoanDelete\": null,\n  \"transaction_type_name_LoanManage\": null,\n  \"transaction_type_name_LoanPay\": null,\n  \"transaction_type_name_MPTokenIssuanceCreate\": null,\n  \"transaction_type_name_MPTokenIssuanceDestroy\": null,\n  \"transaction_type_name_MPTokenIssuanceSet\": null,\n  \"transaction_type_name_MPTokenAuthorize\": null,\n  \"transaction_type_name_NFTokenAcceptOffer\": \"NFT 제안 수락\",\n  \"transaction_type_name_NFTokenBurn\": \"NFT 소각\",\n  \"transaction_type_name_NFTokenCancelOffer\": \"NFT 제안 취소\",\n  \"transaction_type_name_NFTokenCreateOffer\": \"NFT 제안 생성\",\n  \"transaction_type_name_NFTokenMint\": \"NFT 발행\",\n  \"transaction_type_name_OfferCancel\": \"제안 취소\",\n  \"transaction_type_name_OfferCreate\": \"제안 생성\",\n  \"transaction_type_name_OracleDelete\": null,\n  \"transaction_type_name_OracleSet\": null,\n  \"transaction_type_name_Payment\": \"결제\",\n  \"transaction_type_name_PaymentChannelClaim\": \"결제 채널 청구\",\n  \"transaction_type_name_PaymentChannelCreate\": \"결제 채널 생성\",\n  \"transaction_type_name_PaymentChannelFund\": \"결제 채널 펀딩\",\n  \"transaction_type_name_PermissionedDomainDelete\": null,\n  \"transaction_type_name_PermissionedDomainSet\": null,\n  \"transaction_type_name_SetHook\": \"Hook 설정\",\n  \"transaction_type_name_SetRegularKey\": \"일반 키 설정\",\n  \"transaction_type_name_SignerListSet\": \"서명자 목록 설정\",\n  \"transaction_type_name_TicketCreate\": \"티켓 생성\",\n  \"transaction_type_name_TrustSet\": \"신뢰 설정\",\n  \"transaction_type_name_VaultCreate\": null,\n  \"transaction_type_name_VaultSet\": null,\n  \"transaction_type_name_VaultDeposit\": null,\n  \"transaction_type_name_VaultWithdraw\": null,\n  \"transaction_type_name_VaultClawback\": null,\n  \"transaction_type_name_VaultDelete\": null,\n  \"transaction_type_name_XChainAccountCreateCommit\": \"XChain 계정 생성 커밋\",\n  \"transaction_type_name_XChainAddAccountCreateAttestation\": \"XChain 계정 생성 인증 추가\",\n  \"transaction_type_name_XChainAddClaimAttestation\": \"XChain 청구 인증 추가\",\n  \"transaction_type_name_XChainClaim\": \"XChain 청구\",\n  \"transaction_type_name_XChainCommit\": \"XChain 커밋\",\n  \"transaction_type_name_XChainCreateBridge\": \"XChain 브리지 생성\",\n  \"transaction_type_name_XChainCreateClaimID\": \"XChain 청구 ID 생성\",\n  \"transaction_type_name_XChainModifyBridge\": \"XChain 브리지 수정\",\n  \"transaction_type_name_EnableAmendment\": \"수정 활성화\",\n  \"transaction_type_name_SetFee\": \"수수료 설정\",\n  \"transaction_type_name_UNLModify\": \"UNL 수정\",\n  \"transaction_type_name_AccountDelete\": \"계정 삭제\",\n  \"generic_error\": \"문제가 발생했습니다\",\n  \"not_your_fault\": \"본인의 잘못이 아닐 것입니다\",\n  \"come_back_later\": \"곧 사용 가능합니다\",\n  \"invalid_ledger_id\": \"원장 ID가 유효하지 않습니다\",\n  \"invalid_transaction_hash\": \"트랜잭션 해시가 유효하지 않습니다\",\n  \"ledger_not_found\": \"원장을 찾을 수 없습니다\",\n  \"check_ledger_id\": \"원장 ID를 확인해주세요\",\n  \"server_ledgers_hint\": \"이 노드 ({{connection.server.publicKey, truncate(length: 10)}})는 {{connection.ledger.validated}} 원장만 포함하고 있습니다\",\n  \"use_search\": \"검색을 이용해 주세요\",\n  \"ledger_has_no_trans\": \"이 원장에는 어떠한 트랜잭션도 없습니다\",\n  \"less_than\": \"미만\",\n  \"transaction_not_found\": \"트랜잭션을 찾을 수 없습니다\",\n  \"transaction_empty_title\": \"트랜잭션 해시가 제공되지 않았습니다\",\n  \"transaction_empty_hint\": \"검색창에 트랜잭션 해시를 입력해 주세요\",\n  \"validator_not_found\": \"검증자를 찾을 수 없습니다\",\n  \"check_transaction_hash\": \"트랜잭션 해시를 확인해 주세요\",\n  \"wrong_network\": null,\n  \"check_validator_key\": \"검증자 키를 확인해주세요\",\n  \"transaction\": \"트랜잭션\",\n  \"success\": \"성공\",\n  \"fail\": \"실패\",\n  \"simple\": \"간단히\",\n  \"detailed\": \"상세히\",\n  \"details\": \"세부사항\",\n  \"history\": \"기록\",\n  \"voting\": null,\n  \"raw\": \"원문\",\n  \"expand\": \"확장\",\n  \"collapse\": \"축소\",\n  \"try_detailed_raw\": \"'상세히' 또는 '원문' 보기를 시도해보세요\",\n  \"account\": \"계정\",\n  \"transaction_cost\": \"트랜잭션 비용\",\n  \"transaction_cost_short\": \"트랜잭션 비용\",\n  \"sequence_number\": \"시퀀스\",\n  \"sequence_number_short\": \"시퀀스 #\",\n  \"serial\": \"일련번호\",\n  \"n_a\": \"해당 없음\",\n  \"memos\": \"메모\",\n  \"flags\": \"플래그\",\n  \"status\": \"상태\",\n  \"successful_transaction\": \"이 트랜잭션은 성공적으로 이루어졌습니다\",\n  \"fail_transaction\": \"이 트랜잭션은 <0>{{code}}</0>의 상태 코드로 실패했습니다\",\n  \"transaction_validated\": \", 이 트랜잭션은 원장에서 검증되었습니다\",\n  \"on\": \" 에 \",\n  \"description\": \"설명\",\n  \"signers\": \"서명자\",\n  \"decoded_hex\": \"디코드된 16진수\",\n  \"transaction_consumed_fee\": \"이 트랜잭션을 수행하는 데에 소모된 비용은\",\n  \"meta\": \"메타 데이터\",\n  \"number_of_affected_node\": \"이 트랜잭션은 원장의 {{count}}개 노드에 영향을 미쳤습니다:\",\n  \"nodes_type\": \"{{action}} 노드\",\n  \"node_meta_type\": \"{{action}}로 노드의 타입을 변경했습니다\",\n  \"transaction_balance_line_one\": \"<1><0>{{action}}</0></1>로 <5><0>{{account}}</0></5>와 <7><0>{{counterAccount}}</0></7> 사이의 <3><0>{{currency}}</0></3> RippleState 노드를 처리했습니다\",\n  \"transaction_balance_line_two\": \"잔액이 <3><0>{{previousBalance}}</0></3>에서 <5><0>{{finalBalance}}</0></5>로 <1><0>{{change}}</0></1>만큼 변경되었습니다\",\n  \"transaction_outstanding_balance_line_two\": null,\n  \"transaction_owned_directory\": \"{{action}}로 소유한 DirectoryNode 노드를 처리했습니다\",\n  \"transaction_unowned_directory\": \"{{action}}로 DirectoryNode 노드를 처리했습니다\",\n  \"transaction_mptoken_line_one\": null,\n  \"transaction_mpt_issuance_line_one\": null,\n  \"owned_account_root\": \"{{action}}로 AccountRoot 노드를 처리했습니다\",\n  \"unowned_account_root\": \"{{action}}로 AccountRoot 노드를 처리했습니다\",\n  \"account_balance_increased\": \"잔액이 <3><0>{{previous}}</0><1><0>{{currency}}</0></1></3>에서 <5><0>{{final}}</0><1><0>{{currency}}</0></1></5>로 <1><0>{{difference}}</0><1><0>{{currency}}</0></1></1> 증가하였습니다\",\n  \"account_balance_decreased\": \"잔액이 <3><0>{{previous}}</0><1><0>{{currency}}</0></1></3>에서 <5><0>{{final}}</0><1><0>{{currency}}</0></1></5>로 <1><0>{{difference}}</0><1><0>{{currency}}</0></1></1> 감소하였습니다\",\n  \"decreased_from_to\": \"<3><0>{{previous}}</0></3>에서 <5><0>{{final}}</0></5>로 <1><0>{{change}}</0></1> 감소하였습니다.\",\n  \"offer_node_meta\": \"<1><0>{{action}}</0></1>로, 시퀀스 #<7><0>{{sequence}}</0></7>을 가진, <5><0>{{account}}</0></5>이(가) 소유한 <3><0>{{pair}}</0></3> 오퍼 노드를 처리하였습니다\",\n  \"offer_replaces\": \"이 트랜잭션 제안은 기존의 트랜잭션 제안을 대체합니다 #\",\n  \"offer_partially_filled\": \"이 트랜잭션 제안은 부분적으로 체결되었습니다\",\n  \"offer_filled\": \"이 트랜잭션 제안은 완전히 체결되었습니다\",\n  \"offer_cancelled\": \"이 트랜잭션 제안은 취소되었습니다\",\n  \"offer_replaced\": \"이 트랜잭션 제안은 새로운 트랜잭션 제안으로 대체되었습니다 #\",\n  \"offer_lack_of_funds\": \"트랜잭션 제안이 일부 체결된 후, 잔액 부족으로 인해 취소되었습니다\",\n  \"transaction_sequence\": \"트랜잭션의 시퀀스 번호는 다음과 같습니다\",\n  \"trust_set_description\": \"<7><0>{{account}}</0></7>가 <5><0>{{issuer}}</0></5>로부터 받을 수 있는 <3><0>{{currency}}</0></3>의 최대 금액을 <1><0>{{amount}}</0></1>로 설정합니다\",\n  \"payment_desc_line_1\": \"결제는 <source/>에서 <destination/>로 이루어집니다\",\n  \"the_source_tag_is\": \"소스 태그는 다음과 같습니다 \",\n  \"the_destination_tag_is\": \"목적지 태그는 다음과 같습니다\",\n  \"payment_desc_line_4\": \"전달이 지시되었습니다\",\n  \"payment_desc_line_5\": \"최대 다음 금액까지 소비합니다\",\n  \"payment_desc_line_6\": \"실제로 전달된 금액은 다음과 같습니다\",\n  \"offer_cancel_description\": \"이 트랜잭션은 계정의 기존 트랜잭션 제안을 취소할 것입니다\",\n  \"offer_create_desc_line_1\": \"<1><0>{{account}}</0></1> 계정은 <5><0>{{takerPays}}</0><1><0>{{currency}}</0></1></5>를 받기 위해 <3><0>{{takerGets}}</0><1><0>{{currency}}</0></1></3>를 지불하려 합니다\",\n  \"offer_create_desc_line_2\": \"이 트랜잭션 제안의 환율은 다음과 같습니다\",\n  \"offer_create_desc_line_3\": \"이 트랜잭션은 계정의 기존 트랜잭션 제안도 취소할 것입니다\",\n  \"offer_create_desc_line_5\": \"이 트랜잭션 제안은 허가된 도메인에 적용됩니다\",\n  \"offer_will_expire_desc\": \"트랜잭션 제안은 <1><0>{{date}}</0></1>에 만료되며, 그 전에 취소되거나 체결되지 않으면 만료됩니다\",\n  \"offer_did_expire_desc\": \"트랜잭션 제안은 <1><0>{{date}}</0></1>에 만료되었습니다. 이는 그 전에 취소되거나 체결되지 않았기 때문입니다\",\n  \"escrow_is_from\": \"에스크로는 <1><0>{{account}}</0></1>에서 <3><0>{{destination}}</0></3>로 이루어집니다\",\n  \"escrow_is_created_by\": \"에스크로는 <1><0>{{account}}</0></1>에 의해 생성되었으며, 이체되는 자금은 동일한 계정으로 반환됩니다\",\n  \"escrowed_amount\": \"에스크로 처리되었습니다\",\n  \"escrow_condition\": \"에스크로는 다음과 같은 이행 조건을 가지고 있습니다\",\n  \"describe_cancel_after\": \"다음 시점 이후에 취소할 수 있습니다\",\n  \"describe_finish_after\": \"다음 시점 이후에 완료할 수 있습니다\",\n  \"escrow_completion_desc\": \"완료는 다음에 의해 발동되었습니다\",\n  \"escrow_completion_desc_2\": \"에스크로에 보관된 <1><0>{{amount}}</0></1>이 <3><0>{{destination}}</0></3>에게 전달되었습니다\",\n  \"escrow_finish_fulfillment_desc\": \"에스크로의 조건은 다음에 의해 충족되었습니다.\",\n  \"escrow_cancellation_desc\": \"취소는 다음에 의해 발동되었습니다.\",\n  \"escrow_cancellation_desc_2\": \"에스크로에 보관된 <1><0>{{amount}}</0></1>이 <3><0>{{destination}}</0></3>에게 반환되었습니다\",\n  \"escrow_after_transaction_cost\": \"트랜잭션 비용을 제외한 금액\",\n  \"escrow_created_by_desc\": \"에스크로는 <1><0>{{account}}</0></1>에 의해 생성되었고, 트랜잭션은 <3><0>{{transaction}}</0></3>입니다\",\n  \"set_regular_key_description\": \"계정의 정규 키를 설정합니다\",\n  \"unset_regular_key_description\": \"계정의 정규 키를 제거합니다\",\n  \"set_flag_description\": \"계정 플래그를 설정합니다\",\n  \"clear_flag_description\": \"계정 플래그를 제거합니다\",\n  \"set_domain_description\": \"계정 도메인을 다음으로 설정합니다\",\n  \"set_email_description\": \"계정의 이메일 해시를 다음으로 설정합니다\",\n  \"set_message_key_description\": \"계정의 메시지 키를 다음으로 설정합니다\",\n  \"set_nftoken_minter_description\": \"<0>{{account}}</0>을 이 계정의 공인 발행인으로 설정합니다\",\n  \"deposit_auth\": \"<1><0>{{account}}</0></1>을 이 계정으로 결제를 보낼 수 있도록 승인합니다\",\n  \"deposit_unauth\": \"<1><0>{{account}}</0></1>의 이 계정으로의 결제 권한을 삭제합니다\",\n  \"deposit_auth_credentials\": null,\n  \"deposit_unauth_credentials\": null,\n  \"invalid_xrpl_address\": \"유효하지 않은 XRPL 주소\",\n  \"loading\": \"불러오는 중\",\n  \"get_ledger_failed\": \"원장을 불러올 수 없습니다\",\n  \"get_transaction_failed\": \"트랜잭션을 불러올 수 없습니다\",\n  \"get_validator_failed\": \"검증자를 불러올 수 없습니다\",\n  \"get_account_state_failed\": \"계정 상태를 불러올 수 없습니다\",\n  \"get_account_transactions_failed\": \"계정 트랜잭션을 불러올 수 없습니다\",\n  \"get_account_transactions_try\": \"더 많은 트랜잭션을 불러와 보세요\",\n  \"pubkey\": \"공개키\",\n  \"node_pubkey\": \"노드 공개키\",\n  \"ip\": \"IP\",\n  \"state\": \"상태\",\n  \"rippled_version\": \"버전\",\n  \"last_ledger\": \"마지막 원장\",\n  \"uptime\": \"업타임\",\n  \"peers\": \"피어\",\n  \"in_out\": \"(입력:출력)\",\n  \"ledger_history\": \"원장 히스토리\",\n  \"quorum\": \"쿼럼\",\n  \"load\": \"로드\",\n  \"latency\": \"레이턴시\",\n  \"amendment_id\": null,\n  \"amendment_name\": null,\n  \"voters\": null,\n  \"threshold\": null,\n  \"consensus\": null,\n  \"enabled\": null,\n  \"disabled\": null,\n  \"on_tx\": null,\n  \"yes\": null,\n  \"no\": null,\n  \"deprecated\": null,\n  \"domain\": \"도메인\",\n  \"unl\": \"unl\",\n  \"fee\": \"수수료\",\n  \"ledger_interval\": \"평균 원장 간격\",\n  \"load_fee\": \"로드 수수료\",\n  \"txn_sec\": \"txn/초\",\n  \"txn_ledger\": \"평균 트랜잭션/원장\",\n  \"avg_fee\": \"평균 트랜잭션 수수료\",\n  \"txn_count\": \"txn 수\",\n  \"nUnlCol\": \"nUNL\",\n  \"nUnl\": \"nUNL 내 검증자\",\n  \"fees\": \"수수료\",\n  \"total\": \"총계\",\n  \"missing\": \"누락\",\n  \"authorize\": \"인증\",\n  \"unauthorize\": \"인증 취소\",\n  \"missed_validations\": \"{{count}}회의 유효성 검증이 누락되었습니다\",\n  \"incomplete\": \"미완료\",\n  \"base_fee\": null,\n  \"account_reserve\": null,\n  \"object_reserve\": null,\n  \"vote\": null,\n  \"no_amendment_in_voting\": null,\n  \"required\": \"필요\",\n  \"source\": \"소스\",\n  \"destination\": \"목적지\",\n  \"claimed\": \"청구됨\",\n  \"remaining\": \"남음\",\n  \"inbound_total\": \"총 수신량\",\n  \"outbound_total\": \"총 송신량\",\n  \"payment_channels\": \"결제 채널\",\n  \"available_in\": \"사용 가능한\",\n  \"channels\": \"채널\",\n  \"account_info\": \"계정 정보\",\n  \"reserve\": \"예약금\",\n  \"current_sequence\": \"현재 시퀀스\",\n  \"escrows\": \"에스크로\",\n  \"nodes_found\": \"찾은 노드 수\",\n  \"unmapped\": \"매핑되지 않음\",\n  \"validators_found\": \"찾은 검증자 수\",\n  \"pause\": \"일시정지\",\n  \"resume\": \"재개\",\n  \"flag_ledger\": \"원장에 플래그 설정\",\n  \"ticket\": \"티켓\",\n  \"ticket_sequence\": \"티켓 시퀀스\",\n  \"ticket_count\": \"티켓 수량\",\n  \"ticket_used\": \"이 트랜잭션에는 티켓이 사용되었습니다\",\n  \"token\": \"토큰\",\n  \"tokens\": \"토큰\",\n  \"total_issuers\": \"전체 발행자 수\",\n  \"total_tokens\": \"전체 토큰 수\",\n  \"top_trading_pairs\": \"상위 트랜잭션 쌍\",\n  \"issuer_address\": \"발행자 주소\",\n  \"obligations\": \"채무\",\n  \"settings\": \"설정\",\n  \"rank\": \"순위\",\n  \"market_cap\": \"시가 총액\",\n  \"volume_24h\": \"24시간 트랜잭션량\",\n  \"no_tokens_message\": \"토큰을 찾을 수 없습니다\",\n  \"no_pairs_message\": \"토큰을 찾을 수 없습니다\",\n  \"high\": \"최고가\",\n  \"low\": \"최저가\",\n  \"rank_message\": \"토큰은 신뢰선의 수에 따라 순위가 결정됩니다.\",\n  \"obligations_message\": \"채무란, 각 토큰이 주소로 발행된 총액을 의미합니다\",\n  \"issuer\": \"발행자\",\n  \"pair\": \"제안 쌍\",\n  \"asset_pair\": null,\n  \"offer_range\": \"제안 범위\",\n  \"custom_network\": \"사용자 지정 네트워크\",\n  \"custom_network_input_help\": \"네트워크 데이터에 접근하기 위해 사용자 지정 네트워크 URL을 입력하세요.\",\n  \"custom_network_input\": \"사용자 지정 네트워크의 URL을 입력하세요\",\n  \"custom_networks\": \"사용자 지정 네트워크\",\n  \"no_network_selected\": \"선택된 사용자 지정 네트워크가 없습니다\",\n  \"locking_chain_door\": \"체인 잠금 문제\",\n  \"locking_chain_issue\": \"체인 잠금 이슈\",\n  \"issuing_chain_door\": \"발행 체인 문제\",\n  \"issuing_chain_issue\": \"발행 체인 이슈\",\n  \"signature_reward\": \"서명 보상\",\n  \"min_account_create_amount\": \"최소 계정 생성 금액\",\n  \"other_chain_source\": \"다른 체인 소스\",\n  \"xchain_claim_id\": \"XChain 클레임 ID\",\n  \"check_nft_id\": \"NFT ID를 확인해주세요\",\n  \"get_nft_state_failed\": \"NFT를 불러올 수 없습니다\",\n  \"minted\": \"발행됨\",\n  \"taxon_id\": \"분류 ID\",\n  \"transfer_fee\": \"이체 수수료\",\n  \"burnable\": \"소각 가능\",\n  \"only_xrp\": \"XRP만 가능\",\n  \"transferable\": \"전송 가능\",\n  \"buy_offers\": \"구매 제안\",\n  \"sell_offers\": \"판매 제안\",\n  \"offer_index\": \"제안 ID\",\n  \"no_sell_offers\": \"판매 제안 없음\",\n  \"no_buy_offers\": \"구매 제안 없음\",\n  \"validator_history.chain\": \"체인\",\n  \"validator_history.date\": \"날짜 (UTC)\",\n  \"validator_history.missed\": \"누락\",\n  \"validator_history.score\": \"점수\",\n  \"seller\": \"판매자\",\n  \"buyer\": \"구매자\",\n  \"offerer\": \"제안자\",\n  \"token_taxon\": \"토큰 분류\",\n  \"uri\": \"URI\",\n  \"owner\": \"소유자\",\n  \"other_chain_destination\": \"다른 체인의 목적지\",\n  \"%_of_total_nodes_validators\": \"노드와 검증자의 총 비율\",\n  \"version_display\": \"버전: {{version}}\",\n  \"validator_count\": \"검증자 수: {{val_count}}\",\n  \"node_count\": \"노드 수: {{node_count}}\",\n  \"current_stable_version\": \"현재 안정적인 버전\",\n  \"stable_version\": \"{{stableVersion}}\",\n  \"nftoken_minter\": \"NFT 발행자\",\n  \"is_burned\": \"소각됨\",\n  \"fee_rate\": \"수수료 비율\",\n  \"last_affecting_transaction\": \"최종 트랜잭션에 영향을 미친 항목\",\n  \"Version\": \"버전\",\n  \"increased_by\": \"증가량\",\n  \"trading_fee\": \"트랜잭션 수수료\",\n  \"tvl\": \"총 잠긴 가치(TVL)\",\n  \"account_address\": \"계정 주소\",\n  \"asset1\": \"자산 1\",\n  \"asset2\": \"자산 2\",\n  \"asset1out\": \"자산 1 출금\",\n  \"asset2out\": \"자산 2 출금\",\n  \"asset1in\": \"자산 1 입금\",\n  \"asset2in\": \"자산 2 입금\",\n  \"effective_price\": \"실질적인 가격\",\n  \"amm_account_id\": \"AMM 계정 ID\",\n  \"lp_tokens\": \"유동성 공급 토큰\",\n  \"min_slot_price\": \"최소 슬롯 가격\",\n  \"max_slot_price\": \" 최대 슬롯 가격\",\n  \"auth_accounts\": \"인증된 계정\",\n  \"network_cannot_be_crawled\": \"이 네트워크는 크롤링이 불가능합니다\",\n  \"check_crawl_existed\": \"운영자에게 연락하여 /crawl이 접근 가능하거나 vl 세트가 있는지 확인하세요\",\n  \"peer_crawled_context\": \"더 자세한 정보는 https://xrpl.org/peer-crawler.html 를 참조하세요\",\n  \"xchainbridge\": \"XChain 브리지\",\n  \"xchain_account_claim_count\": \"XChain 계정 요구 수\",\n  \"xchain_account_create_count\": \"XChain 계정 생성 수\",\n  \"min_signer_quorum\": \"최소 가중치 <0>{{quorum}}</0>가 필요합니다\",\n  \"holder\": \"보유자\",\n  \"action_from\": \"<0><0>{{action}}</0></0> <1><0>{{amount}}</0></1>을 <3><0>{{destination}}</0></3>으로부터\",\n  \"action_from_and\": null,\n  \"claws_back\": \"회수\",\n  \"claws_back_from\": \"<source/>에서 <destination/>로 회수\",\n  \"instruct_to_claw\": \"최대 회수 가능 금액은 <amount/>입니다\",\n  \"hook\": \"Hook\",\n  \"hooks\": \"Hooks\",\n  \"hook_emitted\": \"이 트랜잭션은 Hook에 의해 발생되었습니다\",\n  \"emit_details\": \"발생 상세정보\",\n  \"hook_parameters\": \"Hook 파라미터\",\n  \"hook_executions\": \"Hook 실행\",\n  \"emit_generation\": \"생성된 트랜잭션 순서 중 <0>{{emit}}</0>번째\",\n  \"emit_hook_hash\": \"Hook <0>{{hash}}</0>에 의해 발생됨\",\n  \"emit_parent\": \"<0>{{hash}}</0>에 의해 발동 된 Hook에 의해 발생됩니다\",\n  \"emit_callback\": \"발생 콜백은 <0>{{callback}}<0>입니다.\",\n  \"hook_exec_hash\": \"Hook <0>{{hash}}</0>를 발동 함\",\n  \"hook_exec_account\": \"계정 <0>{{account}}</0>에서\",\n  \"hook_exec_return\": \"코드 <0>{{code}}</0>와 문자열 \\\"<1>{{string}}</1>\\\"을 반환\",\n  \"hook_exec_emit_count\": \"<0>{{count}}</0> 건의 트랜잭션 발생\",\n  \"hash\": \"해시\",\n  \"grant\": \"그랜트\",\n  \"namespace\": \"Namespace\",\n  \"api_version\": \"API 버전\",\n  \"triggered_on\": \"Triggered On\",\n  \"name\": null,\n  \"introduced_in\": null,\n  \"yeas\": null,\n  \"nays\": null,\n  \"eta\": null,\n  \"amendment_summary\": null,\n  \"not\": null,\n  \"enable_tx\": null,\n  \"all\": null,\n  \"yeas_count\": null,\n  \"nays_count\": null,\n  \"yeas_percent\": null,\n  \"nays_percent\": null,\n  \"%_of_validators\": null,\n  \"amendment_not_found\": null,\n  \"check_amendment_key\": null,\n  \"did_document\": null,\n  \"attestation\": null,\n  \"note\": null,\n  \"indicate_unl\": null,\n  \"transaction_tokens_involved\": null,\n  \"transaction_tokens_swapped\": null,\n  \"oracle_document_id\": null,\n  \"provider\": null,\n  \"last_update_time\": null,\n  \"asset_class\": null,\n  \"trading_pairs\": null,\n  \"deleted\": null,\n  \"holders_count\": null,\n  \"trustlines\": null,\n  \"website\": null,\n  \"mpt_issuance_id\": null,\n  \"asset_scale\": null,\n  \"metadata\": null,\n  \"max_amount\": null,\n  \"mpt_holder\": null,\n  \"check_mpt_id\": null,\n  \"outstanding_amount\": null,\n  \"locked\": null,\n  \"can_lock\": null,\n  \"require_auth\": null,\n  \"can_escrow\": null,\n  \"can_trade\": null,\n  \"can_transfer\": null,\n  \"can_clawback\": null,\n  \"enable_amendment_name\": null,\n  \"amendment_status\": null,\n  \"expected_date\": null,\n  \"base\": null,\n  \"credential_type\": null,\n  \"credential_issuer\": null,\n  \"subject\": null,\n  \"expiration\": null,\n  \"domain_id\": null,\n  \"accepted_credentials\": null,\n  \"credential_ids\": null,\n  \"data\": null,\n  \"finish_function\": null,\n  \"quorum_description\": null,\n  \"avg_fee_description\": null,\n  \"ledger_interval_description\": null,\n  \"txn_ledger_description\": null,\n  \"txn_sec_description\": null,\n  \"load_fee_description\": null,\n  \"nUnl_description\": null,\n  \"computation_allowance\": null,\n  \"gas\": null,\n  \"delegate\": null,\n  \"permissions\": null,\n  \"pertaining_to_the_Permissioned_Domain\": null,\n  \"tx_delegated_to\": null,\n  \"account_delegates_to\": null,\n  \"delegate_to\": null,\n  \"volume\": null,\n  \"holders\": null,\n  \"trades\": null,\n  \"no_of_tokens\": null,\n  \"volume_24h_total\": null,\n  \"volume_24h_total_description\": null,\n  \"market_cap_metric_description\": null,\n  \"market_cap_description\": null,\n  \"24h_description\": null,\n  \"volume_description\": null,\n  \"trades_description\": null,\n  \"tvl_description\": null,\n  \"stablecoin_description\": null,\n  \"stablecoin\": null,\n  \"wrapped\": null,\n  \"tokens_footnote\": null,\n  \"xrplmeta_guidelines\": null,\n  \"inner_transaction\": null,\n  \"batch_table_detail_count\": null,\n  \"batch_table_detail_list\": null,\n  \"batch_description\": null,\n  \"batch\": null,\n  \"successful\": null,\n  \"failed\": null,\n  \"not-validated\": null,\n  \"asset\": null,\n  \"assets_maximum\": null,\n  \"mptoken_metadata\": null,\n  \"withdrawal_policy\": null,\n  \"account_creates_vault\": null,\n  \"vault_id\": null,\n  \"single_asset_vault\": null,\n  \"loan_broker_id\": null,\n  \"loan_id\": null,\n  \"management_fee_rate\": null,\n  \"debt_maximum\": null,\n  \"cover_rate_minimum\": null,\n  \"cover_rate_liquidation\": null,\n  \"counterparty\": null,\n  \"principal_requested\": null,\n  \"payment_total\": null,\n  \"payment_interval\": null,\n  \"grace_period\": null,\n  \"loan_origination_fee\": null,\n  \"loan_service_fee\": null,\n  \"late_payment_fee\": null,\n  \"close_payment_fee\": null,\n  \"full_payment_fee\": null,\n  \"overpayment_fee\": null,\n  \"interest_rate\": null,\n  \"late_interest_rate\": null,\n  \"close_interest_rate\": null,\n  \"overpayment_interest_rate\": null,\n  \"set_vault_data\": null,\n  \"set_vault_assets_maximum\": null,\n  \"set_vault_domain_id\": null,\n  \"account_deposits_into_vault\": null,\n  \"account_withdraws_from_vault\": null,\n  \"account_clawbacks_from_vault\": null,\n  \"account_clawbacks_from_vault_amount_omitted\": null,\n  \"account_deletes_vault\": null,\n  \"vault_create_table_detail\": null,\n  \"withdraws\": null,\n  \"deletes\": null,\n  \"vault_delete_table_detail\": null,\n  \"account_flag_title_lsf_global_freeze\": null,\n  \"account_flag_title_lsf_disable_master\": null,\n  \"account_flag_title_lsf_default_ripple\": null,\n  \"account_flag_title_lsf_allow_trustline_clawback\": null,\n  \"account_flag_title_lsf_allow_trustline_locking\": null,\n  \"account_flag_title_lsf_require_destination_tag\": null,\n  \"account_flag_title_lsf_no_freeze\": null,\n  \"account_flag_title_lsf_require_auth\": null,\n  \"account_flag_title_lsf_disallow_xrp\": null,\n  \"account_flag_title_lsf_disallow_incoming_trustline\": null,\n  \"account_flag_title_lsf_disallow_incoming_pay_chan\": null,\n  \"account_flag_title_lsf_disallow_incoming_nft_token_offer\": null,\n  \"account_flag_title_asf_authorized_nft_token_minter\": null,\n  \"account_flag_title_lsf_disallow_incoming_check\": null,\n  \"account_flag_title_lsf_deposit_auth\": null,\n  \"account_flag_title_asf_account_txn_id\": null,\n  \"account_flag_description_lsf_global_freeze\": null,\n  \"account_flag_description_lsf_disable_master\": null,\n  \"account_flag_description_lsf_default_ripple\": null,\n  \"account_flag_description_lsf_allow_trustline_clawback\": null,\n  \"account_flag_description_lsf_allow_trustline_locking\": null,\n  \"account_flag_description_lsf_require_destination_tag\": null,\n  \"account_flag_description_lsf_no_freeze\": null,\n  \"account_flag_description_lsf_require_auth\": null,\n  \"account_flag_description_lsf_disallow_xrp\": null,\n  \"account_flag_description_lsf_disallow_incoming_trustline\": null,\n  \"account_flag_description_lsf_disallow_incoming_pay_chan\": null,\n  \"account_flag_description_lsf_disallow_incoming_nft_token_offer\": null,\n  \"account_flag_description_asf_authorized_nft_token_minter\": null,\n  \"account_flag_description_lsf_disallow_incoming_check\": null,\n  \"account_flag_description_lsf_deposit_auth\": null,\n  \"account_flag_description_asf_account_txn_id\": null,\n  \"account_page_address\": null,\n  \"account_page_address_tag\": null,\n  \"account_page_classic_address\": null,\n  \"account_page_deleted_account_label\": null,\n  \"account_page_deleted_account_warning\": null,\n  \"account_page_extended_address\": null,\n  \"account_page_domain\": null,\n  \"account_page_reserve_balance\": null,\n  \"account_page_xrp_balance\": null,\n  \"account_page_xrp_balance_in_usd\": null,\n  \"account_page_account_properties\": null,\n  \"account_page_flags\": null,\n  \"account_page_flag_status_enabled\": null,\n  \"account_page_flag_status_disabled\": null,\n  \"account_page_signers\": null,\n  \"account_page_signer_weight\": null,\n  \"account_page_details\": null,\n  \"account_page_current_sequence\": null,\n  \"account_page_ticket_count\": null,\n  \"account_page_email_hash\": null,\n  \"account_page_payment_channels\": null,\n  \"account_page_payment_channels_text\": null,\n  \"account_page_nft_minter\": null,\n  \"account_page_asset_held_title\": null,\n  \"account_page_asset_issued_title\": null,\n  \"account_page_asset_tab_iou\": null,\n  \"account_page_asset_tab_lptoken\": null,\n  \"account_page_asset_tab_mpt\": null,\n  \"account_page_asset_tab_nft\": null,\n  \"account_page_asset_table_column_amm_instance\": null,\n  \"account_page_asset_table_column_amm_pair\": null,\n  \"account_page_asset_table_column_asset_class\": null,\n  \"account_page_asset_table_column_balance\": null,\n  \"account_page_asset_table_column_balance_usd\": null,\n  \"account_page_asset_table_column_circulating_supply\": null,\n  \"account_page_asset_table_column_currency_code\": null,\n  \"account_page_asset_table_column_frozen\": null,\n  \"account_page_asset_table_column_highest_bid\": null,\n  \"account_page_asset_table_column_holders\": null,\n  \"account_page_asset_table_column_issuer\": null,\n  \"account_page_asset_table_column_locked\": null,\n  \"account_page_asset_table_column_lowest_ask\": null,\n  \"account_page_asset_table_column_price_usd\": null,\n  \"account_page_asset_table_column_share\": null,\n  \"account_page_asset_table_column_supply\": null,\n  \"account_page_asset_table_column_ticker\": null,\n  \"account_page_asset_table_column_token_id\": null,\n  \"account_page_asset_table_column_transfer_fee\": null,\n  \"account_page_asset_table_column_trustlines\": null,\n  \"account_page_asset_table_column_url\": null,\n  \"account_page_asset_table_mpt_locked_global\": null,\n  \"account_page_asset_table_mpt_locked_individual\": null,\n  \"account_page_asset_table_no_iou\": null,\n  \"account_page_asset_table_no_lptoken\": null,\n  \"account_page_asset_table_no_mpt\": null,\n  \"account_page_asset_table_no_nft\": null,\n  \"tx_hash\": null,\n  \"timestamp\": null,\n  \"amount_in\": null,\n  \"amount_out\": null,\n  \"rate\": null,\n  \"refresh_data\": null,\n  \"token_page.general_overview\": null,\n  \"token_page.market_data\": null,\n  \"token_page.all_tx\": null,\n  \"token_page.dex_tx\": null,\n  \"token_page.transfers_tx\": null,\n  \"token_page.holders_table\": null,\n  \"token_page.issuer\": null,\n  \"token_page.price\": null,\n  \"token_page.holders\": null,\n  \"token_page.supply\": null,\n  \"token_page.market_cap\": null,\n  \"token_page.volume_24h\": null,\n  \"token_page.trades_24h\": null,\n  \"token_page.amm_tvl\": null,\n  \"token_page.transfer_fee\": null,\n  \"token_page.holders_rank\": null,\n  \"token_page.holders_num_tokens\": null,\n  \"token_page.holders_percent_supply\": null,\n  \"token_page.holders_no_holders\": null,\n  \"token_page.holders_usd_value\": null,\n  \"token_page.transfers_no_transfers\": null,\n  \"token_page.circulating_supply\": null,\n  \"token_page.dex_type\": null,\n  \"token_page.dex_amount_in_tooltip\": null,\n  \"token_page.dex_amount_out_tooltip\": null,\n  \"token_page.dex_rate_tooltip\": null,\n  \"token_page.dex_no_trades\": null,\n  \"token_page.token_label\": null,\n  \"token_page.category_text\": null,\n  \"token_type.iou\": null,\n  \"token_type.mpt\": null,\n  \"iou_page.trustlines\": null,\n  \"mpt_page.metadata_warning\": null,\n  \"data_available_from_notice\": null,\n  \"copied\": null,\n  \"click_to_copy\": null,\n  \"withdraw\": null,\n  \"delete\": null,\n  \"rates\": null,\n  \"loan_broker_rates_detail\": null,\n  \"loan_rates_detail\": null,\n  \"loan_fees_detail\": null,\n  \"loan_terms_detail\": null,\n  \"no_limit\": null,\n  \"first_loss_capital\": null,\n  \"vault\": null,\n  \"vault_not_found\": null,\n  \"invalid_vault_id\": null,\n  \"check_vault_id\": null,\n  \"get_vault_failed\": null,\n  \"private_vault\": null,\n  \"perm_domain_id\": null,\n  \"total_value_locked\": null,\n  \"shares\": null,\n  \"assets_available\": null,\n  \"unrealized_loss\": null,\n  \"other_data\": null,\n  \"max_total_supply\": null,\n  \"available_to_borrow\": null,\n  \"not_available\": null,\n  \"first_come_first_served\": null,\n  \"loans\": null,\n  \"loan_broker\": null,\n  \"total_debt\": null,\n  \"maximum_debt\": null,\n  \"management_fee\": null,\n  \"borrower\": null,\n  \"amount_requested\": null,\n  \"outstanding_balance\": null,\n  \"loan_status_current\": null,\n  \"loan_status_default\": null,\n  \"all_loans\": null,\n  \"loan_status_impaired\": null,\n  \"loan_status_paid_off\": null,\n  \"next_due_date\": null,\n  \"origination_date\": null,\n  \"frequency\": null,\n  \"installments\": null,\n  \"prepayment_fee\": null,\n  \"no_loans_message\": null,\n  \"loan_default_detected\": null,\n  \"no_loan_brokers_message\": null,\n  \"depositors_fetch_error\": null,\n  \"no_depositors_message\": null,\n  \"depositors\": null,\n  \"percent_of_supply\": null,\n  \"value\": null,\n  \"currency_toggle_help\": null,\n  \"currency_toggle_description\": null,\n  \"currency_toggle_loading\": null,\n  \"currency_toggle_loading_description\": null,\n  \"currency_toggle_unavailable\": null,\n  \"currency_toggle_unavailable_description\": null,\n  \"vaults\": null,\n  \"vaults_tvl\": null,\n  \"vaults_tvl_description\": null,\n  \"vaults_outstanding_loans\": null,\n  \"vaults_outstanding_loans_description\": null,\n  \"vaults_loans_originated\": null,\n  \"vaults_loans_originated_description\": null,\n  \"vaults_avg_interest_rate\": null,\n  \"vaults_avg_interest_rate_description\": null,\n  \"vaults_num_vaults\": null,\n  \"vaults_num_vaults_description\": null,\n  \"vaults_utilization_ratio\": null,\n  \"vaults_utilization_ratio_description\": null,\n  \"vaults_filter_all_assets\": null,\n  \"vaults_filter_stablecoins\": null,\n  \"vaults_search_placeholder\": null,\n  \"vaults_table_vault_id\": null,\n  \"vaults_table_asset\": null,\n  \"vaults_table_tvl\": null,\n  \"vaults_table_outstanding_loans\": null,\n  \"vaults_table_utilization_ratio\": null,\n  \"vaults_table_avg_interest_rate\": null,\n  \"vaults_table_website\": null,\n  \"vaults_no_results\": null,\n  \"vaults_disclaimer\": null,\n  \"amm_pool\": null,\n  \"basic_info\": null,\n  \"market_data\": null,\n  \"auction\": null,\n  \"created_on\": null,\n  \"volume_24h_tooltip\": null,\n  \"fees_24h\": null,\n  \"fees_24h_tooltip\": null,\n  \"apr_24h\": null,\n  \"apr_24h_tooltip\": null,\n  \"current_holder\": null,\n  \"discounted_fee\": null,\n  \"price_paid\": null,\n  \"replacement_cost\": null,\n  \"all_transactions\": null,\n  \"dex_trades\": null,\n  \"deposits\": null,\n  \"withdrawals\": null,\n  \"lp_tokens_received\": null,\n  \"lp_tokens_redeemed\": null,\n  \"tvl_and_volume\": null,\n  \"no_deposits\": null,\n  \"no_withdrawals\": null,\n  \"liquidity_providers\": null,\n  \"balance\": null,\n  \"lp_token_currency_code\": null,\n  \"asset_2\": null,\n  \"usd_value\": null,\n  \"amm_pool_deleted_label\": null,\n  \"amm_pool_deleted_text\": null,\n  \"amms\": null,\n  \"top_1000_amms\": null,\n  \"general_info\": null,\n  \"number_of_amms\": null,\n  \"number_of_lps\": null,\n  \"number_of_amms_tooltip\": null,\n  \"number_of_lps_tooltip\": null,\n  \"search_amms\": null,\n  \"tvl_tooltip\": null,\n  \"volume_24h_all_tooltip\": null\n}\n"
  },
  {
    "path": "public/locales/my-MM/translations.json",
    "content": "{\n  \"action\": \"လုပ်ဆောင်ချက်\",\n  \"assets\": \"ပိုင်ဆိုင်မှုများ\",\n  \"assets.no_nfts_message\": \"NFT များ မတွေ့ရှိပါ။\",\n  \"assets.no_mpts_message\": \"MPT များ မတွေ့ရှိပါ။\",\n  \"network\": \"ကွန်ယက်\",\n  \"amendments\": \"ပြင်ဆင်ချက်များ\",\n  \"network_name\": \"အမည်မသိ ကွန်ယက်\",\n  \"network_name_testnet\": \"Testnet\",\n  \"network_name_mainnet\": \"Mainnet\",\n  \"network_name_devnet\": \"Devnet\",\n  \"network_name_xahau_mainnet\": \"Xahau Mainnet\",\n  \"network_name_xahau_testnet\": \"Xahau Testnet\",\n  \"network_name_custom\": \"စိတ်ကြိုက်\",\n  \"app.meta.description\": \"XRPL ကွန်ယက် စူးစမ်းရှာဖွေရေး\",\n  \"app.meta.author\": \"Ripple\",\n  \"explorer\": \"စူးစမ်းရှာဖွေရန်\",\n  \"xrpl_org\": \"XRPL.org\",\n  \"github\": \"GitHub\",\n  \"header.search.placeholder\": \"Token, လိပ်စာ, Ledger သို့မဟုတ် ငွေလွှဲမှု ဖြင့် ရှာဖွေရန်\",\n  \"xrp\": \"XRP\",\n  \"xrpl_explorer\": \"XRPL Explorer\",\n  \"ledgers\": \"Ledgers\",\n  \"ledger\": \"Ledger\",\n  \"taxon\": \"Taxon\",\n  \"token_id\": \"Token ID\",\n  \"token_transactions\": \"Token ငွေလွှဲမှုများ\",\n  \"transactions\": \"ငွေလွှဲမှုများ\",\n  \"transaction_short\": \"TX\",\n  \"nodes\": \"Nodes\",\n  \"validator\": \"အတည်ပြုသူ\",\n  \"validators\": \"အတည်ပြုသူများ\",\n  \"upgrade_status\": \"အဆင့်မြှင့်တင်မှု အခြေအနေ\",\n  \"version\": \"ဗားရှင်း {{number}}\",\n  \"component_error\": \"တစ်ခုခု မှားယွင်းနေပါသည်!\",\n  \"1H\": \"၁နာရီ\",\n  \"24H\": \"၂၄နာရီ\",\n  \"30D\": \"၃၀ရက်\",\n  \"total_transactions\": \"ငွေလွှဲမှု အရေအတွက်\",\n  \"total_fees\": \"စုစုပေါင်း အခကြေးငွေ\",\n  \"async_component_failed\": \"ကော်မပိုနင့် ဖွင့်၍မရပါ\",\n  \"account_not_found\": \"အကောင့် မတွေ့ရှိပါ\",\n  \"account_empty_title\": \"အကောင့် ID ထည့်သွင်းထားခြင်း မရှိပါ\",\n  \"account_empty_hint\": \"ရှာဖွေရန် နေရာတွင် အကောင့် ID ထည့်ပါ\",\n  \"check_account_id\": \"သင့်အကောင့် ID ကို စစ်ဆေးပါ\",\n  \"accounts.xrp_balance\": \"XRP လက်ကျန်\",\n  \"accounts.other_balances\": \"အခြား လက်ကျန်များ\",\n  \"accounts.other_balances_short\": \"အခြား လက်ကျန်\",\n  \"amount\": \"ပမာဏ\",\n  \"currency_code\": \"ငွေကြေး ကုဒ်\",\n  \"currency_balance\": \"<0>{{currency}}</0> လက်ကျန်\",\n  \"load_more_action\": \"နောက်ထပ် ကြည့်ရန်...\",\n  \"account_transactions\": \"အကောင့် ငွေလွှဲမှုများ\",\n  \"transaction_type\": \"ငွေလွှဲမှု အမျိုးအစား\",\n  \"transaction_action_CANCEL\": \"ပယ်ဖျက်ရန်\",\n  \"transaction_action_CREATE\": \"ဖန်တီးရန်\",\n  \"transaction_action_FINISH\": \"ပြီးဆုံးရန်\",\n  \"transaction_action_MODIFY\": \"ပြင်ဆင်ရန်\",\n  \"transaction_action_SEND\": \"ပို့ရန်\",\n  \"transaction_category_ACCOUNT\": \"အကောင့်\",\n  \"transaction_category_DEX\": \"Dex (AMM, Offers, Trust Sets, Tokens)\",\n  \"transaction_category_NFT\": \"NFT\",\n  \"transaction_category_PAYMENT\": \"ငွေပေးချေမှု\",\n  \"transaction_category_PSEUDO\": \"Pseudo-Tx\",\n  \"transaction_category_XCHAIN\": \"XChain\",\n  \"transaction_category_OTHER\": null,\n  \"transaction_legend_toggle_hide\": \"ရှင်းလင်းချက် ဖျောက်ရန်\",\n  \"transaction_legend_toggle_show\": \"ရှင်းလင်းချက် ပြရန်\",\n  \"transactions.date_header\": \"ရက်စွဲ/အချိန် (UTC)\",\n  \"no_transactions_message\": \"ငွေလွှဲမှုများ မတွေ့ရှိပါ။\",\n  \"get_vault_transactions_failed\": null,\n  \"retry_action\": \"ပြန်လည်ကြိုးစားရန်...\",\n  \"uh_oh\": \"အိုး!\",\n  \"not_found_default_title\": \"စာမျက်နှာ မတွေ့ရှိပါ\",\n  \"not_found_check_url\": \"URL ကို ပြန်လည်စစ်ဆေးပါ\",\n  \"not_found\": \"မတွေ့ရှိပါ\",\n  \"hash_not_found\": null,\n  \"buy\": \"ဝယ်ယူရန်\",\n  \"sell\": \"ရောင်းချရန်\",\n  \"price\": \"စျေးနှုန်း\",\n  \"ledger_index\": \"Ledger အညွှန်း\",\n  \"to\": \"သို့\",\n  \"from\": \"မှ\",\n  \"request\": null,\n  \"terms\": null,\n  \"send\": \"ပို့ရန်\",\n  \"delivered\": \"ပို့ဆောင်ပြီး\",\n  \"cancel_offer\": \"ကမ်းလှမ်းမှု ပယ်ဖျက်ရန်\",\n  \"convert_maximum\": \"အများဆုံး ပြောင်းလဲရန်\",\n  \"convert_to\": \"သို့ ပြောင်းလဲရန်\",\n  \"using_at_most\": \"အများဆုံး အသုံးပြုမှု\",\n  \"partial_payment_allowed\": \"တစ်စိတ်တစ်ပိုင်း ငွေပေးချေမှု ခွင့်ပြုသည်\",\n  \"set_limit\": \"ယုံကြည်မှု ကန့်သတ်ချက် သတ်မှတ်ရန်\",\n  \"escrow\": \"escrow\",\n  \"cancel_escrow\": \"escrow ပယ်ဖျက်ရန်\",\n  \"finish_escrow\": \"escrow ပြီးဆုံးရန်\",\n  \"escrow_amount\": \"escrow ပမာဏ\",\n  \"escrow_destination\": \"escrow လက်ခံမည့်သူ\",\n  \"escrow_transaction\": \"escrow ငွေလွှဲမှု\",\n  \"escrow_condition_short\": \"escrow စည်းကမ်းချက်\",\n  \"escrow_fulfillment\": \"escrow ဖြည့်ဆည်းမှု\",\n  \"condition\": \"စည်းကမ်းချက်\",\n  \"fulfillment\": \"ဖြည့်ဆည်းမှု\",\n  \"cancel_after\": \"ပယ်ဖျက်နိုင်သည့် အချိန်\",\n  \"finish_after\": \"ပြီးဆုံးနိုင်သည့် အချိန်\",\n  \"settle_delay\": \"ငွေပေးချေမှု နှောင့်နှေးချိန်\",\n  \"channel_id\": \"Channel ID\",\n  \"seconds\": \"စက္ကန့်\",\n  \"seconds_short\": \"စက္ကန့်\",\n  \"regular_key\": \"ပုံမှန် သော့\",\n  \"unset_regular_key\": \"ပုံမှန် သော့ ဖယ်ရှားရန်\",\n  \"unset_signer_list\": \"လက်မှတ်ထိုးသူ စာရင်း ဖယ်ရှားရန်\",\n  \"set_flag\": \"အလံ သတ်မှတ်ရန်\",\n  \"clear_flag\": \"အလံ ရှင်းလင်းရန်\",\n  \"email_hash\": \"အီးမေးလ် hash\",\n  \"message_key\": \"မက်ဆေ့ခ်ျ သော့\",\n  \"out_of\": \"မှ\",\n  \"weight\": \"အလေးချိန်\",\n  \"the_account\": \"အကောင့်\",\n  \"create_payment_channel\": \"ငွေပေးချေမှု လမ်းကြောင်း ဖန်တီးမည်\",\n  \"destination_tag\": \"လက်ခံမည့်သူ tag\",\n  \"source_tag\": \"ပေးပို့သူ tag\",\n  \"channel_settle_delay\": \"လမ်းကြောင်းတွင် ငွေပေးချေမှု နှောင့်နှေးချိန်\",\n  \"the_channel_id_is\": \"Channel ID မှာ\",\n  \"the_channel_amount_is\": \"လမ်းကြောင်း ပမာဏမှာ\",\n  \"update_payment_channel\": \"ငွေပေးချေမှု လမ်းကြောင်းကို အပ်ဒိတ်လုပ်မည်\",\n  \"the_channel_balance_is\": \"တောင်းဆိုထားသော လမ်းကြောင်း လက်ကျန်မှာ\",\n  \"amm_delete_description\": \"<Asset/> နှင့် <Asset2/> အတွက် AMM ကို ဖျက်ရန် ကြိုးစားခဲ့သည်။\",\n  \"amm_delete_description_caveat\": \"ယုံကြည်မှု လမ်းကြောင်း ၅၁၂ ထက်ပိုရှိပါက ၅၁၂ ခုကိုသာ ဖျက်ပေးမည်။\",\n  \"payment_channel_closed_description\": \"ငွေပေးချေမှု လမ်းကြောင်းကို ပိတ်မည်ဖြစ်ပြီး၊ ကျန်ရှိသော လက်ကျန်များကို မူရင်းအကောင့်သို့ ပြန်လည်ပေးပို့မည်\",\n  \"set_signer_list_description\": \"အောက်ပါ လက်မှတ်ထိုးသူများစာရင်းဖြင့် အနည်းဆုံး လက်မှတ်ထိုးသူ ကိုတာကို {{quorum}} သို့ သတ်မှတ်သည်\",\n  \"unset_signer_list_description\": \"အကောင့်မှ လက်မှတ်ထိုးသူအားလုံးကို ဖယ်ရှားလိုက်သည်\",\n  \"transaction_initiated_by\": \"ငွေလွှဲမှုကို စတင်သူမှာ\",\n  \"increase_channel_amount_by\": \"လမ်းကြောင်း ပမာဏကို တိုးမြှင့်မည်\",\n  \"channel_amount_increase\": \"လမ်းကြောင်း ပမာဏ တိုးမြှင့်မှု\",\n  \"channel_amount\": \"လမ်းကြောင်း ပမာဏ\",\n  \"total_claimed\": \"စုစုပေါင်း တောင်းဆိုထား\",\n  \"amount_claimed\": \"တောင်းဆိုထားသော ပမာဏ\",\n  \"close_request\": \"လမ်းကြောင်း ပိတ်သိမ်းရန် တောင်းဆိုချက်\",\n  \"renew_channel\": \"လမ်းကြောင်း သက်တမ်းတိုး\",\n  \"payment_channel_closed\": \"ငွေပေးချေမှု လမ်းကြောင်း ပိတ်သိမ်းပြီး\",\n  \"paychannel_node_line1\": \"၎င်းသည် <3><0>{{account}}</0></3> မှ <5><0>{{counterAccount}}</0></5> သို့ PayChannel node ကို <1><0>{{action}}</0></1>\",\n  \"paychannel_amount_changed\": \"ပမာဏ <3><0>{{previous}}</0><1><0>{{currency}}</0></1></3> မှ <5><0>{{final}}</0><1><0>{{currency}}</0></1></5> သို့ <1><0>{{difference}}</0><1><0>{{currency}}</0></1></1> ပြောင်းလဲသွားသည်\",\n  \"paychannel_balance_changed\": \"လက်ကျန် <3><0>{{previous}}</0><1><0>{{currency}}</0></1></3> မှ <5><0>{{final}}</0><1><0>{{currency}}</0></1></5> သို့ <1><0>{{difference}}</0><1><0>{{currency}}</0></1></1> ပြောင်းလဲသွားသည်\",\n  \"setfee_fees_description\": \"နောင်လာမည့် ငွေလွှဲမှုများတွင် အနည်းဆုံး အခကြေးငွေ <amount /> လိုအပ်မည်။\",\n  \"setfee_reserves_description\": \"အကောင့်များသည် အခြေခံ <base /> နှင့် ထပ်တိုးပစ္စည်းတစ်ခုစီအတွက် နောက်ထပ် <increment /> ထားရှိရမည်။\",\n  \"setfee_docs_description\": \"စာရွက်စာတမ်းများကို ကြည့်ရှုရန်: <0>အခကြေးငွေများ</0>\",\n  \"setfee_base_fee\": \"အခြေခံ အခကြေးငွေ\",\n  \"setfee_reserve\": \"သီးသန့်ငွေ\",\n  \"setfee_reserve_increment\": \"သီးသန့်ငွေ တိုးမြှင့်မှု\",\n  \"formatted_date\": \"ရက်စွဲ/အချိန် ({{timeZone}})\",\n  \"transaction_type_name_AMMCreate\": \"AMM ဖန်တီးရန်\",\n  \"transaction_type_name_AMMDelete\": \"AMM ဖျက်ရန်\",\n  \"transaction_type_name_AMMDeposit\": \"AMM အပ်နှံရန်\",\n  \"transaction_type_name_AMMWithdraw\": \"AMM ထုတ်ယူရန်\",\n  \"transaction_type_name_AMMVote\": \"AMM မဲပေးရန်\",\n  \"transaction_type_name_AMMBid\": \"AMM လေလံဆွဲရန်\",\n  \"transaction_type_name_AMMClawback\": null,\n  \"transaction_type_name_AccountSet\": \"အကောင့် သတ်မှတ်ရန်\",\n  \"transaction_type_name_Batch\": null,\n  \"transaction_type_name_CheckCancel\": \"ချက် ပယ်ဖျက်ရန်\",\n  \"transaction_type_name_CheckCash\": \"ချက် ငွေထုတ်ရန်\",\n  \"transaction_type_name_CheckCreate\": \"ချက် ဖန်တီးရန်\",\n  \"transaction_type_name_CredentialAccept\": null,\n  \"transaction_type_name_CredentialCreate\": null,\n  \"transaction_type_name_CredentialDelete\": null,\n  \"transaction_type_name_DelegateSet\": null,\n  \"transaction_type_name_DIDDelete\": \"DID ဖျက်ရန်\",\n  \"transaction_type_name_DIDSet\": \"DID သတ်မှတ်ရန်\",\n  \"transaction_type_name_DepositPreauth\": \"အပ်နှံမှု ကြိုခွင့်ပြုချက်\",\n  \"transaction_type_name_Error_Cases\": \"အမှားဖြစ်စဉ်များ\",\n  \"transaction_type_name_EscrowCancel\": \"Escrow ပယ်ဖျက်ရန်\",\n  \"transaction_type_name_EscrowCreate\": \"Escrow ဖန်တီးရန်\",\n  \"transaction_type_name_EscrowFinish\": \"Escrow ပြီးဆုံးရန်\",\n  \"transaction_type_name_Invoke\": \"ခေါ်ယူရန်\",\n  \"transaction_type_name_LoanBrokerSet\": null,\n  \"transaction_type_name_LoanBrokerDelete\": null,\n  \"transaction_type_name_LoanBrokerCoverDeposit\": null,\n  \"transaction_type_name_LoanBrokerCoverWithdraw\": null,\n  \"transaction_type_name_LoanBrokerCoverClawback\": null,\n  \"transaction_type_name_LoanSet\": null,\n  \"transaction_type_name_LoanDelete\": null,\n  \"transaction_type_name_LoanManage\": null,\n  \"transaction_type_name_LoanPay\": null,\n  \"transaction_type_name_MPTokenIssuanceCreate\": \"MPT ထုတ်ပေးမှု ဖန်တီးရန်\",\n  \"transaction_type_name_MPTokenIssuanceDestroy\": \"MPT ထုတ်ပေးမှု ဖျက်ရန်\",\n  \"transaction_type_name_MPTokenIssuanceSet\": \"MPT ထုတ်ပေးမှု သတ်မှတ်ရန်\",\n  \"transaction_type_name_MPTokenAuthorize\": \"MPT ခွင့်ပြုရန်\",\n  \"transaction_type_name_NFTokenAcceptOffer\": \"NFT ကမ်းလှမ်းမှု လက်ခံရန်\",\n  \"transaction_type_name_NFTokenBurn\": \"NFT ဖျက်ဆီးရန်\",\n  \"transaction_type_name_NFTokenCancelOffer\": \"NFT ကမ်းလှမ်းမှု ပယ်ဖျက်ရန်\",\n  \"transaction_type_name_NFTokenCreateOffer\": \"NFT ကမ်းလှမ်းမှု ဖန်တီးရန်\",\n  \"transaction_type_name_NFTokenMint\": \"NFT ထုတ်လုပ်ရန်\",\n  \"transaction_type_name_OfferCancel\": \"ကမ်းလှမ်းမှု ပယ်ဖျက်ရန်\",\n  \"transaction_type_name_OfferCreate\": \"ကမ်းလှမ်းမှု ဖန်တီးရန်\",\n  \"transaction_type_name_OracleDelete\": \"Oracle ဖျက်ရန်\",\n  \"transaction_type_name_OracleSet\": \"Oracle သတ်မှတ်ရန်\",\n  \"transaction_type_name_Payment\": \"ငွေပေးချေမှု\",\n  \"transaction_type_name_PaymentChannelClaim\": \"ငွေပေးချေမှု လမ်းကြောင်း တောင်းဆိုရန်\",\n  \"transaction_type_name_PaymentChannelCreate\": \"ငွေပေးချေမှု လမ်းကြောင်း ဖန်တီးရန်\",\n  \"transaction_type_name_PaymentChannelFund\": \"ငွေပေးချေမှု လမ်းကြောင်း ရန်ပုံငွေ\",\n  \"transaction_type_name_PermissionedDomainDelete\": null,\n  \"transaction_type_name_PermissionedDomainSet\": null,\n  \"transaction_type_name_SetHook\": \"Hook သတ်မှတ်ရန်\",\n  \"transaction_type_name_SetRegularKey\": \"ပုံမှန်သော့ သတ်မှတ်ရန်\",\n  \"transaction_type_name_SignerListSet\": \"လက်မှတ်ထိုးသူစာရင်း သတ်မှတ်ရန်\",\n  \"transaction_type_name_TicketCreate\": \"လက်မှတ် ဖန်တီးရန်\",\n  \"transaction_type_name_TrustSet\": \"ယုံကြည်မှု သတ်မှတ်ရန်\",\n  \"transaction_type_name_VaultCreate\": null,\n  \"transaction_type_name_VaultSet\": null,\n  \"transaction_type_name_VaultDeposit\": null,\n  \"transaction_type_name_VaultWithdraw\": null,\n  \"transaction_type_name_VaultClawback\": null,\n  \"transaction_type_name_VaultDelete\": null,\n  \"transaction_type_name_XChainAccountCreateCommit\": \"XChain အကောင့်ဖန်တီးမှု အတည်ပြုရန်\",\n  \"transaction_type_name_XChainAddAccountCreateAttestation\": \"XChain အကောင့်ဖန်တီးမှု အထောက်အထား ထည့်ရန်\",\n  \"transaction_type_name_XChainAddClaimAttestation\": \"XChain တောင်းဆိုမှု အထောက်အထား ထည့်ရန်\",\n  \"transaction_type_name_XChainClaim\": \"XChain တောင်းဆိုရန်\",\n  \"transaction_type_name_XChainCommit\": \"XChain အတည်ပြုရန်\",\n  \"transaction_type_name_XChainCreateBridge\": \"XChain တံတား ဖန်တီးရန်\",\n  \"transaction_type_name_XChainCreateClaimID\": \"XChain တောင်းဆိုမှု ID ဖန်တီးရန်\",\n  \"transaction_type_name_XChainModifyBridge\": \"XChain တံတား ပြင်ဆင်ရန်\",\n  \"transaction_type_name_EnableAmendment\": \"ပြင်ဆင်ချက် ဖွင့်ရန်\",\n  \"transaction_type_name_SetFee\": \"အခကြေးငွေ သတ်မှတ်ရန်\",\n  \"transaction_type_name_UNLModify\": \"UNL ပြင်ဆင်ရန်\",\n  \"transaction_type_name_AccountDelete\": \"အကောင့် ဖျက်ရန်\",\n  \"generic_error\": \"တစ်ခုခု မှားယွင်းနေပါသည်\",\n  \"not_your_fault\": \"သင့်အမှား မဟုတ်နိုင်ပါ\",\n  \"come_back_later\": \"မကြာမီ ရရှိနိုင်ပါမည်\",\n  \"invalid_ledger_id\": \"Ledger ID မှားယွင်းနေပါသည်\",\n  \"invalid_transaction_hash\": \"ငွေလွှဲမှု hash မှားယွင်းနေပါသည်\",\n  \"ledger_not_found\": \"Ledger မတွေ့ရှိပါ\",\n  \"check_ledger_id\": \"ကျေးဇူးပြု၍ သင့် ledger ID ကို စစ်ဆေးပါ\",\n  \"server_ledgers_hint\": \"ဤ node ({{connection.server.publicKey, truncate(length: 10)}}) တွင် ledgers {{connection.ledger.validated}} သာ ပါဝင်သည်\",\n  \"use_search\": \"ကျေးဇူးပြု၍ ကျွန်ုပ်တို့၏ ရှာဖွေမှုကို အသုံးပြုပါ\",\n  \"ledger_has_no_trans\": \"ဤ ledger တွင် ငွေလွှဲမှုများ မရှိပါ\",\n  \"less_than\": \"အောက်လျော့နည်း\",\n  \"transaction_not_found\": \"ငွေလွှဲမှု မတွေ့ရှိပါ\",\n  \"transaction_empty_title\": \"ငွေလွှဲမှု hash ထည့်သွင်းထားခြင်း မရှိပါ\",\n  \"transaction_empty_hint\": \"ရှာဖွေရန် နေရာတွင် ငွေလွှဲမှု hash ထည့်ပါ\",\n  \"validator_not_found\": \"အတည်ပြုသူ မတွေ့ရှိပါ\",\n  \"check_transaction_hash\": \"ကျေးဇူးပြု၍ သင့် ငွေလွှဲမှု hash သို့မဟုတ် CTID ကို စစ်ဆေးပါ။\",\n  \"wrong_network\": \"ဤ CTID သည် အခြားကွန်ယက်တစ်ခုအတွက် ဖြစ်သည်။\",\n  \"check_validator_key\": \"ကျေးဇူးပြု၍ သင့် အတည်ပြုသူ key ကို စစ်ဆေးပါ\",\n  \"transaction\": \"Transaction\",\n  \"success\": \"အောင်မြင်သည်\",\n  \"fail\": \"မအောင်မြင်ပါ\",\n  \"simple\": \"Simple\",\n  \"detailed\": \"Detailed\",\n  \"details\": \"အသေးစိတ်\",\n  \"history\": \"မှတ်တမ်း\",\n  \"voting\": \"Voting\",\n  \"raw\": \"Raw\",\n  \"expand\": \"ချဲ့ရန်\",\n  \"collapse\": \"ခေါက်ရန်\",\n  \"try_detailed_raw\": \"Try `Detailed` or `Raw` view\",\n  \"account\": \"Account\",\n  \"transaction_cost\": \"Transaction Cost\",\n  \"transaction_cost_short\": \"Txn. Cost\",\n  \"sequence_number\": \"Sequence Number\",\n  \"sequence_number_short\": \"Sequence #\",\n  \"serial\": \"Serial\",\n  \"n_a\": \"N/A\",\n  \"memos\": \"Memos\",\n  \"flags\": \"Flags\",\n  \"status\": \"အခြေအနေ\",\n  \"successful_transaction\": \"ဤငွေလွှဲမှု အောင်မြင်ပါသည်\",\n  \"fail_transaction\": \"ဤငွေလွှဲမှု အခြေအနေ ကုဒ် <0>{{code}}</0> ဖြင့် မအောင်မြင်ပါ\",\n  \"transaction_validated\": \"၊ နှင့် ledger တွင် အတည်ပြုပြီး \",\n  \"on\": \" တွင် \",\n  \"description\": \"ဖော်ပြချက်\",\n  \"signers\": \"လက်မှတ်ထိုးသူများ\",\n  \"decoded_hex\": \"ဖြေထုတ်ထားသော hex\",\n  \"transaction_consumed_fee\": \"ဤငွေလွှဲမှု ပြုလုပ်ရန် သုံးစွဲခဲ့သော အခကြေးငွေ\",\n  \"meta\": \"Meta\",\n  \"number_of_affected_node\": \"၎င်းသည် ledger ထဲရှိ node {{count}} ခုကို သက်ရောက်မှု ရှိခဲ့သည်\",\n  \"nodes_type\": \"{{action}} nodes များ\",\n  \"node_meta_type\": \"၎င်းသည် {{action}} node အမျိုးအစားဖြင့်\",\n  \"transaction_balance_line_one\": \"၎င်းသည် <5><0>{{account}}</0></5> နှင့် <7><0>{{counterAccount}}</0></7> ကြား <3><0>{{currency}}</0></3> RippleState node ကို <1><0>{{action}}</0></1>\",\n  \"transaction_balance_line_two\": \"လက်ကျန် <3><0>{{previousBalance}}</0></3> မှ <5><0>{{finalBalance}}</0></5> သို့ <1><0>{{change}}</0></1> ပြောင်းလဲသွားသည်\",\n  \"transaction_outstanding_balance_line_two\": \"ကျန်ရှိနေသော လက်ကျန် <3><0>{{previousBalance}}</0></3> မှ <5><0>{{finalBalance}}</0></5> သို့ <1><0>{{change}}</0></1> ပြောင်းလဲသွားသည်\",\n  \"transaction_owned_directory\": \"၎င်းသည် ပိုင်ဆိုင်သူ {{action}} DirectoryNode node\",\n  \"transaction_unowned_directory\": \"၎င်းသည် DirectoryNode node ကို {{action}}\",\n  \"transaction_mptoken_line_one\": \"၎င်းသည် <3><0>{{account}}</0></3> ၏ MPToken node ကို <1><0>{{action}}</0></1>\",\n  \"transaction_mpt_issuance_line_one\": \"၎င်းသည် <3><0>{{account}}</0></3> ၏ MPTokenIssuance node ကို <1><0>{{action}}</0></1>\",\n  \"owned_account_root\": \"၎င်းသည် {{action}} AccountRoot node ၏\",\n  \"unowned_account_root\": \"၎င်းသည် AccountRoot node ကို {{action}}\",\n  \"account_balance_increased\": \"လက်ကျန် <3><0>{{previous}}</0><1><0>{{currency}}</0></1></3> မှ <5><0>{{final}}</0><1><0>{{currency}}</0></1></5> သို့ <1><0>{{difference}}</0><1><0>{{currency}}</0></1></1> တိုးလာသည်\",\n  \"account_balance_decreased\": \"လက်ကျန် <3><0>{{previous}}</0><1><0>{{currency}}</0></1></3> မှ <5><0>{{final}}</0><1><0>{{currency}}</0></1></5> သို့ <1><0>{{difference}}</0><1><0>{{currency}}</0></1></1> လျော့သွားသည်\",\n  \"decreased_from_to\": \"<3><0>{{previous}}</0></3> မှ <5><0>{{final}}</0></5> သို့ <1><0>{{change}}</0></1> လျော့သွားသည်\",\n  \"offer_node_meta\": \"၎င်းသည် sequence # <7><0>{{sequence}}</0></7> ဖြင့် <5><0>{{account}}</0></5> ပိုင်ဆိုင်သော <3><0>{{pair}}</0></3> ကမ်းလှမ်းမှု node ကို <1><0>{{action}}</0></1>\",\n  \"offer_replaces\": \"ဤကမ်းလှမ်းမှုသည် ရှိပြီးသား ကမ်းလှမ်းမှု #\",\n  \"offer_partially_filled\": \"ကမ်းလှမ်းမှု တစ်စိတ်တစ်ပိုင်း ဖြည့်စွက်ပြီး\",\n  \"offer_filled\": \"ကမ်းလှမ်းမှု ဖြည့်စွက်ပြီး\",\n  \"offer_cancelled\": \"ကမ်းလှမ်းမှု ပယ်ဖျက်ပြီး\",\n  \"offer_replaced\": \"ဤကမ်းလှမ်းမှုကို ကမ်းလှမ်းမှုအသစ် # ဖြင့် အစားထိုးပြီး\",\n  \"offer_lack_of_funds\": \"ကမ်းလှမ်းမှု တစ်စိတ်တစ်ပိုင်း ဖြည့်စွက်ပြီး၊ ထို့နောက် ငွေကြေးမလုံလောက်သောကြောင့် ပယ်ဖျက်ခဲ့သည်\",\n  \"transaction_sequence\": \"ငွေလွှဲမှု၏ sequence နံပါတ်မှာ\",\n  \"trust_set_description\": \"၎င်းသည် <7><0>{{account}}</0></7> က လက်ခံရန် ဆန္ဒရှိသော <5><0>{{issuer}}</0></5> မှ <3><0>{{currency}}</0></3> ၏ အများဆုံးပမာဏအဖြစ် <1><0>{{amount}}</0></1> ကို သတ်မှတ်သည်\",\n  \"payment_desc_line_1\": \"ငွေပေးချေမှုသည် <source/> မှ <destination/> သို့ ဖြစ်သည်\",\n  \"the_source_tag_is\": \"ပေးပို့သူ tag မှာ \",\n  \"the_destination_tag_is\": \"လက်ခံမည့်သူ tag မှာ\",\n  \"payment_desc_line_4\": \"ပို့ဆောင်ရန် ညွှန်ကြားထားသည်မှာ\",\n  \"payment_desc_line_5\": \"အများဆုံး သုံးစွဲမှုဖြင့်\",\n  \"payment_desc_line_6\": \"အမှန်တကယ် ပို့ဆောင်ခဲ့သော ပမာဏမှာ\",\n  \"offer_cancel_description\": \"ဤငွေလွှဲမှုသည် အကောင့်၏ ရှိပြီးသား ကမ်းလှမ်းမှု #\",\n  \"offer_create_desc_line_1\": \"အကောင့် <1><0>{{account}}</0></1> သည် <5><0>{{takerPays}}</0><1><0>{{currency}}</0></1></5> ရရှိရန်အတွက် <3><0>{{takerGets}}</0><1><0>{{currency}}</0></1></3> ပေးချေရန် ကမ်းလှမ်းသည်\",\n  \"offer_create_desc_line_2\": \"ဤကမ်းလှမ်းမှုအတွက် လဲလှယ်နှုန်းမှာ\",\n  \"offer_create_desc_line_3\": \"ဤငွေလွှဲမှုသည် အကောင့်၏ ရှိပြီးသား ကမ်းလှမ်းမှု # ကိုလည်း ပယ်ဖျက်မည်\",\n  \"offer_create_desc_line_5\": null,\n  \"offer_will_expire_desc\": \"ဤကမ်းလှမ်းမှုသည် <1><0>{{date}}</0></1> တွင် သက်တမ်းကုန်ဆုံးမည်၊ ထိုအချိန်မတိုင်မီ ပယ်ဖျက်ခြင်း သို့မဟုတ် အသုံးပြုခြင်း မရှိပါက\",\n  \"offer_did_expire_desc\": \"ဤကမ်းလှမ်းမှုသည် <1><0>{{date}}</0></1> တွင် သက်တမ်းကုန်ဆုံးခဲ့သည်၊ ထိုအချိန်မတိုင်မီ ပယ်ဖျက်ခြင်း သို့မဟုတ် အသုံးပြုခြင်း မရှိခဲ့ပါက\",\n  \"escrow_is_from\": \"Escrow သည် <1><0>{{account}}</0></1> မှ <3><0>{{destination}}</0></3> သို့ ဖြစ်သည်\",\n  \"escrow_is_created_by\": \"Escrow ကို <1><0>{{account}}</0></1> မှ ဖန်တီးခဲ့ပြီး ငွေကြေးများကို အကောင့်တူသို့ ပြန်လည်ပေးပို့မည်\",\n  \"escrowed_amount\": \"Escrow ထားသော ပမာဏမှာ\",\n  \"escrow_condition\": \"Escrow တွင် ဖြည့်ဆည်းရမည့် စည်းကမ်းချက်မှာ\",\n  \"describe_cancel_after\": \"၎င်းကို ပယ်ဖျက်နိုင်သည့် အချိန်မှာ\",\n  \"describe_finish_after\": \"၎င်းကို ပြီးဆုံးနိုင်သည့် အချိန်မှာ\",\n  \"escrow_completion_desc\": \"ပြီးဆုံးခြင်းကို စတင်သူမှာ\",\n  \"escrow_completion_desc_2\": \"Escrow ထားသော ပမာဏ <1><0>{{amount}}</0></1> ကို <3><0>{{destination}}</0></3> သို့ ပို့ဆောင်ခဲ့သည်\",\n  \"escrow_finish_fulfillment_desc\": \"Escrow စည်းကမ်းချက်ကို ဖြည့်ဆည်းသူမှာ\",\n  \"escrow_cancellation_desc\": \"ပယ်ဖျက်ခြင်းကို စတင်သူမှာ\",\n  \"escrow_cancellation_desc_2\": \"Escrow ထားသော ပမာဏ <1><0>{{amount}}</0></1> ကို <3><0>{{owner}}</0></3> သို့ ပြန်လည်ပေးပို့ခဲ့သည်\",\n  \"escrow_after_transaction_cost\": \"ငွေလွှဲမှု ကုန်ကျစရိတ် နုတ်ပြီးနောက်\",\n  \"escrow_created_by_desc\": \"Escrow ကို <1><0>{{account}}</0></1> မှ ငွေလွှဲမှု <3><0>{{transaction}}</0></3> ဖြင့် ဖန်တီးခဲ့သည်\",\n  \"set_regular_key_description\": \"၎င်းသည် အကောင့်၏ ပုံမှန်သော့ကို သတ်မှတ်သည်\",\n  \"unset_regular_key_description\": \"၎င်းသည် အကောင့်၏ ပုံမှန်သော့ကို ဖယ်ရှားသည်\",\n  \"set_flag_description\": \"၎င်းသည် အကောင့် အလံကို သတ်မှတ်သည်\",\n  \"clear_flag_description\": \"၎င်းသည် အကောင့် အလံကို ရှင်းလင်းသည်\",\n  \"set_domain_description\": \"၎င်းသည် အကောင့် domain အဖြစ် သတ်မှတ်သည်\",\n  \"set_email_description\": \"၎င်းသည် အကောင့် အီးမေးလ် hash အဖြစ် သတ်မှတ်သည်\",\n  \"set_message_key_description\": \"၎င်းသည် အကောင့် မက်ဆေ့ခ်ျ သော့အဖြစ် သတ်မှတ်သည်\",\n  \"set_nftoken_minter_description\": \"၎င်းသည် <0>{{account}}</0> ကို ဤအကောင့်အတွက် ခွင့်ပြုချက်ရ NFT ထုတ်လုပ်သူအဖြစ် သတ်မှတ်သည်\",\n  \"deposit_auth\": \"၎င်းသည် <1><0>{{account}}</0></1> အား ဤအကောင့်သို့ ငွေပေးချေရန် ခွင့်ပြုသည်\",\n  \"deposit_unauth\": \"၎င်းသည် <1><0>{{account}}</0></1> ၏ ဤအကောင့်သို့ ငွေပေးချေခွင့်ကို ပယ်ဖျက်သည်\",\n  \"deposit_auth_credentials\": null,\n  \"deposit_unauth_credentials\": null,\n  \"invalid_xrpl_address\": \"XRPL လိပ်စာ မှားယွင်းနေပါသည်\",\n  \"loading\": \"ဖွင့်နေသည်\",\n  \"get_ledger_failed\": \"Ledger ကို ဖွင့်၍မရပါ\",\n  \"get_transaction_failed\": \"ငွေလွှဲမှုကို ဖွင့်၍မရပါ\",\n  \"get_validator_failed\": \"အတည်ပြုသူကို ဖွင့်၍မရပါ\",\n  \"get_account_state_failed\": \"အကောင့်အခြေအနေကို ဖွင့်၍မရပါ\",\n  \"get_account_transactions_failed\": \"အကောင့်ငွေလွှဲမှုများကို ဖွင့်၍မရပါ\",\n  \"get_account_transactions_try\": \"ငွေလွှဲမှုများ ထပ်မံဖွင့်ကြည့်ပါ\",\n  \"pubkey\": \"အများသုံး သော့\",\n  \"node_pubkey\": \"node အများသုံး သော့\",\n  \"ip\": \"ip လိပ်စာ\",\n  \"state\": \"အခြေအနေ\",\n  \"rippled_version\": \"version\",\n  \"last_ledger\": \"နောက်ဆုံး ledger\",\n  \"uptime\": \"အချိန်ကာလ\",\n  \"peers\": \"peers\",\n  \"in_out\": \"(in:out)\",\n  \"ledger_history\": \"ledger မှတ်တမ်း\",\n  \"quorum\": \"quorum\",\n  \"load\": \"ဝန်\",\n  \"latency\": \"နှောင့်နှေးချိန်\",\n  \"amendment_id\": \"ID\",\n  \"amendment_name\": \"အမည်\",\n  \"voters\": \"မဲပေးသူများ\",\n  \"threshold\": \"သတ်မှတ်ချက်\",\n  \"consensus\": \"သဘောတူညီမှု\",\n  \"enabled\": \"ဖွင့်ထား\",\n  \"disabled\": null,\n  \"on_tx\": \"on (tx)\",\n  \"yes\": \"Yes\",\n  \"no\": \"No\",\n  \"deprecated\": \"မသုံးတော့\",\n  \"domain\": \"domain\",\n  \"unl\": \"unl\",\n  \"fee\": \"အခကြေးငွေ\",\n  \"ledger_interval\": \"ပျမ်းမျှ ledger ကြားချိန်\",\n  \"load_fee\": \"load fee\",\n  \"txn_sec\": \"txn/sec.\",\n  \"txn_ledger\": \"avg. txn/ledger\",\n  \"avg_fee\": \"Avg. Txn Fee\",\n  \"txn_count\": \"txn count\",\n  \"nUnlCol\": \"nUNL\",\n  \"nUnl\": \"VALIDATORS ON nUNL\",\n  \"fees\": \"အခကြေးငွေများ\",\n  \"total\": \"စုစုပေါင်း\",\n  \"missing\": \"ပျောက်ဆုံး\",\n  \"authorize\": \"ခွင့်ပြုရန်\",\n  \"unauthorize\": \"ခွင့်ပြုချက်ပယ်ဖျက်ရန်\",\n  \"missed_validations\": \"{{count}} ခု အတည်ပြုမှု လွဲချော်\",\n  \"incomplete\": \"မပြီးပြည့်စုံ\",\n  \"base_fee\": \"အခြေခံ အခကြေးငွေ\",\n  \"account_reserve\": \"အကောင့် သီးသန့်ငွေ\",\n  \"object_reserve\": \"အရာဝတ္ထု သီးသန့်ငွေ\",\n  \"vote\": \"မဲပေးရန်\",\n  \"no_amendment_in_voting\": \"ယခုအချိန်တွင် ဤကွန်ယက်၌ မဲပေးရန် ပြင်ဆင်ချက် မရှိသေးပါ။\",\n  \"required\": \"လိုအပ်သည်\",\n  \"source\": \"ရင်းမြစ်\",\n  \"destination\": \"ဦးတည်ရာ\",\n  \"claimed\": \"တောင်းဆိုပြီး\",\n  \"remaining\": \"ကျန်ရှိသည်\",\n  \"inbound_total\": \"အဝင် စုစုပေါင်း\",\n  \"outbound_total\": \"အထွက် စုစုပေါင်း\",\n  \"payment_channels\": \"ငွေပေးချေမှု လမ်းကြောင်းများ\",\n  \"available_in\": \"ရရှိနိုင်မည့် အချိန်\",\n  \"channels\": \"လမ်းကြောင်းများ\",\n  \"account_info\": \"အကောင့် အချက်အလက်\",\n  \"reserve\": \"သီးသန့်ငွေ\",\n  \"current_sequence\": \"လက်ရှိ sequence\",\n  \"escrows\": \"escrows\",\n  \"nodes_found\": \"nodes တွေ့ရှိ\",\n  \"unmapped\": \"မြေပုံမပြုရသေး\",\n  \"validators_found\": \"အတည်ပြုသူများ တွေ့ရှိ\",\n  \"pause\": \"ခဏရပ်\",\n  \"resume\": \"ဆက်လက်\",\n  \"flag_ledger\": \"အမှတ်အသား Ledger\",\n  \"ticket\": \"လက်မှတ်\",\n  \"ticket_sequence\": \"လက်မှတ် Sequence\",\n  \"ticket_count\": \"လက်မှတ် အရေအတွက်\",\n  \"ticket_used\": \"ဤငွေလွှဲမှုအတွက် လက်မှတ်တစ်ခု အသုံးပြုခဲ့သည်\",\n  \"token\": \"Token\",\n  \"tokens\": \"Tokens များ\",\n  \"total_issuers\": \"ထုတ်ဝေသူ စုစုပေါင်း\",\n  \"total_tokens\": \"Token စုစုပေါင်း\",\n  \"top_trading_pairs\": \"ထိပ်တန်း ရောင်းဝယ်မှု အတွဲများ\",\n  \"issuer_address\": \"ထုတ်ဝေသူ လိပ်စာ\",\n  \"obligations\": \"တာဝန်ဝတ္တရားများ\",\n  \"settings\": \"ဆက်တင်များ\",\n  \"rank\": \"အဆင့်\",\n  \"market_cap\": \"ဈေးကွက် တန်ဖိုး\",\n  \"volume_24h\": \"၂၄နာရီ ရောင်းဝယ်မှု ပမာဏ\",\n  \"no_tokens_message\": \"Token များ မတွေ့ရှိပါ။\",\n  \"no_pairs_message\": \"ရောင်းဝယ်မှု အတွဲများ မတွေ့ရှိပါ\",\n  \"high\": \"အမြင့်ဆုံး\",\n  \"low\": \"အနိမ့်ဆုံး\",\n  \"rank_message\": \"Token များကို ယုံကြည်မှု လမ်းကြောင်း အရေအတွက်ဖြင့် အဆင့်သတ်မှတ်သည်။\",\n  \"obligations_message\": \"တာဝန်ဝတ္တရားများသည် လိပ်စာများသို့ ထုတ်ပေးထားသော token တစ်ခုချင်းစီ၏ စုစုပေါင်း ပမာဏဖြစ်သည်\",\n  \"issuer\": \"ထုတ်ဝေသူ\",\n  \"pair\": \"အတွဲ\",\n  \"asset_pair\": null,\n  \"offer_range\": \"ကမ်းလှမ်းမှု အပိုင်းအခြား\",\n  \"custom_network\": \"စိတ်ကြိုက် ကွန်ယက်\",\n  \"custom_network_input_help\": \"ကွန်ယက်၏ အချက်အလက်များကို ရယူရန် စိတ်ကြိုက် ကွန်ယက် URL ထည့်သွင်းပါ။\",\n  \"custom_network_input\": \"စိတ်ကြိုက် ကွန်ယက် URL ထည့်သွင်းပါ\",\n  \"custom_networks\": \"စိတ်ကြိုက် ကွန်ယက်များ\",\n  \"no_network_selected\": \"စိတ်ကြိုက် ကွန်ယက် ရွေးချယ်ထားခြင်း မရှိပါ\",\n  \"locking_chain_door\": \"သော့ခတ် ချိန်းတံခါး\",\n  \"locking_chain_issue\": \"သော့ခတ် ချိန်းပြဿနာ\",\n  \"issuing_chain_door\": \"ထုတ်ပေးသော ချိန်းတံခါး\",\n  \"issuing_chain_issue\": \"ထုတ်ပေးသော ချိန်းပြဿနာ\",\n  \"signature_reward\": \"လက်မှတ်ထိုး ဆုကြေး\",\n  \"min_account_create_amount\": \"အကောင့်ဖွင့်ရန် အနည်းဆုံး ပမာဏ\",\n  \"other_chain_source\": \"အခြား ချိန်း ရင်းမြစ်\",\n  \"xchain_claim_id\": \"XChain တောင်းဆိုမှု ID\",\n  \"check_nft_id\": \"သင့် NFT ID ကို စစ်ဆေးပါ\",\n  \"get_nft_state_failed\": \"NFT ကို ဖွင့်၍မရပါ\",\n  \"minted\": \"ထုတ်လုပ်ပြီး\",\n  \"taxon_id\": \"Taxon ID\",\n  \"transfer_fee\": \"လွှဲပြောင်းခ\",\n  \"burnable\": \"ဖျက်ဆီးနိုင်သော\",\n  \"only_xrp\": \"XRP သာ\",\n  \"transferable\": \"လွှဲပြောင်းနိုင်သော\",\n  \"buy_offers\": \"ဝယ်ယူရန် ကမ်းလှမ်းချက်များ\",\n  \"sell_offers\": \"ရောင်းချရန် ကမ်းလှမ်းချက်များ\",\n  \"offer_index\": \"ကမ်းလှမ်းမှု ID\",\n  \"no_sell_offers\": \"ရောင်းချရန် ကမ်းလှမ်းချက်များ မရှိပါ\",\n  \"no_buy_offers\": \"ဝယ်ယူရန် ကမ်းလှမ်းချက်များ မရှိပါ\",\n  \"validator_history.chain\": \"ချိန်း\",\n  \"validator_history.date\": \"ရက်စွဲ (UTC)\",\n  \"validator_history.missed\": \"လွဲချော်\",\n  \"validator_history.score\": \"ရမှတ်\",\n  \"seller\": \"ရောင်းချသူ\",\n  \"buyer\": \"ဝယ်ယူသူ\",\n  \"offerer\": \"ကမ်းလှမ်းသူ\",\n  \"token_taxon\": \"Token Taxon\",\n  \"uri\": \"URI\",\n  \"owner\": \"ပိုင်ရှင်\",\n  \"other_chain_destination\": \"အခြား ချိန်း ဦးတည်ရာ\",\n  \"%_of_total_nodes_validators\": \"Nodes နှင့် အတည်ပြုသူများ စုစုပေါင်း %\",\n  \"version_display\": \"ဗားရှင်း: {{version}}\",\n  \"validator_count\": \"အတည်ပြုသူ အရေအတွက်: {{val_count}}\",\n  \"node_count\": \"Node အရေအတွက်: {{node_count}}\",\n  \"current_stable_version\": \"လက်ရှိ တည်ငြိမ်သော ဗားရှင်း\",\n  \"stable_version\": \"{{stableVersion}}\",\n  \"nftoken_minter\": \"NFT ထုတ်လုပ်သူ\",\n  \"is_burned\": \"ဖျက်ဆီးပြီး\",\n  \"fee_rate\": \"အခကြေးငွေ နှုန်းထား\",\n  \"last_affecting_transaction\": \"နောက်ဆုံး သက်ရောက်မှုရှိသော ငွေလွှဲမှု\",\n  \"Version\": \"ဗားရှင်း\",\n  \"increased_by\": \"တိုးလာသည်\",\n  \"trading_fee\": \"ရောင်းဝယ်မှု အခကြေးငွေ\",\n  \"tvl\": \"TVL\",\n  \"account_address\": \"အကောင့် လိပ်စာ\",\n  \"asset1\": \"ပိုင်ဆိုင်မှု ၁\",\n  \"asset2\": \"ပိုင်ဆိုင်မှု ၂\",\n  \"asset1out\": \"ပိုင်ဆိုင်မှု ၁ ထွက်\",\n  \"asset2out\": \"ပိုင်ဆိုင်မှု ၂ ထွက်\",\n  \"asset1in\": \"ပိုင်ဆိုင်မှု ၁ ဝင်\",\n  \"asset2in\": \"ပိုင်ဆိုင်မှု ၂ ဝင်\",\n  \"effective_price\": \"အမှန်တကယ် စျေးနှုန်း\",\n  \"amm_account_id\": \"AMM အကောင့် ID\",\n  \"lp_tokens\": \"LP Tokens\",\n  \"min_slot_price\": \"အနိမ့်ဆုံး နေရာ စျေးနှုန်း\",\n  \"max_slot_price\": \"အမြင့်ဆုံး နေရာ စျေးနှုန်း\",\n  \"auth_accounts\": \"ခွင့်ပြုထားသော အကောင့်များ\",\n  \"network_cannot_be_crawled\": \"ဤကွန်ယက်ကို ရှာဖွေ၍မရပါ\",\n  \"check_crawl_existed\": \"ကျေးဇူးပြု၍ /crawl သို့မဟုတ် vl set ရရှိနိုင်ကြောင်း သေချာစေရန် အော်ပရေတာကို ဆက်သွယ်ပါ။\",\n  \"peer_crawled_context\": \"နောက်ထပ် အချက်အလက်များအတွက် https://xrpl.org/peer-crawler.html ကို ကြည့်ပါ\",\n  \"xchainbridge\": \"XChainBridge\",\n  \"xchain_account_claim_count\": \"XChain အကောင့် တောင်းဆိုမှု အရေအတွက်\",\n  \"xchain_account_create_count\": \"XChain အကောင့် ဖန်တီးမှု အရေအတွက်\",\n  \"min_signer_quorum\": \"အနည်းဆုံး အလေးချိန် <0>{{quorum}}</0> လိုအပ်သည်\",\n  \"holder\": \"ကိုင်ဆောင်သူ\",\n  \"action_from\": \"<0><0>{{action}}</0></0> <1><0>{{amount}}</0></1> မှ <3><0>{{destination}}</0></3>\",\n  \"action_from_and\": null,\n  \"claws_back\": \"ပြန်လည်ရယူ\",\n  \"claws_back_from\": \"<source/> မှ <destination/> ထံမှ ပြန်လည်ရယူ\",\n  \"instruct_to_claw\": \"အများဆုံး ပြန်လည်ရယူနိုင်သော ပမာဏမှာ <amount/>\",\n  \"hook\": \"Hook\",\n  \"hooks\": \"Hooks\",\n  \"hook_emitted\": \"ဤငွေလွှဲမှုကို Hook မှ ထုတ်လွှတ်ခဲ့သည်\",\n  \"emit_details\": \"ထုတ်လွှတ်မှု အသေးစိတ်\",\n  \"hook_parameters\": \"Hook Parameters\",\n  \"hook_executions\": \"Hook အကောင်အထည်ဖော်မှုများ\",\n  \"emit_generation\": \"ထုတ်လုပ်ထားသော ငွေလွှဲမှုများတွင် နံပါတ် <0>{{emit}}</0>\",\n  \"emit_hook_hash\": \"Hook <0>{{hash}}</0> မှ ထုတ်လွှတ်သည်\",\n  \"emit_parent\": \"Hook <0>{{hash}}</0> မှ စတင်သော hook မှ ထုတ်လွှတ်သည်\",\n  \"emit_callback\": \"ထုတ်လွှတ်မှု callback မှာ <0>{{callback}}<0>\",\n  \"hook_exec_hash\": \"Hook <0>{{hash}}</0> ကို စတင်သည်\",\n  \"hook_exec_account\": \"အကောင့် <0>{{account}}</0> ပေါ်တွင်\",\n  \"hook_exec_return\": \"ကုဒ် <0>{{code}}</0> နှင့် စာသား \\\"<1>{{string}}</1>\\\" ကို ပြန်လည်ပေးပို့သည်\",\n  \"hook_exec_emit_count\": \"ငွေလွှဲမှု <0>{{count}}</0> ခု ထုတ်လွှတ်သည်\",\n  \"hash\": \"Hash\",\n  \"grant\": \"ခွင့်ပြုချက်\",\n  \"namespace\": \"Namespace\",\n  \"api_version\": \"API ဗားရှင်း\",\n  \"triggered_on\": \"စတင်သည့်အချိန်\",\n  \"name\": \"အမည်\",\n  \"introduced_in\": \"မိတ်ဆက်သည့်အချိန်\",\n  \"yeas\": \"ထောက်ခံမဲများ\",\n  \"nays\": \"ကန့်ကွက်မဲများ\",\n  \"eta\": \"ခန့်မှန်းချိန်\",\n  \"amendment_summary\": \"ပြင်ဆင်ချက် အကျဉ်းချုပ်\",\n  \"not\": \"မဟုတ်\",\n  \"enable_tx\": \"ငွေလွှဲမှု ဖွင့်ရန်\",\n  \"all\": \"အားလုံး\",\n  \"yeas_count\": \"ထောက်ခံမဲ အရေအတွက်: {{yeas_count}}\",\n  \"nays_count\": \"ကန့်ကွက်မဲ အရေအတွက်: {{nays_count}}\",\n  \"yeas_percent\": \"ထောက်ခံမဲ ရာခိုင်နှုန်း: {{yeas_percent}}%\",\n  \"nays_percent\": \"ကန့်ကွက်မဲ ရာခိုင်နှုန်း: {{nays_percent}}%\",\n  \"%_of_validators\": \"အတည်ပြုသူများ၏ %\",\n  \"amendment_not_found\": \"ပြင်ဆင်ချက် မတွေ့ရှိပါ\",\n  \"check_amendment_key\": \"ကျေးဇူးပြု၍ သင့် ပြင်ဆင်ချက် key ကို စစ်ဆေးပါ\",\n  \"did_document\": \"DID စာရွက်စာတမ်း\",\n  \"attestation\": \"သက်သေခံချက်\",\n  \"note\": \"မှတ်ချက်\",\n  \"indicate_unl\": \"UNL ပေါ်ရှိ အတည်ပြုသူတစ်ဦးကို ညွှန်ပြသည်\",\n  \"transaction_tokens_involved\": \"<Currency/> နှင့် <Currency2/>\",\n  \"transaction_tokens_swapped\": \"<Currency/> မှ <Currency2/> သို့\",\n  \"oracle_document_id\": \"Oracle စာရွက်စာတမ်း ID\",\n  \"provider\": \"ပံ့ပိုးသူ\",\n  \"last_update_time\": \"နောက်ဆုံး အပ်ဒိတ် အချိန်\",\n  \"asset_class\": \"ပိုင်ဆိုင်မှု အမျိုးအစား\",\n  \"trading_pairs\": \"ရောင်းဝယ်မှု အတွဲများ\",\n  \"deleted\": \"ဖျက်ထားသည်\",\n  \"holders_count\": \"ကိုင်ဆောင်သူများ: {{holders}}\",\n  \"trustlines\": \"ယုံကြည်မှု လမ်းကြောင်းများ: {{trustlines}}\",\n  \"website\": \"ဝဘ်ဆိုဒ်\",\n  \"mpt_issuance_id\": \"MPT ထုတ်ဝေမှု ID\",\n  \"asset_scale\": \"ပိုင်ဆိုင်မှု အတိုင်းအတာ\",\n  \"metadata\": \"Metadata\",\n  \"max_amount\": \"အများဆုံး ပမာဏ\",\n  \"mpt_holder\": \"MPT ကိုင်ဆောင်သူ\",\n  \"check_mpt_id\": \"ကျေးဇူးပြု၍ သင့် MPT ထုတ်ဝေမှု ID ကို စစ်ဆေးပါ\",\n  \"outstanding_amount\": \"ထုတ်ပေးထားသော ပမာဏ\",\n  \"locked\": \"သော့ခတ်ထား\",\n  \"can_lock\": \"သော့ခတ်နိုင်\",\n  \"require_auth\": \"ခွင့်ပြုချက် လိုအပ်\",\n  \"can_escrow\": \"Escrow လုပ်နိုင်\",\n  \"can_trade\": \"ရောင်းဝယ်နိုင်\",\n  \"can_transfer\": \"လွှဲပြောင်းနိုင်\",\n  \"can_clawback\": \"ပြန်လည်ရယူနိုင်\",\n  \"enable_amendment_name\": \"ပြင်ဆင်ချက် အမည်\",\n  \"amendment_status\": \"ပြင်ဆင်ချက် အခြေအနေ\",\n  \"expected_date\": \"မျှော်မှန်းရက်စွဲ\",\n  \"base\": null,\n  \"credential_type\": null,\n  \"credential_issuer\": null,\n  \"subject\": null,\n  \"expiration\": null,\n  \"domain_id\": null,\n  \"accepted_credentials\": null,\n  \"credential_ids\": null,\n  \"data\": null,\n  \"finish_function\": null,\n  \"quorum_description\": null,\n  \"avg_fee_description\": null,\n  \"ledger_interval_description\": null,\n  \"txn_ledger_description\": null,\n  \"txn_sec_description\": null,\n  \"load_fee_description\": null,\n  \"nUnl_description\": null,\n  \"computation_allowance\": null,\n  \"gas\": null,\n  \"delegate\": null,\n  \"permissions\": null,\n  \"pertaining_to_the_Permissioned_Domain\": null,\n  \"tx_delegated_to\": null,\n  \"account_delegates_to\": null,\n  \"delegate_to\": null,\n  \"volume\": null,\n  \"holders\": null,\n  \"trades\": null,\n  \"no_of_tokens\": null,\n  \"volume_24h_total\": null,\n  \"volume_24h_total_description\": null,\n  \"market_cap_metric_description\": null,\n  \"market_cap_description\": null,\n  \"24h_description\": null,\n  \"volume_description\": null,\n  \"trades_description\": null,\n  \"tvl_description\": null,\n  \"stablecoin_description\": null,\n  \"stablecoin\": null,\n  \"wrapped\": null,\n  \"tokens_footnote\": null,\n  \"xrplmeta_guidelines\": null,\n  \"inner_transaction\": null,\n  \"batch_table_detail_count\": null,\n  \"batch_table_detail_list\": null,\n  \"batch_description\": null,\n  \"batch\": null,\n  \"successful\": null,\n  \"failed\": null,\n  \"not-validated\": null,\n  \"asset\": null,\n  \"assets_maximum\": null,\n  \"mptoken_metadata\": null,\n  \"withdrawal_policy\": null,\n  \"account_creates_vault\": null,\n  \"vault_id\": null,\n  \"single_asset_vault\": null,\n  \"loan_broker_id\": null,\n  \"loan_id\": null,\n  \"management_fee_rate\": null,\n  \"debt_maximum\": null,\n  \"cover_rate_minimum\": null,\n  \"cover_rate_liquidation\": null,\n  \"counterparty\": null,\n  \"principal_requested\": null,\n  \"payment_total\": null,\n  \"payment_interval\": null,\n  \"grace_period\": null,\n  \"loan_origination_fee\": null,\n  \"loan_service_fee\": null,\n  \"late_payment_fee\": null,\n  \"close_payment_fee\": null,\n  \"full_payment_fee\": null,\n  \"overpayment_fee\": null,\n  \"interest_rate\": null,\n  \"late_interest_rate\": null,\n  \"close_interest_rate\": null,\n  \"overpayment_interest_rate\": null,\n  \"set_vault_data\": null,\n  \"set_vault_assets_maximum\": null,\n  \"set_vault_domain_id\": null,\n  \"account_deposits_into_vault\": null,\n  \"account_withdraws_from_vault\": null,\n  \"account_clawbacks_from_vault\": null,\n  \"account_clawbacks_from_vault_amount_omitted\": null,\n  \"account_deletes_vault\": null,\n  \"vault_create_table_detail\": null,\n  \"withdraws\": null,\n  \"deletes\": null,\n  \"vault_delete_table_detail\": null,\n  \"account_flag_title_lsf_global_freeze\": null,\n  \"account_flag_title_lsf_disable_master\": null,\n  \"account_flag_title_lsf_default_ripple\": null,\n  \"account_flag_title_lsf_allow_trustline_clawback\": null,\n  \"account_flag_title_lsf_allow_trustline_locking\": null,\n  \"account_flag_title_lsf_require_destination_tag\": null,\n  \"account_flag_title_lsf_no_freeze\": null,\n  \"account_flag_title_lsf_require_auth\": null,\n  \"account_flag_title_lsf_disallow_xrp\": null,\n  \"account_flag_title_lsf_disallow_incoming_trustline\": null,\n  \"account_flag_title_lsf_disallow_incoming_pay_chan\": null,\n  \"account_flag_title_lsf_disallow_incoming_nft_token_offer\": null,\n  \"account_flag_title_asf_authorized_nft_token_minter\": null,\n  \"account_flag_title_lsf_disallow_incoming_check\": null,\n  \"account_flag_title_lsf_deposit_auth\": null,\n  \"account_flag_title_asf_account_txn_id\": null,\n  \"account_flag_description_lsf_global_freeze\": null,\n  \"account_flag_description_lsf_disable_master\": null,\n  \"account_flag_description_lsf_default_ripple\": null,\n  \"account_flag_description_lsf_allow_trustline_clawback\": null,\n  \"account_flag_description_lsf_allow_trustline_locking\": null,\n  \"account_flag_description_lsf_require_destination_tag\": null,\n  \"account_flag_description_lsf_no_freeze\": null,\n  \"account_flag_description_lsf_require_auth\": null,\n  \"account_flag_description_lsf_disallow_xrp\": null,\n  \"account_flag_description_lsf_disallow_incoming_trustline\": null,\n  \"account_flag_description_lsf_disallow_incoming_pay_chan\": null,\n  \"account_flag_description_lsf_disallow_incoming_nft_token_offer\": null,\n  \"account_flag_description_asf_authorized_nft_token_minter\": null,\n  \"account_flag_description_lsf_disallow_incoming_check\": null,\n  \"account_flag_description_lsf_deposit_auth\": null,\n  \"account_flag_description_asf_account_txn_id\": null,\n  \"account_page_address\": null,\n  \"account_page_address_tag\": null,\n  \"account_page_classic_address\": null,\n  \"account_page_deleted_account_label\": null,\n  \"account_page_deleted_account_warning\": null,\n  \"account_page_extended_address\": null,\n  \"account_page_domain\": null,\n  \"account_page_reserve_balance\": null,\n  \"account_page_xrp_balance\": null,\n  \"account_page_xrp_balance_in_usd\": null,\n  \"account_page_account_properties\": null,\n  \"account_page_flags\": null,\n  \"account_page_flag_status_enabled\": null,\n  \"account_page_flag_status_disabled\": null,\n  \"account_page_signers\": null,\n  \"account_page_signer_weight\": null,\n  \"account_page_details\": null,\n  \"account_page_current_sequence\": null,\n  \"account_page_ticket_count\": null,\n  \"account_page_email_hash\": null,\n  \"account_page_payment_channels\": null,\n  \"account_page_payment_channels_text\": null,\n  \"account_page_nft_minter\": null,\n  \"account_page_asset_held_title\": null,\n  \"account_page_asset_issued_title\": null,\n  \"account_page_asset_tab_iou\": null,\n  \"account_page_asset_tab_lptoken\": null,\n  \"account_page_asset_tab_mpt\": null,\n  \"account_page_asset_tab_nft\": null,\n  \"account_page_asset_table_column_amm_instance\": null,\n  \"account_page_asset_table_column_amm_pair\": null,\n  \"account_page_asset_table_column_asset_class\": null,\n  \"account_page_asset_table_column_balance\": null,\n  \"account_page_asset_table_column_balance_usd\": null,\n  \"account_page_asset_table_column_circulating_supply\": null,\n  \"account_page_asset_table_column_currency_code\": null,\n  \"account_page_asset_table_column_frozen\": null,\n  \"account_page_asset_table_column_highest_bid\": null,\n  \"account_page_asset_table_column_holders\": null,\n  \"account_page_asset_table_column_issuer\": null,\n  \"account_page_asset_table_column_locked\": null,\n  \"account_page_asset_table_column_lowest_ask\": null,\n  \"account_page_asset_table_column_price_usd\": null,\n  \"account_page_asset_table_column_share\": null,\n  \"account_page_asset_table_column_supply\": null,\n  \"account_page_asset_table_column_ticker\": null,\n  \"account_page_asset_table_column_token_id\": null,\n  \"account_page_asset_table_column_transfer_fee\": null,\n  \"account_page_asset_table_column_trustlines\": null,\n  \"account_page_asset_table_column_url\": null,\n  \"account_page_asset_table_mpt_locked_global\": null,\n  \"account_page_asset_table_mpt_locked_individual\": null,\n  \"account_page_asset_table_no_iou\": null,\n  \"account_page_asset_table_no_lptoken\": null,\n  \"account_page_asset_table_no_mpt\": null,\n  \"account_page_asset_table_no_nft\": null,\n  \"tx_hash\": null,\n  \"timestamp\": null,\n  \"amount_in\": null,\n  \"amount_out\": null,\n  \"rate\": null,\n  \"refresh_data\": null,\n  \"token_page.general_overview\": null,\n  \"token_page.market_data\": null,\n  \"token_page.all_tx\": null,\n  \"token_page.dex_tx\": null,\n  \"token_page.transfers_tx\": null,\n  \"token_page.holders_table\": null,\n  \"token_page.issuer\": null,\n  \"token_page.price\": null,\n  \"token_page.holders\": null,\n  \"token_page.supply\": null,\n  \"token_page.market_cap\": null,\n  \"token_page.volume_24h\": null,\n  \"token_page.trades_24h\": null,\n  \"token_page.amm_tvl\": null,\n  \"token_page.transfer_fee\": null,\n  \"token_page.holders_rank\": null,\n  \"token_page.holders_num_tokens\": null,\n  \"token_page.holders_percent_supply\": null,\n  \"token_page.holders_no_holders\": null,\n  \"token_page.holders_usd_value\": null,\n  \"token_page.transfers_no_transfers\": null,\n  \"token_page.circulating_supply\": null,\n  \"token_page.dex_type\": null,\n  \"token_page.dex_amount_in_tooltip\": null,\n  \"token_page.dex_amount_out_tooltip\": null,\n  \"token_page.dex_rate_tooltip\": null,\n  \"token_page.dex_no_trades\": null,\n  \"token_page.token_label\": null,\n  \"token_page.category_text\": null,\n  \"token_type.iou\": null,\n  \"token_type.mpt\": null,\n  \"iou_page.trustlines\": null,\n  \"mpt_page.metadata_warning\": null,\n  \"data_available_from_notice\": null,\n  \"copied\": null,\n  \"click_to_copy\": null,\n  \"withdraw\": null,\n  \"delete\": null,\n  \"rates\": null,\n  \"loan_broker_rates_detail\": null,\n  \"loan_rates_detail\": null,\n  \"loan_fees_detail\": null,\n  \"loan_terms_detail\": null,\n  \"no_limit\": null,\n  \"first_loss_capital\": null,\n  \"vault\": null,\n  \"vault_not_found\": null,\n  \"invalid_vault_id\": null,\n  \"check_vault_id\": null,\n  \"get_vault_failed\": null,\n  \"private_vault\": null,\n  \"perm_domain_id\": null,\n  \"total_value_locked\": null,\n  \"shares\": null,\n  \"assets_available\": null,\n  \"unrealized_loss\": null,\n  \"other_data\": null,\n  \"max_total_supply\": null,\n  \"available_to_borrow\": null,\n  \"not_available\": null,\n  \"first_come_first_served\": null,\n  \"loans\": null,\n  \"loan_broker\": null,\n  \"total_debt\": null,\n  \"maximum_debt\": null,\n  \"management_fee\": null,\n  \"borrower\": null,\n  \"amount_requested\": null,\n  \"outstanding_balance\": null,\n  \"loan_status_current\": null,\n  \"loan_status_default\": null,\n  \"all_loans\": null,\n  \"loan_status_impaired\": null,\n  \"loan_status_paid_off\": null,\n  \"next_due_date\": null,\n  \"origination_date\": null,\n  \"frequency\": null,\n  \"installments\": null,\n  \"prepayment_fee\": null,\n  \"no_loans_message\": null,\n  \"loan_default_detected\": null,\n  \"no_loan_brokers_message\": null,\n  \"depositors_fetch_error\": null,\n  \"no_depositors_message\": null,\n  \"depositors\": null,\n  \"percent_of_supply\": null,\n  \"value\": null,\n  \"currency_toggle_help\": null,\n  \"currency_toggle_description\": null,\n  \"currency_toggle_loading\": null,\n  \"currency_toggle_loading_description\": null,\n  \"currency_toggle_unavailable\": null,\n  \"currency_toggle_unavailable_description\": null,\n  \"vaults\": null,\n  \"vaults_tvl\": null,\n  \"vaults_tvl_description\": null,\n  \"vaults_outstanding_loans\": null,\n  \"vaults_outstanding_loans_description\": null,\n  \"vaults_loans_originated\": null,\n  \"vaults_loans_originated_description\": null,\n  \"vaults_avg_interest_rate\": null,\n  \"vaults_avg_interest_rate_description\": null,\n  \"vaults_num_vaults\": null,\n  \"vaults_num_vaults_description\": null,\n  \"vaults_utilization_ratio\": null,\n  \"vaults_utilization_ratio_description\": null,\n  \"vaults_filter_all_assets\": null,\n  \"vaults_filter_stablecoins\": null,\n  \"vaults_search_placeholder\": null,\n  \"vaults_table_vault_id\": null,\n  \"vaults_table_asset\": null,\n  \"vaults_table_tvl\": null,\n  \"vaults_table_outstanding_loans\": null,\n  \"vaults_table_utilization_ratio\": null,\n  \"vaults_table_avg_interest_rate\": null,\n  \"vaults_table_website\": null,\n  \"vaults_no_results\": null,\n  \"vaults_disclaimer\": null,\n  \"amm_pool\": null,\n  \"basic_info\": null,\n  \"market_data\": null,\n  \"auction\": null,\n  \"created_on\": null,\n  \"volume_24h_tooltip\": null,\n  \"fees_24h\": null,\n  \"fees_24h_tooltip\": null,\n  \"apr_24h\": null,\n  \"apr_24h_tooltip\": null,\n  \"current_holder\": null,\n  \"discounted_fee\": null,\n  \"price_paid\": null,\n  \"replacement_cost\": null,\n  \"all_transactions\": null,\n  \"dex_trades\": null,\n  \"deposits\": null,\n  \"withdrawals\": null,\n  \"lp_tokens_received\": null,\n  \"lp_tokens_redeemed\": null,\n  \"tvl_and_volume\": null,\n  \"no_deposits\": null,\n  \"no_withdrawals\": null,\n  \"liquidity_providers\": null,\n  \"balance\": null,\n  \"lp_token_currency_code\": null,\n  \"asset_2\": null,\n  \"usd_value\": null,\n  \"amm_pool_deleted_label\": null,\n  \"amm_pool_deleted_text\": null,\n  \"amms\": null,\n  \"top_1000_amms\": null,\n  \"general_info\": null,\n  \"number_of_amms\": null,\n  \"number_of_lps\": null,\n  \"number_of_amms_tooltip\": null,\n  \"number_of_lps_tooltip\": null,\n  \"search_amms\": null,\n  \"tvl_tooltip\": null,\n  \"volume_24h_all_tooltip\": null\n}\n"
  },
  {
    "path": "public/manifest.json",
    "content": "{\n  \"short_name\": \"XRPL Explorer\",\n  \"name\": \"XRPL Explorer\",\n  \"icons\": [\n    {\n      \"src\": \"favicon.ico\",\n      \"sizes\": \"64x64 32x32 24x24 16x16\",\n      \"type\": \"image/x-icon\"\n    },\n    {\n      \"src\": \"android-icon.png\",\n      \"sizes\": \"192x192\",\n      \"type\": \"image/png\",\n      \"density\": 4.0\n    }\n  ],\n  \"start_url\": \"./index.html\",\n  \"display\": \"standalone\",\n  \"theme_color\": \"#000000\",\n  \"background_color\": \"#ffffff\"\n}\n"
  },
  {
    "path": "public/robots.txt",
    "content": "User-agent: *\nAllow: /$\nAllow: /network\nAllow: /validators\nDisallow: /*\n"
  },
  {
    "path": "server/index.js",
    "content": "require('dotenv').config()\n\nconst path = require('path')\nconst express = require('express')\nconst bodyParser = require('body-parser')\nconst compression = require('compression')\nconst routes = require('./routes/v1')\n\nconst log = require('./lib/logger')({ name: 'server' })\n\nconst PORT = process.env.PORT || 5001\nconst ADDR = process.env.ADDR || 'localhost'\nconst app = express()\nconst cacheBustRegExp = /\\.[0-9a-f]{20}\\./\nconst files = express.static(path.join(__dirname, '/../build'), {\n  etag: true, // Just being explicit about the default.\n  lastModified: true, // Just being explicit about the default.\n  setHeaders: (res, filePath) => {\n    if (filePath.endsWith('.html')) {\n      // All the project's HTML files end in .html\n      res.setHeader('Cache-Control', 'no-cache')\n    } else if (cacheBustRegExp.test(filePath)) {\n      // If the RegExp matched, then we have a versioned URL.\n      res.setHeader('Cache-Control', 'max-age=31536000')\n    }\n  },\n})\n\napp.use(compression())\napp.use(bodyParser.json())\napp.use(files)\napp.use('/api/v1', routes)\n\nif (process.env.NODE_ENV === 'production') {\n  app.get('*', (_req, res) => {\n    res.sendFile(path.join(__dirname, '/../build/index.html'))\n  })\n}\n\napp.use('*', (req, res) => {\n  log.error('not found:', req.originalUrl)\n  res.status(404).send({ error: 'route not found' })\n})\n\napp.listen(PORT, ADDR)\nlog.info(`server listening on ${ADDR}:${PORT}`)\n"
  },
  {
    "path": "server/lib/logger.js",
    "content": "const bunyan = require('bunyan')\n\nmodule.exports = (options) => {\n  const logger = bunyan.createLogger(options)\n\n  return {\n    info: (...args) => {\n      logger.info(...args)\n    },\n    warn: (...args) => {\n      logger.warn(...args)\n    },\n    error: (...args) => {\n      logger.error(...args)\n    },\n    debug: (...args) => {\n      logger.debug(...args)\n    },\n  }\n}\n"
  },
  {
    "path": "server/lib/rippled.js",
    "content": "const axios = require('axios')\nconst { XrplClient } = require('xrpl-client')\nconst log = require('./logger')({ name: 'rippled' })\nconst utils = require('./utils')\nconst streams = require('./streams')\n\nconst RIPPLEDS = []\nprocess.env.VITE_RIPPLED_HOST?.split(',').forEach((host) => {\n  if (host?.includes(':')) {\n    RIPPLEDS.push(`wss://${host}`)\n  } else if (process.env.VITE_RIPPLED_WS_PORT) {\n    RIPPLEDS.push(`wss://${host}:${process.env.VITE_RIPPLED_WS_PORT}`)\n  } else {\n    RIPPLEDS.push(`wss://${host}`)\n  }\n})\n\nconst RIPPLED_CLIENT = new XrplClient(RIPPLEDS, { tryAllNodes: true })\n// If there is a separate peer to peer server for admin requests, use it. Otherwise use the default url for everything.\nconst HAS_P2P_SOCKET =\n  process.env.VITE_P2P_RIPPLED_HOST != null &&\n  process.env.VITE_P2P_RIPPLED_HOST !== ''\nconst P2P_RIPPLED_CLIENT = HAS_P2P_SOCKET\n  ? new XrplClient([\n      `wss://${process.env.VITE_P2P_RIPPLED_HOST}:${process.env.VITE_RIPPLED_WS_PORT}`,\n    ])\n  : undefined\n\nconst P2P_URL_BASE = process.env.VITE_P2P_RIPPLED_HOST\n  ? process.env.VITE_P2P_RIPPLED_HOST\n  : process.env.VITE_RIPPLED_HOST\nconst URL_HEALTH = `https://${P2P_URL_BASE}:${process.env.VITE_RIPPLED_PEER_PORT}/health`\n\nRIPPLED_CLIENT.on('ledger', (data) => {\n  log.info(`Received ${data?.type} message`)\n  if (data.type === 'ledgerClosed') {\n    streams.handleLedger(data)\n  }\n})\n\nsetInterval(() => {\n  log.info('Rippled client:', {\n    state: RIPPLED_CLIENT.getState?.() || 'unknown',\n  })\n}, 60_000) // Log rippled client state every 60 seconds\n\nconst executeQuery = async (rippledSocket, params) =>\n  rippledSocket.send(params).catch((error) => {\n    const message =\n      error.response && error.response.error_message\n        ? error.response.error_message\n        : error.toString()\n    const code =\n      error.response && error.response.status ? error.response.status : 500\n    throw new Error(`URL: ${rippledSocket.endpoint} - ${message}`, code)\n  })\n\n// generic RPC query\nfunction query(...options) {\n  return executeQuery(RIPPLED_CLIENT, ...options)\n}\n\nfunction queryP2P(...options) {\n  return executeQuery(P2P_RIPPLED_CLIENT ?? RIPPLED_CLIENT, ...options)\n}\n\n// get account info\nmodule.exports.getAccountInfo = (account, ledgerIndex = 'validated') =>\n  query({\n    command: 'account_info',\n    account,\n    ledger_index: ledgerIndex,\n    signer_lists: true,\n  }).then((resp) => {\n    if (resp.error === 'actNotFound') {\n      throw new utils.Error('account not found', 404)\n    }\n\n    if (resp.error_message) {\n      throw new utils.Error(resp.error_message, 500)\n    }\n\n    return Object.assign(resp.account_data, {\n      ledger_index: resp.ledger_index,\n    })\n  })\n\n// get Token balance summary\nmodule.exports.getBalances = (account, ledgerIndex = 'validated') =>\n  queryP2P({\n    command: 'gateway_balances',\n    account,\n    ledger_index: ledgerIndex,\n  }).then((resp) => {\n    if (resp.error === 'actNotFound') {\n      throw new utils.Error('account not found', 404)\n    }\n\n    if (resp.error_message) {\n      throw new utils.Error(resp.error_message, 500)\n    }\n\n    return resp\n  })\n\nmodule.exports.getOffers = (\n  currencyCode,\n  issuerAddress,\n  pairCurrencyCode,\n  pairIssuerAddress,\n) =>\n  query({\n    command: 'book_offers',\n    taker_gets: {\n      currency: `${currencyCode.toUpperCase()}`,\n      issuer:\n        currencyCode.toUpperCase() === 'XRP' ? undefined : `${issuerAddress}`,\n    },\n    taker_pays: {\n      currency: `${pairCurrencyCode.toUpperCase()}`,\n      issuer:\n        pairCurrencyCode.toUpperCase() === 'XRP'\n          ? undefined\n          : `${pairIssuerAddress}`,\n    },\n  }).then((resp) => {\n    if (resp.error !== undefined || resp.error_message !== undefined) {\n      throw new utils.Error(resp.error_message || resp.error, 500)\n    }\n\n    return resp\n  })\n\nmodule.exports.getHealth = async () =>\n  axios.get(URL_HEALTH).catch((error) => {\n    if (error.response) {\n      throw new utils.Error(error.response.data, error.response.status)\n    } else if (error.request) {\n      throw new utils.Error('rippled unreachable', 500)\n    } else {\n      throw new utils.Error('rippled unreachable', 500)\n    }\n  })\n\nmodule.exports.getLedger = (parameters) => {\n  const request = {\n    command: 'ledger',\n    ...parameters,\n    transactions: true,\n    expand: true,\n  }\n\n  return query(request).then((resp) => {\n    if (resp.error_message === 'ledgerNotFound') {\n      throw new utils.Error('ledger not found', 404)\n    }\n\n    if (resp.error_message === 'ledgerIndexMalformed') {\n      throw new utils.Error('invalid ledger index/hash', 400)\n    }\n\n    if (resp.error_message) {\n      throw new utils.Error(resp.error_message, 500)\n    }\n\n    if (!resp.validated) {\n      throw new utils.Error('ledger not validated', 404)\n    }\n    return resp.ledger\n  })\n}\n\n// get AMM info by AMM account ID\nmodule.exports.getAMMInfo = (ammAccountId) =>\n  query({\n    command: 'amm_info',\n    amm_account: ammAccountId,\n    ledger_index: 'validated',\n  }).then((resp) => {\n    if (resp.error_message) {\n      throw new utils.Error(resp.error_message, 500)\n    }\n    return resp\n  })\n"
  },
  {
    "path": "server/lib/streams.js",
    "content": "const rippled = require('./rippled')\nconst utils = require('./utils')\nconst log = require('./logger')({ name: 'streams' })\n\nconst PURGE_INTERVAL = 10 * 1000\nconst MAX_AGE = 5 * 60 * 1000\nconst ledgers = {}\n\nconst currentMetric = {\n  base_fee: undefined,\n  txn_sec: undefined,\n  txn_ledger: undefined,\n  ledger_interval: undefined,\n  avg_fee: undefined,\n}\n\nmodule.exports.getCurrentMetrics = () => currentMetric\n\n// add the ledger to the cache\nconst addLedger = (data) => {\n  const { ledger_index: ledgerIndex } = data\n  if (!ledgers[ledgerIndex]) {\n    ledgers[ledgerIndex] = {\n      ledger_index: Number(ledgerIndex),\n      seen: Date.now(),\n      ledger_hash: data.ledger_hash,\n      txn_count: Number(data.txn_count),\n    }\n  }\n\n  return ledgers[ledgerIndex]\n}\n\nconst getTotalFees = (ledger) => {\n  let totalFees = 0\n\n  ledger.transactions.forEach((tx) => {\n    totalFees += Number(tx.Fee)\n  })\n  return totalFees / utils.XRP_BASE\n}\n\n// fetch full ledger\nconst fetchLedger = (ledger, attempts = 0) => {\n  rippled\n    .getLedger({ ledger_hash: ledger.ledger_hash })\n    .then(getTotalFees)\n    .then((totalFees) => {\n      Object.assign(ledger, { total_fees: totalFees })\n    })\n    .catch((error) => {\n      log.error(error.toString())\n      if (error.code === 404 && attempts < 5) {\n        log.info(\n          `retry ledger ${ledger.ledger_index} (attempt:${attempts + 1})`,\n        )\n        setTimeout(fetchLedger, 500, ledger, attempts + 1)\n      }\n    })\n}\n\n// convert to array and sort\nconst organizeChain = () =>\n  Object.entries(ledgers)\n    .map((d) => d[1])\n    .sort((a, b) => a.ledger_index - b.ledger_index)\n\n// purge old data\nconst purge = () => {\n  const now = Date.now()\n\n  Object.keys(ledgers).forEach((key) => {\n    if (now - ledgers[key].seen > MAX_AGE) {\n      delete ledgers[key]\n    }\n  })\n}\n\n// update rolling metrics\nconst updateMetrics = (baseFee) => {\n  const chain = organizeChain().slice(-50)\n\n  let time = 0\n  let fees = 0\n  let timeCount = 0\n  let txCount = 0\n  let ledgerCount = 0\n\n  chain.forEach((d, i) => {\n    const next = chain[i + 1]\n    if (next && next.seen && d.seen) {\n      time += next.seen - d.seen\n      timeCount += 1\n    }\n\n    if (d.total_fees) {\n      fees += d.total_fees\n      txCount += d.txn_count ?? 0\n    }\n    ledgerCount += 1\n  })\n  currentMetric.base_fee = Number(baseFee.toPrecision(4)).toString()\n  currentMetric.txn_sec = time\n    ? ((txCount / time) * 1000).toFixed(2)\n    : undefined\n  currentMetric.txn_ledger = ledgerCount\n    ? (txCount / ledgerCount).toFixed(2)\n    : undefined\n  currentMetric.ledger_interval = timeCount\n    ? (time / timeCount / 1000).toFixed(3)\n    : undefined\n  currentMetric.avg_fee = txCount ? (fees / txCount).toPrecision(4) : undefined\n}\n\n// handle ledger messages\nmodule.exports.handleLedger = (data) => {\n  const ledger = addLedger(data)\n\n  log.info('new ledger', data.ledger_index)\n  ledger.close_time = (data.ledger_time + utils.EPOCH_OFFSET) * 1000\n\n  updateMetrics(data.fee_base / utils.XRP_BASE)\n  fetchLedger(ledger)\n}\n\nsetInterval(purge, PURGE_INTERVAL)\n"
  },
  {
    "path": "server/lib/utils.js",
    "content": "const EPOCH_OFFSET = 946684800\nmodule.exports.EPOCH_OFFSET = EPOCH_OFFSET\nmodule.exports.XRP_BASE = 1000000\n\nfunction CustomError(message, code) {\n  Error.captureStackTrace(this, this.constructor)\n  this.name = this.constructor.name\n  this.message = message\n  this.code = code\n}\n\nrequire('util').inherits(CustomError, Error)\n\nmodule.exports.Error = CustomError\n"
  },
  {
    "path": "server/routes/v1/amms.js",
    "content": "const axios = require('axios')\nconst log = require('../../lib/logger')({ name: 'amms' })\nconst rippled = require('../../lib/rippled')\n\nconst REFETCH_INTERVAL = 10 * 60 * 1000 // 10 minutes\nconst LOS_TOKEN_API_BATCH_SIZE = 100\nconst AMM_INFO_CONCURRENCY = 2 // Max concurrent amm_info RPC calls\nconst AMM_INFO_DELAY_MS = 200 // Delay between each amm_info RPC call per worker\nconst cachedAMMsList = { results: [], last_updated: null }\nconst cachedAggregatedStats = { data: null, last_updated: null }\nconst cachedHistoricalTrends = new Map() // key: `${amm_account_id}:${time_range}` -> { data, last_updated }\n\nasync function fetchAMMs() {\n  const url = `${process.env.VITE_LOS_URL}/amms`\n  log.info(`Fetching AMMs from: ${url}`)\n\n  return axios\n    .get(url, {\n      params: {\n        size: 1000,\n        sort_field: 'tvl_usd',\n        sort_order: 'desc',\n      },\n      timeout: 30000,\n    })\n    .then((resp) => {\n      log.info(\n        `Successfully fetched AMMs, status: ${resp.status}, count: ${resp.data?.results?.length || 0}`,\n      )\n      return resp.data\n    })\n    .catch((e) => {\n      if (e.code === 'ECONNABORTED') {\n        log.error(`Request timeout after 30 seconds for ${url}`)\n      } else if (e.response) {\n        log.error(`Failed to fetch AMMs from ${url}:`, {\n          status: e.response.status,\n          statusText: e.response.statusText,\n          data: e.response.data,\n        })\n      } else if (e.request) {\n        log.error(`No response received from ${url}:`, {\n          message: e.message,\n          code: e.code,\n        })\n      } else {\n        log.error(`Error setting up request to ${url}:`, {\n          message: e.message,\n        })\n      }\n      return { results: [] }\n    })\n}\n\n/**\n * Fetch token data (icon, asset_class, asset_subclass) from LOS /tokens/batch-get\n * for all unique non-XRP tokens across the AMM pools.\n * Returns a map of \"CURRENCY.ISSUER\" -> { icon, asset_class, asset_subclass }\n */\nasync function fetchTokenData(amms) {\n  const tokenIds = new Set()\n  amms.forEach((amm) => {\n    if (amm.currency_1 && amm.issuer_1 && amm.currency_1 !== 'XRP') {\n      tokenIds.add(`${amm.currency_1}.${amm.issuer_1}`)\n    }\n    if (amm.currency_2 && amm.issuer_2 && amm.currency_2 !== 'XRP') {\n      tokenIds.add(`${amm.currency_2}.${amm.issuer_2}`)\n    }\n  })\n\n  const uniqueTokenIds = Array.from(tokenIds)\n  if (uniqueTokenIds.length === 0) return {}\n\n  log.info(\n    `Fetching token data for ${uniqueTokenIds.length} unique tokens from LOS`,\n  )\n\n  const tokenDataMap = {}\n  const url = `${process.env.VITE_LOS_URL}/tokens/batch-get`\n\n  // Batch in groups of LOS_TOKEN_API_BATCH_SIZE (DynamoDB BatchGetItem limit is 100)\n  for (let i = 0; i < uniqueTokenIds.length; i += LOS_TOKEN_API_BATCH_SIZE) {\n    const batch = uniqueTokenIds.slice(i, i + LOS_TOKEN_API_BATCH_SIZE)\n    try {\n      // eslint-disable-next-line no-await-in-loop\n      const resp = await axios.post(\n        url,\n        { tokenIds: batch },\n        { timeout: 30000 },\n      )\n      const tokens = resp.data?.tokens || []\n      tokens.forEach((token) => {\n        if (token.currency && token.issuer_account) {\n          const key = `${token.currency}.${token.issuer_account}`\n          tokenDataMap[key] = {\n            icon: token.icon || undefined,\n            asset_class: token.asset_class || undefined,\n            asset_subclass: token.asset_subclass || undefined,\n          }\n        }\n      })\n    } catch (e) {\n      log.error(`Failed to batch-get tokens from LOS: ${e.message}`)\n    }\n  }\n\n  log.info(`Fetched token data for ${Object.keys(tokenDataMap).length} tokens`)\n  return tokenDataMap\n}\n\n/**\n * Fetch trading fees for AMM pools via amm_info RPC, called concurrently\n * with controlled concurrency to avoid overwhelming the rippled node.\n * Returns a map of amm_account_id -> trading_fee (raw value, 0-1000)\n */\nasync function fetchTradingFees(amms) {\n  log.info(`Fetching trading fees for ${amms.length} AMMs via amm_info RPC`)\n\n  const tradingFeeMap = {}\n  const queue = [...amms]\n  let completed = 0\n\n  const delay = (ms) => new Promise((resolve) => setTimeout(resolve, ms))\n\n  // Process AMMs with controlled concurrency and delays\n  async function processNext() {\n    while (queue.length > 0) {\n      const amm = queue.shift()\n      try {\n        // eslint-disable-next-line no-await-in-loop\n        const resp = await rippled.getAMMInfo(amm.amm_account_id)\n        if (resp?.amm?.trading_fee !== undefined) {\n          tradingFeeMap[amm.amm_account_id] = resp.amm.trading_fee\n        }\n      } catch (e) {\n        // Silently skip — trading fee is non-critical\n        log.warn(\n          `Failed to fetch amm_info for ${amm.amm_account_id}: ${e.message}`,\n        )\n      }\n      completed += 1\n      if (completed % 100 === 0) {\n        log.info(`Trading fee progress: ${completed}/${amms.length}`)\n      }\n      // eslint-disable-next-line no-await-in-loop\n      await delay(AMM_INFO_DELAY_MS)\n    }\n  }\n\n  // Launch AMM_INFO_CONCURRENCY workers\n  const workers = []\n  for (let i = 0; i < Math.min(AMM_INFO_CONCURRENCY, amms.length); i += 1) {\n    workers.push(processNext())\n  }\n  await Promise.all(workers)\n\n  log.info(\n    `Fetched trading fees for ${Object.keys(tradingFeeMap).length}/${amms.length} AMMs`,\n  )\n  return tradingFeeMap\n}\n\nasync function fetchAggregatedStats() {\n  const url = `${process.env.VITE_LOS_URL}/amms/aggregated`\n  log.info(`Fetching aggregated stats from: ${url}`)\n\n  return axios\n    .get(url, {\n      timeout: 30000,\n    })\n    .then((resp) => {\n      log.info(`Successfully fetched aggregated stats, status: ${resp.status}`)\n      return resp.data\n    })\n    .catch((e) => {\n      if (e.code === 'ECONNABORTED') {\n        log.error(`Request timeout after 30 seconds for ${url}`)\n      } else if (e.response) {\n        log.error(`Failed to fetch aggregated stats from ${url}:`, {\n          status: e.response.status,\n          statusText: e.response.statusText,\n          data: e.response.data,\n        })\n      } else if (e.request) {\n        log.error(`No response received from ${url}:`, {\n          message: e.message,\n          code: e.code,\n        })\n      } else {\n        log.error(`Error setting up request to ${url}:`, {\n          message: e.message,\n        })\n      }\n      return null\n    })\n}\n\nfunction enrichAMMs(amms, tokenDataMap) {\n  return amms.map((amm) => {\n    const token1Key =\n      amm.currency_1 && amm.issuer_1\n        ? `${amm.currency_1}.${amm.issuer_1}`\n        : null\n    const token2Key =\n      amm.currency_2 && amm.issuer_2\n        ? `${amm.currency_2}.${amm.issuer_2}`\n        : null\n    const token1Data = token1Key ? tokenDataMap[token1Key] : undefined\n    const token2Data = token2Key ? tokenDataMap[token2Key] : undefined\n\n    return {\n      ...amm,\n      icon_1: token1Data?.icon,\n      icon_2: token2Data?.icon,\n      asset_class_1: token1Data?.asset_class || amm.asset_class_1,\n      asset_class_2: token2Data?.asset_class || amm.asset_class_2,\n      asset_subclass_1: token1Data?.asset_subclass,\n      asset_subclass_2: token2Data?.asset_subclass,\n    }\n  })\n}\n\nasync function cacheAMMs() {\n  const losAMMs = await fetchAMMs()\n\n  if (losAMMs.results && losAMMs.results.length > 0) {\n    log.info(`Fetched ${losAMMs.results.length} AMMs from LOS...`)\n\n    // Build a map of previously cached trading fees + token data so they\n    // survive across cache refreshes while fetchTradingFees re-fetches (~100s).\n    // Only carry over fields that have defined values to avoid overwriting\n    // fresh LOS data with undefined.\n    const previousDataMap = {}\n    cachedAMMsList.results.forEach((amm) => {\n      if (amm.amm_account_id) {\n        const prev = {}\n        if (amm.trading_fee !== undefined) prev.trading_fee = amm.trading_fee\n        if (amm.icon_1 !== undefined) prev.icon_1 = amm.icon_1\n        if (amm.icon_2 !== undefined) prev.icon_2 = amm.icon_2\n        if (amm.asset_class_1 !== undefined)\n          prev.asset_class_1 = amm.asset_class_1\n        if (amm.asset_class_2 !== undefined)\n          prev.asset_class_2 = amm.asset_class_2\n        if (amm.asset_subclass_1 !== undefined)\n          prev.asset_subclass_1 = amm.asset_subclass_1\n        if (amm.asset_subclass_2 !== undefined)\n          prev.asset_subclass_2 = amm.asset_subclass_2\n        if (Object.keys(prev).length > 0) {\n          previousDataMap[amm.amm_account_id] = prev\n        }\n      }\n    })\n\n    // Cache AMMs immediately, carrying over previously enriched data\n    cachedAMMsList.results = losAMMs.results.map((amm) => ({\n      ...amm,\n      ...(previousDataMap[amm.amm_account_id] || {}),\n    }))\n    cachedAMMsList.last_updated = Date.now()\n    log.info(\n      `Cached ${cachedAMMsList.results.length} AMMs (enriching with token data and trading fees in background)`,\n    )\n\n    // Fetch token data in the background — updates the cache when ready\n    fetchTokenData(losAMMs.results)\n      .then((tokenDataMap) => {\n        cachedAMMsList.results = enrichAMMs(\n          cachedAMMsList.results,\n          tokenDataMap,\n        )\n        log.info(\n          `Updated cache with token data for ${Object.keys(tokenDataMap).length} tokens`,\n        )\n      })\n      .catch((e) => {\n        log.error(`Failed to fetch token data: ${e.message}`)\n      })\n\n    // Fetch trading fees in the background — updates the cache when ready\n    fetchTradingFees(losAMMs.results)\n      .then((tradingFeeMap) => {\n        cachedAMMsList.results = cachedAMMsList.results.map((amm) => ({\n          ...amm,\n          trading_fee:\n            tradingFeeMap[amm.amm_account_id] !== undefined\n              ? tradingFeeMap[amm.amm_account_id]\n              : amm.trading_fee,\n        }))\n        log.info(\n          `Updated cache with trading fees for ${Object.keys(tradingFeeMap).length} AMMs`,\n        )\n      })\n      .catch((e) => {\n        log.error(`Failed to fetch trading fees: ${e.message}`)\n      })\n  } else if (cachedAMMsList.results.length > 0) {\n    log.warn(\n      `Failed to fetch AMMs from LOS, using stale cached data ` +\n        `(${cachedAMMsList.results.length} AMMs from ` +\n        `${new Date(cachedAMMsList.last_updated).toISOString()})`,\n    )\n  } else {\n    log.error('Failed to fetch AMMs from LOS and no cached data available')\n  }\n}\n\nasync function cacheAggregatedStats() {\n  const stats = await fetchAggregatedStats()\n\n  if (stats) {\n    log.info('Fetched aggregated stats from LOS...')\n    cachedAggregatedStats.data = stats\n    cachedAggregatedStats.last_updated = Date.now()\n    log.info('Cached aggregated stats')\n  } else if (cachedAggregatedStats.data) {\n    log.warn(\n      `Failed to fetch aggregated stats from LOS, using stale cached data ` +\n        `(from ${new Date(cachedAggregatedStats.last_updated).toISOString()})`,\n    )\n  } else {\n    log.error(\n      'Failed to fetch aggregated stats from LOS and no cached data available',\n    )\n  }\n}\n\nfunction startCaching() {\n  if (process.env.VITE_ENVIRONMENT !== 'mainnet') {\n    return\n  }\n  cacheAMMs()\n  cacheAggregatedStats()\n  setInterval(() => cacheAMMs(), REFETCH_INTERVAL)\n  setInterval(() => cacheAggregatedStats(), REFETCH_INTERVAL)\n}\n\nstartCaching()\n\nfunction sleep(ms) {\n  return new Promise((resolve) => setTimeout(resolve, ms))\n}\n\nfunction sortAMMs(amms, sortField, sortOrder) {\n  const sorted = [...amms]\n\n  sorted.sort((a, b) => {\n    const aVal = Number(a[sortField]) || 0\n    const bVal = Number(b[sortField]) || 0\n    return sortOrder === 'desc' ? bVal - aVal : aVal - bVal\n  })\n\n  return sorted\n}\n\n/**\n * GET /api/v1/amms\n * Fetch top AMMs with sorting (from cache)\n */\nconst getAMMs = async (req, res) => {\n  try {\n    const {\n      size = 1000,\n      sort_field: sortField = 'tvl_usd',\n      sort_order: sortOrder = 'desc',\n    } = req.query\n\n    log.info(\n      `Fetching AMMs from cache: size=${size}, sort_field=${sortField}, sort_order=${sortOrder}`,\n    )\n\n    // Wait for cache to be populated (with timeout)\n    let timeoutLimit = 10\n    while (cachedAMMsList.results.length === 0 && timeoutLimit > 0) {\n      // eslint-disable-next-line no-await-in-loop -- necessary here to wait for cache to be filled\n      await sleep(1000)\n      timeoutLimit -= 1\n    }\n\n    // Sort and limit results\n    let results = sortAMMs(cachedAMMsList.results, sortField, sortOrder)\n    results = results.slice(0, Number(size))\n\n    log.info(`Returning ${results.length} AMMs from cache`)\n\n    return res.status(200).json({\n      results,\n      updated: cachedAMMsList.last_updated,\n    })\n  } catch (error) {\n    log.error(error)\n    return res.status(error.code || 500).json({ message: error.message })\n  }\n}\n\n/**\n * GET /api/v1/amms/aggregated\n * Fetch aggregated AMM statistics\n * This fetches the special \"aggregated\" document from the amms index\n */\nconst getAggregatedStats = async (req, res) => {\n  try {\n    log.info('Fetching aggregated AMM stats from cache')\n\n    // Wait for cache to be populated (with timeout)\n    let timeoutLimit = 10\n    while (!cachedAggregatedStats.data && timeoutLimit > 0) {\n      // eslint-disable-next-line no-await-in-loop -- necessary here to wait for cache to be filled\n      await sleep(1000)\n      timeoutLimit -= 1\n    }\n\n    return res.status(200).json({\n      ...cachedAggregatedStats.data,\n      updated: cachedAggregatedStats.last_updated,\n    })\n  } catch (error) {\n    log.error(error)\n    return res.status(error.code || 500).json({ message: error.message })\n  }\n}\n\n/**\n * GET /api/v1/amms/historical-trends\n * Fetch historical trends for AMM data\n */\nasync function fetchHistoricalTrends(ammAccountId, timeRange) {\n  const url = `${process.env.VITE_LOS_URL}/amms/historical-trends`\n  log.info(\n    `Fetching historical trends from: ${url} (amm_account_id=${ammAccountId}, time_range=${timeRange})`,\n  )\n\n  return axios\n    .get(url, {\n      params: {\n        amm_account_id: ammAccountId,\n        time_range: timeRange,\n      },\n      timeout: 30000,\n    })\n    .then((resp) => {\n      log.info(\n        `Successfully fetched historical trends, ` +\n          `status: ${resp.status}, ` +\n          `data_points: ${resp.data?.total_data_points || 0}`,\n      )\n      return resp.data\n    })\n    .catch((e) => {\n      if (e.code === 'ECONNABORTED') {\n        log.error(`Request timeout after 30 seconds for ${url}`)\n      } else if (e.response) {\n        log.error(`Failed to fetch historical trends from ${url}:`, {\n          status: e.response.status,\n          statusText: e.response.statusText,\n          data: e.response.data,\n        })\n      } else if (e.request) {\n        log.error(`No response received from ${url}:`, {\n          message: e.message,\n          code: e.code,\n        })\n      } else {\n        log.error(`Error setting up request to ${url}:`, {\n          message: e.message,\n        })\n      }\n      return null\n    })\n}\n\nfunction getCachedTrends(ammAccountId, timeRange) {\n  const cacheKey = `${ammAccountId}:${timeRange}`\n  return cachedHistoricalTrends.get(cacheKey) || null\n}\n\nasync function cacheTrends(ammAccountId, timeRange) {\n  const cacheKey = `${ammAccountId}:${timeRange}`\n  const trends = await fetchHistoricalTrends(ammAccountId, timeRange)\n\n  if (trends) {\n    log.info(`Fetched historical trends from LOS for ${cacheKey}...`)\n    cachedHistoricalTrends.set(cacheKey, {\n      data: trends,\n      last_updated: Date.now(),\n    })\n    log.info(`Cached historical trends for ${cacheKey}`)\n  } else {\n    const existing = cachedHistoricalTrends.get(cacheKey)\n    if (existing) {\n      log.warn(\n        `Failed to fetch historical trends from LOS for ${cacheKey}, ` +\n          `using stale cached data ` +\n          `(from ${new Date(existing.last_updated).toISOString()})`,\n      )\n    } else {\n      log.error(\n        `Failed to fetch historical trends from LOS for ${cacheKey} and no cached data available`,\n      )\n    }\n  }\n}\n\nconst getHistoricalTrends = async (req, res) => {\n  try {\n    const {\n      amm_account_id: ammAccountId = 'aggregated',\n      time_range: timeRange = '6M',\n    } = req.query\n\n    log.info(\n      `Fetching historical trends from cache: amm_account_id=${ammAccountId}, time_range=${timeRange}`,\n    )\n\n    const cached = getCachedTrends(ammAccountId, timeRange)\n\n    // If cached and fresh (within REFETCH_INTERVAL), return it\n    if (cached && Date.now() - cached.last_updated < REFETCH_INTERVAL) {\n      log.info('Returning historical trends from cache')\n      return res.status(200).json({\n        ...cached.data,\n        updated: cached.last_updated,\n      })\n    }\n\n    // Cache miss or stale — fetch fresh data\n    await cacheTrends(ammAccountId, timeRange)\n\n    const updated = getCachedTrends(ammAccountId, timeRange)\n\n    return res.status(200).json({\n      ...updated?.data,\n      updated: updated?.last_updated,\n    })\n  } catch (error) {\n    log.error(error)\n    return res.status(error.code || 500).json({ message: error.message })\n  }\n}\n\nmodule.exports = {\n  getAMMs,\n  getAggregatedStats,\n  getHistoricalTrends,\n}\n"
  },
  {
    "path": "server/routes/v1/currentMetrics.js",
    "content": "const log = require('../../lib/logger')({ name: 'metrics' })\nconst streams = require('../../lib/streams')\n\nmodule.exports = async (req, res) => {\n  try {\n    log.info('get current metrics')\n    const metrics = await streams.getCurrentMetrics()\n    return res.status(200).json(metrics)\n  } catch (error) {\n    log.error(`Failed metrics fetch w/ code ${error.code}: ${error.message}`)\n    return res.status(error.code || 500).json({ message: error.message })\n  }\n}\n"
  },
  {
    "path": "server/routes/v1/health.js",
    "content": "const rippled = require('../../lib/rippled')\nconst log = require('../../lib/logger')({ name: 'health' })\n\nmodule.exports = async (req, res) => {\n  try {\n    const health = await rippled.getHealth()\n    return res.status(200).json({ message: health.data })\n  } catch (error) {\n    log.error(`Failed healthcheck w/ code ${error.code}: ${error.message}`)\n    return res.status(error.code || 500).json({ message: error.message })\n  }\n}\n"
  },
  {
    "path": "server/routes/v1/index.js",
    "content": "const api = require('express').Router()\nconst getHealth = require('./health')\nconst getCurrentMetrics = require('./currentMetrics')\nconst { getTokensSearch, getAllTokens } = require('./tokens')\nconst {\n  getVaults,\n  getVaultsAggregateStats,\n  getVaultAssetPrices,\n} = require('./vaults')\nconst { getAMMs, getAggregatedStats, getHistoricalTrends } = require('./amms')\n\napi.use('/healthz', (_req, res) => {\n  res.status(200).send('success')\n})\nif (process.env.VITE_ENVIRONMENT !== 'custom') {\n  // these require a single hardcoded rippled node to connect to\n  api.use('/health', getHealth)\n  api.use('/metrics', getCurrentMetrics)\n  api.use('/tokens/search/:query', getTokensSearch)\n  api.use('/tokens', getAllTokens)\n  api.get('/vaults/aggregate-statistics', getVaultsAggregateStats)\n  api.get('/vaults/asset-prices', getVaultAssetPrices)\n  api.get('/vaults', getVaults)\n  api.get('/amms/aggregated', getAggregatedStats)\n  api.get('/amms/historical-trends', getHistoricalTrends)\n  api.get('/amms', getAMMs)\n}\n\nmodule.exports = api\n"
  },
  {
    "path": "server/routes/v1/tokens.js",
    "content": "const axios = require('axios')\nconst log = require('../../lib/logger')({ name: 'tokens search' })\n\nconst REFETCH_INTERVAL = 10 * 60 * 1000 // 10 minutes\nconst cachedTokenList = { tokens: [], last_updated: null, metrics: null }\n\nconst parseCurrency = (currency) => {\n  const NON_STANDARD_CODE_LENGTH = 40\n  const LP_TOKEN_IDENTIFIER = '03'\n\n  const hexToString = (hex) => {\n    let string = ''\n    for (let i = 0; i < hex.length; i += 2) {\n      const part = hex.substring(i, i + 2)\n      const code = parseInt(part, 16)\n      if (!isNaN(code) && code !== 0) {\n        string += String.fromCharCode(code)\n      }\n    }\n    return string\n  }\n\n  return currency.length === NON_STANDARD_CODE_LENGTH &&\n    currency?.substring(0, 2) !== LP_TOKEN_IDENTIFIER\n    ? hexToString(currency)\n    : currency\n}\n\nconst calculateMetrics = (tokens) => ({\n  count: tokens.length,\n  market_cap: tokens\n    .reduce((sum, token) => {\n      const cap = Number(token.market_cap_usd) || 0\n      return cap > 0 ? sum + cap : sum\n    }, 0)\n    .toFixed(6),\n  volume_24h: tokens\n    .reduce((sum, token) => sum + Number(token.daily_volume_usd || 0), 0)\n    .toFixed(6),\n  stablecoin: tokens\n    .reduce((sum, token) => {\n      const cap = Number(token.market_cap_usd) || 0\n      return token.asset_subclass === 'stablecoin' && cap > 0 ? sum + cap : sum\n    }, 0)\n    .toFixed(6),\n})\n\nasync function fetchTokens() {\n  const url = `${process.env.VITE_LOS_URL}/trusted-tokens`\n  log.info(`Fetching tokens from: ${url}`)\n\n  return axios\n    .get(url, {\n      timeout: 30000,\n    })\n    .then((resp) => {\n      log.info(\n        `Successfully fetched tokens, status: ${resp.status}, count: ${resp.data?.tokens?.length || 0}`,\n      )\n      return resp.data\n    })\n    .catch((e) => {\n      if (e.code === 'ECONNABORTED') {\n        log.error(`Request timeout after 30 seconds for ${url}`)\n      } else if (e.response) {\n        log.error(`Failed to fetch tokens from ${url}:`, {\n          status: e.response.status,\n          statusText: e.response.statusText,\n          data: e.response.data,\n        })\n      } else if (e.request) {\n        log.error(`No response received from ${url}:`, {\n          message: e.message,\n          code: e.code,\n        })\n      } else {\n        log.error(`Error setting up request to ${url}:`, {\n          message: e.message,\n        })\n      }\n      return { count: 0 }\n    })\n}\n\nasync function cacheTokens() {\n  const losTokens = await fetchTokens()\n\n  if (losTokens.tokens) {\n    log.info(`Fetched ${losTokens.tokens.length} tokens from LOS...`)\n\n    cachedTokenList.tokens = losTokens.tokens.sort(\n      (a, b) => Number(b.holders ?? 0) - Number(a.holders ?? 0),\n    )\n\n    cachedTokenList.last_updated = Date.now()\n\n    // nonstandard from XRPLMeta, check for hex codes in currencies and store parsed\n    cachedTokenList.tokens = cachedTokenList.tokens.map((token) => ({\n      ...token,\n      parsedCurrency: parseCurrency(token.currency),\n    }))\n\n    // Calculate and cache metrics\n    cachedTokenList.metrics = calculateMetrics(cachedTokenList.tokens)\n    log.info(`Cached metrics for ${cachedTokenList.metrics.count} tokens`)\n  } else {\n    log.warn('Failed to fetch tokens from LOS, using stale cached data')\n  }\n}\n\nfunction startCaching() {\n  if (process.env.VITE_ENVIRONMENT !== 'mainnet') {\n    return\n  }\n  cacheTokens()\n  setInterval(() => cacheTokens(), REFETCH_INTERVAL)\n}\n\nstartCaching()\n\nfunction queryTokens(tokenList, query) {\n  if (!tokenList || !Array.isArray(tokenList) || !query) {\n    return []\n  }\n\n  const sanitizedQuery = query.toLowerCase().trim()\n  if (!sanitizedQuery) {\n    return []\n  }\n\n  return tokenList.filter((token) => {\n    try {\n      const currencyMatch = token.currency\n        ?.toLowerCase()\n        .includes(sanitizedQuery)\n      const parsedCurrencyMatch = token.parsedCurrency\n        ?.toLowerCase()\n        .includes(sanitizedQuery)\n      const nameMatch = token.name?.toLowerCase().includes(sanitizedQuery)\n      const issuerNameMatch = token.issuer_name\n        ?.toLowerCase()\n        .includes(sanitizedQuery)\n      const issuerAccountStartsMatch = token.issuer_account\n        ?.toLowerCase()\n        .startsWith(sanitizedQuery)\n\n      return (\n        currencyMatch ||\n        parsedCurrencyMatch ||\n        nameMatch ||\n        issuerNameMatch ||\n        issuerAccountStartsMatch\n      )\n    } catch (error) {\n      log.error(`Error filtering token: ${error.message}`, { token })\n      return false\n    }\n  })\n}\n\nfunction sleep(ms) {\n  return new Promise((resolve) => setTimeout(resolve, ms))\n}\n\nconst getTokensSearch = async (req, res) => {\n  try {\n    log.info('getting tokens list for search')\n    const { query } = req.params\n    let timeoutLimit = 10\n    while (cachedTokenList.tokens.length === 0 && timeoutLimit > 0) {\n      // eslint-disable-next-line no-await-in-loop -- necessary here to wait for cache to be filled\n      await sleep(1000)\n      timeoutLimit -= 1\n    }\n    const queriedTokens = await queryTokens(cachedTokenList.tokens, query)\n    return res.status(200).json({\n      result: 'success',\n      updated: cachedTokenList.last_updated,\n      tokens: queriedTokens,\n    })\n  } catch (error) {\n    log.error(error)\n    return res.status(error.code || 500).json({ message: error.message })\n  }\n}\n\nconst getAllTokens = async (req, res) => {\n  try {\n    log.info('getting tokens list for search')\n    while (cachedTokenList.tokens.length === 0) {\n      // eslint-disable-next-line no-await-in-loop -- necessary here to wait for cache to be filled\n      await sleep(1000)\n    }\n\n    log.info(cachedTokenList.tokens.length)\n\n    return res.status(200).json({\n      result: 'success',\n      updated: cachedTokenList.last_updated,\n      tokens: cachedTokenList.tokens,\n      metrics: cachedTokenList.metrics,\n    })\n  } catch (error) {\n    log.error(error)\n    return res.status(error.code || 500).json({ message: error.message })\n  }\n}\n\nmodule.exports = {\n  getTokensSearch,\n  getAllTokens,\n}\n"
  },
  {
    "path": "server/routes/v1/vaults.js",
    "content": "const axios = require('axios')\nconst log = require('../../lib/logger')({ name: 'vaults' })\n\nconst PRICE_REFETCH_INTERVAL = 5 * 60 * 1000 // 5 minutes\nconst VAULTS_REFETCH_INTERVAL = 2 * 60 * 1000 // 2 minutes\nconst AGG_STATS_REFETCH_INTERVAL = 10 * 60 * 1000 // 10 minutes\n\nconst cachedPrices = { prices: {}, lastUpdated: null }\nconst cachedAggStats = { data: null, lastUpdated: null }\nconst cachedVaults = new Map() // key: query string, value: { data, lastUpdated }\n\nasync function fetchAssetPrices() {\n  try {\n    const losUrl = `${process.env.VITE_LOS_URL}/trusted-tokens`\n    log.info(`Fetching trusted tokens for vault prices from: ${losUrl}`)\n    const resp = await axios.get(losUrl, { timeout: 30000 })\n    const tokens = resp.data?.tokens || []\n\n    // Filter to RWA asset class (stablecoins used by vaults)\n    const rwaTokens = tokens.filter((t) => t.asset_class === 'rwa')\n    log.info(`Found ${rwaTokens.length} RWA tokens for vault price lookup`)\n\n    const prices = {}\n\n    await Promise.all(\n      rwaTokens.map(async (token) => {\n        try {\n          const losTokenUrl = `${process.env.VITE_LOS_URL}/tokens/${token.currency}.${token.issuer_account}`\n          const tokenResp = await axios.get(losTokenUrl, { timeout: 10000 })\n          const xrpPrice = Number(tokenResp.data?.price) || 0\n          if (xrpPrice > 0) {\n            const key = `${token.currency}.${token.issuer_account}`\n            prices[key] = xrpPrice\n            log.info(\n              `Price for ${token.name || token.currency}: ${xrpPrice} XRP`,\n            )\n          }\n        } catch (e) {\n          log.error(`Failed to fetch price for ${token.currency}: ${e.message}`)\n        }\n      }),\n    )\n\n    cachedPrices.prices = prices\n    cachedPrices.lastUpdated = Date.now()\n    log.info(`Cached prices for ${Object.keys(prices).length} vault assets`)\n  } catch (e) {\n    log.error(`Failed to fetch asset prices: ${e.message}`)\n  }\n}\n\nasync function fetchAggregateStats() {\n  try {\n    const url = `${process.env.VITE_LOS_URL}/vaults/aggregate-statistics`\n    log.info(`Fetching vault aggregate stats from: ${url}`)\n    const resp = await axios.get(url, { timeout: 30000 })\n    cachedAggStats.data = resp.data\n    cachedAggStats.lastUpdated = Date.now()\n    log.info('Cached vault aggregate stats')\n  } catch (e) {\n    log.error(`Failed to fetch vault aggregate stats: ${e.message}`)\n  }\n}\n\nasync function fetchVaultsList() {\n  try {\n    // Fetch the default view (first page, sorted by TVL desc) to warm the cache\n    const url = `${process.env.VITE_LOS_URL}/vaults?page=1&size=20&sort_by=assets_total&sort_order=desc`\n    log.info(`Refreshing vaults list cache from: ${url}`)\n    const resp = await axios.get(url, { timeout: 30000 })\n    const cacheKey = 'page=1&size=20&sort_by=assets_total&sort_order=desc'\n    cachedVaults.set(cacheKey, { data: resp.data, lastUpdated: Date.now() })\n    log.info('Cached default vaults list')\n  } catch (e) {\n    log.error(`Failed to refresh vaults list cache: ${e.message}`)\n  }\n}\n\nfunction startCaching() {\n  if (process.env.VITE_ENVIRONMENT !== 'mainnet') {\n    return\n  }\n  fetchAssetPrices()\n  fetchAggregateStats()\n  fetchVaultsList()\n  setInterval(() => fetchAssetPrices(), PRICE_REFETCH_INTERVAL)\n  setInterval(() => fetchAggregateStats(), AGG_STATS_REFETCH_INTERVAL)\n  setInterval(() => fetchVaultsList(), VAULTS_REFETCH_INTERVAL)\n}\n\nstartCaching()\n\nconst getVaultAssetPrices = async (_req, res) => {\n  try {\n    return res.status(200).json({\n      prices: cachedPrices.prices,\n      lastUpdated: cachedPrices.lastUpdated,\n    })\n  } catch (error) {\n    log.error('Failed to get vault asset prices:', error.message)\n    return res\n      .status(error.response?.status || 500)\n      .json({ message: error.message })\n  }\n}\n\nconst getVaults = async (req, res) => {\n  try {\n    const {\n      page,\n      size,\n      sort_by: sortBy,\n      sort_order: sortOrder,\n      asset_type: assetType,\n      name_like: nameLike,\n    } = req.query\n\n    const params = new URLSearchParams()\n    if (page) params.set('page', page)\n    if (size) params.set('size', size)\n    if (sortBy) params.set('sort_by', sortBy)\n    if (sortOrder) params.set('sort_order', sortOrder)\n    if (assetType) params.set('asset_type', assetType)\n    if (nameLike) params.set('name_like', nameLike)\n\n    const cacheKey = params.toString()\n    const cached = cachedVaults.get(cacheKey)\n    if (cached && Date.now() - cached.lastUpdated < VAULTS_REFETCH_INTERVAL) {\n      return res.status(200).json(cached.data)\n    }\n\n    const url = `${process.env.VITE_LOS_URL}/vaults?${cacheKey}`\n    log.info(`Fetching vaults from: ${url}`)\n\n    const resp = await axios.get(url, { timeout: 30000 })\n    cachedVaults.set(cacheKey, { data: resp.data, lastUpdated: Date.now() })\n    return res.status(200).json(resp.data)\n  } catch (error) {\n    log.error('Failed to fetch vaults:', error.message)\n    return res\n      .status(error.response?.status || 500)\n      .json({ message: error.message })\n  }\n}\n\nconst getVaultsAggregateStats = async (_req, res) => {\n  try {\n    if (cachedAggStats.data) {\n      return res.status(200).json(cachedAggStats.data)\n    }\n\n    // Cache not yet populated (e.g. first request before background fetch completes)\n    const url = `${process.env.VITE_LOS_URL}/vaults/aggregate-statistics`\n    log.info(`Fetching vault aggregate stats from: ${url}`)\n    const resp = await axios.get(url, { timeout: 30000 })\n    cachedAggStats.data = resp.data\n    cachedAggStats.lastUpdated = Date.now()\n    return res.status(200).json(resp.data)\n  } catch (error) {\n    log.error('Failed to fetch vault aggregate stats:', error.message)\n    return res\n      .status(error.response?.status || 500)\n      .json({ message: error.message })\n  }\n}\n\nmodule.exports = {\n  getVaults,\n  getVaultsAggregateStats,\n  getVaultAssetPrices,\n}\n"
  },
  {
    "path": "src/containers/AMMPool/AMMPoolHeader.tsx",
    "content": "import { FC } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport Currency from '../shared/components/Currency'\nimport { FormattedBalance } from './types'\n\ninterface AMMPoolHeaderProps {\n  asset1: FormattedBalance | null\n  asset2: FormattedBalance | null\n}\n\nexport const AMMPoolHeader: FC<AMMPoolHeaderProps> = ({ asset1, asset2 }) => {\n  const { t } = useTranslation()\n\n  return (\n    <div className=\"amm-pool-header\">\n      <div className=\"amm-pool-header-left\">\n        <h1 className=\"amm-pool-title\">{t('amm_pool')}</h1>\n        {asset1 && asset2 && (\n          <span className=\"amm-pool-token-badge\">\n            <Currency\n              currency={asset1.currency}\n              issuer={asset1.issuer}\n              link\n              shortenIssuer\n              displaySymbol={false}\n            />\n            <span className=\"badge-separator\">/</span>\n            <Currency\n              currency={asset2.currency}\n              issuer={asset2.issuer}\n              link={asset2.currency !== 'XRP'}\n              shortenIssuer\n              displaySymbol={false}\n            />\n          </span>\n        )}\n      </div>\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/AMMPool/InfoCards/AuctionCard.tsx",
    "content": "import { FC } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { Account } from '../../shared/components/Account'\nimport {\n  shortenAccount,\n  formatTradingFee,\n  localizeDate,\n  DATE_OPTIONS_NUMERIC,\n  TRADING_FEE_BASE,\n} from '../../shared/utils'\nimport {\n  parseAmount,\n  parseCurrencyAmount,\n} from '../../shared/NumberFormattingUtils'\nimport AuctionIcon from '../../shared/images/auction_icon.svg'\nimport { AuctionSlot } from '../types'\n\ninterface AuctionCardProps {\n  auctionSlot?: AuctionSlot\n  tvlUsd?: number\n  lpTokenBalance?: string\n  tradingFee: number\n}\n\n/**\n * Calculate the minimum bid to replace the current auction slot holder.\n *\n * From XRPL docs (AMMBid - Auction Slot Price):\n *\n * Minimum bid (M): M = L * F / 25\n *   L = total LP tokens issued, F = trading fee as decimal\n *\n * Empty/expired/last interval: P = M\n *\n * First interval (time_interval=0): P = B * 1.05 + M\n *\n * Otherwise: P = B * 1.05 * (1 - t^60) + M\n *   B = current bid price in LP tokens\n *   t = fraction of time elapsed, rounded down to multiples of 0.05\n *       (time_interval / 20, where time_interval is 0-19)\n */\nconst calcReplacementCost = (\n  auctionSlot: AuctionSlot | undefined,\n  lpTokenBalance: string | undefined,\n  tradingFee: number,\n): number | null => {\n  if (!lpTokenBalance) {\n    return null\n  }\n\n  // XRPL stores trading fees as integers in units of 1/100,000 (e.g. 1000 = 1%)\n  const tradingFeeAsDecimal = tradingFee / TRADING_FEE_BASE\n  const M = (Number(lpTokenBalance) * tradingFeeAsDecimal) / 25\n\n  const hasHolder = !!auctionSlot?.account\n  // time_interval: 0-19 = active intervals, 20 = expired\n  const interval = auctionSlot?.time_interval ?? 20\n\n  // Empty, expired (20), or last interval (19): just the minimum bid\n  if (!hasHolder || interval >= 19) {\n    return M\n  }\n\n  const B = Number(auctionSlot?.price?.value ?? 0)\n\n  // First interval: B * 1.05 + M\n  if (interval === 0) {\n    return B * 1.05 + M\n  }\n\n  // Otherwise: B * 1.05 * (1 - t^60) + M\n  const t = interval / 20\n  return B * 1.05 * (1 - t ** 60) + M\n}\n\nexport const AuctionCard: FC<AuctionCardProps> = ({\n  auctionSlot,\n  tvlUsd,\n  lpTokenBalance,\n  tradingFee,\n}) => {\n  const { t } = useTranslation()\n\n  const hasAuctionData = !!auctionSlot?.account\n\n  const discountedFee = hasAuctionData\n    ? `${formatTradingFee(auctionSlot?.discounted_fee ?? 0)}%`\n    : '--'\n\n  const getLPTokenUSD = (lpValue: number | string | undefined) => {\n    if (lpValue == null) {\n      return null\n    }\n    const num = Number(lpValue)\n    if (num === 0) {\n      return 0\n    }\n    if (!lpTokenBalance || tvlUsd == null) {\n      return null\n    }\n    return (num / Number(lpTokenBalance)) * tvlUsd\n  }\n\n  // Price Paid: directly from amm_info auction_slot.price\n  const pricePaidLP =\n    hasAuctionData && auctionSlot?.price\n      ? parseAmount(auctionSlot.price.value)\n      : null\n  const pricePaidUSD =\n    hasAuctionData && auctionSlot?.price\n      ? getLPTokenUSD(auctionSlot.price.value)\n      : null\n\n  // Replacement Cost: formula-based on slot state and time_interval\n  const replacementCostRaw = calcReplacementCost(\n    auctionSlot,\n    lpTokenBalance,\n    tradingFee,\n  )\n  const replacementLP =\n    replacementCostRaw != null ? replacementCostRaw.toFixed(4) : null\n  const replacementUSD =\n    replacementCostRaw != null ? getLPTokenUSD(replacementCostRaw) : null\n\n  return (\n    <div className=\"info-card\">\n      <h3 className=\"info-card-title\">\n        <AuctionIcon className=\"info-card-icon\" />\n        {t('auction')}\n      </h3>\n      <div className=\"info-card-rows\">\n        <div className=\"info-card-row\">\n          <span className=\"info-card-label\">{t('current_holder')}</span>\n          <span className=\"info-card-value info-card-value-link\">\n            {hasAuctionData && auctionSlot?.account ? (\n              <Account\n                account={auctionSlot.account}\n                displayText={shortenAccount(auctionSlot.account)}\n              />\n            ) : (\n              '--'\n            )}\n          </span>\n        </div>\n        <div className=\"info-card-row\">\n          <span className=\"info-card-label\">{t('expiration')}</span>\n          <span className=\"info-card-value\">\n            {auctionSlot?.expiration\n              ? localizeDate(\n                  new Date(auctionSlot.expiration),\n                  'en-US',\n                  DATE_OPTIONS_NUMERIC,\n                )\n              : '--'}\n          </span>\n        </div>\n        <div className=\"info-card-row\">\n          <span className=\"info-card-label\">{t('discounted_fee')}</span>\n          <span className=\"info-card-value info-card-value-orange\">\n            {discountedFee}\n          </span>\n        </div>\n        <div className=\"info-card-row\">\n          <span className=\"info-card-label\">{t('price_paid')}</span>\n          <span className=\"info-card-value\">\n            {pricePaidLP ? (\n              <>\n                <div>\n                  {pricePaidLP} {t('lp_tokens')}\n                </div>\n                {pricePaidUSD != null && (\n                  <div className=\"info-card-subtitle\">\n                    &asymp; {parseCurrencyAmount(pricePaidUSD)}\n                  </div>\n                )}\n              </>\n            ) : (\n              '--'\n            )}\n          </span>\n        </div>\n        <div className=\"info-card-row\">\n          <span className=\"info-card-label\">{t('replacement_cost')}</span>\n          <span className=\"info-card-value\">\n            {replacementLP ? (\n              <>\n                <div>\n                  {parseAmount(replacementLP)} {t('lp_tokens')}\n                </div>\n                {replacementUSD != null && (\n                  <div className=\"info-card-subtitle\">\n                    &asymp; {parseCurrencyAmount(replacementUSD)}\n                  </div>\n                )}\n              </>\n            ) : (\n              '--'\n            )}\n          </span>\n        </div>\n      </div>\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/AMMPool/InfoCards/BasicInfoCard.tsx",
    "content": "import { FC } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { CopyableText } from '../../shared/components/CopyableText'\nimport { convertRippleDate } from '../../../rippled/lib/convertRippleDate'\nimport {\n  formatTradingFee,\n  shortenAccount,\n  shortenLPToken,\n} from '../../shared/utils'\nimport BasicInfoIcon from '../../shared/images/info_book_icon.svg'\n\ninterface BasicInfoCardProps {\n  ammAccountId: string\n  tradingFee: number\n  createdTimestamp: number | null | undefined\n  lpTokenCurrency?: string\n}\n\nexport const BasicInfoCard: FC<BasicInfoCardProps> = ({\n  ammAccountId,\n  tradingFee,\n  createdTimestamp,\n  lpTokenCurrency,\n}) => {\n  const { t } = useTranslation()\n\n  const tradingFeePercent = formatTradingFee(tradingFee)\n\n  const createdDate = createdTimestamp\n    ? new Date(convertRippleDate(createdTimestamp)).toLocaleDateString(\n        'en-US',\n        {\n          year: 'numeric',\n          month: '2-digit',\n          day: '2-digit',\n        },\n      )\n    : '--'\n\n  return (\n    <div className=\"info-card\">\n      <h3 className=\"info-card-title\">\n        <BasicInfoIcon className=\"info-card-icon\" />\n        {t('basic_info')}\n      </h3>\n      <div className=\"info-card-rows\">\n        <div className=\"info-card-row\">\n          <span className=\"info-card-label\">{t('amm_account_id')}</span>\n          <span className=\"info-card-value info-card-value-link\">\n            <CopyableText\n              text={ammAccountId}\n              displayText={shortenAccount(ammAccountId)}\n            />\n          </span>\n        </div>\n        {lpTokenCurrency && (\n          <div className=\"info-card-row\">\n            <span className=\"info-card-label\">\n              {t('lp_token_currency_code')}\n            </span>\n            <span className=\"info-card-value\">\n              <CopyableText\n                text={lpTokenCurrency}\n                displayText={shortenLPToken(lpTokenCurrency)}\n              />\n            </span>\n          </div>\n        )}\n        <div className=\"info-card-row\">\n          <span className=\"info-card-label\">{t('trading_fee')}</span>\n          <span className=\"info-card-value info-card-value-orange\">\n            {tradingFeePercent}%\n          </span>\n        </div>\n        <div className=\"info-card-row\">\n          <span className=\"info-card-label\">{t('created_on')}</span>\n          <span className=\"info-card-value\">{createdDate}</span>\n        </div>\n      </div>\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/AMMPool/InfoCards/MarketDataCard.tsx",
    "content": "import { FC } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { useTooltip } from '../../shared/components/Tooltip'\nimport HoverIcon from '../../shared/images/hover.svg'\nimport MarketDataIcon from '../../shared/images/market_data_icon.svg'\nimport {\n  parseCurrencyAmount,\n  parsePercent,\n  parseAmount,\n  parseIntegerAmount,\n} from '../../shared/NumberFormattingUtils'\nimport Currency from '../../shared/components/Currency'\nimport { LOSAMMPoolData, FormattedBalance } from '../types'\n\n/** Renders \"BALANCE (XRP)\" or \"BALANCE (CRYPTO)\" with no extra whitespace */\nconst BalanceLabel = ({\n  currency,\n  issuer,\n}: {\n  currency: string\n  issuer?: string\n}) => {\n  const { t } = useTranslation()\n  return (\n    <span className=\"info-card-label\">\n      {`${t('balance').toUpperCase()} (`}\n      <Currency\n        currency={currency}\n        issuer={issuer}\n        link={false}\n        displaySymbol={false}\n        hideIssuer\n      />\n      {/* eslint-disable-next-line react/jsx-curly-brace-presence */}\n      {')'}\n    </span>\n  )\n}\n\ninterface MarketDataCardProps {\n  losData?: LOSAMMPoolData\n  balance1: FormattedBalance | null\n  balance2: FormattedBalance | null\n  lpTokenBalance: string | undefined\n}\n\nexport const MarketDataCard: FC<MarketDataCardProps> = ({\n  losData,\n  balance1,\n  balance2,\n  lpTokenBalance,\n}) => {\n  const { t } = useTranslation()\n  const { showTooltip, hideTooltip } = useTooltip()\n\n  const renderTooltipIcon = (text: string) => (\n    <HoverIcon\n      className=\"hover\"\n      onMouseOver={(e: React.MouseEvent<SVGSVGElement>) => {\n        const rect = e.currentTarget.getBoundingClientRect()\n        showTooltip('text', e, text, {\n          x: rect.left + rect.width,\n          y: rect.top - 85,\n        })\n      }}\n      onMouseLeave={() => hideTooltip()}\n    />\n  )\n\n  return (\n    <div className=\"info-card\">\n      <h3 className=\"info-card-title\">\n        <MarketDataIcon className=\"info-card-icon\" />\n        {t('market_data')}\n      </h3>\n      <div className=\"info-card-rows\">\n        {losData && (\n          <>\n            <div className=\"info-card-row\">\n              <span className=\"info-card-label\">{t('tvl')}</span>\n              <span className=\"info-card-value\">\n                {losData.tvl_usd != null\n                  ? parseCurrencyAmount(losData.tvl_usd)\n                  : '--'}\n              </span>\n            </div>\n            <div className=\"info-card-row\">\n              <span className=\"info-card-label\">\n                {t('volume_24h')}\n                {renderTooltipIcon(t('volume_24h_tooltip'))}\n              </span>\n              <span className=\"info-card-value\">\n                {losData.trading_volume_usd != null\n                  ? parseCurrencyAmount(losData.trading_volume_usd)\n                  : '--'}\n              </span>\n            </div>\n            <div className=\"info-card-row\">\n              <span className=\"info-card-label\">\n                {t('fees_24h')}\n                {renderTooltipIcon(t('fees_24h_tooltip'))}\n              </span>\n              <span className=\"info-card-value\">\n                {losData.fees_collected_usd != null\n                  ? parseCurrencyAmount(losData.fees_collected_usd)\n                  : '--'}\n              </span>\n            </div>\n            <div className=\"info-card-row\">\n              <span className=\"info-card-label\">\n                {t('apr_24h')}\n                {renderTooltipIcon(t('apr_24h_tooltip'))}\n              </span>\n              <span className=\"info-card-value\">\n                {losData.annual_percentage_return != null\n                  ? parsePercent(losData.annual_percentage_return, 3, 0.001)\n                  : '--'}\n              </span>\n            </div>\n          </>\n        )}\n        {balance1 && (\n          <div className=\"info-card-row\">\n            <BalanceLabel\n              currency={balance1.currency}\n              issuer={balance1.issuer}\n            />\n            <span className=\"info-card-value\">\n              {parseAmount(balance1.amount)}\n            </span>\n          </div>\n        )}\n        {balance2 && (\n          <div className=\"info-card-row\">\n            <BalanceLabel\n              currency={balance2.currency}\n              issuer={balance2.issuer}\n            />\n            <span className=\"info-card-value\">\n              {parseAmount(balance2.amount)}\n            </span>\n          </div>\n        )}\n        {lpTokenBalance && (\n          <div className=\"info-card-row\">\n            <span className=\"info-card-label\">{t('lp_tokens')}</span>\n            <span className=\"info-card-value\">\n              <div>{parseAmount(lpTokenBalance)}</div>\n              {losData && (\n                <div className=\"info-card-subtitle\">\n                  {parseIntegerAmount(losData.liquidity_provider_count)}{' '}\n                  {t('liquidity_providers')}\n                </div>\n              )}\n            </span>\n          </div>\n        )}\n      </div>\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/AMMPool/InfoCards/test/AuctionCard.test.tsx",
    "content": "import { render, screen } from '@testing-library/react'\nimport { MemoryRouter } from 'react-router'\nimport { I18nextProvider } from 'react-i18next'\nimport i18n from '../../../../i18n/testConfig'\nimport { AuctionCard } from '../AuctionCard'\n\njest.mock('../../../shared/images/auction_icon.svg', () => ({\n  __esModule: true,\n  default: () => <svg data-testid=\"auction-icon\" />,\n}))\n\ninterface RenderProps {\n  auctionSlot?: {\n    account?: string\n    expiration?: string | number\n    discounted_fee?: number\n    price?: { value: string; currency: string; issuer?: string }\n    time_interval?: number\n  }\n  tvlUsd?: number\n  lpTokenBalance?: string\n  tradingFee: number\n}\n\nconst renderComponent = ({\n  auctionSlot,\n  tvlUsd,\n  lpTokenBalance,\n  tradingFee,\n}: RenderProps) =>\n  render(\n    <I18nextProvider i18n={i18n}>\n      <MemoryRouter>\n        <AuctionCard\n          auctionSlot={auctionSlot}\n          tvlUsd={tvlUsd}\n          lpTokenBalance={lpTokenBalance}\n          tradingFee={tradingFee}\n        />\n      </MemoryRouter>\n    </I18nextProvider>,\n  )\n\ndescribe('AuctionCard', () => {\n  const defaultAuctionSlot = {\n    account: 'rsWRnby4f9QzarQQs3MpRhBncUgKUC56Ff',\n    expiration: '2026-03-28T14:30:00+0000',\n    discounted_fee: 86,\n    price: {\n      value: '50000',\n      currency: '03930D02208264E2E40EC1B0C09E4DB96EE197B1',\n      issuer: 'rJbt6ryq1TzikBuvVQDaxVLqL77eJeibsj',\n    },\n    time_interval: 5,\n  }\n\n  const fullProps: RenderProps = {\n    auctionSlot: defaultAuctionSlot,\n    tvlUsd: 1000000,\n    lpTokenBalance: '5000000',\n    tradingFee: 500,\n  }\n\n  it('renders Auction title', () => {\n    renderComponent(fullProps)\n    expect(screen.getByText('auction')).toBeInTheDocument()\n  })\n\n  it('renders all field labels', () => {\n    renderComponent(fullProps)\n    expect(screen.getByText('current_holder')).toBeInTheDocument()\n    expect(screen.getByText('expiration')).toBeInTheDocument()\n    expect(screen.getByText('discounted_fee')).toBeInTheDocument()\n    expect(screen.getByText('price_paid')).toBeInTheDocument()\n    expect(screen.getByText('replacement_cost')).toBeInTheDocument()\n  })\n\n  it('renders discounted fee without truncation', () => {\n    renderComponent(fullProps)\n    // 86 / 1000 = 0.086, should show 0.086%\n    expect(screen.getByText('0.086%')).toBeInTheDocument()\n  })\n\n  it('shows -- for all fields when auctionSlot is undefined', () => {\n    renderComponent({ tradingFee: 500 })\n    const values = document.querySelectorAll('.info-card-value')\n    const dashValues = Array.from(values).filter((v) => v.textContent === '--')\n    expect(dashValues.length).toBe(5)\n  })\n\n  it('shows -- for expiration when not provided', () => {\n    renderComponent({\n      auctionSlot: { account: 'rTest' },\n      tradingFee: 500,\n    })\n    const rows = document.querySelectorAll('.info-card-row')\n    const expirationRow = Array.from(rows).find((r) =>\n      r.textContent?.includes('expiration'),\n    )\n    expect(expirationRow).toHaveTextContent('--')\n  })\n\n  it('renders Price Paid with LP token amount', () => {\n    renderComponent(fullProps)\n    expect(screen.getByText(/50\\.0K/)).toBeInTheDocument()\n  })\n\n  describe('Replacement Cost calculation', () => {\n    const withTimeInterval = (interval: number): RenderProps => ({\n      ...fullProps,\n      auctionSlot: { ...defaultAuctionSlot, time_interval: interval },\n    })\n\n    it('uses minimum bid formula for expired slot (time_interval=20)', () => {\n      renderComponent(withTimeInterval(20))\n      // M = TotalLP * (TradingFee/100000) / 25\n      // M = 5000000 * 0.005 / 25 = 1000\n      expect(screen.getByText(/1,000/)).toBeInTheDocument()\n    })\n\n    it('uses minimum bid for last interval (time_interval=19)', () => {\n      renderComponent(withTimeInterval(19))\n      // Same as expired: M = 1000\n      expect(screen.getByText(/1,000/)).toBeInTheDocument()\n    })\n\n    it('uses first interval formula (time_interval=0)', () => {\n      renderComponent(withTimeInterval(0))\n      // P = B * 1.05 + M = 50000 * 1.05 + 1000 = 53500 → \"53.5K\"\n      expect(screen.getByText(/53\\.5K/)).toBeInTheDocument()\n    })\n\n    it('uses decay formula for middle intervals', () => {\n      renderComponent(withTimeInterval(18))\n      // t = 18/20 = 0.9, t^60 ≈ 0.0018\n      // P = 50000 * 1.05 * (1 - 0.0018) + 1000 ≈ 53405.66 → \"53.4K\"\n      expect(screen.getByText(/53\\.4K/)).toBeInTheDocument()\n    })\n  })\n})\n"
  },
  {
    "path": "src/containers/AMMPool/InfoCards/test/BasicInfoCard.test.tsx",
    "content": "import { render, screen } from '@testing-library/react'\nimport { I18nextProvider } from 'react-i18next'\nimport i18n from '../../../../i18n/testConfig'\nimport { BasicInfoCard } from '../BasicInfoCard'\n\nconst defaults = {\n  ammAccountId: 'rLjUKpwUVmz3vCTmFkXungxwzdoyrWRsFG',\n  tradingFee: 864,\n  createdTimestamp: 827617760 as number | null | undefined,\n  lpTokenCurrency: '03CE60C3DB22CF7F7157810936F27A5B485C8DB9' as\n    | string\n    | undefined,\n}\n\nconst renderComponent = (overrides: Partial<typeof defaults> = {}) => {\n  const props = { ...defaults, ...overrides }\n  return render(\n    <I18nextProvider i18n={i18n}>\n      <BasicInfoCard\n        ammAccountId={props.ammAccountId}\n        tradingFee={props.tradingFee}\n        createdTimestamp={props.createdTimestamp}\n        lpTokenCurrency={props.lpTokenCurrency}\n      />\n    </I18nextProvider>,\n  )\n}\n\ndescribe('BasicInfoCard', () => {\n  it('renders Basic Info title', () => {\n    renderComponent()\n    expect(screen.getByText('basic_info')).toBeInTheDocument()\n  })\n\n  it('renders AMM Account ID label', () => {\n    renderComponent()\n    expect(screen.getByText('amm_account_id')).toBeInTheDocument()\n  })\n\n  it('renders trading fee without truncation', () => {\n    renderComponent()\n    // 864 / 1000 = 0.864, should show 0.864% not 0.86%\n    expect(screen.getByText('0.864%')).toBeInTheDocument()\n  })\n\n  it('renders trading fee of 1000 as 1%', () => {\n    renderComponent({ tradingFee: 1000 })\n    expect(screen.getByText('1%')).toBeInTheDocument()\n  })\n\n  it('renders LP Token label', () => {\n    renderComponent()\n    expect(screen.getByText('lp_token_currency_code')).toBeInTheDocument()\n  })\n\n  it('shows LP Token as second row after AMM Account ID', () => {\n    const { container } = renderComponent()\n    const rows = container.querySelectorAll('.info-card-row')\n    expect(rows.length).toBe(4)\n    // Order: AMM Account ID, LP Token, Trading Fee, Created On\n    expect(rows[0]).toHaveTextContent('amm_account_id')\n    expect(rows[1]).toHaveTextContent('lp_token_currency_code')\n    expect(rows[2]).toHaveTextContent('trading_fee')\n    expect(rows[3]).toHaveTextContent('created_on')\n  })\n\n  it('shows -- for created date when timestamp is null', () => {\n    renderComponent({ createdTimestamp: null })\n    const rows = Array.from(document.querySelectorAll('.info-card-row'))\n    const createdRow = rows.find((r) => r.textContent?.includes('created_on'))\n    expect(createdRow).toHaveTextContent('--')\n  })\n\n  it('does not render LP Token row when lpTokenCurrency is undefined', () => {\n    renderComponent({ lpTokenCurrency: undefined })\n    const rows = document.querySelectorAll('.info-card-row')\n    expect(rows.length).toBe(3)\n  })\n})\n"
  },
  {
    "path": "src/containers/AMMPool/InfoCards/test/MarketDataCard.test.tsx",
    "content": "import { render, screen } from '@testing-library/react'\nimport { I18nextProvider } from 'react-i18next'\nimport { MemoryRouter } from 'react-router'\nimport i18n from '../../../../i18n/testConfig'\nimport { MarketDataCard } from '../MarketDataCard'\nimport { TooltipProvider } from '../../../shared/components/Tooltip'\nimport { LOSAMMPoolData, FormattedBalance } from '../../types'\n\ninterface RenderProps {\n  losData?: LOSAMMPoolData\n  balance1?: FormattedBalance | null\n  balance2?: FormattedBalance | null\n  lpTokenBalance?: string\n}\n\nconst defaultLosData: LOSAMMPoolData = {\n  tvl_usd: 1234567.89,\n  tvl_xrp: 5000000,\n  trading_volume_usd: 50000,\n  trading_volume_xrp: 200000,\n  fees_collected_usd: 150,\n  fees_collected_xrp: 600,\n  annual_percentage_return: 0.0456,\n  liquidity_provider_count: 747,\n  issuer_1: 'rMxCKbEDwqr76QuheSUMdEGf4B9xJ8m5De',\n  currency_1: '524C555344000000000000000000000000000000',\n  issuer_2: null,\n  currency_2: 'XRP',\n  last_updated_timestamp: '2026-03-27T12:00:00Z',\n}\n\nconst defaultBalance1: FormattedBalance = {\n  currency: '524C555344000000000000000000000000000000',\n  issuer: 'rMxCKbEDwqr76QuheSUMdEGf4B9xJ8m5De',\n  amount: 100000,\n}\n\nconst defaultBalance2: FormattedBalance = { currency: 'XRP', amount: 50000 }\n\nconst renderComponent = ({\n  losData = defaultLosData,\n  balance1 = defaultBalance1,\n  balance2 = defaultBalance2,\n  lpTokenBalance = '1000000',\n}: RenderProps = {}) =>\n  render(\n    <I18nextProvider i18n={i18n}>\n      <MemoryRouter>\n        <TooltipProvider>\n          <MarketDataCard\n            losData={losData}\n            balance1={balance1}\n            balance2={balance2}\n            lpTokenBalance={lpTokenBalance}\n          />\n        </TooltipProvider>\n      </MemoryRouter>\n    </I18nextProvider>,\n  )\n\ndescribe('MarketDataCard', () => {\n  it('renders Market Data title', () => {\n    renderComponent()\n    expect(screen.getByText('market_data')).toBeInTheDocument()\n  })\n\n  it('renders LOS fields with correct formatted values', () => {\n    const { container } = renderComponent()\n    const rows = container.querySelectorAll('.info-card-row')\n    const getRowValue = (label: string) => {\n      const row = Array.from(rows).find((r) =>\n        r.querySelector('.info-card-label')?.textContent?.includes(label),\n      )\n      return row?.querySelector('.info-card-value')?.textContent\n    }\n\n    expect(screen.getByText('tvl')).toBeInTheDocument()\n    expect(getRowValue('tvl')).toBe('$1.2M')\n\n    expect(screen.getByText('volume_24h')).toBeInTheDocument()\n    expect(getRowValue('volume_24h')).toBe('$50.0K')\n\n    expect(screen.getByText('fees_24h')).toBeInTheDocument()\n    expect(getRowValue('fees_24h')).toBe('$150.00')\n\n    expect(screen.getByText('apr_24h')).toBeInTheDocument()\n    expect(getRowValue('apr_24h')).toBe('0.046%')\n  })\n\n  it('renders balances with correct formatted values', () => {\n    const { container } = renderComponent()\n    const labels = container.querySelectorAll('.info-card-label')\n    const balanceLabels = Array.from(labels).filter((l) =>\n      l.textContent?.includes('BALANCE'),\n    )\n    expect(balanceLabels.length).toBe(2)\n\n    const xrpLabel = balanceLabels.find((l) => l.textContent?.includes('XRP'))\n    expect(xrpLabel).toBeTruthy()\n    expect(\n      xrpLabel?.closest('.info-card-row')?.querySelector('.info-card-value')\n        ?.textContent,\n    ).toBe('50.0K')\n\n    const otherLabel = balanceLabels.find(\n      (l) => !l.textContent?.includes('XRP'),\n    )\n    expect(otherLabel).toBeTruthy()\n    expect(\n      otherLabel?.closest('.info-card-row')?.querySelector('.info-card-value')\n        ?.textContent,\n    ).toBe('100.0K')\n  })\n\n  it('renders LP Tokens with formatted value and liquidity provider count', () => {\n    const { container } = renderComponent()\n    const rows = container.querySelectorAll('.info-card-row')\n    const lpRow = Array.from(rows).find((r) =>\n      r.querySelector('.info-card-label')?.textContent?.includes('lp_tokens'),\n    )\n    expect(lpRow).toBeTruthy()\n    expect(lpRow?.querySelector('.info-card-value')?.textContent).toContain(\n      '1.0M',\n    )\n    expect(lpRow?.querySelector('.info-card-subtitle')?.textContent).toContain(\n      '747',\n    )\n  })\n\n  it('does not render balance or LP rows when balances and LP are absent', () => {\n    render(\n      <I18nextProvider i18n={i18n}>\n        <MemoryRouter>\n          <TooltipProvider>\n            <MarketDataCard\n              losData={defaultLosData}\n              balance1={null}\n              balance2={null}\n              lpTokenBalance={undefined}\n            />\n          </TooltipProvider>\n        </MemoryRouter>\n      </I18nextProvider>,\n    )\n    const labels = document.querySelectorAll('.info-card-label')\n    const balanceLabels = Array.from(labels).filter((l) =>\n      l.textContent?.includes('BALANCE'),\n    )\n    expect(balanceLabels.length).toBe(0)\n    expect(screen.queryByText('lp_tokens')).not.toBeInTheDocument()\n  })\n\n  it('renders only balances and LP tokens when losData is undefined', () => {\n    const { container } = render(\n      <I18nextProvider i18n={i18n}>\n        <MemoryRouter>\n          <TooltipProvider>\n            <MarketDataCard\n              balance1={defaultBalance1}\n              balance2={defaultBalance2}\n              lpTokenBalance=\"1000000\"\n            />\n          </TooltipProvider>\n        </MemoryRouter>\n      </I18nextProvider>,\n    )\n    // LOS fields hidden\n    expect(screen.queryByText('tvl')).not.toBeInTheDocument()\n    expect(screen.queryByText('volume_24h')).not.toBeInTheDocument()\n    expect(screen.queryByText('fees_24h')).not.toBeInTheDocument()\n    expect(screen.queryByText('apr_24h')).not.toBeInTheDocument()\n    expect(screen.queryByText(/liquidity_providers/)).not.toBeInTheDocument()\n    // Balances still shown with correct values\n    const labels = container.querySelectorAll('.info-card-label')\n    const balanceLabels = Array.from(labels).filter((l) =>\n      l.textContent?.includes('BALANCE'),\n    )\n    expect(balanceLabels.length).toBe(2)\n    expect(screen.getByText('100.0K')).toBeInTheDocument()\n    expect(screen.getByText('50.0K')).toBeInTheDocument()\n    // LP tokens still shown\n    expect(screen.getByText('lp_tokens')).toBeInTheDocument()\n    expect(screen.getByText('1.0M')).toBeInTheDocument()\n  })\n})\n"
  },
  {
    "path": "src/containers/AMMPool/TablePicker/AMMDepositWithdrawTable.tsx",
    "content": "import { FC, useEffect, useRef } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { Link } from 'react-router'\nimport { Account } from '../../shared/components/Account'\nimport { Amount } from '../../shared/components/Amount'\nimport { Loader } from '../../shared/components/Loader'\nimport { EmptyStateMessage } from '../../shared/components/EmptyStateMessage'\nimport { Pagination } from '../../shared/components/Pagination'\nimport { ResponsiveTimestamp } from '../../shared/components/ResponsiveTimestamp'\nimport {\n  parseAmount,\n  parseCurrencyAmount,\n} from '../../shared/NumberFormattingUtils'\nimport { shortenAccount, shortenTxHash } from '../../shared/utils'\nimport { useLanguage } from '../../shared/hooks'\nimport { AMMDepositWithdrawFormatted } from '../types'\n\ninterface AMMDepositWithdrawTableProps {\n  transactions: AMMDepositWithdrawFormatted[]\n  isLoading: boolean\n  totalItems: number\n  currentPage: number\n  onPageChange: (page: number) => void\n  pageSize: number\n  hasMore: boolean\n  type: 'deposit' | 'withdraw'\n}\n\nexport const AMMDepositWithdrawTable: FC<AMMDepositWithdrawTableProps> = ({\n  transactions,\n  isLoading,\n  totalItems,\n  currentPage,\n  onPageChange,\n  pageSize,\n  hasMore,\n  type,\n}) => {\n  const { t } = useTranslation()\n  const language = useLanguage()\n  const tableRef = useRef<HTMLTableElement>(null)\n\n  useEffect(() => {\n    if (!isLoading) {\n      requestAnimationFrame(() => {\n        requestAnimationFrame(() => {\n          const tableContainer = tableRef.current?.closest(\n            '.amm-deposit-withdraw-table',\n          )\n          if (tableContainer) {\n            const rect = tableContainer.getBoundingClientRect()\n            const scrollTop = window.scrollY + rect.top - 200\n            window.scrollTo({ top: scrollTop, behavior: 'smooth' })\n          }\n        })\n      })\n    }\n  }, [currentPage, isLoading])\n\n  const lpTokenLabel =\n    type === 'deposit' ? t('lp_tokens_received') : t('lp_tokens_redeemed')\n\n  const renderAssetAmount = (asset: AMMDepositWithdrawFormatted['asset']) => {\n    if (!asset || Number(asset.amount) === 0) {\n      return '--'\n    }\n\n    return <Amount value={asset} displayIssuer shortenIssuer useParseAmount />\n  }\n\n  const renderTransaction = (tx: AMMDepositWithdrawFormatted) => (\n    <tr key={`${tx.hash}-${tx.ledger}`}>\n      <td className=\"tx-hash\">\n        <Link to={`/transactions/${tx.hash}`}>{shortenTxHash(tx.hash)}</Link>\n      </td>\n      <td className=\"tx-ledger\">\n        <Link to={`/ledgers/${tx.ledger}`}>{tx.ledger}</Link>\n      </td>\n      <td className=\"tx-timestamp\">\n        <ResponsiveTimestamp timestamp={tx.timestamp} lang={language} />\n      </td>\n      <td className=\"tx-account\">\n        <span className=\"text-truncate\">\n          <Account\n            account={tx.account}\n            displayText={shortenAccount(tx.account)}\n          />\n        </span>\n      </td>\n      <td className=\"tx-asset\">{renderAssetAmount(tx.asset)}</td>\n      <td className=\"tx-asset2\">{renderAssetAmount(tx.asset2)}</td>\n      <td className=\"tx-lp-tokens\">\n        {tx.lpTokens ? parseAmount(tx.lpTokens) : '--'}\n      </td>\n      <td className=\"tx-usd-value\">\n        {tx.valueUsd != null ? parseCurrencyAmount(tx.valueUsd) : '--'}\n      </td>\n    </tr>\n  )\n\n  return (\n    <div className=\"amm-deposit-withdraw-table\">\n      {isLoading && <Loader />}\n\n      {!isLoading && transactions.length > 0 && (\n        <>\n          <div className=\"notice-with-controls\">\n            <div className=\"data-notice\">{t('data_available_from_notice')}</div>\n          </div>\n          <div className=\"table-wrap\">\n            <table className=\"basic\" ref={tableRef}>\n              <thead>\n                <tr>\n                  <th className=\"tx-hash\">{t('tx_hash')}</th>\n                  <th className=\"tx-ledger\">{t('ledger')}</th>\n                  <th className=\"tx-timestamp\">{t('timestamp')}</th>\n                  <th className=\"tx-account\">{t('account')}</th>\n                  <th className=\"tx-asset\">{t('asset')}</th>\n                  <th className=\"tx-asset2\">{t('asset_2')}</th>\n                  <th className=\"tx-lp-tokens\">{lpTokenLabel}</th>\n                  <th className=\"tx-usd-value\">{t('usd_value')}</th>\n                </tr>\n              </thead>\n              <tbody>{transactions.map(renderTransaction)}</tbody>\n            </table>\n          </div>\n          {(hasMore || currentPage > 1) && (\n            <Pagination\n              currentPage={currentPage}\n              onPageChange={onPageChange}\n              totalItems={totalItems}\n              pageSize={pageSize}\n              scrollToTop={null}\n              showLastPage={!hasMore}\n            />\n          )}\n        </>\n      )}\n\n      {!isLoading && transactions.length === 0 && (\n        <EmptyStateMessage\n          message={type === 'deposit' ? t('no_deposits') : t('no_withdrawals')}\n        />\n      )}\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/AMMPool/TablePicker/index.tsx",
    "content": "import { FC, useState, useCallback, useContext } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { useQuery, useInfiniteQuery } from 'react-query'\nimport { Tabs } from '../../shared/components/Tabs'\nimport { TransactionTable } from '../../shared/components/TransactionTable/TransactionTable'\nimport SocketContext from '../../shared/SocketContext'\nimport { useAnalytics } from '../../shared/analytics'\nimport { getAccountTransactions } from '../../../rippled'\nimport {\n  DexTradeTable,\n  DexTradeFormatted,\n} from '../../shared/components/DexTradeTable/DexTradeTable'\nimport { formatDexTrade } from '../../shared/components/DexTradeTable/formatDexTrade'\nimport {\n  HoldersTable,\n  XRPLHolder,\n} from '../../shared/components/HoldersTable/HoldersTable'\nimport { CursorPaginationService } from '../../shared/services/CursorPaginationService'\nimport { useCursorPaginatedQuery } from '../../shared/hooks/useCursorPaginatedQuery'\nimport { fetchAMMDexTrades, fetchAMMTransactions } from '../api'\nimport { AMMDepositWithdrawTable } from './AMMDepositWithdrawTable'\nimport { AMMDepositWithdrawFormatted } from '../types'\nimport { formatDepositWithdraw } from '../utils'\nimport getTokenHolders from '../../Token/IOU/api/holders'\n\nconst BATCH_SIZE = 200\nconst PAGE_SIZE = 10\n\n// DEX trades pagination — format function doesn't depend on pool assets\nconst dexTradesPagination = new CursorPaginationService<DexTradeFormatted>({\n  fetchFn: (id, size, cursor, direction, sortField, sortOrder) =>\n    fetchAMMDexTrades(id, size, cursor, direction, sortField, sortOrder),\n  formatFn: formatDexTrade,\n  batchSize: BATCH_SIZE,\n  pageSize: PAGE_SIZE,\n})\n\nconst depositsPagination =\n  new CursorPaginationService<AMMDepositWithdrawFormatted>({\n    fetchFn: (id, size, cursor, direction) =>\n      fetchAMMTransactions(id, 'AMMDeposit', size, cursor, direction),\n    formatFn: formatDepositWithdraw,\n    batchSize: BATCH_SIZE,\n    pageSize: PAGE_SIZE,\n  })\n\nconst withdrawalsPagination =\n  new CursorPaginationService<AMMDepositWithdrawFormatted>({\n    fetchFn: (id, size, cursor, direction) =>\n      fetchAMMTransactions(id, 'AMMWithdraw', size, cursor, direction),\n    formatFn: formatDepositWithdraw,\n    batchSize: BATCH_SIZE,\n    pageSize: PAGE_SIZE,\n  })\n\ninterface AMMPoolTablePickerProps {\n  ammAccountId: string\n  tab: string\n  isMainnet: boolean\n  lpToken?: { currency: string; issuer: string; value: string }\n  tvlUsd?: number\n  isDeleted?: boolean\n}\n\nexport const AMMPoolTablePicker: FC<AMMPoolTablePickerProps> = ({\n  ammAccountId,\n  tab,\n  isMainnet,\n  lpToken,\n  tvlUsd,\n  isDeleted = false,\n}) => {\n  const { t } = useTranslation()\n  const { trackException } = useAnalytics()\n  const rippledSocket = useContext(SocketContext)\n  const [activeTab, setActiveTab] = useState(tab || 'transactions')\n\n  // All Transactions — fetch via rippled account_tx\n  const {\n    data: txData,\n    error: txError,\n    isFetching: txLoading,\n    fetchNextPage: txFetchNextPage,\n    hasNextPage: txHasNextPage,\n  } = useInfiniteQuery<any, Error>(\n    ['fetchTransactions', ammAccountId],\n    ({ pageParam = '' }) =>\n      getAccountTransactions(\n        ammAccountId,\n        undefined,\n        pageParam,\n        undefined,\n        rippledSocket,\n      ).catch((err) => {\n        trackException(\n          `account transactions ${ammAccountId} at ${pageParam} --- ${JSON.stringify(err)}`,\n        )\n        throw new Error('get_account_transactions_failed')\n      }),\n    { getNextPageParam: (lastPage) => lastPage.marker },\n  )\n  const allTransactions =\n    txData?.pages?.reduce(\n      (acc: any[], page: any) =>\n        page.transactions ? acc.concat(page.transactions) : acc,\n      [],\n    ) || []\n  const getTxEmptyMessage = () => {\n    if (allTransactions.length === 0 && txData?.pages[0]?.transactions) {\n      return t('get_account_transactions_try' as any)\n    }\n    return txError?.message ? t(txError.message as any) : ''\n  }\n  const txEmptyMessage = getTxEmptyMessage()\n\n  // DEX Trades — using shared hook\n  const dexTrades = useCursorPaginatedQuery({\n    service: dexTradesPagination,\n    id: ammAccountId,\n    pageSize: PAGE_SIZE,\n    enabled: isMainnet,\n  })\n\n  // Deposits — using shared hook\n  const deposits = useCursorPaginatedQuery({\n    service: depositsPagination,\n    id: ammAccountId,\n    pageSize: PAGE_SIZE,\n    enabled: isMainnet,\n  })\n\n  // Withdrawals — using shared hook\n  const withdrawals = useCursorPaginatedQuery({\n    service: withdrawalsPagination!,\n    id: ammAccountId,\n    pageSize: PAGE_SIZE,\n    enabled: isMainnet,\n  })\n\n  // Holders\n  const holdersPageSize = 20\n  const [holdersPage, setHoldersPage] = useState(1)\n  const { data: holdersData, isLoading: holdersLoading } = useQuery(\n    ['ammHolders', lpToken?.currency, lpToken?.issuer, holdersPage],\n    () =>\n      getTokenHolders(\n        lpToken!.currency,\n        lpToken!.issuer,\n        holdersPageSize,\n        (holdersPage - 1) * holdersPageSize,\n      ),\n    { enabled: isMainnet && !!lpToken?.currency },\n  )\n\n  // Calculate USD value for each holder based on their LP token share of TVL\n  const holdersFormatted: XRPLHolder[] = (holdersData?.holders || []).map(\n    (holder: any, index: number) => {\n      let holderUsd: number | null = null\n      if (tvlUsd != null && lpToken?.value) {\n        const totalLP = Number(lpToken.value)\n        if (totalLP > 0) {\n          holderUsd = (Number(holder.balance) / totalLP) * tvlUsd\n        }\n      }\n      return {\n        ...holder,\n        rank: (holdersPage - 1) * holdersPageSize + index + 1,\n        value_usd: holderUsd,\n      }\n    },\n  )\n\n  const handleTabChange = useCallback((tabId: string) => {\n    setActiveTab(tabId)\n  }, [])\n\n  const tabs = [\n    { id: 'transactions', labelKey: 'all_transactions' },\n    ...(isMainnet\n      ? [\n          { id: 'dex-trades', labelKey: 'dex_trades' },\n          { id: 'deposits', labelKey: 'deposits' },\n          { id: 'withdrawals', labelKey: 'withdrawals' },\n          ...(!isDeleted ? [{ id: 'holders', labelKey: 'holders' }] : []),\n        ]\n      : []),\n  ]\n\n  return (\n    <div className=\"amm-pool-tables\">\n      <hr className=\"full-width-line\" />\n      <div className=\"tx-table-picker\">\n        <Tabs tabs={tabs} selected={activeTab} onTabChange={handleTabChange} />\n      </div>\n\n      {activeTab === 'transactions' && (\n        <TransactionTable\n          transactions={allTransactions}\n          loading={txLoading}\n          hasTokensColumn\n          emptyMessage={txEmptyMessage}\n          onLoadMore={() => txFetchNextPage()}\n          hasAdditionalResults={txHasNextPage}\n        />\n      )}\n\n      {activeTab === 'dex-trades' && isMainnet && (\n        <DexTradeTable\n          transactions={dexTrades.data?.items || []}\n          isLoading={dexTrades.isLoading}\n          totalTrades={dexTrades.data?.totalItems || 0}\n          currentPage={dexTrades.page}\n          onPageChange={dexTrades.setPage}\n          pageSize={PAGE_SIZE}\n          hasMore={dexTrades.data?.hasMore}\n          hasPrevPage={dexTrades.page > 1}\n          hideType\n          sortField={dexTrades.sortField}\n          setSortField={dexTrades.setSortField}\n          sortOrder={dexTrades.sortOrder}\n          setSortOrder={dexTrades.setSortOrder}\n          onRefresh={dexTrades.refresh}\n        />\n      )}\n\n      {activeTab === 'deposits' && isMainnet && (\n        <AMMDepositWithdrawTable\n          transactions={deposits.data?.items || []}\n          isLoading={deposits.isLoading}\n          totalItems={deposits.data?.totalItems || 0}\n          currentPage={deposits.page}\n          onPageChange={deposits.setPage}\n          pageSize={PAGE_SIZE}\n          hasMore={deposits.data?.hasMore || false}\n          type=\"deposit\"\n        />\n      )}\n\n      {activeTab === 'withdrawals' && isMainnet && (\n        <AMMDepositWithdrawTable\n          transactions={withdrawals.data?.items || []}\n          isLoading={withdrawals.isLoading}\n          totalItems={withdrawals.data?.totalItems || 0}\n          currentPage={withdrawals.page}\n          onPageChange={withdrawals.setPage}\n          pageSize={PAGE_SIZE}\n          hasMore={withdrawals.data?.hasMore || false}\n          type=\"withdraw\"\n        />\n      )}\n\n      {activeTab === 'holders' && isMainnet && (\n        <HoldersTable\n          holders={holdersFormatted}\n          isHoldersDataLoading={holdersLoading}\n          totalHolders={holdersData?.totalHolders || 0}\n          currentPage={holdersPage}\n          onPageChange={setHoldersPage}\n          pageSize={holdersPageSize}\n        />\n      )}\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/AMMPool/TablePicker/test/AMMDepositWithdrawTable.test.tsx",
    "content": "import { render, screen } from '@testing-library/react'\nimport { MemoryRouter } from 'react-router'\nimport { I18nextProvider } from 'react-i18next'\nimport { QueryClient, QueryClientProvider } from 'react-query'\nimport i18n from '../../../../i18n/testConfig'\nimport { AMMDepositWithdrawTable } from '../AMMDepositWithdrawTable'\nimport { AMMDepositWithdrawFormatted } from '../../types'\n\nconst queryClient = new QueryClient({\n  defaultOptions: { queries: { retry: false } },\n})\n\ninterface RenderProps {\n  transactions?: AMMDepositWithdrawFormatted[]\n  isLoading?: boolean\n  totalItems?: number\n  currentPage?: number\n  onPageChange?: (page: number) => void\n  pageSize?: number\n  hasMore?: boolean\n  type?: 'deposit' | 'withdraw'\n}\n\nconst renderComponent = ({\n  transactions = [],\n  isLoading = false,\n  totalItems = 20,\n  currentPage = 1,\n  onPageChange = jest.fn(),\n  pageSize = 10,\n  hasMore = true,\n  type = 'deposit',\n}: RenderProps = {}) =>\n  render(\n    <QueryClientProvider client={queryClient}>\n      <I18nextProvider i18n={i18n}>\n        <MemoryRouter>\n          <AMMDepositWithdrawTable\n            transactions={transactions}\n            isLoading={isLoading}\n            totalItems={totalItems}\n            currentPage={currentPage}\n            onPageChange={onPageChange}\n            pageSize={pageSize}\n            hasMore={hasMore}\n            type={type}\n          />\n        </MemoryRouter>\n      </I18nextProvider>\n    </QueryClientProvider>,\n  )\n\ndescribe('AMMDepositWithdrawTable', () => {\n  const mockTransactions: AMMDepositWithdrawFormatted[] = [\n    {\n      hash: 'ABC123DEF456ABC123DEF456ABC123DEF456ABC123DEF456ABC123DEF456ABCD',\n      ledger: 100141108,\n      timestamp: 827617760,\n      account: 'rP9f2dDqH7zX1234567890123456789012',\n      asset: {\n        currency: '524C555344000000000000000000000000000000',\n        issuer: 'rMxCKbEDwqr76QuheSUMdEGf4B9xJ8m5De',\n        amount: 246,\n      },\n      asset2: { currency: 'XRP', amount: 113.73 },\n      lpTokens: '12845',\n      valueUsd: 362500,\n    },\n    {\n      hash: 'DEF789GHI012DEF789GHI012DEF789GHI012DEF789GHI012DEF789GHI012DEFG',\n      ledger: 100141109,\n      timestamp: 827617800,\n      account: 'rMeP9RditJ3j1234567890123456789012',\n      asset: null,\n      asset2: { currency: 'XRP', amount: 88.63 },\n      lpTokens: '5912',\n      valueUsd: null,\n    },\n  ]\n\n  it('renders column headers', () => {\n    renderComponent({ transactions: mockTransactions })\n    expect(screen.getByText('tx_hash')).toBeInTheDocument()\n    expect(screen.getByText('ledger')).toBeInTheDocument()\n    expect(screen.getByText('timestamp')).toBeInTheDocument()\n    expect(screen.getByText('account')).toBeInTheDocument()\n    expect(screen.getByText('asset')).toBeInTheDocument()\n    expect(screen.getByText('asset_2')).toBeInTheDocument()\n    expect(screen.getByText('lp_tokens_received')).toBeInTheDocument()\n    expect(screen.getByText('usd_value')).toBeInTheDocument()\n  })\n\n  it('shows lp_tokens_redeemed for withdraw type', () => {\n    renderComponent({ transactions: mockTransactions, type: 'withdraw' })\n    expect(screen.getByText('lp_tokens_redeemed')).toBeInTheDocument()\n  })\n\n  it('renders transaction rows', () => {\n    const { container } = renderComponent({ transactions: mockTransactions })\n    const rows = container.querySelectorAll('tbody tr')\n    expect(rows.length).toBe(2)\n  })\n\n  it('shows -- for missing asset (single-asset deposit)', () => {\n    renderComponent({ transactions: mockTransactions })\n    const rows = document.querySelectorAll('tbody tr')\n    expect(rows[1].querySelector('.tx-asset')).toHaveTextContent('--')\n  })\n\n  it('shows -- for missing USD value', () => {\n    renderComponent({ transactions: mockTransactions })\n    const rows = document.querySelectorAll('tbody tr')\n    expect(rows[1].querySelector('.tx-usd-value')).toHaveTextContent('--')\n  })\n\n  it('renders data notice banner', () => {\n    renderComponent({ transactions: mockTransactions })\n    expect(document.querySelector('.data-notice')).toBeInTheDocument()\n  })\n\n  it('shows loader when loading', () => {\n    const { container } = renderComponent({ isLoading: true })\n    expect(container.querySelector('.loader')).toBeInTheDocument()\n  })\n\n  it('shows empty message when no deposit transactions', () => {\n    renderComponent()\n    expect(screen.getByText('no_deposits')).toBeInTheDocument()\n  })\n\n  it('shows withdrawal empty message for withdraw type', () => {\n    renderComponent({ type: 'withdraw' })\n    expect(screen.getByText('no_withdrawals')).toBeInTheDocument()\n  })\n\n  it('renders ledger as a link', () => {\n    renderComponent({ transactions: mockTransactions })\n    const ledgerLink = screen.getByText('100141108')\n    expect(ledgerLink.closest('a')).toHaveAttribute(\n      'href',\n      '/ledgers/100141108',\n    )\n  })\n})\n"
  },
  {
    "path": "src/containers/AMMPool/TablePicker/test/index.test.tsx",
    "content": "import { render, screen, waitFor } from '@testing-library/react'\nimport userEvent from '@testing-library/user-event'\nimport { MemoryRouter } from 'react-router'\nimport { I18nextProvider } from 'react-i18next'\nimport { QueryClient, QueryClientProvider } from 'react-query'\nimport i18n from '../../../../i18n/testConfig'\nimport { AMMPoolTablePicker } from '../index'\n\nconst mockGetAccountTransactions = jest.fn().mockResolvedValue({\n  transactions: [],\n})\njest.mock('../../../../rippled', () => ({\n  getAccountTransactions: (...args: any[]) =>\n    mockGetAccountTransactions(...args),\n}))\n\njest.mock('../../api', () => ({\n  fetchAMMDexTrades: jest.fn().mockResolvedValue({ data: [], total: 0 }),\n  fetchAMMTransactions: jest.fn().mockResolvedValue({ data: [], total: 0 }),\n}))\n\njest.mock('../../../Token/IOU/api/holders', () =>\n  jest.fn().mockResolvedValue({ holders: [], totalHolders: 0 }),\n)\n\njest.mock('../../../shared/SocketContext', () => ({\n  __esModule: true,\n  default: {\n    _currentValue: { send: jest.fn() },\n  },\n}))\n\njest.mock('../../../shared/analytics', () => ({\n  useAnalytics: () => ({\n    trackException: jest.fn(),\n    trackScreenLoaded: jest.fn(),\n  }),\n}))\n\nconst queryClient = new QueryClient({\n  defaultOptions: { queries: { retry: false } },\n})\n\ninterface RenderProps {\n  ammAccountId?: string\n  tab?: string\n  isMainnet?: boolean\n  lpToken?: { currency: string; issuer: string; value: string }\n  tvlUsd?: number\n  isDeleted?: boolean\n}\n\nconst renderComponent = ({\n  ammAccountId = 'rLjUKpwUVmz3vCTmFkXungxwzdoyrWRsFG',\n  tab = 'transactions',\n  isMainnet = true,\n  lpToken = {\n    currency: '03CE60C3DB22CF7F7157810936F27A5B485C8DB9',\n    issuer: 'rJbt6ryq1TzikBuvVQDaxVLqL77eJeibsj',\n    value: '5000000',\n  },\n  tvlUsd = 1000000,\n  isDeleted = false,\n}: RenderProps = {}) =>\n  render(\n    <QueryClientProvider client={queryClient}>\n      <I18nextProvider i18n={i18n}>\n        <MemoryRouter>\n          <AMMPoolTablePicker\n            ammAccountId={ammAccountId}\n            tab={tab}\n            isMainnet={isMainnet}\n            lpToken={lpToken}\n            tvlUsd={tvlUsd}\n            isDeleted={isDeleted}\n          />\n        </MemoryRouter>\n      </I18nextProvider>\n    </QueryClientProvider>,\n  )\n\ndescribe('AMMPoolTablePicker', () => {\n  beforeEach(() => {\n    jest.clearAllMocks()\n    queryClient.clear()\n  })\n\n  it('renders all tabs on mainnet', () => {\n    renderComponent()\n    expect(screen.getByText('all_transactions')).toBeInTheDocument()\n    expect(screen.getByText('dex_trades')).toBeInTheDocument()\n    expect(screen.getByText('deposits')).toBeInTheDocument()\n    expect(screen.getByText('withdrawals')).toBeInTheDocument()\n    expect(screen.getByText('holders')).toBeInTheDocument()\n  })\n\n  it('renders only transactions tab on non-mainnet', () => {\n    renderComponent({ isMainnet: false })\n    expect(screen.getByText('all_transactions')).toBeInTheDocument()\n    expect(screen.queryByText('dex_trades')).toBeNull()\n    expect(screen.queryByText('deposits')).toBeNull()\n    expect(screen.queryByText('withdrawals')).toBeNull()\n    expect(screen.queryByText('holders')).toBeNull()\n  })\n\n  it('hides holders tab when pool is deleted', () => {\n    renderComponent({ isDeleted: true })\n    expect(screen.getByText('all_transactions')).toBeInTheDocument()\n    expect(screen.getByText('dex_trades')).toBeInTheDocument()\n    expect(screen.queryByText('holders')).toBeNull()\n  })\n\n  it('defaults to transactions tab', () => {\n    renderComponent()\n    const tabsContainer = document.querySelector('.tx-table-picker')\n    expect(tabsContainer).toBeInTheDocument()\n  })\n\n  it('switches tab when clicked', async () => {\n    renderComponent()\n\n    await userEvent.click(screen.getByText('dex_trades'))\n    // After clicking dex_trades, the DexTradeTable should render\n    // (it will show empty state since mock returns no data)\n  })\n\n  it('uses provided tab as initial active tab', () => {\n    renderComponent({ tab: 'dex-trades' })\n    // The dex-trades tab should be active (component renders its content)\n  })\n\n  it('shows error message when account transactions fail', async () => {\n    mockGetAccountTransactions.mockRejectedValueOnce(\n      new Error('get_account_transactions_failed'),\n    )\n\n    renderComponent()\n\n    await waitFor(() => {\n      expect(\n        screen.getByText('get_account_transactions_failed'),\n      ).toBeInTheDocument()\n    })\n  })\n})\n"
  },
  {
    "path": "src/containers/AMMPool/api.ts",
    "content": "import axios from 'axios'\nimport type { ExplorerXrplClient } from '../shared/SocketContext'\nimport {\n  LOSAMMPoolData,\n  HistoricalTrendsResponse,\n  LOSAMMDepositWithdrawRaw,\n  LOSCursor,\n  LOSCursorResponse,\n} from './types'\nimport { LOSDexTradeRaw } from '../shared/components/DexTradeTable/formatDexTrade'\n\nconst LOS_URL = process.env.VITE_LOS_URL\n\n/** Fetch AMM pool market data from LOS (mainnet only) */\nexport const fetchAMMPoolData = async (\n  ammAccountId: string,\n): Promise<LOSAMMPoolData> => {\n  const response = await axios.get(`${LOS_URL}/amms/${ammAccountId}`)\n  return response.data\n}\n\n/** Fetch historical trends for a specific AMM pool from LOS */\nexport const fetchAMMHistoricalTrends = async (\n  ammAccountId: string,\n  timeRange: string = '6M',\n): Promise<HistoricalTrendsResponse> => {\n  const response = await axios.get(`${LOS_URL}/amms/historical-trends`, {\n    params: {\n      amm_account_id: ammAccountId,\n      time_range: timeRange,\n    },\n  })\n  return response.data\n}\n\n/** Fetch DEX trades for an AMM pool from LOS */\nexport const fetchAMMDexTrades = async (\n  ammAccountId: string,\n  size?: number,\n  searchAfter?: LOSCursor,\n  direction?: string,\n  sortField?: string,\n  sortOrder?: string,\n): Promise<LOSCursorResponse<LOSDexTradeRaw>> => {\n  const params = new URLSearchParams({\n    account: ammAccountId,\n    size: (size ?? 100).toString(),\n    type: 'amm',\n  })\n  if (searchAfter) {\n    params.append('search_after', JSON.stringify(searchAfter))\n  }\n  if (direction) {\n    params.append('direction', direction)\n  }\n  if (sortField) {\n    params.append('sort_field', sortField)\n  }\n  if (sortOrder) {\n    params.append('sort_order', sortOrder)\n  }\n\n  const response = await axios.get(`${LOS_URL}/dex-trades?${params.toString()}`)\n  return response.data\n}\n\n/** Fetch AMMDeposit or AMMWithdraw transactions from LOS */\nexport const fetchAMMTransactions = async (\n  ammAccountId: string,\n  type: 'AMMDeposit' | 'AMMWithdraw',\n  size?: number,\n  searchAfter?: LOSCursor,\n  direction?: string,\n): Promise<LOSCursorResponse<LOSAMMDepositWithdrawRaw>> => {\n  const params = new URLSearchParams({\n    account: ammAccountId,\n    type,\n    size: (size ?? 100).toString(),\n  })\n  if (searchAfter) {\n    params.append('search_after', JSON.stringify(searchAfter))\n  }\n  if (direction) {\n    params.append('direction', direction)\n  }\n\n  const response = await axios.get(\n    `${LOS_URL}/v2/transactions?${params.toString()}`,\n  )\n  return response.data\n}\n\n/**\n * Fetch the creation timestamp of an AMM pool.\n * Gets the first transaction (AMMCreate) via account_tx with forward=true.\n */\nexport const fetchAMMCreatedTimestamp = async (\n  rippledSocket: ExplorerXrplClient,\n  ammAccountId: string,\n): Promise<number | null> => {\n  const resp = await rippledSocket.send({\n    command: 'account_tx',\n    account: ammAccountId,\n    limit: 1,\n    forward: true,\n    ledger_index_min: -1,\n    ledger_index_max: -1,\n  })\n  if (resp?.transactions?.[0]?.tx) {\n    return resp.transactions[0].tx.date\n  }\n  return null\n}\n"
  },
  {
    "path": "src/containers/AMMPool/index.tsx",
    "content": "import { FC, PropsWithChildren, useContext, useEffect, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { useParams } from 'react-router'\nimport { Helmet } from 'react-helmet-async'\nimport { useQuery } from 'react-query'\nimport NoMatch from '../NoMatch'\nimport { Loader } from '../shared/components/Loader'\nimport SocketContext from '../shared/SocketContext'\nimport { useAnalytics } from '../shared/analytics'\nimport { getAMMInfoByAMMAccount } from '../../rippled/lib/rippled'\nimport { NOT_FOUND, BAD_REQUEST } from '../shared/utils'\nimport { ErrorMessage } from '../shared/Interfaces'\nimport { formatAmount } from '../../rippled/lib/txSummary/formatAmount'\nimport { Tooltip, useTooltip } from '../shared/components/Tooltip'\nimport { AMMPoolHeader } from './AMMPoolHeader'\nimport { BasicInfoCard } from './InfoCards/BasicInfoCard'\nimport { MarketDataCard } from './InfoCards/MarketDataCard'\nimport { AuctionCard } from './InfoCards/AuctionCard'\nimport { AMMPoolTablePicker } from './TablePicker'\nimport { TVLVolumeChart } from '../shared/components/TVLVolumeChart'\nimport {\n  fetchAMMPoolData,\n  fetchAMMCreatedTimestamp,\n  fetchAMMHistoricalTrends,\n} from './api'\nimport { getDeletedAMMData, DeletedAMMData } from './utils'\nimport { AuctionSlot, FormattedBalance, HistoricalDataPoint } from './types'\nimport InfoIcon from '../shared/images/info-duotone.svg'\nimport './styles.scss'\n\nconst ERROR_MESSAGES: { [code: number]: ErrorMessage } = {\n  [NOT_FOUND]: {\n    title: 'amm_not_found',\n    hints: ['check_amm_id'],\n  },\n  [BAD_REQUEST]: {\n    title: 'invalid_amm_id',\n    hints: ['check_amm_id'],\n  },\n}\n\nconst DEFAULT_ERROR: ErrorMessage = {\n  title: 'get_amm_failed',\n  hints: ['not_your_fault'],\n}\n\nconst getErrorMessage = (error: number | null) =>\n  error ? (ERROR_MESSAGES[error] ?? DEFAULT_ERROR) : DEFAULT_ERROR\n\nconst Page: FC<PropsWithChildren<{ ammAccountId: string }>> = ({\n  ammAccountId,\n  children,\n}) => (\n  <div className=\"amm-pool-page section\">\n    <Helmet title={`AMM Pool ${ammAccountId.substring(0, 12)}...`} />\n    {children}\n  </div>\n)\n\n/** Order assets: non-XRP first, XRP second (for header display) */\nconst orderAssets = (\n  b1: FormattedBalance | null,\n  b2: FormattedBalance | null,\n): [FormattedBalance | null, FormattedBalance | null] => {\n  if (b1 && b2 && b1.currency === 'XRP') {\n    return [b2, b1]\n  }\n  return [b1, b2]\n}\n\n/**\n * Build FormattedBalance objects from deleted AMM data.\n * Deleted pools have no live balances, so amount is 0.\n */\nconst buildDeletedBalances = (\n  data: DeletedAMMData,\n): [FormattedBalance, FormattedBalance] => [\n  {\n    currency: data.asset.currency,\n    issuer: data.asset.issuer,\n    amount: 0,\n  },\n  {\n    currency: data.asset2.currency,\n    issuer: data.asset2.issuer,\n    amount: 0,\n  },\n]\n\nexport const AMMPool = () => {\n  const { t } = useTranslation()\n  const { trackScreenLoaded, trackException } = useAnalytics()\n  const { id: ammAccountId = '', tab = 'transactions' } = useParams<{\n    id: string\n    tab: string\n  }>()\n  const [error, setError] = useState<number | null>(null)\n  const [displayCurrency, setDisplayCurrency] = useState<'usd' | 'xrp'>('usd')\n  const rippledSocket = useContext(SocketContext)\n  const isMainnet = process.env.VITE_ENVIRONMENT === 'mainnet'\n  const { tooltip } = useTooltip()\n\n  // Fetch on-ledger AMM data from Clio (balances, auction slot, trading fee)\n  const { data: ammInfo, isFetching: ammInfoLoading } = useQuery(\n    ['ammInfo', ammAccountId],\n    async () => getAMMInfoByAMMAccount(rippledSocket, ammAccountId),\n    {\n      enabled: !!ammAccountId,\n      retry: false,\n      onError: (e: any) => {\n        trackException(\n          `Error fetching AMM info for ${ammAccountId} --- ${JSON.stringify(e)}`,\n        )\n        // Don't set error yet — we'll try deleted detection\n      },\n    },\n  )\n\n  // If amm_info failed, try to detect a deleted AMM pool\n  const ammInfoFailed = !ammInfoLoading && !ammInfo && !!ammAccountId\n  const { data: deletedData, isFetching: deletedLoading } = useQuery(\n    ['ammDeleted', ammAccountId],\n    () => getDeletedAMMData(rippledSocket, ammAccountId),\n    {\n      enabled: ammInfoFailed,\n      onError: () => {\n        // Both amm_info and deletion detection failed\n        setError(NOT_FOUND)\n      },\n    },\n  )\n\n  // If amm_info failed, deletion check finished, and it's not a deleted pool → show error\n  useEffect(() => {\n    if (ammInfoFailed && !deletedLoading && !deletedData) {\n      setError(NOT_FOUND)\n    }\n  }, [ammInfoFailed, deletedLoading, deletedData])\n\n  const isDeleted = !!deletedData\n  const isLoading = ammInfoLoading || (ammInfoFailed && deletedLoading)\n\n  // Fetch LOS market data (mainnet only)\n  const { data: losData } = useQuery(\n    ['ammLosData', ammAccountId],\n    () => fetchAMMPoolData(ammAccountId),\n    {\n      enabled: !!ammAccountId && isMainnet,\n      onError: (e: any) => {\n        trackException(\n          `Error fetching AMM LOS data for ${ammAccountId} --- ${JSON.stringify(e)}`,\n        )\n      },\n    },\n  )\n\n  // Fetch first transaction to get Created On timestamp\n  const { data: createdTimestamp } = useQuery(\n    ['ammCreatedOn', ammAccountId],\n    () => fetchAMMCreatedTimestamp(rippledSocket, ammAccountId),\n    { enabled: !!ammAccountId },\n  )\n\n  // Fetch data per time range from the API (each range may include different latest data)\n  const [chartTimeRange, setChartTimeRange] = useState('6M')\n  const { data: trendsData, isLoading: trendsLoading } = useQuery(\n    ['ammHistoricalTrends', ammAccountId, chartTimeRange],\n    () => fetchAMMHistoricalTrends(ammAccountId, chartTimeRange),\n    { enabled: !!ammAccountId, staleTime: 5 * 60 * 1000 },\n  )\n\n  useEffect(() => {\n    trackScreenLoaded({ account_id: ammAccountId })\n    return () => {\n      window.scrollTo(0, 0)\n    }\n  }, [ammAccountId, trackScreenLoaded])\n\n  if (error) {\n    const message = getErrorMessage(error)\n    return (\n      <Page ammAccountId={ammAccountId}>\n        <NoMatch title={message.title} hints={message.hints} />\n      </Page>\n    )\n  }\n\n  // Build unified data from either live amm_info or deleted pool metadata\n  const ammData = ammInfo?.amm\n  let balance1: FormattedBalance | null = null\n  let balance2: FormattedBalance | null = null\n  let tradingFee = 0\n  let lpToken: { currency: string; issuer: string; value: string } | undefined\n  let auctionSlot: AuctionSlot | undefined\n\n  if (ammData) {\n    balance1 = formatAmount(ammData.amount)\n    balance2 = formatAmount(ammData.amount2)\n    tradingFee = ammData.trading_fee\n    lpToken = ammData.lp_token\n    auctionSlot = ammData.auction_slot\n  } else if (deletedData) {\n    const [lb1, lb2] = buildDeletedBalances(deletedData)\n    balance1 = lb1\n    balance2 = lb2\n    tradingFee = 0 // Not available in deleted AMM node\n    lpToken = {\n      currency: deletedData.lpToken.currency,\n      issuer: deletedData.lpToken.issuer,\n      value: deletedData.lpToken.value,\n    }\n  }\n\n  const [asset1, asset2] = orderAssets(balance1, balance2)\n  const hasData = !!ammData || !!deletedData\n\n  return (\n    <Page ammAccountId={ammAccountId}>\n      {ammAccountId && isLoading && <Loader />}\n      {ammAccountId && !isLoading && hasData && (\n        <>\n          <AMMPoolHeader asset1={asset1} asset2={asset2} />\n\n          {isDeleted && (\n            <div className=\"amm-deleted-banner\">\n              <div className=\"deleted-label\">\n                <InfoIcon className=\"deleted-info-icon\" aria-hidden=\"true\" />\n                {t('amm_pool_deleted_label')}\n              </div>\n              <div className=\"deleted-message\">\n                {t('amm_pool_deleted_text')}\n              </div>\n            </div>\n          )}\n\n          <div className=\"amm-pool-info-cards\">\n            <BasicInfoCard\n              ammAccountId={ammAccountId}\n              tradingFee={tradingFee}\n              createdTimestamp={createdTimestamp}\n              lpTokenCurrency={lpToken?.currency}\n            />\n            {!isDeleted && (\n              <MarketDataCard\n                losData={losData}\n                balance1={balance1}\n                balance2={balance2}\n                lpTokenBalance={lpToken?.value}\n              />\n            )}\n            {!isDeleted && (\n              <AuctionCard\n                auctionSlot={auctionSlot}\n                tvlUsd={losData?.tvl_usd}\n                lpTokenBalance={lpToken?.value}\n                tradingFee={tradingFee}\n              />\n            )}\n          </div>\n\n          {isMainnet && (\n            <TVLVolumeChart\n              data={(trendsData?.data_points || []).map(\n                (point: HistoricalDataPoint) => ({\n                  date: point.date,\n                  tvl:\n                    displayCurrency === 'usd' ? point.tvl_usd : point.tvl_xrp,\n                  volume:\n                    displayCurrency === 'usd'\n                      ? point.trading_volume_usd\n                      : point.trading_volume_xrp,\n                }),\n              )}\n              isLoading={trendsLoading}\n              displayCurrency={displayCurrency}\n              setDisplayCurrency={setDisplayCurrency}\n              onTimeRangeChange={setChartTimeRange}\n            />\n          )}\n\n          <AMMPoolTablePicker\n            ammAccountId={ammAccountId}\n            tab={tab}\n            isMainnet={isMainnet}\n            lpToken={lpToken}\n            tvlUsd={losData?.tvl_usd}\n            isDeleted={isDeleted}\n          />\n        </>\n      )}\n      <Tooltip tooltip={tooltip} />\n    </Page>\n  )\n}\n\nexport default AMMPool\n"
  },
  {
    "path": "src/containers/AMMPool/styles.scss",
    "content": "@use '../shared/css/variables' as *;\n@use '../shared/css/table';\n@use '../shared/css/data-tables-notice';\n@use '../shared/css/info-card';\n\n.amm-pool-page {\n  .loader {\n    min-height: 100px;\n  }\n}\n\n// ============================================================\n// Header: \"AMM Pool [CRYPTO.rRbi/XRP]\"\n.amm-deleted-banner {\n  display: flex;\n  flex-direction: column;\n  padding: 25px;\n  border: 1px solid $orange-50;\n  border-radius: 8px;\n  margin-bottom: 30px;\n  background: $black-90;\n  gap: 12px;\n\n  .deleted-label {\n    display: flex;\n    align-items: center;\n    align-self: flex-start;\n    padding: 3px 12px;\n    border: 1px solid $orange-50;\n    border-radius: 100px;\n    background: $orange-80;\n    color: $black-0;\n    font-size: 12px;\n    gap: 10px;\n    text-transform: uppercase;\n    @include semibold;\n\n    .deleted-info-icon {\n      width: 16px;\n      height: 16px;\n      margin-right: 3px;\n    }\n  }\n\n  .deleted-message {\n    margin: 0;\n    color: $black-0;\n    font-size: 16px;\n    line-height: 1.5;\n  }\n}\n\n// ============================================================\n.amm-pool-header {\n  display: flex;\n  align-items: center;\n  padding-top: 50px;\n  margin-bottom: 32px;\n\n  .amm-pool-header-left {\n    display: flex;\n    flex-wrap: wrap;\n    align-items: center;\n    gap: 12px;\n\n    @include for-size(desktop-up) {\n      gap: 16px;\n    }\n  }\n\n  .amm-pool-title {\n    margin: 0;\n    color: $white;\n    font-size: 24px;\n    @include bold;\n\n    @include for-size(tablet-portrait-up) {\n      font-size: 30px;\n    }\n\n    @include for-size(desktop-up) {\n      font-size: 36px;\n    }\n  }\n\n  .amm-pool-token-badge {\n    display: flex;\n    align-items: center;\n    padding: 6px;\n    border: 1px solid $black-70;\n    border-radius: 8px;\n    color: $white;\n    font-size: 14px;\n    gap: 4px;\n    @include bold;\n\n    @include for-size(tablet-portrait-up) {\n      padding: 8px;\n      font-size: 16px;\n      gap: 6px;\n    }\n\n    @include for-size(desktop-up) {\n      font-size: 18px;\n      gap: 8px;\n    }\n  }\n\n  .badge-separator {\n    margin: 0 2px;\n    color: $black-40;\n  }\n\n  .asset-link {\n    color: $green-30;\n    text-decoration: none;\n\n    &:hover {\n      color: $green;\n    }\n  }\n}\n\n// ============================================================\n// Info Cards: three-column grid\n// ============================================================\n.amm-pool-info-cards {\n  display: grid;\n  margin-bottom: 50px;\n  gap: 16px;\n  grid-template-columns: 1fr;\n\n  @include for-size(tablet-portrait-up) {\n    gap: 24px;\n  }\n\n  @include for-size(desktop-up) {\n    gap: 32px;\n    grid-template-columns: repeat(3, 1fr);\n  }\n}\n\n// ============================================================\n// Tables section (matching IOU Token page tab style)\n// ============================================================\n.amm-pool-tables {\n  .full-width-line {\n    width: 100%;\n    border: none;\n    border-top: 1px solid $black-70;\n    margin-bottom: 0;\n    color: $black-70;\n  }\n\n  .tx-table-picker {\n    display: flex;\n    flex-direction: row;\n    margin-bottom: 16px;\n    gap: 8px;\n    -webkit-overflow-scrolling: touch;\n    overflow-x: auto;\n\n    @include for-size(tablet-portrait-up) {\n      margin-bottom: 20px;\n      gap: 12px;\n    }\n\n    @include for-size(desktop-up) {\n      margin-bottom: 24px;\n      gap: 16px;\n    }\n\n    .tabs {\n      display: flex;\n      flex-direction: row;\n      border-top: none;\n      margin: 0;\n      font-size: 14px;\n      gap: inherit;\n\n      button,\n      a {\n        all: unset;\n        padding-top: 16px;\n        border: none;\n        border-top: 3px solid transparent;\n        margin-right: 8px;\n        color: $black-40;\n        cursor: pointer;\n        font-size: 12px;\n        font-style: normal;\n        line-height: 150%;\n        white-space: nowrap;\n        @include regular;\n\n        @include for-size(tablet-portrait-up) {\n          padding-top: 18px;\n          margin-right: 12px;\n          font-size: 13px;\n        }\n\n        @include for-size(desktop-up) {\n          padding-top: 21px;\n          margin-right: 16px;\n          font-size: 14px;\n        }\n\n        &.selected {\n          padding-top: 16px;\n          border-top: 3px solid $white;\n          color: $white;\n\n          @include for-size(tablet-portrait-up) {\n            padding-top: 18px;\n          }\n\n          @include for-size(desktop-up) {\n            padding-top: 21px;\n          }\n        }\n\n        &.selected,\n        &:hover {\n          color: $white;\n          @include regular;\n        }\n      }\n    }\n  }\n}\n\n.amm-deposit-withdraw-table {\n  .table-wrap {\n    overflow-x: auto;\n  }\n\n  .text-truncate {\n    @extend %truncate;\n  }\n}\n"
  },
  {
    "path": "src/containers/AMMPool/test/AMMPoolHeader.test.tsx",
    "content": "import { render, screen } from '@testing-library/react'\nimport { MemoryRouter } from 'react-router'\nimport { I18nextProvider } from 'react-i18next'\nimport i18n from '../../../i18n/testConfig'\nimport { AMMPoolHeader } from '../AMMPoolHeader'\nimport { FormattedBalance } from '../types'\n\nconst renderComponent = (\n  asset1: FormattedBalance | null = null,\n  asset2: FormattedBalance | null = null,\n) =>\n  render(\n    <I18nextProvider i18n={i18n}>\n      <MemoryRouter>\n        <AMMPoolHeader asset1={asset1} asset2={asset2} />\n      </MemoryRouter>\n    </I18nextProvider>,\n  )\n\ndescribe('AMMPoolHeader', () => {\n  const asset1 = {\n    currency: '524C555344000000000000000000000000000000',\n    issuer: 'rMxCKbEDwqr76QuheSUMdEGf4B9xJ8m5De',\n    amount: 1000,\n  }\n  const asset2 = { currency: 'XRP', amount: 5000 }\n\n  it('renders AMM Pool title', () => {\n    renderComponent()\n    expect(screen.getByText('amm_pool')).toBeInTheDocument()\n  })\n\n  it('renders token pair badge with Currency components', () => {\n    const { container } = renderComponent(asset1, asset2)\n\n    expect(container.querySelector('.amm-pool-token-badge')).toBeInTheDocument()\n    expect(container.querySelector('.badge-separator')).toBeInTheDocument()\n  })\n\n  it('does not render badge when assets are null', () => {\n    const { container } = renderComponent()\n    expect(\n      container.querySelector('.amm-pool-token-badge'),\n    ).not.toBeInTheDocument()\n  })\n\n  it('renders clickable link for non-XRP assets', () => {\n    const { container } = renderComponent(asset1, asset2)\n\n    const links = container.querySelectorAll('.amm-pool-token-badge a')\n    expect(links.length).toBeGreaterThan(0)\n  })\n})\n"
  },
  {
    "path": "src/containers/AMMPool/test/index.test.tsx",
    "content": "import { render, screen, waitFor } from '@testing-library/react'\nimport { Route } from 'react-router'\nimport i18n from '../../../i18n/testConfig'\nimport { AMMPool } from '../index'\nimport { QuickHarness } from '../../test/utils'\nimport { AMM_POOL_ROUTE } from '../../App/routes'\nimport * as rippled from '../../../rippled/lib/rippled'\nimport * as ammUtils from '../utils'\n\njest.mock('../../../rippled/lib/rippled')\njest.mock('../utils')\njest.mock('../api', () => ({\n  fetchAMMPoolData: jest.fn().mockRejectedValue(new Error('not available')),\n  fetchAMMCreatedTimestamp: jest.fn().mockResolvedValue(827000000),\n  fetchAMMHistoricalTrends: jest.fn().mockResolvedValue({ data_points: [] }),\n  fetchAMMDexTrades: jest.fn().mockResolvedValue({ data: [], total: 0 }),\n  fetchAMMTransactions: jest.fn().mockResolvedValue({ data: [], total: 0 }),\n}))\n\n// TVLVolumeChart must be mocked — it uses useQuery() + recharts (won't render in jsdom)\njest.mock('../../shared/components/TVLVolumeChart', () => ({\n  TVLVolumeChart: () => <div data-testid=\"tvl-volume-chart\">Chart</div>,\n}))\n\n// AMMPoolTablePicker must be mocked — it uses useQuery(), useInfiniteQuery(), SocketContext, useAnalytics()\njest.mock('../TablePicker', () => ({\n  AMMPoolTablePicker: () => <div data-testid=\"table-picker\">Table Picker</div>,\n}))\n\nconst mockGetAMMInfo = rippled.getAMMInfoByAMMAccount as jest.Mock\nconst mockDetectDeleted = ammUtils.getDeletedAMMData as jest.Mock\n\nconst TEST_AMM_ID = 'rLjUKpwUVmz3vCTmFkXungxwzdoyrWRsFG'\n\nconst mockAmmInfoResponse = {\n  amm: {\n    amount: '500000000', // XRP in drops\n    amount2: {\n      currency: '524C555344000000000000000000000000000000',\n      issuer: 'rMxCKbEDwqr76QuheSUMdEGf4B9xJ8m5De',\n      value: '1000',\n    },\n    trading_fee: 500,\n    lp_token: {\n      currency: '03CE60C3DB22CF7F7157810936F27A5B485C8DB9',\n      issuer: TEST_AMM_ID,\n      value: '10000',\n    },\n    auction_slot: {\n      account: 'rSomeAccount',\n      expiration: '2026-12-31T00:00:00+0000',\n      discounted_fee: 100,\n      price: { value: '50', currency: 'LP', issuer: TEST_AMM_ID },\n      time_interval: 3,\n    },\n  },\n}\n\ndescribe('AMMPool Page', () => {\n  const renderComponent = (ammAccountId = TEST_AMM_ID) =>\n    render(\n      <QuickHarness i18n={i18n} initialEntries={[`/amm/${ammAccountId}`]}>\n        <Route path={AMM_POOL_ROUTE.path} element={<AMMPool />} />\n      </QuickHarness>,\n    )\n\n  beforeEach(() => {\n    jest.clearAllMocks()\n    process.env.VITE_ENVIRONMENT = 'mainnet'\n    mockDetectDeleted.mockResolvedValue(null)\n  })\n\n  it('renders header and cards for an active AMM pool', async () => {\n    mockGetAMMInfo.mockResolvedValue(mockAmmInfoResponse)\n\n    renderComponent()\n\n    await waitFor(() => {\n      expect(document.querySelector('.amm-pool-header')).toBeInTheDocument()\n      expect(screen.getByText('basic_info')).toBeInTheDocument()\n      expect(screen.getByText('auction')).toBeInTheDocument()\n      expect(screen.getByTestId('table-picker')).toBeInTheDocument()\n    })\n  })\n\n  it('renders token pair in header with XRP on the right', async () => {\n    mockGetAMMInfo.mockResolvedValue(mockAmmInfoResponse)\n\n    renderComponent()\n\n    await waitFor(() => {\n      const header = document.querySelector('.amm-pool-header')\n      expect(header).toBeInTheDocument()\n      // XRP should be asset2 (right side)\n      expect(header!.textContent).toContain('/XRP')\n    })\n  })\n\n  it('shows deleted banner for a deleted AMM pool', async () => {\n    mockGetAMMInfo.mockRejectedValue({ code: 35 })\n    mockDetectDeleted.mockResolvedValue({\n      account: 'rDeletedAMM',\n      asset: { currency: 'XRP' },\n      asset2: {\n        currency: '504958454C530000000000000000000000000000',\n        issuer: 'rNEQb5e4DZUJG48xKPstDWjmm1PQ4fcUfZ',\n      },\n      lpToken: {\n        currency: '0370963F20A61AF3C6E5D674EAAEE3E65C0BDC9F',\n        issuer: 'rDeletedAMM',\n        value: '0',\n      },\n      deletionDate: 827617760,\n    })\n\n    renderComponent('rDeletedAMM')\n\n    await waitFor(() => {\n      expect(document.querySelector('.amm-pool-header')).toBeInTheDocument()\n      expect(screen.getByText('basic_info')).toBeInTheDocument()\n      expect(screen.getByTestId('table-picker')).toBeInTheDocument()\n    })\n\n    // Liquidated banner should be shown\n    await waitFor(() => {\n      const banner = document.querySelector('.amm-deleted-banner')\n      expect(banner).toBeInTheDocument()\n    })\n  })\n\n  it('hides auction card for deleted pools', async () => {\n    mockGetAMMInfo.mockRejectedValue({ code: 35 })\n    mockDetectDeleted.mockResolvedValue({\n      account: 'rDeletedAMM',\n      asset: { currency: 'XRP' },\n      asset2: {\n        currency: '504958454C530000000000000000000000000000',\n        issuer: 'rNEQb5e4DZUJG48xKPstDWjmm1PQ4fcUfZ',\n      },\n      lpToken: {\n        currency: '0370963F20A61AF3C6E5D674EAAEE3E65C0BDC9F',\n        issuer: 'rDeletedAMM',\n        value: '0',\n      },\n      deletionDate: 827617760,\n    })\n\n    renderComponent('rDeletedAMM')\n\n    await waitFor(() => {\n      expect(screen.getByText('basic_info')).toBeInTheDocument()\n    })\n\n    // Auction card should not be rendered for deleted pools\n    expect(screen.queryByText('auction')).not.toBeInTheDocument()\n  })\n\n  it('shows error when both amm_info and deletion detection fail', async () => {\n    mockGetAMMInfo.mockRejectedValue({ code: 404 })\n    mockDetectDeleted.mockResolvedValue(null)\n\n    renderComponent('rNonExistentAMM')\n\n    await waitFor(() => {\n      expect(document.querySelector('.amm-pool-header')).not.toBeInTheDocument()\n    })\n  })\n})\n"
  },
  {
    "path": "src/containers/AMMPool/test/mockDeletedAMMTransaction.json",
    "content": "{\n  \"transactions\": [\n    {\n      \"tx\": {\n        \"Account\": \"rsWRnby4f9QzarQQs3MpRhBncUgKUC56Ff\",\n        \"TransactionType\": \"AMMWithdraw\",\n        \"hash\": \"E9D07AA35B1C37ACE4D7D3235619243ACAD612754F824AAE253C36F13BF17DFC\"\n      },\n      \"meta\": {\n        \"AffectedNodes\": [\n          {\n            \"DeletedNode\": {\n              \"FinalFields\": {\n                \"Account\": \"rQhuJV3eVEm6D6YreeisJkvfyBBA3qAXrL\",\n                \"Asset\": { \"currency\": \"XRP\" },\n                \"Asset2\": {\n                  \"currency\": \"504958454C530000000000000000000000000000\",\n                  \"issuer\": \"rNEQb5e4DZUJG48xKPstDWjmm1PQ4fcUfZ\"\n                },\n                \"AuctionSlot\": {\n                  \"Account\": \"rsWRnby4f9QzarQQs3MpRhBncUgKUC56Ff\",\n                  \"Expiration\": 827698230,\n                  \"Price\": {\n                    \"currency\": \"0370963F20A61AF3C6E5D674EAAEE3E65C0BDC9F\",\n                    \"issuer\": \"rQhuJV3eVEm6D6YreeisJkvfyBBA3qAXrL\",\n                    \"value\": \"0\"\n                  }\n                },\n                \"Flags\": 0,\n                \"LPTokenBalance\": {\n                  \"currency\": \"0370963F20A61AF3C6E5D674EAAEE3E65C0BDC9F\",\n                  \"issuer\": \"rQhuJV3eVEm6D6YreeisJkvfyBBA3qAXrL\",\n                  \"value\": \"2764439179.245265\"\n                },\n                \"VoteSlots\": [\n                  {\n                    \"VoteEntry\": {\n                      \"Account\": \"rsWRnby4f9QzarQQs3MpRhBncUgKUC56Ff\",\n                      \"VoteWeight\": 100000\n                    }\n                  }\n                ]\n              },\n              \"LedgerEntryType\": \"AMM\",\n              \"LedgerIndex\": \"0422F98444F7B068C7EC6EEDAF11380E6A146F091639A29E09B3399C1F8A5341\"\n            }\n          },\n          {\n            \"ModifiedNode\": {\n              \"FinalFields\": {\n                \"Account\": \"rsWRnby4f9QzarQQs3MpRhBncUgKUC56Ff\",\n                \"Balance\": \"171889002\"\n              },\n              \"LedgerEntryType\": \"AccountRoot\",\n              \"LedgerIndex\": \"8CCDDB1D59E72EBD937C297CC9487F0FCDCA146C8CFE9EB360788594E72649B9\"\n            }\n          }\n        ],\n        \"TransactionResult\": \"tesSUCCESS\"\n      },\n      \"validated\": true,\n      \"date\": 827617760,\n      \"ledger_index\": 103072853\n    }\n  ]\n}\n"
  },
  {
    "path": "src/containers/AMMPool/test/utils.test.ts",
    "content": "import { getDeletedAMMData, formatDepositWithdraw } from '../utils'\nimport { LOSAMMDepositWithdrawRaw } from '../types'\nimport mockDeletedTx from './mockDeletedAMMTransaction.json'\n\njest.mock('../../../rippled/lib/rippled', () => ({\n  getAccountTransactions: jest.fn(),\n}))\n\n// eslint-disable-next-line @typescript-eslint/no-var-requires\nconst { getAccountTransactions } = require('../../../rippled/lib/rippled')\n\ndescribe('getDeletedAMMData', () => {\n  const mockSocket = {} as any\n\n  beforeEach(() => {\n    jest.clearAllMocks()\n  })\n\n  it('returns deleted AMM data when last tx has DeletedNode with LedgerEntryType AMM', async () => {\n    getAccountTransactions.mockResolvedValue(mockDeletedTx)\n\n    const result = await getDeletedAMMData(\n      mockSocket,\n      'rQhuJV3eVEm6D6YreeisJkvfyBBA3qAXrL',\n    )\n\n    expect(result).not.toBeNull()\n    expect(result!.account).toBe('rQhuJV3eVEm6D6YreeisJkvfyBBA3qAXrL')\n    expect(result!.asset).toEqual({ currency: 'XRP' })\n    expect(result!.asset2).toEqual({\n      currency: '504958454C530000000000000000000000000000',\n      issuer: 'rNEQb5e4DZUJG48xKPstDWjmm1PQ4fcUfZ',\n    })\n    expect(result!.lpToken).toEqual({\n      currency: '0370963F20A61AF3C6E5D674EAAEE3E65C0BDC9F',\n      issuer: 'rQhuJV3eVEm6D6YreeisJkvfyBBA3qAXrL',\n      value: '2764439179.245265',\n    })\n    expect(result!.deletionDate).toBe(827617760)\n  })\n\n  it('calls getAccountTransactions with limit=1', async () => {\n    getAccountTransactions.mockResolvedValue(mockDeletedTx)\n\n    await getDeletedAMMData(mockSocket, 'rQhuJV3eVEm6D6YreeisJkvfyBBA3qAXrL')\n\n    expect(getAccountTransactions).toHaveBeenCalledWith(\n      mockSocket,\n      'rQhuJV3eVEm6D6YreeisJkvfyBBA3qAXrL',\n      1,\n      '',\n    )\n  })\n\n  it('returns null when last tx has no DeletedNode with AMM type', async () => {\n    getAccountTransactions.mockResolvedValue({\n      transactions: [\n        {\n          tx: { TransactionType: 'Payment' },\n          meta: {\n            AffectedNodes: [\n              {\n                ModifiedNode: {\n                  LedgerEntryType: 'AccountRoot',\n                  FinalFields: { Balance: '1000000' },\n                },\n              },\n            ],\n          },\n          date: 827617760,\n        },\n      ],\n    })\n\n    const result = await getDeletedAMMData(mockSocket, 'rSomeAccount')\n    expect(result).toBeNull()\n  })\n\n  it('returns null when account_tx returns no transactions', async () => {\n    getAccountTransactions.mockResolvedValue({ transactions: [] })\n\n    const result = await getDeletedAMMData(mockSocket, 'rSomeAccount')\n    expect(result).toBeNull()\n  })\n\n  it('returns null when account_tx returns undefined', async () => {\n    getAccountTransactions.mockResolvedValue(undefined)\n\n    const result = await getDeletedAMMData(mockSocket, 'rSomeAccount')\n    expect(result).toBeNull()\n  })\n\n  it('returns null when meta has no AffectedNodes', async () => {\n    getAccountTransactions.mockResolvedValue({\n      transactions: [\n        {\n          tx: { TransactionType: 'AMMWithdraw' },\n          meta: {},\n          date: 827617760,\n        },\n      ],\n    })\n\n    const result = await getDeletedAMMData(mockSocket, 'rSomeAccount')\n    expect(result).toBeNull()\n  })\n\n  it('returns null when AccountDelete (not AMM deletion)', async () => {\n    getAccountTransactions.mockResolvedValue({\n      transactions: [\n        {\n          tx: { TransactionType: 'AccountDelete' },\n          meta: {\n            AffectedNodes: [\n              {\n                DeletedNode: {\n                  LedgerEntryType: 'AccountRoot',\n                  FinalFields: { Account: 'rDeletedAccount' },\n                },\n              },\n            ],\n          },\n          date: 827617760,\n        },\n      ],\n    })\n\n    const result = await getDeletedAMMData(mockSocket, 'rDeletedAccount')\n    expect(result).toBeNull()\n  })\n})\n\ndescribe('formatDepositWithdraw', () => {\n  const baseTx: LOSAMMDepositWithdrawRaw = {\n    hash: 'ABC123',\n    ledger_index: 100,\n    timestamp: 1000000,\n    account: 'rAccount1',\n    amm: {\n      asset1: { currency: 'USD', issuer: 'rIssuer1', value: '500' },\n      asset2: { currency: 'XRP', issuer: null, value: '250' },\n      lp_tokens_received: '1000',\n      value_usd: 750,\n    },\n  }\n\n  it('formats both assets preserving response order', () => {\n    const result = formatDepositWithdraw(baseTx)\n\n    expect(result.hash).toBe('ABC123')\n    expect(result.ledger).toBe(100)\n    expect(result.timestamp).toBe(1000000)\n    expect(result.account).toBe('rAccount1')\n    expect(result.asset).toEqual({\n      currency: 'USD',\n      issuer: 'rIssuer1',\n      amount: 500,\n    })\n    expect(result.asset2).toEqual({\n      currency: 'XRP',\n      issuer: undefined,\n      amount: 250,\n    })\n    expect(result.lpTokens).toBe('1000')\n    expect(result.valueUsd).toBe(750)\n  })\n\n  it('returns null for missing asset2 (single-asset deposit)', () => {\n    const singleAssetTx: LOSAMMDepositWithdrawRaw = {\n      ...baseTx,\n      amm: {\n        asset1: { currency: 'USD', issuer: 'rIssuer1', value: '500' },\n        lp_tokens_received: '1000',\n      },\n    }\n    const result = formatDepositWithdraw(singleAssetTx)\n\n    expect(result.asset).toEqual({\n      currency: 'USD',\n      issuer: 'rIssuer1',\n      amount: 500,\n    })\n    expect(result.asset2).toBeNull()\n  })\n\n  it('returns null for asset with zero value', () => {\n    const zeroAssetTx: LOSAMMDepositWithdrawRaw = {\n      ...baseTx,\n      amm: {\n        asset1: { currency: 'USD', issuer: 'rIssuer1', value: '500' },\n        asset2: { currency: 'XRP', issuer: null, value: '0' },\n        lp_tokens_received: '1000',\n      },\n    }\n    const result = formatDepositWithdraw(zeroAssetTx)\n\n    expect(result.asset).toEqual({\n      currency: 'USD',\n      issuer: 'rIssuer1',\n      amount: 500,\n    })\n    expect(result.asset2).toBeNull()\n  })\n\n  it('uses lp_tokens_redeemed for withdrawals', () => {\n    const withdrawTx: LOSAMMDepositWithdrawRaw = {\n      ...baseTx,\n      amm: {\n        asset1: { currency: 'USD', issuer: 'rIssuer1', value: '500' },\n        lp_tokens_redeemed: '800',\n      },\n    }\n    const result = formatDepositWithdraw(withdrawTx)\n\n    expect(result.lpTokens).toBe('800')\n  })\n\n  it('returns null for lpTokens and valueUsd when amm data is missing', () => {\n    const noAmmTx: LOSAMMDepositWithdrawRaw = {\n      ...baseTx,\n      amm: undefined,\n    }\n    const result = formatDepositWithdraw(noAmmTx)\n\n    expect(result.asset).toBeNull()\n    expect(result.asset2).toBeNull()\n    expect(result.lpTokens).toBeNull()\n    expect(result.valueUsd).toBeNull()\n  })\n})\n"
  },
  {
    "path": "src/containers/AMMPool/types.ts",
    "content": "import { ExplorerAmount } from '../shared/types'\n\n/** LOS /amms/{id} response */\nexport interface LOSAMMPoolData {\n  tvl_xrp: number\n  tvl_usd: number\n  trading_volume_xrp: number\n  trading_volume_usd: number\n  fees_collected_xrp: number\n  fees_collected_usd: number\n  annual_percentage_return: number\n  liquidity_provider_count: number\n  issuer_1: string | null\n  currency_1: string\n  issuer_2: string | null\n  currency_2: string\n  last_updated_timestamp: string\n}\n\n/** Single data point from LOS /amms/historical-trends response */\nexport interface HistoricalDataPoint {\n  date: string\n  tvl_usd: number\n  tvl_xrp: number\n  trading_volume_usd: number\n  trading_volume_xrp: number\n}\n\n/** LOS /amms/historical-trends response */\nexport interface HistoricalTrendsResponse {\n  data_points: HistoricalDataPoint[]\n}\n\n/** Raw AMMDeposit/AMMWithdraw transaction as returned by LOS /v2/transactions API */\nexport interface LOSAMMDepositWithdrawRaw {\n  hash: string\n  ledger_index: number\n  timestamp: number\n  account: string\n  amm?: {\n    asset1?: { currency: string; issuer?: string | null; value: string }\n    asset2?: { currency: string; issuer?: string | null; value: string }\n    lp_tokens_received?: string\n    lp_tokens_redeemed?: string\n    value_usd?: number\n  }\n}\n\n/** LOS cursor: [timestamp, tx_hash] */\nexport type LOSCursor = [number, string]\n\n/** Cursor-paginated response from LOS API endpoints */\nexport interface LOSCursorResponse<T = any> {\n  results: T[]\n  next_cursor?: LOSCursor\n  prev_cursor?: LOSCursor\n}\n\n/** Auction slot data from amm_info response */\nexport interface AuctionSlot {\n  account?: string\n  expiration?: string | number\n  discounted_fee?: number\n  price?: { value: string; currency: string; issuer?: string }\n  time_interval?: number\n}\n\n/** Formatted balance from amm_info (via formatAmount) */\nexport interface FormattedBalance {\n  currency: string\n  amount: string | number\n  issuer?: string\n}\n\n/** Formatted AMMDeposit/AMMWithdraw transaction for table display */\nexport interface AMMDepositWithdrawFormatted {\n  hash: string\n  ledger: number\n  timestamp: number\n  account: string\n  asset: ExplorerAmount | null\n  asset2: ExplorerAmount | null\n  lpTokens: string | null\n  valueUsd: number | null\n}\n"
  },
  {
    "path": "src/containers/AMMPool/utils.ts",
    "content": "import type { ExplorerXrplClient } from '../shared/SocketContext'\nimport { getAccountTransactions } from '../../rippled/lib/rippled'\nimport { AMMDepositWithdrawFormatted, LOSAMMDepositWithdrawRaw } from './types'\n\n/**\n * Data extracted from a deleted AMM pool's last transaction metadata.\n * The DeletedNode with LedgerEntryType \"AMM\" contains the pool's final state.\n */\nexport interface DeletedAMMData {\n  account: string\n  asset: { currency: string; issuer?: string }\n  asset2: { currency: string; issuer?: string }\n  lpToken: { currency: string; issuer: string; value: string }\n  deletionDate: number // ripple epoch timestamp\n}\n\n/**\n * Find the DeletedNode with LedgerEntryType \"AMM\" in a transaction's metadata.\n */\nconst findDeletedAMMNode = (meta: any): any | null => {\n  if (!meta?.AffectedNodes) {\n    return null\n  }\n\n  for (const node of meta.AffectedNodes) {\n    if (\n      node.DeletedNode?.LedgerEntryType === 'AMM' &&\n      node.DeletedNode?.FinalFields\n    ) {\n      return node.DeletedNode.FinalFields\n    }\n  }\n\n  return null\n}\n\n/**\n * Fetch the last transaction of a deleted account and, if it was an AMMWithdraw\n * that removed a DeletedNode with LedgerEntryType \"AMM\", return the pool's\n * final state.\n *\n * Returns the extracted AMM data if it's a deleted pool, or null otherwise.\n */\nexport const getDeletedAMMData = async (\n  rippledSocket: ExplorerXrplClient,\n  accountId: string,\n): Promise<DeletedAMMData | null> => {\n  const resp = await getAccountTransactions(rippledSocket, accountId, 1, '')\n\n  const lastTx = resp?.transactions?.[0]\n  if (!lastTx) {\n    return null\n  }\n\n  if (lastTx.tx?.TransactionType !== 'AMMWithdraw') {\n    return null\n  }\n\n  const ammFields = findDeletedAMMNode(lastTx.meta)\n  if (!ammFields) {\n    return null\n  }\n\n  return {\n    account: ammFields.Account ?? accountId,\n    asset: ammFields.Asset ?? { currency: 'XRP' },\n    asset2: ammFields.Asset2 ?? { currency: 'XRP' },\n    lpToken: ammFields.LPTokenBalance ?? {\n      currency: '',\n      issuer: accountId,\n      value: '0',\n    },\n    deletionDate: lastTx.date ?? lastTx.tx?.date,\n  }\n}\n\n/**\n * Format AMMDeposit/AMMWithdraw from LOS /v2/transactions response.\n * Preserves the asset order from the transaction data.\n */\nexport const formatDepositWithdraw = (\n  tx: LOSAMMDepositWithdrawRaw,\n): AMMDepositWithdrawFormatted => {\n  const formatAsset = (\n    raw:\n      | { currency: string; issuer?: string | null; value: string }\n      | undefined,\n  ) => {\n    if (!raw || Number(raw.value) === 0) {\n      return null\n    }\n    return {\n      currency: raw.currency,\n      issuer: raw.issuer ?? undefined,\n      amount: Number(raw.value),\n    }\n  }\n\n  return {\n    hash: tx.hash,\n    ledger: tx.ledger_index,\n    timestamp: tx.timestamp,\n    account: tx.account,\n    asset: formatAsset(tx.amm?.asset1),\n    asset2: formatAsset(tx.amm?.asset2),\n    lpTokens: tx.amm?.lp_tokens_received ?? tx.amm?.lp_tokens_redeemed ?? null,\n    valueUsd: tx.amm?.value_usd ?? null,\n  }\n}\n"
  },
  {
    "path": "src/containers/AMMRankings/AMMRankingsTable.tsx",
    "content": "import { FC, useState, useMemo, useRef, useCallback } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { AMMPool } from './api'\nimport Currency, { hexToString } from '../shared/components/Currency'\nimport { Account } from '../shared/components/Account'\nimport { CurrencySwitch } from '../shared/components/CurrencySwitch'\nimport {\n  parseAmount,\n  parseCurrencyAmount,\n  parsePercent,\n  parseIntegerAmount,\n} from '../shared/NumberFormattingUtils'\nimport { shortenAccount, formatTradingFee } from '../shared/utils'\nimport { useTooltip } from '../shared/components/Tooltip'\nimport HoverIcon from '../shared/images/hover.svg'\nimport xrpIconSvg from '../shared/images/xrp_icon.svg?url'\nimport DefaultTokenIcon from '../shared/images/default_token_icon.svg'\nimport { Pagination } from '../shared/components/Pagination'\n\ninterface AMMRankingsTableProps {\n  amms: AMMPool[]\n  currencyMode: 'usd' | 'xrp'\n}\n\ntype CategoryFilter = 'rwa' | 'stablecoin' | 'memes' | 'defi'\n\nconst DEFAULT_EMPTY_VALUE = '--'\n\nconst CATEGORIES: CategoryFilter[] = ['rwa', 'stablecoin', 'memes', 'defi']\n\nconst CATEGORY_LABELS: Record<CategoryFilter, string> = {\n  rwa: 'RWA',\n  stablecoin: 'Stablecoins',\n  memes: 'Memes',\n  defi: 'DeFi',\n}\n\nconst TokenIcon: FC<{\n  currency: string\n  iconUrl?: string\n}> = ({ currency, iconUrl }) => {\n  // Safety check for currency\n  if (!currency) {\n    return <DefaultTokenIcon className=\"token-icon fallback\" />\n  }\n\n  // Fallback content (default token icon)\n  const fallbackContent = <DefaultTokenIcon className=\"token-icon fallback\" />\n\n  // Icon content (image or fallback)\n  const iconContent = iconUrl ? (\n    <img\n      src={iconUrl}\n      alt={`${currency} logo`}\n      className=\"token-icon\"\n      onError={(e) => {\n        // If image fails to load, replace with fallback\n        e.currentTarget.style.display = 'none'\n        e.currentTarget.parentElement?.classList.add('fallback-mode')\n      }}\n    />\n  ) : (\n    fallbackContent\n  )\n\n  return (\n    <div className=\"token-icon-wrapper\">\n      {iconContent}\n      {iconUrl && (\n        <DefaultTokenIcon\n          className=\"token-icon fallback\"\n          style={{ display: 'none' }}\n        />\n      )}\n    </div>\n  )\n}\n\nconst PoolDisplay: FC<{ amm: AMMPool }> = ({ amm }) => (\n  <div className=\"pool-display\">\n    <div className=\"token-pair\">\n      <TokenIcon currency={amm.currency_1} iconUrl={amm.icon_1} />\n      <TokenIcon currency={amm.currency_2} iconUrl={amm.icon_2} />\n    </div>\n    <div className=\"pool-name\">\n      <Currency\n        currency={amm.currency_1}\n        issuer={amm.issuer_1}\n        displaySymbol={false}\n        hideIssuer\n      />\n      /\n      <Currency\n        currency={amm.currency_2}\n        issuer={amm.issuer_2}\n        displaySymbol={false}\n        hideIssuer\n      />\n    </div>\n  </div>\n)\n\nexport const AMMRankingsTable: FC<AMMRankingsTableProps> = ({\n  amms,\n  currencyMode,\n}) => {\n  const { t } = useTranslation()\n  const { showTooltip, hideTooltip } = useTooltip()\n  const [filterField, setFilterField] = useState<CategoryFilter | ''>('')\n  const [searchQuery, setSearchQuery] = useState('')\n  const [tableCurrency, setTableCurrency] = useState<'usd' | 'xrp'>(\n    currencyMode,\n  )\n  const [currentPage, setCurrentPage] = useState(1)\n  const tableRef = useRef<HTMLDivElement>(null)\n  const pageSize = 15\n\n  const handlePageChange = useCallback((page: number) => {\n    setCurrentPage(page)\n    tableRef.current?.scrollIntoView({ behavior: 'smooth', block: 'start' })\n  }, [])\n\n  const renderTooltip = (key: string, yOffset = 60) => (\n    <HoverIcon\n      className=\"hover\"\n      onMouseOver={(e) => {\n        const rect = e.currentTarget.getBoundingClientRect()\n        showTooltip('text', e, t(`${key}_tooltip` as any), {\n          x: rect.left + rect.width / 2,\n          y: rect.top - yOffset,\n        })\n      }}\n      onMouseLeave={() => hideTooltip()}\n    />\n  )\n\n  const handleFilterClick = (cat: CategoryFilter) => {\n    setFilterField(filterField === cat ? '' : cat)\n    setCurrentPage(1) // Reset to first page when filter changes\n  }\n\n  const filteredAmms = useMemo(() => {\n    let result = amms\n\n    if (filterField) {\n      result = result.filter(\n        (amm) =>\n          amm.asset_class_1 === filterField ||\n          amm.asset_class_2 === filterField ||\n          amm.asset_subclass_1 === filterField ||\n          amm.asset_subclass_2 === filterField,\n      )\n    }\n\n    if (searchQuery.trim()) {\n      const q = searchQuery.trim().toLowerCase()\n      const decodeCurrency = (code: string): string => {\n        if (code.length === 40 && !code.startsWith('03')) {\n          return hexToString(code)\n        }\n        return code\n      }\n      result = result.filter((amm) => {\n        const currency1 = (amm.currency_1 || '').toLowerCase()\n        const currency2 = (amm.currency_2 || '').toLowerCase()\n        const decoded1 = decodeCurrency(amm.currency_1 || '').toLowerCase()\n        const decoded2 = decodeCurrency(amm.currency_2 || '').toLowerCase()\n        const accountId = (amm.amm_account_id || '').toLowerCase()\n        return (\n          currency1.includes(q) ||\n          currency2.includes(q) ||\n          decoded1.includes(q) ||\n          decoded2.includes(q) ||\n          accountId.includes(q)\n        )\n      })\n    }\n\n    return result\n  }, [amms, filterField, searchQuery])\n\n  // Paginate the filtered results\n  const paginatedAmms = useMemo(() => {\n    const startIndex = (currentPage - 1) * pageSize\n    return filteredAmms.slice(startIndex, startIndex + pageSize)\n  }, [filteredAmms, currentPage, pageSize])\n\n  // Enrich paginated AMMs with XRP icon (local SVG) for XRP currencies\n  // Non-XRP token icons come from the server cache (icon_1, icon_2 fields)\n  const enrichedPaginatedAmms = useMemo(\n    () =>\n      paginatedAmms.map((amm) => ({\n        ...amm,\n        icon_1: amm.currency_1 === 'XRP' ? xrpIconSvg : amm.icon_1,\n        icon_2: amm.currency_2 === 'XRP' ? xrpIconSvg : amm.icon_2,\n      })),\n    [paginatedAmms],\n  )\n\n  const getTVL = (amm: AMMPool) =>\n    tableCurrency === 'usd' ? amm.tvl_usd : amm.tvl_xrp\n\n  const getVolume = (amm: AMMPool) =>\n    tableCurrency === 'usd' ? amm.trading_volume_usd : amm.trading_volume_xrp\n\n  const getFees24h = (amm: AMMPool) =>\n    tableCurrency === 'usd' ? amm.fees_collected_usd : amm.fees_collected_xrp\n\n  const formatCurrencyAmount = (value: number): string => {\n    if (tableCurrency === 'xrp') {\n      return `${parseAmount(value)} XRP`\n    }\n    return parseCurrencyAmount(value)\n  }\n\n  const renderAMM = (amm: AMMPool, index: number) => (\n    <tr key={amm.amm_account_id}>\n      <td className=\"rank\">{index + 1}</td>\n      <td className=\"pool\">\n        <PoolDisplay amm={amm} />\n      </td>\n      <td className=\"amm-account-id\">\n        <Account\n          account={amm.amm_account_id}\n          displayText={shortenAccount(amm.amm_account_id)}\n        />\n      </td>\n      <td className=\"tvl\">\n        {getTVL(amm) != null\n          ? formatCurrencyAmount(getTVL(amm))\n          : DEFAULT_EMPTY_VALUE}\n      </td>\n      <td className=\"lp-count\">\n        {amm.liquidity_provider_count != null\n          ? parseIntegerAmount(amm.liquidity_provider_count.toString())\n          : DEFAULT_EMPTY_VALUE}\n      </td>\n      <td className=\"trading-fee\">\n        {amm.trading_fee != null\n          ? `${formatTradingFee(amm.trading_fee)}%`\n          : DEFAULT_EMPTY_VALUE}\n      </td>\n      <td className=\"volume\">\n        {getVolume(amm) != null\n          ? formatCurrencyAmount(getVolume(amm))\n          : DEFAULT_EMPTY_VALUE}\n      </td>\n      <td className=\"fees-24h\">\n        {getFees24h(amm) != null\n          ? formatCurrencyAmount(getFees24h(amm))\n          : DEFAULT_EMPTY_VALUE}\n      </td>\n      <td className=\"apr\">\n        {amm.annual_percentage_return != null\n          ? parsePercent(amm.annual_percentage_return, 3, 0.001)\n          : DEFAULT_EMPTY_VALUE}\n      </td>\n    </tr>\n  )\n\n  return (\n    <div className=\"amm-rankings-table-container\" ref={tableRef}>\n      <h2 className=\"table-title\">{t('top_1000_amms')}</h2>\n\n      <div className=\"table-controls\">\n        <div className=\"table-filters\">\n          <div className=\"filter-icon-btn\" />\n          {CATEGORIES.map((cat) => (\n            <button\n              key={cat}\n              type=\"button\"\n              className={`category-filter ${cat === filterField ? 'selected' : ''}`}\n              onClick={() => handleFilterClick(cat)}\n            >\n              <div className={`item-icon icon-${cat}`} />\n              <span>{CATEGORY_LABELS[cat]}</span>\n            </button>\n          ))}\n        </div>\n\n        <div className=\"search-wrapper\">\n          <input\n            type=\"text\"\n            className=\"amm-search\"\n            placeholder={t('search_amms')}\n            value={searchQuery}\n            onChange={(e) => {\n              setSearchQuery(e.target.value)\n              setCurrentPage(1) // Reset to first page when search changes\n            }}\n          />\n        </div>\n\n        <CurrencySwitch\n          leftLabel=\"USD\"\n          rightLabel=\"XRP\"\n          selected={tableCurrency === 'usd' ? 'USD' : 'XRP'}\n          onChange={(value) =>\n            setTableCurrency(value === 'USD' ? 'usd' : 'xrp')\n          }\n        />\n      </div>\n\n      <div className=\"table-wrap\">\n        <table className=\"basic amm-rankings-table\">\n          <thead>\n            <tr>\n              <th className=\"rank\">#</th>\n              <th className=\"pool\">{t('asset_pair')}</th>\n              <th className=\"amm-account-id\">{t('amm_account_id')}</th>\n              <th className=\"tvl\">{t('tvl')}</th>\n              <th className=\"lp-count\">{t('number_of_lps')}</th>\n              <th className=\"trading-fee\">{t('trading_fee')}</th>\n              <th className=\"volume has-tooltip\">\n                <span className=\"sort-header\">\n                  {t('volume_24h')}\n                  {renderTooltip('volume_24h')}\n                </span>\n              </th>\n              <th className=\"fees-24h has-tooltip\">\n                <span className=\"sort-header\">\n                  {t('fees_24h')}\n                  {renderTooltip('fees_24h')}\n                </span>\n              </th>\n              <th className=\"apr has-tooltip\">\n                <span className=\"sort-header\">\n                  {t('apr_24h')}\n                  {renderTooltip('apr_24h')}\n                </span>\n              </th>\n            </tr>\n          </thead>\n          <tbody>\n            {enrichedPaginatedAmms.map((amm, index) => {\n              const globalIndex = (currentPage - 1) * pageSize + index\n              return renderAMM(amm, globalIndex)\n            })}\n          </tbody>\n        </table>\n      </div>\n\n      <Pagination\n        totalItems={filteredAmms.length}\n        currentPage={currentPage}\n        onPageChange={handlePageChange}\n        pageSize={pageSize}\n        scrollToTop={null}\n        showLastPage\n      />\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/AMMRankings/GeneralInfoCard.tsx",
    "content": "import { FC } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { AggregatedStats } from './api'\nimport {\n  parseAmount,\n  parseCurrencyAmount,\n} from '../shared/NumberFormattingUtils'\nimport InfoIcon from '../shared/images/info_book_icon.svg'\nimport HoverIcon from '../shared/images/hover.svg'\nimport { useTooltip } from '../shared/components/Tooltip'\n\ninterface GeneralInfoCardProps {\n  stats: AggregatedStats | undefined\n  currencyMode: 'usd' | 'xrp'\n}\n\nconst DEFAULT_EMPTY_VALUE = '--'\n\nexport const GeneralInfoCard: FC<GeneralInfoCardProps> = ({\n  stats,\n  currencyMode,\n}) => {\n  const { t } = useTranslation()\n  const { showTooltip, hideTooltip } = useTooltip()\n\n  if (!stats) {\n    return null\n  }\n\n  const tvl = currencyMode === 'usd' ? stats.tvl_usd : stats.tvl_xrp\n  const volume24h =\n    currencyMode === 'usd' ? stats.trading_volume_usd : stats.trading_volume_xrp\n\n  const formatCurrencyAmount = (value: number): string => {\n    if (currencyMode === 'xrp') {\n      return `${parseAmount(value)} XRP`\n    }\n    return parseCurrencyAmount(value)\n  }\n\n  const renderTooltip = (key: string) => (\n    <HoverIcon\n      className=\"hover\"\n      onMouseOver={(e) => {\n        const rect = e.currentTarget.getBoundingClientRect()\n        showTooltip('text', e, t(`${key}_tooltip` as any), {\n          x: rect.left + rect.width / 2,\n          y: rect.top - 60,\n        })\n      }}\n      onMouseLeave={() => hideTooltip()}\n    />\n  )\n\n  return (\n    <div className=\"info-card\">\n      <h3 className=\"info-card-title\">\n        <InfoIcon className=\"info-card-icon\" />\n        {t('general_info')}\n      </h3>\n      <div className=\"info-card-rows\">\n        <div className=\"info-card-row\">\n          <span className=\"info-card-label\">\n            {t('tvl')}\n            {renderTooltip('tvl')}\n          </span>\n          <span className=\"info-card-value\">\n            {tvl ? formatCurrencyAmount(tvl) : DEFAULT_EMPTY_VALUE}\n          </span>\n        </div>\n        <div className=\"info-card-row\">\n          <span className=\"info-card-label\">\n            {t('number_of_amms')}\n            {renderTooltip('number_of_amms')}\n          </span>\n          <span className=\"info-card-value\">\n            {stats.amm_pool_count\n              ? stats.amm_pool_count.toLocaleString()\n              : DEFAULT_EMPTY_VALUE}\n          </span>\n        </div>\n        <div className=\"info-card-row\">\n          <span className=\"info-card-label\">\n            {t('number_of_lps')}\n            {renderTooltip('number_of_lps')}\n          </span>\n          <span className=\"info-card-value\">\n            {stats.liquidity_provider_count\n              ? stats.liquidity_provider_count.toLocaleString()\n              : DEFAULT_EMPTY_VALUE}\n          </span>\n        </div>\n        <div className=\"info-card-row\">\n          <span className=\"info-card-label\">\n            {t('volume_24h' as any)}\n            {renderTooltip('volume_24h_all')}\n          </span>\n          <span className=\"info-card-value\">\n            {volume24h ? formatCurrencyAmount(volume24h) : DEFAULT_EMPTY_VALUE}\n          </span>\n        </div>\n      </div>\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/AMMRankings/ammRankings.scss",
    "content": "@use '../shared/css/variables' as *;\n@use '../shared/css/table';\n@use '../shared/css/info-card';\n\n.amm-rankings-page {\n  overflow: visible;\n  width: 100%;\n  max-width: 1500px;\n  min-height: 150px;\n  padding: 0 24px;\n  margin: 40px auto 0;\n  color: $white;\n\n  // ─── Page header ───────────────────────────────────────────────\n  .page-header {\n    margin-bottom: 16px;\n\n    .page-title {\n      margin: 0;\n      color: $white;\n      font-size: 36px;\n      @include bold;\n    }\n  }\n\n  // ─── Chart + General Info side-by-side ────────────────────────\n  .chart-and-info-container {\n    display: flex;\n    flex-direction: column-reverse;\n    align-items: stretch;\n    margin-bottom: 64px;\n    gap: 32px;\n\n    @include for-size(desktop-up) {\n      flex-direction: row;\n      align-items: flex-start;\n    }\n  }\n\n  // The shared TVLVolumeChart wraps everything in .tvl-volume-section,\n  // which is the direct flex child of .chart-and-info-container.\n  .tvl-volume-section {\n    min-width: 0;\n    margin-bottom: 0; // Override shared component's 50px margin\n\n    @include for-size(desktop-up) {\n      flex: 3;\n    }\n  }\n\n  // ─── General Info Card ────────────────────────────────────────\n  // Align the top of the card with the top of the chart container,\n  // accounting for the section title + controls above the chart.\n  .info-card {\n    @include for-size(desktop-up) {\n      min-width: 200px;\n      max-width: 320px;\n      flex: 1;\n      // Offset = chart-section-title height + margin + controls height + margin\n      margin-top: 84px;\n    }\n  }\n\n  // ─── Table section ────────────────────────────────────────────\n  .amm-rankings-table-container {\n    .table-title {\n      padding-bottom: 0;\n      border-bottom: none;\n      margin: 0 0 40px;\n      color: $white;\n      font-size: 20px;\n      @include bold;\n    }\n  }\n\n  .table-controls {\n    display: flex;\n    flex-wrap: wrap;\n    align-items: center;\n    justify-content: flex-start;\n    margin-bottom: 16px;\n    gap: 12px;\n\n    .currency-switch {\n      margin-left: auto;\n    }\n  }\n\n  .search-wrapper {\n    position: relative;\n    max-width: 400px;\n    flex: 1;\n\n    &::before {\n      position: absolute;\n      top: 50%;\n      left: 12px;\n      width: 16px;\n      height: 16px;\n      background-image: url('../shared/images/search.svg');\n      background-repeat: no-repeat;\n      background-size: contain;\n      content: '';\n      pointer-events: none;\n      transform: translateY(-50%);\n    }\n\n    .amm-search {\n      width: 100%;\n      box-sizing: border-box;\n      padding: 7px 12px 7px 36px;\n      border: 1px solid $black-50;\n      border-radius: $border-radius;\n      background-color: $black;\n      color: $white;\n      font-size: 13px;\n      outline: none;\n      transition: border-color 0.15s;\n\n      &::placeholder {\n        color: $black-50;\n      }\n\n      &:focus {\n        border-color: $blue-50;\n      }\n    }\n  }\n\n  .table-filters {\n    display: flex;\n    flex-wrap: wrap;\n    align-items: center;\n    gap: 10px;\n\n    .filter-icon-btn {\n      width: 24px;\n      height: 24px;\n      flex-shrink: 0;\n      background-image: url('../shared/images/group.svg');\n      background-repeat: no-repeat;\n      background-size: contain;\n    }\n\n    .category-filter {\n      display: flex;\n      align-items: center;\n      padding: 6px 12px;\n      border: 1px solid $black-50;\n      border-radius: $border-radius;\n      background-color: $black;\n      color: $white;\n      cursor: pointer;\n      font-size: 14px;\n      gap: 6px;\n      transition: background-color 0.15s;\n      @include medium;\n\n      &:hover {\n        background-color: $black-70;\n      }\n\n      &.selected {\n        background-color: $white;\n        color: $black;\n\n        .item-icon {\n          filter: invert(1);\n        }\n      }\n\n      /* stylelint-disable-next-line no-descending-specificity */\n      .item-icon {\n        width: 18px;\n        height: 18px;\n        background-position: center;\n        background-repeat: no-repeat;\n        background-size: contain;\n\n        &.icon-rwa {\n          background-image: url('../shared/images/rwa.svg');\n        }\n\n        &.icon-stablecoin {\n          background-image: url('../shared/images/stablecoin.svg');\n        }\n\n        &.icon-memes {\n          background-image: url('../shared/images/memes.svg');\n        }\n\n        &.icon-defi {\n          background-image: url('../shared/images/decentralized.svg');\n        }\n      }\n    }\n  }\n\n  // ─── Table Wrapper ────────────────────────────────────────────\n  .table-wrap {\n    -webkit-overflow-scrolling: touch;\n    overflow-x: auto;\n  }\n\n  // ─── AMM Rankings Table ───────────────────────────────────────\n  .amm-rankings-table {\n    width: 100%;\n    min-width: 1000px; // Ensure horizontal scroll on smaller viewports\n\n    // Table headers - match explorer standard\n    th {\n      padding: 12px 8px;\n      color: $black-40; // Match standard explorer table headers\n      font-size: 12px;\n      font-weight: 600; // Figma: Semi Bold\n      line-height: 1.5em; // Figma: 18px (1.5 * 12px)\n      text-align: left;\n      text-transform: uppercase;\n    }\n\n    td {\n      padding: 12px 8px; // Reduced horizontal padding for tighter columns\n    }\n\n    th.rank,\n    td.rank {\n      width: 50px;\n      padding-right: 4px;\n      padding-left: 12px;\n    }\n\n    // Rank column text color\n    td.rank {\n      color: $white; // Figma: XRPL/Primary/White\n    }\n\n    td.pool {\n      .pool-display {\n        display: flex;\n        align-items: center;\n        gap: 10px;\n\n        .token-pair {\n          position: relative;\n          display: flex;\n          width: 48px; // Fixed width: 28px (first icon) + 20px (second icon visible after -8px overlap)\n          flex-shrink: 0;\n          align-items: center;\n\n          // Apply overlap only to the wrapper/link level, not the icon itself\n          .token-icon-link,\n          .token-icon-wrapper {\n            position: relative;\n            display: inline-block;\n\n            &:nth-child(2) {\n              z-index: 1;\n              margin-left: -8px; // Overlap per Figma: 24px icon offset at 16px → 8px overlap\n            }\n\n            &:first-child {\n              z-index: 2; // Keep first icon on top\n            }\n          }\n\n          /* stylelint-disable-next-line no-descending-specificity */\n          .token-icon-link {\n            text-decoration: none;\n            transition: transform 0.2s ease;\n\n            &:hover {\n              z-index: 10;\n              transform: scale(1.1);\n            }\n          }\n\n          /* stylelint-disable-next-line no-descending-specificity */\n          .token-icon-wrapper {\n            &.fallback-mode {\n              .token-icon:not(.fallback) {\n                display: none;\n              }\n\n              .token-icon.fallback {\n                display: flex !important;\n              }\n            }\n          }\n\n          /* stylelint-disable-next-line no-descending-specificity */\n          .token-icon {\n            display: flex;\n            width: 28px;\n            height: 28px;\n            flex-shrink: 0;\n            align-items: center;\n            justify-content: center;\n            border: 2px solid $black-90;\n            border-radius: 50%;\n            background-color: $black-90; // Ensure solid background\n            color: $white;\n            font-size: 9px;\n            object-fit: cover;\n            @include bold;\n\n            /* stylelint-disable-next-line no-descending-specificity */\n            &.fallback {\n              background: linear-gradient(135deg, $blue-50, $blue-purple-50);\n            }\n          }\n        }\n\n        .pool-name {\n          min-width: 0; // Allow text to shrink if needed\n          flex: 1;\n          color: $white;\n          font-size: 14px;\n          white-space: nowrap;\n          @include regular;\n\n          .currency {\n            font: inherit;\n          }\n        }\n      }\n    }\n\n    td.amm-account-id {\n      font-size: 13px;\n\n      .account {\n        color: $green-30;\n\n        &:hover {\n          color: $green-50;\n        }\n      }\n    }\n\n    td.apr {\n      color: $white;\n    }\n  }\n\n  // ─── Responsive ───────────────────────────────────────────────\n  @include for-size(phone-only) {\n    padding: 0 12px;\n\n    .page-header {\n      flex-direction: column;\n      align-items: flex-start;\n    }\n  }\n\n  @include for-size(desktop-up) {\n    padding: 0 80px;\n    margin-top: 60px;\n\n    .page-header {\n      .page-title {\n        font-size: 36px;\n      }\n    }\n\n    // On larger viewports, reduce spacing to fit all columns without scrolling\n    .amm-rankings-table {\n      min-width: auto; // Remove min-width constraint\n\n      th,\n      td {\n        padding: 12px 6px; // Further reduced horizontal padding\n      }\n\n      th.rank,\n      td.rank {\n        padding-right: 4px;\n        padding-left: 12px;\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "src/containers/AMMRankings/api.ts",
    "content": "import axios from 'axios'\n\nexport interface AMMPool {\n  amm_account_id: string\n  currency_1: string\n  issuer_1?: string\n  currency_2: string\n  issuer_2?: string\n  tvl_xrp: number\n  tvl_usd: number\n  trading_volume_xrp: number\n  trading_volume_usd: number\n  fees_collected_xrp: number\n  fees_collected_usd: number\n  annual_percentage_return: number\n  liquidity_provider_count: number\n  amm_created_timestamp: string\n  // Trading fee from amm_info RPC (0-1000, where 1000 = 1%)\n  trading_fee?: number\n  // Token data from LOS /tokens/batch-get (server-cached)\n  icon_1?: string\n  icon_2?: string\n  asset_class_1?: string\n  asset_class_2?: string\n  asset_subclass_1?: string\n  asset_subclass_2?: string\n}\n\nexport interface AMMRankingsResponse {\n  size: number\n  sort_field: string\n  sort_order: string\n  count: number\n  results: AMMPool[]\n}\n\nexport interface AggregatedStats {\n  tvl_xrp: number\n  tvl_usd: number\n  amm_pool_count: number\n  liquidity_provider_count: number\n  trading_volume_xrp: number\n  trading_volume_usd: number\n}\n\nexport interface HistoricalDataPoint {\n  date: string\n  tvl_xrp: number\n  tvl_usd: number\n  trading_volume_xrp: number\n  trading_volume_usd: number\n}\n\nexport interface HistoricalTrendsResponse {\n  amm_account_id: string\n  time_range?: string\n  start_date?: string\n  total_data_points: number\n  data_points: HistoricalDataPoint[]\n}\n\n/**\n * Fetch AMM rankings (top 1000 AMMs)\n * Icons, asset_class/asset_subclass, and trading_fee are included from server cache\n */\nexport const fetchAMMRankings = async (\n  sortField: string = 'tvl_usd',\n  sortOrder: 'asc' | 'desc' = 'desc',\n): Promise<AMMRankingsResponse> => {\n  const response = await axios.get('/api/v1/amms', {\n    params: {\n      size: 1000,\n      sort_field: sortField,\n      sort_order: sortOrder,\n    },\n  })\n\n  return response.data\n}\n\n/**\n * Fetch aggregated AMM statistics\n */\nexport const fetchAggregatedStats = async (): Promise<AggregatedStats> => {\n  const response = await axios.get('/api/v1/amms/aggregated')\n  return response.data\n}\n\n/**\n * Fetch historical trends for aggregated AMM data\n */\nexport const fetchHistoricalTrends = async (\n  timeRange: string = '6M',\n): Promise<HistoricalTrendsResponse> => {\n  const response = await axios.get('/api/v1/amms/historical-trends', {\n    params: {\n      amm_account_id: 'aggregated',\n      time_range: timeRange,\n    },\n  })\n  return response.data\n}\n\n/**\n * Fetch historical trends for a specific AMM pool\n */\nexport const fetchAMMHistoricalTrends = async (\n  ammAccountId: string,\n  timeRange: string = '6M',\n): Promise<HistoricalTrendsResponse> => {\n  const response = await axios.get('/api/v1/amms/historical-trends', {\n    params: {\n      amm_account_id: ammAccountId,\n      time_range: timeRange,\n    },\n  })\n  return response.data\n}\n"
  },
  {
    "path": "src/containers/AMMRankings/index.tsx",
    "content": "import { FC, useEffect, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { useQuery } from 'react-query'\nimport { Loader } from '../shared/components/Loader'\nimport { Tooltip, useTooltip } from '../shared/components/Tooltip'\nimport { TVLVolumeChart } from '../shared/components/TVLVolumeChart'\nimport { useAnalytics } from '../shared/analytics'\nimport Log from '../shared/log'\nimport { AMMRankingsTable } from './AMMRankingsTable'\nimport { GeneralInfoCard } from './GeneralInfoCard'\nimport {\n  fetchAMMRankings,\n  fetchAggregatedStats,\n  fetchHistoricalTrends,\n} from './api'\nimport './ammRankings.scss'\n\ntype CurrencyMode = 'usd' | 'xrp'\ntype TimeRange = '1W' | '1M' | '6M' | '1Y' | '5Y'\n\nconst REFETCH_INTERVAL = 60 * 1000 // 1 minute\n\nexport const AMMRankings: FC = () => {\n  const { t } = useTranslation()\n  const { trackScreenLoaded, trackException } = useAnalytics()\n  const { tooltip } = useTooltip()\n\n  const [currencyMode, setCurrencyMode] = useState<CurrencyMode>('usd')\n  const [timeRange, setTimeRange] = useState<TimeRange>('6M')\n  const [sortField] = useState('tvl_usd')\n  const [sortOrder] = useState<'asc' | 'desc'>('desc')\n\n  useEffect(() => {\n    trackScreenLoaded()\n  }, [trackScreenLoaded])\n\n  const { data: ammRankingsData, isLoading: isLoadingRankings } = useQuery(\n    ['ammRankings', sortField, sortOrder],\n    () => fetchAMMRankings(sortField, sortOrder),\n    {\n      refetchInterval: REFETCH_INTERVAL,\n      onError: (error) => {\n        Log.error(error)\n        trackException(`AMM rankings fetch --- ${JSON.stringify(error)}`)\n      },\n    },\n  )\n\n  const { data: aggregatedStats, isLoading: isLoadingStats } = useQuery(\n    ['ammAggregatedStats'],\n    () => fetchAggregatedStats(),\n    {\n      refetchInterval: REFETCH_INTERVAL,\n      onError: (error) => {\n        Log.error(error)\n        trackException(\n          `AMM aggregated stats fetch --- ${JSON.stringify(error)}`,\n        )\n      },\n    },\n  )\n\n  const { data: historicalData, isLoading: isLoadingHistory } = useQuery(\n    ['ammHistoricalTrends', timeRange],\n    () => fetchHistoricalTrends(timeRange),\n    {\n      refetchInterval: REFETCH_INTERVAL,\n      keepPreviousData: true,\n      onError: (error) => {\n        Log.error(error)\n        trackException(\n          `AMM historical trends fetch --- ${JSON.stringify(error)}`,\n        )\n      },\n    },\n  )\n\n  // Only show full-page loader on initial load.\n  // Subsequent refetches (e.g. time range changes) should not unmount the chart,\n  // otherwise its internal state (selected time range) resets.\n  const isInitialLoading =\n    (isLoadingRankings && !ammRankingsData) ||\n    (isLoadingStats && !aggregatedStats) ||\n    (isLoadingHistory && !historicalData)\n\n  return (\n    <div className=\"amm-rankings-page\">\n      <Tooltip tooltip={tooltip} />\n\n      <div className=\"page-header\">\n        <h1 className=\"page-title\">{t('amms')}</h1>\n      </div>\n\n      {isInitialLoading ? (\n        <Loader />\n      ) : (\n        <>\n          <div className=\"chart-and-info-container\">\n            <TVLVolumeChart\n              data={(historicalData?.data_points || []).map((point) => ({\n                date: point.date,\n                tvl: currencyMode === 'usd' ? point.tvl_usd : point.tvl_xrp,\n                volume:\n                  currencyMode === 'usd'\n                    ? point.trading_volume_usd\n                    : point.trading_volume_xrp,\n              }))}\n              isLoading={isLoadingHistory}\n              displayCurrency={currencyMode}\n              setDisplayCurrency={setCurrencyMode}\n              onTimeRangeChange={(range) => setTimeRange(range as TimeRange)}\n            />\n\n            <GeneralInfoCard\n              stats={aggregatedStats}\n              currencyMode={currencyMode}\n            />\n          </div>\n\n          <AMMRankingsTable\n            amms={ammRankingsData?.results || []}\n            currencyMode={currencyMode}\n          />\n        </>\n      )}\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/AMMRankings/svg.d.ts",
    "content": "declare module '*.svg?url' {\n  const content: string\n  export default content\n}\n"
  },
  {
    "path": "src/containers/AMMRankings/test/AMMRankingsTable.test.tsx",
    "content": "import { render, screen, fireEvent } from '@testing-library/react'\nimport { AMMRankingsTable } from '../AMMRankingsTable'\nimport { AMMPool } from '../api'\nimport i18n from '../../../i18n/testConfigEnglish'\nimport { QuickHarness } from '../../test/utils'\n\n// Mock SVG imports\njest.mock('../../shared/images/hover.svg', () => 'svg')\njest.mock('../../shared/images/xrp_icon.svg?url', () => 'xrp_icon.svg')\njest.mock('../../shared/images/default_token_icon.svg', () => 'svg')\n\nconst createAMM = (overrides: Partial<AMMPool> = {}): AMMPool => ({\n  amm_account_id: 'rDefaultAMMAccountId1234567890',\n  currency_1: 'XRP',\n  currency_2: 'USD',\n  issuer_2: 'rIssuer123',\n  tvl_xrp: 100000,\n  tvl_usd: 50000,\n  trading_volume_xrp: 20000,\n  trading_volume_usd: 10000,\n  fees_collected_xrp: 200,\n  fees_collected_usd: 100,\n  annual_percentage_return: 0.12345,\n  liquidity_provider_count: 42,\n  amm_created_timestamp: '2025-01-01T00:00:00Z',\n  trading_fee: 500,\n  ...overrides,\n})\n\nconst renderComponent = (\n  amms: AMMPool[] = [],\n  currencyMode: 'usd' | 'xrp' = 'usd',\n) =>\n  render(\n    <QuickHarness i18n={i18n}>\n      <AMMRankingsTable amms={amms} currencyMode={currencyMode} />\n    </QuickHarness>,\n  )\n\ndescribe('AMMRankingsTable', () => {\n  it('renders table headers', () => {\n    renderComponent()\n    expect(screen.getByText('#')).toBeInTheDocument()\n    expect(screen.getByText('Asset Pair')).toBeInTheDocument()\n    expect(screen.getByText('AMM Account ID')).toBeInTheDocument()\n    expect(screen.getByText('TVL')).toBeInTheDocument()\n    expect(screen.getByText('# of LPs')).toBeInTheDocument()\n    expect(screen.getByText('Fees (24H)')).toBeInTheDocument()\n    expect(screen.getByText('Trading Fee')).toBeInTheDocument()\n    expect(screen.getByText('APR (24H)')).toBeInTheDocument()\n  })\n\n  it('renders category filter buttons', () => {\n    renderComponent()\n    expect(screen.getByText('RWA')).toBeInTheDocument()\n    expect(screen.getByText('Stablecoins')).toBeInTheDocument()\n    expect(screen.getByText('Memes')).toBeInTheDocument()\n    expect(screen.getByText('DeFi')).toBeInTheDocument()\n  })\n\n  it('renders AMM row with USD values', () => {\n    const amm = createAMM()\n    const { container } = renderComponent([amm])\n    // Rank\n    expect(container.querySelector('td.rank')).toHaveTextContent('1')\n    // TVL in USD\n    expect(container.querySelector('td.tvl')).toBeInTheDocument()\n    // LP count\n    expect(container.querySelector('td.lp-count')).toHaveTextContent('42')\n    // Trading fee: 500/1000 = 0.5\n    expect(container.querySelector('td.trading-fee')).toHaveTextContent('0.5')\n  })\n\n  it('renders trading fee correctly for different values', () => {\n    const amms = [\n      createAMM({ amm_account_id: 'rAMM1', trading_fee: 1000 }),\n      createAMM({ amm_account_id: 'rAMM2', trading_fee: 100 }),\n      createAMM({ amm_account_id: 'rAMM3', trading_fee: 1 }),\n    ]\n    const { container } = renderComponent(amms)\n    const tradingFeeCells = container.querySelectorAll('td.trading-fee')\n    // 1000/1000 = 1\n    expect(tradingFeeCells[0]).toHaveTextContent('1')\n    // 100/1000 = 0.1\n    expect(tradingFeeCells[1]).toHaveTextContent('0.1')\n    // 1/1000 = 0.001\n    expect(tradingFeeCells[2]).toHaveTextContent('0.001')\n  })\n\n  it('renders -- when trading_fee is undefined', () => {\n    const amm = createAMM({ trading_fee: undefined })\n    const { container } = renderComponent([amm])\n    expect(container.querySelector('td.trading-fee')).toHaveTextContent('--')\n  })\n\n  it('renders -- for null numeric fields', () => {\n    const amm = createAMM({\n      tvl_usd: null as any,\n      trading_volume_usd: null as any,\n      fees_collected_usd: null as any,\n      annual_percentage_return: null as any,\n      liquidity_provider_count: null as any,\n      trading_fee: undefined,\n    })\n    const { container } = renderComponent([amm])\n    expect(container.querySelector('td.tvl')).toHaveTextContent('--')\n    expect(container.querySelector('td.volume')).toHaveTextContent('--')\n    expect(container.querySelector('td.fees-24h')).toHaveTextContent('--')\n    expect(container.querySelector('td.trading-fee')).toHaveTextContent('--')\n    expect(container.querySelector('td.apr')).toHaveTextContent('--')\n    expect(container.querySelector('td.lp-count')).toHaveTextContent('--')\n  })\n\n  it('switches currency to XRP and displays XRP values', () => {\n    const amm = createAMM()\n    const { container } = renderComponent([amm], 'usd')\n\n    // Toggle to XRP\n    const toggle = container.querySelector(\n      '.toggle-switch input',\n    ) as HTMLInputElement\n    fireEvent.click(toggle)\n\n    // After toggle, values should contain \"XRP\"\n    expect(container.querySelector('td.tvl')?.textContent).toContain('XRP')\n  })\n\n  it('filters AMMs by category', () => {\n    const amms = [\n      createAMM({\n        amm_account_id: 'rRWA1',\n        asset_class_1: 'rwa',\n        currency_1: 'RLUSD',\n      }),\n      createAMM({\n        amm_account_id: 'rDEFI1',\n        asset_class_1: 'defi',\n        currency_1: 'DFI',\n      }),\n    ]\n    const { container } = renderComponent(amms)\n\n    // Both rows visible initially\n    expect(container.querySelectorAll('tbody tr')).toHaveLength(2)\n\n    // Click RWA filter\n    fireEvent.click(screen.getByText('RWA'))\n    expect(container.querySelectorAll('tbody tr')).toHaveLength(1)\n\n    // Click RWA again to deselect\n    fireEvent.click(screen.getByText('RWA'))\n    expect(container.querySelectorAll('tbody tr')).toHaveLength(2)\n  })\n\n  it('searches AMMs by currency name', () => {\n    const amms = [\n      createAMM({\n        amm_account_id: 'rAMM1',\n        currency_1: 'XRP',\n        currency_2: 'USD',\n      }),\n      createAMM({\n        amm_account_id: 'rAMM2',\n        currency_1: 'BTC',\n        currency_2: 'ETH',\n      }),\n    ]\n    const { container } = renderComponent(amms)\n\n    const searchInput = container.querySelector(\n      '.amm-search',\n    ) as HTMLInputElement\n    fireEvent.change(searchInput, { target: { value: 'BTC' } })\n\n    expect(container.querySelectorAll('tbody tr')).toHaveLength(1)\n  })\n\n  it('searches AMMs by account ID', () => {\n    const amms = [\n      createAMM({ amm_account_id: 'rUniqueAccount111111111111111' }),\n      createAMM({ amm_account_id: 'rOtherAccount2222222222222222' }),\n    ]\n    const { container } = renderComponent(amms)\n\n    const searchInput = container.querySelector(\n      '.amm-search',\n    ) as HTMLInputElement\n    fireEvent.change(searchInput, { target: { value: 'rUniqueAccount' } })\n\n    expect(container.querySelectorAll('tbody tr')).toHaveLength(1)\n  })\n\n  it('paginates results (15 per page)', () => {\n    // Create 20 AMMs\n    const amms = Array.from({ length: 20 }, (_, i) =>\n      createAMM({ amm_account_id: `rAMM${String(i).padStart(30, '0')}` }),\n    )\n    const { container } = renderComponent(amms)\n\n    // Page 1: 15 rows\n    expect(container.querySelectorAll('tbody tr')).toHaveLength(15)\n\n    // First row rank should be 1\n    const firstRank = container.querySelector('tbody tr td.rank')\n    expect(firstRank).toHaveTextContent('1')\n  })\n\n  it('renders with XRP currency mode by default when passed', () => {\n    const amm = createAMM()\n    const { container } = renderComponent([amm], 'xrp')\n\n    // Values should contain \"XRP\"\n    expect(container.querySelector('td.tvl')?.textContent).toContain('XRP')\n  })\n\n  it('renders empty table when no AMMs provided', () => {\n    const { container } = renderComponent([])\n    expect(container.querySelectorAll('tbody tr')).toHaveLength(0)\n  })\n})\n"
  },
  {
    "path": "src/containers/Accounts/AccountAsset/FutureDataIcon.scss",
    "content": "@use '../../shared/css/variables' as *;\n\n.future-data {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  cursor: default;\n\n  .clock-icon {\n    width: 16px;\n    height: 16px;\n    color: $black-50;\n  }\n}\n"
  },
  {
    "path": "src/containers/Accounts/AccountAsset/FutureDataIcon.tsx",
    "content": "import ClockIcon from '../../shared/images/clock-icon.svg'\nimport { useTooltip } from '../../shared/components/Tooltip'\nimport './FutureDataIcon.scss'\n\nconst TOOLTIP_X_OFFSET = 10\nconst TOOLTIP_Y_OFFSET = -120\n\ninterface FutureDataIconProps {\n  message?: string\n}\n/**\n * Displays an icon with a tooltip indicating that the associated data will be available in a future release.\n *\n * Note: For the tooltip functionality to work, ensure that a `<Tooltip tooltip={tooltip} />`\n * component is rendered within the component tree. The TooltipProvider is available globally\n * from the App component.\n */\nexport const FutureDataIcon = ({\n  message = 'This data will be provided in a future release.',\n}: FutureDataIconProps) => {\n  const { showTooltip, hideTooltip } = useTooltip()\n\n  const handleShow = (e: React.MouseEvent | React.FocusEvent) => {\n    const rect = e.currentTarget.getBoundingClientRect()\n    showTooltip('text', e as any, message, {\n      // The tooltip position is adjusted to appear below and slightly to the right of the icon\n      x: rect.left + window.scrollX + TOOLTIP_X_OFFSET,\n      y: rect.top + window.scrollY + TOOLTIP_Y_OFFSET,\n    })\n  }\n\n  return (\n    <span\n      className=\"future-data\"\n      onMouseOver={handleShow}\n      onMouseLeave={() => hideTooltip()}\n      onFocus={handleShow}\n      onBlur={() => hideTooltip()}\n      tabIndex={0}\n      role=\"button\"\n    >\n      <ClockIcon className=\"clock-icon\" />\n    </span>\n  )\n}\n"
  },
  {
    "path": "src/containers/Accounts/AccountAsset/assetTables/HeldIOUs.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { useQuery } from 'react-query'\nimport { useEffect, useContext, useState, useCallback, useMemo } from 'react'\nimport Currency, {\n  LP_TOKEN_IDENTIFIER,\n} from '../../../shared/components/Currency'\nimport { Loader } from '../../../shared/components/Loader'\nimport { Account } from '../../../shared/components/Account'\nimport {\n  ACCOUNT_FLAGS,\n  buildFlags,\n  formatTransferFee,\n} from '../../../../rippled/lib/utils'\nimport { EmptyMessageTableRow } from '../../../shared/EmptyMessageTableRow'\nimport { RouteLink } from '../../../shared/routing'\nimport { TOKEN_ROUTE } from '../../../App/routes'\nimport SocketContext from '../../../shared/SocketContext'\nimport { shortenAccount } from '../../../shared/utils'\nimport {\n  getBalances,\n  getAccountLines,\n  getAccountInfo,\n} from '../../../../rippled/lib/rippled'\nimport logger from '../../../../rippled/lib/logger'\nimport DefaultTokenIcon from '../../../shared/images/default_token_icon.svg'\n\nimport { useLanguage } from '../../../shared/hooks'\nimport { calculateFormattedUsdBalance } from '../../../shared/NumberFormattingUtils'\n\nconst log = logger({ name: 'HeldIOUs' })\n\n// The LOS Token API has a batch size limit of 100; larger requests will be rejected.\nconst LOS_TOKEN_API_BATCH_SIZE = 100\n\ninterface HeldIOUsProps {\n  accountId: string\n  onChange?: (data: { count: number; isLoading: boolean }) => void\n}\n\ninterface IOU {\n  tokenCode: string\n  tokenIcon?: string\n  issuer: string\n  issuerName: string\n  balance: number\n  priceInUSD: number\n  assetClass: string\n  transferFee?: string\n  frozen?: string\n}\n\nconst fetchAccountHeldIOUs = async (\n  rippledSocket: any,\n  accountId: string,\n): Promise<IOU[]> => {\n  let balancesResponse\n  try {\n    balancesResponse = await getBalances(rippledSocket, accountId)\n  } catch (error) {\n    log.error(\n      `Error calling 'gatewayBalances' for account ${accountId}: ${JSON.stringify(error)}`,\n    )\n    return []\n  }\n\n  // Collect all tokens, whether they are LP Tokens or IOUs\n  const assetTokens: any[] = []\n  for (const assets of Object.values(balancesResponse?.assets ?? {})) {\n    for (const asset of assets as any[]) {\n      if (asset.currency) {\n        assetTokens.push(asset.currency)\n      }\n    }\n  }\n  if (assetTokens.length === 0) {\n    // No tokens held, return empty array\n    return []\n  }\n\n  // Get all trust lines using account_lines with pagination\n  const allTrustLines: any[] = []\n  let marker = ''\n  do {\n    try {\n      // eslint-disable-next-line no-await-in-loop\n      const accountLinesResponse = await getAccountLines(\n        rippledSocket,\n        accountId,\n        400,\n        marker,\n      )\n\n      if (accountLinesResponse?.lines) {\n        allTrustLines.push(...accountLinesResponse.lines)\n      }\n\n      marker = accountLinesResponse?.marker || ''\n    } catch (error) {\n      log.error(\n        `Error fetching account lines for account ${accountId}: ${JSON.stringify(error)}`,\n      )\n      // Break the loop on error to avoid infinite retry\n      break\n    }\n  } while (marker)\n\n  // Keep positive balances only (no LP token filtering at this stage)\n  const positiveBalanceLines = allTrustLines.filter(\n    (line: any) => parseFloat(line.balance) > 0,\n  )\n\n  if (positiveBalanceLines.length === 0) {\n    return []\n  }\n\n  // Batch get token data from LOS Token API\n  const allTokenIds = positiveBalanceLines.map(\n    (line: any) => `${line.currency}.${line.account}`,\n  )\n  let allTokensFromLOS: Record<string, any> = {}\n  for (let i = 0; i < allTokenIds.length; i += LOS_TOKEN_API_BATCH_SIZE) {\n    const tokenIds = allTokenIds.slice(i, i + LOS_TOKEN_API_BATCH_SIZE)\n    try {\n      // eslint-disable-next-line no-await-in-loop\n      const apiResponse = await fetch(\n        `${process.env.VITE_LOS_URL}/tokens/batch-get`,\n        {\n          method: 'POST',\n          headers: { 'Content-Type': 'application/json' },\n          body: JSON.stringify({ tokenIds }),\n        },\n      )\n\n      if (apiResponse.ok) {\n        // eslint-disable-next-line no-await-in-loop\n        const responseBody = await apiResponse.json()\n        const tokensFromLOS =\n          responseBody.tokens?.reduce((acc: any, token: any) => {\n            acc[`${token.currency}.${token.issuer_account}`] = {\n              ...token,\n            }\n            return acc\n          }, {}) || {}\n        allTokensFromLOS = { ...allTokensFromLOS, ...tokensFromLOS }\n      }\n    } catch (error) {\n      log.error(\n        `Error batch-get tokens[${tokenIds.join(', ')}]. Error: ${JSON.stringify(error)}`,\n      )\n    }\n  }\n\n  // Combine all data (without transfer fees and Global freeze status for now)\n  const tokens: IOU[] = positiveBalanceLines.map((line: any) => {\n    const tokenId = `${line.currency}.${line.account}`\n    const token = allTokensFromLOS[tokenId]\n\n    return {\n      tokenCode: line.currency,\n      tokenIcon: token?.icon,\n      issuer: line.account,\n      issuerName: token?.issuer_name,\n      balance: parseFloat(line.balance),\n      priceInUSD: token?.price_usd ? parseFloat(token.price_usd) : 0,\n      assetClass: token?.asset_class || '--',\n      transferFee: '--',\n      frozen: line.freeze || line.freeze_peer ? 'Trustline' : '--',\n    }\n  })\n\n  return tokens\n}\n\n/**\n * Held IOUs rendering flow:\n * 1. Initially display all tokens whose currency codes don't start with `03` (since `03` may indicate LP tokens).\n * 2. After confirming a `03` token is not an LP token, add it to the table.\n * 3. Progressively enrich each token row with transfer fee and account-level freeze status as that data loads.\n */\nexport const HeldIOUs = ({ accountId, onChange }: HeldIOUsProps) => {\n  const lang = useLanguage()\n  const { t } = useTranslation()\n  const rippledSocket = useContext(SocketContext)\n\n  const [progressiveUpdates, setProgressiveUpdates] = useState<\n    Record<string, { transferFee: string; accountGlobalFrozen: boolean }>\n  >({})\n  const [confirmedNonLPTokens, setConfirmedNonLPTokens] = useState<Set<string>>(\n    new Set(),\n  )\n  const [lpTokenCheckComplete, setLpTokenCheckComplete] = useState(false)\n\n  const heldIOUsQuery = useQuery(['heldIOUs', accountId], () =>\n    fetchAccountHeldIOUs(rippledSocket, accountId),\n  )\n\n  // Filter out ALL '03' tokens initially, then add back confirmed non-LP tokens\n  const sortedIOUs = useMemo(() => {\n    const data = heldIOUsQuery.data || []\n    const filteredData = data.filter((token) => {\n      // If it starts with '03', only include if confirmed as non-LP\n      if (token.tokenCode.startsWith(LP_TOKEN_IDENTIFIER)) {\n        return confirmedNonLPTokens.has(token.tokenCode)\n      }\n      // Include all non-'03' tokens\n      return true\n    })\n\n    return [...filteredData].sort(\n      (a, b) => b.priceInUSD * b.balance - a.priceInUSD * a.balance,\n    )\n  }, [heldIOUsQuery.data, confirmedNonLPTokens])\n\n  // Apply progressive updates to the base IOU token data\n  const iouTokens = sortedIOUs.map((token) => {\n    const progressiveUpdate = progressiveUpdates[token.issuer]\n    return {\n      ...token,\n      transferFee: progressiveUpdate?.transferFee || token.transferFee,\n      frozen: progressiveUpdate?.accountGlobalFrozen ? 'Global' : token.frozen,\n    }\n  })\n\n  // Progressive fetching of account info with transfer fee and Global freeze status\n  const fetchAccountInfoProgressively = useCallback(async () => {\n    if (sortedIOUs.length === 0) {\n      return\n    }\n\n    const uniqueIssuers = [...new Set(sortedIOUs.map((line) => line.issuer))]\n    for (const issuer of uniqueIssuers) {\n      try {\n        // eslint-disable-next-line no-await-in-loop\n        const accountInfo = await getAccountInfo(rippledSocket, issuer, false)\n\n        const transferFee = formatTransferFee(accountInfo?.TransferRate, 'IOU')\n\n        const accountGlobalFrozen = buildFlags(\n          accountInfo?.Flags,\n          ACCOUNT_FLAGS,\n        ).includes('lsfGlobalFreeze')\n\n        setProgressiveUpdates((prev) => ({\n          ...prev,\n          [issuer]: {\n            transferFee: `${transferFee}%`,\n            accountGlobalFrozen,\n          },\n        }))\n      } catch (error) {\n        log.error(\n          `Error fetching account information: ${JSON.stringify(error)}`,\n        )\n      }\n    }\n  }, [sortedIOUs, rippledSocket])\n\n  // Identify non-LP tokens - check which '03' tokens are regular IOUs (not LP tokens)\n  const identifyNonLPTokensProgressively = useCallback(async () => {\n    if (!heldIOUsQuery.data || heldIOUsQuery.data.length === 0) {\n      setLpTokenCheckComplete(true)\n      return\n    }\n\n    // Group tokens by issuer to minimize getAccountInfo calls\n    const tokensByIssuer = new Map<string, string[]>()\n    for (const token of heldIOUsQuery.data) {\n      if (token.tokenCode.startsWith(LP_TOKEN_IDENTIFIER)) {\n        const tokens = tokensByIssuer.get(token.issuer) || []\n        tokens.push(token.tokenCode)\n        tokensByIssuer.set(token.issuer, tokens)\n      }\n    }\n\n    for (const [issuer, tokenCodes] of tokensByIssuer.entries()) {\n      try {\n        // eslint-disable-next-line no-await-in-loop\n        const accountInfo = await getAccountInfo(rippledSocket, issuer, false)\n\n        // If the issuer does NOT have an AMMID, these are regular IOUs (non-LP tokens)\n        if (!accountInfo.AMMID) {\n          setConfirmedNonLPTokens((prev) => {\n            const newSet = new Set(prev)\n            for (const tokenCode of tokenCodes) {\n              newSet.add(tokenCode)\n            }\n            return newSet\n          })\n        }\n      } catch (error) {\n        log.warn(\n          `Error checking if issuer ${issuer} is AMM account: ${JSON.stringify(error)}`,\n        )\n        // If we can't fetch account info, assume it's not an AMM to be safe\n        // Add these tokens to the confirmed non-LP list\n        setConfirmedNonLPTokens((prev) => {\n          const newSet = new Set(prev)\n          for (const tokenCode of tokenCodes) {\n            newSet.add(tokenCode)\n          }\n          return newSet\n        })\n      }\n    }\n\n    setLpTokenCheckComplete(true)\n  }, [heldIOUsQuery.data, rippledSocket])\n\n  // Start identifying non-LP tokens immediately after initial data loads\n  useEffect(() => {\n    if (heldIOUsQuery.data && heldIOUsQuery.data.length > 0) {\n      identifyNonLPTokensProgressively()\n    } else if (heldIOUsQuery.data && heldIOUsQuery.data.length === 0) {\n      setLpTokenCheckComplete(true)\n    }\n  }, [heldIOUsQuery.data, identifyNonLPTokensProgressively])\n\n  // Begin progressive updates once the LP token check is complete (we now have the final IOU list)\n  useEffect(() => {\n    if (lpTokenCheckComplete && sortedIOUs.length > 0) {\n      fetchAccountInfoProgressively()\n    }\n  }, [lpTokenCheckComplete, sortedIOUs.length, fetchAccountInfoProgressively])\n\n  // Communicate count and loading state back to parent\n  // Keep loading state true until LP token checks are complete\n  useEffect(() => {\n    if (onChange) {\n      onChange({\n        count: iouTokens.length,\n        isLoading: heldIOUsQuery.isLoading || !lpTokenCheckComplete,\n      })\n    }\n  }, [\n    iouTokens.length,\n    heldIOUsQuery.isLoading,\n    lpTokenCheckComplete,\n    onChange,\n  ])\n\n  if (heldIOUsQuery.isLoading) {\n    return <Loader />\n  }\n\n  return (\n    <div className=\"account-asset-table\">\n      <table>\n        <thead>\n          <tr>\n            <th>{t('account_page_asset_table_column_currency_code')}</th>\n            <th>{t('account_page_asset_table_column_issuer')}</th>\n            <th>{t('account_page_asset_table_column_price_usd')}</th>\n            <th>{t('account_page_asset_table_column_balance')}</th>\n            <th>{t('account_page_asset_table_column_balance_usd')}</th>\n            <th>{t('account_page_asset_table_column_asset_class')}</th>\n            <th>{t('account_page_asset_table_column_transfer_fee')}</th>\n            <th>{t('account_page_asset_table_column_frozen')}</th>\n          </tr>\n        </thead>\n        <tbody>\n          {iouTokens.length === 0 ? (\n            <EmptyMessageTableRow colSpan={9}>\n              {t('account_page_asset_table_no_iou')}\n            </EmptyMessageTableRow>\n          ) : (\n            iouTokens.map((token) => {\n              const {\n                formattedUsdPrice,\n                formattedBalance,\n                formattedBalanceUsd,\n              } = calculateFormattedUsdBalance(\n                token.balance,\n                token.priceInUSD,\n                lang,\n              )\n\n              return (\n                <tr key={`${token.tokenCode}-${token.issuer}-${token.balance}`}>\n                  <td>\n                    <RouteLink\n                      to={TOKEN_ROUTE}\n                      params={{ token: `${token.tokenCode}.${token.issuer}` }}\n                    >\n                      <div className=\"token\">\n                        {token.tokenIcon ? (\n                          <img\n                            src={token.tokenIcon}\n                            alt={token.tokenCode}\n                            className=\"token-icon\"\n                          />\n                        ) : (\n                          <DefaultTokenIcon className=\"token-icon\" />\n                        )}\n                        <Currency currency={token.tokenCode} />\n                      </div>\n                    </RouteLink>\n                  </td>\n                  <td>\n                    <Account\n                      displayText={\n                        token.issuerName || shortenAccount(token.issuer)\n                      }\n                      account={token.issuer}\n                    />\n                  </td>\n                  <td>{formattedUsdPrice}</td>\n                  <td>{formattedBalance}</td>\n                  <td>{formattedBalanceUsd}</td>\n                  <td className=\"asset-class\">{token.assetClass}</td>\n                  <td className=\"transfer-fee\">{token.transferFee || '--'}</td>\n                  <td>{token.frozen}</td>\n                </tr>\n              )\n            })\n          )}\n        </tbody>\n      </table>\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/Accounts/AccountAsset/assetTables/HeldLPTokens.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { useQuery } from 'react-query'\nimport { useEffect, useContext, useMemo } from 'react'\nimport { Loader } from '../../../shared/components/Loader'\nimport SocketContext from '../../../shared/SocketContext'\nimport Currency, {\n  LP_TOKEN_IDENTIFIER,\n} from '../../../shared/components/Currency'\nimport { Account } from '../../../shared/components/Account'\nimport {\n  formatUsdValue,\n  formatTokenBalance,\n} from '../../../shared/NumberFormattingUtils'\nimport { useLanguage } from '../../../shared/hooks'\nimport { shortenAccount } from '../../../shared/utils'\n\nimport {\n  getBalances,\n  getAMMInfoByAMMAccount,\n} from '../../../../rippled/lib/rippled'\nimport { XRP_BASE } from '../../../shared/transactionUtils'\nimport { EmptyMessageTableRow } from '../../../shared/EmptyMessageTableRow'\nimport logger from '../../../../rippled/lib/logger'\n\nconst log = logger({ name: 'HeldLPTokens' })\n\nconst fetchAccountHeldLPTokens = async (rippledSocket, accountId) => {\n  let balancesResponse\n  try {\n    balancesResponse = await getBalances(rippledSocket, accountId)\n  } catch (error) {\n    log.error(\n      `Error calling gatewayBalances for account ${accountId}: ${JSON.stringify(error)}`,\n    )\n    return []\n  }\n  const lpTokens: any[] = []\n  for (const [issuerAccount, assets] of Object.entries(\n    balancesResponse?.assets ?? {},\n  )) {\n    for (const asset of assets as any[]) {\n      if (asset.currency && asset.currency.startsWith(LP_TOKEN_IDENTIFIER)) {\n        // eslint-disable-next-line no-await-in-loop\n        const result = await processLPTokenAsset(\n          rippledSocket,\n          issuerAccount,\n          asset,\n        )\n\n        // The currency code of an IOU could start with `LP_TOKEN_IDENTIFIER` as well,\n        // but `result` will be null since getAMMInfoByAMMAccount will throw an exception\n        if (result) {\n          lpTokens.push(result)\n        }\n      }\n    }\n  }\n\n  return lpTokens\n}\n\nconst processLPTokenAsset = async (rippledSocket, issuerAccount, asset) => {\n  let ammInfoResponse\n  try {\n    ammInfoResponse = await getAMMInfoByAMMAccount(rippledSocket, issuerAccount)\n  } catch (error) {\n    log.error(`Error fetching AMM pool: ${JSON.stringify(error)}`)\n    return null\n  }\n\n  if (!ammInfoResponse.amm) {\n    return null\n  }\n\n  const ammData = ammInfoResponse.amm\n\n  // Calculate share percentage\n  const accountLPTokenBalance = parseFloat(asset.value)\n  const ammLPTokenBalance = parseFloat(ammData.lp_token?.value || 0)\n  const sharePercentage =\n    ammLPTokenBalance > 0\n      ? (100 * accountLPTokenBalance) / ammLPTokenBalance\n      : 0\n\n  const isAmount1XRP = typeof ammData.amount === 'string'\n  const isAmount2XRP = typeof ammData.amount2 === 'string'\n\n  // Calculate LP Token price in XRP only when one of the assets is XRP\n  let lpTokenPriceInXRP = 0\n  if (isAmount1XRP || isAmount2XRP) {\n    const xrpAmount = isAmount1XRP\n      ? parseFloat(ammData.amount) / XRP_BASE\n      : parseFloat(ammData.amount2) / XRP_BASE\n\n    if (ammLPTokenBalance > 0 && xrpAmount > 0) {\n      // Price per LP token = (XRP in pool * 2) / total LP tokens\n      // We multiply by 2 because LP token represents share of both assets\n      lpTokenPriceInXRP = (xrpAmount * 2) / ammLPTokenBalance\n    }\n  }\n\n  let currency1\n  let currency2\n  if (isAmount1XRP && !isAmount2XRP) {\n    currency1 = 'XRP'\n    currency2 = ammData.amount2.currency\n  } else if (!isAmount1XRP && isAmount2XRP) {\n    currency1 = 'XRP'\n    currency2 = ammData.amount.currency\n  } else {\n    // Both are tokens (no XRP)\n    currency1 = ammData.amount.currency\n    currency2 = ammData.amount2.currency\n  }\n\n  return {\n    ammInstance: issuerAccount,\n    currency1,\n    currency2,\n    lpTokenBalance: accountLPTokenBalance,\n    lpTokenPriceInXRP,\n    share: sharePercentage,\n  }\n}\n\ninterface HeldLPTokensProps {\n  accountId: string\n  xrpToUSDRate: number\n  onChange?: (data: { count: number; isLoading: boolean }) => void\n}\n\nexport const HeldLPTokens = ({\n  accountId,\n  xrpToUSDRate,\n  onChange,\n}: HeldLPTokensProps) => {\n  const lang = useLanguage()\n  const { t } = useTranslation()\n  const rippledSocket = useContext(SocketContext)\n\n  const heldLPTokensQuery = useQuery(['heldLPTokens', accountId], () =>\n    fetchAccountHeldLPTokens(rippledSocket, accountId),\n  )\n\n  const lpTokenData = useMemo(\n    () => heldLPTokensQuery.data ?? [],\n    [heldLPTokensQuery.data],\n  )\n\n  // Two-tier sort: 1) XRP pairs first, 2) within XRP pairs, sort by USD value descending\n  const rows = lpTokenData.sort((a, b) => {\n    const aHasXRP = a.currency1 === 'XRP' || a.currency2 === 'XRP'\n    const bHasXRP = b.currency1 === 'XRP' || b.currency2 === 'XRP'\n\n    // First, prioritize XRP pairs\n    if (aHasXRP && !bHasXRP) {\n      return -1\n    }\n    if (!aHasXRP && bHasXRP) {\n      return 1\n    }\n\n    // Then sort by Balance USD descending (only for XRP pairs)\n    if (aHasXRP && bHasXRP) {\n      const aBalanceUSD = a.lpTokenBalance * a.lpTokenPriceInXRP * xrpToUSDRate\n      const bBalanceUSD = b.lpTokenBalance * b.lpTokenPriceInXRP * xrpToUSDRate\n      return bBalanceUSD - aBalanceUSD\n    }\n\n    // For non-XRP pairs, maintain original order\n    return 0\n  })\n\n  // Communicate count and loading state back to parent\n  useEffect(() => {\n    if (onChange) {\n      onChange({ count: rows.length, isLoading: heldLPTokensQuery.isLoading })\n    }\n  }, [rows.length, heldLPTokensQuery.isLoading, onChange])\n\n  if (heldLPTokensQuery.isLoading) {\n    return <Loader />\n  }\n\n  const cols = [\n    t('account_page_asset_table_column_amm_instance'),\n    t('account_page_asset_table_column_amm_pair'),\n    t('account_page_asset_table_column_balance'),\n    t('account_page_asset_table_column_balance_usd'),\n    t('account_page_asset_table_column_share'),\n  ]\n  return (\n    <div className=\"account-asset-table\">\n      <table>\n        <thead>\n          <tr>\n            {cols.map((c) => (\n              <th key={c}>{c}</th>\n            ))}\n          </tr>\n        </thead>\n        <tbody>\n          {rows.length === 0 ? (\n            <EmptyMessageTableRow colSpan={cols.length}>\n              {t('account_page_asset_table_no_lptoken')}\n            </EmptyMessageTableRow>\n          ) : (\n            rows.map((row) => {\n              // Calculate display values using utility functions\n              const formattedBalance = formatTokenBalance(\n                row.lpTokenBalance,\n                lang,\n              )\n\n              // Format USD Balance (only for XRP pairs)\n              let formattedBalanceUsd = '--'\n              if (row.currency1 === 'XRP' || row.currency2 === 'XRP') {\n                const balanceUSD =\n                  row.lpTokenBalance * row.lpTokenPriceInXRP * xrpToUSDRate\n                formattedBalanceUsd = formatUsdValue(balanceUSD, lang)\n              }\n\n              return (\n                <tr key={`${row.ammInstance}`}>\n                  <td>\n                    <Account\n                      account={row.ammInstance}\n                      displayText={shortenAccount(row.ammInstance)}\n                    />\n                  </td>\n                  <td>\n                    <Currency\n                      currency={row.currency1}\n                      displaySymbol={false}\n                      link={false}\n                    />\n                    /\n                    <Currency\n                      currency={row.currency2}\n                      displaySymbol={false}\n                      link={false}\n                    />\n                  </td>\n                  <td>{formattedBalance}</td>\n                  <td>{formattedBalanceUsd}</td>\n                  <td>\n                    {row.share < 1\n                      ? row.share.toFixed(4)\n                      : row.share.toFixed(2)}\n                    %\n                  </td>\n                </tr>\n              )\n            })\n          )}\n        </tbody>\n      </table>\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/Accounts/AccountAsset/assetTables/HeldMPTs.tsx",
    "content": "import { useQuery } from 'react-query'\nimport { useEffect, useContext } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { RouteLink } from '../../../shared/routing'\nimport { MPT_ROUTE } from '../../../App/routes'\nimport { Loader } from '../../../shared/components/Loader'\nimport { EmptyMessageTableRow } from '../../../shared/EmptyMessageTableRow'\nimport { Account } from '../../../shared/components/Account'\nimport { Tooltip, useTooltip } from '../../../shared/components/Tooltip'\nimport {\n  formatMPTIssuance,\n  formatMPToken,\n  formatTransferFee,\n} from '../../../../rippled/lib/utils'\nimport { getAccountMPTs, getMPTIssuance } from '../../../../rippled/lib/rippled'\nimport SocketContext from '../../../shared/SocketContext'\nimport {\n  shortenAccount,\n  shortenMPTID,\n  convertScaledPrice,\n} from '../../../shared/utils'\nimport { useLanguage } from '../../../shared/hooks'\nimport logger from '../../../../rippled/lib/logger'\nimport { FutureDataIcon } from '../FutureDataIcon'\nimport { parseAmount } from '../../../shared/NumberFormattingUtils'\n\nconst log = logger({ name: 'HeldMPTs' })\n\ninterface HeldMPTsProps {\n  accountId: string\n  onChange?: (data: { count: number; isLoading: boolean }) => void\n}\n\nconst fetchAccountHeldMPTs = async (accountId: string, rippledSocket: any) => {\n  const mpts: any[] = []\n  let marker = ''\n  do {\n    try {\n      // eslint-disable-next-line no-await-in-loop\n      const response = await getAccountMPTs(rippledSocket, accountId, marker)\n      if (!response?.account_objects) {\n        break\n      }\n\n      mpts.push(...response.account_objects)\n      marker = response.marker || ''\n    } catch (error) {\n      log.error(`Error fetching MPTs: ${JSON.stringify(error)}`)\n      // Break the loop on error to avoid infinite retry\n      break\n    }\n  } while (marker)\n\n  // Format and filter MPTs\n  const positiveBalanceMPTs = mpts\n    .map((mpToken: any) => formatMPToken(mpToken))\n    .filter((mpToken: any) => parseInt(mpToken.mptAmount || '0', 10) > 0)\n\n  // For each MPTokenIssuanceID, call getMPTIssuance and format the response\n  const mptIssuancePromises = positiveBalanceMPTs.map(async (mpToken: any) => {\n    try {\n      const mptIssuanceResponse = await getMPTIssuance(\n        rippledSocket,\n        mpToken.mptIssuanceID,\n      )\n\n      const formattedMPTIssuance = formatMPTIssuance(mptIssuanceResponse.node)\n      return {\n        mptIssuanceId: mpToken.mptIssuanceID,\n        mptIssuance: formattedMPTIssuance,\n      }\n    } catch (error) {\n      log.error(\n        `Error fetching MPT issuance for token ${mpToken.mptIssuanceID}: ${JSON.stringify(error)}`,\n      )\n      return { mptIssuanceId: mpToken.mptIssuanceID, mptIssuance: null }\n    }\n  })\n\n  const mptIssuanceResults = await Promise.all(mptIssuancePromises)\n  const mptIssuanceIdToIssuance = new Map()\n  mptIssuanceResults.forEach((result) => {\n    if (result && result.mptIssuance) {\n      mptIssuanceIdToIssuance.set(result.mptIssuanceId, result.mptIssuance)\n    }\n  })\n\n  // Combine MPToken and MPTIssuance data\n  const combinedMPTs = positiveBalanceMPTs.map((mpToken: any) => {\n    const mptIssuance = mptIssuanceIdToIssuance.get(mpToken.mptIssuanceID)\n    const { parsedMPTMetadata } = mptIssuance ?? {}\n\n    return {\n      tokenId: mpToken.mptIssuanceID,\n      balance: convertScaledPrice(\n        BigInt(mpToken.mptAmount),\n        mptIssuance?.assetScale ?? 0,\n      ),\n      ticker: (parsedMPTMetadata?.ticker as string) || null,\n      issuer: mptIssuance?.issuer || '',\n      issuerName: (parsedMPTMetadata?.issuer_name as string) || null,\n      assetClass: (parsedMPTMetadata?.asset_class as string) || null,\n      transferFee: formatTransferFee(mptIssuance?.transferFee, 'MPT'),\n      locked: (() => {\n        if (mptIssuance?.flags?.includes('lsfMPTLocked')) {\n          return 'Global'\n        }\n        if (mpToken.flags?.includes('lsfMPTLocked')) {\n          return 'Individual'\n        }\n\n        return ''\n      })(),\n    }\n  })\n\n  return combinedMPTs\n}\n\nconst HeldMPTsContent = ({ accountId, onChange }: HeldMPTsProps) => {\n  const lang = useLanguage()\n  const { t } = useTranslation()\n  const rippledSocket = useContext(SocketContext)\n  const { tooltip } = useTooltip()\n\n  const heldMPTsQuery = useQuery(['heldMPTs', accountId], () =>\n    fetchAccountHeldMPTs(accountId, rippledSocket),\n  )\n  // TODO: When MPT Dex is live, sort MPTs based on USD balances\n  const rows = heldMPTsQuery.data ?? []\n\n  // Communicate count and loading state back to parent\n  useEffect(() => {\n    if (onChange) {\n      onChange({ count: rows.length, isLoading: heldMPTsQuery.isLoading })\n    }\n  }, [rows.length, heldMPTsQuery.isLoading, onChange])\n\n  if (heldMPTsQuery.isLoading) {\n    return <Loader />\n  }\n\n  return (\n    <div className=\"account-asset-table\">\n      <Tooltip tooltip={tooltip} />\n      <table>\n        <thead>\n          <tr>\n            <th>{t('account_page_asset_table_column_token_id')}</th>\n            <th>{t('account_page_asset_table_column_ticker')}</th>\n            <th>{t('account_page_asset_table_column_issuer')}</th>\n            <th>{t('account_page_asset_table_column_price_usd')}</th>\n            <th>{t('account_page_asset_table_column_balance')}</th>\n            <th>{t('account_page_asset_table_column_balance_usd')}</th>\n            <th>{t('account_page_asset_table_column_asset_class')}</th>\n            <th>{t('account_page_asset_table_column_transfer_fee')}</th>\n            <th>{t('account_page_asset_table_column_locked')}</th>\n          </tr>\n        </thead>\n        <tbody>\n          {rows.length === 0 ? (\n            <EmptyMessageTableRow colSpan={9}>\n              {t('account_page_asset_table_no_mpt')}\n            </EmptyMessageTableRow>\n          ) : (\n            rows.map((token) => (\n              <tr key={token.tokenId}>\n                <td>\n                  <RouteLink to={MPT_ROUTE} params={{ id: token.tokenId }}>\n                    {shortenMPTID(token.tokenId)}\n                  </RouteLink>\n                </td>\n                <td>{token.ticker ? token.ticker : '--'}</td>\n                <td>\n                  <Account\n                    account={token.issuer}\n                    displayText={\n                      token.issuerName || shortenAccount(token.issuer)\n                    }\n                  />\n                </td>\n                <td>\n                  <FutureDataIcon />\n                </td>\n                <td>{parseAmount(token.balance, 1, lang)}</td>\n                <td>\n                  <FutureDataIcon />\n                </td>\n                <td>\n                  {token.assetClass ? token.assetClass.toUpperCase() : '--'}\n                </td>\n                <td className=\"transfer-fee\">{token.transferFee}%</td>\n                <td>\n                  {(() => {\n                    if (token.locked === '') {\n                      return '--'\n                    }\n                    if (token.locked === 'Global') {\n                      return t('account_page_asset_table_mpt_locked_global')\n                    }\n                    if (token.locked === 'Individual') {\n                      return t('account_page_asset_table_mpt_locked_individual')\n                    }\n                    return token.locked\n                  })()}\n                </td>\n              </tr>\n            ))\n          )}\n        </tbody>\n      </table>\n    </div>\n  )\n}\n\nexport const HeldMPTs = ({ accountId, onChange }: HeldMPTsProps) => (\n  <HeldMPTsContent accountId={accountId} onChange={onChange} />\n)\n"
  },
  {
    "path": "src/containers/Accounts/AccountAsset/assetTables/HeldNFTs.tsx",
    "content": "import { getAccountNFTs } from '../../../../rippled/lib/rippled'\nimport { formatTransferFee } from '../../../../rippled/lib/utils'\nimport { NFTTable, NFT } from './NFTTable'\nimport logger from '../../../../rippled/lib/logger'\n\nconst log = logger({ name: 'HeldNFTs' })\n\ninterface HeldNFTsProps {\n  accountId: string\n  onChange?: (data: { count: number; isLoading: boolean }) => void\n}\n\nconst fetchAccountHeldNFTs = async (\n  accountId: string,\n  rippledSocket: any,\n): Promise<NFT[]> => {\n  try {\n    const allNFTs: any[] = []\n    let marker = ''\n    do {\n      // eslint-disable-next-line no-await-in-loop\n      const response = await getAccountNFTs(\n        rippledSocket,\n        accountId,\n        marker,\n        10, // Not 10 NFTs, but 10 pages of NFTs\n      )\n      if (response.account_nfts) {\n        allNFTs.push(...response.account_nfts)\n      }\n\n      marker = response.marker || ''\n    } while (marker)\n\n    return allNFTs.map((nft) => ({\n      nftId: nft.NFTokenID,\n      issuer: nft.Issuer,\n      url: nft.URI ? Buffer.from(nft.URI, 'hex').toString('utf8') : '',\n      transferFee: formatTransferFee(nft.TransferFee, 'NFT'),\n    }))\n  } catch (error) {\n    log.error(`Error fetching held NFTs: ${JSON.stringify(error)}`)\n    return []\n  }\n}\n\nexport const HeldNFTs = ({ accountId, onChange }: HeldNFTsProps) => (\n  <NFTTable\n    accountId={accountId}\n    onChange={onChange}\n    fetchNFTs={fetchAccountHeldNFTs}\n    queryKey=\"heldNFTs\"\n    showIssuer\n  />\n)\n"
  },
  {
    "path": "src/containers/Accounts/AccountAsset/assetTables/IssuedIOUs.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { useQuery } from 'react-query'\nimport { useEffect, useContext, useMemo } from 'react'\nimport Currency from '../../../shared/components/Currency'\nimport { Loader } from '../../../shared/components/Loader'\nimport { EmptyMessageTableRow } from '../../../shared/EmptyMessageTableRow'\nimport { RouteLink } from '../../../shared/routing'\nimport { TOKEN_ROUTE } from '../../../App/routes'\nimport SocketContext from '../../../shared/SocketContext'\nimport { getBalances } from '../../../../rippled/lib/rippled'\nimport logger from '../../../../rippled/lib/logger'\nimport DefaultTokenIcon from '../../../shared/images/default_token_icon.svg'\nimport { localizeNumber } from '../../../shared/utils'\nimport { useLanguage } from '../../../shared/hooks'\nimport {\n  formatUsdValue,\n  formatTokenBalance,\n} from '../../../shared/NumberFormattingUtils'\n\nconst log = logger({ name: 'IssuedIOUs' })\n\nconst LOS_TOKEN_API_BATCH_SIZE = 100\n\ninterface IssuedIOUsProps {\n  accountId: string\n  account: any\n  onChange?: (data: { count: number; isLoading: boolean }) => void\n}\n\ninterface IOU {\n  tokenCode: string\n  tokenIcon?: string\n  priceInUSD: number\n  trustlines: number\n  holders: number\n  supply: number\n  assetClass: string\n  transferFee: string\n  frozen: string\n}\n\nconst fetchAccountIssuedIOUs = async (\n  rippledSocket: any,\n  accountId: string,\n  account: any,\n): Promise<IOU[]> => {\n  let balancesResponse\n  try {\n    balancesResponse = await getBalances(rippledSocket, accountId)\n  } catch (error) {\n    log.error(\n      `Error calling gatewayBalances for account ${accountId}: ${JSON.stringify(error)}`,\n    )\n    return []\n  }\n\n  // We don't need to filter out LP tokens because if an account issued an LP token,\n  // it would be an AMM account and would be displayed on the AMM account page\n  // instead of a regular account page\n  const iouTokens: string[] = Object.keys(balancesResponse?.obligations ?? {})\n  if (iouTokens.length === 0) {\n    // No IOUs issued by this account, return empty array\n    return []\n  }\n\n  // Batch get token data from LOS Token API\n  const allTokenIds = iouTokens.map((currency) => `${currency}.${accountId}`)\n  let allTokens: Record<string, any> = {}\n  for (let i = 0; i < allTokenIds.length; i += LOS_TOKEN_API_BATCH_SIZE) {\n    const tokenIds = allTokenIds.slice(i, i + LOS_TOKEN_API_BATCH_SIZE)\n    try {\n      // eslint-disable-next-line no-await-in-loop\n      const apiResponse = await fetch(\n        `${process.env.VITE_LOS_URL}/tokens/batch-get`,\n        {\n          method: 'POST',\n          headers: { 'Content-Type': 'application/json' },\n          body: JSON.stringify({ tokenIds }),\n        },\n      )\n\n      if (apiResponse.ok) {\n        // eslint-disable-next-line no-await-in-loop\n        const responseBody = await apiResponse.json()\n        const tokens =\n          responseBody.tokens?.reduce((acc: any, token: any) => {\n            acc[`${token.currency}.${token.issuer_account}`] = {\n              ...token,\n            }\n            return acc\n          }, {}) || {}\n        allTokens = { ...allTokens, ...tokens }\n      }\n    } catch (error) {\n      log.error(\n        `Error batch-get tokens[${tokenIds.join(', ')}]. Error: ${JSON.stringify(error)}`,\n      )\n    }\n  }\n\n  const transferFee = account?.info?.rate\n  const accountGlobalFreeze = account?.info?.flags?.includes('lsfGlobalFreeze')\n\n  const iouData: IOU[] = iouTokens.map((currency: string) => {\n    const tokenId = `${currency}.${accountId}`\n    const token = allTokens[tokenId]\n\n    // Use obligation value from gateway balance as supply since it excludes frozen balances\n    const obligationSupply = balancesResponse?.obligations?.[currency]\n      ? parseFloat(balancesResponse.obligations[currency])\n      : 0\n\n    const apiSupply = token?.supply ? parseFloat(token.supply) : 0\n    if (apiSupply > obligationSupply) {\n      const diff = apiSupply - obligationSupply\n      log.warn(\n        `Supply for ${currency}: GatewayBalance=${obligationSupply}, API=${apiSupply}, Likely Frozen=${diff}`,\n      )\n    }\n\n    return {\n      tokenCode: currency,\n      tokenIcon: token?.icon,\n      priceInUSD: token?.price_usd ? parseFloat(token.price_usd) : 0,\n      trustlines: token?.number_of_trustlines || 0,\n      holders: token?.number_of_holders || 0,\n      supply: obligationSupply,\n      assetClass: token?.asset_class || '--',\n      transferFee: `${transferFee}%`,\n      frozen: accountGlobalFreeze ? 'Global' : '--',\n    }\n  })\n\n  return iouData\n}\n\nexport const IssuedIOUs = ({\n  accountId,\n  account,\n  onChange,\n}: IssuedIOUsProps) => {\n  const lang = useLanguage()\n  const { t } = useTranslation()\n  const rippledSocket = useContext(SocketContext)\n\n  const issuedIOUsQuery = useQuery(['issuedIOUs', accountId], () =>\n    fetchAccountIssuedIOUs(rippledSocket, accountId, account),\n  )\n\n  // Sort by USD price\n  const sortedIOUs = useMemo(() => {\n    const data = issuedIOUsQuery.data || []\n    return [...data].sort((a, b) => b.priceInUSD - a.priceInUSD)\n  }, [issuedIOUsQuery.data])\n\n  // Communicate count and loading state back to parent\n  useEffect(() => {\n    if (onChange) {\n      onChange({\n        count: sortedIOUs.length,\n        isLoading: issuedIOUsQuery.isLoading,\n      })\n    }\n  }, [sortedIOUs.length, issuedIOUsQuery.isLoading, onChange])\n\n  if (issuedIOUsQuery.isLoading) {\n    return <Loader />\n  }\n\n  return (\n    <div className=\"account-asset-table\">\n      <table>\n        <thead>\n          <tr>\n            <th>{t('account_page_asset_table_column_currency_code')}</th>\n            <th>{t('account_page_asset_table_column_price_usd')}</th>\n            <th>{t('account_page_asset_table_column_trustlines')}</th>\n            <th>{t('account_page_asset_table_column_holders')}</th>\n            <th>{t('account_page_asset_table_column_supply')}</th>\n            <th>{t('account_page_asset_table_column_asset_class')}</th>\n            <th>{t('account_page_asset_table_column_transfer_fee')}</th>\n            <th>{t('account_page_asset_table_column_frozen')}</th>\n          </tr>\n        </thead>\n        <tbody>\n          {sortedIOUs.length === 0 ? (\n            <EmptyMessageTableRow colSpan={8}>\n              {t('account_page_asset_table_no_iou')}\n            </EmptyMessageTableRow>\n          ) : (\n            sortedIOUs.map((token) => (\n              <tr key={`${token.tokenCode}-${token.supply}`}>\n                <td>\n                  <RouteLink\n                    to={TOKEN_ROUTE}\n                    params={{ token: `${token.tokenCode}.${accountId}` }}\n                  >\n                    <div className=\"token\">\n                      {token.tokenIcon ? (\n                        <img\n                          src={token.tokenIcon}\n                          alt={token.tokenCode}\n                          className=\"token-icon\"\n                        />\n                      ) : (\n                        <DefaultTokenIcon className=\"token-icon\" />\n                      )}\n                      <Currency currency={token.tokenCode} />\n                    </div>\n                  </RouteLink>\n                </td>\n                <td>{formatUsdValue(token.priceInUSD, lang)}</td>\n                <td>{localizeNumber(token.trustlines, lang)}</td>\n                <td>{localizeNumber(token.holders, lang)}</td>\n                <td>{formatTokenBalance(token.supply, lang)}</td>\n                <td className=\"asset-class\">{token.assetClass}</td>\n                <td className=\"transfer-fee\">{token.transferFee}</td>\n                <td>{token.frozen}</td>\n              </tr>\n            ))\n          )}\n        </tbody>\n      </table>\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/Accounts/AccountAsset/assetTables/IssuedMPTs.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { useQuery } from 'react-query'\nimport { useEffect, useContext } from 'react'\nimport { RouteLink } from '../../../shared/routing'\nimport { MPT_ROUTE } from '../../../App/routes'\nimport { Loader } from '../../../shared/components/Loader'\nimport { EmptyMessageTableRow } from '../../../shared/EmptyMessageTableRow'\nimport { FutureDataIcon } from '../FutureDataIcon'\nimport { Tooltip, useTooltip } from '../../../shared/components/Tooltip'\nimport { getAccountObjects } from '../../../../rippled/lib/rippled'\nimport SocketContext from '../../../shared/SocketContext'\nimport {\n  formatMPTIssuance,\n  formatTransferFee,\n} from '../../../../rippled/lib/utils'\nimport { shortenMPTID, convertScaledPrice } from '../../../shared/utils'\nimport { useLanguage } from '../../../shared/hooks'\nimport logger from '../../../../rippled/lib/logger'\nimport { parseAmount } from '../../../shared/NumberFormattingUtils'\n\nconst log = logger({ name: 'IssuedMPTs' })\n\ninterface IssuedMPTsProps {\n  accountId: string\n  onChange?: (data: { count: number; isLoading: boolean }) => void\n}\n\nconst fetchAccountIssuedMPTs = async (\n  accountId: string,\n  rippledSocket: any,\n) => {\n  const mptIssuances: any[] = []\n  let marker = ''\n  do {\n    try {\n      // eslint-disable-next-line no-await-in-loop\n      const response = await getAccountObjects(\n        rippledSocket,\n        accountId,\n        'mpt_issuance',\n        marker,\n      )\n      if (!response?.account_objects) {\n        break\n      }\n\n      mptIssuances.push(...response.account_objects)\n      marker = response.marker || ''\n    } catch (error) {\n      log.error(`Error fetching MPT issuances: ${JSON.stringify(error)}`)\n      // Break the loop on error to avoid infinite retry\n      break\n    }\n  } while (marker)\n\n  // Format the MPT issuances\n  const issuedMPTs = mptIssuances.map((mptIssuance: any) => {\n    const formattedIssuance = formatMPTIssuance(mptIssuance)\n    const { parsedMPTMetadata } = formattedIssuance\n\n    return {\n      tokenId: mptIssuance.mpt_issuance_id,\n      ticker: (parsedMPTMetadata?.ticker as string) || null,\n      supply: convertScaledPrice(\n        BigInt(formattedIssuance?.outstandingAmt) || 0,\n        formattedIssuance?.assetScale || 0,\n      ),\n      assetClass: (parsedMPTMetadata?.asset_class as string) || null,\n      transferFee: formatTransferFee(formattedIssuance?.transferFee, 'MPT'),\n      locked: formattedIssuance?.flags?.includes('lsfMPTLocked')\n        ? 'Global'\n        : '',\n    }\n  })\n\n  return issuedMPTs\n}\n\nconst IssuedMPTsContent = ({ accountId, onChange }: IssuedMPTsProps) => {\n  const lang = useLanguage()\n  const { t } = useTranslation()\n  const rippledSocket = useContext(SocketContext)\n  const { tooltip } = useTooltip()\n\n  const issuedMPTsQuery = useQuery(['issuedMPTs', accountId], () =>\n    fetchAccountIssuedMPTs(accountId, rippledSocket),\n  )\n  // TODO: When MPT Dex is live, sort MPTs based on USD price\n  const rows = issuedMPTsQuery.data ?? []\n\n  // Communicate count and loading state back to parent\n  useEffect(() => {\n    if (onChange) {\n      onChange({ count: rows.length, isLoading: issuedMPTsQuery.isLoading })\n    }\n  }, [rows.length, issuedMPTsQuery.isLoading, onChange])\n\n  if (issuedMPTsQuery.isLoading) {\n    return <Loader />\n  }\n\n  return (\n    <div className=\"account-asset-table\">\n      <Tooltip tooltip={tooltip} />\n      <table>\n        <thead>\n          <tr>\n            <th>{t('account_page_asset_table_column_token_id')}</th>\n            <th>{t('account_page_asset_table_column_ticker')}</th>\n            <th>{t('account_page_asset_table_column_price_usd')}</th>\n            <th>{t('account_page_asset_table_column_circulating_supply')}</th>\n            <th>{t('account_page_asset_table_column_asset_class')}</th>\n            <th>{t('account_page_asset_table_column_transfer_fee')}</th>\n            <th>{t('account_page_asset_table_column_locked')}</th>\n          </tr>\n        </thead>\n        <tbody>\n          {rows.length === 0 ? (\n            <EmptyMessageTableRow colSpan={7}>\n              {t('account_page_asset_table_no_mpt')}\n            </EmptyMessageTableRow>\n          ) : (\n            rows.map((token) => (\n              <tr key={token.tokenId}>\n                <td>\n                  <RouteLink to={MPT_ROUTE} params={{ id: token.tokenId }}>\n                    {shortenMPTID(token.tokenId)}\n                  </RouteLink>\n                </td>\n                <td>{token.ticker ? token.ticker : '--'}</td>\n                <td>\n                  <FutureDataIcon />\n                </td>\n                <td>{parseAmount(token.supply, 1, lang)}</td>\n                <td>\n                  {token.assetClass ? token.assetClass.toUpperCase() : '--'}\n                </td>\n                <td className=\"transfer-fee\">{token.transferFee}%</td>\n                <td>\n                  {token.locked === ''\n                    ? '--'\n                    : t('account_page_asset_table_mpt_locked_global')}\n                </td>\n              </tr>\n            ))\n          )}\n        </tbody>\n      </table>\n    </div>\n  )\n}\n\nexport const IssuedMPTs = ({ accountId, onChange }: IssuedMPTsProps) => (\n  <IssuedMPTsContent accountId={accountId} onChange={onChange} />\n)\n"
  },
  {
    "path": "src/containers/Accounts/AccountAsset/assetTables/IssuedNFTs.tsx",
    "content": "import { getNFTsIssuedByAccount } from '../../../../rippled/lib/rippled'\nimport { formatTransferFee } from '../../../../rippled/lib/utils'\nimport { NFTTable, NFT } from './NFTTable'\nimport logger from '../../../../rippled/lib/logger'\n\nconst log = logger({ name: 'IssuedNFTs' })\n\ninterface IssuedNFTsProps {\n  accountId: string\n  onChange?: (data: { count: number; isLoading: boolean }) => void\n}\n\nconst fetchAccountIssuedNFTs = async (\n  accountId: string,\n  rippledSocket: any,\n): Promise<NFT[]> => {\n  try {\n    const allNFTs: any[] = []\n    let marker = ''\n    do {\n      // eslint-disable-next-line no-await-in-loop\n      const response = await getNFTsIssuedByAccount(\n        rippledSocket,\n        accountId,\n        marker,\n        50,\n      )\n      if (response.nfts) {\n        allNFTs.push(...response.nfts)\n      }\n\n      marker = response.marker || ''\n    } while (marker)\n\n    return allNFTs.map((nft) => ({\n      nftId: nft.nft_id,\n      url: nft.uri ? Buffer.from(nft.uri, 'hex').toString('utf8') : '',\n      transferFee: formatTransferFee(nft.transfer_fee, 'NFT'),\n    }))\n  } catch (error) {\n    log.error(`Error fetching issued NFTs: ${JSON.stringify(error)}`)\n    return []\n  }\n}\n\nexport const IssuedNFTs = ({ accountId, onChange }: IssuedNFTsProps) => (\n  <NFTTable\n    accountId={accountId}\n    onChange={onChange}\n    fetchNFTs={fetchAccountIssuedNFTs}\n    queryKey=\"issuedNFTs\"\n    showIssuer={false}\n  />\n)\n"
  },
  {
    "path": "src/containers/Accounts/AccountAsset/assetTables/NFTTable.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { useQuery } from 'react-query'\nimport { useEffect, useMemo, useContext, useState, useCallback } from 'react'\nimport { Account } from '../../../shared/components/Account'\nimport { PaginatedTable } from '../../../shared/components/PaginatedTable'\nimport { Loader } from '../../../shared/components/Loader'\nimport SocketContext from '../../../shared/SocketContext'\nimport {\n  getBuyNFToffers,\n  getSellNFToffers,\n} from '../../../../rippled/lib/rippled'\nimport { EmptyMessageTableRow } from '../../../shared/EmptyMessageTableRow'\nimport { NFTokenLink } from '../../../shared/components/NFTokenLink'\nimport DomainLink from '../../../shared/components/DomainLink'\nimport { XRP_BASE } from '../../../shared/transactionUtils'\nimport {\n  localizeNumber,\n  shortenAccount,\n  shortenDomain,\n  shortenNFTTokenID,\n} from '../../../shared/utils'\nimport { XRP_SMALL_BALANCE_CURRENCY_OPTIONS } from '../../../shared/NumberFormattingUtils'\nimport { useLanguage } from '../../../shared/hooks'\nimport logger from '../../../../rippled/lib/logger'\n\nconst log = logger({ name: 'NFTTable' })\n\nconst PAGE_SIZE = 10\n\ninterface NFTTableProps {\n  accountId: string\n  onChange?: (data: { count: number; isLoading: boolean }) => void\n  fetchNFTs: (accountId: string, rippledSocket: any) => Promise<NFT[]>\n  queryKey: string\n  showIssuer?: boolean\n}\n\nexport interface NFT {\n  nftId: string\n  issuer?: string\n  url: string\n  transferFee: string\n  lowestAsk?: number\n  highestBid?: number\n}\n\nexport const NFTTable = ({\n  accountId,\n  onChange,\n  fetchNFTs,\n  queryKey,\n  showIssuer = false,\n}: NFTTableProps) => {\n  const { t } = useTranslation()\n  const lang = useLanguage()\n  const rippledSocket = useContext(SocketContext)\n  const [nfts, setNFTs] = useState<NFT[]>([])\n  const [fetchedNFTs, setFetchedNFTs] = useState<Set<string>>(new Set())\n  const [isLoadingOffers, setIsLoadingOffers] = useState(false)\n\n  // Fetch and show basic NFT data first\n  const nftsQuery = useQuery([queryKey, accountId], () =>\n    fetchNFTs(accountId, rippledSocket),\n  )\n\n  const basicNFTs = useMemo(() => nftsQuery.data ?? [], [nftsQuery.data])\n\n  const processXRPOffers = useCallback(\n    (offers: any[], sortAscending: boolean) => {\n      const xrpOffers = offers.filter(\n        (offer: any) => typeof offer.amount === 'string',\n      )\n\n      if (xrpOffers.length === 0) {\n        return undefined\n      }\n\n      const sortedOffers = xrpOffers.sort((a: any, b: any) => {\n        const amountA = parseInt(a.amount, 10)\n        const amountB = parseInt(b.amount, 10)\n        return sortAscending ? amountA - amountB : amountB - amountA\n      })\n\n      const bestOffer = sortedOffers[0]\n      return parseInt(bestOffer.amount, 10) / XRP_BASE\n    },\n    [],\n  )\n\n  const fetchOffers = useCallback(\n    async (fetchFn: Function, nftId: string) => {\n      try {\n        const response = await fetchFn(rippledSocket, nftId, 50)\n        return response.offers && response.offers.length > 0\n          ? response.offers\n          : []\n      } catch (error: any) {\n        if (error.code === 404 && error.message === 'notFound') {\n          // This means there is no offer for the given NFT\n        } else {\n          log.error(error)\n        }\n        return []\n      }\n    },\n    [rippledSocket],\n  )\n\n  const fetchOffersForNFT = useCallback(\n    async (nft: NFT): Promise<NFT> => {\n      // Get sell offers to calculate lowest ask (XRP only)\n      const sellOffers = await fetchOffers(getSellNFToffers, nft.nftId)\n      const lowestAsk = processXRPOffers(sellOffers, true) // ascending for lowest\n\n      // Get buy offers to calculate highest bid (XRP only)\n      const buyOffers = await fetchOffers(getBuyNFToffers, nft.nftId)\n      const highestBid = processXRPOffers(buyOffers, false) // descending for highest\n\n      return { ...nft, lowestAsk, highestBid }\n    },\n    [processXRPOffers, fetchOffers],\n  )\n\n  const batchProcessNFTOffers = useCallback(\n    async (nftsToFetch: NFT[]) => {\n      if (nftsToFetch.length === 0) {\n        return\n      }\n\n      setIsLoadingOffers(true)\n\n      // Fetch NFT offers sequentially to avoid being throttled\n      for (const nft of nftsToFetch) {\n        try {\n          // eslint-disable-next-line no-await-in-loop\n          const nftWithOffers = await fetchOffersForNFT(nft)\n\n          // Update NFT immediately as offers are fetched\n          setNFTs((prev) =>\n            prev.map((prevNft) =>\n              prevNft.nftId === nftWithOffers.nftId ? nftWithOffers : prevNft,\n            ),\n          )\n\n          // Mark as fetched\n          setFetchedNFTs((prev) => new Set([...prev, nft.nftId]))\n        } catch (error) {\n          // Handle individual NFT errors, continue with others\n          log.error(\n            `Error fetching offers for NFT ${nft.nftId}: ${JSON.stringify(error)}`,\n          )\n        }\n      }\n\n      setIsLoadingOffers(false)\n    },\n    [fetchOffersForNFT],\n  )\n\n  // Initialize NFTs when basic data loads\n  useEffect(() => {\n    if (basicNFTs.length > 0) {\n      // Initialize all NFTs with undefined lowest ask and highest bid\n      const initialNFTs = basicNFTs.map((nft) => ({\n        ...nft,\n        lowestAsk: undefined,\n        highestBid: undefined,\n      }))\n      setNFTs(initialNFTs)\n\n      // Reset for new account\n      setFetchedNFTs(new Set())\n      setIsLoadingOffers(false)\n\n      // Fetch offers for first page NFTs immediately\n      const firstPageNFTs = basicNFTs.slice(0, PAGE_SIZE)\n\n      // Fetch offers for first page NFTs immediately\n      batchProcessNFTOffers(firstPageNFTs)\n    }\n  }, [basicNFTs, batchProcessNFTOffers])\n\n  // Communicate count and loading state back to parent\n  useEffect(() => {\n    if (onChange) {\n      onChange({ count: nfts.length, isLoading: nftsQuery.isLoading })\n    }\n  }, [nfts.length, nftsQuery.isLoading, onChange])\n\n  if (nftsQuery.isLoading) {\n    return <Loader />\n  }\n\n  const tableStructure = (paginatedRows: any[]) => {\n    // Fetch offers for visible NFTs when page changes\n    // Only fetch if there are NFTs, for which we haven't fetched offers yet\n    if (paginatedRows.length > 0) {\n      const unfetchedNFTs = paginatedRows.filter(\n        (nft) => !fetchedNFTs.has(nft.nftId),\n      )\n\n      if (unfetchedNFTs.length > 0 && !isLoadingOffers) {\n        // Use setTimeout to avoid calling setState during render\n        setTimeout(() => {\n          batchProcessNFTOffers(unfetchedNFTs)\n        }, 0)\n      }\n    }\n\n    const colSpan = showIssuer ? 6 : 5\n\n    return (\n      <div className=\"account-asset-table\">\n        <table>\n          <thead>\n            <tr>\n              <th>{t('account_page_asset_table_column_token_id')}</th>\n              {showIssuer && (\n                <th>{t('account_page_asset_table_column_issuer')}</th>\n              )}\n              <th>{t('account_page_asset_table_column_url')}</th>\n              <th>{t('account_page_asset_table_column_transfer_fee')}</th>\n              <th>{t('account_page_asset_table_column_lowest_ask')}</th>\n              <th>{t('account_page_asset_table_column_highest_bid')}</th>\n            </tr>\n          </thead>\n          <tbody>\n            {paginatedRows.length === 0 ? (\n              <EmptyMessageTableRow colSpan={colSpan}>\n                {t('account_page_asset_table_no_nft')}\n              </EmptyMessageTableRow>\n            ) : (\n              paginatedRows.map((nft, index) => (\n                <tr key={nft.tokenId || `nft-${index}`}>\n                  <td>\n                    <NFTokenLink\n                      shortTokenID={shortenNFTTokenID(nft.nftId)}\n                      tokenID={nft.nftId}\n                    />\n                  </td>\n                  {showIssuer && nft.issuer && (\n                    <td>\n                      <Account\n                        displayText={shortenAccount(nft.issuer)}\n                        account={nft.issuer}\n                      />\n                    </td>\n                  )}\n                  <td>\n                    {nft.url ? (\n                      <DomainLink\n                        domain={nft.url}\n                        displayDomain={shortenDomain(nft.url)}\n                      />\n                    ) : (\n                      '--'\n                    )}\n                  </td>\n                  <td className=\"transfer-fee\">{nft.transferFee}%</td>\n                  <td>\n                    {nft.lowestAsk\n                      ? localizeNumber(\n                          nft.lowestAsk,\n                          lang,\n                          XRP_SMALL_BALANCE_CURRENCY_OPTIONS,\n                        )\n                      : '--'}\n                  </td>\n                  <td>\n                    {nft.highestBid\n                      ? localizeNumber(\n                          nft.highestBid,\n                          lang,\n                          XRP_SMALL_BALANCE_CURRENCY_OPTIONS,\n                        )\n                      : '--'}\n                  </td>\n                </tr>\n              ))\n            )}\n          </tbody>\n        </table>\n      </div>\n    )\n  }\n\n  return (\n    <PaginatedTable\n      data={nfts}\n      tableStructure={tableStructure}\n      pageSize={PAGE_SIZE}\n    />\n  )\n}\n"
  },
  {
    "path": "src/containers/Accounts/AccountAsset/index.tsx",
    "content": "import { useState, useCallback } from 'react'\nimport './styles.scss'\nimport { useTranslation } from 'react-i18next'\nimport { localizeNumber } from '../../shared/utils'\nimport { useLanguage } from '../../shared/hooks'\nimport ArrowIcon from '../../shared/images/down_arrow.svg'\nimport { HeldIOUs } from './assetTables/HeldIOUs'\nimport { HeldMPTs } from './assetTables/HeldMPTs'\nimport { HeldLPTokens } from './assetTables/HeldLPTokens'\nimport { HeldNFTs } from './assetTables/HeldNFTs'\nimport { IssuedIOUs } from './assetTables/IssuedIOUs'\nimport { IssuedMPTs } from './assetTables/IssuedMPTs'\nimport { IssuedNFTs } from './assetTables/IssuedNFTs'\n\ntype HeldAssetTabKey = 'iou' | 'mpt' | 'lptoken' | 'nft'\ntype IssuedAssetTabKey = 'iou' | 'mpt' | 'nft'\n\nfunction TabButton({\n  label,\n  active,\n  onClick,\n  loading = false,\n}: {\n  label: string\n  active?: boolean\n  onClick?: () => void\n  loading?: boolean\n}) {\n  return (\n    <button\n      type=\"button\"\n      role=\"tab\"\n      aria-selected={!!active}\n      className={`account-asset-tab ${active ? 'is-active' : ''}`}\n      onClick={onClick}\n      title={label}\n    >\n      {loading ? (\n        <span>\n          {label.replace(/\\(\\d+\\)/, '')} (<span className=\"loading-spinner\" />)\n        </span>\n      ) : (\n        label\n      )}\n    </button>\n  )\n}\n\ninterface AccountAssetProps {\n  accountId: string\n  account?: any\n  xrpToUSDRate: number\n}\n\nexport default function AccountAsset({\n  accountId,\n  account,\n  xrpToUSDRate,\n}: AccountAssetProps) {\n  const lang = useLanguage()\n  const { t } = useTranslation()\n\n  // Counts managed by individual table components\n  const [counts, setCounts] = useState({\n    heldIou: 0,\n    heldMpt: 0,\n    heldLptoken: 0,\n    heldNft: 0,\n    issuedIou: 0,\n    issuedMpt: 0,\n    issuedNft: 0,\n  })\n\n  // Loading states - start as true, set to false when we get data\n  const [loading, setLoading] = useState({\n    heldIou: true,\n    heldMpt: true,\n    heldLptoken: true,\n    heldNft: true,\n    issuedIou: true,\n    issuedMpt: true,\n    issuedNft: true,\n  })\n\n  // Stable update functions for each asset type\n  const updateHeldIOUs = useCallback(\n    ({ count, isLoading }: { count: number; isLoading: boolean }) => {\n      setCounts((prev) => ({ ...prev, heldIou: count }))\n      setLoading((prev) => ({ ...prev, heldIou: isLoading }))\n    },\n    [],\n  )\n\n  const updateHeldMPTs = useCallback(\n    ({ count, isLoading }: { count: number; isLoading: boolean }) => {\n      setCounts((prev) => ({ ...prev, heldMpt: count }))\n      setLoading((prev) => ({ ...prev, heldMpt: isLoading }))\n    },\n    [],\n  )\n\n  const updateHeldLPTokens = useCallback(\n    ({ count, isLoading }: { count: number; isLoading: boolean }) => {\n      setCounts((prev) => ({ ...prev, heldLptoken: count }))\n      setLoading((prev) => ({ ...prev, heldLptoken: isLoading }))\n    },\n    [],\n  )\n\n  const updateHeldNFTs = useCallback(\n    ({ count, isLoading }: { count: number; isLoading: boolean }) => {\n      setCounts((prev) => ({ ...prev, heldNft: count }))\n      setLoading((prev) => ({ ...prev, heldNft: isLoading }))\n    },\n    [],\n  )\n\n  const updateIssuedIOUs = useCallback(\n    ({ count, isLoading }: { count: number; isLoading: boolean }) => {\n      setCounts((prev) => ({ ...prev, issuedIou: count }))\n      setLoading((prev) => ({ ...prev, issuedIou: isLoading }))\n    },\n    [],\n  )\n\n  const updateIssuedMPTs = useCallback(\n    ({ count, isLoading }: { count: number; isLoading: boolean }) => {\n      setCounts((prev) => ({ ...prev, issuedMpt: count }))\n      setLoading((prev) => ({ ...prev, issuedMpt: isLoading }))\n    },\n    [],\n  )\n\n  const updateIssuedNFTs = useCallback(\n    ({ count, isLoading }: { count: number; isLoading: boolean }) => {\n      setCounts((prev) => ({ ...prev, issuedNft: count }))\n      setLoading((prev) => ({ ...prev, issuedNft: isLoading }))\n    },\n    [],\n  )\n\n  // Tabs state\n  const [heldTab, setHeldTab] = useState<HeldAssetTabKey>('iou')\n  const [issuedTab, setIssuedTab] = useState<IssuedAssetTabKey>('iou')\n\n  // Collapse state - default to expanded (true means open)\n  const [heldSectionOpen, setHeldSectionOpen] = useState(true)\n  const [issuedSectionOpen, setIssuedSectionOpen] = useState(true)\n\n  return (\n    <section className=\"account-asset\">\n      {/* Assets Held */}\n      <div className=\"asset-section-header\">\n        <h3 className=\"account-asset-title\">\n          {t('account_page_asset_held_title')}\n        </h3>\n        <button\n          type=\"button\"\n          className=\"asset-section-toggle\"\n          onClick={() => setHeldSectionOpen((s) => !s)}\n          aria-expanded={heldSectionOpen}\n          aria-label=\"Toggle assets held section\"\n        >\n          <ArrowIcon\n            className={`asset-section-arrow ${heldSectionOpen ? 'open' : ''}`}\n          />\n        </button>\n      </div>\n      <div\n        className=\"account-asset-content\"\n        style={{ display: heldSectionOpen ? 'block' : 'none' }}\n      >\n        <div\n          className=\"account-asset-tabs\"\n          role=\"tablist\"\n          aria-label=\"Assets Held Tabs\"\n        >\n          <TabButton\n            label={t('account_page_asset_tab_iou', {\n              count: counts.heldIou,\n            }).replace(\n              counts.heldIou.toString(),\n              localizeNumber(counts.heldIou, lang) || '0',\n            )}\n            active={heldTab === 'iou'}\n            onClick={() => setHeldTab('iou')}\n            loading={loading.heldIou}\n          />\n          <TabButton\n            label={t('account_page_asset_tab_mpt', {\n              count: counts.heldMpt,\n            }).replace(\n              counts.heldMpt.toString(),\n              localizeNumber(counts.heldMpt, lang) || '0',\n            )}\n            active={heldTab === 'mpt'}\n            onClick={() => setHeldTab('mpt')}\n            loading={loading.heldMpt}\n          />\n          <TabButton\n            label={t('account_page_asset_tab_lptoken', {\n              count: counts.heldLptoken,\n            }).replace(\n              counts.heldLptoken.toString(),\n              localizeNumber(counts.heldLptoken, lang) || '0',\n            )}\n            active={heldTab === 'lptoken'}\n            onClick={() => setHeldTab('lptoken')}\n            loading={loading.heldLptoken}\n          />\n          <TabButton\n            label={t('account_page_asset_tab_nft', {\n              count: counts.heldNft,\n            }).replace(\n              counts.heldNft.toString(),\n              localizeNumber(counts.heldNft, lang) || '0',\n            )}\n            active={heldTab === 'nft'}\n            onClick={() => setHeldTab('nft')}\n            loading={loading.heldNft}\n          />\n        </div>\n\n        {/* Render all components to fetch data, but only show active tab */}\n        <div\n          className=\"account-asset-table-wrapper account-asset-table-wrapper-fixed\"\n          style={{ display: heldTab === 'iou' ? 'block' : 'none' }}\n        >\n          <HeldIOUs accountId={accountId} onChange={updateHeldIOUs} />\n        </div>\n        <div\n          className=\"account-asset-table-wrapper account-asset-table-wrapper-fixed\"\n          style={{ display: heldTab === 'mpt' ? 'block' : 'none' }}\n        >\n          <HeldMPTs accountId={accountId} onChange={updateHeldMPTs} />\n        </div>\n        <div\n          className=\"account-asset-table-wrapper account-asset-table-wrapper-fixed\"\n          style={{ display: heldTab === 'lptoken' ? 'block' : 'none' }}\n        >\n          <HeldLPTokens\n            accountId={accountId}\n            onChange={updateHeldLPTokens}\n            xrpToUSDRate={xrpToUSDRate}\n          />\n        </div>\n        <div\n          className=\"account-asset-table-wrapper\"\n          style={{ display: heldTab === 'nft' ? 'block' : 'none' }}\n        >\n          <HeldNFTs accountId={accountId} onChange={updateHeldNFTs} />\n        </div>\n      </div>\n\n      {/* Assets Issued */}\n      <div className=\"asset-section-header\">\n        <h3 className=\"account-asset-title\">\n          {t('account_page_asset_issued_title')}\n        </h3>\n        <button\n          type=\"button\"\n          className=\"asset-section-toggle\"\n          onClick={() => setIssuedSectionOpen((s) => !s)}\n          aria-expanded={issuedSectionOpen}\n          aria-label=\"Toggle assets issued section\"\n        >\n          <ArrowIcon\n            className={`asset-section-arrow ${issuedSectionOpen ? 'open' : ''}`}\n          />\n        </button>\n      </div>\n      <div\n        className=\"account-asset-content\"\n        style={{ display: issuedSectionOpen ? 'block' : 'none' }}\n      >\n        <div\n          className=\"account-asset-tabs\"\n          role=\"tablist\"\n          aria-label=\"Assets Issued Tabs\"\n        >\n          <TabButton\n            label={t('account_page_asset_tab_iou', {\n              count: counts.issuedIou,\n            }).replace(\n              counts.issuedIou.toString(),\n              localizeNumber(counts.issuedIou, lang) || '0',\n            )}\n            active={issuedTab === 'iou'}\n            onClick={() => setIssuedTab('iou')}\n            loading={loading.issuedIou}\n          />\n          <TabButton\n            label={t('account_page_asset_tab_mpt', {\n              count: counts.issuedMpt,\n            }).replace(\n              counts.issuedMpt.toString(),\n              localizeNumber(counts.issuedMpt, lang) || '0',\n            )}\n            active={issuedTab === 'mpt'}\n            onClick={() => setIssuedTab('mpt')}\n            loading={loading.issuedMpt}\n          />\n          <TabButton\n            label={t('account_page_asset_tab_nft', {\n              count: counts.issuedNft,\n            }).replace(\n              counts.issuedNft.toString(),\n              localizeNumber(counts.issuedNft, lang) || '0',\n            )}\n            active={issuedTab === 'nft'}\n            onClick={() => setIssuedTab('nft')}\n            loading={loading.issuedNft}\n          />\n        </div>\n\n        {/* Render all components to fetch data, but only show active tab */}\n        <div\n          className=\"account-asset-table-wrapper account-asset-table-wrapper-fixed\"\n          style={{ display: issuedTab === 'iou' ? 'block' : 'none' }}\n        >\n          <IssuedIOUs\n            accountId={accountId}\n            account={account}\n            onChange={updateIssuedIOUs}\n          />\n        </div>\n        <div\n          className=\"account-asset-table-wrapper account-asset-table-wrapper-fixed\"\n          style={{ display: issuedTab === 'mpt' ? 'block' : 'none' }}\n        >\n          <IssuedMPTs accountId={accountId} onChange={updateIssuedMPTs} />\n        </div>\n        <div\n          className=\"account-asset-table-wrapper\"\n          style={{ display: issuedTab === 'nft' ? 'block' : 'none' }}\n        >\n          <IssuedNFTs accountId={accountId} onChange={updateIssuedNFTs} />\n        </div>\n      </div>\n    </section>\n  )\n}\n"
  },
  {
    "path": "src/containers/Accounts/AccountAsset/styles.scss",
    "content": "@use '../../shared/css/variables' as *;\n\n.account-asset {\n  padding: 24px 0px;\n}\n\n.account-asset-title {\n  @include bold;\n\n  font-size: 20px;\n}\n\n.asset-section-header {\n  display: flex;\n  align-items: center;\n  justify-content: flex-start;\n  margin: 24px 0 20px;\n  gap: 2px;\n\n  &:first-child {\n    margin-top: 0;\n  }\n\n  .account-asset-title {\n    margin: 0;\n  }\n\n  .asset-section-toggle {\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    padding: 6px;\n    border: 0;\n    background: transparent;\n    color: inherit;\n    cursor: pointer;\n  }\n\n  .asset-section-arrow {\n    display: inline-block;\n    width: 18px;\n    height: 18px;\n    transform-origin: center;\n    transition: transform 180ms ease;\n  }\n\n  .asset-section-arrow.open {\n    transform: rotate(180deg);\n  }\n}\n\n.account-asset-tabs {\n  display: flex;\n  height: 30px;\n  flex-wrap: wrap;\n  align-items: flex-start;\n  border-radius: 100px;\n  margin-bottom: 15px;\n  background: $black-80;\n  gap: 10px;\n}\n\n.account-asset-tab {\n  padding: 4px 10px;\n  border: 1px solid transparent;\n  border-radius: 100px;\n  background: transparent;\n  color: var(--text);\n  cursor: pointer;\n  font-size: 14px;\n  white-space: nowrap;\n}\n\n.account-asset-tab:hover {\n  border-color: rgb(255 255 255 / 3%);\n  background: rgb(255 255 255 / 2%);\n}\n\n.account-asset-tab.is-active {\n  @include bold;\n\n  padding: 4px 14px;\n  border: 1px solid $green-50;\n  background: $black-90;\n  color: $black-0;\n}\n\n// Loading spinner for tab buttons\n@keyframes spin {\n  from {\n    transform: rotate(0deg);\n  }\n\n  to {\n    transform: rotate(360deg);\n  }\n}\n\n.loading-spinner {\n  display: inline-block;\n  width: 10px;\n  height: 10px;\n  border: 1px solid rgb(255 255 255 / 30%);\n  border-radius: 50%;\n  border-top-color: #fff;\n  animation: spin 1s ease-in-out infinite;\n}\n\n.account-asset-table {\n  background: transparent;\n\n  /* Allow horizontal scrolling if the table is wider than its parent */\n  -webkit-overflow-scrolling: touch;\n  overflow-x: auto;\n}\n\n.account-asset-table-wrapper-fixed .account-asset-table {\n  overflow: auto; /* Vertical scroll when overflowing, keep horizontal if needed */\n  max-height: 255px; /* Fixed viewport height for the table area */\n  background: transparent;\n  -webkit-overflow-scrolling: touch;\n\n  /* Custom scroll bars */\n  scrollbar-color: rgb(255 255 255 / 20%) transparent;\n  scrollbar-width: thin; /* Firefox */\n\n  /* WebKit */\n  &::-webkit-scrollbar {\n    width: 10px;\n    height: 10px;\n  }\n\n  &::-webkit-scrollbar-track {\n    background: transparent;\n  }\n\n  &::-webkit-scrollbar-thumb {\n    border: 2px solid transparent; /* create padding effect */\n    border-radius: 6px;\n    background: rgb(255 255 255 / 20%);\n    background-clip: padding-box;\n  }\n\n  &::-webkit-scrollbar-thumb:hover {\n    background: rgb(255 255 255 / 12%);\n  }\n}\n\n.account-asset-table table {\n  width: 100%;\n  min-width: 980px;\n  border-collapse: separate;\n  color: var(--text);\n}\n\n.account-asset-table thead th {\n  @include semibold;\n\n  /* Make header sticky for scrollable tables */\n  position: sticky;\n  z-index: 2;\n  top: 0;\n  padding: 10px 12px;\n  backdrop-filter: blur(\n    100px\n  ); /* As table rows scroll under the header, they appear blurred behind it */\n\n  color: $black-50;\n  font-size: 12px;\n  text-align: left;\n  text-transform: uppercase;\n}\n\n.account-asset-table tbody td {\n  padding: 10px 12px;\n  border-bottom: 1px solid $black-80; /* Table row separator */\n  color: $black-0;\n  font-size: 14px;\n  text-align: left;\n\n  &.empty-message {\n    padding: 16px;\n    color: $black-40;\n    font-size: 16px;\n    text-align: center;\n\n    @media (max-width: $tablet-portrait-upper-boundary) {\n      padding: 12px 14px;\n      font-size: 14px;\n    }\n  }\n}\n\n/* Add border-top to the first row to separate header from body */\n.account-asset-table tbody tr:first-child td {\n  border-top: 1px solid $black-80;\n}\n\n/* Fee column in orange */\n.account-asset-table tbody td.transfer-fee,\n.account-asset-table tbody td.transfer-fee * {\n  color: $orange-50;\n}\n\n.account-asset-table tbody td.asset-class {\n  text-transform: uppercase;\n}\n\n/* Token icon styling */\n.token {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n\n  .token-icon {\n    width: 20px;\n    height: 20px;\n  }\n}\n\n/* Token link styling */\n.account-asset-table tbody td a {\n  text-decoration: none;\n\n  &:hover {\n    text-decoration: none;\n  }\n}\n\n@media (max-width: $phone-upper-boundary) {\n  .account-asset-tabs {\n    display: grid;\n    height: auto;\n    align-items: stretch;\n    padding: 4px;\n    border-radius: 12px;\n    gap: 4px;\n    grid-template-columns: 1fr 1fr; /* Two columns */\n  }\n\n  .account-asset-tab {\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    padding: 6px 10px;\n    border-radius: 100px;\n    background: transparent;\n    font-size: 13px;\n    white-space: nowrap;\n  }\n\n  /* Allow more height for scrollable tables on small screen */\n  .account-asset-table-wrapper-fixed .account-asset-table {\n    max-height: 400px;\n  }\n}\n\n@media (max-width: $tablet-portrait-upper-boundary) {\n  .account-asset-title {\n    font-size: 18px;\n  }\n}\n"
  },
  {
    "path": "src/containers/Accounts/AccountAsset/test/AccountAsset.test.tsx",
    "content": "import {\n  render,\n  screen,\n  waitFor,\n  cleanup,\n  fireEvent,\n} from '@testing-library/react'\nimport { I18nextProvider } from 'react-i18next'\nimport { BrowserRouter as Router } from 'react-router'\nimport { QueryClientProvider } from 'react-query'\nimport i18n from '../../../../i18n/testConfigEnglish'\nimport SocketContext from '../../../shared/SocketContext'\nimport AccountAsset from '../index'\nimport { queryClient } from '../../../shared/QueryClient'\nimport {\n  getBalances,\n  getAccountLines,\n  getAccountInfo,\n  getAccountNFTs,\n  getAccountMPTs,\n  getAccountObjects,\n  getNFTsIssuedByAccount,\n} from '../../../../rippled/lib/rippled'\nimport Mock = jest.Mock\n\njest.mock('../../../../rippled/lib/rippled')\njest.mock('../../../../rippled/NFTTransactions')\njest.mock('../../../../rippled/lib/utils', () => ({\n  formatTransferFee: jest.fn().mockReturnValue('1.00%'),\n}))\njest.mock('../../../../rippled/lib/logger', () => ({\n  __esModule: true,\n  default: () => ({\n    error: jest.fn(),\n    warn: jest.fn(),\n    info: jest.fn(),\n  }),\n}))\n\nglobal.fetch = jest.fn() as jest.Mock\n\nconst mockedGetBalances = getBalances as Mock\nconst mockedGetAccountLines = getAccountLines as Mock\nconst mockedGetAccountInfo = getAccountInfo as Mock\nconst mockedGetAccountNFTs = getAccountNFTs as Mock\nconst mockedGetAccountMPTs = getAccountMPTs as Mock\nconst mockedGetAccountObjects = getAccountObjects as Mock\nconst mockedGetNFTsIssuedByAccount = getNFTsIssuedByAccount as Mock\nconst mockedFetch = fetch as Mock\n\n// Mock socket client\nconst mockSocket = {} as any\n\n// Test wrapper component\nconst TestWrapper = ({ children }: { children: React.ReactNode }) => (\n  <I18nextProvider i18n={i18n}>\n    <Router>\n      <SocketContext.Provider value={mockSocket}>\n        <QueryClientProvider client={queryClient}>\n          {children}\n        </QueryClientProvider>\n      </SocketContext.Provider>\n    </Router>\n  </I18nextProvider>\n)\n\ndescribe('AccountAsset Component', () => {\n  beforeEach(() => {\n    jest.clearAllMocks()\n    queryClient.clear()\n    cleanup()\n\n    // Default mock implementations - empty data\n    mockedGetBalances.mockResolvedValue([])\n    mockedGetAccountLines.mockResolvedValue({ lines: [] })\n    mockedGetAccountInfo.mockResolvedValue({\n      account_data: { Account: 'rTest123', Flags: 0 },\n    })\n    mockedGetAccountNFTs.mockResolvedValue({ account_nfts: [] })\n    mockedGetAccountMPTs.mockResolvedValue({ account_objects: [] })\n    mockedGetAccountObjects.mockResolvedValue({ account_objects: [] })\n    mockedGetNFTsIssuedByAccount.mockResolvedValue({ nfts: [] })\n    mockedFetch.mockResolvedValue({\n      ok: true,\n      json: async () => ({ holders: [] }),\n    } as Response)\n  })\n\n  describe('Rendering and Layout', () => {\n    it('renders both Assets Held and Assets Issued sections', async () => {\n      render(\n        <TestWrapper>\n          <AccountAsset\n            accountId=\"rTest123\"\n            account={undefined}\n            xrpToUSDRate={0.5}\n          />\n        </TestWrapper>,\n      )\n\n      expect(screen.getByText('Assets Held')).toBeInTheDocument()\n      expect(screen.getByText('Assets Issued')).toBeInTheDocument()\n    })\n\n    it('renders all held asset tabs', async () => {\n      render(\n        <TestWrapper>\n          <AccountAsset\n            accountId=\"rTest123\"\n            account={undefined}\n            xrpToUSDRate={0.5}\n          />\n        </TestWrapper>,\n      )\n\n      // Wait for tabs to render - use getAllByRole since there are multiple tabs with IOU/MPT/NFT\n      await waitFor(() => {\n        const allTabs = screen.getAllByRole('tab')\n        expect(allTabs.length).toBeGreaterThan(0)\n      })\n\n      // Check that the held tabs list contains expected tabs\n      const heldTabList = screen.getAllByRole('tablist')[0]\n      expect(heldTabList).toHaveTextContent('IOUs')\n      expect(heldTabList).toHaveTextContent('MPTs')\n      expect(heldTabList).toHaveTextContent('LP Tokens')\n      expect(heldTabList).toHaveTextContent('NFTs')\n    })\n\n    it('renders all issued asset tabs', async () => {\n      render(\n        <TestWrapper>\n          <AccountAsset\n            accountId=\"rTest123\"\n            account={undefined}\n            xrpToUSDRate={0.5}\n          />\n        </TestWrapper>,\n      )\n\n      // Wait for tabs to render\n      await waitFor(() => {\n        const allTabs = screen.getAllByRole('tab')\n        expect(allTabs.length).toBeGreaterThan(0)\n      })\n\n      // Check that the issued tabs list contains expected tabs\n      const issuedTabList = screen.getAllByRole('tablist')[1]\n      expect(issuedTabList).toHaveTextContent('IOUs')\n      expect(issuedTabList).toHaveTextContent('MPTs')\n      expect(issuedTabList).toHaveTextContent('NFTs')\n    })\n  })\n\n  describe('Tab Navigation', () => {\n    it('switches between held asset tabs', async () => {\n      render(\n        <TestWrapper>\n          <AccountAsset\n            accountId=\"rTest123\"\n            account={undefined}\n            xrpToUSDRate={0.5}\n          />\n        </TestWrapper>,\n      )\n\n      await waitFor(() => {\n        expect(screen.getAllByRole('tablist').length).toBe(2)\n      })\n\n      // Find tabs using more specific queries\n      const heldTabList = screen.getAllByRole('tablist')[0]\n      const iouTab = heldTabList.querySelector('[aria-selected=\"true\"]')\n      expect(iouTab).toHaveTextContent('IOUs')\n\n      // Click MPT tab\n      const mptTab = heldTabList.querySelector('[title*=\"MPTs\"]') as HTMLElement\n      fireEvent.click(mptTab)\n\n      await waitFor(() => {\n        expect(mptTab).toHaveAttribute('aria-selected', 'true')\n      })\n    })\n\n    it('switches between issued asset tabs', async () => {\n      render(\n        <TestWrapper>\n          <AccountAsset\n            accountId=\"rTest123\"\n            account={undefined}\n            xrpToUSDRate={0.5}\n          />\n        </TestWrapper>,\n      )\n\n      await waitFor(() => {\n        expect(screen.getAllByRole('tablist').length).toBe(2)\n      })\n\n      const issuedTabList = screen.getAllByRole('tablist')[1]\n      const iouTab = issuedTabList.querySelector('[aria-selected=\"true\"]')\n      expect(iouTab).toHaveTextContent('IOUs')\n\n      // Click NFT tab\n      const nftTab = issuedTabList.querySelector(\n        '[title*=\"NFTs\"]',\n      ) as HTMLElement\n      fireEvent.click(nftTab)\n\n      await waitFor(() => {\n        expect(nftTab).toHaveAttribute('aria-selected', 'true')\n      })\n    })\n  })\n\n  describe('Section Collapse/Expand', () => {\n    it('collapses and expands held section', async () => {\n      render(\n        <TestWrapper>\n          <AccountAsset\n            accountId=\"rTest123\"\n            account={undefined}\n            xrpToUSDRate={0.5}\n          />\n        </TestWrapper>,\n      )\n\n      // Find the collapse button for held section\n      const toggleButtons = screen.getAllByLabelText(/Toggle assets/i)\n      const heldToggle = toggleButtons[0]\n\n      expect(heldToggle).toHaveAttribute('aria-expanded', 'true')\n\n      // Collapse\n      fireEvent.click(heldToggle)\n\n      await waitFor(() => {\n        expect(heldToggle).toHaveAttribute('aria-expanded', 'false')\n      })\n\n      // Expand\n      fireEvent.click(heldToggle)\n\n      await waitFor(() => {\n        expect(heldToggle).toHaveAttribute('aria-expanded', 'true')\n      })\n    })\n\n    it('collapses and expands issued section', async () => {\n      render(\n        <TestWrapper>\n          <AccountAsset\n            accountId=\"rTest123\"\n            account={undefined}\n            xrpToUSDRate={0.5}\n          />\n        </TestWrapper>,\n      )\n\n      const toggleButtons = screen.getAllByLabelText(/Toggle assets/i)\n      const issuedToggle = toggleButtons[1]\n\n      expect(issuedToggle).toHaveAttribute('aria-expanded', 'true')\n\n      // Collapse\n      fireEvent.click(issuedToggle)\n\n      await waitFor(() => {\n        expect(issuedToggle).toHaveAttribute('aria-expanded', 'false')\n      })\n\n      // Expand\n      fireEvent.click(issuedToggle)\n\n      await waitFor(() => {\n        expect(issuedToggle).toHaveAttribute('aria-expanded', 'true')\n      })\n    })\n  })\n\n  describe('Loading States', () => {\n    it('shows loading spinner in tabs while data is being fetched', async () => {\n      // Mock delayed responses\n      mockedGetBalances.mockImplementation(\n        () => new Promise((resolve) => setTimeout(() => resolve([]), 100)),\n      )\n\n      render(\n        <TestWrapper>\n          <AccountAsset\n            accountId=\"rTest123\"\n            account={undefined}\n            xrpToUSDRate={0.5}\n          />\n        </TestWrapper>,\n      )\n\n      // Check for loading spinner\n      await waitFor(() => {\n        const loadingSpinners = screen.getAllByRole('tab')\n        const hasSpinner = loadingSpinners.some((tab) =>\n          tab.querySelector('.loading-spinner'),\n        )\n        expect(hasSpinner).toBe(true)\n      })\n\n      // Wait for loading to complete\n      await waitFor(\n        () => {\n          const tabs = screen.getAllByRole('tab')\n          const hasSpinner = tabs.some((tab) =>\n            tab.querySelector('.loading-spinner'),\n          )\n          expect(hasSpinner).toBe(false)\n        },\n        { timeout: 3000 },\n      )\n    })\n  })\n\n  describe('Asset Counts', () => {\n    // Note: Asset count tests are covered in individual component tests\n    // Here we just verify that counts are displayed in tabs\n    it('displays asset counts in tab labels', async () => {\n      render(\n        <TestWrapper>\n          <AccountAsset\n            accountId=\"rTest123\"\n            account={undefined}\n            xrpToUSDRate={0.5}\n          />\n        </TestWrapper>,\n      )\n\n      await waitFor(() => {\n        const allTabs = screen.getAllByRole('tab')\n        // Each tab should have a count in parentheses\n        allTabs.forEach((tab) => {\n          expect(tab.textContent).toMatch(/\\(\\d+\\)/)\n        })\n      })\n    })\n  })\n\n  describe('Component Integration', () => {\n    it('renders all held asset components simultaneously', async () => {\n      const { container } = render(\n        <TestWrapper>\n          <AccountAsset\n            accountId=\"rTest123\"\n            account={undefined}\n            xrpToUSDRate={0.5}\n          />\n        </TestWrapper>,\n      )\n\n      // All components should call their APIs even if not visible\n      await waitFor(() => {\n        expect(mockedGetBalances).toHaveBeenCalled()\n        expect(mockedGetAccountMPTs).toHaveBeenCalled()\n        expect(mockedGetAccountNFTs).toHaveBeenCalled()\n      })\n\n      // Verify all 4 held asset table wrappers and asset tables are rendered\n      const allSections = container.querySelectorAll('.account-asset-content')\n      const heldSection = allSections[0] // First section (Held)\n\n      await waitFor(() => {\n        const heldTables = heldSection.querySelectorAll('.account-asset-table')\n        expect(heldTables.length).toBe(4)\n      })\n\n      const heldWrappers = heldSection.querySelectorAll(\n        '.account-asset-table-wrapper',\n      )\n      expect(heldWrappers.length).toBe(4)\n    })\n\n    it('renders all issued asset components simultaneously', async () => {\n      const { container } = render(\n        <TestWrapper>\n          <AccountAsset\n            accountId=\"rTest123\"\n            account={undefined}\n            xrpToUSDRate={0.5}\n          />\n        </TestWrapper>,\n      )\n\n      // All issued components should call their APIs even if not visible\n      await waitFor(() => {\n        expect(mockedGetAccountObjects).toHaveBeenCalled()\n        expect(mockedGetNFTsIssuedByAccount).toHaveBeenCalled()\n      })\n\n      // Verify all 3 issued asset table wrappers and asset tables are rendered\n      const allSections = container.querySelectorAll('.account-asset-content')\n      const issuedSection = allSections[1] // Second section (Issued)\n\n      await waitFor(() => {\n        const issuedTables = issuedSection.querySelectorAll(\n          '.account-asset-table',\n        )\n        expect(issuedTables.length).toBe(3)\n      })\n\n      const issuedWrappers = issuedSection.querySelectorAll(\n        '.account-asset-table-wrapper',\n      )\n      expect(issuedWrappers.length).toBe(3)\n    })\n\n    it('passes accountId to all child components', async () => {\n      const accountId = 'rTestAccount123'\n\n      render(\n        <TestWrapper>\n          <AccountAsset\n            accountId={accountId}\n            account={undefined}\n            xrpToUSDRate={0.5}\n          />\n        </TestWrapper>,\n      )\n\n      await waitFor(() => {\n        // getBalances is called by child components with socket as first param\n        expect(mockedGetBalances).toHaveBeenCalled()\n        expect(mockedGetAccountMPTs).toHaveBeenCalled()\n        expect(mockedGetAccountNFTs).toHaveBeenCalled()\n      })\n    })\n\n    it('passes xrpToUSDRate to HeldLPTokens component', async () => {\n      const xrpToUSDRate = 1.25\n\n      render(\n        <TestWrapper>\n          <AccountAsset\n            accountId=\"rTest123\"\n            account={undefined}\n            xrpToUSDRate={xrpToUSDRate}\n          />\n        </TestWrapper>,\n      )\n\n      // The component should render with the rate\n      await waitFor(() => {\n        expect(mockedGetBalances).toHaveBeenCalled()\n      })\n    })\n\n    it('passes account data to IssuedIOUs component', async () => {\n      const mockAccount = {\n        Account: 'rTest123',\n        Balance: '1000000',\n        Flags: 0,\n      }\n\n      render(\n        <TestWrapper>\n          <AccountAsset\n            accountId=\"rTest123\"\n            account={mockAccount}\n            xrpToUSDRate={0.5}\n          />\n        </TestWrapper>,\n      )\n\n      await waitFor(() => {\n        expect(mockedGetBalances).toHaveBeenCalled()\n      })\n    })\n  })\n\n  describe('Tab Active States', () => {\n    it('has IOU tab active by default in held section', async () => {\n      render(\n        <TestWrapper>\n          <AccountAsset\n            accountId=\"rTest123\"\n            account={undefined}\n            xrpToUSDRate={0.5}\n          />\n        </TestWrapper>,\n      )\n\n      await waitFor(() => {\n        const heldTabList = screen.getAllByRole('tablist')[0]\n        const activeTab = heldTabList.querySelector('[aria-selected=\"true\"]')\n        expect(activeTab).toHaveTextContent('IOUs')\n      })\n    })\n\n    it('has IOU tab active by default in issued section', async () => {\n      render(\n        <TestWrapper>\n          <AccountAsset\n            accountId=\"rTest123\"\n            account={undefined}\n            xrpToUSDRate={0.5}\n          />\n        </TestWrapper>,\n      )\n\n      await waitFor(() => {\n        expect(screen.getAllByRole('tablist').length).toBe(2)\n      })\n\n      const issuedTabList = screen.getAllByRole('tablist')[1]\n      const activeTab = issuedTabList.querySelector('[aria-selected=\"true\"]')\n      expect(activeTab).toHaveTextContent('IOUs')\n    })\n  })\n\n  describe('Accessibility', () => {\n    it('has proper ARIA labels for tab lists', async () => {\n      render(\n        <TestWrapper>\n          <AccountAsset\n            accountId=\"rTest123\"\n            account={undefined}\n            xrpToUSDRate={0.5}\n          />\n        </TestWrapper>,\n      )\n\n      await waitFor(() => {\n        expect(screen.getAllByRole('tablist').length).toBe(2)\n      })\n\n      const tabLists = screen.getAllByRole('tablist')\n      expect(tabLists[0]).toHaveAttribute('aria-label', 'Assets Held Tabs')\n      expect(tabLists[1]).toHaveAttribute('aria-label', 'Assets Issued Tabs')\n    })\n\n    it('has proper ARIA attributes on tabs', async () => {\n      render(\n        <TestWrapper>\n          <AccountAsset\n            accountId=\"rTest123\"\n            account={undefined}\n            xrpToUSDRate={0.5}\n          />\n        </TestWrapper>,\n      )\n\n      await waitFor(() => {\n        const tabs = screen.getAllByRole('tab')\n        expect(tabs.length).toBeGreaterThan(0)\n      })\n\n      const tabs = screen.getAllByRole('tab')\n      tabs.forEach((tab) => {\n        expect(tab).toHaveAttribute('aria-selected')\n        expect(tab).toHaveAttribute('role', 'tab')\n      })\n    })\n\n    it('has proper aria-expanded on toggle buttons', async () => {\n      render(\n        <TestWrapper>\n          <AccountAsset\n            accountId=\"rTest123\"\n            account={undefined}\n            xrpToUSDRate={0.5}\n          />\n        </TestWrapper>,\n      )\n\n      const toggleButtons = screen.getAllByLabelText(/Toggle assets/i)\n      expect(toggleButtons).toHaveLength(2)\n\n      toggleButtons.forEach((button) => {\n        expect(button).toHaveAttribute('aria-expanded')\n      })\n    })\n  })\n\n  describe('Number Localization', () => {\n    it('displays counts with proper formatting', async () => {\n      render(\n        <TestWrapper>\n          <AccountAsset\n            accountId=\"rTest123\"\n            account={undefined}\n            xrpToUSDRate={0.5}\n          />\n        </TestWrapper>,\n      )\n\n      // Check that counts appear in a consistent format\n      await waitFor(() => {\n        const allTabs = screen.getAllByRole('tab')\n        // All tabs should show count in format: \"Label (N)\"\n        allTabs.forEach((tab) => {\n          expect(tab.textContent).toMatch(/^.+\\s+\\(\\d+\\)$/)\n        })\n      })\n    })\n  })\n})\n"
  },
  {
    "path": "src/containers/Accounts/AccountAsset/test/FutureDataIcon.test.tsx",
    "content": "import { render, screen, fireEvent } from '@testing-library/react'\nimport { FutureDataIcon } from '../FutureDataIcon'\nimport { TooltipProvider } from '../../../shared/components/Tooltip'\n\n// Mock the SVG import\njest.mock('../../../shared/images/clock-icon.svg', () => ({\n  __esModule: true,\n  default: ({ className }: { className?: string }) => (\n    <svg data-testid=\"clock-icon\" className={className} />\n  ),\n}))\n\n// Mock the useTooltip hook\nconst mockShowTooltip = jest.fn()\nconst mockHideTooltip = jest.fn()\n\njest.mock('../../../shared/components/Tooltip', () => ({\n  ...jest.requireActual('../../../shared/components/Tooltip'),\n  useTooltip: () => ({\n    showTooltip: mockShowTooltip,\n    hideTooltip: mockHideTooltip,\n  }),\n}))\n\n// Helper to render component with TooltipProvider\nconst renderWithTooltipProvider = (component: React.ReactElement) =>\n  render(<TooltipProvider>{component}</TooltipProvider>)\n\ndescribe('FutureDataIcon', () => {\n  beforeEach(() => {\n    jest.clearAllMocks()\n    // Mock getBoundingClientRect\n    Element.prototype.getBoundingClientRect = jest.fn(() => ({\n      left: 100,\n      top: 200,\n      right: 120,\n      bottom: 220,\n      width: 20,\n      height: 20,\n      x: 100,\n      y: 200,\n      toJSON: () => {},\n    }))\n\n    // Mock window.scrollX and window.scrollY\n    Object.defineProperty(window, 'scrollX', { value: 0, writable: true })\n    Object.defineProperty(window, 'scrollY', { value: 0, writable: true })\n  })\n\n  afterEach(() => {\n    jest.restoreAllMocks()\n  })\n\n  describe('Rendering', () => {\n    it('renders the clock icon', () => {\n      renderWithTooltipProvider(<FutureDataIcon />)\n\n      expect(screen.getByTestId('clock-icon')).toBeInTheDocument()\n      expect(screen.getByTestId('clock-icon')).toHaveClass('clock-icon')\n    })\n\n    it('renders with default message when no message prop provided', () => {\n      renderWithTooltipProvider(<FutureDataIcon />)\n\n      const futureDataSpan = screen.getByRole('button')\n      fireEvent.mouseOver(futureDataSpan)\n\n      expect(mockShowTooltip).toHaveBeenCalledWith(\n        'text',\n        expect.any(Object),\n        'This data will be provided in a future release.',\n        expect.objectContaining({\n          x: 110, // 100 + 10 (TOOLTIP_X_OFFSET)\n          y: 80, // 200 + 0 - 120 (TOOLTIP_Y_OFFSET)\n        }),\n      )\n    })\n\n    it('renders with custom message when message prop provided', () => {\n      const customMessage = 'Custom future data message'\n      renderWithTooltipProvider(<FutureDataIcon message={customMessage} />)\n\n      const futureDataSpan = screen.getByRole('button')\n      fireEvent.mouseOver(futureDataSpan)\n\n      expect(mockShowTooltip).toHaveBeenCalledWith(\n        'text',\n        expect.any(Object),\n        customMessage,\n        expect.any(Object),\n      )\n    })\n  })\n\n  describe('Mouse Interactions', () => {\n    it('shows tooltip on mouse over', () => {\n      renderWithTooltipProvider(<FutureDataIcon />)\n\n      const futureDataSpan = screen.getByRole('button')\n      fireEvent.mouseOver(futureDataSpan)\n\n      expect(mockShowTooltip).toHaveBeenCalledTimes(1)\n      expect(mockShowTooltip).toHaveBeenCalledWith(\n        'text',\n        expect.any(Object),\n        'This data will be provided in a future release.',\n        expect.objectContaining({\n          x: expect.any(Number),\n          y: expect.any(Number),\n        }),\n      )\n    })\n\n    it('hides tooltip on mouse leave', () => {\n      renderWithTooltipProvider(<FutureDataIcon />)\n\n      const futureDataSpan = screen.getByRole('button')\n      fireEvent.mouseLeave(futureDataSpan)\n\n      expect(mockHideTooltip).toHaveBeenCalledTimes(1)\n    })\n\n    it('shows and hides tooltip on mouse over and leave sequence', () => {\n      renderWithTooltipProvider(<FutureDataIcon />)\n\n      const futureDataSpan = screen.getByRole('button')\n\n      fireEvent.mouseOver(futureDataSpan)\n      expect(mockShowTooltip).toHaveBeenCalledTimes(1)\n\n      fireEvent.mouseLeave(futureDataSpan)\n      expect(mockHideTooltip).toHaveBeenCalledTimes(1)\n    })\n  })\n\n  describe('Tooltip Positioning', () => {\n    it('calculates correct tooltip position with scroll offset', () => {\n      // Set scroll values\n      Object.defineProperty(window, 'scrollX', { value: 50, writable: true })\n      Object.defineProperty(window, 'scrollY', { value: 100, writable: true })\n\n      renderWithTooltipProvider(<FutureDataIcon />)\n\n      const futureDataSpan = screen.getByRole('button')\n      fireEvent.mouseOver(futureDataSpan)\n\n      expect(mockShowTooltip).toHaveBeenCalledWith(\n        'text',\n        expect.any(Object),\n        'This data will be provided in a future release.',\n        {\n          x: 160, // 100 (left) + 50 (scrollX) + 10 (TOOLTIP_X_OFFSET)\n          y: 180, // 200 (top) + 100 (scrollY) - 120 (TOOLTIP_Y_OFFSET)\n        },\n      )\n    })\n\n    it('uses correct offset constants', () => {\n      renderWithTooltipProvider(<FutureDataIcon />)\n\n      const futureDataSpan = screen.getByRole('button')\n      fireEvent.mouseOver(futureDataSpan)\n\n      expect(mockShowTooltip).toHaveBeenCalledWith(\n        'text',\n        expect.any(Object),\n        expect.any(String),\n        {\n          x: 110, // Confirms TOOLTIP_X_OFFSET = 10\n          y: 80, // Confirms TOOLTIP_Y_OFFSET = -120\n        },\n      )\n    })\n  })\n\n  describe('Edge Cases', () => {\n    it('handles multiple rapid mouse events', () => {\n      renderWithTooltipProvider(<FutureDataIcon />)\n\n      const futureDataSpan = screen.getByRole('button')\n\n      // Rapid mouse events\n      fireEvent.mouseOver(futureDataSpan)\n      fireEvent.mouseOver(futureDataSpan)\n      fireEvent.mouseLeave(futureDataSpan)\n      fireEvent.mouseOver(futureDataSpan)\n      fireEvent.mouseLeave(futureDataSpan)\n\n      expect(mockShowTooltip).toHaveBeenCalledTimes(3)\n      expect(mockHideTooltip).toHaveBeenCalledTimes(2)\n    })\n\n    it('handles empty message prop', () => {\n      renderWithTooltipProvider(<FutureDataIcon message=\"\" />)\n\n      const futureDataSpan = screen.getByRole('button')\n      fireEvent.mouseOver(futureDataSpan)\n\n      expect(mockShowTooltip).toHaveBeenCalledWith(\n        'text',\n        expect.any(Object),\n        '',\n        expect.any(Object),\n      )\n    })\n  })\n})\n"
  },
  {
    "path": "src/containers/Accounts/AccountAsset/test/HeldIOUs.test.tsx",
    "content": "import { render, screen, cleanup, waitFor } from '@testing-library/react'\nimport { I18nextProvider } from 'react-i18next'\nimport { BrowserRouter as Router } from 'react-router'\nimport { QueryClientProvider } from 'react-query'\nimport i18n from '../../../../i18n/testConfigEnglish'\nimport SocketContext from '../../../shared/SocketContext'\nimport { HeldIOUs } from '../assetTables/HeldIOUs'\nimport {\n  getBalances,\n  getAccountLines,\n  getAccountInfo,\n} from '../../../../rippled/lib/rippled'\nimport { formatTransferFee } from '../../../../rippled/lib/utils'\nimport { queryClient } from '../../../shared/QueryClient'\nimport Mock = jest.Mock\n\njest.mock('../../../../rippled/lib/rippled')\njest.mock('../../../../rippled/lib/utils')\njest.mock('../../../../rippled/lib/logger', () => ({\n  __esModule: true,\n  default: () => ({\n    error: jest.fn(),\n    warn: jest.fn(),\n    info: jest.fn(),\n  }),\n}))\n\nglobal.fetch = jest.fn() as jest.Mock\n\nconst mockedGetBalances = getBalances as Mock\nconst mockedGetAccountLines = getAccountLines as Mock\nconst mockedGetAccountInfo = getAccountInfo as Mock\nconst mockedFormatTransferFee = formatTransferFee as Mock\nconst mockedFetch = fetch as Mock\n\n// Mock socket client\nconst mockSocket = {} as any\n\n// Test wrapper component\nconst TestWrapper = ({ children }: { children: React.ReactNode }) => (\n  <I18nextProvider i18n={i18n}>\n    <Router>\n      <SocketContext.Provider value={mockSocket}>\n        <QueryClientProvider client={queryClient}>\n          {children}\n        </QueryClientProvider>\n      </SocketContext.Provider>\n    </Router>\n  </I18nextProvider>\n)\n\nconst mockBalancesResponse = {\n  assets: {\n    rN7n7otQDd6FczFgLdSqtcsAUxDkw6fzRH: [\n      { currency: 'USD', value: '100' },\n      { currency: 'EUR', value: '50' },\n    ],\n    rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B: [{ currency: 'BTC', value: '0.001' }],\n    rLNaPoKeeBjZe2qs6x52yVPZpZ8td4dc6w: [\n      {\n        currency:\n          '03AD8B0558D3C1FC1E7B1C0A0DB0C88D904D500FFE68DE154997F9CC9C999999',\n        value: '1000',\n      },\n    ],\n  },\n}\n\nconst mockAccountLinesResponse = {\n  lines: [\n    {\n      currency: 'USD',\n      account: 'rN7n7otQDd6FczFgLdSqtcsAUxDkw6fzRH',\n      balance: '100.50',\n      freeze: false,\n      freeze_peer: false,\n    },\n    {\n      currency: 'EUR',\n      account: 'rN7n7otQDd6FczFgLdSqtcsAUxDkw6fzRH',\n      balance: '50.25',\n      freeze: false,\n      freeze_peer: false,\n    },\n    {\n      currency: 'BTC',\n      account: 'rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B',\n      balance: '0.001',\n      freeze: true,\n      freeze_peer: false,\n    },\n    {\n      currency:\n        '03AD8B0558D3C1FC1E7B1C0A0DB0C88D904D500FFE68DE154997F9CC9C999999',\n      account: 'rLNaPoKeeBjZe2qs6x52yVPZpZ8td4dc6w',\n      balance: '1000',\n      freeze: false,\n      freeze_peer: false,\n    },\n  ],\n  marker: '',\n}\n\nconst mockLOSTokenResponse = {\n  tokens: [\n    {\n      currency: 'USD',\n      issuer_account: 'rN7n7otQDd6FczFgLdSqtcsAUxDkw6fzRH',\n      icon: 'https://example.com/usd-icon.png',\n      issuer_name: 'Gatehub',\n      price_usd: '1.00',\n      asset_class: 'Currency',\n    },\n    {\n      currency: 'EUR',\n      issuer_account: 'rN7n7otQDd6FczFgLdSqtcsAUxDkw6fzRH',\n      icon: 'https://example.com/eur-icon.png',\n      issuer_name: 'Gatehub',\n      price_usd: '1.10',\n      asset_class: 'Currency',\n    },\n    {\n      currency: 'BTC',\n      issuer_account: 'rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B',\n      issuer_name: 'Bitstamp',\n      price_usd: '45000.00',\n      asset_class: 'Cryptocurrency',\n    },\n    {\n      currency:\n        '03AD8B0558D3C1FC1E7B1C0A0DB0C88D904D500FFE68DE154997F9CC9C999999',\n      issuer_account: 'rLNaPoKeeBjZe2qs6x52yVPZpZ8td4dc6w',\n      price_usd: '1.00',\n      asset_class: 'RWA',\n    },\n  ],\n}\n\nconst mockAccountInfo = {\n  TransferRate: 1010000000, // 1% transfer fee\n  Flags: 0,\n  AMMID: undefined,\n}\n\ndescribe('HeldIOUs', () => {\n  afterEach(() => {\n    cleanup()\n    queryClient.clear() // Clear React Query cache between tests\n  })\n\n  // Helper function to verify column headers\n  const verifyColumnHeaders = async () => {\n    await waitFor(() => {\n      expect(screen.getByText('Currency Code')).toBeInTheDocument()\n    })\n    expect(screen.getByText('Issuer')).toBeInTheDocument()\n    expect(screen.getByText('Price (USD)')).toBeInTheDocument()\n    expect(screen.getByText('Balance')).toBeInTheDocument()\n    expect(screen.getByText('Balance (USD)')).toBeInTheDocument()\n    expect(screen.getByText('Asset Class')).toBeInTheDocument()\n    expect(screen.getByText('Transfer Fee')).toBeInTheDocument()\n    expect(screen.getByText('Frozen')).toBeInTheDocument()\n  }\n\n  it('renders empty state when no IOUs are held', async () => {\n    // Override the default mocks to return truly empty data\n    mockedGetBalances.mockResolvedValueOnce({ assets: {} })\n    mockedGetAccountLines.mockResolvedValueOnce({ lines: [], marker: '' })\n\n    // Also mock the LOS token fetch to return empty tokens\n    mockedFetch.mockResolvedValueOnce({\n      ok: true,\n      json: () => Promise.resolve({ tokens: [] }),\n    } as Response)\n\n    render(\n      <TestWrapper>\n        <HeldIOUs accountId=\"rTest123\" />\n      </TestWrapper>,\n    )\n\n    // Verify all column headers are displayed\n    await verifyColumnHeaders()\n\n    // Check that the empty message is displayed (this is the translated text)\n    await waitFor(() => {\n      expect(screen.getByText('No IOUs found')).toBeInTheDocument()\n    })\n  })\n\n  beforeEach(() => {\n    jest.clearAllMocks()\n    process.env.VITE_LOS_URL = 'https://api.los.example.com'\n\n    mockedFormatTransferFee.mockReturnValue('1.0%')\n    mockedGetBalances.mockResolvedValue(mockBalancesResponse)\n    mockedGetAccountLines.mockResolvedValue(mockAccountLinesResponse)\n\n    // Set up getAccountInfo mock to handle different account types\n    mockedGetAccountInfo.mockImplementation((_, accountId) => {\n      if (accountId === 'rLNaPoKeeBjZe2qs6x52yVPZpZ8td4dc6w') {\n        // LP token issuer - make it an AMM account by default make tokens starting with `03` LP tokens\n        return Promise.resolve({\n          TransferRate: undefined,\n          Flags: 0,\n          AMMID: 'AMMID123456',\n        })\n      }\n      // Regular accounts\n      return Promise.resolve(mockAccountInfo)\n    })\n\n    mockedFetch.mockResolvedValue({\n      ok: true,\n      json: () => Promise.resolve(mockLOSTokenResponse),\n    } as Response)\n  })\n\n  it('shows all tokens including token starting with `03` whose issuer is not an AMM account', async () => {\n    // Override the mock to make `03` token issuer NOT an AMM account\n    // Add a delay to simulate async checking and test progressive reveal\n    mockedGetAccountInfo.mockImplementation((_, accountId): Promise<any> => {\n      if (accountId === 'rLNaPoKeeBjZe2qs6x52yVPZpZ8td4dc6w') {\n        return new Promise((resolve) => {\n          setTimeout(() => {\n            resolve({\n              TransferRate: 1020000000, // 2% transfer fee\n              Flags: 0x00400000, // lsfGlobalFreeze\n              AMMID: undefined, // This makes it NOT an AMM account\n            })\n          }, 100) // 100ms delay to simulate network request\n        })\n      }\n\n      // Regular accounts - immediate response\n      return Promise.resolve(mockAccountInfo)\n    })\n\n    render(\n      <TestWrapper>\n        <HeldIOUs accountId=\"rTest123\" />\n      </TestWrapper>,\n    )\n\n    // Verify all column headers are displayed\n    await verifyColumnHeaders()\n\n    // Wait for initial tokens to load (non-03 tokens)\n    await waitFor(() => {\n      expect(screen.getByText('USD')).toBeInTheDocument()\n    })\n\n    // Get initial table rows (excluding header)\n    let rows = screen.getAllByRole('row')\n    let dataRows = rows.slice(1)\n\n    // Initially, we should only have 3 tokens (USD, EUR, BTC)\n    // The `03` token should be hidden until confirmed as non-LP\n    expect(dataRows).toHaveLength(3)\n    expect(\n      screen.queryByText(\n        '03AD8B0558D3C1FC1E7B1C0A0DB0C88D904D500FFE68DE154997F9CC9C999999',\n      ),\n    ).not.toBeInTheDocument()\n\n    // Now wait for the `03` token to appear after confirmation\n    await waitFor(\n      () => {\n        expect(\n          screen.getByText(\n            '03AD8B0558D3C1FC1E7B1C0A0DB0C88D904D500FFE68DE154997F9CC9C999999',\n          ),\n        ).toBeInTheDocument()\n      },\n      { timeout: 5000 },\n    )\n\n    // Get all table rows again (should now include the `03` token)\n    rows = screen.getAllByRole('row')\n    dataRows = rows.slice(1) // Skip header row\n\n    // Verify we have 4 token rows (sorted by Balance USD descending)\n    expect(dataRows).toHaveLength(4)\n\n    // / Verify `03` non-lp token data in first row (highest balance USD: $1,000.00)\n    const nonLPTokenRow = dataRows[0]\n    expect(nonLPTokenRow).toHaveTextContent(\n      '03AD8B0558D3C1FC1E7B1C0A0DB0C88D904D500FFE68DE154997F9CC9C999999',\n    )\n    expect(nonLPTokenRow).toHaveTextContent('rLNaPoK...4dc6w')\n    expect(nonLPTokenRow).toHaveTextContent('$1.00')\n    expect(nonLPTokenRow).toHaveTextContent('1,000')\n    expect(nonLPTokenRow).toHaveTextContent('$1,000.00')\n    expect(nonLPTokenRow).toHaveTextContent('RWA')\n    // Initial state shows -- for both transfer fee and frozen (no trustline freeze)\n    const nonLPTokenPlaceholders = nonLPTokenRow.textContent?.match(/--/g) || []\n    expect(nonLPTokenPlaceholders.length).toBe(2)\n\n    // Verify USD token data in second row (highest balance USD: $100.50)\n    const usdRow = dataRows[1]\n    expect(usdRow).toHaveTextContent('USD')\n    expect(usdRow).toHaveTextContent('Gatehub')\n    expect(usdRow).toHaveTextContent('$1.00')\n    expect(usdRow).toHaveTextContent('100.5')\n    expect(usdRow).toHaveTextContent('$100.50')\n\n    // Initial state shows -- for both transfer fee and frozen (no trustline freeze)\n    const usdPlaceholders = usdRow.textContent?.match(/--/g) || []\n    expect(usdPlaceholders.length).toBe(2)\n\n    // Verify EUR token data in third row (second highest: $55.28)\n    const eurRow = dataRows[2]\n    expect(eurRow).toHaveTextContent('EUR')\n    expect(eurRow).toHaveTextContent('Gatehub')\n    expect(eurRow).toHaveTextContent('$1.10')\n    expect(eurRow).toHaveTextContent('50.25')\n    expect(eurRow).toHaveTextContent('$55.28')\n    expect(eurRow).toHaveTextContent('Currency')\n    // Initial state shows -- for both transfer fee and frozen (no trustline freeze)\n    const eurPlaceholders = eurRow.textContent?.match(/--/g) || []\n    expect(eurPlaceholders.length).toBe(2)\n\n    // Verify BTC token data in fourth row (third highest: $45.00)\n    const btcRow = dataRows[3]\n    expect(btcRow).toHaveTextContent('BTC')\n    expect(btcRow).toHaveTextContent('Bitstamp')\n    expect(btcRow).toHaveTextContent('$45,000.00')\n    expect(btcRow).toHaveTextContent('0.001')\n    expect(btcRow).toHaveTextContent('$45.00')\n    expect(btcRow).toHaveTextContent('Cryptocurrency')\n    // BTC has trustline freeze in the account lines\n    expect(btcRow).toHaveTextContent('Trustline')\n    // Only 1 placeholder for transfer fee (frozen shows Trustline, not --)\n    const btcPlaceholders = btcRow.textContent?.match(/--/g) || []\n    expect(btcPlaceholders.length).toBe(1)\n  })\n\n  it('excludes LP tokens whose issuer is an AMM account', async () => {\n    // Use the default mock setup where LP token issuer IS an AMM account (from beforeEach)\n\n    render(\n      <TestWrapper>\n        <HeldIOUs accountId=\"rTest123\" />\n      </TestWrapper>,\n    )\n\n    // Verify all column headers are displayed\n    await verifyColumnHeaders()\n\n    // Wait for tokens to load\n    await waitFor(() => {\n      expect(screen.getByText('USD')).toBeInTheDocument()\n    })\n\n    // Get all table rows (excluding header)\n    const rows = screen.getAllByRole('row')\n    const dataRows = rows.slice(1) // Skip header row\n\n    // Verify we have 3 token rows (LP token excluded)\n    expect(dataRows).toHaveLength(3)\n\n    // Verify USD token data in first row (highest balance USD: $100.50)\n    const usdRow = dataRows[0]\n    expect(usdRow).toHaveTextContent('USD')\n    expect(usdRow).toHaveTextContent('Gatehub')\n    expect(usdRow).toHaveTextContent('$1.00')\n    expect(usdRow).toHaveTextContent('100.5')\n    expect(usdRow).toHaveTextContent('$100.50')\n    expect(usdRow).toHaveTextContent('Currency')\n    const usdPlaceholders = usdRow.textContent?.match(/--/g) || []\n    expect(usdPlaceholders.length).toBe(2)\n\n    // Verify EUR token data in second row (second highest: $55.28)\n    const eurRow = dataRows[1]\n    expect(eurRow).toHaveTextContent('EUR')\n    expect(eurRow).toHaveTextContent('Gatehub')\n    expect(eurRow).toHaveTextContent('$1.10')\n    expect(eurRow).toHaveTextContent('50.25')\n    expect(eurRow).toHaveTextContent('$55.28')\n    expect(eurRow).toHaveTextContent('Currency')\n    const eurPlaceholders = eurRow.textContent?.match(/--/g) || []\n    expect(eurPlaceholders.length).toBe(2)\n\n    // Verify BTC token data in third row (third highest: $45.00)\n    const btcRow = dataRows[2]\n    expect(btcRow).toHaveTextContent('BTC')\n    expect(btcRow).toHaveTextContent('Bitstamp')\n    expect(btcRow).toHaveTextContent('$45,000.00')\n    expect(btcRow).toHaveTextContent('0.001')\n    expect(btcRow).toHaveTextContent('$45.00')\n    expect(btcRow).toHaveTextContent('Cryptocurrency')\n    expect(btcRow).toHaveTextContent('Trustline')\n    const btcPlaceholders = btcRow.textContent?.match(/--/g) || []\n    expect(btcPlaceholders.length).toBe(1)\n\n    // Verify LP token is NOT displayed\n    expect(\n      screen.queryByText(\n        '03AD8B0558D3C1FC1E7B1C0A0DB0C88D904D500FFE68DE154997F9CC9C999999',\n      ),\n    ).not.toBeInTheDocument()\n    expect(screen.queryByText('rLNaPoK...4dc6w')).not.toBeInTheDocument()\n    expect(screen.queryByText('1,000')).not.toBeInTheDocument()\n  })\n})\n"
  },
  {
    "path": "src/containers/Accounts/AccountAsset/test/HeldLPTokens.test.tsx",
    "content": "import { render, screen, cleanup, waitFor } from '@testing-library/react'\nimport { I18nextProvider } from 'react-i18next'\nimport { BrowserRouter as Router } from 'react-router'\nimport { QueryClientProvider } from 'react-query'\nimport i18n from '../../../../i18n/testConfigEnglish'\nimport SocketContext from '../../../shared/SocketContext'\nimport { HeldLPTokens } from '../assetTables/HeldLPTokens'\nimport {\n  getBalances,\n  getAMMInfoByAMMAccount,\n} from '../../../../rippled/lib/rippled'\nimport { queryClient } from '../../../shared/QueryClient'\nimport Mock = jest.Mock\n\njest.mock('../../../../rippled/lib/rippled')\njest.mock('../../../../rippled/lib/logger', () => ({\n  __esModule: true,\n  default: () => ({\n    error: jest.fn(),\n    warn: jest.fn(),\n    info: jest.fn(),\n  }),\n}))\n\nconst mockedGetBalances = getBalances as Mock\nconst mockedGetAMMInfoByAMMAccount = getAMMInfoByAMMAccount as Mock\n\n// Mock socket client\nconst mockSocket = {} as any\n\n// Test wrapper component\nconst TestWrapper = ({ children }: { children: React.ReactNode }) => (\n  <I18nextProvider i18n={i18n}>\n    <Router>\n      <SocketContext.Provider value={mockSocket}>\n        <QueryClientProvider client={queryClient}>\n          {children}\n        </QueryClientProvider>\n      </SocketContext.Provider>\n    </Router>\n  </I18nextProvider>\n)\n\n// Mock data for LP token balances (with LP token identifier prefix '03')\nconst mockBalancesResponseWithLPTokens = {\n  assets: {\n    rp9E3FN9YAJjc7xrr8eTTYVpBheop35uoxu8vM: [\n      {\n        currency:\n          '03AD8B0558D3C1FC1E7B1C0A0DB0C88D904D500FFE68DE154997F9CC9C999999',\n        value: '1000.5',\n      },\n    ],\n    rDMNE7xaqxZ6YqPMJJV6sJ7Bw5UjT3nT6vd4XW: [\n      {\n        currency:\n          '03BD9C0558D3C1FC1E7B1C0A0DB0C88D904D500FFE68DE154997F9CC9C888888',\n        value: '500.25',\n      },\n    ],\n  },\n}\n\n// Mock empty balances response\nconst mockEmptyBalancesResponse = {\n  assets: {},\n}\n\n// Mock AMM info responses\nconst mockAMMInfoXRP = {\n  amm: {\n    amount: '50000000000', // 50,000 XRP (in drops)\n    amount2: {\n      currency: 'USD',\n      issuer: 'rN7n7otQDd6FczFgLdSqtcsAUxDkw6fzRH',\n      value: '50000',\n    },\n    lp_token: {\n      currency:\n        '03AD8B0558D3C1FC1E7B1C0A0DB0C88D904D500FFE68DE154997F9CC9C999999',\n      issuer: 'rp9E3FN9YAJjc7xrr8eTTYVpBheop35uoxu8vM',\n      value: '10000',\n    },\n  },\n}\n\nconst mockAMMInfoTokens = {\n  amm: {\n    amount: {\n      currency: 'USD',\n      issuer: 'rN7n7otQDd6FczFgLdSqtcsAUxDkw6fzRH',\n      value: '25000',\n    },\n    amount2: {\n      currency: 'EUR',\n      issuer: 'rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B',\n      value: '22727.27',\n    },\n    lp_token: {\n      currency:\n        '03BD9C0558D3C1FC1E7B1C0A0DB0C88D904D500FFE68DE154997F9CC9C888888',\n      issuer: 'rDMNE7xaqxZ6YqPMJJV6sJ7Bw5UjT3nT6vd4XW',\n      value: '5000',\n    },\n  },\n}\n\ndescribe('HeldLPTokens', () => {\n  const mockXRPToUSDRate = 0.5 // 1 XRP = $0.50\n\n  // Helper function to verify column headers\n  const verifyColumnHeaders = async () => {\n    await waitFor(() => {\n      expect(screen.getByText('AMM Instance')).toBeInTheDocument()\n    })\n    expect(screen.getByText('AMM Pair')).toBeInTheDocument()\n    expect(screen.getByText('Balance')).toBeInTheDocument()\n    expect(screen.getByText('Balance (USD)')).toBeInTheDocument()\n    expect(screen.getByText('Share (%)')).toBeInTheDocument()\n  }\n\n  afterEach(() => {\n    cleanup()\n    queryClient.clear() // Clear React Query cache between tests\n  })\n\n  beforeEach(() => {\n    jest.clearAllMocks()\n\n    mockedGetBalances.mockResolvedValue(mockBalancesResponseWithLPTokens)\n\n    // Set up getAMMInfoByAMMAccount mock to handle different AMM accounts\n    mockedGetAMMInfoByAMMAccount.mockImplementation((_, ammAccount) => {\n      if (ammAccount === 'rp9E3FN9YAJjc7xrr8eTTYVpBheop35uoxu8vM') {\n        return Promise.resolve(mockAMMInfoXRP)\n      }\n      if (ammAccount === 'rDMNE7xaqxZ6YqPMJJV6sJ7Bw5UjT3nT6vd4XW') {\n        return Promise.resolve(mockAMMInfoTokens)\n      }\n      return Promise.reject(new Error('AMM not found'))\n    })\n  })\n\n  it('renders empty state when no LP tokens are held', async () => {\n    // Override the default mock to return empty assets\n    mockedGetBalances.mockResolvedValueOnce(mockEmptyBalancesResponse)\n\n    render(\n      <TestWrapper>\n        <HeldLPTokens accountId=\"rTest123\" xrpToUSDRate={mockXRPToUSDRate} />\n      </TestWrapper>,\n    )\n\n    // Verify all column headers are displayed\n    await verifyColumnHeaders()\n\n    // Check that the empty message is displayed (this is the translated text)\n    await waitFor(() => {\n      expect(screen.getByText('No LP Tokens found')).toBeInTheDocument()\n    })\n  })\n\n  it('handles error when getBalances fails', async () => {\n    // Mock getBalances to throw an error\n    mockedGetBalances.mockRejectedValueOnce(new Error('Network error'))\n\n    render(\n      <TestWrapper>\n        <HeldLPTokens accountId=\"rTest123\" xrpToUSDRate={mockXRPToUSDRate} />\n      </TestWrapper>,\n    )\n\n    // Verify all column headers are displayed\n    await verifyColumnHeaders()\n\n    // Should show empty state when error occurs\n    await waitFor(() => {\n      expect(screen.getByText('No LP Tokens found')).toBeInTheDocument()\n    })\n  })\n\n  it('shows two LP tokens with XRP pair and token pair', async () => {\n    render(\n      <TestWrapper>\n        <HeldLPTokens accountId=\"rTest123\" xrpToUSDRate={mockXRPToUSDRate} />\n      </TestWrapper>,\n    )\n\n    // Verify all column headers are displayed\n    await verifyColumnHeaders()\n\n    // Wait for LP tokens to load\n    await waitFor(() => {\n      expect(screen.getByText('rp9E3FN...xu8vM')).toBeInTheDocument()\n    })\n\n    // Get all table rows (excluding header)\n    const rows = screen.getAllByRole('row')\n    const dataRows = rows.slice(1) // Skip header row\n\n    // Verify we have 2 LP token rows (XRP pair first, then token pair)\n    expect(dataRows).toHaveLength(2)\n\n    // Verify first LP token (XRP/USD pair)\n    const xrpUsdRow = dataRows[0]\n    expect(xrpUsdRow).toHaveTextContent('rp9E3FN...xu8vM') // AMM instance\n    expect(xrpUsdRow.textContent).toMatch(/XRP\\/USD/) // AMM pair\n    expect(xrpUsdRow).toHaveTextContent('1,000.5') // Balance\n    expect(xrpUsdRow).toHaveTextContent('$5,002.50') // Balance USD\n    expect(xrpUsdRow.textContent).toMatch(/10\\.01/) // Share %\n\n    // Verify second LP token (USD/EUR pair)\n    const usdEurRow = dataRows[1]\n    expect(usdEurRow).toHaveTextContent('rDMNE7x...vd4XW') // AMM instance\n    expect(usdEurRow.textContent).toMatch(/USD\\/EUR/) // AMM pair\n    expect(usdEurRow).toHaveTextContent('500.25') // Balance\n    expect(usdEurRow).toHaveTextContent('--') // Balance USD (no XRP in pair)\n    expect(usdEurRow.textContent).toMatch(/10\\.01/) // Share %\n  })\n})\n"
  },
  {
    "path": "src/containers/Accounts/AccountAsset/test/HeldMPTs.test.tsx",
    "content": "import { render, screen, cleanup, waitFor } from '@testing-library/react'\nimport { I18nextProvider } from 'react-i18next'\nimport { BrowserRouter as Router } from 'react-router'\nimport { QueryClientProvider } from 'react-query'\nimport i18n from '../../../../i18n/testConfigEnglish'\nimport SocketContext from '../../../shared/SocketContext'\nimport { HeldMPTs } from '../assetTables/HeldMPTs'\nimport { getAccountMPTs, getMPTIssuance } from '../../../../rippled/lib/rippled'\nimport { queryClient } from '../../../shared/QueryClient'\nimport Mock = jest.Mock\n\njest.mock('../../../../rippled/lib/rippled')\njest.mock('../../../../rippled/lib/logger', () => ({\n  __esModule: true,\n  default: () => ({\n    error: jest.fn(),\n    warn: jest.fn(),\n    info: jest.fn(),\n  }),\n}))\n\nconst mockedGetAccountMPTs = getAccountMPTs as Mock\nconst mockedGetMPTIssuance = getMPTIssuance as Mock\n\n// Mock socket client\nconst mockSocket = {} as any\n\n// Test wrapper component\nconst TestWrapper = ({ children }: { children: React.ReactNode }) => (\n  <I18nextProvider i18n={i18n}>\n    <Router>\n      <SocketContext.Provider value={mockSocket}>\n        <QueryClientProvider client={queryClient}>\n          {children}\n        </QueryClientProvider>\n      </SocketContext.Provider>\n    </Router>\n  </I18nextProvider>\n)\n\nconst mockMPTsResponse = {\n  account_objects: [\n    {\n      MPTokenIssuanceID: '000004C463C52827307480341125DA65C267105D00000001',\n      MPTAmount: '1000000',\n      Flags: 1, // lsfMPTLocked\n    },\n    {\n      MPTokenIssuanceID: '000004C463C52827307480341125DA65C267105D00000002',\n      MPTAmount: '500000',\n      Flags: 0,\n    },\n    {\n      MPTokenIssuanceID: '000004C463C52827307480341125DA65C267105D00000003',\n      MPTAmount: '250000',\n      Flags: 0,\n    },\n  ],\n  marker: '',\n}\n\nconst mockMPTIssuanceResponses = {\n  '000004C463C52827307480341125DA65C267105D00000001': {\n    node: {\n      Issuer: 'rN7n7otQDd6FczFgLdSqtcsAUxDkw6fzRH',\n      TransferFee: 5000,\n      Flags: 0,\n      AssetScale: 2,\n      // Hex-encoded JSON: {\"ticker\":\"USD\",\"issuer_name\":\"Gatehub\",\"asset_class\":\"other\",\"name\":\"USD Token\",\"icon\":\"https://example.com/usd.png\"}\n      MPTokenMetadata:\n        '7B227469636B6572223A22555344222C22697373756572' +\n        '5F6E616D65223A22476174656875622' +\n        '22C2261737365745F636C617373223A226F74686572222C226E616D65223A22555344' +\n        '20546F6B656E222C2269636F6E223A2268747470733A2F2F6578616D706C652E636F6D2F7573642E706E67227D',\n    },\n  },\n  '000004C463C52827307480341125DA65C267105D00000002': {\n    node: {\n      Issuer: 'rLNaPoKeeBjZe2qs6x52yVPZpZ8td4dc6w',\n      TransferFee: 10000,\n      Flags: 1, // lsfMPTLocked (Global)\n      AssetScale: 0,\n      // Hex-encoded JSON: {\"ticker\":\"EUR\",\"issuer_name\":\"Bitstamp\",\"asset_class\":\"other\",\"name\":\"EUR Token\",\"icon\":\"https://example.com/eur.png\"}\n      MPTokenMetadata:\n        '7B227469636B6572223A22455552222C22697373756572' +\n        '5F6E616D65223A2242697473' +\n        '74616D70222C2261737365745F636C617373223A226F74686572222C226E616D65223A22455552' +\n        '20546F6B656E222C2269636F6E223A2268747470733A2F2F6578616D706C652E636F6D2F6575722E706E67227D',\n    },\n  },\n  '000004C463C52827307480341125DA65C267105D00000003': {\n    node: {\n      Issuer: 'rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B',\n      TransferFee: 15000,\n      Flags: 0,\n      AssetScale: 0,\n      // Hex-encoded JSON: {\"ticker\":\"BTC\",\"issuer_name\":\"Kraken\",\"asset_class\":\"other\",\"name\":\"BTC Token\",\"icon\":\"https://example.com/btc.png\"}\n      MPTokenMetadata:\n        '7B227469636B6572223A22425443222C22697373756572' +\n        '5F6E616D65223A224B72616B' +\n        '656E222C2261737365745F636C617373223A226F74686572222C226E616D65223A22425443' +\n        '20546F6B656E222C2269636F6E223A2268747470733A2F2F6578616D706C652E636F6D2F6274632E706E67227D',\n    },\n  },\n}\n\ndescribe('HeldMPTs', () => {\n  // Helper function to verify all column headers are displayed\n  const verifyColumnHeaders = async () => {\n    await waitFor(() => {\n      expect(screen.getByText('Token ID')).toBeInTheDocument()\n    })\n    expect(screen.getByText('Ticker')).toBeInTheDocument()\n    expect(screen.getByText('Issuer')).toBeInTheDocument()\n    expect(screen.getByText('Price (USD)')).toBeInTheDocument()\n    expect(screen.getByText('Balance')).toBeInTheDocument()\n    expect(screen.getByText('Balance (USD)')).toBeInTheDocument()\n    expect(screen.getByText('Asset Class')).toBeInTheDocument()\n    expect(screen.getByText('Transfer Fee')).toBeInTheDocument()\n    expect(screen.getByText('Locked')).toBeInTheDocument()\n  }\n\n  afterEach(() => {\n    cleanup()\n    queryClient.clear()\n  })\n\n  beforeEach(() => {\n    jest.clearAllMocks()\n\n    mockedGetAccountMPTs.mockResolvedValue(mockMPTsResponse)\n    mockedGetMPTIssuance.mockImplementation((_, mptIssuanceId) => {\n      const response =\n        mockMPTIssuanceResponses[\n          mptIssuanceId as keyof typeof mockMPTIssuanceResponses\n        ]\n      return Promise.resolve(response)\n    })\n  })\n\n  it('renders empty state when no MPTs are held', async () => {\n    mockedGetAccountMPTs.mockResolvedValueOnce({ account_objects: [] })\n\n    render(\n      <TestWrapper>\n        <HeldMPTs accountId=\"rTest123\" />\n      </TestWrapper>,\n    )\n\n    // Verify all column headers are displayed\n    await verifyColumnHeaders()\n\n    // Check that the empty message is displayed\n    await waitFor(() => {\n      expect(screen.getByText('No MPTs found')).toBeInTheDocument()\n    })\n  })\n\n  it('handles error when getAccountMPTs fails', async () => {\n    mockedGetAccountMPTs.mockRejectedValueOnce(new Error('Network error'))\n\n    render(\n      <TestWrapper>\n        <HeldMPTs accountId=\"rTest123\" />\n      </TestWrapper>,\n    )\n\n    // Verify all column headers are displayed\n    await verifyColumnHeaders()\n\n    // Should show empty state when error occurs\n    await waitFor(() => {\n      expect(screen.getByText('No MPTs found')).toBeInTheDocument()\n    })\n  })\n\n  it('shows 3 held MPTs with all column values', async () => {\n    render(\n      <TestWrapper>\n        <HeldMPTs accountId=\"rTest123\" />\n      </TestWrapper>,\n    )\n\n    // Verify all column headers are displayed\n    await verifyColumnHeaders()\n\n    // Wait for MPTs to load\n    await waitFor(() => {\n      expect(screen.getByText('000004C463...5D00000001')).toBeInTheDocument()\n    })\n\n    // Get all table rows (excluding header)\n    const rows = screen.getAllByRole('row')\n    const dataRows = rows.slice(1) // Skip header row\n\n    // Verify we have 3 MPT rows\n    expect(dataRows).toHaveLength(3)\n\n    // Verify USD MPT data in first row\n    const usdRow = dataRows[0]\n    expect(usdRow).toHaveTextContent('000004C463...5D00000001')\n    expect(usdRow).toHaveTextContent('USD') // ticker\n    expect(usdRow).toHaveTextContent('Gatehub') // issuer name\n    // Note: The MPT balance is scaled by the appropriate (10 ^ -asset_scale) multiplicative factor.\n    expect(usdRow).toHaveTextContent('10.0K') // balance (formatted with parseAmount)\n    expect(usdRow).toHaveTextContent('OTHER') // asset class (uppercase)\n    expect(usdRow).toHaveTextContent('5%') // transfer fee\n    expect(usdRow).toHaveTextContent('Individual') // locked status\n\n    // Verify EUR MPT data in second row\n    const eurRow = dataRows[1]\n    expect(eurRow).toHaveTextContent('000004C463...5D00000002')\n    expect(eurRow).toHaveTextContent('EUR') // ticker\n    expect(eurRow).toHaveTextContent('Bitstamp') // issuer name\n    expect(eurRow).toHaveTextContent('500.0K') // balance (formatted with parseAmount)\n    expect(eurRow).toHaveTextContent('OTHER') // asset class (uppercase)\n    expect(eurRow).toHaveTextContent('10%') // transfer fee\n    expect(eurRow).toHaveTextContent('Global') // locked status\n\n    // Verify BTC MPT data in third row\n    const btcRow = dataRows[2]\n    expect(btcRow).toHaveTextContent('000004C463...5D00000003')\n    expect(btcRow).toHaveTextContent('BTC') // ticker\n    expect(btcRow).toHaveTextContent('Kraken') // issuer name\n    expect(btcRow).toHaveTextContent('250.0K') // balance (formatted with parseAmount)\n    expect(btcRow).toHaveTextContent('OTHER') // asset class (uppercase)\n    expect(btcRow).toHaveTextContent('15%') // transfer fee\n    expect(btcRow).toHaveTextContent('--') // not locked\n\n    // Verify FutureDataIcon appears for Price (USD) and Balance (USD) columns only\n    // Each MPT has 2 FutureDataIcons (price USD, balance USD) = 3 MPTs * 2 icons = 6 total\n    const futureDataIcons = document.querySelectorAll('.future-data')\n    expect(futureDataIcons).toHaveLength(6)\n  })\n})\n"
  },
  {
    "path": "src/containers/Accounts/AccountAsset/test/HeldNFTs.test.tsx",
    "content": "import { render, screen, cleanup, waitFor } from '@testing-library/react'\nimport { I18nextProvider } from 'react-i18next'\nimport { BrowserRouter as Router } from 'react-router'\nimport { QueryClientProvider } from 'react-query'\nimport i18n from '../../../../i18n/testConfigEnglish'\nimport SocketContext from '../../../shared/SocketContext'\nimport { HeldNFTs } from '../assetTables/HeldNFTs'\nimport {\n  getAccountNFTs,\n  getBuyNFToffers,\n  getSellNFToffers,\n} from '../../../../rippled/lib/rippled'\nimport { queryClient } from '../../../shared/QueryClient'\nimport Mock = jest.Mock\n\njest.mock('../../../../rippled/lib/rippled')\njest.mock('../../../../rippled/lib/logger', () => ({\n  __esModule: true,\n  default: () => ({\n    error: jest.fn(),\n    warn: jest.fn(),\n    info: jest.fn(),\n  }),\n}))\n\nconst mockedGetAccountNFTs = getAccountNFTs as Mock\nconst mockedGetBuyNFToffers = getBuyNFToffers as Mock\nconst mockedGetSellNFToffers = getSellNFToffers as Mock\n\n// Mock socket client\nconst mockSocket = {} as any\n\n// Test wrapper component\nconst TestWrapper = ({ children }: { children: React.ReactNode }) => (\n  <I18nextProvider i18n={i18n}>\n    <Router>\n      <SocketContext.Provider value={mockSocket}>\n        <QueryClientProvider client={queryClient}>\n          {children}\n        </QueryClientProvider>\n      </SocketContext.Provider>\n    </Router>\n  </I18nextProvider>\n)\n\n// Mock NFT data\nconst mockNFTsResponse = {\n  account_nfts: [\n    {\n      NFTokenID:\n        '00081388F2C3F5B05AD6C8C0F5C0F5C0F5C0F5C0F5C0F5C0F5C0F5C000000001',\n      Issuer: 'rN7n7otQDd6FczFgLdSqtcsAUxDkw6fzRH',\n      URI: Buffer.from('https://example.com/nft1').toString('hex'),\n      TransferFee: 5000, // 5%\n    },\n    {\n      NFTokenID:\n        '00081388F2C3F5B05AD6C8C0F5C0F5C0F5C0F5C0F5C0F5C0F5C0F5C000000002',\n      Issuer: 'rLNaPoKeeBjZe2qs6x52yVPZpZ8td4dc6w',\n      URI: Buffer.from('https://example.com/nft2').toString('hex'),\n      TransferFee: 10000, // 10%\n    },\n    {\n      NFTokenID:\n        '00081388F2C3F5B05AD6C8C0F5C0F5C0F5C0F5C0F5C0F5C0F5C0F5C000000003',\n      Issuer: 'rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B',\n      URI: '', // No URI\n      TransferFee: 15000, // 15%\n    },\n  ],\n  marker: '',\n}\n\n// Mock offer data (XRP only - in drops, 1 XRP = 1,000,000 drops)\nconst mockSellOffersNFT1 = {\n  offers: [\n    { amount: '5000000' }, // 5 XRP\n    { amount: '6000000' }, // 6 XRP\n  ],\n}\n\nconst mockBuyOffersNFT1 = {\n  offers: [\n    { amount: '4500000' }, // 4.5 XRP\n    { amount: '4000000' }, // 4 XRP\n  ],\n}\n\nconst mockSellOffersNFT2 = {\n  offers: [\n    { amount: '10000000' }, // 10 XRP\n  ],\n}\n\nconst mockBuyOffersNFT2 = {\n  offers: [\n    { amount: '9500000' }, // 9.5 XRP\n  ],\n}\n\n// NFT3 has no offers\nconst mockNoOffers = {\n  offers: [],\n}\n\ndescribe('HeldNFTs', () => {\n  // Helper function to verify all column headers are displayed\n  const verifyColumnHeaders = async () => {\n    await waitFor(() => {\n      expect(screen.getByText('Token ID')).toBeInTheDocument()\n    })\n    expect(screen.getByText('Issuer')).toBeInTheDocument()\n    expect(screen.getByText('URL')).toBeInTheDocument()\n    expect(screen.getByText('Transfer Fee')).toBeInTheDocument()\n    expect(screen.getByText('Lowest Ask')).toBeInTheDocument()\n    expect(screen.getByText('Highest Bid')).toBeInTheDocument()\n  }\n\n  afterEach(() => {\n    cleanup()\n    queryClient.clear()\n  })\n\n  beforeEach(() => {\n    jest.clearAllMocks()\n    mockedGetAccountNFTs.mockResolvedValue(mockNFTsResponse)\n    mockedGetBuyNFToffers.mockImplementation(\n      (_rippledSocket: any, nftId: string) => {\n        if (nftId === mockNFTsResponse.account_nfts[0].NFTokenID) {\n          return Promise.resolve(mockBuyOffersNFT1)\n        }\n        if (nftId === mockNFTsResponse.account_nfts[1].NFTokenID) {\n          return Promise.resolve(mockBuyOffersNFT2)\n        }\n        return Promise.resolve(mockNoOffers)\n      },\n    )\n    mockedGetSellNFToffers.mockImplementation(\n      (_rippledSocket: any, nftId: string) => {\n        if (nftId === mockNFTsResponse.account_nfts[0].NFTokenID) {\n          return Promise.resolve(mockSellOffersNFT1)\n        }\n        if (nftId === mockNFTsResponse.account_nfts[1].NFTokenID) {\n          return Promise.resolve(mockSellOffersNFT2)\n        }\n        return Promise.resolve(mockNoOffers)\n      },\n    )\n  })\n\n  it('renders empty state when no NFTs are held', async () => {\n    mockedGetAccountNFTs.mockResolvedValueOnce({ account_nfts: [] })\n\n    render(\n      <TestWrapper>\n        <HeldNFTs accountId=\"rTest123\" />\n      </TestWrapper>,\n    )\n\n    // Verify all column headers are displayed\n    await verifyColumnHeaders()\n\n    // Check that the empty message is displayed\n    await waitFor(() => {\n      expect(screen.getByText('No NFTs found')).toBeInTheDocument()\n    })\n  })\n\n  it('handles error when getAccountNFTs fails', async () => {\n    mockedGetAccountNFTs.mockRejectedValueOnce(new Error('Network error'))\n\n    render(\n      <TestWrapper>\n        <HeldNFTs accountId=\"rTest123\" />\n      </TestWrapper>,\n    )\n\n    // Verify all column headers are displayed\n    await verifyColumnHeaders()\n\n    // Should show empty state when error occurs\n    await waitFor(() => {\n      expect(screen.getByText('No NFTs found')).toBeInTheDocument()\n    })\n  })\n\n  it('shows 3 held NFTs with all column values', async () => {\n    render(\n      <TestWrapper>\n        <HeldNFTs accountId=\"rTest123\" />\n      </TestWrapper>,\n    )\n\n    // Verify all column headers are displayed\n    await verifyColumnHeaders()\n\n    // Wait for NFTs to load\n    await waitFor(() => {\n      expect(screen.getByText('00081388F2...C000000001')).toBeInTheDocument()\n    })\n\n    // Get all table rows (excluding header)\n    const rows = screen.getAllByRole('row')\n    const dataRows = rows.slice(1) // Skip header row\n\n    // Verify we have 3 NFT rows\n    expect(dataRows).toHaveLength(3)\n\n    // Verify NFT1 data in first row\n    const nft1Row = dataRows[0]\n    expect(nft1Row).toHaveTextContent('00081388F2...C000000001')\n    expect(nft1Row).toHaveTextContent('rN7n7ot...6fzRH')\n    expect(nft1Row).toHaveTextContent('https://example.com/nft1')\n    expect(nft1Row).toHaveTextContent('5%')\n\n    // Verify NFT2 data in second row\n    const nft2Row = dataRows[1]\n    expect(nft2Row).toHaveTextContent('00081388F2...C000000002')\n    expect(nft2Row).toHaveTextContent('rLNaPoK...4dc6w')\n    expect(nft2Row).toHaveTextContent('https://example.com/nft2')\n    expect(nft2Row).toHaveTextContent('10%')\n\n    // Verify NFT3 data in third row\n    const nft3Row = dataRows[2]\n    expect(nft3Row).toHaveTextContent('00081388F2...C000000003')\n    expect(nft3Row).toHaveTextContent('rvYAfWj...bs59B')\n    expect(nft3Row).toHaveTextContent('15%')\n\n    // Verify offer data (async loaded)\n    // XRP symbol is \\uE900, offers are formatted with localizeNumber with currency: 'XRP'\n    await waitFor(() => {\n      expect(nft1Row.textContent).toContain('\\uE9005.00') // Lowest Ask for NFT1\n    })\n    expect(nft1Row.textContent).toContain('\\uE9004.50') // Highest Bid for NFT1\n\n    // NFT2 offers\n    expect(nft2Row.textContent).toContain('\\uE90010.00') // Lowest Ask for NFT2\n    expect(nft2Row.textContent).toContain('\\uE9009.50') // Highest Bid for NFT2\n\n    // NFT3: No offers, should show --\n    const nft3Placeholders = nft3Row.textContent?.match(/--/g) || []\n    expect(nft3Placeholders.length).toBeGreaterThanOrEqual(2) // At least 2: Lowest Ask and Highest Bid (no URL is also --)\n  })\n})\n"
  },
  {
    "path": "src/containers/Accounts/AccountAsset/test/IssuedIOUs.test.tsx",
    "content": "import { render, screen, cleanup, waitFor } from '@testing-library/react'\nimport { I18nextProvider } from 'react-i18next'\nimport { BrowserRouter as Router } from 'react-router'\nimport { QueryClientProvider } from 'react-query'\nimport i18n from '../../../../i18n/testConfigEnglish'\nimport SocketContext from '../../../shared/SocketContext'\nimport { IssuedIOUs } from '../assetTables/IssuedIOUs'\nimport { getBalances } from '../../../../rippled/lib/rippled'\nimport { queryClient } from '../../../shared/QueryClient'\nimport Mock = jest.Mock\n\njest.mock('../../../../rippled/lib/rippled')\njest.mock('../../../../rippled/lib/logger', () => ({\n  __esModule: true,\n  default: () => ({\n    error: jest.fn(),\n    warn: jest.fn(),\n    info: jest.fn(),\n  }),\n}))\n\nglobal.fetch = jest.fn() as jest.Mock\n\nconst mockedGetBalances = getBalances as Mock\nconst mockedFetch = fetch as Mock\n\n// Mock socket client\nconst mockSocket = {} as any\n\n// Test wrapper component\nconst TestWrapper = ({ children }: { children: React.ReactNode }) => (\n  <I18nextProvider i18n={i18n}>\n    <Router>\n      <SocketContext.Provider value={mockSocket}>\n        <QueryClientProvider client={queryClient}>\n          {children}\n        </QueryClientProvider>\n      </SocketContext.Provider>\n    </Router>\n  </I18nextProvider>\n)\n\n// Mock data for issued tokens (obligations)\nconst mockBalancesResponse = {\n  obligations: {\n    USD: '1000000.50',\n    EUR: '500000.25',\n    BTC: '50.001',\n  },\n}\n\n// Mock LOS Token API response for issued tokens\nconst mockLOSTokenResponse = {\n  tokens: [\n    {\n      currency: 'USD',\n      issuer_account: 'rTest123',\n      icon: 'https://example.com/usd-icon.png',\n      price_usd: '1.00',\n      number_of_trustlines: 15000,\n      number_of_holders: 12500,\n      supply: '1000000.50',\n      // Missing asset_class to test placeholder\n    },\n    {\n      currency: 'EUR',\n      issuer_account: 'rTest123',\n      icon: 'https://example.com/eur-icon.png',\n      price_usd: '1.10',\n      number_of_trustlines: 8500,\n      number_of_holders: 7200,\n      supply: '500000.25',\n      asset_class: 'Currency',\n    },\n    {\n      currency: 'BTC',\n      issuer_account: 'rTest123',\n      price_usd: '45000.00',\n      number_of_trustlines: 2500,\n      number_of_holders: 2100,\n      supply: '50.001',\n      asset_class: 'Cryptocurrency',\n    },\n  ],\n}\n\n// Mock account with transfer fee and global freeze\nconst mockAccount = {\n  info: {\n    rate: 1.5, // 1.5% transfer fee\n    flags: ['lsfGlobalFreeze'],\n  },\n}\n\ndescribe('IssuedIOUs', () => {\n  // Helper function to verify all column headers are displayed\n  const verifyColumnHeaders = async () => {\n    await waitFor(() => {\n      expect(screen.getByText('Currency Code')).toBeInTheDocument()\n    })\n    expect(screen.getByText('Price (USD)')).toBeInTheDocument()\n    expect(screen.getByText('Trustlines')).toBeInTheDocument()\n    expect(screen.getByText('Holders')).toBeInTheDocument()\n    expect(screen.getByText('Supply')).toBeInTheDocument()\n    expect(screen.getByText('Asset Class')).toBeInTheDocument()\n    expect(screen.getByText('Transfer Fee')).toBeInTheDocument()\n    expect(screen.getByText('Frozen')).toBeInTheDocument()\n  }\n\n  afterEach(() => {\n    cleanup()\n    queryClient.clear() // Clear React Query cache between tests\n  })\n\n  beforeEach(() => {\n    jest.clearAllMocks()\n    process.env.VITE_LOS_URL = 'https://api.los.example.com'\n\n    mockedGetBalances.mockResolvedValue(mockBalancesResponse)\n    mockedFetch.mockResolvedValue({\n      ok: true,\n      json: () => Promise.resolve(mockLOSTokenResponse),\n    } as Response)\n  })\n\n  it('handles error when getBalances fails', async () => {\n    // Mock getBalances to throw an error\n    mockedGetBalances.mockRejectedValueOnce(new Error('Network error'))\n\n    render(\n      <TestWrapper>\n        <IssuedIOUs accountId=\"rTest123\" account={mockAccount} />\n      </TestWrapper>,\n    )\n\n    // Verify all column headers are displayed\n    await verifyColumnHeaders()\n\n    // Should show empty state when error occurs\n    await waitFor(() => {\n      expect(screen.getByText('No IOUs found')).toBeInTheDocument()\n    })\n  })\n\n  it('renders empty state when no IOUs are issued', async () => {\n    // Override the default mocks to return empty obligations\n    mockedGetBalances.mockResolvedValueOnce({ obligations: {} })\n\n    render(\n      <TestWrapper>\n        <IssuedIOUs accountId=\"rTest123\" account={mockAccount} />\n      </TestWrapper>,\n    )\n\n    // Verify all column headers are displayed\n    await verifyColumnHeaders()\n\n    // Check that the empty message is displayed (this is the translated text)\n    await waitFor(() => {\n      expect(screen.getByText('No IOUs found')).toBeInTheDocument()\n    })\n  })\n\n  it('shows 3 issued tokens with all column values', async () => {\n    render(\n      <TestWrapper>\n        <IssuedIOUs accountId=\"rTest123\" account={mockAccount} />\n      </TestWrapper>,\n    )\n\n    // Verify all column headers are displayed\n    await verifyColumnHeaders()\n\n    // Wait for tokens to load\n    await waitFor(() => {\n      expect(screen.getByText('BTC')).toBeInTheDocument()\n    })\n\n    // Get all table rows (excluding header)\n    const rows = screen.getAllByRole('row')\n    const dataRows = rows.slice(1) // Skip header row\n\n    // Verify we have 3 token rows (sorted by Price USD descending)\n    expect(dataRows).toHaveLength(3)\n\n    // Verify BTC token data in first row (highest price: $45,000.00)\n    const btcRow = dataRows[0]\n    expect(btcRow).toHaveTextContent('BTC')\n    expect(btcRow).toHaveTextContent('$45,000.00') // price\n    expect(btcRow).toHaveTextContent('2,500') // trustlines\n    expect(btcRow).toHaveTextContent('2,100') // holders\n    expect(btcRow).toHaveTextContent('50.001') // supply\n    expect(btcRow).toHaveTextContent('Cryptocurrency') // asset class\n    expect(btcRow).toHaveTextContent('1.5%') // transfer fee\n    expect(btcRow).toHaveTextContent('Global') // frozen\n\n    // Verify EUR token data in second row (second highest: $1.10)\n    const eurRow = dataRows[1]\n    expect(eurRow).toHaveTextContent('EUR')\n    expect(eurRow).toHaveTextContent('$1.10') // price\n    expect(eurRow).toHaveTextContent('8,500') // trustlines\n    expect(eurRow).toHaveTextContent('7,200') // holders\n    expect(eurRow).toHaveTextContent('500,000.25') // supply\n    expect(eurRow).toHaveTextContent('Currency') // asset class\n    expect(eurRow).toHaveTextContent('1.5%') // transfer fee\n    expect(eurRow).toHaveTextContent('Global') // frozen\n\n    // Verify USD token data in third row (lowest price: $1.00)\n    const usdRow = dataRows[2]\n    expect(usdRow).toHaveTextContent('USD')\n    expect(usdRow).toHaveTextContent('$1.00') // price\n    expect(usdRow).toHaveTextContent('15,000') // trustlines\n    expect(usdRow).toHaveTextContent('12,500') // holders\n    expect(usdRow).toHaveTextContent('1,000,000.5') // supply\n    expect(usdRow).toHaveTextContent('--') // asset class\n    expect(usdRow).toHaveTextContent('1.5%') // transfer fee\n    expect(usdRow).toHaveTextContent('Global') // frozen\n  })\n})\n"
  },
  {
    "path": "src/containers/Accounts/AccountAsset/test/IssuedMPTs.test.tsx",
    "content": "import { render, screen, cleanup, waitFor } from '@testing-library/react'\nimport { I18nextProvider } from 'react-i18next'\nimport { BrowserRouter as Router } from 'react-router'\nimport { QueryClientProvider } from 'react-query'\nimport i18n from '../../../../i18n/testConfigEnglish'\nimport SocketContext from '../../../shared/SocketContext'\nimport { IssuedMPTs } from '../assetTables/IssuedMPTs'\nimport { getAccountObjects } from '../../../../rippled/lib/rippled'\nimport { queryClient } from '../../../shared/QueryClient'\nimport Mock = jest.Mock\n\njest.mock('../../../../rippled/lib/rippled')\njest.mock('../../../../rippled/lib/logger', () => ({\n  __esModule: true,\n  default: () => ({\n    error: jest.fn(),\n    warn: jest.fn(),\n    info: jest.fn(),\n  }),\n}))\n\nconst mockedGetAccountObjects = getAccountObjects as Mock\n\n// Mock socket client\nconst mockSocket = {} as any\n\n// Test wrapper component\nconst TestWrapper = ({ children }: { children: React.ReactNode }) => (\n  <I18nextProvider i18n={i18n}>\n    <Router>\n      <SocketContext.Provider value={mockSocket}>\n        <QueryClientProvider client={queryClient}>\n          {children}\n        </QueryClientProvider>\n      </SocketContext.Provider>\n    </Router>\n  </I18nextProvider>\n)\n\nconst mockMPTIssuancesResponse = {\n  account_objects: [\n    {\n      mpt_issuance_id: '000004C463C52827307480341125DA65C267105D00000001',\n      OutstandingAmount: '1000000',\n      TransferFee: 5000,\n      Flags: 0,\n      AssetScale: 2,\n      // Hex-encoded JSON: {\"ticker\":\"USD\",\"issuer_name\":\"Gatehub\",\"asset_class\":\"other\",\"name\":\"USD Token\",\"icon\":\"https://example.com/usd.png\"}\n      MPTokenMetadata:\n        '7B227469636B6572223A22555344222C22697373756572' +\n        '5F6E616D65223A22476174656875622' +\n        '22C2261737365745F636C617373223A226F74686572222C226E616D65223A22555344' +\n        '20546F6B656E222C2269636F6E223A2268747470733A2F2F6578616D706C652E636F6D2F7573642E706E67227D',\n    },\n    {\n      mpt_issuance_id: '000004C463C52827307480341125DA65C267105D00000002',\n      OutstandingAmount: '500000',\n      TransferFee: 10000,\n      Flags: 1, // lsfMPTLocked\n      AssetScale: 0,\n      // Hex-encoded JSON: {\"ticker\":\"EUR\",\"issuer_name\":\"Bitstamp\",\"asset_class\":\"other\",\"name\":\"EUR Token\",\"icon\":\"https://example.com/eur.png\"}\n      MPTokenMetadata:\n        '7B227469636B6572223A22455552222C22697373756572' +\n        '5F6E616D65223A2242697473' +\n        '74616D70222C2261737365745F636C617373223A226F74686572222C226E616D65223A22455552' +\n        '20546F6B656E222C2269636F6E223A2268747470733A2F2F6578616D706C652E636F6D2F6575722E706E67227D',\n    },\n    {\n      mpt_issuance_id: '000004C463C52827307480341125DA65C267105D00000003',\n      OutstandingAmount: '250000',\n      TransferFee: 15000,\n      Flags: 0,\n      AssetScale: 0,\n      // Hex-encoded JSON: {\"ticker\":\"BTC\",\"issuer_name\":\"Kraken\",\"asset_class\":\"other\",\"name\":\"BTC Token\",\"icon\":\"https://example.com/btc.png\"}\n      MPTokenMetadata:\n        '7B227469636B6572223A22425443222C22697373756572' +\n        '5F6E616D65223A224B72616B' +\n        '656E222C2261737365745F636C617373223A226F74686572222C226E616D65223A22425443' +\n        '20546F6B656E222C2269636F6E223A2268747470733A2F2F6578616D706C652E636F6D2F6274632E706E67227D',\n    },\n  ],\n  marker: '',\n}\n\ndescribe('IssuedMPTs', () => {\n  // Helper function to verify all column headers are displayed\n  const verifyColumnHeaders = async () => {\n    await waitFor(() => {\n      expect(screen.getByText('Token ID')).toBeInTheDocument()\n    })\n    expect(screen.getByText('Ticker')).toBeInTheDocument()\n    expect(screen.getByText('Price (USD)')).toBeInTheDocument()\n    expect(screen.getByText('Circ Supply')).toBeInTheDocument()\n    expect(screen.getByText('Asset Class')).toBeInTheDocument()\n    expect(screen.getByText('Transfer Fee')).toBeInTheDocument()\n    expect(screen.getByText('Locked')).toBeInTheDocument()\n  }\n\n  afterEach(() => {\n    cleanup()\n    queryClient.clear()\n  })\n\n  beforeEach(() => {\n    jest.clearAllMocks()\n    mockedGetAccountObjects.mockResolvedValue(mockMPTIssuancesResponse)\n  })\n\n  it('renders empty state when no MPTs are issued', async () => {\n    mockedGetAccountObjects.mockResolvedValueOnce({ account_objects: [] })\n\n    render(\n      <TestWrapper>\n        <IssuedMPTs accountId=\"rTest123\" />\n      </TestWrapper>,\n    )\n\n    // Verify all column headers are displayed\n    await verifyColumnHeaders()\n\n    // Check that the empty message is displayed\n    await waitFor(() => {\n      expect(screen.getByText('No MPTs found')).toBeInTheDocument()\n    })\n  })\n\n  it('handles error when getAccountObjects fails', async () => {\n    mockedGetAccountObjects.mockRejectedValueOnce(new Error('Network error'))\n\n    render(\n      <TestWrapper>\n        <IssuedMPTs accountId=\"rTest123\" />\n      </TestWrapper>,\n    )\n\n    // Verify all column headers are displayed\n    await verifyColumnHeaders()\n\n    // Should show empty state when error occurs\n    await waitFor(() => {\n      expect(screen.getByText('No MPTs found')).toBeInTheDocument()\n    })\n  })\n\n  it('shows 3 issued MPTs with all column values', async () => {\n    render(\n      <TestWrapper>\n        <IssuedMPTs accountId=\"rTest123\" />\n      </TestWrapper>,\n    )\n\n    // Verify all column headers are displayed\n    await verifyColumnHeaders()\n\n    // Wait for MPTs to load\n    await waitFor(() => {\n      expect(screen.getByText('000004C463...5D00000001')).toBeInTheDocument()\n    })\n\n    // Get all table rows (excluding header)\n    const rows = screen.getAllByRole('row')\n    const dataRows = rows.slice(1) // Skip header row\n\n    // Verify we have 3 MPT rows\n    expect(dataRows).toHaveLength(3)\n\n    // Verify USD MPT data in first row\n    const usdRow = dataRows[0]\n    expect(usdRow).toHaveTextContent('000004C463...5D00000001')\n    expect(usdRow).toHaveTextContent('USD') // ticker\n    expect(usdRow).toHaveTextContent('10.0K') // supply (formatted with parseAmount)\n    expect(usdRow).toHaveTextContent('OTHER') // asset class (uppercase)\n    expect(usdRow).toHaveTextContent('5%') // transfer fee\n    expect(usdRow).toHaveTextContent('--') // not locked\n\n    // Verify EUR MPT data in second row\n    const eurRow = dataRows[1]\n    expect(eurRow).toHaveTextContent('000004C463...5D00000002')\n    expect(eurRow).toHaveTextContent('EUR') // ticker\n    expect(eurRow).toHaveTextContent('500.0K') // supply (formatted with parseAmount)\n    expect(eurRow).toHaveTextContent('OTHER') // asset class (uppercase)\n    expect(eurRow).toHaveTextContent('10%') // transfer fee\n    expect(eurRow).toHaveTextContent('Global') // locked\n\n    // Verify BTC MPT data in third row\n    const btcRow = dataRows[2]\n    expect(btcRow).toHaveTextContent('000004C463...5D00000003')\n    expect(btcRow).toHaveTextContent('BTC') // ticker\n    expect(btcRow).toHaveTextContent('250.0K') // supply (formatted with parseAmount)\n    expect(btcRow).toHaveTextContent('OTHER') // asset class (uppercase)\n    expect(btcRow).toHaveTextContent('15%') // transfer fee\n    expect(btcRow).toHaveTextContent('--') // not locked\n\n    // Verify FutureDataIcon appears for Price (USD) column only\n    // Each MPT has 1 FutureDataIcon (price USD) = 3 MPTs * 1 icon = 3 total\n    const futureDataIcons = document.querySelectorAll('.future-data')\n    expect(futureDataIcons).toHaveLength(3)\n  })\n})\n"
  },
  {
    "path": "src/containers/Accounts/AccountAsset/test/IssuedNFTs.test.tsx",
    "content": "import { render, screen, cleanup, waitFor } from '@testing-library/react'\nimport { I18nextProvider } from 'react-i18next'\nimport { BrowserRouter as Router } from 'react-router'\nimport { QueryClientProvider } from 'react-query'\nimport i18n from '../../../../i18n/testConfigEnglish'\nimport SocketContext from '../../../shared/SocketContext'\nimport { IssuedNFTs } from '../assetTables/IssuedNFTs'\nimport {\n  getNFTsIssuedByAccount,\n  getBuyNFToffers,\n  getSellNFToffers,\n} from '../../../../rippled/lib/rippled'\nimport { queryClient } from '../../../shared/QueryClient'\nimport Mock = jest.Mock\n\njest.mock('../../../../rippled/lib/rippled')\njest.mock('../../../../rippled/lib/logger', () => ({\n  __esModule: true,\n  default: () => ({\n    error: jest.fn(),\n    warn: jest.fn(),\n    info: jest.fn(),\n  }),\n}))\n\nconst mockedGetNFTsIssuedByAccount = getNFTsIssuedByAccount as Mock\nconst mockedGetBuyNFToffers = getBuyNFToffers as Mock\nconst mockedGetSellNFToffers = getSellNFToffers as Mock\n\n// Mock socket client\nconst mockSocket = {} as any\n\n// Test wrapper component\nconst TestWrapper = ({ children }: { children: React.ReactNode }) => (\n  <I18nextProvider i18n={i18n}>\n    <Router>\n      <SocketContext.Provider value={mockSocket}>\n        <QueryClientProvider client={queryClient}>\n          {children}\n        </QueryClientProvider>\n      </SocketContext.Provider>\n    </Router>\n  </I18nextProvider>\n)\n\n// Mock NFT data\nconst mockIssuedNFTsResponse = {\n  nfts: [\n    {\n      nft_id:\n        '00081388F2C3F5B05AD6C8C0F5C0F5C0F5C0F5C0F5C0F5C0F5C0F5C000000001',\n      uri: Buffer.from('https://example.com/issued-nft1').toString('hex'),\n      transfer_fee: 2500, // 2.5%\n    },\n    {\n      nft_id:\n        '00081388F2C3F5B05AD6C8C0F5C0F5C0F5C0F5C0F5C0F5C0F5C0F5C000000002',\n      uri: Buffer.from('https://example.com/issued-nft2').toString('hex'),\n      transfer_fee: 7500, // 7.5%\n    },\n    {\n      nft_id:\n        '00081388F2C3F5B05AD6C8C0F5C0F5C0F5C0F5C0F5C0F5C0F5C0F5C000000003',\n      uri: '', // No URI\n      transfer_fee: 12500, // 12.5%\n    },\n  ],\n  marker: '',\n}\n\n// Mock offer data (XRP only - in drops, 1 XRP = 1,000,000 drops)\nconst mockSellOffersNFT1 = {\n  offers: [\n    { amount: '3000000' }, // 3 XRP\n    { amount: '3500000' }, // 3.5 XRP\n  ],\n}\n\nconst mockBuyOffersNFT1 = {\n  offers: [\n    { amount: '2800000' }, // 2.8 XRP\n    { amount: '2500000' }, // 2.5 XRP\n  ],\n}\n\nconst mockSellOffersNFT2 = {\n  offers: [\n    { amount: '8000000' }, // 8 XRP\n  ],\n}\n\nconst mockBuyOffersNFT2 = {\n  offers: [\n    { amount: '7500000' }, // 7.5 XRP\n  ],\n}\n\n// NFT3 has no offers\nconst mockNoOffers = {\n  offers: [],\n}\n\ndescribe('IssuedNFTs', () => {\n  // Helper function to verify all column headers are displayed\n  const verifyColumnHeaders = async () => {\n    await waitFor(() => {\n      expect(screen.getByText('Token ID')).toBeInTheDocument()\n    })\n    expect(screen.getByText('URL')).toBeInTheDocument()\n    expect(screen.getByText('Transfer Fee')).toBeInTheDocument()\n    expect(screen.getByText('Lowest Ask')).toBeInTheDocument()\n    expect(screen.getByText('Highest Bid')).toBeInTheDocument()\n  }\n\n  afterEach(() => {\n    cleanup()\n    queryClient.clear()\n  })\n\n  beforeEach(() => {\n    jest.clearAllMocks()\n    mockedGetNFTsIssuedByAccount.mockResolvedValue(mockIssuedNFTsResponse)\n    mockedGetBuyNFToffers.mockImplementation(\n      (_rippledSocket: any, nftId: string) => {\n        if (nftId === mockIssuedNFTsResponse.nfts[0].nft_id) {\n          return Promise.resolve(mockBuyOffersNFT1)\n        }\n        if (nftId === mockIssuedNFTsResponse.nfts[1].nft_id) {\n          return Promise.resolve(mockBuyOffersNFT2)\n        }\n        return Promise.resolve(mockNoOffers)\n      },\n    )\n    mockedGetSellNFToffers.mockImplementation(\n      (_rippledSocket: any, nftId: string) => {\n        if (nftId === mockIssuedNFTsResponse.nfts[0].nft_id) {\n          return Promise.resolve(mockSellOffersNFT1)\n        }\n        if (nftId === mockIssuedNFTsResponse.nfts[1].nft_id) {\n          return Promise.resolve(mockSellOffersNFT2)\n        }\n        return Promise.resolve(mockNoOffers)\n      },\n    )\n  })\n\n  it('renders empty state when no NFTs are issued', async () => {\n    mockedGetNFTsIssuedByAccount.mockResolvedValueOnce({ nfts: [] })\n\n    render(\n      <TestWrapper>\n        <IssuedNFTs accountId=\"rTest123\" />\n      </TestWrapper>,\n    )\n\n    // Verify all column headers are displayed (no Issuer column for issued NFTs)\n    await verifyColumnHeaders()\n\n    // Check that the empty message is displayed\n    await waitFor(() => {\n      expect(screen.getByText('No NFTs found')).toBeInTheDocument()\n    })\n  })\n\n  it('handles error when getNFTsIssuedByAccount fails', async () => {\n    mockedGetNFTsIssuedByAccount.mockRejectedValueOnce(\n      new Error('Network error'),\n    )\n\n    render(\n      <TestWrapper>\n        <IssuedNFTs accountId=\"rTest123\" />\n      </TestWrapper>,\n    )\n\n    // Verify all column headers are displayed\n    await verifyColumnHeaders()\n\n    // Should show empty state when error occurs\n    await waitFor(() => {\n      expect(screen.getByText('No NFTs found')).toBeInTheDocument()\n    })\n  })\n\n  it('shows 3 issued NFTs with all column values', async () => {\n    render(\n      <TestWrapper>\n        <IssuedNFTs accountId=\"rTest123\" />\n      </TestWrapper>,\n    )\n\n    // Verify all column headers are displayed\n    await verifyColumnHeaders()\n\n    // Verify \"Issuer\" column is NOT displayed for issued NFTs (showIssuer=false)\n    expect(screen.queryByText('Issuer')).not.toBeInTheDocument()\n\n    // Wait for NFTs to load\n    await waitFor(() => {\n      expect(screen.getByText('00081388F2...C000000001')).toBeInTheDocument()\n    })\n\n    // Get all table rows (excluding header)\n    const rows = screen.getAllByRole('row')\n    const dataRows = rows.slice(1) // Skip header row\n\n    // Verify we have 3 NFT rows\n    expect(dataRows).toHaveLength(3)\n\n    // Verify NFT1 data in first row\n    const nft1Row = dataRows[0]\n    expect(nft1Row).toHaveTextContent('00081388F2...C000000001')\n    expect(nft1Row).toHaveTextContent('https://example...issued-nft1')\n    expect(nft1Row).toHaveTextContent('2.5%')\n\n    // Verify NFT2 data in second row\n    const nft2Row = dataRows[1]\n    expect(nft2Row).toHaveTextContent('00081388F2...C000000002')\n    expect(nft2Row).toHaveTextContent('https://example...issued-nft2')\n    expect(nft2Row).toHaveTextContent('7.5%')\n\n    // Verify NFT3 data in third row\n    const nft3Row = dataRows[2]\n    expect(nft3Row).toHaveTextContent('00081388F2...C000000003')\n    expect(nft3Row).toHaveTextContent('12.5%')\n\n    // Verify offer data (async loaded)\n    // XRP symbol is \\uE900, offers are formatted with localizeNumber with currency: 'XRP'\n    await waitFor(() => {\n      expect(nft1Row.textContent).toContain('\\uE9003.00') // Lowest Ask for NFT1\n    })\n    expect(nft1Row.textContent).toContain('\\uE9002.80') // Highest Bid for NFT1\n\n    // NFT2 offers\n    expect(nft2Row.textContent).toContain('\\uE9008.00') // Lowest Ask for NFT2\n    expect(nft2Row.textContent).toContain('\\uE9007.50') // Highest Bid for NFT2\n\n    // NFT3: No offers, should show --\n    const nft3Placeholders = nft3Row.textContent?.match(/--/g) || []\n    expect(nft3Placeholders.length).toBeGreaterThanOrEqual(2) // At least 2: Lowest Ask and Highest Bid (no URL is also --)\n  })\n})\n"
  },
  {
    "path": "src/containers/Accounts/AccountHeader/index.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport InfoIcon from '../../shared/images/info-duotone.svg'\nimport DomainLink from '../../shared/components/DomainLink'\nimport './styles.scss'\nimport { Account } from '../../shared/components/Account'\n\ninterface AccountHeaderProps {\n  isAccountDeleted: boolean\n  accountId: string\n  account?: any\n}\n\nconst AccountHeader = ({\n  isAccountDeleted,\n  accountId,\n  account,\n}: AccountHeaderProps) => {\n  const { t } = useTranslation()\n  const xAddress = account?.xAddress\n\n  return (\n    <div className=\"account-header\">\n      {isAccountDeleted && (\n        <div className=\"deleted-banner\">\n          <div className=\"deleted-label\">\n            <InfoIcon className=\"deleted-info-icon\" aria-hidden=\"true\" />\n            {t('account_page_deleted_account_label')}\n          </div>\n          <div className=\"deleted-message\">\n            {t('account_page_deleted_account_warning')}\n          </div>\n        </div>\n      )}\n\n      <div className=\"address-panel\">\n        <div className=\"address-label\">\n          {xAddress\n            ? t('account_page_extended_address')\n            : t('account_page_address')}\n        </div>\n        <div className=\"address-value\" title={accountId}>\n          {accountId}\n        </div>\n        {xAddress?.classicAddress && (\n          <div className=\"classic-address\">\n            <div className=\"classic-address-label\">\n              {t('account_page_classic_address')}:\n            </div>\n            <Account account={xAddress.classicAddress} />\n          </div>\n        )}\n        {xAddress?.tag && (\n          <div className=\"address-tag\">\n            <div className=\"address-tag-label\">\n              {t('account_page_address_tag')}:\n            </div>\n            <div className=\"address-tag-value\">{xAddress.tag}</div>\n          </div>\n        )}\n        {account?.info?.domain && (\n          <div className=\"domain\">\n            <div className=\"domain-label\">{t('account_page_domain')}:</div>\n            <DomainLink domain={account.info.domain} />\n          </div>\n        )}\n      </div>\n    </div>\n  )\n}\n\nexport default AccountHeader\n"
  },
  {
    "path": "src/containers/Accounts/AccountHeader/styles.scss",
    "content": "@use '../../shared/css/variables' as *;\n\n.account-header {\n  padding: 50px 0 30px;\n\n  .deleted-banner {\n    display: flex;\n    flex-direction: column;\n    padding: 25px;\n    border: 1px solid $orange-50;\n    border-radius: 8px;\n    margin-bottom: 30px;\n    background: $black-90;\n    gap: 12px;\n\n    .deleted-label {\n      display: flex;\n      max-width: 180px;\n      align-items: center;\n      padding: 3px 12px;\n      border: 1px solid $orange-50;\n      border-radius: 100px;\n      margin-bottom: 8px;\n      background: $orange-80;\n      color: $black-0;\n      font-size: 12px;\n      @include semibold;\n\n      gap: 10px;\n      text-transform: uppercase;\n\n      .deleted-info-icon {\n        width: 16px;\n        height: 16px;\n        margin-right: 3px;\n      }\n    }\n\n    .deleted-message {\n      margin: 0;\n      color: $black-0;\n      font-size: 16px;\n    }\n  }\n\n  .address-panel {\n    display: flex;\n    height: auto;\n    box-sizing: border-box;\n    flex: none;\n    flex-direction: column;\n    flex-grow: 0;\n    align-items: flex-start;\n    align-self: stretch;\n    order: 0;\n    padding: 25px;\n    border: 1px solid $black-70;\n    border-radius: 8px;\n    background: $black-90;\n    gap: 10px;\n\n    .address-label {\n      color: $black-40;\n      font-size: 14px;\n      @include semibold;\n\n      line-height: 1;\n      text-transform: uppercase;\n    }\n\n    .address-value {\n      display: inline-flex;\n      align-items: center;\n      color: $black-0;\n      font-size: 24px;\n      @include bold;\n\n      line-height: 1;\n      word-break: break-all;\n    }\n\n    .domain {\n      display: flex;\n\n      .domain-label {\n        margin-right: 8px;\n        color: $black-40;\n        font-size: 14px;\n        line-height: 1;\n      }\n\n      a {\n        font-size: 14px;\n        line-height: 1;\n        word-break: break-all;\n      }\n    }\n\n    .classic-address {\n      display: flex;\n\n      .classic-address-label {\n        margin-right: 8px;\n        color: $black-40;\n        font-size: 14px;\n        line-height: 1;\n      }\n\n      a {\n        font-size: 14px;\n        line-height: 1;\n        word-break: break-all;\n      }\n    }\n\n    .address-tag {\n      display: flex;\n\n      .address-tag-label {\n        margin-right: 8px;\n        color: $black-40;\n        font-size: 14px;\n        line-height: 1;\n      }\n\n      .address-tag-value {\n        color: $black-0;\n        font-size: 14px;\n        line-height: 1;\n        word-break: break-all;\n      }\n    }\n  }\n\n  .info-container {\n    display: flex;\n    flex-direction: column;\n    justify-content: space-between;\n    margin-top: 68px;\n\n    @include for-size(desktop-up) {\n      flex-direction: row;\n      margin-top: 80px;\n    }\n\n    .values {\n      display: flex;\n      flex-direction: row;\n      justify-content: space-between;\n      margin-bottom: 18px;\n      color: $white;\n\n      @include for-size(desktop-up) {\n        flex-direction: column;\n        margin-bottom: 0;\n      }\n\n      .title {\n        padding-bottom: 4px;\n        margin-bottom: 4.5px;\n        color: $black-40;\n        font-size: 14px;\n        text-transform: uppercase;\n        @include semibold;\n      }\n\n      .value {\n        color: $white;\n        font-size: 18px;\n        line-height: 22.5px;\n        text-decoration: none;\n        @include bold;\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "src/containers/Accounts/AccountHeader/test/AccountHeader.test.tsx",
    "content": "import { render, screen } from '@testing-library/react'\nimport { I18nextProvider } from 'react-i18next'\nimport { BrowserRouter as Router } from 'react-router'\nimport i18n from '../../../../i18n/testConfigEnglish'\nimport AccountHeader from '../index'\n\n// Mock the DomainLink component\njest.mock('../../../shared/components/DomainLink', () => ({\n  __esModule: true,\n  default: ({ domain }: { domain: string }) => (\n    <a href={`http://${domain}`} data-testid=\"domain-link\">\n      {domain}\n    </a>\n  ),\n}))\n\n// Mock the Account component\njest.mock('../../../shared/components/Account', () => ({\n  Account: ({ account }: { account: string }) => (\n    <span data-testid=\"classic-address\">{account}</span>\n  ),\n}))\n\n// Mock the SVG import\njest.mock('../../../shared/images/info-duotone.svg', () => ({\n  __esModule: true,\n  default: ({ className }: { className?: string }) => (\n    <svg data-testid=\"info-icon\" className={className} />\n  ),\n}))\n\n// Test wrapper component\nconst TestWrapper = ({ children }: { children: React.ReactNode }) => (\n  <I18nextProvider i18n={i18n}>\n    <Router>{children}</Router>\n  </I18nextProvider>\n)\n\ndescribe('AccountHeader', () => {\n  const mockAccountId = 'rN7n7otQDd6FczFgLdSqtcsAUxDkw6fzRH'\n\n  describe('Basic rendering', () => {\n    it('renders regular account address', () => {\n      render(\n        <TestWrapper>\n          <AccountHeader isAccountDeleted={false} accountId={mockAccountId} />\n        </TestWrapper>,\n      )\n\n      expect(screen.getByText('Address')).toBeInTheDocument()\n      expect(screen.getByText(mockAccountId)).toBeInTheDocument()\n      // No deleted banner\n      expect(screen.queryByTestId('info-icon')).not.toBeInTheDocument()\n      expect(screen.queryByText('Account Deleted')).not.toBeInTheDocument()\n    })\n  })\n\n  describe('Deleted account banner', () => {\n    it('shows deleted banner when account is deleted', () => {\n      render(\n        <TestWrapper>\n          <AccountHeader isAccountDeleted accountId={mockAccountId} />\n        </TestWrapper>,\n      )\n\n      expect(screen.getByTestId('info-icon')).toBeInTheDocument()\n      expect(screen.getByText('Account Deleted')).toBeInTheDocument()\n      expect(\n        screen.getByText(\n          'This account has been deleted from the XRP Ledger. Historical data is shown for reference only.',\n        ),\n      ).toBeInTheDocument()\n    })\n  })\n\n  describe('X-Address support', () => {\n    it('renders extended address label when xAddress is provided', () => {\n      const mockAccount = {\n        xAddress: {\n          classicAddress: 'rN7n7otQDd6FczFgLdSqtcsAUxDkw6fzRH',\n          tag: 12345,\n        },\n      }\n\n      render(\n        <TestWrapper>\n          <AccountHeader\n            isAccountDeleted={false}\n            accountId=\"X7AcgcsBL6XDcUb289X4mJ8djcdyKaB5hJDWMArnXr61cqZ\"\n            account={mockAccount}\n          />\n        </TestWrapper>,\n      )\n\n      expect(\n        screen.getByText('Extended Address (X-Address)'),\n      ).toBeInTheDocument()\n      expect(\n        screen.getByText('X7AcgcsBL6XDcUb289X4mJ8djcdyKaB5hJDWMArnXr61cqZ'),\n      ).toBeInTheDocument()\n\n      // Classic address and tag should also be shown\n      expect(screen.getByText('Classic Address:')).toBeInTheDocument()\n      expect(screen.getByTestId('classic-address')).toBeInTheDocument()\n      expect(\n        screen.getByText('rN7n7otQDd6FczFgLdSqtcsAUxDkw6fzRH'),\n      ).toBeInTheDocument()\n\n      expect(screen.getByText('Tag:')).toBeInTheDocument()\n      expect(screen.getByText('12345')).toBeInTheDocument()\n    })\n\n    it('does not render classic address when xAddress classicAddress is missing', () => {\n      const mockAccount = {\n        xAddress: {\n          tag: 12345,\n        },\n      }\n\n      render(\n        <TestWrapper>\n          <AccountHeader\n            isAccountDeleted={false}\n            accountId=\"X7AcgcsBL6XDcUb289X4mJ8djcdyKaB5hJDWMArnXr61cqZ\"\n            account={mockAccount}\n          />\n        </TestWrapper>,\n      )\n\n      expect(screen.queryByText('Classic Address:')).not.toBeInTheDocument()\n    })\n\n    it('does not render address tag when xAddress tag is missing', () => {\n      const mockAccount = {\n        xAddress: {\n          classicAddress: 'rN7n7otQDd6FczFgLdSqtcsAUxDkw6fzRH',\n        },\n      }\n\n      render(\n        <TestWrapper>\n          <AccountHeader\n            isAccountDeleted={false}\n            accountId=\"X7AcgcsBL6XDcUb289X4mJ8djcdyKaB5hJDWMArnXr61cqZ\"\n            account={mockAccount}\n          />\n        </TestWrapper>,\n      )\n\n      expect(screen.queryByText('Tag:')).not.toBeInTheDocument()\n    })\n  })\n\n  describe('Domain display', () => {\n    it('renders domain when account info has domain', () => {\n      const mockAccount = {\n        info: {\n          domain: 'ripple.com',\n        },\n      }\n\n      render(\n        <TestWrapper>\n          <AccountHeader\n            isAccountDeleted={false}\n            accountId={mockAccountId}\n            account={mockAccount}\n          />\n        </TestWrapper>,\n      )\n\n      expect(screen.getByText('Domain:')).toBeInTheDocument()\n      expect(screen.getByTestId('domain-link')).toBeInTheDocument()\n      expect(screen.getByText('ripple.com')).toBeInTheDocument()\n    })\n\n    it('does not render domain when account info is missing', () => {\n      render(\n        <TestWrapper>\n          <AccountHeader isAccountDeleted={false} accountId={mockAccountId} />\n        </TestWrapper>,\n      )\n\n      expect(screen.queryByText('Domain:')).not.toBeInTheDocument()\n      expect(screen.queryByTestId('domain-link')).not.toBeInTheDocument()\n    })\n\n    it('does not render domain when domain field is missing', () => {\n      const mockAccount = {\n        info: {},\n      }\n\n      render(\n        <TestWrapper>\n          <AccountHeader\n            isAccountDeleted={false}\n            accountId={mockAccountId}\n            account={mockAccount}\n          />\n        </TestWrapper>,\n      )\n\n      expect(screen.queryByText('Domain:')).not.toBeInTheDocument()\n      expect(screen.queryByTestId('domain-link')).not.toBeInTheDocument()\n    })\n\n    it('renders with all optional fields missing', () => {\n      render(\n        <TestWrapper>\n          <AccountHeader isAccountDeleted={false} accountId={mockAccountId} />\n        </TestWrapper>,\n      )\n\n      // Only address should be shown\n      expect(screen.getByText('Address')).toBeInTheDocument()\n      expect(screen.getByText(mockAccountId)).toBeInTheDocument()\n\n      // No optional fields\n      expect(screen.queryByText(/Classic Address/)).not.toBeInTheDocument()\n      expect(screen.queryByText(/Tag/)).not.toBeInTheDocument()\n      expect(screen.queryByText(/Domain/)).not.toBeInTheDocument()\n      expect(screen.queryByText('Account Deleted')).not.toBeInTheDocument()\n    })\n  })\n\n  describe('Address title attribute', () => {\n    it('sets title attribute on address value for tooltip', () => {\n      render(\n        <TestWrapper>\n          <AccountHeader isAccountDeleted={false} accountId={mockAccountId} />\n        </TestWrapper>,\n      )\n\n      const addressValue = screen.getByTitle(mockAccountId)\n      expect(addressValue).toBeInTheDocument()\n      expect(addressValue).toHaveTextContent(mockAccountId)\n    })\n  })\n})\n"
  },
  {
    "path": "src/containers/Accounts/AccountSummary/Balances.tsx",
    "content": "import { useMemo } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { useLanguage } from '../../shared/hooks'\nimport { localizeNumber } from '../../shared/utils'\nimport { XRP_BASE } from '../../shared/transactionUtils'\nimport UsdIcon from '../../shared/images/usd_icon.svg'\nimport XrpIcon from '../../shared/images/xrp_balance_icon.svg'\nimport ReserveIcon from '../../shared/images/xrp_reserve_balance_icon.svg'\nimport {\n  XRP_CURRENCY_OPTIONS,\n  USD_CURRENCY_OPTIONS,\n} from '../../shared/NumberFormattingUtils'\n\ninterface BalancesProps {\n  account: any\n  xrpToUSDRate: number\n}\n\nconst Balances = ({ account, xrpToUSDRate }: BalancesProps) => {\n  const { t } = useTranslation()\n  const lang = useLanguage()\n  const { xrpBalance, xrpBalanceInUSD } = useMemo(() => {\n    const balance = (account.info?.balance ?? 0) / XRP_BASE\n    return {\n      xrpBalance: balance,\n      xrpBalanceInUSD: balance * xrpToUSDRate,\n    }\n  }, [account.info?.balance, xrpToUSDRate])\n\n  return (\n    <div className=\"balances\">\n      <div className=\"balance-card card xrp\">\n        <div className=\"balance-title\">\n          {typeof XrpIcon === 'string' ? (\n            <img src={XrpIcon} alt=\"XRP\" className=\"balance-icon\" />\n          ) : (\n            <XrpIcon className=\"balance-icon\" />\n          )}\n          {t('account_page_xrp_balance')}\n        </div>\n        <div className=\"balance-value\">\n          {localizeNumber(xrpBalance, lang, XRP_CURRENCY_OPTIONS)}\n        </div>\n      </div>\n      <div className=\"balance-card card usd\">\n        <div className=\"balance-title\">\n          <UsdIcon className=\"balance-icon\" />\n          {t('account_page_xrp_balance_in_usd')}\n        </div>\n        <div className=\"balance-value\">\n          {localizeNumber(xrpBalanceInUSD, lang, USD_CURRENCY_OPTIONS)}\n        </div>\n      </div>\n      <div className=\"balance-card card reserve\">\n        <div className=\"balance-title\">\n          {typeof ReserveIcon === 'string' ? (\n            <img src={ReserveIcon} alt=\"Reserve\" className=\"balance-icon\" />\n          ) : (\n            <ReserveIcon className=\"balance-icon\" />\n          )}\n          {t('account_page_reserve_balance')}\n        </div>\n        <div className=\"balance-value\">\n          {localizeNumber(\n            account.info?.reserve ?? 0,\n            lang,\n            XRP_CURRENCY_OPTIONS,\n          )}\n        </div>\n      </div>\n    </div>\n  )\n}\n\nexport default Balances\n"
  },
  {
    "path": "src/containers/Accounts/AccountSummary/DetailsCard.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { localizeNumber } from '../../shared/utils'\nimport { XRP_SMALL_BALANCE_CURRENCY_OPTIONS } from '../../shared/NumberFormattingUtils'\nimport { Account } from '../../shared/components/Account'\n\ninterface DetailsCardProps {\n  account: any\n  lang: string\n}\n\nconst DetailsCard = ({ account, lang }: DetailsCardProps) => {\n  const { t } = useTranslation()\n\n  return (\n    <div className=\"details-card card\">\n      <div className=\"card-header\">\n        <div className=\"header-title\">{t('account_page_details')}</div>\n      </div>\n      <div className=\"details-list\">\n        <div className=\"details-box\">\n          <div className=\"details-label\">\n            {t('account_page_current_sequence')}\n          </div>\n          <div className=\"details-value\">\n            {localizeNumber(account.info?.sequence, lang)}\n          </div>\n        </div>\n        <div className=\"details-box\">\n          <div className=\"details-label\">{t('account_page_ticket_count')}</div>\n          <div className=\"details-value\">\n            {localizeNumber(account.info?.ticketCount, lang)}\n          </div>\n        </div>\n        {account.info?.emailHash && (\n          <div className=\"details-box email\">\n            <div className=\"details-label\">{t('account_page_email_hash')}</div>\n            <div className=\"details-value\">{account.info.emailHash}</div>\n          </div>\n        )}\n        {account.paychannels?.total_available && (\n          <div className=\"details-box channels\">\n            <div className=\"details-label\">\n              {t('account_page_payment_channels')}\n            </div>\n            <div className=\"details-value\">\n              {t('account_page_payment_channels_text', {\n                currency: localizeNumber(\n                  account.paychannels.total_available,\n                  lang,\n                  XRP_SMALL_BALANCE_CURRENCY_OPTIONS,\n                ),\n                number: account.paychannels.channels.length,\n              })}\n            </div>\n          </div>\n        )}\n        {account.info?.nftMinter && (\n          <div className=\"details-box nft-minter\">\n            <div className=\"details-label\">{t('account_page_nft_minter')}</div>\n            <div className=\"details-value\">\n              <Account account={account.info.nftMinter} />\n            </div>\n          </div>\n        )}\n      </div>\n    </div>\n  )\n}\n\nexport default DetailsCard\n"
  },
  {
    "path": "src/containers/Accounts/AccountSummary/FlagsCard.tsx",
    "content": "import { useMemo } from 'react'\nimport { useTranslation } from 'react-i18next'\n\ninterface FlagsCardProps {\n  account: any\n}\n\nconst FlagsCard = ({ account }: FlagsCardProps) => {\n  const { t } = useTranslation()\n\n  const flags = useMemo<\n    Array<{\n      key: string\n      title: string\n      description: string\n      enabled: boolean\n    }>\n  >(() => {\n    const accountFlags: string[] = account.info?.flags ?? []\n\n    return [\n      {\n        key: 'lsfGlobalFreeze',\n        title: t('account_flag_title_lsf_global_freeze'),\n        description: t('account_flag_description_lsf_global_freeze'),\n        enabled: accountFlags.includes('lsfGlobalFreeze'),\n      },\n      {\n        key: 'lsfDisableMaster',\n        title: t('account_flag_title_lsf_disable_master'),\n        description: t('account_flag_description_lsf_disable_master'),\n        enabled: accountFlags.includes('lsfDisableMaster'),\n      },\n      {\n        key: 'lsfDefaultRipple',\n        title: t('account_flag_title_lsf_default_ripple'),\n        description: t('account_flag_description_lsf_default_ripple'),\n        enabled: accountFlags.includes('lsfDefaultRipple'),\n      },\n      {\n        key: 'lsfAllowTrustLineClawback',\n        title: t('account_flag_title_lsf_allow_trustline_clawback'),\n        description: t('account_flag_description_lsf_allow_trustline_clawback'),\n        enabled: accountFlags.includes('lsfAllowTrustLineClawback'),\n      },\n      {\n        key: 'lsfAllowTrustLineLocking',\n        title: t('account_flag_title_lsf_allow_trustline_locking'),\n        description: t('account_flag_description_lsf_allow_trustline_locking'),\n        enabled: accountFlags.includes('lsfAllowTrustLineLocking'),\n      },\n      {\n        key: 'lsfRequireDestTag',\n        title: t('account_flag_title_lsf_require_destination_tag'),\n        description: t('account_flag_description_lsf_require_destination_tag'),\n        enabled: accountFlags.includes('lsfRequireDestTag'),\n      },\n      {\n        key: 'lsfNoFreeze',\n        title: t('account_flag_title_lsf_no_freeze'),\n        description: t('account_flag_description_lsf_no_freeze'),\n        enabled: accountFlags.includes('lsfNoFreeze'),\n      },\n      {\n        key: 'lsfRequireAuth',\n        title: t('account_flag_title_lsf_require_auth'),\n        description: t('account_flag_description_lsf_require_auth'),\n        enabled: accountFlags.includes('lsfRequireAuth'),\n      },\n      {\n        key: 'lsfDisallowXRP',\n        title: t('account_flag_title_lsf_disallow_xrp'),\n        description: t('account_flag_description_lsf_disallow_xrp'),\n        enabled: accountFlags.includes('lsfDisallowXRP'),\n      },\n      {\n        key: 'lsfDisallowIncomingTrustline',\n        title: t('account_flag_title_lsf_disallow_incoming_trustline'),\n        description: t(\n          'account_flag_description_lsf_disallow_incoming_trustline',\n        ),\n        enabled: accountFlags.includes('lsfDisallowIncomingTrustline'),\n      },\n      {\n        key: 'lsfDisallowIncomingPayChannel',\n        title: t('account_flag_title_lsf_disallow_incoming_pay_chan'),\n        description: t(\n          'account_flag_description_lsf_disallow_incoming_pay_chan',\n        ),\n        enabled: accountFlags.includes('lsfDisallowIncomingPayChannel'),\n      },\n      {\n        key: 'lsfDisallowIncomingNFTokenOffer',\n        title: t('account_flag_title_lsf_disallow_incoming_nft_token_offer'),\n        description: t(\n          'account_flag_description_lsf_disallow_incoming_nft_token_offer',\n        ),\n        enabled: accountFlags.includes('lsfDisallowIncomingNFTokenOffer'),\n      },\n      {\n        key: 'asfAuthorizedNFTokenMinter',\n        title: t('account_flag_title_asf_authorized_nft_token_minter'),\n        description: t(\n          'account_flag_description_asf_authorized_nft_token_minter',\n        ),\n        // No ledger flag exists for the AccountSet flag `asfAuthorizedNFTokenMinter`.\n        // The NFTokenMinter field's presence or absence is sufficient to determine the flag's status.\n        enabled: !!account.info?.nftMinter,\n      },\n      {\n        key: 'lsfDisallowIncomingCheck',\n        title: t('account_flag_title_lsf_disallow_incoming_check'),\n        description: t('account_flag_description_lsf_disallow_incoming_check'),\n        enabled: accountFlags.includes('lsfDisallowIncomingCheck'),\n      },\n      {\n        key: 'lsfDepositAuth',\n        title: t('account_flag_title_lsf_deposit_auth'),\n        description: t('account_flag_description_lsf_deposit_auth'),\n        enabled: accountFlags.includes('lsfDepositAuth'),\n      },\n      {\n        key: 'asfAccountTxnID',\n        title: t('account_flag_title_asf_account_txn_id'),\n        description: t('account_flag_description_asf_account_txn_id'),\n        // No ledger flag exists for the AccountSet flag `asfAccountTxnID`.\n        // The AccountTxnID field's presence or absence is sufficient to determine the flag's status.\n        enabled: !!account.info?.accountTransactionID,\n      },\n    ]\n  }, [account.info, t])\n\n  return (\n    <div className=\"flags-card card\">\n      <div className=\"card-header\">\n        <div className=\"header-title\">{t('account_page_flags')}</div>\n      </div>\n      <div className=\"flags-list\">\n        {flags.map((flag, i) => (\n          <div className=\"flag-item\" key={flag.key || i}>\n            <div className=\"flag-meta\">\n              <div className=\"flag-title\">{flag.title}</div>\n              <div className=\"flag-desc\">{flag.description}</div>\n            </div>\n            <div\n              className={`flag-status ${flag.enabled ? 'enabled' : 'disabled'}`}\n            >\n              {(() => {\n                if (flag.key === 'lsfDisableMaster') {\n                  return flag.enabled ? t('yes') : t('no')\n                }\n                return flag.enabled\n                  ? t('account_page_flag_status_enabled')\n                  : t('account_page_flag_status_disabled')\n              })()}\n            </div>\n          </div>\n        ))}\n      </div>\n    </div>\n  )\n}\n\nexport default FlagsCard\n"
  },
  {
    "path": "src/containers/Accounts/AccountSummary/SignersCard.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { Account } from '../../shared/components/Account'\nimport { localizeNumber, shortenAccount } from '../../shared/utils'\n\ninterface Signer {\n  account: string\n  weight?: number // Individual weight values cannot exceed 2^16-1.\n}\n\ninterface SignersCardProps {\n  signers: Signer[]\n}\nconst SignersCard = ({ signers }: SignersCardProps) => {\n  const { t } = useTranslation()\n  return (\n    <div className=\"signers-card card\">\n      <div className=\"card-header\">\n        <div className=\"header-title\">{t('account_page_signers')}</div>\n      </div>\n      <div className=\"signers-list\">\n        {signers.map((signer, i) => (\n          <div className=\"signer-item\" key={signer.account || i}>\n            <div className=\"signer-address\">\n              <Account\n                account={signer.account}\n                displayText={shortenAccount(signer.account)}\n              />\n            </div>\n            {signer.weight !== undefined && (\n              <div className=\"signer-weight\">\n                {t('account_page_signer_weight')}{' '}\n                {localizeNumber(signer.weight)}\n              </div>\n            )}\n          </div>\n        ))}\n      </div>\n    </div>\n  )\n}\n\nexport default SignersCard\n"
  },
  {
    "path": "src/containers/Accounts/AccountSummary/index.tsx",
    "content": "import { useState } from 'react'\nimport { useTranslation } from 'react-i18next'\n\nimport { useLanguage } from '../../shared/hooks'\nimport ArrowIcon from '../../shared/images/down_arrow.svg'\nimport Balances from './Balances'\nimport DetailsCard from './DetailsCard'\nimport FlagsCard from './FlagsCard'\nimport SignersCard from './SignersCard'\n\nimport './styles.scss'\n\ninterface AccountSummaryProps {\n  account: any\n  xrpToUSDRate: number\n}\n\nexport const AccountSummary = ({\n  account = {},\n  xrpToUSDRate,\n}: AccountSummaryProps) => {\n  const { t } = useTranslation()\n  const lang = useLanguage()\n  const [propertiesOpen, setPropertiesOpen] = useState(false)\n\n  return (\n    <section className=\"account-summary\">\n      <Balances account={account} xrpToUSDRate={xrpToUSDRate} />\n\n      <div className=\"properties\">\n        <div className=\"properties-header\">\n          <h3>{t('account_page_account_properties')}</h3>\n          <button\n            type=\"button\"\n            className=\"properties-toggle\"\n            onClick={() => setPropertiesOpen((s) => !s)}\n            aria-expanded={propertiesOpen}\n            aria-label=\"Toggle account properties\"\n          >\n            <ArrowIcon\n              className={`properties-arrow ${propertiesOpen ? 'open' : ''}`}\n            />\n          </button>\n        </div>\n        {propertiesOpen && (\n          <div className=\"properties-grid\">\n            <FlagsCard account={account} />\n            {account.signerList?.signers && (\n              <SignersCard signers={account.signerList.signers} />\n            )}\n            <DetailsCard account={account} lang={lang} />\n          </div>\n        )}\n      </div>\n    </section>\n  )\n}\n\nexport default AccountSummary\n"
  },
  {
    "path": "src/containers/Accounts/AccountSummary/styles.scss",
    "content": "@use '../../shared/css/variables' as *;\n\n.account-summary {\n  .card {\n    padding: 18px;\n    border: 1px solid $black-70;\n    border-radius: 8px;\n    background: $black-90;\n  }\n\n  .balances {\n    /* Frame that encompasses the 3 balance boxes */\n    display: flex;\n\n    /* Inside auto layout */\n    flex: none;\n    flex-direction: row;\n    flex-grow: 0;\n    align-items: center;\n    align-self: stretch;\n    order: 1;\n    padding: 0;\n    gap: 28px;\n\n    /* common base for all balance cards (markup uses .balance-card and modifier classes) */\n    .balance-card {\n      display: flex;\n      min-width: 0; /* allow shrinking for long content */\n      flex: 1 1 0;\n      flex-direction: column;\n      justify-content: center;\n      gap: 12px;\n    }\n\n    .balance-title {\n      display: flex;\n      align-items: center;\n      color: $black-40;\n      font-size: 14px;\n      gap: 6px;\n      text-transform: uppercase;\n      @include semibold;\n    }\n\n    .balance-icon {\n      display: inline-block;\n      width: 24px;\n      height: 24px;\n      flex: 0 0 auto;\n    }\n\n    .balance-value {\n      color: $black-0;\n      font-size: 24px;\n      @include bold;\n    }\n\n    /* shared visual box properties for the three balance tiles */\n    .xrp,\n    .usd,\n    .reserve {\n      display: flex;\n      min-width: 0;\n      height: 130px;\n      box-sizing: border-box;\n      flex: 1 1 0;\n      flex-direction: column;\n      align-items: flex-start;\n      padding: 38px;\n      border-radius: 8px;\n      gap: 12px;\n    }\n\n    /* individual visuals only set border/background/order */\n    .xrp {\n      order: 0;\n      border: 1px solid #145c35;\n      background: rgb(20 92 53 / 40%);\n    }\n\n    .usd {\n      order: 1;\n      border: 1px solid #6b0080;\n      background: rgb(64 0 76 / 50%);\n    }\n\n    .reserve {\n      order: 2;\n      border: 1px solid #004d80;\n      background: rgb(0 77 128 / 40%);\n    }\n  }\n\n  .properties {\n    /* layout for header and the chevron toggle */\n    .properties-header {\n      display: flex;\n      align-items: center;\n      justify-content: flex-start;\n      margin: 24px 0;\n      gap: 2px;\n\n      h3 {\n        margin: 0;\n        color: $black-0;\n        font-size: 20px;\n      }\n\n      .properties-toggle {\n        display: inline-flex;\n        align-items: center;\n        justify-content: center;\n        padding: 6px;\n        border: 0;\n        background: transparent;\n        color: inherit;\n        cursor: pointer;\n      }\n\n      .properties-arrow {\n        display: inline-block;\n        width: 18px;\n        height: 18px;\n        transform-origin: center;\n        transition: transform 180ms ease;\n      }\n\n      .properties-arrow.open {\n        transform: rotate(180deg);\n      }\n    }\n\n    .properties-grid {\n      display: grid;\n      align-items: start;\n      gap: 28px;\n      grid-template-columns: repeat(3, 1fr);\n\n      /* Custom scrollbars for Flags and Signers lists */\n      .flags-list,\n      .signers-list {\n        scrollbar-color: rgb(255 255 255 / 20%) transparent;\n\n        /* Firefox */\n        scrollbar-width: thin;\n\n        /* WebKit */\n        &::-webkit-scrollbar {\n          width: 10px;\n          height: 10px;\n        }\n\n        &::-webkit-scrollbar-track {\n          background: transparent;\n        }\n\n        &::-webkit-scrollbar-thumb {\n          border: 2px solid transparent; /* create padding effect */\n          border-radius: 6px;\n          background: rgb(255 255 255 / 20%);\n          background-clip: padding-box;\n        }\n\n        &::-webkit-scrollbar-thumb:hover {\n          background: rgb(255 255 255 / 12%);\n        }\n      }\n\n      /* Shared visuals for both cards */\n      .flags-card,\n      .signers-card {\n        display: flex;\n        min-width: 0;\n        min-height: 0;\n        box-sizing: border-box;\n        flex: none;\n        flex-direction: column;\n        flex-grow: 0;\n        align-items: stretch;\n        padding: 20px;\n        gap: 15px;\n        isolation: isolate;\n      }\n\n      /* shared header styles to avoid duplicates */\n      .card-header {\n        display: flex;\n        align-items: center;\n        justify-content: space-between;\n        margin-bottom: 8px;\n\n        .header-title {\n          color: $black-0;\n          font-size: 20px;\n          @include bold;\n        }\n      }\n\n      .flags-card {\n        grid-column: 1 / span 2;\n\n        .flags-list {\n          display: flex;\n          max-height: calc(5 * 70px);\n          flex-direction: column;\n          padding-right: 6px;\n          gap: 8px;\n          overflow-y: auto;\n        }\n\n        .flag-item {\n          display: flex;\n          align-items: center;\n          justify-content: space-between;\n          padding: 12px;\n          border-radius: 8px;\n          background: $black-80;\n\n          .flag-meta {\n            display: flex;\n            flex-direction: column;\n\n            .flag-title {\n              margin-bottom: 6px;\n              color: $black-0;\n              font-size: 14px;\n              @include semibold;\n\n              text-transform: uppercase;\n            }\n\n            .flag-desc {\n              color: $black-0;\n              font-size: 14px;\n            }\n          }\n\n          .flag-status {\n            min-width: 85px; // Ensures YES/NO and ENABLED/DISABLED have the same width\n            padding: 6px 10px;\n            border-radius: 999px;\n            font-size: 12px;\n            letter-spacing: 0.06em;\n            text-align: center;\n            text-transform: uppercase;\n            white-space: nowrap;\n            @include semibold;\n          }\n\n          .flag-status.enabled {\n            background: $green-50;\n            color: $black-100;\n          }\n\n          .flag-status.disabled {\n            background: $black-50;\n            color: $black-0;\n          }\n        }\n      }\n\n      .signers-card {\n        grid-column: 3 / 4;\n\n        .signers-list {\n          display: flex;\n          width: 100%;\n          max-height: calc(5 * 44px);\n          flex-direction: column;\n          align-self: stretch;\n          padding-right: 6px; /* match flags-list spacing to keep scrollbar offset consistent */\n          gap: 8px;\n          overflow-y: auto;\n        }\n\n        .signer-item {\n          display: flex;\n          align-items: center;\n          justify-content: space-between;\n          padding: 10px;\n          border-radius: 8px;\n          background: $black-80;\n\n          .signer-address {\n            font-size: 14px;\n          }\n\n          .signer-weight {\n            color: $blue-50;\n            font-size: 14px;\n          }\n        }\n      }\n    }\n\n    /* Details card styles */\n    @media (min-width: $tablet-landscape-upper-boundary) {\n      .details-card {\n        /* Ensure Details card matches Flags card width in properties grid (desktop only) */\n        grid-column: 1 / span 2;\n      }\n    }\n\n    .details-card {\n      display: flex;\n      flex-direction: column;\n      padding: 20px;\n      background: $black-90;\n      gap: 16px;\n\n      /* Only first two details side by side, rest full width */\n      .details-box {\n        display: flex;\n        min-width: 0;\n        flex: 1 1 180px;\n        flex-direction: row;\n        align-items: center;\n        padding: 10px;\n        border: 1px solid $black-70;\n        border-radius: 8px;\n        background: $black-80;\n        gap: 12px;\n      }\n\n      .details-list {\n        display: grid;\n        gap: 8px;\n        grid-template-columns: repeat(2, 1fr);\n\n        /* Only the first two direct .details-box children are side by side on desktop */\n        > .details-box:nth-child(1) {\n          grid-column: 1;\n          grid-row: 1;\n        }\n\n        > .details-box:nth-child(2) {\n          grid-column: 2;\n          grid-row: 1;\n        }\n\n        > .details-box:nth-child(n + 3) {\n          grid-column: 1 / span 2;\n        }\n      }\n\n      .details-label {\n        color: $black-0;\n        font-size: 14px;\n        @include medium;\n\n        text-transform: none;\n      }\n\n      .details-value {\n        margin-left: auto;\n        color: $black-0;\n        font-size: 14px;\n        text-align: right;\n      }\n    }\n\n    /* Force vertical stacking for tablet portrait and smaller */\n    @media (max-width: $tablet-portrait-upper-boundary) {\n      .details-card .details-list {\n        grid-template-columns: 1fr; /* Keep grid but force 1 column */\n\n        > .details-box:nth-child(1),\n        > .details-box:nth-child(2) {\n          grid-column: 1;\n          grid-row: auto;\n        }\n\n        /* Ensure all boxes span full width in grid */\n        > .details-box:nth-child(n + 3) {\n          grid-column: 1;\n        }\n      }\n    }\n\n    @media (max-width: $tablet-landscape-upper-boundary) {\n      .details-card {\n        padding: 16px;\n      }\n\n      .details-list {\n        /* Keep as grid instead of flex to maintain alignment */\n        display: grid;\n        gap: 10px;\n        grid-template-columns: 1fr;\n      }\n\n      .details-box {\n        width: 100%;\n        flex: none;\n        flex-direction: column;\n        align-items: flex-start;\n        padding: 12px;\n        gap: 8px;\n      }\n\n      .details-label {\n        font-size: 12px;\n      }\n\n      .details-value {\n        font-size: 14px;\n      }\n    }\n\n    /* Extra narrow screens - force better text wrapping */\n    @media (max-width: $tablet-portrait-upper-boundary) {\n      .details-card {\n        padding: 12px;\n\n        .details-list {\n          gap: 8px;\n        }\n\n        .details-box {\n          overflow: hidden; /* Prevent box expansion */\n          min-height: auto;\n          padding: 10px;\n        }\n\n        .details-label {\n          line-height: 1.2;\n        }\n\n        .details-value {\n          max-width: 100%;\n          hyphens: auto; /* Allow hyphenation if supported */\n          line-height: 1.3;\n          overflow-wrap: anywhere; /* More aggressive wrapping */\n          word-break: break-all;\n        }\n      }\n    }\n  }\n\n  @media (max-width: $tablet-landscape-upper-boundary) {\n    .balances {\n      flex-direction: column;\n      margin-bottom: 24px; /* preserve spacing on mobile */\n      gap: 12px;\n\n      .balance-card {\n        width: 100%;\n        flex: none;\n      }\n\n      .xrp,\n      .usd,\n      .reserve {\n        height: auto;\n        padding: 20px;\n      }\n\n      .balance-value {\n        font-size: 18px;\n      }\n\n      .balance-icon {\n        width: 20px;\n        height: 20px;\n      }\n    }\n\n    .properties {\n      .properties-header {\n        gap: 8px;\n\n        .properties-toggle {\n          padding: 4px;\n        }\n\n        .properties-arrow {\n          width: 16px;\n          height: 16px;\n        }\n      }\n\n      .properties-grid {\n        margin-top: 12px;\n        gap: 12px;\n        grid-template-columns: 1fr;\n\n        .flags-card,\n        .signers-card {\n          padding: 16px;\n        }\n\n        .flags-card {\n          grid-column: auto;\n        }\n\n        .signers-card {\n          grid-column: auto;\n        }\n\n        .flags-list,\n        .signers-list {\n          max-height: calc(5 * 64px);\n          padding-inline: 4px;\n        }\n\n        .flag-item,\n        .signer-item {\n          padding: 10px;\n        }\n      }\n    }\n  }\n\n  @media (max-width: $tablet-portrait-upper-boundary) {\n    .properties {\n      .properties-header {\n        h3 {\n          font-size: 18px;\n        }\n      }\n\n      .properties-grid .card-header .header-title {\n        font-size: 18px;\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "src/containers/Accounts/AccountSummary/test/AccountSummary.test.tsx",
    "content": "import { render, screen, fireEvent } from '@testing-library/react'\nimport { I18nextProvider } from 'react-i18next'\nimport i18n from '../../../../i18n/testConfigEnglish'\nimport { AccountSummary } from '../index'\n\n// Mock the child components and SVG imports\njest.mock('../Balances', () => ({\n  __esModule: true,\n  default: ({ account, xrpToUSDRate }: any) => (\n    <div data-testid=\"balances-mock\">\n      Balance: {account.info?.balance} Rate: {xrpToUSDRate}\n    </div>\n  ),\n}))\n\njest.mock('../DetailsCard', () => ({\n  __esModule: true,\n  default: ({ account, lang }: any) => (\n    <div data-testid=\"details-card-mock\">\n      Sequence: {account.info?.sequence} Lang: {lang}\n    </div>\n  ),\n}))\n\njest.mock('../FlagsCard', () => ({\n  __esModule: true,\n  default: ({ account }: any) => (\n    <div data-testid=\"flags-card-mock\">\n      Flags: {account.info?.flags?.length || 0}\n    </div>\n  ),\n}))\n\njest.mock('../SignersCard', () => ({\n  __esModule: true,\n  default: ({ signers }: any) => (\n    <div data-testid=\"signers-card-mock\">Signers: {signers.length}</div>\n  ),\n}))\n\njest.mock('../../../shared/images/down_arrow.svg', () => ({\n  __esModule: true,\n  default: () => <svg data-testid=\"arrow-icon\" />,\n}))\n\nconst TestWrapper = ({ children }: { children: React.ReactNode }) => (\n  <I18nextProvider i18n={i18n}>{children}</I18nextProvider>\n)\n\ndescribe('AccountSummary Component', () => {\n  const mockAccount = {\n    info: {\n      balance: 1000000000,\n      sequence: 123,\n      flags: ['lsfGlobalFreeze'],\n    },\n  }\n\n  describe('Rendering and Toggle Behavior', () => {\n    it('renders balances and collapsed properties by default, then expands/collapses on toggle', () => {\n      render(\n        <TestWrapper>\n          <AccountSummary account={mockAccount} xrpToUSDRate={0.5} />\n        </TestWrapper>,\n      )\n\n      // Renders balances and properties header\n      expect(screen.getByTestId('balances-mock')).toBeInTheDocument()\n      expect(screen.getByText('Account Properties')).toBeInTheDocument()\n\n      // Properties are collapsed by default\n      const toggleButton = screen.getByLabelText('Toggle account properties')\n      expect(toggleButton).toBeInTheDocument()\n      expect(toggleButton).toHaveAttribute('aria-expanded', 'false')\n      expect(screen.queryByTestId('flags-card-mock')).not.toBeInTheDocument()\n      expect(screen.queryByTestId('details-card-mock')).not.toBeInTheDocument()\n\n      // Expand properties\n      fireEvent.click(toggleButton)\n      expect(toggleButton).toHaveAttribute('aria-expanded', 'true')\n      expect(screen.getByTestId('flags-card-mock')).toBeInTheDocument()\n      expect(screen.getByTestId('details-card-mock')).toBeInTheDocument()\n\n      // Collapse again\n      fireEvent.click(toggleButton)\n      expect(toggleButton).toHaveAttribute('aria-expanded', 'false')\n      expect(screen.queryByTestId('flags-card-mock')).not.toBeInTheDocument()\n    })\n  })\n\n  describe('Props and Content', () => {\n    it('passes correct props to child components', () => {\n      render(\n        <TestWrapper>\n          <AccountSummary account={mockAccount} xrpToUSDRate={0.5} />\n        </TestWrapper>,\n      )\n\n      // Balances receives account and rate\n      expect(screen.getByText(/Balance: 1000000000/)).toBeInTheDocument()\n      expect(screen.getByText(/Rate: 0.5/)).toBeInTheDocument()\n\n      // FlagsCard receives account\n      const toggleButton = screen.getByLabelText('Toggle account properties')\n      fireEvent.click(toggleButton)\n      expect(screen.getByText('Flags: 1')).toBeInTheDocument()\n    })\n\n    it('renders SignersCard when signers exist, hides when none', () => {\n      // Without signers\n      render(\n        <TestWrapper>\n          <AccountSummary account={mockAccount} xrpToUSDRate={0.5} />\n        </TestWrapper>,\n      )\n\n      const toggleButton = screen.getByLabelText('Toggle account properties')\n      fireEvent.click(toggleButton)\n      expect(screen.queryByTestId('signers-card-mock')).not.toBeInTheDocument()\n    })\n\n    it('renders SignersCard when account has signers', () => {\n      const accountWithSigners = {\n        ...mockAccount,\n        signerList: {\n          signers: [\n            { account: 'rSigner1', weight: 1 },\n            { account: 'rSigner2', weight: 2 },\n          ],\n        },\n      }\n\n      render(\n        <TestWrapper>\n          <AccountSummary account={accountWithSigners} xrpToUSDRate={0.5} />\n        </TestWrapper>,\n      )\n\n      const toggleButton = screen.getByLabelText('Toggle account properties')\n      fireEvent.click(toggleButton)\n      expect(screen.getByTestId('signers-card-mock')).toBeInTheDocument()\n      expect(screen.getByText('Signers: 2')).toBeInTheDocument()\n    })\n\n    it('handles empty account gracefully', () => {\n      render(\n        <TestWrapper>\n          <AccountSummary account={{}} xrpToUSDRate={0.5} />\n        </TestWrapper>,\n      )\n\n      expect(screen.getByTestId('balances-mock')).toBeInTheDocument()\n\n      const toggleButton = screen.getByLabelText('Toggle account properties')\n      fireEvent.click(toggleButton)\n      expect(screen.getByTestId('flags-card-mock')).toBeInTheDocument()\n      expect(screen.getByTestId('details-card-mock')).toBeInTheDocument()\n    })\n\n    it('handles undefined account with default value', () => {\n      render(\n        <TestWrapper>\n          <AccountSummary account={undefined} xrpToUSDRate={0.5} />\n        </TestWrapper>,\n      )\n\n      expect(screen.getByTestId('balances-mock')).toBeInTheDocument()\n\n      const toggleButton = screen.getByLabelText('Toggle account properties')\n      fireEvent.click(toggleButton)\n      expect(screen.getByTestId('flags-card-mock')).toBeInTheDocument()\n      expect(screen.getByTestId('details-card-mock')).toBeInTheDocument()\n    })\n  })\n})\n"
  },
  {
    "path": "src/containers/Accounts/AccountSummary/test/Balances.test.tsx",
    "content": "import { render, screen } from '@testing-library/react'\nimport { I18nextProvider } from 'react-i18next'\nimport i18n from '../../../../i18n/testConfigEnglish'\nimport Balances from '../Balances'\n\n// Mock SVG imports\njest.mock('../../../shared/images/usd_icon.svg', () => ({\n  __esModule: true,\n  default: () => <svg data-testid=\"usd-icon\" />,\n}))\n\njest.mock('../../../shared/images/xrp_balance_icon.svg', () => ({\n  __esModule: true,\n  default: () => <svg data-testid=\"xrp-icon\" />,\n}))\n\njest.mock('../../../shared/images/xrp_reserve_balance_icon.svg', () => ({\n  __esModule: true,\n  default: () => <svg data-testid=\"reserve-icon\" />,\n}))\n\nconst TestWrapper = ({ children }: { children: React.ReactNode }) => (\n  <I18nextProvider i18n={i18n}>{children}</I18nextProvider>\n)\n\ndescribe('Balances Component', () => {\n  describe('Rendering', () => {\n    it('renders all three balance cards with icons', () => {\n      const account = {\n        info: {\n          balance: 1000000000, // 1000 XRP (in drops)\n          reserve: 10000000, // 10 XRP\n        },\n      }\n\n      const { container } = render(\n        <TestWrapper>\n          <Balances account={account} xrpToUSDRate={0.5} />\n        </TestWrapper>,\n      )\n\n      // Verify three balance cards exist\n      const balanceCards = container.querySelectorAll('.balance-card')\n      expect(balanceCards.length).toBe(3)\n\n      // Verify XRP balance card and icon\n      expect(screen.getByText('XRP Balance')).toBeInTheDocument()\n      expect(screen.getByTestId('xrp-icon')).toBeInTheDocument()\n\n      // Verify USD balance card and icon\n      expect(screen.getByText('XRP Balance (USD)')).toBeInTheDocument()\n      expect(screen.getByTestId('usd-icon')).toBeInTheDocument()\n\n      // Verify Reserve balance card and icon\n      expect(screen.getByText('Reserve Balance')).toBeInTheDocument()\n      expect(screen.getByTestId('reserve-icon')).toBeInTheDocument()\n    })\n  })\n\n  describe('Balance Calculations', () => {\n    it('converts drops to XRP correctly (1000 XRP)', () => {\n      const account = {\n        info: {\n          balance: 1000000000, // 1000 XRP in drops\n          reserve: 0,\n        },\n      }\n\n      const { container } = render(\n        <TestWrapper>\n          <Balances account={account} xrpToUSDRate={0.5} />\n        </TestWrapper>,\n      )\n\n      // XRP balance should show 1000\n      const xrpCard = container.querySelector('.balance-card.xrp')\n      expect(xrpCard?.textContent).toContain('1,000')\n    })\n\n    it('calculates USD value correctly', () => {\n      const account = {\n        info: {\n          balance: 2000000000, // 2000 XRP\n          reserve: 0,\n        },\n      }\n\n      const { container } = render(\n        <TestWrapper>\n          <Balances account={account} xrpToUSDRate={0.5} />\n        </TestWrapper>,\n      )\n\n      // USD should be 2000 * 0.5 = 1000\n      const usdCard = container.querySelector('.balance-card.usd')\n      expect(usdCard?.textContent).toContain('$1,000')\n    })\n\n    it('handles zero balance', () => {\n      const account = {\n        info: {\n          balance: 0,\n          reserve: 0,\n        },\n      }\n\n      const { container } = render(\n        <TestWrapper>\n          <Balances account={account} xrpToUSDRate={0.5} />\n        </TestWrapper>,\n      )\n\n      const xrpCard = container.querySelector('.balance-card.xrp')\n      expect(xrpCard?.textContent).toContain('0')\n    })\n\n    it('handles missing balance (defaults to 0)', () => {\n      const account = {\n        info: {},\n      }\n\n      const { container } = render(\n        <TestWrapper>\n          <Balances account={account} xrpToUSDRate={0.5} />\n        </TestWrapper>,\n      )\n\n      const xrpCard = container.querySelector('.balance-card.xrp')\n      expect(xrpCard?.textContent).toContain('0')\n    })\n\n    it('displays reserve balance', () => {\n      const account = {\n        info: {\n          balance: 1000000000,\n          reserve: 20, // 20 XRP (already in XRP, not drops)\n        },\n      }\n\n      const { container } = render(\n        <TestWrapper>\n          <Balances account={account} xrpToUSDRate={0.5} />\n        </TestWrapper>,\n      )\n\n      const reserveCard = container.querySelector('.balance-card.reserve')\n      expect(reserveCard?.textContent).toContain('20')\n    })\n  })\n\n  describe('XRP to USD Rate', () => {\n    it('updates USD value when rate changes', () => {\n      const account = {\n        info: {\n          balance: 1000000000, // 1000 XRP\n          reserve: 0,\n        },\n      }\n\n      const { container, rerender } = render(\n        <TestWrapper>\n          <Balances account={account} xrpToUSDRate={0.5} />\n        </TestWrapper>,\n      )\n\n      // Initial: 1000 XRP * $0.5 = $500\n      let usdCard = container.querySelector('.balance-card.usd')\n      expect(usdCard?.textContent).toContain('$500')\n\n      // Update rate: 1000 XRP * $2 = $2000\n      rerender(\n        <TestWrapper>\n          <Balances account={account} xrpToUSDRate={2} />\n        </TestWrapper>,\n      )\n\n      usdCard = container.querySelector('.balance-card.usd')\n      expect(usdCard?.textContent).toContain('2,000')\n    })\n\n    it('handles zero USD rate', () => {\n      const account = {\n        info: {\n          balance: 1000000000,\n          reserve: 0,\n        },\n      }\n\n      const { container } = render(\n        <TestWrapper>\n          <Balances account={account} xrpToUSDRate={0} />\n        </TestWrapper>,\n      )\n\n      const usdCard = container.querySelector('.balance-card.usd')\n      expect(usdCard?.textContent).toContain('$0')\n    })\n  })\n\n  describe('Number Formatting', () => {\n    it('formats all three balances with proper formatting', () => {\n      const account = {\n        info: {\n          balance: 5545000, // 5.545 XRP\n          reserve: 20.538, // 20.54 XRP\n        },\n      }\n\n      const { container } = render(\n        <TestWrapper>\n          <Balances account={account} xrpToUSDRate={0.5} />\n        </TestWrapper>,\n      )\n\n      // XRP balance with decimal\n      const xrpCard = container.querySelector('.balance-card.xrp')\n      expect(xrpCard?.textContent).toContain('5.55')\n\n      // USD balance calculated and formatted\n      const usdCard = container.querySelector('.balance-card.usd')\n      expect(usdCard?.textContent).toContain('$2.77') // 5.545 * 0.5 = 2.7725\n\n      // Reserve balance with decimal\n      const reserveCard = container.querySelector('.balance-card.reserve')\n      expect(reserveCard?.textContent).toContain('20.54')\n    })\n  })\n\n  describe('Edge Cases', () => {\n    it('handles missing info property', () => {\n      const account = {}\n\n      const { container } = render(\n        <TestWrapper>\n          <Balances account={account} xrpToUSDRate={0.5} />\n        </TestWrapper>,\n      )\n\n      const xrpCard = container.querySelector('.balance-card.xrp')\n      expect(xrpCard).toBeInTheDocument()\n    })\n  })\n})\n"
  },
  {
    "path": "src/containers/Accounts/AccountSummary/test/DetailsCard.test.tsx",
    "content": "import { render, screen } from '@testing-library/react'\nimport { I18nextProvider } from 'react-i18next'\nimport { BrowserRouter as Router } from 'react-router'\nimport i18n from '../../../../i18n/testConfigEnglish'\nimport DetailsCard from '../DetailsCard'\n\n// Mock the Account component\njest.mock('../../../shared/components/Account', () => ({\n  Account: ({ account }: { account: string }) => (\n    <span data-testid=\"account-component\">{account}</span>\n  ),\n}))\n\nconst TestWrapper = ({ children }: { children: React.ReactNode }) => (\n  <I18nextProvider i18n={i18n}>\n    <Router>{children}</Router>\n  </I18nextProvider>\n)\n\ndescribe('DetailsCard Component', () => {\n  describe('Rendering', () => {\n    it('renders card header and required fields', () => {\n      const account = {\n        info: {\n          sequence: 123,\n          ticketCount: 5,\n        },\n      }\n\n      render(\n        <TestWrapper>\n          <DetailsCard account={account} lang=\"en-US\" />\n        </TestWrapper>,\n      )\n\n      // Verify card header\n      expect(screen.getByText('Details')).toBeInTheDocument()\n\n      // Verify current sequence field\n      expect(screen.getByText('Current Sequence')).toBeInTheDocument()\n      expect(screen.getByText('123')).toBeInTheDocument()\n\n      // Verify ticket count field\n      expect(screen.getByText('Ticket Count')).toBeInTheDocument()\n      expect(screen.getByText('5')).toBeInTheDocument()\n    })\n  })\n\n  describe('Optional Fields', () => {\n    it('renders email hash when present', () => {\n      const account = {\n        info: {\n          sequence: 123,\n          ticketCount: 0,\n          emailHash: 'ABC123DEF456',\n        },\n      }\n\n      render(\n        <TestWrapper>\n          <DetailsCard account={account} lang=\"en-US\" />\n        </TestWrapper>,\n      )\n\n      expect(screen.getByText('Email Hash')).toBeInTheDocument()\n      expect(screen.getByText('ABC123DEF456')).toBeInTheDocument()\n    })\n\n    it('does not render email hash when not present', () => {\n      const account = {\n        info: {\n          sequence: 123,\n          ticketCount: 0,\n        },\n      }\n\n      render(\n        <TestWrapper>\n          <DetailsCard account={account} lang=\"en-US\" />\n        </TestWrapper>,\n      )\n\n      expect(screen.queryByText('Email Hash')).not.toBeInTheDocument()\n    })\n\n    it('renders payment channels when present', () => {\n      const account = {\n        info: {\n          sequence: 123,\n          ticketCount: 0,\n        },\n        paychannels: {\n          total_available: 100,\n          channels: [{ id: '1' }, { id: '2' }, { id: '3' }],\n        },\n      }\n\n      render(\n        <TestWrapper>\n          <DetailsCard account={account} lang=\"en-US\" />\n        </TestWrapper>,\n      )\n\n      expect(screen.getByText('Payment Channels')).toBeInTheDocument()\n      // Should show formatted text with both amount and number of channels\n      expect(screen.getByText(/100\\.00.*3 channel\\(s\\)/i)).toBeInTheDocument()\n    })\n\n    it('does not render payment channels when not present', () => {\n      const account = {\n        info: {\n          sequence: 123,\n          ticketCount: 0,\n        },\n      }\n\n      render(\n        <TestWrapper>\n          <DetailsCard account={account} lang=\"en-US\" />\n        </TestWrapper>,\n      )\n\n      expect(screen.queryByText('Payment Channels')).not.toBeInTheDocument()\n    })\n\n    it('renders NFT minter when present', () => {\n      const account = {\n        info: {\n          sequence: 123,\n          ticketCount: 0,\n          nftMinter: 'rNFTMinterAccount123',\n        },\n      }\n\n      render(\n        <TestWrapper>\n          <DetailsCard account={account} lang=\"en-US\" />\n        </TestWrapper>,\n      )\n\n      expect(screen.getByText('NFT Minter')).toBeInTheDocument()\n      expect(screen.getByTestId('account-component')).toHaveTextContent(\n        'rNFTMinterAccount123',\n      )\n    })\n\n    it('does not render NFT minter when not present', () => {\n      const account = {\n        info: {\n          sequence: 123,\n          ticketCount: 0,\n        },\n      }\n\n      render(\n        <TestWrapper>\n          <DetailsCard account={account} lang=\"en-US\" />\n        </TestWrapper>,\n      )\n\n      expect(screen.queryByText('NFT Minter')).not.toBeInTheDocument()\n    })\n  })\n\n  describe('Number Formatting', () => {\n    it('formats sequence and ticket count with commas for large numbers', () => {\n      const account = {\n        info: {\n          sequence: 1234567,\n          ticketCount: 1000,\n        },\n      }\n\n      render(\n        <TestWrapper>\n          <DetailsCard account={account} lang=\"en-US\" />\n        </TestWrapper>,\n      )\n\n      expect(screen.getByText('1,234,567')).toBeInTheDocument()\n      expect(screen.getByText('1,000')).toBeInTheDocument()\n    })\n\n    it('handles zero values', () => {\n      const account = {\n        info: {\n          sequence: 0,\n          ticketCount: 0,\n        },\n      }\n\n      render(\n        <TestWrapper>\n          <DetailsCard account={account} lang=\"en-US\" />\n        </TestWrapper>,\n      )\n\n      const zeroElements = screen.getAllByText('0')\n      expect(zeroElements.length).toBe(2)\n    })\n  })\n\n  describe('Combined Optional Fields', () => {\n    it('renders all optional fields when present', () => {\n      const account = {\n        info: {\n          sequence: 123,\n          ticketCount: 5,\n          emailHash: 'ABC123',\n          nftMinter: 'rMinter123',\n        },\n        paychannels: {\n          total_available: 100,\n          channels: [{ id: '1' }, { id: '2' }],\n        },\n      }\n\n      render(\n        <TestWrapper>\n          <DetailsCard account={account} lang=\"en-US\" />\n        </TestWrapper>,\n      )\n\n      expect(screen.getByText('Email Hash')).toBeInTheDocument()\n      expect(screen.getByText('Payment Channels')).toBeInTheDocument()\n      expect(screen.getByText('NFT Minter')).toBeInTheDocument()\n    })\n  })\n\n  describe('Edge Cases', () => {\n    it('handles undefined sequence', () => {\n      const account = {\n        info: {\n          ticketCount: 0,\n        },\n      }\n\n      render(\n        <TestWrapper>\n          <DetailsCard account={account} lang=\"en-US\" />\n        </TestWrapper>,\n      )\n\n      expect(screen.getByText('Current Sequence')).toBeInTheDocument()\n    })\n\n    it('handles undefined ticket count', () => {\n      const account = {\n        info: {\n          sequence: 123,\n        },\n      }\n\n      render(\n        <TestWrapper>\n          <DetailsCard account={account} lang=\"en-US\" />\n        </TestWrapper>,\n      )\n\n      expect(screen.getByText('Ticket Count')).toBeInTheDocument()\n    })\n\n    it('handles empty paychannels array', () => {\n      const account = {\n        info: {\n          sequence: 123,\n          ticketCount: 0,\n        },\n        paychannels: {\n          total_available: 0,\n          channels: [],\n        },\n      }\n\n      render(\n        <TestWrapper>\n          <DetailsCard account={account} lang=\"en-US\" />\n        </TestWrapper>,\n      )\n\n      // Should not render payment channels if total_available is 0 (falsy)\n      expect(screen.queryByText('Payment Channels')).not.toBeInTheDocument()\n    })\n  })\n\n  describe('Language Support', () => {\n    it('accepts different language codes', () => {\n      const account = {\n        info: {\n          sequence: 1234567,\n          ticketCount: 0,\n        },\n      }\n\n      render(\n        <TestWrapper>\n          <DetailsCard account={account} lang=\"ja-JP\" />\n        </TestWrapper>,\n      )\n\n      expect(screen.getByText('Details')).toBeInTheDocument()\n    })\n  })\n})\n"
  },
  {
    "path": "src/containers/Accounts/AccountSummary/test/FlagsCard.test.tsx",
    "content": "import { render, screen } from '@testing-library/react'\nimport { I18nextProvider } from 'react-i18next'\nimport i18n from '../../../../i18n/testConfigEnglish'\nimport FlagsCard from '../FlagsCard'\n\nconst TestWrapper = ({ children }: { children: React.ReactNode }) => (\n  <I18nextProvider i18n={i18n}>{children}</I18nextProvider>\n)\n\ndescribe('FlagsCard Component', () => {\n  describe('Rendering', () => {\n    it('renders the card with header', () => {\n      const account = {\n        info: {\n          flags: [],\n        },\n      }\n\n      render(\n        <TestWrapper>\n          <FlagsCard account={account} />\n        </TestWrapper>,\n      )\n\n      expect(screen.getByText('Flags')).toBeInTheDocument()\n    })\n\n    it('renders all 16 flag items', () => {\n      const account = {\n        info: {\n          flags: [],\n        },\n      }\n\n      const { container } = render(\n        <TestWrapper>\n          <FlagsCard account={account} />\n        </TestWrapper>,\n      )\n\n      const flagItems = container.querySelectorAll('.flag-item')\n      expect(flagItems.length).toBe(16)\n    })\n  })\n\n  describe('Flag Status - Enabled(Yes)/Disabled(No)', () => {\n    it('shows lsfGlobalFreeze as enabled when flag is present', () => {\n      const account = {\n        info: {\n          flags: ['lsfGlobalFreeze'],\n        },\n      }\n\n      const { container } = render(\n        <TestWrapper>\n          <FlagsCard account={account} />\n        </TestWrapper>,\n      )\n\n      const flag = Array.from(container.querySelectorAll('.flag-item')).find(\n        (item) => item.textContent?.includes('Global Freeze'),\n      )\n      expect(flag?.querySelector('.flag-status.enabled')).toBeInTheDocument()\n      expect(flag?.querySelector('.flag-status')).toHaveTextContent('Enabled')\n    })\n\n    it('shows lsfGlobalFreeze as disabled when flag is not present', () => {\n      const account = {\n        info: {\n          flags: [],\n        },\n      }\n\n      const { container } = render(\n        <TestWrapper>\n          <FlagsCard account={account} />\n        </TestWrapper>,\n      )\n\n      const flag = Array.from(container.querySelectorAll('.flag-item')).find(\n        (item) => item.textContent?.includes('Global Freeze'),\n      )\n      expect(flag?.querySelector('.flag-status.disabled')).toBeInTheDocument()\n      expect(flag?.querySelector('.flag-status')).toHaveTextContent('Disabled')\n    })\n\n    it('shows lsfDisableMaster as enabled with \"Yes\" when flag is present', () => {\n      const account = {\n        info: {\n          flags: ['lsfDisableMaster'],\n        },\n      }\n\n      const { container } = render(\n        <TestWrapper>\n          <FlagsCard account={account} />\n        </TestWrapper>,\n      )\n\n      const flag = Array.from(container.querySelectorAll('.flag-item')).find(\n        (item) => item.textContent?.includes('Master Key'),\n      )\n      expect(flag?.querySelector('.flag-status.enabled')).toBeInTheDocument()\n      expect(flag?.querySelector('.flag-status')).toHaveTextContent('Yes')\n    })\n\n    it('shows lsfDisableMaster as disabled with \"No\" when flag is not present', () => {\n      const account = {\n        info: {\n          flags: [],\n        },\n      }\n\n      const { container } = render(\n        <TestWrapper>\n          <FlagsCard account={account} />\n        </TestWrapper>,\n      )\n\n      const flag = Array.from(container.querySelectorAll('.flag-item')).find(\n        (item) => item.textContent?.includes('Master Key'),\n      )\n      expect(flag?.querySelector('.flag-status.disabled')).toBeInTheDocument()\n      expect(flag?.querySelector('.flag-status')).toHaveTextContent('No')\n    })\n\n    it('shows lsfDefaultRipple as enabled when flag is present', () => {\n      const account = {\n        info: {\n          flags: ['lsfDefaultRipple'],\n        },\n      }\n\n      const { container } = render(\n        <TestWrapper>\n          <FlagsCard account={account} />\n        </TestWrapper>,\n      )\n\n      const flag = Array.from(container.querySelectorAll('.flag-item')).find(\n        (item) => item.textContent?.includes('Rippling'),\n      )\n      expect(flag?.querySelector('.flag-status.enabled')).toBeInTheDocument()\n      expect(flag?.querySelector('.flag-status')).toHaveTextContent('Enabled')\n    })\n\n    it('shows lsfDefaultRipple as disabled when flag is not present', () => {\n      const account = {\n        info: {\n          flags: [],\n        },\n      }\n\n      const { container } = render(\n        <TestWrapper>\n          <FlagsCard account={account} />\n        </TestWrapper>,\n      )\n\n      const flag = Array.from(container.querySelectorAll('.flag-item')).find(\n        (item) => item.textContent?.includes('Rippling'),\n      )\n      expect(flag?.querySelector('.flag-status.disabled')).toBeInTheDocument()\n      expect(flag?.querySelector('.flag-status')).toHaveTextContent('Disabled')\n    })\n\n    it('shows lsfAllowTrustLineClawback as enabled when flag is present', () => {\n      const account = {\n        info: {\n          flags: ['lsfAllowTrustLineClawback'],\n        },\n      }\n\n      const { container } = render(\n        <TestWrapper>\n          <FlagsCard account={account} />\n        </TestWrapper>,\n      )\n\n      const flag = Array.from(container.querySelectorAll('.flag-item')).find(\n        (item) => item.textContent?.includes('Clawback'),\n      )\n      expect(flag?.querySelector('.flag-status.enabled')).toBeInTheDocument()\n      expect(flag?.querySelector('.flag-status')).toHaveTextContent('Enabled')\n    })\n\n    it('shows lsfAllowTrustLineClawback as disabled when flag is not present', () => {\n      const account = {\n        info: {\n          flags: [],\n        },\n      }\n\n      const { container } = render(\n        <TestWrapper>\n          <FlagsCard account={account} />\n        </TestWrapper>,\n      )\n\n      const flag = Array.from(container.querySelectorAll('.flag-item')).find(\n        (item) => item.textContent?.includes('Clawback'),\n      )\n      expect(flag?.querySelector('.flag-status.disabled')).toBeInTheDocument()\n      expect(flag?.querySelector('.flag-status')).toHaveTextContent('Disabled')\n    })\n\n    it('shows lsfRequireDestTag as enabled when flag is present', () => {\n      const account = {\n        info: {\n          flags: ['lsfRequireDestTag'],\n        },\n      }\n\n      const { container } = render(\n        <TestWrapper>\n          <FlagsCard account={account} />\n        </TestWrapper>,\n      )\n\n      const flag = Array.from(container.querySelectorAll('.flag-item')).find(\n        (item) => item.textContent?.includes('Require Destination Tag'),\n      )\n      expect(flag?.querySelector('.flag-status.enabled')).toBeInTheDocument()\n      expect(flag?.querySelector('.flag-status')).toHaveTextContent('Enabled')\n    })\n\n    it('shows lsfRequireDestTag as disabled when flag is not present', () => {\n      const account = {\n        info: {\n          flags: [],\n        },\n      }\n\n      const { container } = render(\n        <TestWrapper>\n          <FlagsCard account={account} />\n        </TestWrapper>,\n      )\n\n      const flag = Array.from(container.querySelectorAll('.flag-item')).find(\n        (item) => item.textContent?.includes('Require Destination Tag'),\n      )\n      expect(flag?.querySelector('.flag-status.disabled')).toBeInTheDocument()\n      expect(flag?.querySelector('.flag-status')).toHaveTextContent('Disabled')\n    })\n\n    it('shows lsfNoFreeze as enabled when flag is present', () => {\n      const account = {\n        info: {\n          flags: ['lsfNoFreeze'],\n        },\n      }\n\n      const { container } = render(\n        <TestWrapper>\n          <FlagsCard account={account} />\n        </TestWrapper>,\n      )\n\n      const flag = Array.from(container.querySelectorAll('.flag-item')).find(\n        (item) => item.textContent?.includes('No Freeze'),\n      )\n      expect(flag?.querySelector('.flag-status.enabled')).toBeInTheDocument()\n      expect(flag?.querySelector('.flag-status')).toHaveTextContent('Enabled')\n    })\n\n    it('shows lsfNoFreeze as disabled when flag is not present', () => {\n      const account = {\n        info: {\n          flags: [],\n        },\n      }\n\n      const { container } = render(\n        <TestWrapper>\n          <FlagsCard account={account} />\n        </TestWrapper>,\n      )\n\n      const flag = Array.from(container.querySelectorAll('.flag-item')).find(\n        (item) => item.textContent?.includes('No Freeze'),\n      )\n      expect(flag?.querySelector('.flag-status.disabled')).toBeInTheDocument()\n      expect(flag?.querySelector('.flag-status')).toHaveTextContent('Disabled')\n    })\n\n    it('shows lsfRequireAuth as enabled when flag is present', () => {\n      const account = {\n        info: {\n          flags: ['lsfRequireAuth'],\n        },\n      }\n\n      const { container } = render(\n        <TestWrapper>\n          <FlagsCard account={account} />\n        </TestWrapper>,\n      )\n\n      const flag = Array.from(container.querySelectorAll('.flag-item')).find(\n        (item) =>\n          item.querySelector('.flag-title')?.textContent ===\n          'Require Authorization',\n      )\n      expect(flag?.querySelector('.flag-status.enabled')).toBeInTheDocument()\n      expect(flag?.querySelector('.flag-status')).toHaveTextContent('Enabled')\n    })\n\n    it('shows lsfRequireAuth as disabled when flag is not present', () => {\n      const account = {\n        info: {\n          flags: [],\n        },\n      }\n\n      const { container } = render(\n        <TestWrapper>\n          <FlagsCard account={account} />\n        </TestWrapper>,\n      )\n\n      const flag = Array.from(container.querySelectorAll('.flag-item')).find(\n        (item) =>\n          item.querySelector('.flag-title')?.textContent ===\n          'Require Authorization',\n      )\n      expect(flag?.querySelector('.flag-status.disabled')).toBeInTheDocument()\n      expect(flag?.querySelector('.flag-status')).toHaveTextContent('Disabled')\n    })\n\n    it('shows lsfDisallowXRP as enabled when flag is present', () => {\n      const account = {\n        info: {\n          flags: ['lsfDisallowXRP'],\n        },\n      }\n\n      const { container } = render(\n        <TestWrapper>\n          <FlagsCard account={account} />\n        </TestWrapper>,\n      )\n\n      const flag = Array.from(container.querySelectorAll('.flag-item')).find(\n        (item) => item.textContent?.includes('No XRP Allowed'),\n      )\n      expect(flag?.querySelector('.flag-status.enabled')).toBeInTheDocument()\n      expect(flag?.querySelector('.flag-status')).toHaveTextContent('Enabled')\n    })\n\n    it('shows lsfDisallowXRP as disabled when flag is not present', () => {\n      const account = {\n        info: {\n          flags: [],\n        },\n      }\n\n      const { container } = render(\n        <TestWrapper>\n          <FlagsCard account={account} />\n        </TestWrapper>,\n      )\n\n      const flag = Array.from(container.querySelectorAll('.flag-item')).find(\n        (item) => item.textContent?.includes('No XRP Allowed'),\n      )\n      expect(flag?.querySelector('.flag-status.disabled')).toBeInTheDocument()\n      expect(flag?.querySelector('.flag-status')).toHaveTextContent('Disabled')\n    })\n\n    it('shows lsfDisallowIncomingTrustline as enabled when flag is present', () => {\n      const account = {\n        info: {\n          flags: ['lsfDisallowIncomingTrustline'],\n        },\n      }\n\n      const { container } = render(\n        <TestWrapper>\n          <FlagsCard account={account} />\n        </TestWrapper>,\n      )\n\n      const flag = Array.from(container.querySelectorAll('.flag-item')).find(\n        (item) => item.textContent?.includes('Block Trustlines'),\n      )\n      expect(flag?.querySelector('.flag-status.enabled')).toBeInTheDocument()\n      expect(flag?.querySelector('.flag-status')).toHaveTextContent('Enabled')\n    })\n\n    it('shows lsfDisallowIncomingTrustline as disabled when flag is not present', () => {\n      const account = {\n        info: {\n          flags: [],\n        },\n      }\n\n      const { container } = render(\n        <TestWrapper>\n          <FlagsCard account={account} />\n        </TestWrapper>,\n      )\n\n      const flag = Array.from(container.querySelectorAll('.flag-item')).find(\n        (item) => item.textContent?.includes('Block Trustlines'),\n      )\n      expect(flag?.querySelector('.flag-status.disabled')).toBeInTheDocument()\n      expect(flag?.querySelector('.flag-status')).toHaveTextContent('Disabled')\n    })\n\n    it('shows lsfDisallowIncomingPayChannel as enabled when flag is present', () => {\n      const account = {\n        info: {\n          flags: ['lsfDisallowIncomingPayChannel'],\n        },\n      }\n\n      const { container } = render(\n        <TestWrapper>\n          <FlagsCard account={account} />\n        </TestWrapper>,\n      )\n\n      const flag = Array.from(container.querySelectorAll('.flag-item')).find(\n        (item) => item.textContent?.includes('Block Payment Channels'),\n      )\n      expect(flag?.querySelector('.flag-status.enabled')).toBeInTheDocument()\n      expect(flag?.querySelector('.flag-status')).toHaveTextContent('Enabled')\n    })\n\n    it('shows lsfDisallowIncomingPayChannel as disabled when flag is not present', () => {\n      const account = {\n        info: {\n          flags: [],\n        },\n      }\n\n      const { container } = render(\n        <TestWrapper>\n          <FlagsCard account={account} />\n        </TestWrapper>,\n      )\n\n      const flag = Array.from(container.querySelectorAll('.flag-item')).find(\n        (item) => item.textContent?.includes('Block Payment Channels'),\n      )\n      expect(flag?.querySelector('.flag-status.disabled')).toBeInTheDocument()\n      expect(flag?.querySelector('.flag-status')).toHaveTextContent('Disabled')\n    })\n\n    it('shows lsfDisallowIncomingNFTokenOffer as enabled when flag is present', () => {\n      const account = {\n        info: {\n          flags: ['lsfDisallowIncomingNFTokenOffer'],\n        },\n      }\n\n      const { container } = render(\n        <TestWrapper>\n          <FlagsCard account={account} />\n        </TestWrapper>,\n      )\n\n      const flag = Array.from(container.querySelectorAll('.flag-item')).find(\n        (item) => item.textContent?.includes('Block NFT Offers'),\n      )\n      expect(flag?.querySelector('.flag-status.enabled')).toBeInTheDocument()\n      expect(flag?.querySelector('.flag-status')).toHaveTextContent('Enabled')\n    })\n\n    it('shows lsfDisallowIncomingNFTokenOffer as disabled when flag is not present', () => {\n      const account = {\n        info: {\n          flags: [],\n        },\n      }\n\n      const { container } = render(\n        <TestWrapper>\n          <FlagsCard account={account} />\n        </TestWrapper>,\n      )\n\n      const flag = Array.from(container.querySelectorAll('.flag-item')).find(\n        (item) => item.textContent?.includes('Block NFT Offers'),\n      )\n      expect(flag?.querySelector('.flag-status.disabled')).toBeInTheDocument()\n      expect(flag?.querySelector('.flag-status')).toHaveTextContent('Disabled')\n    })\n\n    it('shows asfAuthorizedNFTokenMinter as enabled when nftMinter field is present', () => {\n      const account = {\n        info: {\n          flags: [],\n          nftMinter: 'rMinterAccount123',\n        },\n      }\n\n      const { container } = render(\n        <TestWrapper>\n          <FlagsCard account={account} />\n        </TestWrapper>,\n      )\n\n      const flag = Array.from(container.querySelectorAll('.flag-item')).find(\n        (item) => item.textContent?.includes('NFT Minter'),\n      )\n      expect(flag?.querySelector('.flag-status.enabled')).toBeInTheDocument()\n      expect(flag?.querySelector('.flag-status')).toHaveTextContent('Enabled')\n    })\n\n    it('shows asfAuthorizedNFTokenMinter as disabled when nftMinter field is not present', () => {\n      const account = {\n        info: {\n          flags: [],\n        },\n      }\n\n      const { container } = render(\n        <TestWrapper>\n          <FlagsCard account={account} />\n        </TestWrapper>,\n      )\n\n      const flag = Array.from(container.querySelectorAll('.flag-item')).find(\n        (item) => item.textContent?.includes('NFT Minter'),\n      )\n      expect(flag?.querySelector('.flag-status.disabled')).toBeInTheDocument()\n      expect(flag?.querySelector('.flag-status')).toHaveTextContent('Disabled')\n    })\n\n    it('shows lsfDisallowIncomingCheck as enabled when flag is present', () => {\n      const account = {\n        info: {\n          flags: ['lsfDisallowIncomingCheck'],\n        },\n      }\n\n      const { container } = render(\n        <TestWrapper>\n          <FlagsCard account={account} />\n        </TestWrapper>,\n      )\n\n      const flag = Array.from(container.querySelectorAll('.flag-item')).find(\n        (item) => item.textContent?.includes('Block Checks'),\n      )\n      expect(flag?.querySelector('.flag-status.enabled')).toBeInTheDocument()\n      expect(flag?.querySelector('.flag-status')).toHaveTextContent('Enabled')\n    })\n\n    it('shows lsfDisallowIncomingCheck as disabled when flag is not present', () => {\n      const account = {\n        info: {\n          flags: [],\n        },\n      }\n\n      const { container } = render(\n        <TestWrapper>\n          <FlagsCard account={account} />\n        </TestWrapper>,\n      )\n\n      const flag = Array.from(container.querySelectorAll('.flag-item')).find(\n        (item) => item.textContent?.includes('Block Checks'),\n      )\n      expect(flag?.querySelector('.flag-status.disabled')).toBeInTheDocument()\n      expect(flag?.querySelector('.flag-status')).toHaveTextContent('Disabled')\n    })\n\n    it('shows lsfDepositAuth as enabled when flag is present', () => {\n      const account = {\n        info: {\n          flags: ['lsfDepositAuth'],\n        },\n      }\n\n      const { container } = render(\n        <TestWrapper>\n          <FlagsCard account={account} />\n        </TestWrapper>,\n      )\n\n      const flag = Array.from(container.querySelectorAll('.flag-item')).find(\n        (item) =>\n          item.querySelector('.flag-title')?.textContent ===\n          'Deposit Authorization',\n      )\n      expect(flag?.querySelector('.flag-status.enabled')).toBeInTheDocument()\n      expect(flag?.querySelector('.flag-status')).toHaveTextContent('Enabled')\n    })\n\n    it('shows lsfDepositAuth as disabled when flag is not present', () => {\n      const account = {\n        info: {\n          flags: [],\n        },\n      }\n\n      const { container } = render(\n        <TestWrapper>\n          <FlagsCard account={account} />\n        </TestWrapper>,\n      )\n\n      const flag = Array.from(container.querySelectorAll('.flag-item')).find(\n        (item) =>\n          item.querySelector('.flag-title')?.textContent ===\n          'Deposit Authorization',\n      )\n      expect(flag?.querySelector('.flag-status.disabled')).toBeInTheDocument()\n      expect(flag?.querySelector('.flag-status')).toHaveTextContent('Disabled')\n    })\n\n    it('shows asfAccountTxnID as enabled when accountTransactionID field is present', () => {\n      const account = {\n        info: {\n          flags: [],\n          accountTransactionID: 'ABCD1234',\n        },\n      }\n\n      const { container } = render(\n        <TestWrapper>\n          <FlagsCard account={account} />\n        </TestWrapper>,\n      )\n\n      const flag = Array.from(container.querySelectorAll('.flag-item')).find(\n        (item) =>\n          item.textContent?.includes('Track Account Latest Transaction'),\n      )\n      expect(flag?.querySelector('.flag-status.enabled')).toBeInTheDocument()\n      expect(flag?.querySelector('.flag-status')).toHaveTextContent('Enabled')\n    })\n\n    it('shows asfAccountTxnID as disabled when accountTransactionID field is not present', () => {\n      const account = {\n        info: {\n          flags: [],\n        },\n      }\n\n      const { container } = render(\n        <TestWrapper>\n          <FlagsCard account={account} />\n        </TestWrapper>,\n      )\n\n      const flag = Array.from(container.querySelectorAll('.flag-item')).find(\n        (item) =>\n          item.textContent?.includes('Track Account Latest Transaction'),\n      )\n      expect(flag?.querySelector('.flag-status.disabled')).toBeInTheDocument()\n      expect(flag?.querySelector('.flag-status')).toHaveTextContent('Disabled')\n    })\n  })\n\n  describe('Multiple Flags', () => {\n    it('handles multiple flags enabled simultaneously', () => {\n      const account = {\n        info: {\n          flags: [\n            'lsfGlobalFreeze',\n            'lsfDefaultRipple',\n            'lsfRequireDestTag',\n            'lsfNoFreeze',\n          ],\n        },\n      }\n\n      const { container } = render(\n        <TestWrapper>\n          <FlagsCard account={account} />\n        </TestWrapper>,\n      )\n\n      const enabledFlags = container.querySelectorAll('.flag-status.enabled')\n      // At least 4 should be enabled (the ones we set)\n      // Note: Some inverted flags might also be enabled by default\n      expect(enabledFlags.length).toBeGreaterThanOrEqual(4)\n    })\n  })\n\n  describe('Flag Structure', () => {\n    it('each flag has non-empty title, description, and status', () => {\n      const account = {\n        info: {\n          flags: ['lsfGlobalFreeze'],\n        },\n      }\n\n      const { container } = render(\n        <TestWrapper>\n          <FlagsCard account={account} />\n        </TestWrapper>,\n      )\n\n      const flagItems = container.querySelectorAll('.flag-item')\n      flagItems.forEach((item) => {\n        // Each flag must have all three elements\n        const title = item.querySelector('.flag-title')\n        const desc = item.querySelector('.flag-desc')\n        const status = item.querySelector('.flag-status')\n\n        expect(title).toBeInTheDocument()\n        expect(desc).toBeInTheDocument()\n        expect(status).toBeInTheDocument()\n\n        // And none should be empty\n        expect(title?.textContent).not.toBe('')\n        expect(desc?.textContent).not.toBe('')\n        expect(status?.textContent).not.toBe('')\n      })\n    })\n  })\n\n  describe('Edge Cases', () => {\n    it('handles undefined flags array', () => {\n      const account = {\n        info: {},\n      }\n\n      const { container } = render(\n        <TestWrapper>\n          <FlagsCard account={account} />\n        </TestWrapper>,\n      )\n\n      expect(screen.getByText('Flags')).toBeInTheDocument()\n      const flagItems = container.querySelectorAll('.flag-item')\n      expect(flagItems.length).toBe(16)\n    })\n\n    it('handles missing info object', () => {\n      const account = {}\n\n      const { container } = render(\n        <TestWrapper>\n          <FlagsCard account={account} />\n        </TestWrapper>,\n      )\n\n      expect(screen.getByText('Flags')).toBeInTheDocument()\n      const flagItems = container.querySelectorAll('.flag-item')\n      expect(flagItems.length).toBe(16)\n    })\n\n    it('handles empty account object', () => {\n      const account = {\n        info: {\n          flags: [],\n        },\n      }\n\n      const { container } = render(\n        <TestWrapper>\n          <FlagsCard account={account} />\n        </TestWrapper>,\n      )\n\n      expect(screen.getByText('Flags')).toBeInTheDocument()\n      const flagItems = container.querySelectorAll('.flag-item')\n      expect(flagItems.length).toBe(16)\n    })\n  })\n})\n"
  },
  {
    "path": "src/containers/Accounts/AccountSummary/test/SignersCard.test.tsx",
    "content": "import { render, screen } from '@testing-library/react'\nimport { I18nextProvider } from 'react-i18next'\nimport { BrowserRouter as Router } from 'react-router'\nimport i18n from '../../../../i18n/testConfigEnglish'\nimport SignersCard from '../SignersCard'\n\n// Mock the Account component\njest.mock('../../../shared/components/Account', () => ({\n  Account: ({ account, displayText }: any) => (\n    <span data-testid={`account-${account}`}>{displayText || account}</span>\n  ),\n}))\n\nconst TestWrapper = ({ children }: { children: React.ReactNode }) => (\n  <I18nextProvider i18n={i18n}>\n    <Router>{children}</Router>\n  </I18nextProvider>\n)\n\ndescribe('SignersCard Component', () => {\n  describe('Rendering', () => {\n    it('renders the card with header', () => {\n      const signers = [{ account: 'rSigner1', weight: 1 }]\n\n      const { container } = render(\n        <TestWrapper>\n          <SignersCard signers={signers} />\n        </TestWrapper>,\n      )\n\n      expect(screen.getByText('Signers')).toBeInTheDocument()\n      expect(container.querySelector('.card-header')).toBeInTheDocument()\n      expect(container.querySelector('.header-title')).toBeInTheDocument()\n    })\n\n    it('renders a single signer', () => {\n      const signers = [{ account: 'rSigner', weight: 1 }]\n\n      const { container } = render(\n        <TestWrapper>\n          <SignersCard signers={signers} />\n        </TestWrapper>,\n      )\n\n      expect(screen.getByTestId('account-rSigner')).toBeInTheDocument()\n      const signerItems = container.querySelectorAll('.signer-item')\n      expect(signerItems.length).toBe(1)\n    })\n\n    it('renders multiple signers', () => {\n      const signers = [\n        { account: 'rSigner1', weight: 1 },\n        { account: 'rSigner2', weight: 2 },\n        { account: 'rSigner3', weight: 3 },\n      ]\n\n      const { container } = render(\n        <TestWrapper>\n          <SignersCard signers={signers} />\n        </TestWrapper>,\n      )\n\n      expect(screen.getByTestId('account-rSigner1')).toBeInTheDocument()\n      expect(screen.getByTestId('account-rSigner2')).toBeInTheDocument()\n      expect(screen.getByTestId('account-rSigner3')).toBeInTheDocument()\n      const signerItems = container.querySelectorAll('.signer-item')\n      expect(signerItems.length).toBe(3)\n    })\n  })\n\n  describe('Signer Weight', () => {\n    it('displays signer weight when present', () => {\n      const signers = [{ account: 'rSigner1', weight: 5 }]\n\n      render(\n        <TestWrapper>\n          <SignersCard signers={signers} />\n        </TestWrapper>,\n      )\n\n      expect(screen.getByText(/Weight/i)).toBeInTheDocument()\n      expect(screen.getByText(/5/)).toBeInTheDocument()\n    })\n\n    it('displays different weights for different signers', () => {\n      const signers = [\n        { account: 'rSigner1', weight: 1 },\n        { account: 'rSigner2', weight: 3 },\n        { account: 'rSigner3', weight: 5 },\n      ]\n\n      render(\n        <TestWrapper>\n          <SignersCard signers={signers} />\n        </TestWrapper>,\n      )\n\n      expect(screen.getByText(/Weight.*1/)).toBeInTheDocument()\n      expect(screen.getByText(/Weight.*3/)).toBeInTheDocument()\n      expect(screen.getByText(/Weight.*5/)).toBeInTheDocument()\n    })\n\n    it('does not display weight when undefined', () => {\n      const signers = [{ account: 'rSigner1' }]\n\n      const { container } = render(\n        <TestWrapper>\n          <SignersCard signers={signers} />\n        </TestWrapper>,\n      )\n\n      expect(container.querySelector('.signer-weight')).not.toBeInTheDocument()\n    })\n\n    it('displays weight of zero', () => {\n      const signers = [{ account: 'rSigner1', weight: 0 }]\n\n      render(\n        <TestWrapper>\n          <SignersCard signers={signers} />\n        </TestWrapper>,\n      )\n\n      expect(screen.getByText(/Weight.*0/)).toBeInTheDocument()\n    })\n  })\n\n  describe('Account Display', () => {\n    it('uses shortened account address for display', () => {\n      const longAccount = 'rN7n7otQDd6FczFgLdSqtcsAUxDkw6fzRH'\n      const signers = [{ account: longAccount, weight: 1 }]\n\n      render(\n        <TestWrapper>\n          <SignersCard signers={signers} />\n        </TestWrapper>,\n      )\n\n      // Should show shortened version: 7 chars...5 chars\n      expect(screen.getByText(/rN7n7ot.*6fzRH/)).toBeInTheDocument()\n    })\n  })\n\n  describe('Edge Cases', () => {\n    it('handles empty signers array', () => {\n      const signers: any[] = []\n\n      const { container } = render(\n        <TestWrapper>\n          <SignersCard signers={signers} />\n        </TestWrapper>,\n      )\n\n      const signerItems = container.querySelectorAll('.signer-item')\n      expect(signerItems.length).toBe(0)\n    })\n\n    it('uses index as key when account is missing', () => {\n      const signers = [{ weight: 1 } as any, { weight: 2 } as any]\n\n      const { container } = render(\n        <TestWrapper>\n          <SignersCard signers={signers} />\n        </TestWrapper>,\n      )\n\n      const signerItems = container.querySelectorAll('.signer-item')\n      expect(signerItems.length).toBe(2)\n    })\n\n    it('handles very large weights', () => {\n      const signers = [{ account: 'rSigner1', weight: 999999 }]\n\n      render(\n        <TestWrapper>\n          <SignersCard signers={signers} />\n        </TestWrapper>,\n      )\n\n      expect(screen.getByText(/999,999/)).toBeInTheDocument()\n    })\n\n    it('handles mix of signers with and without weights', () => {\n      const signers = [\n        { account: 'rSigner1', weight: 1 },\n        { account: 'rSigner2' },\n        { account: 'rSigner3', weight: 3 },\n      ]\n\n      const { container } = render(\n        <TestWrapper>\n          <SignersCard signers={signers} />\n        </TestWrapper>,\n      )\n\n      const weights = container.querySelectorAll('.signer-weight')\n      expect(weights.length).toBe(2) // Only two signers have weights\n    })\n  })\n\n  describe('List Structure', () => {\n    it('contains signers-list container', () => {\n      const signers = [{ account: 'rSigner1', weight: 1 }]\n\n      const { container } = render(\n        <TestWrapper>\n          <SignersCard signers={signers} />\n        </TestWrapper>,\n      )\n\n      expect(container.querySelector('.signers-list')).toBeInTheDocument()\n    })\n\n    it('each signer has signer-address element', () => {\n      const signers = [\n        { account: 'rSigner1', weight: 1 },\n        { account: 'rSigner2', weight: 2 },\n      ]\n\n      const { container } = render(\n        <TestWrapper>\n          <SignersCard signers={signers} />\n        </TestWrapper>,\n      )\n\n      const addresses = container.querySelectorAll('.signer-address')\n      expect(addresses.length).toBe(2)\n    })\n  })\n})\n"
  },
  {
    "path": "src/containers/Accounts/AccountTransactionTable/AccountTransactionTable.tsx",
    "content": "import { useContext } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { useInfiniteQuery } from 'react-query'\n\nimport { TransactionTable } from '../../shared/components/TransactionTable/TransactionTable'\nimport { useAnalytics } from '../../shared/analytics'\nimport SocketContext from '../../shared/SocketContext'\n\nimport { getAccountTransactions } from '../../../rippled'\nimport './styles.scss'\n\nexport interface AccountTransactionsTableProps {\n  accountId: string\n  hasTokensColumn: boolean\n}\n\nexport const AccountTransactionTable = ({\n  accountId,\n  hasTokensColumn,\n}: AccountTransactionsTableProps) => {\n  const { t } = useTranslation()\n  const { trackException } = useAnalytics()\n  const rippledSocket = useContext(SocketContext)\n\n  const {\n    data,\n    error,\n    isFetching: loading,\n    fetchNextPage,\n    hasNextPage,\n  } = useInfiniteQuery<any, Error>(\n    ['fetchTransactions', accountId],\n    ({ pageParam = '' }) =>\n      getAccountTransactions(\n        accountId,\n        undefined,\n        pageParam,\n        undefined,\n        rippledSocket,\n      ).catch((errorResponse) => {\n        const errorLocation = `account transactions ${accountId} at ${pageParam}`\n        trackException(`${errorLocation} --- ${JSON.stringify(errorResponse)}`)\n\n        throw new Error('get_account_transactions_failed')\n      }),\n    {\n      getNextPageParam: (lastPage) => lastPage.marker,\n    },\n  )\n\n  const transactions =\n    data?.pages?.reduce(\n      (allTransactions: any[], page: any) =>\n        page.transactions\n          ? allTransactions.concat(page.transactions)\n          : allTransactions,\n      [],\n    ) || []\n\n  const tryLoading = transactions.length === 0 && data?.pages[0]?.transactions\n  const emptyMessage = tryLoading\n    ? 'get_account_transactions_try'\n    : error?.message\n  return (\n    <div className=\"transactions-section\">\n      <div className=\"transactions-header\">\n        <h3>{t('transactions')}</h3>\n      </div>\n      <TransactionTable\n        transactions={transactions}\n        loading={loading}\n        hasTokensColumn={hasTokensColumn}\n        emptyMessage={emptyMessage && t(emptyMessage as any)}\n        onLoadMore={() => fetchNextPage()}\n        hasAdditionalResults={hasNextPage}\n      />\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/Accounts/AccountTransactionTable/index.ts",
    "content": "export * from './AccountTransactionTable'\n"
  },
  {
    "path": "src/containers/Accounts/AccountTransactionTable/styles.scss",
    "content": "@use '../../shared/css/variables' as *;\n\n.transactions-header {\n  @include bold;\n\n  font-size: 20px;\n}\n\n@media (max-width: $tablet-portrait-upper-boundary) {\n  .transactions-header {\n    font-size: 18px;\n  }\n}\n"
  },
  {
    "path": "src/containers/Accounts/AccountTransactionTable/test/AccountTransactionTable.test.tsx",
    "content": "import { render, waitFor } from '@testing-library/react'\nimport userEvent from '@testing-library/user-event'\nimport i18n from '../../../../i18n/testConfig'\nimport { AccountTransactionTable } from '../index'\nimport TEST_TRANSACTIONS_DATA from './mockTransactions.json'\nimport { getAccountTransactions } from '../../../../rippled'\nimport { flushPromises, QuickHarness } from '../../../test/utils'\nimport Mock = jest.Mock\n\njest.mock('../../../../rippled', () => ({\n  __esModule: true,\n  getAccountTransactions: jest.fn(),\n}))\n\nconst TEST_ACCOUNT_ID = 'rTEST_ACCOUNT'\n\ndescribe('AccountTransactionsTable container', () => {\n  beforeEach(() => {\n    jest.resetModules()\n  })\n\n  const renderComponent = (\n    getAccountTransactionsImpl: () => Promise<any> = () =>\n      new Promise(() => {}),\n    state = { hasToken: false },\n  ) => {\n    ;(getAccountTransactions as Mock).mockImplementation(\n      getAccountTransactionsImpl,\n    )\n    return render(\n      <QuickHarness i18n={i18n}>\n        <AccountTransactionTable\n          accountId={TEST_ACCOUNT_ID}\n          hasTokensColumn={state.hasToken}\n        />\n      </QuickHarness>,\n    )\n  }\n\n  it('renders static parts', () => {\n    const { container } = renderComponent()\n    expect(container.querySelector('.transaction-table')).toBeInTheDocument()\n  })\n\n  it('renders loader when fetching data', () => {\n    const { container } = renderComponent()\n    expect(container.querySelector('.loader')).toBeInTheDocument()\n  })\n\n  it('renders dynamic content with transaction data', async () => {\n    const { container } = renderComponent(() =>\n      Promise.resolve(TEST_TRANSACTIONS_DATA),\n    )\n\n    await flushPromises()\n\n    await waitFor(() => {\n      expect(container.querySelector('.load-more-btn')).toBeInTheDocument()\n    })\n    expect(container.querySelector('.col-token')).not.toBeInTheDocument()\n    expect(container.querySelector('.transaction-table')).toBeInTheDocument()\n    expect(\n      container.querySelector('.transaction-li.transaction-li-header'),\n    ).toBeInTheDocument()\n    expect(container.querySelectorAll('a')).toHaveLength(60)\n\n    await userEvent.click(container.querySelector('.load-more-btn')!)\n    expect(getAccountTransactions).toHaveBeenCalledWith(\n      TEST_ACCOUNT_ID,\n      undefined,\n      '44922483.5',\n      undefined,\n      undefined,\n    )\n  })\n\n  it('renders error message when request fails', async () => {\n    const { container } = renderComponent(() => Promise.reject())\n\n    await flushPromises()\n\n    await waitFor(() => {\n      expect(container.querySelector('.transaction-table')).toBeInTheDocument()\n      expect(\n        container.querySelector('.empty-transactions-message'),\n      ).toHaveTextContent('get_account_transactions_failed')\n      expect(container.querySelectorAll('a')).toHaveLength(0)\n    })\n  })\n\n  it('renders dynamic content with transaction data and token column', async () => {\n    const { container } = renderComponent(\n      () => Promise.resolve(TEST_TRANSACTIONS_DATA),\n      { hasToken: true },\n    )\n\n    await flushPromises()\n\n    await waitFor(() => {\n      expect(container.querySelectorAll('.col-token').length).toBeGreaterThan(0)\n      expect(container.querySelector('.load-more-btn')).toBeInTheDocument()\n    })\n    expect(container.querySelector('.transaction-table')).toBeInTheDocument()\n    expect(\n      container.querySelector('.transaction-li.transaction-li-header'),\n    ).toBeInTheDocument()\n    expect(container.querySelectorAll('a')).toHaveLength(60)\n\n    await userEvent.click(container.querySelector('.load-more-btn')!)\n    expect(getAccountTransactions).toHaveBeenCalledWith(\n      TEST_ACCOUNT_ID,\n      undefined,\n      '44922483.5',\n      undefined,\n      undefined,\n    )\n  })\n\n  it('renders error message when request fails with token column', async () => {\n    const { container } = renderComponent(() => Promise.reject())\n\n    await flushPromises()\n\n    await waitFor(() => {\n      expect(container.querySelector('.transaction-table')).toBeInTheDocument()\n      expect(\n        container.querySelector('.empty-transactions-message'),\n      ).toHaveTextContent('get_account_transactions_failed')\n      expect(container.querySelectorAll('a')).toHaveLength(0)\n    })\n  })\n})\n"
  },
  {
    "path": "src/containers/Accounts/AccountTransactionTable/test/mockTransactions.json",
    "content": "{\n  \"transactions\": [\n    {\n      \"hash\": \"3247F0D70D9F241E58AA354B18B58175A466D16937CB3FE30FCD8D4027FAD850\",\n      \"type\": \"OfferCreate\",\n      \"result\": \"tesSUCCESS\",\n      \"account\": \"rENDnFwR3CPvrsPjD9XXeqVoXeVt2CpPWX\",\n      \"index\": 11,\n      \"fee\": 0.0105,\n      \"sequence\": 23906569,\n      \"date\": \"2019-02-08T15:42:11Z\",\n      \"details\": {\n        \"instructions\": {\n          \"gets\": {\n            \"currency\": \"USD\",\n            \"issuer\": \"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B\",\n            \"amount\": 3865.40088\n          },\n          \"pays\": {\n            \"currency\": \"XRP\",\n            \"amount\": 13450\n          },\n          \"price\": \"0.287390\",\n          \"firstCurrency\": {\n            \"currency\": \"XRP\"\n          },\n          \"secondCurrency\": {\n            \"currency\": \"USD\",\n            \"issuer\": \"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B\"\n          }\n        }\n      }\n    },\n    {\n      \"hash\": \"3A23B3813BC69287085E2E617AD7647FE2ECD21D1965DFE559E286EAFD946F5F\",\n      \"type\": \"OfferCreate\",\n      \"result\": \"tesSUCCESS\",\n      \"account\": \"rHj9CUz5Nkz57dzBiymKyxCY8UjppjwPAZ\",\n      \"index\": 4,\n      \"fee\": 0.000012,\n      \"sequence\": 2068714,\n      \"date\": \"2019-02-05T21:37:12Z\",\n      \"details\": {\n        \"instructions\": {\n          \"gets\": {\n            \"currency\": \"XRP\",\n            \"amount\": 6262.878992\n          },\n          \"pays\": {\n            \"currency\": \"USD\",\n            \"issuer\": \"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B\",\n            \"amount\": 1878.6976023515\n          },\n          \"price\": \"0.299973\",\n          \"firstCurrency\": {\n            \"currency\": \"XRP\"\n          },\n          \"secondCurrency\": {\n            \"currency\": \"USD\",\n            \"issuer\": \"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B\"\n          },\n          \"cancel\": 2068713\n        }\n      }\n    },\n    {\n      \"hash\": \"14B9395AEEE9E852643F594CB2A2EBEFEB8AA30F6BBC56BA5032F25E493A16F4\",\n      \"type\": \"OfferCreate\",\n      \"result\": \"tesSUCCESS\",\n      \"account\": \"rHj9CUz5Nkz57dzBiymKyxCY8UjppjwPAZ\",\n      \"index\": 4,\n      \"fee\": 0.000012,\n      \"sequence\": 2068713,\n      \"date\": \"2019-02-05T21:36:50Z\",\n      \"details\": {\n        \"instructions\": {\n          \"gets\": {\n            \"currency\": \"XRP\",\n            \"amount\": 6262.879004\n          },\n          \"pays\": {\n            \"currency\": \"USD\",\n            \"issuer\": \"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B\",\n            \"amount\": 1879.10009047646\n          },\n          \"price\": \"0.300038\",\n          \"firstCurrency\": {\n            \"currency\": \"XRP\"\n          },\n          \"secondCurrency\": {\n            \"currency\": \"USD\",\n            \"issuer\": \"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B\"\n          },\n          \"cancel\": 2068712\n        }\n      }\n    },\n    {\n      \"hash\": \"4EA4B4E19F094639A1B3A3BCCB0081798454A2467C88CC3E922543A5705D0E5B\",\n      \"type\": \"OfferCreate\",\n      \"result\": \"tesSUCCESS\",\n      \"account\": \"rHj9CUz5Nkz57dzBiymKyxCY8UjppjwPAZ\",\n      \"index\": 10,\n      \"fee\": 0.000012,\n      \"sequence\": 2068712,\n      \"date\": \"2019-02-05T21:36:12Z\",\n      \"details\": {\n        \"instructions\": {\n          \"gets\": {\n            \"currency\": \"XRP\",\n            \"amount\": 6262.879016\n          },\n          \"pays\": {\n            \"currency\": \"USD\",\n            \"issuer\": \"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B\",\n            \"amount\": 1879.10009407692\n          },\n          \"price\": \"0.300038\",\n          \"firstCurrency\": {\n            \"currency\": \"XRP\"\n          },\n          \"secondCurrency\": {\n            \"currency\": \"USD\",\n            \"issuer\": \"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B\"\n          },\n          \"cancel\": 2068711\n        }\n      }\n    },\n    {\n      \"hash\": \"59A73A07268CFDAE15203BE2511C1E335BF25B2AC0FCB8B9038FBBB1C8D86F98\",\n      \"type\": \"OfferCreate\",\n      \"result\": \"tesSUCCESS\",\n      \"account\": \"rHj9CUz5Nkz57dzBiymKyxCY8UjppjwPAZ\",\n      \"index\": 12,\n      \"fee\": 0.000012,\n      \"sequence\": 2068711,\n      \"date\": \"2019-02-05T21:35:50Z\",\n      \"details\": {\n        \"instructions\": {\n          \"gets\": {\n            \"currency\": \"XRP\",\n            \"amount\": 6262.879028\n          },\n          \"pays\": {\n            \"currency\": \"USD\",\n            \"issuer\": \"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B\",\n            \"amount\": 1879.10009767737\n          },\n          \"price\": \"0.300038\",\n          \"firstCurrency\": {\n            \"currency\": \"XRP\"\n          },\n          \"secondCurrency\": {\n            \"currency\": \"USD\",\n            \"issuer\": \"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B\"\n          },\n          \"cancel\": 2068710\n        }\n      }\n    },\n    {\n      \"hash\": \"A6344944C618693BAC684C022F5031746277E48C433E0286358F5FC7F8AFB217\",\n      \"type\": \"OfferCreate\",\n      \"result\": \"tesSUCCESS\",\n      \"account\": \"rHj9CUz5Nkz57dzBiymKyxCY8UjppjwPAZ\",\n      \"index\": 5,\n      \"fee\": 0.000012,\n      \"sequence\": 2068710,\n      \"date\": \"2019-02-05T21:35:12Z\",\n      \"details\": {\n        \"instructions\": {\n          \"gets\": {\n            \"currency\": \"XRP\",\n            \"amount\": 6262.87904\n          },\n          \"pays\": {\n            \"currency\": \"USD\",\n            \"issuer\": \"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B\",\n            \"amount\": 1879.10010127782\n          },\n          \"price\": \"0.300038\",\n          \"firstCurrency\": {\n            \"currency\": \"XRP\"\n          },\n          \"secondCurrency\": {\n            \"currency\": \"USD\",\n            \"issuer\": \"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B\"\n          },\n          \"cancel\": 2068709\n        }\n      }\n    },\n    {\n      \"hash\": \"CC65AE898497B495A79C28820AEED4D2FC31B7B3C8D0BE497976F05E24A132C3\",\n      \"type\": \"OfferCreate\",\n      \"result\": \"tesSUCCESS\",\n      \"account\": \"rHj9CUz5Nkz57dzBiymKyxCY8UjppjwPAZ\",\n      \"index\": 0,\n      \"fee\": 0.000012,\n      \"sequence\": 2068709,\n      \"date\": \"2019-02-05T21:34:50Z\",\n      \"details\": {\n        \"instructions\": {\n          \"gets\": {\n            \"currency\": \"XRP\",\n            \"amount\": 6262.879052\n          },\n          \"pays\": {\n            \"currency\": \"USD\",\n            \"issuer\": \"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B\",\n            \"amount\": 1879.13179564093\n          },\n          \"price\": \"0.300043\",\n          \"firstCurrency\": {\n            \"currency\": \"XRP\"\n          },\n          \"secondCurrency\": {\n            \"currency\": \"USD\",\n            \"issuer\": \"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B\"\n          },\n          \"cancel\": 2068708\n        }\n      }\n    },\n    {\n      \"hash\": \"7BCD225D2887AFCC2BD21DFC6B47129B0AE259B4F1D39C5EB9BB53D56CF8E8B8\",\n      \"type\": \"OfferCreate\",\n      \"result\": \"tesSUCCESS\",\n      \"account\": \"rHj9CUz5Nkz57dzBiymKyxCY8UjppjwPAZ\",\n      \"index\": 12,\n      \"fee\": 0.000012,\n      \"sequence\": 2068708,\n      \"date\": \"2019-02-05T21:34:12Z\",\n      \"details\": {\n        \"instructions\": {\n          \"gets\": {\n            \"currency\": \"XRP\",\n            \"amount\": 6262.879064\n          },\n          \"pays\": {\n            \"currency\": \"USD\",\n            \"issuer\": \"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B\",\n            \"amount\": 1879.54361824799\n          },\n          \"price\": \"0.300109\",\n          \"firstCurrency\": {\n            \"currency\": \"XRP\"\n          },\n          \"secondCurrency\": {\n            \"currency\": \"USD\",\n            \"issuer\": \"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B\"\n          },\n          \"cancel\": 2068707\n        }\n      }\n    },\n    {\n      \"hash\": \"4EA62D0D6EBFB79218590403F4C3DA218FB3B69F4E5FFBC836267F3E630FC0D1\",\n      \"type\": \"OfferCreate\",\n      \"result\": \"tesSUCCESS\",\n      \"account\": \"rHj9CUz5Nkz57dzBiymKyxCY8UjppjwPAZ\",\n      \"index\": 6,\n      \"fee\": 0.000012,\n      \"sequence\": 2068707,\n      \"date\": \"2019-02-05T21:33:42Z\",\n      \"details\": {\n        \"instructions\": {\n          \"gets\": {\n            \"currency\": \"XRP\",\n            \"amount\": 6262.879076\n          },\n          \"pays\": {\n            \"currency\": \"USD\",\n            \"issuer\": \"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B\",\n            \"amount\": 1879.54362184929\n          },\n          \"price\": \"0.300109\",\n          \"firstCurrency\": {\n            \"currency\": \"XRP\"\n          },\n          \"secondCurrency\": {\n            \"currency\": \"USD\",\n            \"issuer\": \"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B\"\n          },\n          \"cancel\": 2068706\n        }\n      }\n    },\n    {\n      \"hash\": \"EA0361D428BB7596599E628ED63763A067A92CADC059DA53EDA8596CBA2103BF\",\n      \"type\": \"OfferCreate\",\n      \"result\": \"tesSUCCESS\",\n      \"account\": \"rHj9CUz5Nkz57dzBiymKyxCY8UjppjwPAZ\",\n      \"index\": 9,\n      \"fee\": 0.000012,\n      \"sequence\": 2068706,\n      \"date\": \"2019-02-05T21:33:11Z\",\n      \"details\": {\n        \"instructions\": {\n          \"gets\": {\n            \"currency\": \"XRP\",\n            \"amount\": 6262.879088\n          },\n          \"pays\": {\n            \"currency\": \"USD\",\n            \"issuer\": \"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B\",\n            \"amount\": 1879.54362545059\n          },\n          \"price\": \"0.300109\",\n          \"firstCurrency\": {\n            \"currency\": \"XRP\"\n          },\n          \"secondCurrency\": {\n            \"currency\": \"USD\",\n            \"issuer\": \"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B\"\n          },\n          \"cancel\": 2068705\n        }\n      }\n    },\n    {\n      \"hash\": \"A5B54247D1A23EC0BB806FFFCE955491CBE5B4C9B3EB64813AD7B882588221D7\",\n      \"type\": \"OfferCreate\",\n      \"result\": \"tesSUCCESS\",\n      \"account\": \"rHj9CUz5Nkz57dzBiymKyxCY8UjppjwPAZ\",\n      \"index\": 1,\n      \"fee\": 0.000012,\n      \"sequence\": 2068705,\n      \"date\": \"2019-02-05T21:32:50Z\",\n      \"details\": {\n        \"instructions\": {\n          \"gets\": {\n            \"currency\": \"XRP\",\n            \"amount\": 6262.8791\n          },\n          \"pays\": {\n            \"currency\": \"USD\",\n            \"issuer\": \"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B\",\n            \"amount\": 1879.5436290519\n          },\n          \"price\": \"0.300109\",\n          \"firstCurrency\": {\n            \"currency\": \"XRP\"\n          },\n          \"secondCurrency\": {\n            \"currency\": \"USD\",\n            \"issuer\": \"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B\"\n          },\n          \"cancel\": 2068704\n        }\n      }\n    },\n    {\n      \"hash\": \"DCB4396B1BC5DF518D0039FD652E4A7E21E9B3BE14B902223BBFAA286BC9E1D4\",\n      \"type\": \"OfferCreate\",\n      \"result\": \"tesSUCCESS\",\n      \"account\": \"rHj9CUz5Nkz57dzBiymKyxCY8UjppjwPAZ\",\n      \"index\": 6,\n      \"fee\": 0.000012,\n      \"sequence\": 2068704,\n      \"date\": \"2019-02-05T21:32:20Z\",\n      \"details\": {\n        \"instructions\": {\n          \"gets\": {\n            \"currency\": \"XRP\",\n            \"amount\": 6262.879112\n          },\n          \"pays\": {\n            \"currency\": \"USD\",\n            \"issuer\": \"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B\",\n            \"amount\": 1879.95574978003\n          },\n          \"price\": \"0.300174\",\n          \"firstCurrency\": {\n            \"currency\": \"XRP\"\n          },\n          \"secondCurrency\": {\n            \"currency\": \"USD\",\n            \"issuer\": \"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B\"\n          },\n          \"cancel\": 2068703\n        }\n      }\n    },\n    {\n      \"hash\": \"7650430669A544735AA241B51329C9F83F8345BD1A30A919CF7F1DC07896C86B\",\n      \"type\": \"OfferCreate\",\n      \"result\": \"tesSUCCESS\",\n      \"account\": \"rHj9CUz5Nkz57dzBiymKyxCY8UjppjwPAZ\",\n      \"index\": 0,\n      \"fee\": 0.000012,\n      \"sequence\": 2068703,\n      \"date\": \"2019-02-05T21:31:42Z\",\n      \"details\": {\n        \"instructions\": {\n          \"gets\": {\n            \"currency\": \"XRP\",\n            \"amount\": 6262.879124\n          },\n          \"pays\": {\n            \"currency\": \"USD\",\n            \"issuer\": \"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B\",\n            \"amount\": 1879.54377656814\n          },\n          \"price\": \"0.300109\",\n          \"firstCurrency\": {\n            \"currency\": \"XRP\"\n          },\n          \"secondCurrency\": {\n            \"currency\": \"USD\",\n            \"issuer\": \"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B\"\n          },\n          \"cancel\": 2068702\n        }\n      }\n    },\n    {\n      \"hash\": \"78B5AA069348685F905B2CE9F7C7C442BADA49809F0F9DE0B733106702037B73\",\n      \"type\": \"OfferCreate\",\n      \"result\": \"tesSUCCESS\",\n      \"account\": \"rHj9CUz5Nkz57dzBiymKyxCY8UjppjwPAZ\",\n      \"index\": 10,\n      \"fee\": 0.000012,\n      \"sequence\": 2068702,\n      \"date\": \"2019-02-05T21:31:12Z\",\n      \"details\": {\n        \"instructions\": {\n          \"gets\": {\n            \"currency\": \"XRP\",\n            \"amount\": 6262.879136\n          },\n          \"pays\": {\n            \"currency\": \"USD\",\n            \"issuer\": \"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B\",\n            \"amount\": 1879.53443693073\n          },\n          \"price\": \"0.300107\",\n          \"firstCurrency\": {\n            \"currency\": \"XRP\"\n          },\n          \"secondCurrency\": {\n            \"currency\": \"USD\",\n            \"issuer\": \"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B\"\n          },\n          \"cancel\": 2068701\n        }\n      }\n    },\n    {\n      \"hash\": \"B7BFFB364EF40F73505AEC9A46FCB6F17E758356CD0F35C728AF76882B9B46C7\",\n      \"type\": \"OfferCreate\",\n      \"result\": \"tesSUCCESS\",\n      \"account\": \"rHj9CUz5Nkz57dzBiymKyxCY8UjppjwPAZ\",\n      \"index\": 7,\n      \"fee\": 0.000012,\n      \"sequence\": 2068701,\n      \"date\": \"2019-02-05T21:30:42Z\",\n      \"details\": {\n        \"instructions\": {\n          \"gets\": {\n            \"currency\": \"XRP\",\n            \"amount\": 6262.879148\n          },\n          \"pays\": {\n            \"currency\": \"USD\",\n            \"issuer\": \"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B\",\n            \"amount\": 1876.9546384819\n          },\n          \"price\": \"0.299695\",\n          \"firstCurrency\": {\n            \"currency\": \"XRP\"\n          },\n          \"secondCurrency\": {\n            \"currency\": \"USD\",\n            \"issuer\": \"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B\"\n          },\n          \"cancel\": 2068700\n        }\n      }\n    },\n    {\n      \"hash\": \"F9C475EE71EC3E0F9B44670E081CBCEE8FDDCB0E931904A3A9AB2183CE3B358F\",\n      \"type\": \"OfferCreate\",\n      \"result\": \"tesSUCCESS\",\n      \"account\": \"rHj9CUz5Nkz57dzBiymKyxCY8UjppjwPAZ\",\n      \"index\": 11,\n      \"fee\": 0.000012,\n      \"sequence\": 2068700,\n      \"date\": \"2019-02-05T21:30:12Z\",\n      \"details\": {\n        \"instructions\": {\n          \"gets\": {\n            \"currency\": \"XRP\",\n            \"amount\": 6262.87916\n          },\n          \"pays\": {\n            \"currency\": \"USD\",\n            \"issuer\": \"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B\",\n            \"amount\": 1876.94521140099\n          },\n          \"price\": \"0.299694\",\n          \"firstCurrency\": {\n            \"currency\": \"XRP\"\n          },\n          \"secondCurrency\": {\n            \"currency\": \"USD\",\n            \"issuer\": \"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B\"\n          },\n          \"cancel\": 2068699\n        }\n      }\n    },\n    {\n      \"hash\": \"DBB403BDB3C03EF8BC4182611B37372D81D94C28F7D05D4B455099135A8ABCBE\",\n      \"type\": \"OfferCreate\",\n      \"result\": \"tesSUCCESS\",\n      \"account\": \"rHj9CUz5Nkz57dzBiymKyxCY8UjppjwPAZ\",\n      \"index\": 11,\n      \"fee\": 0.000012,\n      \"sequence\": 2068699,\n      \"date\": \"2019-02-05T21:29:42Z\",\n      \"details\": {\n        \"instructions\": {\n          \"gets\": {\n            \"currency\": \"XRP\",\n            \"amount\": 6262.879172\n          },\n          \"pays\": {\n            \"currency\": \"USD\",\n            \"issuer\": \"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B\",\n            \"amount\": 1876.94521499731\n          },\n          \"price\": \"0.299694\",\n          \"firstCurrency\": {\n            \"currency\": \"XRP\"\n          },\n          \"secondCurrency\": {\n            \"currency\": \"USD\",\n            \"issuer\": \"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B\"\n          },\n          \"cancel\": 2068698\n        }\n      }\n    },\n    {\n      \"hash\": \"80F5F46F46E647BBCF0CB17C2C733BF23CF0ACF5FD2A218AC75B10245F65FAC9\",\n      \"type\": \"OfferCreate\",\n      \"result\": \"tesSUCCESS\",\n      \"account\": \"rHj9CUz5Nkz57dzBiymKyxCY8UjppjwPAZ\",\n      \"index\": 12,\n      \"fee\": 0.000012,\n      \"sequence\": 2068698,\n      \"date\": \"2019-02-05T21:29:20Z\",\n      \"details\": {\n        \"instructions\": {\n          \"gets\": {\n            \"currency\": \"XRP\",\n            \"amount\": 6262.879184\n          },\n          \"pays\": {\n            \"currency\": \"USD\",\n            \"issuer\": \"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B\",\n            \"amount\": 1876.94521859364\n          },\n          \"price\": \"0.299694\",\n          \"firstCurrency\": {\n            \"currency\": \"XRP\"\n          },\n          \"secondCurrency\": {\n            \"currency\": \"USD\",\n            \"issuer\": \"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B\"\n          },\n          \"cancel\": 2068697\n        }\n      }\n    },\n    {\n      \"hash\": \"1E38285ED0FE67CED7D2065D532A1EA42E62C57E2CF4E99204406596E6A5BB29\",\n      \"type\": \"OfferCreate\",\n      \"result\": \"tesSUCCESS\",\n      \"account\": \"rHj9CUz5Nkz57dzBiymKyxCY8UjppjwPAZ\",\n      \"index\": 10,\n      \"fee\": 0.000012,\n      \"sequence\": 2068697,\n      \"date\": \"2019-02-05T21:28:42Z\",\n      \"details\": {\n        \"instructions\": {\n          \"gets\": {\n            \"currency\": \"XRP\",\n            \"amount\": 6262.879196\n          },\n          \"pays\": {\n            \"currency\": \"USD\",\n            \"issuer\": \"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B\",\n            \"amount\": 1876.91353188456\n          },\n          \"price\": \"0.299689\",\n          \"firstCurrency\": {\n            \"currency\": \"XRP\"\n          },\n          \"secondCurrency\": {\n            \"currency\": \"USD\",\n            \"issuer\": \"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B\"\n          },\n          \"cancel\": 2068696\n        }\n      }\n    },\n    {\n      \"hash\": \"EBAE468672FB083DC6A49EDCE853A9F65903FB2B3E7AC0498378C3B6BB542811\",\n      \"type\": \"OfferCreate\",\n      \"result\": \"tesSUCCESS\",\n      \"account\": \"rHj9CUz5Nkz57dzBiymKyxCY8UjppjwPAZ\",\n      \"index\": 2,\n      \"fee\": 0.000012,\n      \"sequence\": 2068696,\n      \"date\": \"2019-02-05T21:28:20Z\",\n      \"details\": {\n        \"instructions\": {\n          \"gets\": {\n            \"currency\": \"XRP\",\n            \"amount\": 6262.879208\n          },\n          \"pays\": {\n            \"currency\": \"USD\",\n            \"issuer\": \"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B\",\n            \"amount\": 1876.91353548082\n          },\n          \"price\": \"0.299689\",\n          \"firstCurrency\": {\n            \"currency\": \"XRP\"\n          },\n          \"secondCurrency\": {\n            \"currency\": \"USD\",\n            \"issuer\": \"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B\"\n          },\n          \"cancel\": 2068695\n        }\n      }\n    }\n  ],\n  \"marker\": \"44922483.5\"\n}\n"
  },
  {
    "path": "src/containers/Accounts/AccountTransactionTable/test/successfulAccountTx.json",
    "content": "{\n  \"result\": {\n    \"account\": \"rDsbeomae4FXwgQTJp9Rs64Qg9vDiTCdBv\",\n    \"limit\": 0,\n    \"transactions\": [\n      {\n        \"meta\": {\n          \"AffectedNodes\": [\n            {\n              \"ModifiedNode\": {\n                \"FinalFields\": {\n                  \"Account\": \"rPPbi1iNXmvY9HmJ9sH9g4gxvgVEfN4NaZ\",\n                  \"Balance\": \"316010893320\",\n                  \"Flags\": 0,\n                  \"OwnerCount\": 0,\n                  \"Sequence\": 57083165\n                },\n                \"LedgerEntryType\": \"AccountRoot\",\n                \"LedgerIndex\": \"1991E4EF8C9693AFFC9E200D112DFAD12449444CD8685FF859199B63B7C22341\",\n                \"PreviousFields\": {\n                  \"Balance\": \"316014663320\",\n                  \"Sequence\": 57083164\n                },\n                \"PreviousTxnID\": \"ADD23A6189E86A345821A1FBC7A076A677E08947D9D09856E2BD2A8B5D2CF751\",\n                \"PreviousTxnLgrSeq\": 68995185\n              }\n            },\n            {\n              \"ModifiedNode\": {\n                \"FinalFields\": {\n                  \"Account\": \"rBWpYJhuJWBPAkzJ4kYQqHShSkkF3rgeD\",\n                  \"Balance\": \"23750000\",\n                  \"Flags\": 131072,\n                  \"OwnerCount\": 0,\n                  \"Sequence\": 199377\n                },\n                \"LedgerEntryType\": \"AccountRoot\",\n                \"LedgerIndex\": \"96F9BDDED4A0E0F33AD1B28CC202B0E8FA357F3FC8EB2F716FE25B49B9BBA7FA\",\n                \"PreviousFields\": {\n                  \"Balance\": \"20000000\"\n                },\n                \"PreviousTxnID\": \"3832CD380B8EF414B3504FC63B5B3A28EC24284183E8E759985A657710559847\",\n                \"PreviousTxnLgrSeq\": 68995265\n              }\n            }\n          ],\n          \"TransactionIndex\": 54,\n          \"TransactionResult\": \"tesSUCCESS\",\n          \"delivered_amount\": \"3750000\"\n        },\n        \"tx\": {\n          \"Account\": \"rPPbi1iNXmvY9HmJ9sH9g4gxvgVEfN4NaZ\",\n          \"Amount\": \"3750000\",\n          \"Destination\": \"rBWpYJhuJWBPAkzJ4kYQqHShSkkF3rgeD\",\n          \"DestinationTag\": 2471596944,\n          \"Fee\": \"20000\",\n          \"Flags\": 2147483648,\n          \"LastLedgerSequence\": 68995327,\n          \"Sequence\": 57083164,\n          \"SigningPubKey\": \"02CA41BA17A2CDE0E5B7BEA8FC97CA0E9A196DCD5F524E4CA44F1C38B610F4A054\",\n          \"TransactionType\": \"Payment\",\n          \"TxnSignature\": \"304402200478EDD72D70A452C72EEA4AA9F3A72E6E706A594A373C54AC31810B351ADC2502200E4F4D0960AE6AF7ED93878FD35582507ACAD38CF5509DFD2BE1C67CA3C93C46\",\n          \"date\": 695430982,\n          \"hash\": \"7D150D03E799748425B45B59CF2511ACA58795EEC393663702C302A57460C53D\",\n          \"inLedger\": 68995325,\n          \"ledger_index\": 68995325\n        },\n        \"validated\": true\n      }\n    ],\n    \"used_postgres\": true,\n    \"validated\": true\n  },\n  \"status\": \"success\",\n  \"type\": \"response\"\n}\n"
  },
  {
    "path": "src/containers/Accounts/AccountsRouter.tsx",
    "content": "import { useContext } from 'react'\nimport { Navigate, useParams } from 'react-router'\nimport { useQuery } from 'react-query'\nimport {\n  isValidClassicAddress,\n  isValidXAddress,\n  xAddressToClassicAddress,\n} from 'ripple-address-codec'\nimport SocketContext from '../shared/SocketContext'\nimport { getAccountInfo } from '../../rippled/lib/rippled'\nimport NoMatch from '../NoMatch'\nimport { Accounts } from './index'\nimport { ERROR_MESSAGES } from './Errors'\nimport { Loader } from '../shared/components/Loader'\nimport { Error } from '../../rippled/lib/utils'\nimport { BAD_REQUEST } from '../shared/utils'\nimport { buildPath } from '../shared/routing'\nimport { AMM_POOL_ROUTE } from '../App/routes'\nimport { getDeletedAMMData } from '../AMMPool/utils'\n\nconst getErrorMessage = (error: any) =>\n  ERROR_MESSAGES[error] || ERROR_MESSAGES.default\n\nfunction renderError(error: any) {\n  const message = getErrorMessage(error.code)\n  return (\n    <div className=\"accounts-page\">\n      <NoMatch title={message.title} hints={message.hints} />\n    </div>\n  )\n}\n\nexport const AccountsRouter = () => {\n  const { id: accountId = '' } = useParams<{ id: string }>()\n  const rippledSocket = useContext(SocketContext)\n\n  const { data: comp, error } = useQuery([accountId], async () => {\n    let classicAddress = accountId\n    if (isValidXAddress(accountId)) {\n      classicAddress = xAddressToClassicAddress(accountId).classicAddress\n    }\n\n    if (!isValidClassicAddress(classicAddress)) {\n      throw new Error('account malformed', BAD_REQUEST)\n    }\n\n    try {\n      const data = await getAccountInfo(rippledSocket, classicAddress)\n\n      if (data.AMMID) {\n        return (\n          <Navigate\n            to={buildPath(AMM_POOL_ROUTE, { id: classicAddress })}\n            replace\n          />\n        )\n      }\n\n      return <Accounts />\n    } catch (responseError: any) {\n      // Even if account info fails it might be a deleted account or deleted AMM\n      if (responseError?.code === 404) {\n        try {\n          const deletedAmm = await getDeletedAMMData(\n            rippledSocket,\n            classicAddress,\n          )\n\n          if (deletedAmm) {\n            return (\n              <Navigate\n                to={buildPath(AMM_POOL_ROUTE, { id: classicAddress })}\n                replace\n              />\n            )\n          }\n        } catch (e) {\n          // eslint-disable-next-line no-console\n          console.error('Failed to check for deleted AMM pool:', e)\n        }\n\n        return <Accounts />\n      }\n\n      throw responseError\n    }\n  })\n\n  if (!accountId) {\n    return (\n      <NoMatch\n        title=\"account_empty_title\"\n        hints={['account_empty_hint']}\n        isError={false}\n      />\n    )\n  }\n  if (error) {\n    return renderError(error)\n  }\n\n  return comp || <Loader />\n}\n"
  },
  {
    "path": "src/containers/Accounts/Errors.tsx",
    "content": "import { BAD_REQUEST, NOT_FOUND } from '../shared/utils'\n\nexport const ERROR_MESSAGES: { [index: string]: any } = {}\n\nERROR_MESSAGES[NOT_FOUND] = {\n  title: 'account_not_found',\n  hints: ['check_account_id'],\n}\nERROR_MESSAGES[BAD_REQUEST] = {\n  title: 'invalid_xrpl_address',\n  hints: ['check_account_id'],\n}\nERROR_MESSAGES.default = {\n  title: 'generic_error',\n  hints: ['not_your_fault'],\n}\n"
  },
  {
    "path": "src/containers/Accounts/index.tsx",
    "content": "import { useContext, useEffect } from 'react'\nimport { Helmet } from 'react-helmet-async'\nimport { useQuery } from 'react-query'\nimport { isValidClassicAddress, isValidXAddress } from 'ripple-address-codec'\nimport { AccountTransactionTable } from './AccountTransactionTable'\nimport './styles.scss'\nimport { useAnalytics } from '../shared/analytics'\nimport { useRouteParams } from '../shared/routing'\nimport { ACCOUNT_ROUTE } from '../App/routes'\nimport { BAD_REQUEST } from '../shared/utils'\nimport { getAccountState } from '../../rippled'\nimport SocketContext from '../shared/SocketContext'\nimport { Loader } from '../shared/components/Loader'\nimport { AccountSummary } from './AccountSummary'\nimport { useXRPToUSDRate } from '../shared/hooks/useXRPToUSDRate'\nimport AccountAsset from './AccountAsset'\nimport AccountHeader from './AccountHeader'\n\nexport const Accounts = () => {\n  const { trackScreenLoaded, trackException } = useAnalytics()\n  const { id: accountId = '' } = useRouteParams(ACCOUNT_ROUTE)\n  const rippledSocket = useContext(SocketContext)\n\n  const { data: account, isLoading } = useQuery(\n    ['accountState', accountId],\n    () => {\n      if (!isValidClassicAddress(accountId) && !isValidXAddress(accountId)) {\n        return Promise.reject(BAD_REQUEST)\n      }\n\n      return getAccountState(accountId, rippledSocket).catch((requestError) => {\n        const status = requestError.code\n        trackException(\n          `ledger ${accountId} --- ${JSON.stringify(requestError)}`,\n        )\n        return Promise.reject(status)\n      })\n    },\n  )\n\n  useEffect(() => {\n    trackScreenLoaded()\n\n    return () => {\n      window.scrollTo(0, 0)\n    }\n  }, [trackScreenLoaded])\n\n  const xrpToUSDRate = useXRPToUSDRate()\n\n  const isAccountDeleted = account?.deleted === true\n  // Show account data only after account.info is loaded and account isn't deleted\n  const showAccount = !!account?.info && !isAccountDeleted\n\n  return (\n    <div className=\"accounts-page section\">\n      <Helmet title={`${accountId.substring(0, 12)}...`} />\n      {accountId && (\n        <>\n          <AccountHeader\n            isAccountDeleted={isAccountDeleted}\n            accountId={accountId}\n            account={account}\n          />\n          {showAccount && (\n            <>\n              <AccountSummary account={account} xrpToUSDRate={xrpToUSDRate} />\n              <AccountAsset\n                // Use account.account since `accountId` could be an extended account\n                accountId={account.account}\n                account={account}\n                xrpToUSDRate={xrpToUSDRate}\n              />\n            </>\n          )}\n\n          {/* Show account transactions regardless of account delete status */}\n          <AccountTransactionTable\n            accountId={accountId}\n            hasTokensColumn={false}\n          />\n        </>\n      )}\n      {isLoading && <Loader />}\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/Accounts/styles.scss",
    "content": "@use '../shared/css/variables';\n\n.accounts-page {\n  .loader {\n    min-height: 100px;\n  }\n}\n"
  },
  {
    "path": "src/containers/Accounts/test/AccountsRouter.test.tsx",
    "content": "import { render, screen, waitFor } from '@testing-library/react'\nimport { Route } from 'react-router'\nimport i18n from '../../../i18n/testConfig'\nimport { AccountsRouter } from '../AccountsRouter'\nimport { QuickHarness } from '../../test/utils'\nimport { ACCOUNT_ROUTE } from '../../App/routes'\nimport * as rippled from '../../../rippled/lib/rippled'\nimport * as ammUtils from '../../AMMPool/utils'\nimport { Error as RippledError } from '../../../rippled/lib/utils'\n\njest.mock('../../../rippled/lib/rippled')\njest.mock('../../AMMPool/utils')\n\njest.mock('../index', () => ({\n  __esModule: true,\n  Accounts: () => <div data-testid=\"accounts-page\">Accounts Page</div>,\n}))\n\nconst mockGetAccountInfo = rippled.getAccountInfo as jest.Mock\nconst mockDetectDeletedAMM = ammUtils.getDeletedAMMData as jest.Mock\n\ndescribe('AccountsRouter', () => {\n  const ACTIVE_AMM_ACCOUNT = 'rLjUKpwUVmz3vCTmFkXungxwzdoyrWRsFG'\n  const DELETED_AMM_ACCOUNT = 'raxKnsu4ea6xoehws1tyvc7W2XPM5VcmJp'\n  const REGULAR_ACCOUNT = 'rncKvRcdDq9hVJpdLdTcKoxsS3NSkXsvfM'\n  const DELETED_ACCOUNT = 'rwGBCTYmPQ8NrfDVL5DdzS3aBbiXtbwngA'\n\n  const renderRouter = (accountId: string) =>\n    render(\n      <QuickHarness i18n={i18n} initialEntries={[`/accounts/${accountId}`]}>\n        <Route path={ACCOUNT_ROUTE.path} element={<AccountsRouter />} />\n      </QuickHarness>,\n    )\n\n  beforeEach(() => {\n    jest.clearAllMocks()\n  })\n\n  it('redirects to /amm/:id when account has AMMID', async () => {\n    mockGetAccountInfo.mockResolvedValue({\n      AMMID: '0422F98444F7B068C7EC6EEDAF11380E6A146F091639A29E09B3399C1F8A5341',\n      Account: ACTIVE_AMM_ACCOUNT,\n    })\n\n    renderRouter(ACTIVE_AMM_ACCOUNT)\n\n    await waitFor(() => {\n      // Navigate component redirects, so the Accounts page should NOT render\n      expect(screen.queryByTestId('accounts-page')).not.toBeInTheDocument()\n    })\n  })\n\n  it('renders Accounts page for a regular account', async () => {\n    mockGetAccountInfo.mockResolvedValue({\n      Account: REGULAR_ACCOUNT,\n      Balance: '1000000000',\n    })\n\n    renderRouter(REGULAR_ACCOUNT)\n\n    await waitFor(() => {\n      expect(screen.getByTestId('accounts-page')).toBeInTheDocument()\n    })\n  })\n\n  it('renders Accounts page for a deleted non-AMM account', async () => {\n    const error = new RippledError('Account not found', 404)\n    mockGetAccountInfo.mockRejectedValue(error)\n    mockDetectDeletedAMM.mockResolvedValue(null)\n\n    renderRouter(DELETED_ACCOUNT)\n\n    await waitFor(() => {\n      expect(screen.getByTestId('accounts-page')).toBeInTheDocument()\n    })\n  })\n\n  it('redirects to /amm/:id for a deleted AMM pool', async () => {\n    const error = new RippledError('Account not found', 404)\n    mockGetAccountInfo.mockRejectedValue(error)\n    mockDetectDeletedAMM.mockResolvedValue({\n      account: DELETED_AMM_ACCOUNT,\n      asset: { currency: 'XRP' },\n      asset2: {\n        currency: '504958454C530000000000000000000000000000',\n        issuer: 'rNEQb5e4DZUJG48xKPstDWjmm1PQ4fcUfZ',\n      },\n      lpToken: {\n        currency: '0370963F20A61AF3C6E5D674EAAEE3E65C0BDC9F',\n        issuer: DELETED_AMM_ACCOUNT,\n        value: '2764439179.245265',\n      },\n      deletionDate: 827617760,\n    })\n\n    renderRouter(DELETED_AMM_ACCOUNT)\n\n    await waitFor(() => {\n      expect(mockDetectDeletedAMM).toHaveBeenCalled()\n      // Navigate component redirects, so Accounts page should NOT render\n      expect(screen.queryByTestId('accounts-page')).not.toBeInTheDocument()\n    })\n  })\n\n  it('calls getDeletedAMMData only when account_info returns 404', async () => {\n    mockGetAccountInfo.mockResolvedValue({\n      Account: REGULAR_ACCOUNT,\n      Balance: '1000000000',\n    })\n\n    renderRouter(REGULAR_ACCOUNT)\n\n    await waitFor(() => {\n      expect(screen.getByTestId('accounts-page')).toBeInTheDocument()\n    })\n\n    expect(mockDetectDeletedAMM).not.toHaveBeenCalled()\n  })\n\n  it('shows error for invalid account ID', async () => {\n    renderRouter('not-a-valid-address')\n\n    await waitFor(() => {\n      // Should show NoMatch error for malformed address\n      expect(screen.queryByTestId('accounts-page')).not.toBeInTheDocument()\n    })\n  })\n})\n"
  },
  {
    "path": "src/containers/Accounts/test/index.test.tsx",
    "content": "import { render, screen, waitFor } from '@testing-library/react'\nimport { Route } from 'react-router'\nimport i18n from '../../../i18n/testConfig'\nimport { Accounts } from '../index'\nimport mockAccountState from './mockAccountState.json'\nimport { QuickHarness } from '../../test/utils'\nimport { ACCOUNT_ROUTE } from '../../App/routes'\nimport { getAccountState } from '../../../rippled'\nimport Mock = jest.Mock\n\njest.mock('../../../rippled', () => ({\n  __esModule: true,\n  getAccountState: jest.fn(),\n  getAccountTransactions: jest.fn(() => []),\n}))\n\njest.mock('../AccountHeader', () => ({\n  __esModule: true,\n  default: () => <div data-testid=\"account-header\">Account Header</div>,\n}))\n\njest.mock('../AccountSummary', () => ({\n  __esModule: true,\n  AccountSummary: () => (\n    <div data-testid=\"account-summary\">Account Summary</div>\n  ),\n}))\n\njest.mock('../AccountAsset', () => ({\n  __esModule: true,\n  default: () => <div data-testid=\"account-asset\">Account Asset</div>,\n}))\n\njest.mock('../AccountTransactionTable', () => ({\n  __esModule: true,\n  AccountTransactionTable: () => (\n    <div data-testid=\"account-transaction-table\">Account Transaction Table</div>\n  ),\n}))\n\nconst mockedGetAccountState = getAccountState as Mock\n\ndescribe('Account container', () => {\n  const TEST_ACCOUNT_ID = 'rncKvRcdDq9hVJpdLdTcKoxsS3NSkXsvfM'\n\n  const renderComponent = () =>\n    render(\n      <QuickHarness\n        i18n={i18n}\n        initialEntries={[`/accounts/${TEST_ACCOUNT_ID}`]}\n      >\n        <Route path={ACCOUNT_ROUTE.path} element={<Accounts />} />\n      </QuickHarness>,\n    )\n\n  beforeEach(() => {\n    jest.clearAllMocks()\n  })\n\n  it('renders without crashing', () => {\n    const { unmount } = renderComponent()\n    unmount()\n  })\n\n  it('renders static parts', async () => {\n    mockedGetAccountState.mockImplementation(() =>\n      Promise.resolve(mockAccountState),\n    )\n\n    renderComponent()\n\n    await waitFor(() => {\n      expect(screen.getByTestId('account-header')).toBeInTheDocument()\n      expect(screen.getByTestId('account-summary')).toBeInTheDocument()\n      expect(screen.getByTestId('account-asset')).toBeInTheDocument()\n      expect(\n        screen.getByTestId('account-transaction-table'),\n      ).toBeInTheDocument()\n    })\n  })\n})\n"
  },
  {
    "path": "src/containers/Accounts/test/mockAccountState.json",
    "content": "{\n  \"ledger_index\": 46635258,\n  \"balances\": {\n    \"XRP\": 199.8175,\n    \"USD\": 1234.56\n  },\n  \"info\": {\n    \"reserve\": 20,\n    \"sequence\": 12345,\n    \"domain\": \"example.com\",\n    \"email_hash\": \"ABCDE1234\",\n    \"flags\": [\"accountFlag1\", \"accountFlag2\"]\n  },\n  \"paychannels\": {\n    \"channels\": [\n      {\n        \"id\": \"56E13047B746FC01101D377DE9E685F8695B2F41CAF910A0D5A672765EB4083F\",\n        \"account\": \"rDqLfYdAdUQwTAZbybJVBiXRU7PQQYix2R\",\n        \"destination\": \"rnbKqVFYk9Cnzj4q6VmY88hJR4cSmc9xGt\",\n        \"amount\": 10,\n        \"balance\": 0,\n        \"settleDelay\": 3600\n      },\n      {\n        \"id\": \"961241B79351346C8C4A49BFF02D3E5031A22E1F4DD1160C5964A9EB16772A53\",\n        \"account\": \"rDqLfYdAdUQwTAZbybJVBiXRU7PQQYix2R\",\n        \"destination\": \"rK6g2UYc4GpQH8DYdPG7wywyQbxkJpQTTN\",\n        \"amount\": 10,\n        \"balance\": 0.05,\n        \"settleDelay\": 3600\n      },\n      {\n        \"id\": \"9BC25651E7CE6766863A9CEB67B295CA4DD98E58E9CA91A09D8B36E43DFDE84C\",\n        \"account\": \"rDqLfYdAdUQwTAZbybJVBiXRU7PQQYix2R\",\n        \"destination\": \"rnbKqVFYk9Cnzj4q6VmY88hJR4cSmc9xGt\",\n        \"amount\": 10,\n        \"balance\": 0,\n        \"settleDelay\": 3600\n      },\n      {\n        \"id\": \"B1ADE97B75C4A5FBBDF99A97B91C6E74343AB36033B943E287BD344E9DBE1CED\",\n        \"account\": \"rDqLfYdAdUQwTAZbybJVBiXRU7PQQYix2R\",\n        \"destination\": \"rDy4ZNRAokcmHvD7fPazisKQsE7iq3tCQF\",\n        \"amount\": 10,\n        \"balance\": 0.06,\n        \"settleDelay\": 3600\n      }\n    ],\n    \"total_available\": 39.89\n  },\n  \"signerList\": {\n    \"quorum\": 4,\n    \"max\": 8,\n    \"signers\": [\n      {\n        \"account\": \"re3LGjhrCvthtWWwrfKbVJjXN9PYDeQDJ\",\n        \"weight\": 1\n      },\n      {\n        \"account\": \"rkPA5RwLVPnJgpcsrzYvHwx1HVfDb6zD3\",\n        \"weight\": 1\n      },\n      {\n        \"account\": \"r9oLueGJ78wpDtx5R5Xtfx5P2fjFppcCuS\",\n        \"weight\": 1\n      },\n      {\n        \"account\": \"rGSxFjoqmWz54PycrgQBQ5dB6e7TUpMxzq\",\n        \"weight\": 1\n      },\n      {\n        \"account\": \"rHH2gS6XikKoEt9i1xAxEBvXLHKFr7oLn8\",\n        \"weight\": 1\n      },\n      {\n        \"account\": \"rLW75SfEdnGVsa3fTFkSaDTzXuFapwNYtf\",\n        \"weight\": 1\n      },\n      {\n        \"account\": \"rMY6Wm2RWQLN4d3Jjz15MKP74GJWVQE2pb\",\n        \"weight\": 1\n      },\n      {\n        \"account\": \"rP5xpZ5KzPih69fLhG3NYvZEDfLmSEViUk\",\n        \"weight\": 1\n      }\n    ],\n    \"ledger_index\": 46635258\n  },\n  \"escrows\": {\n    \"in\": [\n      {\n        \"id\": \"04F57D5C7F5B660C187BB55227DFC703AEFE482AEA8EEAF4C7FA5ED9BFF3403E\",\n        \"account\": \"rncKvRcdDq9hVJpdLdTcKoxsS3NSkXsvfM\",\n        \"destination\": \"rncKvRcdDq9hVJpdLdTcKoxsS3NSkXsvfM\",\n        \"amount\": 200000000,\n        \"finishAfter\": \"2023-04-01T00:00:00Z\"\n      },\n      {\n        \"id\": \"05C1D23635030E7749CD6A1FB0ACE8F48A155313145397363B677254567F0051\",\n        \"account\": \"rncKvRcdDq9hVJpdLdTcKoxsS3NSkXsvfM\",\n        \"destination\": \"rncKvRcdDq9hVJpdLdTcKoxsS3NSkXsvfM\",\n        \"amount\": 100000000,\n        \"finishAfter\": \"2022-11-01T00:00:00Z\"\n      },\n      {\n        \"id\": \"18727F780D876DF637561802D38C97AA6C7BF9DA9266F9B95E0B9872808E4863\",\n        \"account\": \"rncKvRcdDq9hVJpdLdTcKoxsS3NSkXsvfM\",\n        \"destination\": \"rncKvRcdDq9hVJpdLdTcKoxsS3NSkXsvfM\",\n        \"amount\": 400000000,\n        \"finishAfter\": \"2023-03-01T00:00:00Z\"\n      },\n      {\n        \"id\": \"323ED5FADF59D6EB60E133D8AC630F56373A94A828FBCA40D8D2919F13EA6356\",\n        \"account\": \"rncKvRcdDq9hVJpdLdTcKoxsS3NSkXsvfM\",\n        \"destination\": \"rncKvRcdDq9hVJpdLdTcKoxsS3NSkXsvfM\",\n        \"amount\": 100000000,\n        \"finishAfter\": \"2023-03-01T00:00:00Z\"\n      },\n      {\n        \"id\": \"425D1D1DB7992B2F4D31DC3FA2598C09BE1527256F68E35CEB46FEEA53479F8A\",\n        \"account\": \"rncKvRcdDq9hVJpdLdTcKoxsS3NSkXsvfM\",\n        \"destination\": \"rncKvRcdDq9hVJpdLdTcKoxsS3NSkXsvfM\",\n        \"amount\": 200000000,\n        \"finishAfter\": \"2022-10-01T00:00:00Z\"\n      },\n      {\n        \"id\": \"4479E64BE345AFC083343800CEDEA82D1CAC3DEE0658E38E3972164654DFEA97\",\n        \"account\": \"rncKvRcdDq9hVJpdLdTcKoxsS3NSkXsvfM\",\n        \"destination\": \"rncKvRcdDq9hVJpdLdTcKoxsS3NSkXsvfM\",\n        \"amount\": 300000000,\n        \"finishAfter\": \"2022-10-01T00:00:00Z\"\n      },\n      {\n        \"id\": \"4C664D50C9C0F347947F9CEF3F9698F96660946E7118152579B1EFAC98D0DBCD\",\n        \"account\": \"rncKvRcdDq9hVJpdLdTcKoxsS3NSkXsvfM\",\n        \"destination\": \"rncKvRcdDq9hVJpdLdTcKoxsS3NSkXsvfM\",\n        \"amount\": 500000000,\n        \"finishAfter\": \"2023-05-01T00:00:00Z\"\n      },\n      {\n        \"id\": \"52458FA712939951ED53B3A8AA3EBBCDBC9FC50566E585457425214BD2799E73\",\n        \"account\": \"rncKvRcdDq9hVJpdLdTcKoxsS3NSkXsvfM\",\n        \"destination\": \"rncKvRcdDq9hVJpdLdTcKoxsS3NSkXsvfM\",\n        \"amount\": 300000000,\n        \"finishAfter\": \"2023-04-01T00:00:00Z\"\n      },\n      {\n        \"id\": \"66F054B5EF2DCA2B823837701E7D54387DE2EF71119A5663C3449A5E976BE484\",\n        \"account\": \"rncKvRcdDq9hVJpdLdTcKoxsS3NSkXsvfM\",\n        \"destination\": \"rncKvRcdDq9hVJpdLdTcKoxsS3NSkXsvfM\",\n        \"amount\": 100000000,\n        \"finishAfter\": \"2022-08-01T00:00:02Z\"\n      },\n      {\n        \"id\": \"94408416635DB67DC31DE418F13931F44A9B75C2FB5DCD4944AD5F267B6C4827\",\n        \"account\": \"rncKvRcdDq9hVJpdLdTcKoxsS3NSkXsvfM\",\n        \"destination\": \"rncKvRcdDq9hVJpdLdTcKoxsS3NSkXsvfM\",\n        \"amount\": 200000000,\n        \"finishAfter\": \"2022-09-01T00:00:00Z\"\n      },\n      {\n        \"id\": \"985CBFA00D2152052DE0C5058C276461D4D96363B1C1783488A070D7D579D889\",\n        \"account\": \"rncKvRcdDq9hVJpdLdTcKoxsS3NSkXsvfM\",\n        \"destination\": \"rncKvRcdDq9hVJpdLdTcKoxsS3NSkXsvfM\",\n        \"amount\": 300000000,\n        \"finishAfter\": \"2022-09-01T00:00:02Z\"\n      },\n      {\n        \"id\": \"9871AA7B5A34E98AA5207B637EFDDEDCA6DC39B8041A82FE9C1A2E2D2DD89AB6\",\n        \"account\": \"rncKvRcdDq9hVJpdLdTcKoxsS3NSkXsvfM\",\n        \"destination\": \"rncKvRcdDq9hVJpdLdTcKoxsS3NSkXsvfM\",\n        \"amount\": 400000000,\n        \"finishAfter\": \"2022-11-01T00:00:00Z\"\n      },\n      {\n        \"id\": \"987779E4922312332B021EF76422C6A10B6FA0BF2CDD610AF0DBE3ABA58D12CD\",\n        \"account\": \"rncKvRcdDq9hVJpdLdTcKoxsS3NSkXsvfM\",\n        \"destination\": \"rncKvRcdDq9hVJpdLdTcKoxsS3NSkXsvfM\",\n        \"amount\": 500000000,\n        \"finishAfter\": \"2023-02-01T00:00:00Z\"\n      },\n      {\n        \"id\": \"AE269A4700787F4519F13D54C1091613CF0CAC5E64AF4590CA779A680457B34B\",\n        \"account\": \"rncKvRcdDq9hVJpdLdTcKoxsS3NSkXsvfM\",\n        \"destination\": \"rncKvRcdDq9hVJpdLdTcKoxsS3NSkXsvfM\",\n        \"amount\": 500000000,\n        \"finishAfter\": \"2022-12-01T00:00:00Z\"\n      },\n      {\n        \"id\": \"E5FDC1D1E7BDB140B6F954074692546F1D7C95F780DDCE083B92E05CEC0EF471\",\n        \"account\": \"rncKvRcdDq9hVJpdLdTcKoxsS3NSkXsvfM\",\n        \"destination\": \"rncKvRcdDq9hVJpdLdTcKoxsS3NSkXsvfM\",\n        \"amount\": 500000000,\n        \"finishAfter\": \"2023-01-01T00:00:00Z\"\n      },\n      {\n        \"id\": \"F933D56AA2BBBB9F8E25961A495F2242813D04D73F89B3E0E7B56C333AEA4C3B\",\n        \"account\": \"rncKvRcdDq9hVJpdLdTcKoxsS3NSkXsvfM\",\n        \"destination\": \"rncKvRcdDq9hVJpdLdTcKoxsS3NSkXsvfM\",\n        \"amount\": 400000000,\n        \"finishAfter\": \"2022-08-01T00:00:00Z\"\n      }\n    ],\n    \"out\": [],\n    \"total\": 5000000000,\n    \"totalIn\": 5000000000,\n    \"totalOut\": 0\n  }\n}\n"
  },
  {
    "path": "src/containers/Amendment/BarChartVoting.tsx",
    "content": "import { useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport {\n  BarChart,\n  Bar,\n  XAxis,\n  YAxis,\n  Tooltip,\n  TooltipProps,\n  Label,\n  ResponsiveContainer,\n  // Text,\n  // Cell,\n} from 'recharts'\nimport {\n  BLACK_600,\n  GREEN_400,\n  GREY_0,\n  GREY_600,\n  GREY_800,\n  MAGENTA_700,\n} from '../shared/utils'\n\ninterface Props {\n  data: any\n}\n\ntype ValueType = number | string | Array<number | string>\ntype NameType = number | string\n\nconst CustomTooltip = ({\n  active,\n  payload,\n  label,\n}: TooltipProps<ValueType, NameType>) => {\n  const { t } = useTranslation()\n  if (active) {\n    return (\n      <div className=\"custom-tooltip\">\n        <p className=\"label\">{label}</p>\n        <p className=\"value\">\n          {t('yeas_count', {\n            yeas_count: payload ? payload[0].payload.yeas : 0,\n          })}\n        </p>\n        <p className=\"value\">\n          {t('yeas_percent', {\n            yeas_percent: payload\n              ? payload[0].payload.yeas_percent.toFixed(2)\n              : 0,\n          })}\n        </p>\n        <p className=\"value\">\n          {t('nays_count', {\n            nays_count: payload ? payload[0].payload.nays : 0,\n          })}\n        </p>\n        <p className=\"value\">\n          {t('nays_percent', {\n            nays_percent: payload\n              ? payload[0].payload.nays_percent.toFixed(2)\n              : 0,\n          })}\n        </p>\n      </div>\n    )\n  }\n  return null\n}\n\nconst CustomLegend = () => {\n  const { t } = useTranslation()\n  return (\n    <div className=\"custom-legend\">\n      <div className=\"legend-color\">\n        <div className=\"segment\">\n          <span className=\"icon yea\" />\n          <span className=\"text\">{t('yeas')}</span>\n        </div>\n        <div className=\"segment\">\n          <span className=\"icon nay\" />\n          <span className=\"text\">{t('nays')}</span>\n        </div>\n      </div>\n    </div>\n  )\n}\n\nexport const BarChartVoting = ({ data }: Props) => {\n  const { t } = useTranslation()\n  const [showTooltips, setShowTooltips] = useState(false)\n\n  return (\n    <div className=\"barchart\">\n      <CustomLegend />\n      <ResponsiveContainer height={532} width=\"100%\">\n        <BarChart\n          data={data}\n          margin={{ top: 5, right: 20, bottom: 5, left: 0 }}\n        >\n          <XAxis\n            dataKey=\"label\"\n            dy={12}\n            height={90}\n            tickLine={false}\n            minTickGap={-1}\n            stroke={BLACK_600}\n            interval={0}\n            tick={{ fill: GREY_0 }}\n          />\n          <YAxis\n            className=\"yAxis\"\n            tickLine={false}\n            stroke={BLACK_600}\n            tick={{ fill: GREY_0 }}\n          >\n            <Label\n              className=\"y-label\"\n              value={t('%_of_validators')}\n              angle={-90}\n              position=\"insideTop\"\n              dx={45}\n              dy={55}\n              style={{ fill: GREY_0 }}\n            />\n          </YAxis>\n          <Bar\n            dataKey=\"yeas_percent\"\n            barSize={30}\n            fill={GREEN_400}\n            radius={[4, 4, 0, 0]}\n            isAnimationActive={false}\n            onMouseOver={() => setShowTooltips(true)}\n            onMouseLeave={() => setShowTooltips(false)}\n          />\n          <Bar\n            dataKey=\"nays_percent\"\n            barSize={30}\n            fill={MAGENTA_700}\n            radius={[4, 4, 0, 0]}\n            isAnimationActive={false}\n            onMouseOver={() => setShowTooltips(true)}\n            onMouseLeave={() => setShowTooltips(false)}\n          />\n          <Tooltip\n            content={CustomTooltip}\n            cursor={false}\n            offset={-10}\n            wrapperStyle={{\n              backgroundColor: GREY_600,\n              borderRadius: 8,\n              border: `1px solid ${GREY_800}`,\n              opacity: showTooltips ? '100%' : '0',\n            }}\n          />\n        </BarChart>\n      </ResponsiveContainer>\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/Amendment/Simple.tsx",
    "content": "/* eslint-disable no-nested-ternary -- Disabled for this file */\nimport { useTranslation } from 'react-i18next'\nimport { Link } from 'react-router'\nimport { TRANSACTION_ROUTE } from '../App/routes'\nimport { SimpleRow } from '../shared/components/Transaction/SimpleRow'\nimport { useLanguage } from '../shared/hooks'\nimport { RouteLink } from '../shared/routing'\nimport { BREAKPOINTS, localizeDate } from '../shared/utils'\nimport { AmendmentData, Voter } from '../shared/vhsTypes'\n\ninterface validatorUNL {\n  signing_key: string\n  domain: string\n  unl: string | false\n}\n\ninterface SimpleProps {\n  data: AmendmentData\n  validators: Array<validatorUNL>\n  width: number\n}\n\nconst DATE_OPTIONS_AMENDMENT = {\n  hour: 'numeric',\n  minute: 'numeric',\n  second: 'numeric',\n  year: 'numeric',\n  month: 'numeric',\n  day: 'numeric',\n  hour12: true,\n  timeZone: 'UTC',\n}\n\nconst DEFAULT_EMPTY_VALUE = '--'\n\nexport const Simple = ({ data, validators, width }: SimpleProps) => {\n  const { t } = useTranslation()\n  const language = useLanguage()\n\n  const voting = data.voted !== undefined\n\n  const calculateUNLNays = (voted: Voter, all: Array<validatorUNL>): number =>\n    all.filter((val) => val.unl !== false).length -\n    voted.validators.filter((val) => val.unl !== false).length\n\n  const renderStatus = () =>\n    voting ? (\n      <div className=\"badge voting\">{`${t('not')} ${t('enabled')}`}</div>\n    ) : (\n      <div className=\"badge enabled\">{t('enabled')}</div>\n    )\n\n  const renderDate = (date: string | null) =>\n    date\n      ? localizeDate(new Date(date), language, DATE_OPTIONS_AMENDMENT)\n      : DEFAULT_EMPTY_VALUE\n\n  const renderRowIndex = () =>\n    voting ? (\n      <>\n        {data.voted !== undefined && (\n          <>\n            <SimpleRow label={`${t('yeas')} (${t('all')})`}>\n              {data.voted.validators.length}\n            </SimpleRow>\n            <SimpleRow label={`${t('nays')} (${t('all')})`}>\n              {validators.length - data.voted.validators.length}\n            </SimpleRow>\n            <SimpleRow label={`${t('yeas')} (${t('unl')})`}>\n              {\n                data.voted.validators.filter((voted) => voted.unl !== false)\n                  .length\n              }\n            </SimpleRow>\n            <SimpleRow label={`${t('nays')} (${t('unl')})`}>\n              {calculateUNLNays(data.voted, validators)}\n            </SimpleRow>\n          </>\n        )}\n        {data.eta ? (\n          <SimpleRow label={`${t('eta')} (UTC)`} className=\"eta yes\">\n            {localizeDate(new Date(data.eta), language, DATE_OPTIONS_AMENDMENT)}\n          </SimpleRow>\n        ) : (\n          <SimpleRow label={t('eta')} className=\"eta no\">\n            {t('voting')}\n          </SimpleRow>\n        )}\n\n        <SimpleRow label={t('consensus')} className=\"badge consensus\">\n          {data.consensus}\n        </SimpleRow>\n      </>\n    ) : data.tx_hash ? (\n      <SimpleRow label={`${t('enabled')} ${t('on')} (UTC)`.trim()}>\n        <RouteLink to={TRANSACTION_ROUTE} params={{ identifier: data.tx_hash }}>\n          {' '}\n          {renderDate(data.date)}\n        </RouteLink>\n      </SimpleRow>\n    ) : (\n      <SimpleRow label={`${t('enabled')} (${t('on')})`.trim()}>\n        {renderDate(data.date)}\n      </SimpleRow>\n    )\n\n  const rowIndex = renderRowIndex()\n\n  const details = `https://xrpl.org/known-amendments.html#${data.name.toLowerCase()}`\n\n  return (\n    <>\n      <div className=\"rows\">\n        <SimpleRow label={t('name')}>{data.name}</SimpleRow>\n        <SimpleRow label={t('amendment_id')}>{data.id}</SimpleRow>\n        <SimpleRow label={t('introduced_in')}>\n          {data.rippled_version ? (\n            <Link\n              to={`https://github.com/XRPLF/rippled/releases/tag/${data.rippled_version}`}\n              target=\"_blank\"\n            >\n              {`v${data.rippled_version}`}\n            </Link>\n          ) : (\n            t('n_a')\n          )}\n        </SimpleRow>\n        {voting ? (\n          <SimpleRow label={t('threshold')}>{data.threshold}</SimpleRow>\n        ) : (\n          data.tx_hash && (\n            <SimpleRow label={t('enable_tx')}>\n              <RouteLink\n                to={TRANSACTION_ROUTE}\n                params={{ identifier: data.tx_hash }}\n              >\n                {' '}\n                {data.tx_hash}\n              </RouteLink>\n            </SimpleRow>\n          )\n        )}\n        <SimpleRow label={t('details')}>\n          <Link to={details} target=\"_blank\">\n            {details}\n          </Link>\n        </SimpleRow>\n        <SimpleRow label={t('status')}>{renderStatus()}</SimpleRow>\n        {width < BREAKPOINTS.landscape && rowIndex}\n      </div>\n      {width >= BREAKPOINTS.landscape && (\n        <div className=\"index\">{rowIndex}</div>\n      )}\n    </>\n  )\n}\n"
  },
  {
    "path": "src/containers/Amendment/Votes.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { AmendmentData } from '../shared/vhsTypes'\nimport SuccessIcon from '../shared/images/success.svg'\nimport { RouteLink } from '../shared/routing'\nimport { VALIDATOR_ROUTE } from '../App/routes'\nimport { BarChartVoting } from './BarChartVoting'\n\ninterface VotesProps {\n  data: AmendmentData\n  validators: Array<validatorUNL>\n}\n\ninterface validatorUNL {\n  pubkey: string\n  signing_key: string\n  domain: string\n  unl: string | false\n}\n\nfunction compareValidators(a: validatorUNL, b: validatorUNL) {\n  if (a.unl === false && b.unl !== false) {\n    return 1\n  }\n  if (a.unl !== false && b.unl === false) {\n    return -1\n  }\n  if (a.domain === null && b.domain !== null) {\n    return 1\n  }\n  if (a.domain !== null && b.domain === null) {\n    return -1\n  }\n  if (a.domain === null && b.domain === null) {\n    return a.pubkey.localeCompare(b.pubkey)\n  }\n\n  // Compare non-null values by the 'name' field\n  return a.domain.localeCompare(b.domain)\n}\n\nexport const Votes = ({ data, validators }: VotesProps) => {\n  const { t } = useTranslation()\n\n  const voting = data.voted !== undefined\n\n  const renderColumn = (\n    label: 'yeas' | 'nays',\n    validatorsList: Array<validatorUNL>,\n  ) => (\n    <div className={`votes-column ${label}`}>\n      <div className=\"label\">{t(label)}</div>\n      <div className=\"vals\">\n        {validatorsList.map((validator, index) => (\n          <div className=\"row\" key={validator.pubkey}>\n            <span className=\"index\">{index + 1}</span>\n            <span className=\"val\">\n              <RouteLink\n                to={VALIDATOR_ROUTE}\n                params={{ identifier: validator.pubkey }}\n                className=\"key-link\"\n              >\n                {validator.domain ? validator.domain : validator.pubkey}\n              </RouteLink>\n            </span>\n            {validator.unl && (\n              <span className=\"unl\">\n                <SuccessIcon title={validator.unl} alt={validator.unl} />\n              </span>\n            )}\n          </div>\n        ))}\n      </div>\n    </div>\n  )\n\n  const getNays = () =>\n    validators\n      .filter(\n        (validator) =>\n          !data.voted?.validators.some(\n            (voted) => voted.signing_key === validator.signing_key,\n          ),\n      )\n      .sort(compareValidators)\n\n  const getYeas = () =>\n    validators\n      .filter((validator) =>\n        data.voted?.validators.some(\n          (voted) => voted.signing_key === validator.signing_key,\n        ),\n      )\n      .sort(compareValidators)\n\n  const yeas = getYeas()\n  const nays = getNays()\n  const validatorsUNLCount = validators.filter(\n    (val) => val.unl !== false,\n  ).length\n  const validatorsNonUNLCount = validators.filter(\n    (val) => val.unl === false,\n  ).length\n\n  const aggregateVoting = () => [\n    {\n      label: 'UNL',\n      yeas: yeas.filter((val) => val.unl !== false).length,\n      nays: nays.filter((val) => val.unl !== false).length,\n      yeas_percent:\n        (yeas.filter((val) => val.unl !== false).length / validatorsUNLCount) *\n        100,\n      nays_percent:\n        (nays.filter((val) => val.unl !== false).length / validatorsUNLCount) *\n        100,\n    },\n    {\n      label: 'non-UNL',\n      yeas: yeas.filter((val) => val.unl === false).length,\n      nays: nays.filter((val) => val.unl === false).length,\n      yeas_percent:\n        (yeas.filter((val) => val.unl === false).length /\n          validatorsNonUNLCount) *\n        100,\n      nays_percent:\n        (nays.filter((val) => val.unl === false).length /\n          validatorsNonUNLCount) *\n        100,\n    },\n  ]\n\n  const aggregate = aggregateVoting()\n\n  return voting ? (\n    <div className=\"votes\">\n      {aggregate && <BarChartVoting data={aggregate} />}\n      <div className=\"votes-columns\">\n        {renderColumn('yeas', yeas)}\n        {renderColumn('nays', nays)}\n      </div>\n      <div className=\"note\">\n        <span className=\"note-text\">{t('note')}:</span>\n        <span className=\"unl\">\n          <SuccessIcon />\n        </span>\n        <span className=\"note-text\">{t('indicate_unl')}</span>\n      </div>\n    </div>\n  ) : null\n}\n"
  },
  {
    "path": "src/containers/Amendment/amendment.scss",
    "content": "@use '../shared/css/variables' as *;\n@use '../shared/css/table';\n\n.amendment-summary {\n  width: 80%;\n  max-width: 1200px;\n  margin: auto;\n\n  .simple-body {\n    max-width: 1100px;\n  }\n\n  .type {\n    display: inline-block;\n    margin-top: 80px;\n    margin-bottom: 32px;\n    color: $white;\n    font-size: 32px;\n\n    @include for-size(tablet-portrait-up) {\n      margin-top: 120px;\n      margin-bottom: 64px;\n      font-size: 42px;\n    }\n\n    @include bold;\n  }\n\n  .rows {\n    padding-left: 0;\n  }\n\n  .label {\n    margin-bottom: 0;\n    font-weight: 600;\n  }\n\n  .index {\n    width: 220px;\n  }\n\n  .badge {\n    max-width: fit-content;\n    margin: 0;\n    color: $black-100 !important;\n    text-transform: capitalize;\n\n    &.voting {\n      background-color: $black-30;\n    }\n\n    &.enabled {\n      background-color: $green-60;\n    }\n\n    &.consensus {\n      margin-top: 6px;\n      background-color: $yellow-50;\n      font-weight: 700 !important;\n    }\n  }\n\n  .value {\n    &.eta {\n      &.no {\n        color: $yellow-50 !important;\n      }\n    }\n  }\n\n  .note {\n    .unl {\n      display: inline-block;\n      margin: 0 10px;\n      color: $green-40;\n      vertical-align: middle;\n    }\n  }\n\n  .votes {\n    max-width: 1200px;\n    margin: 48px 0;\n\n    .votes-columns {\n      margin: 48px 0;\n\n      @include for-size(desktop-up) {\n        display: grid;\n        gap: 48px;\n        grid-template-columns: repeat(2, 1fr);\n      }\n\n      .label {\n        @include bold;\n\n        margin-bottom: 24px;\n        font-size: 24px;\n        text-transform: capitalize;\n      }\n\n      .votes-column {\n        min-width: 0;\n        max-width: 100%;\n        flex: 1 1 0px;\n        margin-top: 24px;\n\n        .vals {\n          background: $black-80;\n\n          .row {\n            display: flex;\n            overflow: hidden;\n            padding: 16px;\n            border-bottom: 1px solid $black-70;\n            white-space: nowrap;\n\n            .val {\n              overflow: hidden;\n              max-width: fit-content;\n              flex: 1;\n              font-size: 14px;\n              text-overflow: ellipsis;\n            }\n\n            .unl {\n              margin-left: 8px;\n              color: $green-40;\n            }\n\n            .index {\n              max-width: 16px;\n              margin-right: 24px;\n            }\n          }\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "src/containers/Amendment/index.tsx",
    "content": "import { useContext } from 'react'\nimport axios from 'axios'\nimport { useTranslation } from 'react-i18next'\nimport { useQuery } from 'react-query'\nimport { useWindowSize } from 'usehooks-ts'\nimport { useRouteParams } from '../shared/routing'\nimport { AMENDMENT_ROUTE } from '../App/routes'\nimport NetworkContext from '../shared/NetworkContext'\nimport {\n  FETCH_INTERVAL_ERROR_MILLIS,\n  FETCH_INTERVAL_VHS_MILLIS,\n  NOT_FOUND,\n  SERVER_ERROR,\n} from '../shared/utils'\nimport { Simple } from './Simple'\nimport { AmendmentData } from '../shared/vhsTypes'\nimport Log from '../shared/log'\nimport { Votes } from './Votes'\n\nimport './amendment.scss'\nimport NoMatch from '../NoMatch'\nimport { useAnalytics } from '../shared/analytics'\nimport { Loader } from '../shared/components/Loader'\n\nexport const Amendment = () => {\n  const network = useContext(NetworkContext)\n  const { identifier = '' } = useRouteParams(AMENDMENT_ROUTE)\n  const { width } = useWindowSize()\n  const { t } = useTranslation()\n  const { trackException } = useAnalytics()\n\n  const ERROR_MESSAGES = {\n    [NOT_FOUND]: {\n      title: 'amendment_not_found',\n      hints: ['check_amendment_key'],\n    },\n    default: {\n      title: 'generic_error',\n      hints: ['not_your_fault'],\n    },\n  }\n\n  const getErrorMessage = (error: keyof typeof ERROR_MESSAGES | null) =>\n    (error && ERROR_MESSAGES[error]) || ERROR_MESSAGES.default\n\n  const {\n    data,\n    error,\n    isLoading: isAmendmentLoading,\n  } = useQuery<AmendmentData, keyof typeof ERROR_MESSAGES | null>(\n    ['fetchAmendmentData', identifier, network],\n    async () => fetchAmendmentData(),\n    {\n      refetchInterval: (_) => FETCH_INTERVAL_VHS_MILLIS,\n      refetchOnMount: true,\n      enabled: !!network,\n    },\n  )\n\n  const { data: validators, isLoading: isValidatorsLoading } = useQuery(\n    ['fetchValidatorsData'],\n    () => fetchValidatorsData(),\n    {\n      refetchInterval: (returnedData, _) =>\n        returnedData == null\n          ? FETCH_INTERVAL_ERROR_MILLIS\n          : FETCH_INTERVAL_VHS_MILLIS,\n      refetchOnMount: true,\n      enabled: process.env.VITE_ENVIRONMENT !== 'custom' || !!network,\n    },\n  )\n\n  const fetchAmendmentData = async (): Promise<AmendmentData> => {\n    const url = `${process.env.VITE_DATA_URL}/amendment/vote/${network}/${identifier}`\n    return axios\n      .get(url)\n      .then((resp) => resp.data.amendment)\n      .catch((axiosError) => {\n        const status =\n          axiosError.response && axiosError.response.status\n            ? axiosError.response.status\n            : SERVER_ERROR\n        trackException(`${url} --- ${JSON.stringify(axiosError)}`)\n        return Promise.reject(status)\n      })\n  }\n\n  const fetchValidatorsData = () => {\n    const url = `${process.env.VITE_DATA_URL}/validators/${network}`\n\n    return axios\n      .get(url)\n      .then((resp) => resp.data.validators)\n      .then((vals) =>\n        vals.map((val) => ({\n          pubkey: val.validation_public_key,\n          signing_key: val.signing_key,\n          domain: val.domain,\n          unl: val.unl,\n        })),\n      )\n      .catch((e) => Log.error(e))\n  }\n\n  let body\n\n  if (error) {\n    const message = getErrorMessage(error)\n    body = <NoMatch title={message.title} hints={message.hints} />\n  } else if (data?.id && validators instanceof Array) {\n    body = (\n      <>\n        <div className=\"summary\">\n          <div className=\"type\">{t('amendment_summary')}</div>\n        </div>\n        <div className=\"simple-body\">\n          {data && validators && (\n            <Simple data={data} validators={validators} width={width} />\n          )}\n        </div>\n        {data && validators && <Votes data={data} validators={validators} />}\n      </>\n    )\n  }\n\n  return (\n    <div className=\"amendment-summary\">\n      {(isValidatorsLoading || isAmendmentLoading) && <Loader />}\n      {body}\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/Amendment/test/AmendmentSummary.test.js",
    "content": "import { render, waitFor } from '@testing-library/react'\nimport moxios from 'moxios'\nimport { Route } from 'react-router'\nimport { Amendment } from '..'\nimport i18n from '../../../i18n/testConfig'\nimport NetworkContext from '../../shared/NetworkContext'\nimport { QuickHarness } from '../../test/utils'\nimport { AMENDMENT_ROUTE } from '../../App/routes'\nimport votingAmendment from './mockVotingAmendment.json'\nimport validators from './mockValidatorsList.json'\nimport { NOT_FOUND } from '../../shared/utils'\n\njest.mock('usehooks-ts', () => ({\n  useWindowSize: () => ({\n    width: 375,\n    height: 600,\n  }),\n}))\n\nconst MOCK_IDENTIFIER = votingAmendment.amendment.id\n\ndescribe('Amendments Page container', () => {\n  const renderAmendment = () =>\n    render(\n      <NetworkContext.Provider value=\"main\">\n        <QuickHarness\n          i18n={i18n}\n          initialEntries={[`/amendment/${MOCK_IDENTIFIER}`]}\n        >\n          <Route path={AMENDMENT_ROUTE.path} element={<Amendment />} />\n        </QuickHarness>\n      </NetworkContext.Provider>,\n    )\n\n  const oldEnvs = process.env\n\n  const { ResizeObserver } = window\n\n  beforeEach(() => {\n    moxios.install()\n    process.env = { ...oldEnvs, VITE_ENVIRONMENT: 'mainnet' }\n    window.ResizeObserver = jest.fn().mockImplementation(() => ({\n      observe: jest.fn(),\n      unobserve: jest.fn(),\n      disconnect: jest.fn(),\n    }))\n  })\n\n  afterEach(() => {\n    moxios.uninstall()\n    process.env = oldEnvs\n    window.ResizeObserver = ResizeObserver\n  })\n\n  it('renders without crashing', () => {\n    renderAmendment()\n  })\n\n  it('renders all parts for a voting amendment', async () => {\n    moxios.stubRequest(\n      `${process.env.VITE_DATA_URL}/amendment/vote/main/${MOCK_IDENTIFIER}`,\n      {\n        status: 200,\n        response: votingAmendment,\n      },\n    )\n\n    moxios.stubRequest(`${process.env.VITE_DATA_URL}/validators/main`, {\n      status: 200,\n      response: validators,\n    })\n\n    const { container } = renderAmendment()\n\n    await waitFor(() => {\n      expect(\n        container.querySelector('.amendment-summary .summary .type'),\n      ).toBeInTheDocument()\n    })\n\n    const rows = container.querySelectorAll(\n      '.amendment-summary .simple-body .rows .row',\n    )\n\n    expect(rows[0].querySelector('.value').outerHTML).toBe(\n      '<div class=\"value\">mock-name</div>',\n    )\n\n    expect(rows[1].querySelector('.value').outerHTML).toBe(\n      '<div class=\"value\">mock-amendment-id</div>',\n    )\n\n    expect(rows[2].querySelector('.value').outerHTML).toBe(\n      '<div class=\"value\"><a href=\"https://github.com/XRPLF/rippled/releases/tag/1.12.0\" target=\"_blank\">v1.12.0</a></div>',\n    )\n\n    expect(rows[3].querySelector('.value').outerHTML).toBe(\n      '<div class=\"value\">3/4</div>',\n    )\n\n    expect(rows[4].querySelector('.value a').outerHTML).toBe(\n      '<a href=\"https://xrpl.org/known-amendments.html#mock-name\" target=\"_blank\">https://xrpl.org/known-amendments.html#mock-name</a>',\n    )\n\n    expect(rows[5].querySelector('.value .badge').outerHTML).toBe(\n      '<div class=\"badge voting\">not enabled</div>',\n    )\n\n    expect(rows[6].querySelector('.value').outerHTML).toBe(\n      '<div class=\"value\">2</div>',\n    )\n\n    expect(rows[7].querySelector('.value').outerHTML).toBe(\n      '<div class=\"value\">4</div>',\n    )\n\n    expect(rows[8].querySelector('.value').outerHTML).toBe(\n      '<div class=\"value\">1</div>',\n    )\n\n    expect(rows[9].querySelector('.value').outerHTML).toBe(\n      '<div class=\"value\">3</div>',\n    )\n\n    expect(rows[10].querySelector('.value').outerHTML).toBe(\n      '<div class=\"value eta no\">voting</div>',\n    )\n\n    expect(rows[11].querySelector('.value').outerHTML).toBe(\n      '<div class=\"value badge consensus\">25%</div>',\n    )\n\n    expect(\n      container.querySelectorAll('.amendment-summary .barchart').length,\n    ).toBe(1)\n\n    expect(\n      container.querySelectorAll(\n        '.amendment-summary .votes .votes-columns .votes-column',\n      ).length,\n    ).toBe(2)\n\n    const votesColumns = container.querySelectorAll(\n      '.amendment-summary .votes .votes-columns .votes-column',\n    )\n\n    expect(votesColumns[0].querySelectorAll('.vals .row').length).toBe(2)\n    expect(votesColumns[1].querySelectorAll('.vals .row').length).toBe(4)\n  })\n\n  it('renders 404 page on no match', async () => {\n    moxios.stubRequest(\n      `${process.env.VITE_DATA_URL}/amendment/vote/main/${MOCK_IDENTIFIER}`,\n      {\n        status: NOT_FOUND,\n        response: votingAmendment,\n      },\n    )\n\n    moxios.stubRequest(`${process.env.VITE_DATA_URL}/validators/main`, {\n      status: 200,\n      response: validators,\n    })\n\n    const { container } = renderAmendment()\n\n    await waitFor(() => {\n      expect(container.querySelector('.no-match')).toBeInTheDocument()\n    })\n  })\n})\n"
  },
  {
    "path": "src/containers/Amendment/test/mockValidatorsList.json",
    "content": "{\n  \"count\": 6,\n  \"validators\": [\n    {\n      \"validation_public_key\": \"pub1\",\n      \"signing_key\": \"sign1\",\n      \"domain\": \"domain1.com\",\n      \"unl\": \"vl.ripple.com\"\n    },\n    {\n      \"validation_public_key\": \"pub2\",\n      \"signing_key\": \"sign2\",\n      \"domain\": \"domain2.com\",\n      \"unl\": false\n    },\n    {\n      \"validation_public_key\": \"pub3\",\n      \"signing_key\": \"sign3\",\n      \"domain\": \"domain3.com\",\n      \"unl\": \"vl.ripple.com\"\n    },\n    {\n      \"validation_public_key\": \"pub4\",\n      \"signing_key\": \"sign4\",\n      \"domain\": \"domain4.com\",\n      \"unl\": \"vl.ripple.com\"\n    },\n    {\n      \"validation_public_key\": \"pub5\",\n      \"signing_key\": \"sign5\",\n      \"domain\": \"domain5.com\",\n      \"unl\": false\n    },\n    {\n      \"validation_public_key\": \"pub6\",\n      \"signing_key\": \"sign6\",\n      \"domain\": \"domain6.com\",\n      \"unl\": \"vl.ripple.com\"\n    }\n  ]\n}\n"
  },
  {
    "path": "src/containers/Amendment/test/mockVotingAmendment.json",
    "content": "{\n  \"amendment\": {\n    \"id\": \"mock-amendment-id\",\n    \"name\": \"mock-name\",\n    \"rippled_version\": \"1.12.0\",\n    \"deprecated\": false,\n    \"threshold\": \"3/4\",\n    \"consensus\": \"25%\",\n    \"voted\": {\n      \"count\": 2,\n      \"validators\": [\n        {\n          \"signing_key\": \"sign1\",\n          \"ledger_index\": \"index1\",\n          \"unl\": \"vl.ripple.com\"\n        },\n        {\n          \"signing_key\": \"sign2\",\n          \"ledger_index\": \"82658047\",\n          \"unl\": false\n        }\n      ]\n    }\n  }\n}\n"
  },
  {
    "path": "src/containers/Amendments/AmendmentsTable.tsx",
    "content": "import { FC } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { Link } from 'react-router'\nimport { AMENDMENT_ROUTE, TRANSACTION_ROUTE } from '../App/routes'\nimport { Loader } from '../shared/components/Loader'\nimport { useLanguage } from '../shared/hooks'\nimport { RouteLink } from '../shared/routing'\nimport { localizeDate } from '../shared/utils'\nimport { AmendmentData, Voter } from '../shared/vhsTypes'\n\nconst DATE_OPTIONS_AMENDMENTS = {\n  year: 'numeric',\n  month: 'numeric',\n  day: 'numeric',\n  timeZone: 'UTC',\n}\n\nconst DEFAULT_EMPTY_VALUE = '--'\n\nexport const AmendmentsTable: FC<{\n  amendments: AmendmentData[] | undefined\n}> = ({ amendments }) => {\n  const { t } = useTranslation()\n  const language = useLanguage()\n\n  const renderEnabled = (enabled: boolean) =>\n    enabled ? (\n      <span className=\"badge yes\">{t('yes')}</span>\n    ) : (\n      <span className=\"badge no\">{t('no')}</span>\n    )\n\n  const renderOnTx = (amendment) => {\n    if (amendment.voted) {\n      if (amendment.eta) {\n        const etaLocalized = localizeDate(\n          new Date(amendment.eta),\n          language,\n          DATE_OPTIONS_AMENDMENTS,\n        )\n        return (\n          <div className=\"eta\">\n            <div className=\"eta-label\">{t('eta')}</div>\n            <div>{etaLocalized}</div>\n          </div>\n        )\n      }\n      return <span className=\"voting\">{t('voting')}</span>\n    }\n\n    if (amendment.date) {\n      const dateLocalized = localizeDate(\n        new Date(amendment.date),\n        language,\n        DATE_OPTIONS_AMENDMENTS,\n      )\n      return amendment.tx_hash ? (\n        <RouteLink\n          to={TRANSACTION_ROUTE}\n          params={{ identifier: amendment.tx_hash }}\n        >\n          {dateLocalized}\n        </RouteLink>\n      ) : (\n        <span>{dateLocalized}</span>\n      )\n    }\n\n    return DEFAULT_EMPTY_VALUE\n  }\n\n  const renderName = (name: string, id: string, deprecated: boolean) =>\n    deprecated ? (\n      <div className=\"name-deprecated\">\n        <span className=\"name-text text-truncate\">\n          <RouteLink to={AMENDMENT_ROUTE} params={{ identifier: id }}>\n            {name}\n          </RouteLink>\n        </span>\n        <span className=\"deprecated badge\">{t('deprecated')}</span>\n      </div>\n    ) : (\n      <span className=\"name-text\">\n        <RouteLink to={AMENDMENT_ROUTE} params={{ identifier: id }}>\n          {name}\n        </RouteLink>\n      </span>\n    )\n\n  const getVoter = (voted: Voter | undefined) => {\n    if (!voted) return DEFAULT_EMPTY_VALUE\n    return voted.validators.filter((val) => val.unl !== false).length\n  }\n\n  const renderAmendment = (amendment, index) => (\n    <tr\n      className={`amendment-row${amendment.eta ? ' incoming' : ''}`}\n      key={amendment.id}\n    >\n      <td className=\"count\">{index + 1}</td>\n      <td className=\"version\">\n        {amendment.rippled_version ? (\n          <Link\n            to={`https://github.com/XRPLF/rippled/releases/tag/${amendment.rippled_version}`}\n            target=\"_blank\"\n          >\n            {amendment.rippled_version}\n          </Link>\n        ) : (\n          DEFAULT_EMPTY_VALUE\n        )}\n      </td>\n      <td className=\"amendment-id text-truncate\">{amendment.id}</td>\n      <td className=\"name text-truncate\">\n        {renderName(amendment.name, amendment.id, amendment.deprecated)}\n      </td>\n      <td className=\"voters\">{getVoter(amendment.voted)}</td>\n      <td className=\"threshold\">\n        {amendment.threshold ?? DEFAULT_EMPTY_VALUE}\n      </td>\n      <td className=\"consensus\">\n        {amendment.consensus ?? DEFAULT_EMPTY_VALUE}\n      </td>\n      <td className=\"enabled\">\n        {renderEnabled(!amendment.deprecated && amendment.voted === undefined)}\n      </td>\n      <td className=\"on_tx\">{renderOnTx(amendment)}</td>\n    </tr>\n  )\n\n  const content = amendments ? (\n    <table className=\"basic\">\n      <thead>\n        <tr>\n          <th className=\"count\">#</th>\n          <th className=\"version\">{t('Version')}</th>\n          <th className=\"amendment-id\">{t('amendment_id')}</th>\n          <th className=\"name\">{t('amendment_name')}</th>\n          <th className=\"voters\">{`${t('unl')} ${t('voters')}`}</th>\n          <th className=\"threshold\">{t('threshold')}</th>\n          <th className=\"consensus\">{t('consensus')}</th>\n          <th className=\"enabled\">{t('enabled')}</th>\n          <th className=\"on_tx\">{t('on_tx')}</th>\n        </tr>\n      </thead>\n      <tbody>{amendments.map(renderAmendment)}</tbody>\n    </table>\n  ) : (\n    <Loader />\n  )\n  return <div className=\"amendments-table\">{content}</div>\n}\n"
  },
  {
    "path": "src/containers/Amendments/amendmentsTable.scss",
    "content": "@use '../shared/css/variables' as *;\n@use '../shared/css/table';\n\n.amendments-page {\n  .summary {\n    padding: 0 16px;\n    margin-top: 100px;\n\n    @include for-size(tablet-portrait-up) {\n      padding: 0;\n    }\n\n    .type {\n      display: inline-block;\n      padding-bottom: 24px;\n      color: $white;\n      font-size: 32px;\n\n      @include for-size(tablet-portrait-up) {\n        font-size: 42px;\n      }\n\n      @include bold;\n    }\n  }\n\n  .wrap {\n    overflow: auto;\n    width: 100%;\n    max-width: 1500px;\n    min-height: 150px;\n    margin: auto;\n  }\n}\n\n.amendments-table {\n  position: relative;\n\n  table {\n    .incoming {\n      background: rgba($green-90, 0.7);\n    }\n\n    .eta-label {\n      font-weight: 700;\n      text-transform: uppercase;\n    }\n\n    .name {\n      max-width: 120px;\n\n      @include for-size(tablet-portrait-up) {\n        max-width: 180px;\n      }\n\n      @include for-size(desktop-up) {\n        max-width: 280px;\n      }\n    }\n\n    .amendment-id {\n      display: none;\n      max-width: 120px;\n\n      @include for-size(desktop-up) {\n        display: table-cell;\n        padding-right: 3%;\n      }\n    }\n\n    .name-deprecated {\n      display: flex;\n      overflow: hidden;\n      align-items: center;\n      gap: 6px;\n\n      @include for-size(tablet-portrait-up) {\n        gap: 12px;\n      }\n\n      .name-text {\n        overflow: hidden;\n        max-width: fit-content;\n        flex: 1;\n        text-overflow: ellipsis;\n      }\n\n      .deprecated {\n        overflow: hidden;\n        max-width: 60%;\n        font-size: 12px;\n        text-overflow: ellipsis;\n        text-transform: uppercase;\n\n        &.badge {\n          border: 1px solid $black-30;\n          background-color: $black-80;\n          color: $black-30;\n        }\n      }\n    }\n\n    .version,\n    .enabled,\n    .consensus {\n      max-width: 70px;\n      overflow-wrap: break-word;\n      @include for-size(tablet-portrait-up) {\n        max-width: 100px;\n      }\n    }\n  }\n\n  .badge {\n    margin: 0;\n    color: $black-100;\n    text-transform: uppercase;\n\n    &.yes {\n      background-color: $green-60;\n    }\n\n    &.no {\n      background-color: $black-30;\n    }\n  }\n\n  .voting {\n    margin-left: 0;\n    color: $yellow-50;\n  }\n\n  .voters,\n  .threshold {\n    display: none;\n    max-width: 70px;\n\n    @include for-size(desktop-up) {\n      display: table-cell;\n    }\n  }\n\n  .count {\n    display: none;\n\n    @include for-size(tablet-portrait-up) {\n      display: table-cell;\n    }\n  }\n}\n"
  },
  {
    "path": "src/containers/Amendments/index.tsx",
    "content": "import axios from 'axios'\nimport { useContext } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { useQuery } from 'react-query'\nimport Log from '../shared/log'\nimport NetworkContext from '../shared/NetworkContext'\nimport {\n  FETCH_INTERVAL_ERROR_MILLIS,\n  FETCH_INTERVAL_VHS_MILLIS,\n} from '../shared/utils'\nimport { AmendmentsTable } from './AmendmentsTable'\nimport './amendmentsTable.scss'\n\nexport const Amendments = () => {\n  const network = useContext(NetworkContext)\n  const { t } = useTranslation()\n\n  const { data } = useQuery(\n    ['fetchNetworkAmendmentsData'],\n    async () => fetchData(),\n    {\n      refetchInterval: (returnedData, _) =>\n        returnedData == null\n          ? FETCH_INTERVAL_ERROR_MILLIS\n          : FETCH_INTERVAL_VHS_MILLIS,\n      refetchOnMount: true,\n      enabled: !!network,\n    },\n  )\n\n  const fetchData = async () =>\n    axios\n      .get(`${process.env.VITE_DATA_URL}/amendments/vote/${network}`)\n      .then((resp) => resp.data.amendments)\n      .then((amendments) =>\n        amendments.sort((a, b) => {\n          if (a.eta && !b.eta) return -1\n          if (!a.eta && b.eta) return 1\n          if (a.voted && !b.voted) return -1\n          if (!a.voted && b.voted) return 1\n          return 0\n        }),\n      )\n      .catch((e) => Log.error(e))\n\n  return (\n    <div className=\"amendments-page\">\n      <div className=\"wrap\">\n        <div className=\"summary\">\n          <div className=\"type\">{t('amendments')}</div>\n        </div>\n        <AmendmentsTable amendments={data} />\n      </div>\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/Amendments/test/amendments.test.js",
    "content": "import { render, waitFor } from '@testing-library/react'\nimport moxios from 'moxios'\nimport { Route } from 'react-router'\nimport i18n from '../../../i18n/testConfig'\nimport { Amendments } from '../index'\nimport NetworkContext from '../../shared/NetworkContext'\nimport { QuickHarness } from '../../test/utils'\nimport { AMENDMENTS_ROUTE } from '../../App/routes'\nimport amendmentsRaw from './mockAmendments.json'\n\njest.mock('usehooks-ts', () => ({\n  useWindowSize: () => ({\n    width: 375,\n    height: 600,\n  }),\n}))\n\ndescribe('Amendments Page container', () => {\n  const renderAmendments = () =>\n    render(\n      <NetworkContext.Provider value=\"main\">\n        <QuickHarness i18n={i18n} initialEntries={['/amendments']}>\n          <Route path={AMENDMENTS_ROUTE.path} element={<Amendments />} />\n        </QuickHarness>\n      </NetworkContext.Provider>,\n    )\n\n  const oldEnvs = process.env\n\n  beforeEach(() => {\n    moxios.install()\n    process.env = { ...oldEnvs, VITE_ENVIRONMENT: 'mainnet' }\n  })\n\n  afterEach(() => {\n    moxios.uninstall()\n    process.env = oldEnvs\n  })\n\n  it('renders without crashing', () => {\n    renderAmendments()\n  })\n\n  it('renders all parts', async () => {\n    moxios.stubRequest(`${process.env.VITE_DATA_URL}/amendments/vote/main`, {\n      status: 200,\n      response: amendmentsRaw,\n    })\n    const { container } = renderAmendments()\n\n    expect(container.querySelectorAll('.amendments-table').length).toBe(1)\n    expect(container.querySelector('.type').outerHTML).toBe(\n      '<div class=\"type\">amendments</div>',\n    )\n\n    await waitFor(() => {\n      expect(\n        container.querySelectorAll('.amendments-table table tr').length,\n      ).toBe(amendmentsRaw.amendments.length + 1)\n    })\n\n    const rows = container.querySelectorAll('.amendments-table table tr')\n\n    // Test voting amendment row.\n    expect(rows[2].querySelector('.version').outerHTML).toBe(\n      '<td class=\"version\"><a href=\"https://github.com/XRPLF/rippled/releases/tag/1.12.0\" target=\"_blank\">1.12.0</a></td>',\n    )\n\n    expect(rows[2].querySelector('.count').outerHTML).toBe(\n      '<td class=\"count\">2</td>',\n    )\n\n    expect(rows[2].querySelector('.amendment-id').outerHTML).toBe(\n      '<td class=\"amendment-id text-truncate\">56B241D7A43D40354D02A9DC4C8DF5C7A1F930D92A9035C4E12291B3CA3E1C2B</td>',\n    )\n\n    expect(rows[2].querySelector('.name .name-text').outerHTML).toBe(\n      '<span class=\"name-text\"><a class=\"\" href=\"/amendment/56B241D7A43D40354D02A9DC4C8DF5C7A1F930D92A9035C4E12291B3CA3E1C2B\" data-discover=\"true\">Clawback</a></span>',\n    )\n\n    expect(rows[2].querySelector('.voters').outerHTML).toBe(\n      '<td class=\"voters\">4</td>',\n    )\n\n    expect(rows[2].querySelector('.enabled').outerHTML).toBe(\n      '<td class=\"enabled\"><span class=\"badge no\">no</span></td>',\n    )\n\n    expect(rows[2].querySelector('.on_tx').outerHTML).toBe(\n      '<td class=\"on_tx\"><span class=\"voting\">voting</span></td>',\n    )\n\n    // Test enabled amendment row.\n    expect(rows[4].querySelector('.version').outerHTML).toBe(\n      '<td class=\"version\"><a href=\"https://github.com/XRPLF/rippled/releases/tag/1.10.0\" target=\"_blank\">1.10.0</a></td>',\n    )\n\n    expect(rows[4].querySelector('.count').outerHTML).toBe(\n      '<td class=\"count\">4</td>',\n    )\n\n    expect(rows[4].querySelector('.amendment-id').outerHTML).toBe(\n      '<td class=\"amendment-id text-truncate\">75A7E01C505DD5A179DFE3E000A9B6F1EDDEB55A12F95579A23E15B15DC8BE5A</td>',\n    )\n\n    expect(rows[4].querySelector('.name .name-text').outerHTML).toBe(\n      '<span class=\"name-text\"><a class=\"\" href=\"/amendment/75A7E01C505DD5A179DFE3E000A9B6F1EDDEB55A12F95579A23E15B15DC8BE5A\" data-discover=\"true\">ImmediateOfferKilled</a></span>',\n    )\n\n    expect(rows[4].querySelector('.enabled').outerHTML).toBe(\n      '<td class=\"enabled\"><span class=\"badge yes\">yes</span></td>',\n    )\n\n    expect(rows[4].querySelector('.on_tx').outerHTML).toBe(\n      '<td class=\"on_tx\"><a class=\"\" href=\"/transactions/65B8A4068B20696A866A07E5668B2AEB0451564E13B79421356FB962EC9A536B\" data-discover=\"true\">8/21/2023</a></td>',\n    )\n  })\n})\n"
  },
  {
    "path": "src/containers/Amendments/test/amendmentsTable.test.js",
    "content": "import { render } from '@testing-library/react'\nimport { BrowserRouter as Router } from 'react-router'\nimport { I18nextProvider } from 'react-i18next'\nimport i18n from '../../../i18n/testConfig'\nimport { AmendmentsTable } from '../AmendmentsTable'\nimport amendmentsRaw from './mockAmendments.json'\n\n/* eslint-disable react/jsx-props-no-spreading */\nconst renderAmendmentsTable = (props = {}) =>\n  render(\n    <Router>\n      <I18nextProvider i18n={i18n}>\n        <AmendmentsTable {...props} />\n      </I18nextProvider>\n    </Router>,\n  )\n\ndescribe('Amendments table', () => {\n  it('renders without crashing', () => {\n    renderAmendmentsTable()\n  })\n\n  it('renders all parts', () => {\n    const { container } = renderAmendmentsTable({\n      amendments: amendmentsRaw.amendments,\n    })\n    expect(container.querySelectorAll('tr').length).toBe(\n      amendmentsRaw.amendments.length + 1,\n    )\n  })\n})\n"
  },
  {
    "path": "src/containers/Amendments/test/mockAmendments.json",
    "content": "{\n  \"amendments\": [\n    {\n      \"id\": \"2E2FB9CF8A44EB80F4694D38AADAE9B8B7ADAFD2F092E10068E61C98C4F092B0\",\n      \"ledger_index\": 81986305,\n      \"tx_hash\": \"EFE82B7155CE5B766AF343D98DAE6662C2713C99E760D610370D02338881B2F3\",\n      \"date\": \"2023-08-21T05:59:11.000Z\",\n      \"name\": \"fixUniversalNumber\",\n      \"rippled_version\": \"1.10.0\",\n      \"deprecated\": false\n    },\n    {\n      \"id\": \"75A7E01C505DD5A179DFE3E000A9B6F1EDDEB55A12F95579A23E15B15DC8BE5A\",\n      \"ledger_index\": 81986305,\n      \"tx_hash\": \"65B8A4068B20696A866A07E5668B2AEB0451564E13B79421356FB962EC9A536B\",\n      \"date\": \"2023-08-21T05:59:11.000Z\",\n      \"name\": \"ImmediateOfferKilled\",\n      \"rippled_version\": \"1.10.0\",\n      \"deprecated\": false\n    },\n    {\n      \"id\": \"8CC0774A3BF66D1D22E76BBDA8E8A232E6B6313834301B3B23E8601196AE6455\",\n      \"name\": \"AMM\",\n      \"rippled_version\": \"1.12.0\",\n      \"deprecated\": false,\n      \"threshold\": \"28/35\",\n      \"consensus\": \"2.86%\",\n      \"voted\": {\n        \"count\": 10,\n        \"validators\": [\n          {\n            \"signing_key\": \"n9J2qUgyFNvhmCQTh6vDe6rhtwAregTnP3SZbSFaUamdBH3X1RMw\",\n            \"ledger_index\": \"83151615\",\n            \"unl\": false\n          },\n          {\n            \"signing_key\": \"n9L7m2qvpDm4Jc7vBpW2gb5TJEbj1UNDxWyiYX91c2wBCWHknnA5\",\n            \"ledger_index\": \"83151615\",\n            \"unl\": false\n          },\n          {\n            \"signing_key\": \"n9LbM9S5jeGopF5J1vBDoGxzV6rNS8K1T5DzhNynkFLqR9N2fywX\",\n            \"ledger_index\": \"83151615\",\n            \"unl\": \"vl.ripple.com\"\n          },\n          {\n            \"signing_key\": \"n94NK1FSM9d6wkMsUhzPVPPGPzNxcEJNV5LguNoFRAa7V2o4Vmpf\",\n            \"ledger_index\": \"83151615\",\n            \"unl\": false\n          },\n          {\n            \"signing_key\": \"n9JiUqAXcHFzNFtdJ9uYeNZsdJTs1LGf4zr98bN7mWHxdtDpijAB\",\n            \"ledger_index\": \"83151615\",\n            \"unl\": false\n          },\n          {\n            \"signing_key\": \"n9MvZFp2pmgNrNffcVF2YLnFi6W3SjXcgeei7PqggfB94UUkxcFC\",\n            \"ledger_index\": \"83151615\",\n            \"unl\": false\n          },\n          {\n            \"signing_key\": \"n9L8gNy4bXu8P8hR4wCPFvpomr6rtTRMUT5nX8jiYUVZD1oQ1dx5\",\n            \"ledger_index\": \"83151615\",\n            \"unl\": false\n          },\n          {\n            \"signing_key\": \"n9JebyUXwBa5GoYJQ6AbupoMKyE2zaiR3FTfDTMkxpMMv1KPmQEn\",\n            \"ledger_index\": \"83151615\",\n            \"unl\": false\n          },\n          {\n            \"signing_key\": \"n9LkKWDtnHvmauvBXC3xqaG2G8QMcFAAvRFbJLT5maBv7SwQnd9p\",\n            \"ledger_index\": \"83151615\",\n            \"unl\": false\n          },\n          {\n            \"signing_key\": \"n9MxDjQMr1DkzW3Z5X1guKJq4QNDEeYFPgqGgHfpzerGbHWGZvj4\",\n            \"ledger_index\": \"83151615\",\n            \"unl\": false\n          }\n        ]\n      }\n    },\n    {\n      \"id\": \"56B241D7A43D40354D02A9DC4C8DF5C7A1F930D92A9035C4E12291B3CA3E1C2B\",\n      \"name\": \"Clawback\",\n      \"rippled_version\": \"1.12.0\",\n      \"deprecated\": false,\n      \"threshold\": \"28/35\",\n      \"consensus\": \"11.43%\",\n      \"voted\": {\n        \"count\": 17,\n        \"validators\": [\n          {\n            \"signing_key\": \"n94aSAP9QcYtmKxgCTxcv3xeD2cB6tuwH3mNDQzrjAQ5DTu7SfZi\",\n            \"ledger_index\": \"83151615\",\n            \"unl\": false\n          },\n          {\n            \"signing_key\": \"n9Kto4YT6BqYbz5CYDqU8pqmw7k1dZD9eUrTt3CppAh5Vo2HmUct\",\n            \"ledger_index\": \"83151615\",\n            \"unl\": false\n          },\n          {\n            \"signing_key\": \"n9LHt3x8EhVWatBKuEWYNBas1jxiAdsxtP5QtohtcPZgRUan4Jgi\",\n            \"ledger_index\": \"83151615\",\n            \"unl\": false\n          },\n          {\n            \"signing_key\": \"n9LoWo183FhqjMznQ6aLNhWZ1gJvQdrnFq2QQn7wPgeZtvuPm68j\",\n            \"ledger_index\": \"83151615\",\n            \"unl\": false\n          },\n          {\n            \"signing_key\": \"n9L7m2qvpDm4Jc7vBpW2gb5TJEbj1UNDxWyiYX91c2wBCWHknnA5\",\n            \"ledger_index\": \"83151615\",\n            \"unl\": false\n          },\n          {\n            \"signing_key\": \"n94a894ARPe5RdcaRgdMBB9gG9ukS5mqsd7q2oNmC1NKqtZqEJnb\",\n            \"ledger_index\": \"83151615\",\n            \"unl\": \"vl.ripple.com\"\n          },\n          {\n            \"signing_key\": \"n94NK1FSM9d6wkMsUhzPVPPGPzNxcEJNV5LguNoFRAa7V2o4Vmpf\",\n            \"ledger_index\": \"83151615\",\n            \"unl\": false\n          },\n          {\n            \"signing_key\": \"n9JiUqAXcHFzNFtdJ9uYeNZsdJTs1LGf4zr98bN7mWHxdtDpijAB\",\n            \"ledger_index\": \"83151615\",\n            \"unl\": false\n          },\n          {\n            \"signing_key\": \"n9LkAv98aaGupypuLMH5ogjJ3rTEX178s9EnmRvmySL9k3cVuxTu\",\n            \"ledger_index\": \"83151615\",\n            \"unl\": \"vl.ripple.com\"\n          },\n          {\n            \"signing_key\": \"n9MvZFp2pmgNrNffcVF2YLnFi6W3SjXcgeei7PqggfB94UUkxcFC\",\n            \"ledger_index\": \"83151615\",\n            \"unl\": false\n          },\n          {\n            \"signing_key\": \"n9L8gNy4bXu8P8hR4wCPFvpomr6rtTRMUT5nX8jiYUVZD1oQ1dx5\",\n            \"ledger_index\": \"83151615\",\n            \"unl\": false\n          },\n          {\n            \"signing_key\": \"n9LkKWDtnHvmauvBXC3xqaG2G8QMcFAAvRFbJLT5maBv7SwQnd9p\",\n            \"ledger_index\": \"83151615\",\n            \"unl\": false\n          },\n          {\n            \"signing_key\": \"n9MaaevqYJSUezZuqSmVps7NeDrs6TEbRFcm3ZG2tjJHNCY6gv4p\",\n            \"ledger_index\": \"83151615\",\n            \"unl\": false\n          },\n          {\n            \"signing_key\": \"n9MxDjQMr1DkzW3Z5X1guKJq4QNDEeYFPgqGgHfpzerGbHWGZvj4\",\n            \"ledger_index\": \"83151615\",\n            \"unl\": false\n          },\n          {\n            \"signing_key\": \"n9KaxgJv69FucW5kkiaMhCqS6sAR1wUVxpZaZmLGVXxAcAse9YhR\",\n            \"ledger_index\": \"83151615\",\n            \"unl\": \"vl.ripple.com\"\n          },\n          {\n            \"signing_key\": \"n9JvsY3yhCdsHe3JsVTwvCtvKnchg2eridHLWdBdWf8VkpZSqqS9\",\n            \"ledger_index\": \"83151615\",\n            \"unl\": \"vl.ripple.com\"\n          },\n          {\n            \"signing_key\": \"n94rGrfuwvYTS1HEeWboW2nGvAQgVDpiD8id2pLWSHFVggBRpQRE\",\n            \"ledger_index\": \"83151615\",\n            \"unl\": false\n          }\n        ]\n      }\n    }\n  ]\n}\n"
  },
  {
    "path": "src/containers/App/App.tsx",
    "content": "import { Outlet } from 'react-router'\nimport { FC, memo } from 'react'\nimport './app.scss'\n\nimport { SocketProvider } from '../shared/SocketContext'\nimport { NetworkProvider } from '../shared/NetworkContext'\nimport { Header } from '../Header'\nimport { TooltipProvider } from '../shared/components/Tooltip'\n\n// memoize to prevent react-router from creating a new socket ever single time a rew route is loaded\nexport const App: FC<{ rippledUrl: string }> = memo(\n  ({ rippledUrl }: { rippledUrl: string }) => (\n    <SocketProvider rippledUrl={rippledUrl}>\n      <NetworkProvider rippledUrl={rippledUrl}>\n        <TooltipProvider>\n          <Header inNetwork />\n          <div className=\"content\">\n            <Outlet />\n          </div>\n        </TooltipProvider>\n      </NetworkProvider>\n    </SocketProvider>\n  ),\n)\n"
  },
  {
    "path": "src/containers/App/AppErrorBoundary.tsx",
    "content": "import { Component, ErrorInfo, PropsWithChildren } from 'react'\n\nimport { analytics } from '../shared/analytics'\n\nexport type AppErrorBoundaryProps = PropsWithChildren<{}>\n/**\n * Needs to be a class due to React not having a componentDidCatch hook equivalent.\n */\nclass AppErrorBoundary extends Component<AppErrorBoundaryProps> {\n  componentDidCatch(error: Error, info: ErrorInfo) {\n    analytics.trackException(\n      `${error.toString()} -------->>>>>  ${info.componentStack}`,\n    )\n  }\n\n  render() {\n    const { children } = this.props\n\n    return children\n  }\n}\n\nexport default AppErrorBoundary\n"
  },
  {
    "path": "src/containers/App/app.scss",
    "content": "@use '../shared/css/variables' as *;\n\n.app {\n  flex-grow: 1;\n\n  .content {\n    position: relative;\n    display: flex;\n    width: 100%;\n    min-height: 100%;\n    flex-direction: column;\n    justify-content: center;\n    margin-bottom: 50px;\n\n    @include for-size(desktop-up) {\n      min-height: $min-height;\n    }\n  }\n\n  .content,\n  .footer {\n    min-width: $min-width;\n  }\n}\n"
  },
  {
    "path": "src/containers/App/featureFlags.ts",
    "content": "export const FEATURE_VAULTS_PAGE = false\n"
  },
  {
    "path": "src/containers/App/index.tsx",
    "content": "import { Route, useLocation, Routes, Navigate } from 'react-router'\nimport { Helmet, HelmetProvider } from 'react-helmet-async'\nimport { QueryClientProvider } from 'react-query'\nimport { useTranslation } from 'react-i18next'\nimport Footer from '../Footer'\nimport './app.scss'\n\nimport { App } from './App'\nimport CustomNetworkHome from '../CustomNetworkHome'\nimport AppErrorBoundary from './AppErrorBoundary'\nimport NoMatch from '../NoMatch'\nimport { queryClient } from '../shared/QueryClient'\nimport { AnalyticsSetPath, useAnalytics } from '../shared/analytics'\nimport { RouteDefinition } from '../shared/routing'\nimport {\n  ACCOUNT_ROUTE,\n  LEDGER_ROUTE,\n  LEDGERS_ROUTE,\n  NFT_ROUTE,\n  TOKEN_ROUTE,\n  TRANSACTION_ROUTE,\n  VALIDATOR_ROUTE,\n  AMENDMENTS_ROUTE,\n  AMENDMENT_ROUTE,\n  MPT_ROUTE,\n  VAULT_ROUTE,\n  NODES_ROUTE,\n  VALIDATORS_ROUTE,\n  UPGRADE_STATUS_ROUTE,\n  TOKENS_ROUTE,\n  VAULTS_ROUTE,\n  AMM_RANKINGS_ROUTE,\n  AMM_POOL_ROUTE,\n  SEARCH_RESULT_ROUTE,\n} from './routes'\nimport { LedgersPage as Ledgers } from '../Ledgers'\nimport { Ledger } from '../Ledger'\nimport { AccountsRouter } from '../Accounts/AccountsRouter'\nimport { Transaction } from '../Transactions'\nimport { Validator } from '../Validators'\nimport { IOU } from '../Token/IOU'\nimport { NFT } from '../NFT/NFT'\nimport { legacyRedirect } from './legacyRedirects'\nimport { useCustomNetworks } from '../shared/hooks'\nimport { Amendments } from '../Amendments'\nimport { Amendment } from '../Amendment'\nimport { MPT } from '../Token/MPT'\nimport { Nodes } from '../Network/Nodes'\nimport { Validators } from '../Network/Validators'\nimport { UpgradeStatus } from '../Network/UpgradeStatus'\nimport { Tokens } from '../Tokens'\nimport { TokenNonMain } from '../TokenNonMain'\nimport { Vault } from '../Vault'\nimport { Vaults } from '../Vaults'\nimport { AMMPool } from '../AMMPool'\nimport { AMMRankings } from '../AMMRankings'\nimport SearchResult from '../SearchResult'\nimport { FEATURE_VAULTS_PAGE } from './featureFlags'\n\nexport const AppWrapper = () => {\n  const mode = process.env.VITE_ENVIRONMENT\n\n  const { setGlobals } = useAnalytics()\n  const [customNetworks = [], setCustomNetworks] = useCustomNetworks()\n  const { t } = useTranslation()\n  const location = useLocation()\n\n  setGlobals({\n    network: mode,\n  })\n  const rippledUrl = mode === 'custom' ? location.pathname.split('/')[1] : ''\n  const basename = mode === 'custom' ? `/${rippledUrl}` : ''\n  const updatePath = (path) => `${basename}${path}`\n\n  if (rippledUrl && !customNetworks.includes(rippledUrl)) {\n    setCustomNetworks(customNetworks.concat([rippledUrl]).sort())\n  }\n\n  // Defined here rather than ./routes to avoid circular dependencies when using RouteDefinitions with <RouteLink>.\n  const routes = (\n    [\n      [LEDGERS_ROUTE, Ledgers],\n      [LEDGER_ROUTE, Ledger],\n      [ACCOUNT_ROUTE, AccountsRouter],\n      [TRANSACTION_ROUTE, Transaction],\n      [NODES_ROUTE, Nodes],\n      [VALIDATORS_ROUTE, Validators],\n      [UPGRADE_STATUS_ROUTE, UpgradeStatus],\n      [AMENDMENTS_ROUTE, Amendments],\n      [VALIDATOR_ROUTE, Validator],\n      [TOKEN_ROUTE, mode === 'mainnet' ? IOU : TokenNonMain],\n      [TOKENS_ROUTE, Tokens],\n      [NFT_ROUTE, NFT],\n      [AMENDMENT_ROUTE, Amendment],\n      [MPT_ROUTE, MPT],\n      [VAULT_ROUTE, Vault],\n      [AMM_POOL_ROUTE, AMMPool],\n      mode === 'mainnet' && [AMM_RANKINGS_ROUTE, AMMRankings],\n      FEATURE_VAULTS_PAGE && [VAULTS_ROUTE, Vaults],\n      [SEARCH_RESULT_ROUTE, SearchResult],\n    ] as (false | [RouteDefinition<any>, any])[]\n  ).filter(Boolean) as [RouteDefinition<any>, any][]\n\n  const redirect = legacyRedirect(basename, location)\n\n  return (\n    <HelmetProvider>\n      <AnalyticsSetPath />\n      <QueryClientProvider client={queryClient}>\n        <div className=\"app-wrapper\">\n          <AppErrorBoundary>\n            <Helmet\n              defaultTitle={t('xrpl_explorer')}\n              titleTemplate={`${t('xrpl_explorer')} | %s`}\n            >\n              <meta name=\"description\" content={t('app.meta.description')} />\n              <meta name=\"author\" content={t('app.meta.author')} />\n            </Helmet>\n            <div className=\"app\">\n              <Routes>\n                {/* Start: Redirects */}\n                {/* Ensures redirects happen without loading other routes. Specifically for hash routes */}\n                {redirect && (\n                  <Route\n                    path=\"/\"\n                    element={<Navigate to={redirect} replace />}\n                  />\n                )}\n                <Route\n                  path={updatePath('/explorer')}\n                  element={<Navigate to={updatePath('/')} replace />}\n                />\n                <Route\n                  path={updatePath('/ledgers')}\n                  element={<Navigate to={updatePath('/')} replace />}\n                />\n                <Route\n                  path={updatePath('/index.html')}\n                  element={<Navigate to={updatePath('/')} replace />}\n                />\n                <Route\n                  path={updatePath('/index.htm')}\n                  element={<Navigate to={updatePath('/')} replace />}\n                />\n                {/* End: Redirects */}\n                {mode === 'custom' && (\n                  <Route path=\"/\" element={<CustomNetworkHome />} />\n                )}\n                <Route element={<App rippledUrl={rippledUrl} />}>\n                  {routes.map(([route, Component]) => (\n                    <Route\n                      key={route.path}\n                      path={updatePath(route.path)}\n                      element={<Component />}\n                    />\n                  ))}\n                  <Route path=\"*\" element={<NoMatch />} />\n                </Route>\n              </Routes>\n              <Footer />\n            </div>\n          </AppErrorBoundary>\n        </div>\n      </QueryClientProvider>\n    </HelmetProvider>\n  )\n}\n"
  },
  {
    "path": "src/containers/App/legacyRedirects.tsx",
    "content": "import { useLocation } from 'react-router'\n\nexport const legacyRedirect = (\n  basename,\n  location: ReturnType<typeof useLocation>,\n): string | null => {\n  if (location.hash && location.pathname === `${basename}/`) {\n    if (location.hash.indexOf('#/transactions/') === 0) {\n      const identifier = location.hash.split('#/transactions/')[1]\n      return `${basename}/transactions/${identifier}`\n    }\n    if (location.hash.indexOf('#/graph') === 0) {\n      const identifier = location.hash.split('#/graph/')[1]\n      if (identifier) {\n        return `${basename}/accounts/${identifier}`\n      }\n\n      return `${basename}/`\n    }\n  }\n\n  return null\n}\n"
  },
  {
    "path": "src/containers/App/navigation.ts",
    "content": "import { buildPath } from '../shared/routing'\nimport { NavigationMenuAnyRoute } from '../Header/NavigationMenu'\nimport {\n  AMENDMENTS_ROUTE,\n  LEDGERS_ROUTE,\n  NODES_ROUTE,\n  TOKENS_ROUTE,\n  UPGRADE_STATUS_ROUTE,\n  VALIDATORS_ROUTE,\n  VAULTS_ROUTE,\n  AMM_RANKINGS_ROUTE,\n} from './routes'\nimport { FEATURE_VAULTS_PAGE } from './featureFlags'\n\nconst isNetwork = (path) =>\n  path.indexOf(buildPath(VALIDATORS_ROUTE, {})) === 0 ||\n  path.indexOf(buildPath(NODES_ROUTE, {})) === 0 ||\n  path.indexOf(buildPath(UPGRADE_STATUS_ROUTE, {})) === 0 ||\n  path.indexOf(buildPath(AMENDMENTS_ROUTE, {})) === 0\n\nconst isLedgers = (path: string) => path === '/'\n\nconst isTokens = (path) => path.indexOf(buildPath(TOKENS_ROUTE, {})) === 0\n\nconst isVaults = (path) => path.indexOf(buildPath(VAULTS_ROUTE, {})) === 0\n\nconst isAMMs = (path) => path.indexOf(buildPath(AMM_RANKINGS_ROUTE, {})) === 0\n\n// NOTE: for submenus, remove `path` field and add `children` array of objects\nexport const navigationConfig: NavigationMenuAnyRoute[] = [\n  {\n    route: LEDGERS_ROUTE,\n    title: 'explorer',\n    current: (path: string) => isLedgers(path),\n  },\n  process.env.VITE_ENVIRONMENT === 'mainnet' && {\n    route: TOKENS_ROUTE,\n    title: 'tokens',\n    current: (path: string) => isTokens(path),\n  },\n  FEATURE_VAULTS_PAGE &&\n    process.env.VITE_ENVIRONMENT === 'mainnet' && {\n      route: VAULTS_ROUTE,\n      title: 'vaults',\n      current: (path: string) => isVaults(path),\n    },\n  process.env.VITE_ENVIRONMENT === 'mainnet' && {\n    route: AMM_RANKINGS_ROUTE,\n    title: 'amms',\n    current: (path: string) => isAMMs(path),\n  },\n  {\n    title: 'network',\n    current: (path: string) => isNetwork(path),\n    children: [\n      {\n        route: NODES_ROUTE,\n        title: 'nodes',\n        current: (path: string) => isNetwork(path),\n      },\n      {\n        route: VALIDATORS_ROUTE,\n        title: 'validators',\n        current: (path: string) => isNetwork(path),\n      },\n      {\n        route: UPGRADE_STATUS_ROUTE,\n        title: 'upgrade_status',\n        current: (path: string) => isNetwork(path),\n      },\n      {\n        route: AMENDMENTS_ROUTE,\n        title: 'amendments',\n        current: (path: string) => isNetwork(path),\n      },\n    ],\n  },\n  {\n    link: 'https://xrpl.org',\n    title: 'xrpl_org',\n  },\n  {\n    link: 'https://github.com/ripple/explorer',\n    title: 'github',\n  },\n].filter(Boolean) as NavigationMenuAnyRoute[]\n"
  },
  {
    "path": "src/containers/App/routes.ts",
    "content": "import { RouteDefinition } from '../shared/routing'\n\nexport const ACCOUNT_ROUTE: RouteDefinition<{\n  id?: string\n  tab?: 'assets' | 'transactions'\n  assetType?: 'issued' | 'nfts' | 'mpts'\n}> = {\n  path: '/accounts/:id?/:tab?/:assetType?',\n}\n\nexport const LEDGERS_ROUTE: RouteDefinition = {\n  path: '/',\n}\n\nexport const LEDGER_ROUTE: RouteDefinition<{\n  identifier: number | string\n}> = {\n  path: `/ledgers/:identifier`,\n}\n\nexport const NODES_ROUTE: RouteDefinition = {\n  path: '/network/nodes',\n}\n\nexport const VALIDATORS_ROUTE: RouteDefinition<{\n  tab?: 'uptime' | 'voting'\n}> = {\n  path: '/network/validators/:tab?',\n}\n\nexport const UPGRADE_STATUS_ROUTE: RouteDefinition = {\n  path: '/network/upgrade-status',\n}\n\nexport const NFT_ROUTE: RouteDefinition<{\n  id: string\n  tab?: 'transactions' | 'buy-offers' | 'sell-offers'\n}> = {\n  path: '/nft/:id/:tab?',\n}\n\nexport const TOKEN_ROUTE: RouteDefinition<{\n  token: string\n}> = {\n  path: `/token/:token`,\n}\n\nexport const TRANSACTION_ROUTE: RouteDefinition<{\n  identifier: string\n  tab?: 'simple' | 'detailed' | 'raw'\n}> = {\n  path: `/transactions/:identifier?/:tab?`,\n}\n\nexport const VALIDATOR_ROUTE: RouteDefinition<{\n  identifier: string\n  tab?: 'details' | 'history' | 'voting'\n}> = {\n  path: `/validators/:identifier/:tab?`,\n}\n\nexport const AMENDMENTS_ROUTE: RouteDefinition = {\n  path: '/amendments',\n}\n\nexport const TOKENS_ROUTE: RouteDefinition = {\n  path: '/tokens',\n}\n\nexport const AMENDMENT_ROUTE: RouteDefinition<{\n  identifier: string\n}> = {\n  path: `/amendment/:identifier`,\n}\n\nexport const MPT_ROUTE: RouteDefinition<{\n  id: string\n}> = {\n  path: '/mpt/:id',\n}\n\nexport const VAULT_ROUTE: RouteDefinition<{\n  id: string\n}> = {\n  path: '/vault/:id',\n}\n\nexport const VAULTS_ROUTE: RouteDefinition = {\n  path: '/vaults',\n}\n\nexport const AMM_RANKINGS_ROUTE: RouteDefinition = {\n  path: '/amms',\n}\n\nexport const AMM_POOL_ROUTE: RouteDefinition<{\n  id: string\n  tab?: 'transactions' | 'dex-trades' | 'deposits' | 'withdrawals' | 'holders'\n}> = {\n  path: '/amm/:id/:tab?',\n}\n\nexport const SEARCH_RESULT_ROUTE: RouteDefinition<{\n  id: string\n}> = {\n  path: '/search/:id',\n}\n"
  },
  {
    "path": "src/containers/App/test/App.test.jsx",
    "content": "import { render, cleanup, waitFor } from '@testing-library/react'\nimport moxios from 'moxios'\nimport { MemoryRouter } from 'react-router'\nimport { I18nextProvider } from 'react-i18next'\nimport { XrplClient } from 'xrpl-client'\nimport i18n from '../../../i18n/testConfig'\nimport { AppWrapper } from '../index'\nimport MockWsClient from '../../test/mockWsClient'\nimport { getAccountInfo } from '../../../rippled/lib/rippled'\nimport { flushPromises } from '../../test/utils'\nimport { CUSTOM_NETWORKS_STORAGE_KEY } from '../../shared/hooks'\nimport { Error } from '../../../rippled/lib/utils'\n\njest.mock('../../Ledgers/LedgerMetrics', () => ({\n  __esModule: true,\n  LedgerMetrics: () => null,\n}))\n\njest.mock('xrpl-client', () => ({\n  XrplClient: jest.fn(),\n}))\n\njest.mock('../../../rippled/lib/rippled', () => {\n  const originalModule = jest.requireActual('../../../rippled/lib/rippled')\n\n  return {\n    __esModule: true,\n    ...originalModule,\n    getAccountInfo: jest.fn(),\n  }\n})\n\njest.mock('../../../rippled', () => {\n  const originalModule = jest.requireActual('../../../rippled')\n  const { formatTransaction } = jest.requireActual('../../../rippled/lib/utils')\n\n  return {\n    __esModule: true,\n    ...originalModule,\n    getTransaction: () =>\n      Promise.resolve({\n        processed: formatTransaction({\n          TransactionType: 'OfferCreate',\n          meta: {\n            TransactionResult: 'tecKILLED',\n          },\n        }),\n      }),\n    getAccountTransactions: () => Promise.resolve({}),\n    getAccountState: () => Promise.resolve({}),\n    getLedger: () => Promise.resolve({}),\n  }\n})\n\njest.mock('../../../rippled/lib/rippled', () => {\n  const originalModule = jest.requireActual('../../../rippled/lib/rippled')\n\n  return {\n    __esModule: true,\n    ...originalModule,\n    getAccountInfo: jest.fn(),\n  }\n})\n\nconst mockXrplClient = XrplClient\nconst mockGetAccountInfo = getAccountInfo\n\ndescribe('App container', () => {\n  const renderApp = (\n    path = '/',\n    localNetworks = [],\n    accountInfoMock = () =>\n      Promise.resolve({\n        flags: 0,\n      }),\n  ) => {\n    mockGetAccountInfo.mockImplementation(accountInfoMock)\n\n    localStorage.removeItem(CUSTOM_NETWORKS_STORAGE_KEY)\n    if (localNetworks) {\n      localStorage.setItem(\n        CUSTOM_NETWORKS_STORAGE_KEY,\n        JSON.stringify(localNetworks),\n      )\n    }\n\n    return render(\n      <MemoryRouter initialEntries={[path]}>\n        <I18nextProvider i18n={i18n}>\n          <AppWrapper />\n        </I18nextProvider>\n      </MemoryRouter>,\n    )\n  }\n\n  const oldEnvs = process.env\n\n  beforeEach(() => {\n    moxios.install()\n    moxios.stubRequest(\n      `${process.env.VITE_DATA_URL}/get_network/s2.ripple.com`,\n      { status: 200, response: { result: 'success', network: '3' } },\n    )\n    mockXrplClient.mockImplementation(() => new MockWsClient())\n    process.env = { ...oldEnvs, VITE_ENVIRONMENT: 'mainnet' }\n  })\n\n  afterEach(() => {\n    cleanup()\n    process.env = oldEnvs\n  })\n\n  it('renders main parts', () => {\n    const { container } = renderApp()\n    expect(container.querySelectorAll('.header').length).toBe(1)\n    expect(container.querySelectorAll('.content').length).toBe(1)\n    expect(container.querySelectorAll('.footer').length).toBe(1)\n  })\n\n  it('renders home', async () => {\n    const { container } = renderApp()\n    await waitFor(() => {\n      expect(document.title).toEqual('xrpl_explorer | ledgers')\n      expect(window.dataLayer).toEqual([\n        {\n          page_path: '/',\n          page_title: `xrpl_explorer | ledgers`,\n          event: 'screen_view',\n          network: 'mainnet',\n        },\n      ])\n    })\n    expect(container.querySelector('header')).not.toHaveClass(\n      'header-no-network',\n    )\n    expect(container.querySelectorAll('.ledgers').length).toBe(1)\n  })\n\n  it('renders ledger explorer page', async () => {\n    renderApp('/ledgers')\n    await flushPromises()\n    await flushPromises()\n\n    expect(document.title).toEqual('xrpl_explorer | ledgers')\n    expect(window.dataLayer).toEqual([\n      {\n        page_path: '/',\n        page_title: `xrpl_explorer | ledgers`,\n        event: 'screen_view',\n        network: 'mainnet',\n      },\n    ])\n  })\n\n  it('renders ledger explorer page from index.html redirect', async () => {\n    renderApp('/index.html')\n    await flushPromises()\n    await flushPromises()\n\n    expect(document.title).toEqual('xrpl_explorer | ledgers')\n    expect(window.dataLayer).toEqual([\n      {\n        page_path: '/',\n        page_title: `xrpl_explorer | ledgers`,\n        event: 'screen_view',\n        network: 'mainnet',\n      },\n    ])\n  })\n\n  it('renders ledger explorer page from index.htm redirect', async () => {\n    renderApp('/index.html')\n    await flushPromises()\n    await flushPromises()\n\n    expect(document.title).toEqual('xrpl_explorer | ledgers')\n    expect(window.dataLayer).toEqual([\n      {\n        page_path: '/',\n        page_title: `xrpl_explorer | ledgers`,\n        event: 'screen_view',\n        network: 'mainnet',\n      },\n    ])\n  })\n\n  it('renders not found page', async () => {\n    renderApp('/zzz')\n    await waitFor(() => {\n      expect(document.title).toEqual('xrpl_explorer | not_found_default_title')\n      expect(window.dataLayer).toEqual([\n        {\n          description: 'not_found_default_title -- not_found_check_url',\n          event: 'not_found',\n          network: 'mainnet',\n          page_path: '/zzz',\n        },\n      ])\n    })\n  })\n\n  it('renders ledger page', async () => {\n    const id = 12345\n    renderApp(`/ledgers/${id}`)\n    await flushPromises()\n    await flushPromises()\n\n    expect(document.title).toEqual(`xrpl_explorer | ledger ${id}`)\n    expect(window.dataLayer).toEqual([\n      {\n        page_path: '/ledgers/12345',\n        page_title: `xrpl_explorer | ledger ${id}`,\n        event: 'screen_view',\n        network: 'mainnet',\n      },\n    ])\n  })\n\n  it('renders transaction page', async () => {\n    const id =\n      '50BB0CC6EFC4F5EF9954E654D3230D4480DC83907A843C736B28420C7F02F774'\n    renderApp(`/transactions/${id}`)\n    await flushPromises()\n    await flushPromises()\n\n    expect(document.title).toEqual(\n      `xrpl_explorer | transaction_short 50BB0CC6...`,\n    )\n    expect(window.dataLayer).toEqual([\n      {\n        page_path:\n          '/transactions/50BB0CC6EFC4F5EF9954E654D3230D4480DC83907A843C736B28420C7F02F774',\n        page_title: 'xrpl_explorer | transaction_short 50BB0CC6...',\n        event: 'screen_view',\n        network: 'mainnet',\n        tec_code: 'tecKILLED',\n        transaction_action: 'CREATE',\n        transaction_category: 'DEX',\n        transaction_type: 'OfferCreate',\n      },\n    ])\n  })\n\n  it('renders transaction page with invalid hash', async () => {\n    const id = '12345'\n    renderApp(`/transactions/${id}`)\n    await waitFor(() => {\n      expect(document.title).toEqual(`xrpl_explorer | invalid_transaction_hash`)\n      expect(window.dataLayer).toEqual([\n        {\n          page_path: '/transactions/12345',\n          event: 'not_found',\n          network: 'mainnet',\n          description: 'invalid_transaction_hash -- check_transaction_hash',\n        },\n      ])\n    })\n  })\n\n  it('renders transaction page with no hash', async () => {\n    const { container } = renderApp(`/transactions/`)\n    await waitFor(() => {\n      expect(container.querySelector('.no-match .title')).toBeInTheDocument()\n    })\n    expect(container.querySelector('.no-match .title').textContent).toBe(\n      'transaction_empty_title',\n    )\n    expect(container.querySelector('.no-match .hint').textContent).toBe(\n      'transaction_empty_hint',\n    )\n    await waitFor(() => {\n      expect(window.dataLayer).toEqual([\n        {\n          page_path: '/transactions/',\n          event: 'not_found',\n          network: 'mainnet',\n          description: 'transaction_empty_title -- transaction_empty_hint',\n        },\n      ])\n    })\n  })\n\n  it('renders account page for classic address', async () => {\n    const id = 'rKV8HEL3vLc6q9waTiJcewdRdSFyx67QFb'\n    renderApp(`/accounts/${id}#ssss`)\n    await flushPromises()\n    await flushPromises()\n    await waitFor(() => {\n      expect(document.title).toEqual(`xrpl_explorer | rKV8HEL3vLc6...`)\n      expect(window.dataLayer).toEqual([\n        {\n          page_path: '/accounts/rKV8HEL3vLc6q9waTiJcewdRdSFyx67QFb#ssss',\n          page_title: 'xrpl_explorer | rKV8HEL3vLc6...',\n          event: 'screen_view',\n          network: 'mainnet',\n        },\n      ])\n    })\n  })\n\n  it('renders account page for malformed', async () => {\n    const id = 'rZaChweF5oXn'\n    renderApp(`/accounts/${id}#ssss`, [], () =>\n      Promise.reject(new Error('account not found', 404)),\n    )\n    await waitFor(() => {\n      expect(document.title).toEqual(`xrpl_explorer | invalid_xrpl_address`)\n      expect(window.dataLayer).toEqual([\n        {\n          page_path: '/accounts/rZaChweF5oXn#ssss',\n          description: 'invalid_xrpl_address -- check_account_id',\n          event: 'not_found',\n          network: 'mainnet',\n        },\n      ])\n    })\n  })\n\n  it('renders account page for a deleted account', async () => {\n    const id = 'r35jYntLwkrbc3edisgavDbEdNRSKgcQE6'\n    renderApp(`/accounts/${id}#ssss`, [], () =>\n      Promise.reject(new Error('account not found', 404)),\n    )\n    await waitFor(() => {\n      expect(document.title).toEqual(`xrpl_explorer | r35jYntLwkrb...`)\n      expect(window.dataLayer).toEqual([\n        {\n          page_path: '/accounts/r35jYntLwkrbc3edisgavDbEdNRSKgcQE6#ssss',\n          page_title: `xrpl_explorer | r35jYntLwkrb...`,\n          event: 'screen_view',\n          network: 'mainnet',\n        },\n      ])\n    })\n    expect(mockGetAccountInfo).toHaveBeenCalledWith(\n      expect.anything(),\n      'r35jYntLwkrbc3edisgavDbEdNRSKgcQE6',\n    )\n  })\n\n  it('renders account page for x-address', async () => {\n    const id = 'XVVFXHFdehYhofb7XRWeJYV6kjTEwboaHpB9S1ruYMsuXcG'\n    renderApp(`/accounts/${id}#ssss`)\n    await waitFor(() => {\n      expect(document.title).toEqual(`xrpl_explorer | XVVFXHFdehYh...`)\n      expect(window.dataLayer).toEqual([\n        {\n          page_path:\n            '/accounts/XVVFXHFdehYhofb7XRWeJYV6kjTEwboaHpB9S1ruYMsuXcG#ssss',\n          page_title: `xrpl_explorer | XVVFXHFdehYh...`,\n          event: 'screen_view',\n          network: 'mainnet',\n        },\n      ])\n    })\n    expect(mockGetAccountInfo).toHaveBeenCalledWith(\n      expect.anything(),\n      'rKV8HEL3vLc6q9waTiJcewdRdSFyx67QFb',\n    )\n  })\n\n  it('renders account page with no id', async () => {\n    const { container } = renderApp(`/accounts/`)\n    await waitFor(() => {\n      expect(container.querySelector('.no-match .title')).toBeInTheDocument()\n    })\n    expect(container.querySelector('.no-match .title').textContent).toBe(\n      'account_empty_title',\n    )\n    expect(container.querySelector('.no-match .hint').textContent).toBe(\n      'account_empty_hint',\n    )\n    await waitFor(() => {\n      expect(window.dataLayer).toEqual([\n        {\n          page_path: '/accounts/',\n          event: 'not_found',\n          network: 'mainnet',\n          description: 'account_empty_title -- account_empty_hint',\n        },\n      ])\n    })\n  })\n\n  it('redirects legacy transactions page', async () => {\n    const id =\n      '50BB0CC6EFC4F5EF9954E654D3230D4480DC83907A843C736B28420C7F02F774'\n    renderApp(`/#/transactions/${id}`)\n    await waitFor(() => {\n      expect(document.title).toEqual(\n        `xrpl_explorer | transaction_short 50BB0CC6...`,\n      )\n      expect(window.dataLayer).toEqual([\n        {\n          page_path:\n            '/transactions/50BB0CC6EFC4F5EF9954E654D3230D4480DC83907A843C736B28420C7F02F774',\n          event: 'screen_view',\n          network: 'mainnet',\n          page_title: 'xrpl_explorer | transaction_short 50BB0CC6...',\n          tec_code: 'tecKILLED',\n          transaction_action: 'CREATE',\n          transaction_category: 'DEX',\n          transaction_type: 'OfferCreate',\n        },\n      ])\n    })\n  })\n\n  it('redirects legacy account page', async () => {\n    const id = 'rKV8HEL3vLc6q9waTiJcewdRdSFyx67QFb'\n    renderApp(`/#/graph/${id}#ssss`)\n    await waitFor(() => {\n      expect(document.title).toEqual(`xrpl_explorer | rKV8HEL3vLc6...`)\n      expect(window.dataLayer).toEqual([\n        {\n          page_path: '/accounts/rKV8HEL3vLc6q9waTiJcewdRdSFyx67QFb#ssss',\n          page_title: 'xrpl_explorer | rKV8HEL3vLc6...',\n          event: 'screen_view',\n          network: 'mainnet',\n        },\n      ])\n    })\n  })\n\n  it('redirects legacy account page with no account', async () => {\n    renderApp(`/#/graph/`)\n    await waitFor(() => {\n      expect(document.title).toEqual(`xrpl_explorer | ledgers`)\n      expect(window.dataLayer).toEqual([\n        {\n          page_path: '/',\n          page_title: 'xrpl_explorer | ledgers',\n          event: 'screen_view',\n          network: 'mainnet',\n        },\n      ])\n    })\n  })\n\n  it('renders custom mode homepage', async () => {\n    process.env.VITE_ENVIRONMENT = 'custom'\n    delete process.env.VITE_P2P_RIPPLED_HOST\n    const { container } = renderApp('/')\n    await flushPromises()\n    expect(container.querySelector('header')).toHaveClass('header-no-network')\n    expect(XrplClient).toHaveBeenCalledTimes(0)\n    expect(document.title).toEqual(`xrpl_explorer`)\n  })\n\n  it('renders custom mode ledgers without trailing slash', async () => {\n    process.env.VITE_ENVIRONMENT = 'custom'\n    delete process.env.VITE_P2P_RIPPLED_HOST\n\n    delete process.env.VITE_CUSTOMNETWORK_LINK\n    process.env.VITE_CUSTOMNETWORK_LINK = 'https://custom.xrpl.org'\n\n    const network = 's2.ripple.com'\n    const { container } = renderApp(`/${network}/`)\n    await flushPromises()\n    expect(container.querySelector('header')).not.toHaveClass(\n      'header-no-network',\n    )\n    expect(XrplClient).toHaveBeenCalledTimes(1)\n    expect(document.title).toEqual(`xrpl_explorer | ledgers`)\n  })\n\n  it('renders custom mode ledgers with trailing slash', async () => {\n    process.env.VITE_ENVIRONMENT = 'custom'\n    delete process.env.VITE_P2P_RIPPLED_HOST\n\n    delete process.env.VITE_CUSTOMNETWORK_LINK\n    process.env.VITE_CUSTOMNETWORK_LINK = 'https://custom.xrpl.org/'\n\n    const network = 's2.ripple.com'\n    const { container } = renderApp(`/${network}/`)\n    await flushPromises()\n    expect(container.querySelector('header')).not.toHaveClass(\n      'header-no-network',\n    )\n    expect(XrplClient).toHaveBeenCalledTimes(1)\n    expect(document.title).toEqual(`xrpl_explorer | ledgers`)\n  })\n})\n"
  },
  {
    "path": "src/containers/App/test/AppErrorBoundary.test.tsx",
    "content": "import { render } from '@testing-library/react'\nimport { analytics } from '../../shared/analytics'\nimport AppErrorBoundary from '../AppErrorBoundary'\n\njest.mock('../../shared/analytics', () => {\n  const { analytics: originalAnalytics } = jest.requireActual(\n    '../../shared/analytics',\n  )\n  jest.spyOn(originalAnalytics, 'trackException')\n  return {\n    __esModule: true,\n    analytics: originalAnalytics,\n  }\n})\n\nconst ProblemChild = () => {\n  throw new Error('Error thrown from problem child')\n}\n\ndescribe('<AppErrorBoundary> component', () => {\n  it('calls analytics with exception', () => {\n    render(\n      <AppErrorBoundary>\n        <ProblemChild />\n      </AppErrorBoundary>,\n    )\n    expect(analytics.trackException).toHaveBeenCalledWith(expect.anything())\n  })\n})\n"
  },
  {
    "path": "src/containers/CustomNetworkHome/index.scss",
    "content": "@use '../shared/css/variables' as *;\n\n.app {\n  position: relative;\n\n  .custom-network-main-page {\n    position: relative;\n    min-height: 600px;\n    color: $white;\n\n    .logo-content {\n      display: flex;\n      flex-direction: column;\n      align-items: center;\n      justify-content: center;\n      padding: auto;\n      margin-top: -20px;\n      text-align: center;\n\n      .custom-network-logo {\n        display: none;\n        @include for-size(tablet-landscape-up) {\n          display: inherit;\n          height: auto;\n        }\n\n        @include for-size(desktop-up) {\n          width: 280px;\n        }\n\n        @media (height >= 800px) {\n          width: 350px;\n        }\n      }\n\n      .page-header {\n        margin-top: -20px;\n        font-size: 20px;\n        @include bold;\n\n        @include for-size(tablet-landscape-up) {\n          font-size: 24px;\n        }\n\n        @include for-size(desktop-up) {\n          font-size: 42px;\n        }\n      }\n\n      .input-help {\n        margin: 16px 0;\n        font-size: 14px;\n      }\n\n      input {\n        width: 50%;\n        min-width: 300px;\n        height: 40px;\n        padding: 8px 16px;\n        border: none;\n        border-radius: 100px;\n        margin: 10px 16px;\n        background-color: $black-80;\n        color: $white;\n        font-size: 16px;\n        letter-spacing: 0.01em;\n        line-height: 24px;\n\n        &::placeholder {\n          overflow: visible;\n          color: $black-40;\n        }\n      }\n\n      .custom-network-input-button {\n        box-sizing: border-box;\n        padding: 8px 16px;\n        border: 1px solid $custom;\n        border-radius: 100px;\n        margin: 16px;\n        color: $custom;\n        font-size: 14px;\n\n        &:hover,\n        &:focus {\n          border: 1px solid $white;\n          color: $white;\n          cursor: pointer;\n        }\n      }\n    }\n\n    .custom-network-list {\n      display: flex;\n      flex-direction: column;\n      align-items: normal;\n      margin: 0% 10%;\n      margin-top: 40px;\n      margin-bottom: 70px;\n      font-size: 16px;\n      text-align: left;\n\n      .custom-network-header {\n        padding-bottom: 24px;\n        border-bottom: 1px solid $black-80;\n        font-size: 20px;\n        @include bold;\n      }\n\n      .custom-network-item {\n        display: flex;\n        flex-direction: row;\n        justify-content: space-between;\n        padding: 24px 0;\n        border-bottom: 1px solid $black-80;\n        color: inherit;\n        font-size: 16px;\n        text-decoration: none;\n\n        &:hover,\n        &:focus {\n          color: $custom;\n          cursor: pointer;\n        }\n\n        .custom-network-arrow {\n          text-align: right;\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "src/containers/CustomNetworkHome/index.tsx",
    "content": "import { KeyboardEvent, useEffect, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { Link } from 'react-router'\nimport CustomNetworkLogo from '../shared/images/custom_network_logo.svg'\nimport RightArrow from '../shared/images/side_arrow_green.svg'\nimport { useAnalytics } from '../shared/analytics'\nimport './index.scss'\nimport { useCustomNetworks } from '../shared/hooks'\nimport { Header } from '../Header'\nimport { locationAssign } from '../shared/navigate'\n\nconst CustomNetworkHome = () => {\n  const { track, trackScreenLoaded } = useAnalytics()\n  const { t } = useTranslation()\n  const [networkText, setNetworkText] = useState('')\n  const [customNetworks = []] = useCustomNetworks()\n\n  useEffect(() => {\n    trackScreenLoaded()\n  }, [trackScreenLoaded])\n\n  function switchMode(desiredLink: string) {\n    // Remove trailing slash from custom network link\n    const customNetworkUrl =\n      process.env.VITE_CUSTOMNETWORK_LINK?.charAt(\n        process.env.VITE_CUSTOMNETWORK_LINK.length - 1,\n      ) === '/'\n        ? process.env.VITE_CUSTOMNETWORK_LINK?.slice(0, -1)\n        : process.env.VITE_CUSTOMNETWORK_LINK\n\n    const url = `${customNetworkUrl}/${desiredLink}`\n\n    track('network_switch', {\n      network: 'custom',\n      entrypoint: desiredLink,\n    })\n\n    // TODO: do some validation on this??\n    locationAssign(url)\n  }\n\n  function customNetworkOnKeyDown(event: KeyboardEvent<HTMLInputElement>) {\n    if (event.key === 'Enter' && networkText != null) {\n      switchMode(networkText)\n    }\n  }\n\n  function renderCustomNetwork(network: string) {\n    return (\n      <Link key={network} className=\"custom-network-item\" to={`/${network}`}>\n        <div key={network} className=\"custom-network-text\">\n          {network}\n        </div>\n        <RightArrow className=\"custom-network-arrow\" />\n      </Link>\n    )\n  }\n\n  return (\n    <>\n      <Header inNetwork={false} />\n      <div className=\"custom-network-main-page\">\n        <div className=\"logo-content\">\n          <CustomNetworkLogo className=\"custom-network-logo\" />\n          <div className=\"page-header\">{t('custom_network')}</div>\n          <div className=\"input-help\">{t('custom_network_input_help')}</div>\n          <input\n            className=\"custom-network-input\"\n            type=\"text\"\n            placeholder={t('custom_network_input')}\n            onKeyDown={customNetworkOnKeyDown}\n            value={networkText}\n            onChange={(event) => setNetworkText(event.target.value)}\n          />\n        </div>\n        {customNetworks.length > 0 && (\n          <div className=\"custom-network-list\">\n            <div className=\"custom-network-header\">{t('custom_networks')}</div>\n            {customNetworks.map(renderCustomNetwork)}\n          </div>\n        )}\n      </div>\n    </>\n  )\n}\n\nexport default CustomNetworkHome\n"
  },
  {
    "path": "src/containers/CustomNetworkHome/test/CustomNetworkHome.test.js",
    "content": "import { render, fireEvent } from '@testing-library/react'\nimport i18n from '../../../i18n/testConfig'\nimport CustomNetworkHome from '../index'\nimport MockWsClient from '../../test/mockWsClient'\nimport { CUSTOM_NETWORKS_STORAGE_KEY } from '../../shared/hooks'\nimport { QuickHarness } from '../../test/utils'\nimport { locationAssign } from '../../shared/navigate'\n\njest.mock('../../shared/navigate', () => ({\n  locationAssign: jest.fn(),\n}))\n\ndescribe('CustomNetworkHome page', () => {\n  let client\n\n  const renderCustomNetworkHome = (localNetworks = null) => {\n    localStorage.removeItem(CUSTOM_NETWORKS_STORAGE_KEY)\n    if (localNetworks) {\n      localStorage.setItem(\n        CUSTOM_NETWORKS_STORAGE_KEY,\n        JSON.stringify(localNetworks),\n      )\n    }\n\n    return render(\n      <QuickHarness i18n={i18n}>\n        <CustomNetworkHome />\n      </QuickHarness>,\n    )\n  }\n\n  beforeEach(async () => {\n    client = new MockWsClient()\n  })\n\n  afterEach(() => {\n    client.close()\n  })\n\n  it('renders without crashing', () => {\n    const { container } = renderCustomNetworkHome()\n    const pageNode = container.querySelectorAll('.custom-network-main-page')\n    expect(pageNode.length).toEqual(1)\n  })\n\n  it('renders with saved networks', () => {\n    const { container } = renderCustomNetworkHome(['custom_url', 'custom_url2'])\n    const networkTexts = container.querySelectorAll('.custom-network-text')\n    expect(networkTexts.length).toEqual(2)\n    expect(networkTexts[0].textContent).toBe('custom_url')\n    expect(networkTexts[1].textContent).toBe('custom_url2')\n  })\n\n  describe('test redirects', () => {\n    const oldEnvs = process.env\n\n    beforeEach(() => {\n      locationAssign.mockClear()\n      process.env = { ...oldEnvs, VITE_ENVIRONMENT: 'mainnet' }\n    })\n\n    afterEach(() => {\n      process.env = oldEnvs\n    })\n\n    it('redirect works on `enter` in textbox', () => {\n      const { container } = renderCustomNetworkHome()\n      const input = container.querySelector('.custom-network-input')\n      expect(input).toBeInTheDocument()\n\n      fireEvent.change(input, { target: { value: 'custom_url' } })\n      fireEvent.keyDown(input, {\n        key: 'Enter',\n        currentTarget: { value: 'custom_url' },\n      })\n\n      expect(locationAssign).toHaveBeenCalledWith(\n        `${process.env.VITE_CUSTOMNETWORK_LINK}/custom_url`,\n      )\n    })\n  })\n})\n"
  },
  {
    "path": "src/containers/Footer/footer.scss",
    "content": "@use '../shared/css/variables' as *;\n\n.footer {\n  position: relative;\n  display: flex;\n  flex-direction: column;\n  justify-content: space-around;\n  border-top: 1px solid $black-80;\n  margin: 0 10%;\n\n  .footer-links {\n    display: flex;\n    flex-direction: column;\n    justify-content: space-around;\n\n    @include for-size(tablet-landscape-up) {\n      flex-direction: row;\n    }\n  }\n\n  .footer-link-section {\n    padding-top: 40px;\n  }\n\n  .footer-section-header {\n    margin-bottom: 24px;\n    color: $white;\n    font-size: 16px;\n    font-style: normal;\n    font-weight: 700;\n    letter-spacing: 0em;\n    line-height: 20px;\n    text-align: left;\n  }\n\n  .footer-link {\n    display: block;\n    font-size: 14px;\n    font-style: normal;\n    font-weight: 400;\n    letter-spacing: 0em;\n    line-height: 21px;\n    text-align: left;\n    text-decoration: none;\n\n    // Hide external link icon for footer\n    &::after {\n      content: none;\n    }\n  }\n\n  .footer-branding {\n    margin-top: 40px;\n  }\n\n  .logo {\n    margin-bottom: 11px;\n    color: $white;\n    font-size: 14px;\n    @include regular;\n\n    @include for-size(desktop-up) {\n      display: inline-block;\n    }\n\n    .text {\n      display: inline-block;\n      padding: 7px 0px;\n    }\n\n    .image {\n      width: 130px;\n      margin: 0px 8px -1px 0px;\n      vertical-align: bottom;\n    }\n  }\n\n  .copyright {\n    margin-top: 20px;\n    color: $black-40;\n    font-size: 12px;\n    @include medium;\n\n    @include for-size(desktop-up) {\n      width: 320px;\n      margin-top: 8px;\n      clear: right;\n      float: right;\n      text-align: right;\n    }\n\n    .link {\n      color: inherit;\n      text-decoration: none;\n    }\n  }\n}\n"
  },
  {
    "path": "src/containers/Footer/index.tsx",
    "content": "import type { FC } from 'react'\nimport { useTranslation } from 'react-i18next'\n\nimport Logo from '../shared/images/XRPLedger.svg'\nimport './footer.scss'\n\nconst Footer: FC = () => {\n  const { t } = useTranslation()\n\n  return (\n    <div className=\"footer\">\n      <div className=\"footer-links\">\n        <div className=\"footer-link-section\">\n          <div className=\"footer-section-header\">Learn</div>\n          <a href=\"https://xrpl.org/overview.html\" className=\"footer-link\">\n            Overview\n          </a>\n          <a href=\"https://xrpl.org/uses.html\" className=\"footer-link\">\n            Uses\n          </a>\n          <a href=\"https://xrpl.org/history.html\" className=\"footer-link\">\n            History\n          </a>\n          <a href=\"https://xrpl.org/impact.html\" className=\"footer-link\">\n            Impact\n          </a>\n        </div>\n\n        <div className=\"footer-link-section\">\n          <div className=\"footer-section-header\">Build</div>\n          <a href=\"https://xrpl.org/get-started.html\" className=\"footer-link\">\n            Get Started\n          </a>\n          <a href=\"https://xrpl.org/docs.html\" className=\"footer-link\">\n            Docs\n          </a>\n          <a href=\"https://xrpl.org/dev-tools.html\" className=\"footer-link\">\n            Tools\n          </a>\n          <a href=\"https://livenet.xrpl.org/\" className=\"footer-link\">\n            Ledger Explorer\n          </a>\n          <a href=\"https://xrpl.org/blog/\" className=\"footer-link\">\n            Dev Blog\n          </a>\n        </div>\n\n        <div className=\"footer-link-section\">\n          <div className=\"footer-section-header\">Contribute</div>\n          <a href=\"https://xrpl.org/contribute.html\" className=\"footer-link\">\n            How to Contribute\n          </a>\n          <a href=\"https://github.com/ripple/explorer\" className=\"footer-link\">\n            XRPL Explorer on GitHub\n          </a>\n          <a\n            href=\"https://github.com/XRPLF/xrpl-dev-portal\"\n            className=\"footer-link\"\n          >\n            XRPL.org Docs on GitHub\n          </a>\n        </div>\n      </div>\n      <div className=\"footer-branding\">\n        <div className=\"logo\">\n          <Logo className=\"image\" alt={t('xrpl_explorer')} />\n          <span className=\"text\">\n            {t('explorer')}\n            <span className=\"version\">\n              {' '}\n              {t('version', { number: process.env.VITE_APP_VERSION })}\n            </span>\n          </span>\n        </div>\n        <div className=\"copyright\">\n          <span>&#169;&nbsp;</span>\n          <a\n            className=\"link\"\n            target=\"_blank\"\n            rel=\"noopener noreferrer\"\n            href=\"https://xrpl.org\"\n          >\n            XRP Ledger Project\n          </a>\n          <span>&nbsp;2012-{new Date().getFullYear()}</span>\n        </div>\n      </div>\n    </div>\n  )\n}\n\nexport default Footer\n"
  },
  {
    "path": "src/containers/Footer/test/Footer.test.tsx",
    "content": "import { render } from '@testing-library/react'\nimport { I18nextProvider } from 'react-i18next'\nimport i18n from '../../../i18n/testConfig'\nimport Footer from '../index'\n\ndescribe('Footer component', () => {\n  const renderFooter = () =>\n    render(\n      <I18nextProvider i18n={i18n}>\n        <Footer />\n      </I18nextProvider>,\n    )\n\n  it('renders without crashing', () => {\n    renderFooter()\n  })\n\n  it('renders all parts', () => {\n    const { container } = renderFooter()\n    expect(container.querySelectorAll('.logo')).toHaveLength(1)\n    expect(container.querySelectorAll('.copyright')).toHaveLength(1)\n    expect(container.querySelectorAll('.footer-link')).toHaveLength(12)\n    expect(container.querySelectorAll('.footer-section-header')).toHaveLength(3)\n  })\n})\n"
  },
  {
    "path": "src/containers/Header/LanguagePicker/LanguagePicker.scss",
    "content": "@use '../../shared/css/variables' as *;\n\n.language-picker {\n  margin-left: auto;\n\n  .dropdown-toggle {\n    border-color: transparent;\n  }\n\n  .arrow {\n    color: $blue-purple-40;\n  }\n}\n"
  },
  {
    "path": "src/containers/Header/LanguagePicker/LanguagePicker.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { useLanguage } from '../../shared/hooks'\nimport { Dropdown, DropdownItem } from '../../shared/components/Dropdown'\nimport './LanguagePicker.scss'\nimport { supportedLanguages } from '../../../i18n/baseConfig'\n\nexport const LanguagePicker = () => {\n  const { i18n } = useTranslation()\n  const currentLanguage = useLanguage()\n\n  const handleLanguageClick = (language: string) => () => {\n    i18n.changeLanguage(language)\n  }\n\n  return (\n    <div className=\"language-picker\">\n      <Dropdown\n        title={supportedLanguages[currentLanguage]}\n        className=\"dropdown-right\"\n      >\n        {Object.entries(supportedLanguages)\n          .filter(([language]) => language !== currentLanguage)\n          .map(([language, languageName]) => (\n            <DropdownItem\n              key={language}\n              className={`language-picker-${language}`}\n              handler={handleLanguageClick(language)}\n            >\n              {languageName}\n            </DropdownItem>\n          ))}\n      </Dropdown>\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/Header/LanguagePicker/test/LanguagePicker.test.tsx",
    "content": "import { render, fireEvent } from '@testing-library/react'\nimport i18next from 'i18next'\nimport { I18nextProvider } from 'react-i18next'\nimport { LanguagePicker } from '../LanguagePicker'\nimport testConfigEnglish from '../../../../i18n/testConfigEnglish'\n\ndescribe('LanguagePicker component', () => {\n  it('should switch language', () => {\n    const { container } = render(\n      <I18nextProvider i18n={testConfigEnglish}>\n        <LanguagePicker />\n      </I18nextProvider>,\n    )\n\n    fireEvent.click(container.querySelector('.dropdown-toggle')!)\n    fireEvent.click(\n      container.querySelector('.dropdown-item.language-picker-ja-JP')!,\n    )\n\n    expect(i18next.language).toEqual('ja-JP')\n  })\n})\n"
  },
  {
    "path": "src/containers/Header/NavigationMenu/NavigationMenu.scss",
    "content": "@use 'sass:math';\n\n@use '../../shared/css/variables' as *;\n\n$menu-toggle-size: 25px;\n$menu-toggle-line-spacing: math.div($menu-toggle-size, 4);\n$menu-toggle-line-length: $menu-toggle-size - $menu-toggle-line-spacing;\n\n.topbar,\n.navbar {\n  display: flex;\n  width: 100%;\n}\n\n.navbar {\n  flex-wrap: wrap;\n  align-items: center;\n  margin: 0 auto;\n  gap: 0 16px;\n\n  .navbar-nav a {\n    display: block;\n  }\n}\n\n.navbar-brand {\n  display: flex;\n  align-items: center;\n\n  svg {\n    height: 26px;\n    color: #fff;\n  }\n}\n\n.navbar-collapse {\n  display: none;\n  width: 100%;\n  height: 100%;\n  flex-basis: 100%;\n  margin-left: auto;\n}\n\n.nav-search {\n  flex-grow: 1;\n}\n\n.nav-link {\n  color: $white;\n  font-size: 14px;\n}\n\n/* Nav menu */\n.navbar-nav {\n  display: block;\n  padding: 0;\n  margin: 0 auto 0 0;\n  list-style: none;\n\n  .btn {\n    padding: 0;\n    border: none;\n    font-weight: normal;\n  }\n\n  .dropdown-toggle {\n    gap: 8px;\n\n    &:hover {\n      background: transparent;\n    }\n  }\n}\n\n/* Menu Icon */\n.navbar-toggle {\n  display: flex;\n  width: $menu-toggle-size;\n  height: $menu-toggle-size;\n  align-items: center;\n  justify-content: center;\n  margin-left: auto;\n  cursor: pointer;\n}\n\n.navbar-toggle-line {\n  position: relative;\n  display: block;\n  width: $menu-toggle-line-length;\n  height: 2px;\n  background: white;\n\n  &::before,\n  &::after {\n    position: absolute;\n    display: block;\n    width: 100%;\n    height: 100%;\n    background: white;\n    content: '';\n    transition: all 0.2s ease-out;\n  }\n\n  &::before {\n    top: $menu-toggle-line-spacing;\n  }\n\n  &::after {\n    top: -$menu-toggle-line-spacing;\n  }\n}\n\n/* Open Mobile Menu */\n.navbar-toggle-state:checked ~ .navbar-toggle {\n  .navbar-toggle-line {\n    width: 51px; // sqrt(($menu-toggle-line-length)^2 * 2)\n    background: transparent;\n\n    &::before {\n      top: 0;\n      transform: rotate(-45deg);\n    }\n\n    &::after {\n      top: 0;\n      transform: rotate(45deg);\n    }\n  }\n}\n\n// Prevents navigation from keeping styles when menu is opened on mobile sizes and then resized larger\n@media (max-width: $tablet-landscape-upper-boundary) {\n  .navbar-collapse {\n    max-height: 100%;\n    margin-top: 24px;\n\n    .navbar-toggle-state:checked ~ & {\n      display: block;\n    }\n\n    .nav-item {\n      margin-bottom: 10px;\n    }\n\n    .nav-link,\n    .dropdown-toggle {\n      padding: 15px 1px 16px 8px;\n      border-left: 8px solid transparent;\n      background-position: center center;\n      background-size: cover;\n    }\n\n    .selected .nav-link {\n      border-left-color: #32e685;\n    }\n\n    .dropdown {\n      display: block;\n    }\n\n    .dropdown-menu {\n      position: static;\n      padding-left: 15px;\n      border: none;\n      margin: 0;\n    }\n  }\n\n  .dropdown-item:hover {\n    background: transparent !important;\n  }\n\n  .dot {\n    display: none;\n  }\n}\n\n/* Responsiveness */\n@media (min-width: $tablet-landscape-upper-boundary) {\n  .navbar {\n    flex-wrap: nowrap;\n    margin: 0 auto;\n\n    .navbar-collapse {\n      position: relative;\n      top: 0;\n      display: block;\n      width: fit-content;\n      max-height: none;\n      background-color: transparent;\n    }\n  }\n\n  .navbar-toggle {\n    display: none;\n  }\n\n  .navbar-nav {\n    display: flex !important;\n    align-items: center;\n    gap: 0 28px;\n\n    .nav-item {\n      position: relative;\n    }\n  }\n}\n\n.selected {\n  .dot {\n    position: absolute;\n    top: calc(100% + 6px);\n    width: 6px;\n    height: 6px;\n    border-radius: 100%;\n    margin-left: 50%;\n    background-color: $green;\n  }\n\n  :hover {\n    color: $white;\n  }\n\n  :focus {\n    color: $white;\n  }\n}\n"
  },
  {
    "path": "src/containers/Header/NavigationMenu/NavigationMenu.tsx",
    "content": "import classnames from 'classnames'\nimport { useRef } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { useLocation, Link } from 'react-router'\nimport Logo from '../../shared/images/XRPLedger.svg'\nimport { Search } from '../Search'\nimport { Dropdown, DropdownItem } from '../../shared/components/Dropdown'\nimport type { defaultTranslationsKey } from '../../../../@types/i18next'\nimport { useAnalytics } from '../../shared/analytics'\nimport { buildPath, RouteLink, RouteDefinition } from '../../shared/routing'\n\nimport './NavigationMenu.scss'\n\nexport interface NavigationMenuRoute {\n  title: defaultTranslationsKey\n  current?: (path: string) => boolean\n}\n\nexport interface NavigationMenuParentRoute extends NavigationMenuRoute {\n  children: NavigationMenuInternalRoute[]\n}\n\nexport interface NavigationMenuExternalRoute extends NavigationMenuRoute {\n  link: string\n}\n\nexport interface NavigationMenuInternalRoute extends NavigationMenuRoute {\n  route: RouteDefinition<any>\n  params?: any\n}\n\nexport type NavigationMenuAnyRoute =\n  | NavigationMenuParentRoute\n  | NavigationMenuExternalRoute\n  | NavigationMenuInternalRoute\n\nexport const NavigationMenu = ({\n  routes,\n}: {\n  routes: NavigationMenuAnyRoute[]\n}) => {\n  const { track } = useAnalytics()\n  const location = useLocation()\n  const { t } = useTranslation()\n  const toggle = useRef<HTMLInputElement>(null)\n\n  // manually set toggle to false because the <Link> component will `preventDefault` breaking the <label> technique\n  const forceClose = () => {\n    if (toggle.current) {\n      toggle.current.checked = false\n    }\n  }\n\n  const trackOpened = () => {\n    track('mobile_menu', {})\n  }\n\n  return (\n    <nav className=\"navbar\">\n      <Link to=\"/\" className=\"navbar-brand\">\n        <Logo alt={t('xrpl_explorer')} />\n      </Link>\n\n      <input\n        className=\"navbar-toggle-state\"\n        type=\"checkbox\"\n        id=\"navbar-toggle-state\"\n        ref={toggle}\n        hidden\n      />\n      {/* eslint-disable-next-line jsx-a11y/label-has-associated-control,jsx-a11y/click-events-have-key-events,jsx-a11y/no-noninteractive-element-interactions -- just for tracking */}\n      <label\n        className=\"navbar-toggle\"\n        htmlFor=\"navbar-toggle-state\"\n        onClick={trackOpened}\n      >\n        <span className=\"navbar-toggle-line\" />\n      </label>\n\n      <div className=\"navbar-collapse\">\n        <ul className=\"navbar-nav\">\n          <li className=\"nav-item nav-search\">\n            <Search />\n          </li>\n          {routes.map((nav) => {\n            const title = t(nav.title)\n\n            if ('children' in nav) {\n              return (\n                <Dropdown\n                  key={nav.title}\n                  title={title}\n                  className=\"nav-item dropdown-right\"\n                  tagName=\"li\"\n                >\n                  {nav.children.map((child) => (\n                    <DropdownItem\n                      href={buildPath(child.route, child.params)}\n                      data-title={title}\n                      className=\"nav-link\"\n                      key={child.title}\n                    >\n                      {t(child.title)}\n                    </DropdownItem>\n                  ))}\n                </Dropdown>\n              )\n            }\n            if ('link' in nav) {\n              return (\n                <li key={nav.title} className=\"nav-item\">\n                  <a\n                    href={nav.link}\n                    target=\"_blank\"\n                    rel=\"noopener noreferrer\"\n                    data-title={title}\n                    className=\"nav-link\"\n                  >\n                    {title}\n                  </a>\n                </li>\n              )\n            }\n\n            return (\n              <li\n                key={nav.title}\n                className={classnames(\n                  'nav-item',\n                  nav.current && nav.current(location.pathname) && 'selected',\n                )}\n              >\n                <RouteLink\n                  to={nav.route}\n                  className=\"nav-link\"\n                  onClick={forceClose}\n                  params={nav.params || {}}\n                >\n                  {t(nav.title)}\n                </RouteLink>\n                <div className=\"dot\" />\n              </li>\n            )\n          })}\n        </ul>\n      </div>\n    </nav>\n  )\n}\n"
  },
  {
    "path": "src/containers/Header/NavigationMenu/index.ts",
    "content": "export * from './NavigationMenu'\n"
  },
  {
    "path": "src/containers/Header/NetworkPicker/NetworkPicker.scss",
    "content": "@use '../../shared/css/variables' as *;\n\n@mixin dropdown-network-item(\n  $background,\n  $background-hover: $background,\n  $border: $background,\n  $color: $black\n) {\n  .dropdown-toggle {\n    border-color: $border;\n    background: $background;\n    color: $color;\n\n    &:hover {\n      background: $background-hover;\n    }\n\n    .arrow {\n      color: $color;\n    }\n  }\n}\n\n.network {\n  min-width: 0;\n\n  .dropdown-toggle {\n    width: 100%;\n    max-width: 100%;\n    overflow-x: clip;\n  }\n\n  .dropdown-toggle-text {\n    @extend %truncate;\n  }\n\n  .dropdown-menu {\n    min-width: max(100%, 250px);\n  }\n\n  &.network-mainnet {\n    @include dropdown-network-item($white, $black-20);\n  }\n\n  &.network-testnet {\n    @include dropdown-network-item($testnet, $orange-60);\n  }\n\n  &.network-devnet {\n    @include dropdown-network-item($devnet, $blue-purple-40);\n  }\n\n  /* stylelint-disable-next-line selector-class-pattern -- needed here for variables */\n  &.network-xahau_mainnet {\n    @include dropdown-network-item($xahau-mainnet, $green-50);\n  }\n\n  /* stylelint-disable-next-line selector-class-pattern -- needed here for variables */\n  &.network-xahau_testnet {\n    @include dropdown-network-item($xahau-testnet, $magenta-40);\n  }\n\n  &.network-custom {\n    @include dropdown-network-item($custom, $yellow-60);\n  }\n}\n"
  },
  {
    "path": "src/containers/Header/NetworkPicker/NetworkPicker.tsx",
    "content": "import { useContext, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { Dropdown, DropdownItem } from '../../shared/components/Dropdown'\nimport { useCustomNetworks } from '../../shared/hooks'\nimport SocketContext from '../../shared/SocketContext'\nimport './NetworkPicker.scss'\nimport { useAnalytics } from '../../shared/analytics'\nimport { locationAssign } from '../../shared/navigate'\n\nexport interface Network {\n  network: string\n  title: string\n  url: string\n}\n\nexport const NetworkPicker = () => {\n  const { track } = useAnalytics()\n  const rippledSocket = useContext(SocketContext)\n  const { t } = useTranslation()\n  const [newRippledUrl, setNewRippledUrl] = useState('')\n  const [customNetworks = [], setCustomNetworks] = useCustomNetworks()\n\n  // Remove trailing slash from custom network link\n  const CUSTOM_NETWORK_BASE_LINK =\n    process.env.VITE_CUSTOMNETWORK_LINK?.charAt(\n      process.env.VITE_CUSTOMNETWORK_LINK.length - 1,\n    ) === '/'\n      ? process.env.VITE_CUSTOMNETWORK_LINK?.slice(0, -1)\n      : process.env.VITE_CUSTOMNETWORK_LINK\n  const STATIC_ENV_LINKS: Record<string, string | undefined> = {\n    mainnet: process.env.VITE_MAINNET_LINK,\n    testnet: process.env.VITE_TESTNET_LINK,\n    devnet: process.env.VITE_DEVNET_LINK,\n    xahau_mainnet: process.env.VITE_XAHAU_MAINNET_LINK,\n    xahau_testnet: process.env.VITE_XAHAU_TESTNET_LINK,\n  }\n  const currentMode: string = process.env.VITE_ENVIRONMENT || 'mainnet'\n\n  const rippledUrl = rippledSocket?.rippledUrl\n  const isCustom = currentMode === 'custom'\n  const inNetwork = !(isCustom && rippledUrl === undefined)\n\n  const getNetworkName = (network: string) =>\n    t(`network_name`, { context: network, defaultValue: network })\n\n  const getCustomNetworkName = (url) =>\n    `${getNetworkName('custom')}: ${url\n      ?.replace(`${CUSTOM_NETWORK_BASE_LINK || ''}/`, '')\n      .toLowerCase()}`\n\n  const trackNetworkSwitch = (network, url) => {\n    track('network_switch', {\n      network,\n      entrypoint:\n        network === 'custom'\n          ? url?.replace(`${CUSTOM_NETWORK_BASE_LINK || ''}/`, '')\n          : undefined,\n    })\n  }\n\n  const networks = [\n    ...Object.entries(STATIC_ENV_LINKS).map(([network, url]) => ({\n      network,\n      title: getNetworkName(network),\n      url,\n    })),\n    ...customNetworks.map((customUrl: string) => ({\n      network: 'custom',\n      title: getCustomNetworkName(customUrl),\n      url: `${process.env.VITE_CUSTOMNETWORK_LINK}/${customUrl}`,\n    })),\n  ]\n\n  const handleNetworkClick = (network, url) => () => {\n    trackNetworkSwitch(network, url)\n  }\n\n  const networkPickerTitle = !inNetwork\n    ? t('no_network_selected')\n    : getNetworkName(currentMode)\n\n  function renderDropdownItem(network, url, text) {\n    return (\n      <DropdownItem\n        key={url}\n        href={url}\n        className={network}\n        handler={handleNetworkClick(network, url)}\n      >\n        {text}\n        {network === 'custom' && (\n          <button\n            type=\"button\"\n            className=\"btn btn-remove\"\n            onClick={(event) => {\n              event.preventDefault()\n              event.stopPropagation()\n              setCustomNetworks(\n                customNetworks.filter(\n                  (customNetwork) =>\n                    customNetwork !==\n                    url?.slice((CUSTOM_NETWORK_BASE_LINK || '').length + 1),\n                ),\n              )\n            }}\n          />\n        )}\n      </DropdownItem>\n    )\n  }\n\n  function renderCustomNetworkInput() {\n    return (\n      <DropdownItem key=\"new_network\">\n        <form onSubmit={onSubmit} className=\"custom-network-form\">\n          <input\n            type=\"text\"\n            placeholder=\"Add custom network\"\n            onChange={(e) => setNewRippledUrl(e.target.value)}\n            autoCorrect=\"off\"\n            autoCapitalize=\"none\"\n            autoComplete=\"off\"\n          />\n        </form>\n      </DropdownItem>\n    )\n  }\n\n  function onSubmit(event) {\n    event.preventDefault()\n    if (rippledUrl != null && newRippledUrl.toLowerCase() === rippledUrl) {\n      return\n    }\n\n    trackNetworkSwitch('custom', newRippledUrl)\n    locationAssign(`${CUSTOM_NETWORK_BASE_LINK}/${newRippledUrl}`)\n  }\n\n  return (\n    <Dropdown\n      title={\n        isCustom && inNetwork\n          ? getCustomNetworkName(rippledUrl)\n          : networkPickerTitle\n      }\n      className={`network network-${currentMode}`}\n    >\n      <>\n        {networks.map(({ network, title, url = '' }) => {\n          if (\n            // we are not in custom mode and it's this network\n            (!isCustom && network === currentMode) ||\n            // we are in custom mode and it's this URL\n            (isCustom && url === `/${rippledUrl}`) ||\n            // the href of this window contains this URL\n            window.location.href?.indexOf(url) === 0\n          ) {\n            return null // don't render if we are in that network\n          }\n          return renderDropdownItem(network, url, title)\n        })}\n        {renderCustomNetworkInput()}\n      </>\n    </Dropdown>\n  )\n}\n"
  },
  {
    "path": "src/containers/Header/NetworkPicker/test/NetworkPicker.test.tsx",
    "content": "import { render, screen } from '@testing-library/react'\nimport userEvent from '@testing-library/user-event'\nimport { I18nextProvider } from 'react-i18next'\nimport { BrowserRouter as Router } from 'react-router'\nimport { QueryClientProvider } from 'react-query'\nimport i18n from '../../../../i18n/testConfigEnglish'\nimport { CUSTOM_NETWORKS_STORAGE_KEY } from '../../../shared/hooks'\nimport SocketContext from '../../../shared/SocketContext'\nimport MockWsClient from '../../../test/mockWsClient'\nimport { NetworkPicker } from '../NetworkPicker'\nimport { queryClient } from '../../../shared/QueryClient'\nimport { locationAssign } from '../../../shared/navigate'\n\njest.mock('../../../shared/navigate', () => ({\n  locationAssign: jest.fn(),\n}))\n\nconst mockedLocationAssign = locationAssign as jest.Mock\n\ndescribe('NetworkPicker component', () => {\n  let client: MockWsClient\n\n  const renderNetworkPicker = (localNetworks: string[] = []) => {\n    localStorage.removeItem(CUSTOM_NETWORKS_STORAGE_KEY)\n    if (localNetworks) {\n      localStorage.setItem(\n        CUSTOM_NETWORKS_STORAGE_KEY,\n        JSON.stringify(localNetworks),\n      )\n    }\n\n    return render(\n      <I18nextProvider i18n={i18n}>\n        <SocketContext.Provider value={client as any}>\n          <Router>\n            <QueryClientProvider client={queryClient}>\n              <NetworkPicker />\n            </QueryClientProvider>\n          </Router>\n        </SocketContext.Provider>\n      </I18nextProvider>,\n    )\n  }\n\n  const oldEnvs = process.env\n\n  beforeEach(() => {\n    mockedLocationAssign.mockClear()\n    process.env = {\n      ...oldEnvs,\n      VITE_ENVIRONMENT: 'mainnet',\n      VITE_MAINNET_LINK: 'https://livenet.xrpl.org',\n      VITE_TESTNET_LINK: 'https://testnet.xrpl.org',\n      VITE_DEVNET_LINK: 'https://devnet.xrpl.org',\n      VITE_AMM_LINK: 'https://amm-devnet.xrpl.org',\n      VITE_CUSTOMNETWORK_LINK: 'https://custom.xrpl.org',\n    }\n    client = new MockWsClient()\n  })\n\n  afterEach(() => {\n    client.close()\n    process.env = oldEnvs\n  })\n\n  it('dropdown expands', async () => {\n    const { container } = renderNetworkPicker()\n    // The Dropdown component has both .network and .dropdown classes on the same element\n    const dropdown = container.querySelector('.network.dropdown')\n    expect(dropdown).toBeInTheDocument()\n    expect(dropdown).not.toHaveClass('dropdown-expanded')\n\n    await userEvent.click(\n      container.querySelector('.network.dropdown .dropdown-toggle')!,\n    )\n    expect(dropdown).toHaveClass('dropdown-expanded')\n  })\n\n  it('direct to other networks', async () => {\n    const { container } = renderNetworkPicker()\n\n    // expand dropdown - The Dropdown component has both .network and .dropdown classes on the same element\n    expect(container.querySelector('.network.dropdown')).toBeInTheDocument()\n    await userEvent.click(\n      container.querySelector('.network.dropdown .dropdown-toggle')!,\n    )\n    expect(\n      container.querySelector('.dropdown-item.mainnet'),\n    ).not.toBeInTheDocument() // don't show the current network\n    expect(\n      container.querySelector('.dropdown-item.testnet'),\n    ).toBeInTheDocument()\n\n    // test clicking on testnet\n    const testnetItem = container.querySelector('.dropdown-item.testnet')\n    expect(testnetItem).toHaveAttribute('href', process.env.VITE_TESTNET_LINK)\n\n    const devnetItem = container.querySelector('.dropdown-item.devnet')\n    expect(devnetItem).toHaveAttribute('href', process.env.VITE_DEVNET_LINK)\n  })\n\n  it('redirect on custom network input works', async () => {\n    const { container } = renderNetworkPicker()\n\n    // First expand the dropdown to make the input visible\n    await userEvent.click(container.querySelector('.network .dropdown-toggle')!)\n\n    const customInput = screen.getByRole('textbox')\n    await userEvent.type(customInput, 'custom_url{Enter}')\n\n    expect(mockedLocationAssign).toHaveBeenCalledWith(\n      `${process.env.VITE_CUSTOMNETWORK_LINK}/custom_url`,\n    )\n  })\n\n  it('shows no network selected in custom mode with no network', () => {\n    process.env.VITE_ENVIRONMENT = 'custom'\n    const { container } = renderNetworkPicker()\n\n    // expand dropdown\n    expect(container.querySelector('.network-custom')).toBeInTheDocument()\n    expect(\n      container.querySelector('.network-custom .dropdown-toggle'),\n    ).toHaveTextContent('No Custom Network Selected')\n  })\n\n  it('shows custom networks in local storage if they exist', () => {\n    process.env.VITE_ENVIRONMENT = 'custom'\n    const { container } = renderNetworkPicker(['custom_url', 'custom_url2'])\n\n    // expand dropdown\n    expect(container.querySelector('.network-custom')).toBeInTheDocument()\n\n    const customItems = container.querySelectorAll('.dropdown-item.custom')\n    expect(customItems).toHaveLength(2)\n    expect(customItems[0]).toHaveAttribute(\n      'href',\n      `${process.env.VITE_CUSTOMNETWORK_LINK}/custom_url`,\n    )\n    expect(customItems[1]).toHaveAttribute(\n      'href',\n      `${process.env.VITE_CUSTOMNETWORK_LINK}/custom_url2`,\n    )\n    expect(\n      container.querySelectorAll('.dropdown-item.custom .btn-remove'),\n    ).toHaveLength(2)\n\n    expect(\n      container.querySelector('.dropdown-item.testnet'),\n    ).toBeInTheDocument()\n    expect(\n      container.querySelector('.dropdown-item.testnet .btn-remove'),\n    ).not.toBeInTheDocument()\n  })\n})\n"
  },
  {
    "path": "src/containers/Header/Search.tsx",
    "content": "import { KeyboardEventHandler, useContext, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { useNavigate } from 'react-router'\nimport {\n  isValidClassicAddress,\n  isValidXAddress,\n  classicAddressToXAddress,\n} from 'ripple-address-codec'\n\nimport { useAnalytics } from '../shared/analytics'\nimport SocketContext, { ExplorerXrplClient } from '../shared/SocketContext'\nimport {\n  CURRENCY_REGEX,\n  DECIMAL_REGEX,\n  FULL_CURRENCY_REGEX,\n  HASH256_REGEX,\n  VALIDATORS_REGEX,\n  CTID_REGEX,\n  HASH192_REGEX,\n} from '../shared/utils'\nimport './search.scss'\nimport {\n  getTransaction,\n  getVault,\n  getLedger,\n  getNFTInfo,\n} from '../../rippled/lib/rippled'\nimport { buildPath } from '../shared/routing'\nimport {\n  ACCOUNT_ROUTE,\n  LEDGER_ROUTE,\n  NFT_ROUTE,\n  TOKEN_ROUTE,\n  TRANSACTION_ROUTE,\n  VALIDATOR_ROUTE,\n  MPT_ROUTE,\n  VAULT_ROUTE,\n  SEARCH_RESULT_ROUTE,\n} from '../App/routes'\nimport TokenSearchResults from '../shared/components/TokenSearchResults/TokenSearchResults'\n\nconst determineHashType = async (\n  id: string,\n  rippledContext: ExplorerXrplClient,\n): Promise<string | null> => {\n  const lookups: Promise<string>[] = [\n    getTransaction(rippledContext, id).then(() => 'transactions'),\n    getVault(rippledContext, id).then(() => 'vault'),\n    getLedger(rippledContext, { ledger_hash: id.toUpperCase() }).then(\n      () => 'ledgers',\n    ),\n    getNFTInfo(rippledContext, id).then(() => 'nft'),\n  ]\n\n  // Note: Owing to ledger-semantics, it is assumed that the ledger-index is unique. Two ledger-objects will not have identical ID, except with an astronomically small probability.\n  const results = await Promise.allSettled(lookups)\n  const match = results.find(\n    (r): r is PromiseFulfilledResult<string> => r.status === 'fulfilled',\n  )\n  return match?.value ?? null\n}\n\n// separator for currency formats\nconst separators = /[.:+-]/\n\nconst getRoute = async (\n  id: string,\n  rippledContext: ExplorerXrplClient,\n): Promise<{ type: string; path: string } | null> => {\n  if (DECIMAL_REGEX.test(id)) {\n    return {\n      type: 'ledgers',\n      path: buildPath(LEDGER_ROUTE, { identifier: id }),\n    }\n  }\n  if (isValidClassicAddress(id)) {\n    return {\n      type: 'accounts',\n      path: buildPath(ACCOUNT_ROUTE, { id: normalizeAccount(id) }),\n    }\n  }\n  if (HASH256_REGEX.test(id)) {\n    // Transactions, NFTs, Vaults, and Ledger-Hashes share the same 256-bit hash syntax.\n    // We must make api calls to determine which type it is.\n    const type = await determineHashType(id, rippledContext)\n    let path\n    if (type === 'transactions') {\n      path = buildPath(TRANSACTION_ROUTE, { identifier: id.toUpperCase() })\n    } else if (type === 'nft') {\n      path = buildPath(NFT_ROUTE, { id: id.toUpperCase() })\n    } else if (type === 'vault') {\n      path = buildPath(VAULT_ROUTE, { id: id.toUpperCase() })\n    } else if (type === 'ledgers') {\n      path = buildPath(LEDGER_ROUTE, { identifier: id.toUpperCase() })\n    }\n\n    if (type === null) {\n      return {\n        type: 'hash_not_found',\n        path: buildPath(SEARCH_RESULT_ROUTE, { id: id.toUpperCase() }),\n      }\n    }\n\n    return {\n      path,\n      type,\n    }\n  }\n  if (HASH192_REGEX.test(id)) {\n    return {\n      path: buildPath(MPT_ROUTE, { id: id.toUpperCase() }),\n      type: 'mpt',\n    }\n  }\n  if (isValidXAddress(id) || isValidClassicAddress(id.split(':')[0])) {\n    return {\n      type: 'accounts',\n      path: buildPath(ACCOUNT_ROUTE, { id: normalizeAccount(id) }), // TODO: Consider a new path/page specific to X-addresses\n    }\n  }\n  if (\n    (CURRENCY_REGEX.test(id) || FULL_CURRENCY_REGEX.test(id)) &&\n    isValidClassicAddress(id.split(separators)[1])\n  ) {\n    const components = id.split(separators)\n    return {\n      type: 'token',\n      path: buildPath(TOKEN_ROUTE, {\n        token: `${components[0]}.${components[1]}`,\n      }),\n    }\n  }\n  if (VALIDATORS_REGEX.test(id)) {\n    return {\n      type: 'validators',\n      path: buildPath(VALIDATOR_ROUTE, { identifier: normalizeAccount(id) }),\n    }\n  }\n  if (CTID_REGEX.test(id)) {\n    return {\n      type: 'transactions',\n      path: buildPath(TRANSACTION_ROUTE, { identifier: id.toUpperCase() }),\n    }\n  }\n\n  return null\n}\n\n// normalize classicAddress:tag to X-address\n// TODO: Take network into account (!)\nconst normalizeAccount = (id: string) => {\n  if (!id.includes(':')) {\n    return id\n  }\n  // TODO: Test invalid classic address; \"invalid\" tag (?)\n  const components = id.split(':')\n  try {\n    const xAddress = classicAddressToXAddress(\n      components[0],\n      components[1] === undefined || components[1] === 'false'\n        ? false\n        : Number(components[1]),\n      false,\n    ) // TODO: Take network into account (!)\n    return xAddress\n  } catch (_) {\n    /* version_invalid: version bytes do not match any of the provided version(s) */\n  }\n\n  return id\n}\n\nexport interface SearchProps {\n  callback?: Function\n}\n\nexport const Search = ({ callback = () => {} }: SearchProps) => {\n  const { track } = useAnalytics()\n  const { t } = useTranslation()\n  const socket = useContext(SocketContext)\n  const navigate = useNavigate()\n\n  const [currentSearchInput, setCurrentSearchInput] = useState('')\n\n  const handleSearch = async (id: string) => {\n    const strippedId = id.replace(/^[\"']|[\"']$/g, '')\n    const route = await getRoute(strippedId, socket)\n    track('search', {\n      search_term: strippedId,\n      search_category: route?.type,\n    })\n\n    navigate(route === null ? `/search/${strippedId}` : route.path)\n    callback()\n  }\n\n  const onKeyDown: KeyboardEventHandler<HTMLInputElement> = (event) => {\n    if (event.key === 'Enter') {\n      handleSearch(event.currentTarget?.value?.trim())\n      setCurrentSearchInput('')\n    }\n  }\n\n  return (\n    <div className=\"search\">\n      <input\n        type=\"text\"\n        placeholder={t('header.search.placeholder')}\n        onKeyDown={onKeyDown}\n        value={currentSearchInput}\n        onChange={(e) => setCurrentSearchInput(e.target.value)}\n      />\n      {process.env.VITE_ENVIRONMENT === 'mainnet' && (\n        <TokenSearchResults\n          setCurrentSearchInput={setCurrentSearchInput}\n          currentSearchValue={currentSearchInput}\n        />\n      )}\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/Header/header.scss",
    "content": "@use '../shared/css/variables' as *;\n\n/* Header */\n.header {\n  position: sticky;\n  z-index: 20;\n  top: 0;\n  display: flex;\n  width: 100%;\n  flex-direction: column;\n  padding: 16px;\n  background: $black;\n  gap: 8px;\n\n  .topbar {\n    display: flex;\n    width: 100%;\n    min-width: 0;\n    max-width: 100%;\n    gap: 0 16px;\n\n    .dropdown-toggle {\n      padding: 8px 12px;\n    }\n\n    .dropdown-menu,\n    .dropdown-item {\n      padding: 8px;\n    }\n  }\n}\n"
  },
  {
    "path": "src/containers/Header/index.tsx",
    "content": "import { FC } from 'react'\nimport classnames from 'classnames'\n\nimport { navigationConfig } from '../App/navigation'\nimport { NavigationMenu } from './NavigationMenu'\n\nimport './header.scss'\nimport { LanguagePicker } from './LanguagePicker/LanguagePicker'\nimport { NetworkPicker } from './NetworkPicker/NetworkPicker'\n\nexport const Header: FC<{ inNetwork?: boolean }> = ({ inNetwork = true }) => (\n  <header className={classnames('header', !inNetwork && 'header-no-network')}>\n    <div className=\"topbar\">\n      <NetworkPicker />\n      <LanguagePicker />\n    </div>\n    <NavigationMenu routes={navigationConfig} />\n  </header>\n)\n"
  },
  {
    "path": "src/containers/Header/search.scss",
    "content": "@use '../shared/css/variables' as *;\n\n.search-container {\n  position: relative;\n}\n\n.search {\n  display: inline-block;\n  width: 100%;\n\n  input {\n    width: 100%;\n    padding: 8px 16px 8px 42px;\n    border: 1px solid $black-50;\n    background: $black url('../shared/images/search.svg') no-repeat 16px center;\n    background-size: 12px;\n    color: $white;\n    font-size: 14px;\n    line-height: 24px;\n    text-align: left;\n    text-overflow: ellipsis;\n    @include regular;\n\n    &::placeholder {\n      color: $white;\n    }\n  }\n}\n\n.search:not(:focus-within) .search-results {\n  display: none;\n}\n\n// Only show search bar when we know which network to query\n.header-no-network {\n  .search {\n    display: none;\n  }\n}\n\n.normal {\n  opacity: 1;\n  transition: 0.5s;\n}\n\n.normal.fade-out {\n  opacity: 0;\n}\n"
  },
  {
    "path": "src/containers/Header/test/Header.test.tsx",
    "content": "import { render, cleanup } from '@testing-library/react'\nimport { I18nextProvider } from 'react-i18next'\nimport { BrowserRouter as Router } from 'react-router'\nimport { QueryClientProvider } from 'react-query'\nimport i18n from '../../../i18n/testConfigEnglish'\nimport SocketContext from '../../shared/SocketContext'\nimport MockWsClient from '../../test/mockWsClient'\nimport { Header } from '../index'\nimport { queryClient } from '../../shared/QueryClient'\n\ndescribe('Header component', () => {\n  let client: MockWsClient\n\n  const renderHeader = () =>\n    render(\n      <I18nextProvider i18n={i18n}>\n        <Router>\n          <SocketContext.Provider value={client as any}>\n            <QueryClientProvider client={queryClient}>\n              <Header />\n            </QueryClientProvider>\n          </SocketContext.Provider>\n        </Router>\n      </I18nextProvider>,\n    )\n\n  beforeEach(() => {\n    client = new MockWsClient()\n  })\n\n  afterEach(() => {\n    client.close()\n    cleanup()\n  })\n\n  it('renders without crashing', () => {\n    renderHeader()\n  })\n\n  it('renders all parts', () => {\n    const { container } = renderHeader()\n    expect(container.querySelectorAll('.search').length).toEqual(1)\n    expect(container.querySelectorAll('.navbar-brand').length).toEqual(1)\n    expect(container.querySelectorAll('.network').length).toEqual(1)\n  })\n})\n"
  },
  {
    "path": "src/containers/Header/test/Search.test.js",
    "content": "import { render, fireEvent, act, screen } from '@testing-library/react'\nimport { I18nextProvider } from 'react-i18next'\nimport {\n  BrowserRouter as Router,\n  MemoryRouter,\n  Routes,\n  Route,\n} from 'react-router'\nimport { HelmetProvider } from 'react-helmet-async'\nimport moxios from 'moxios'\nimport { QueryClientProvider } from 'react-query'\nimport i18n from '../../../i18n/testConfig'\nimport { Search } from '../Search'\nimport SearchResult from '../../SearchResult'\nimport * as rippled from '../../../rippled/lib/rippled'\nimport SocketContext from '../../shared/SocketContext'\nimport MockWsClient from '../../test/mockWsClient'\nimport { flushPromises } from '../../test/utils'\nimport { queryClient } from '../../shared/QueryClient'\n\ndescribe('Search component', () => {\n  const renderSearch = () => {\n    const client = new MockWsClient()\n    return render(\n      <I18nextProvider i18n={i18n}>\n        <SocketContext.Provider value={client}>\n          <Router>\n            <QueryClientProvider client={queryClient}>\n              <Search />\n            </QueryClientProvider>\n          </Router>\n        </SocketContext.Provider>\n      </I18nextProvider>,\n    )\n  }\n\n  const oldEnvs = process.env\n\n  beforeEach(() => {\n    process.env = { ...oldEnvs, VITE_ENVIRONMENT: 'mainnet' }\n  })\n\n  afterEach(() => {\n    process.env = oldEnvs\n  })\n\n  it('renders without crashing', () => {\n    renderSearch()\n  })\n\n  it('renders all parts', () => {\n    const { container } = renderSearch()\n    expect(container.querySelectorAll('.search').length).toEqual(1)\n    expect(container.querySelectorAll('.search input').length).toEqual(1)\n    expect(\n      container.querySelector('.search input').getAttribute('placeholder'),\n    ).toEqual('header.search.placeholder')\n  })\n\n  it('search values', async () => {\n    moxios.install()\n    const { container } = renderSearch()\n    const input = container.querySelector('.search input')\n    const ledgerIndex = '123456789'\n    const rippleAddress = 'rGFuMiw48HdbnrUbkRYuitXTmfrDBNTCnX'\n    const rippleXAddress = 'XVVFXHFdehYhofb7XRWeJYV6kjTEwboaHpB9S1ruYMsuXcG'\n    const rippleSplitAddress = 'rKV8HEL3vLc6q9waTiJcewdRdSFyx67QFb:1888963938'\n    const validator = 'nHUFE9prPXPrHcG3SkwP1UzAQbSphqyQkQK9ATXLZsfkezhhda3p'\n    const addressWithQuotes = '\"rGFuMiw48HdbnrUbkRYuitXTmfrDBNTCnX\"'\n    const addressWithSpace = ' rGFuMiw48HdbnrUbkRYuitXTmfrDBNTCnX '\n    const addressWithSingleQuote = '\"rGFuMiw48HdbnrUbkRYuitXTmfrDBNTCnX'\n\n    const hash =\n      '59239EA78084F6E2F288473F8AE02F3E6FC92F44BDE59668B5CAE361D3D32838'\n    const ctid = 'C0BF433500020000'\n    const token1 = 'cny.rJ1adrpGS3xsnQMb9Cw54tWJVFPuSdZHK'\n    const token1VariantPlus = 'cny.rJ1adrpGS3xsnQMb9Cw54tWJVFPuSdZHK'\n    const token1VariantMinus = 'cny-rJ1adrpGS3xsnQMb9Cw54tWJVFPuSdZHK'\n    const token1VariantColon = 'cny:rJ1adrpGS3xsnQMb9Cw54tWJVFPuSdZHK'\n    const token1Uppercase = 'CNY.rJ1adrpGS3xsnQMb9Cw54tWJVFPuSdZHK'\n\n    const token2 =\n      '534f4c4f00000000000000000000000000000000.rsoLo2S1kiGeCcn6hCUXVrCpGMWLrRrLZz'\n    const token2VariantPlus =\n      '534f4c4f00000000000000000000000000000000+rsoLo2S1kiGeCcn6hCUXVrCpGMWLrRrLZz'\n    const token2VariantMinus =\n      '534f4c4f00000000000000000000000000000000-rsoLo2S1kiGeCcn6hCUXVrCpGMWLrRrLZz'\n    const token2VariantColon =\n      '534f4c4f00000000000000000000000000000000:rsoLo2S1kiGeCcn6hCUXVrCpGMWLrRrLZz'\n\n    const nftoken =\n      '000800011C7D8ED1D715A0017E41BF9499ECC17E7FB666320000099B00000000'\n\n    const mptoken = '00002AF2588C244FE5F74BF48B5C5E2823235B243AA34634'\n    const invalidString = '123invalid'\n    const vaultID =\n      '5C60E9B76EECC8262DB29276B32B99F05B7A7DE66D6968B5959BB9E4E397643D'\n\n    // mock APIs to test hash disambiguation\n    const mockAPI = jest.spyOn(rippled, 'getTransaction')\n    const mockGetVault = jest.spyOn(rippled, 'getVault')\n    const mockGetLedger = jest.spyOn(rippled, 'getLedger')\n    const mockGetNFTInfo = jest.spyOn(rippled, 'getNFTInfo')\n\n    const testValue = async (searchInput, expectedPath) => {\n      input.value = searchInput\n      await act(async () => {\n        fireEvent.keyDown(input, { key: 'Enter' })\n        await flushPromises()\n      })\n      expect(window.location.pathname).toEqual(expectedPath)\n    }\n\n    fireEvent.keyDown(input, { key: 'a' })\n    expect(window.location.pathname).toEqual('/')\n\n    await testValue(ledgerIndex, `/ledgers/${ledgerIndex}`)\n\n    await testValue(rippleAddress, `/accounts/${rippleAddress}`)\n\n    await testValue(addressWithQuotes, `/accounts/${rippleAddress}`)\n\n    await testValue(addressWithSingleQuote, `/accounts/${rippleAddress}`)\n\n    await testValue(addressWithSpace, `/accounts/${rippleAddress}`)\n\n    await testValue(rippleXAddress, `/accounts/${rippleXAddress}`)\n\n    // Normalize split address format to a X-Address\n    await testValue(rippleSplitAddress, `/accounts/${rippleXAddress}`)\n\n    // Validator\n    await testValue(validator, `/validators/${validator}`)\n\n    mockAPI.mockResolvedValue('123')\n    await testValue(hash, `/transactions/${hash}`)\n\n    await testValue(ctid, `/transactions/${ctid}`)\n\n    await testValue(token1, `/token/${token1}`)\n\n    // testing multiple variants of token format\n    await testValue(token1VariantColon, `/token/${token1}`)\n\n    await testValue(token1VariantPlus, `/token/${token1}`)\n\n    await testValue(token1VariantMinus, `/token/${token1}`)\n\n    await testValue(token1Uppercase, `/token/${token1Uppercase}`)\n\n    await testValue(token2, `/token/${token2}`)\n\n    // testing multiple variants of full token format\n    await testValue(token2VariantColon, `/token/${token2}`)\n\n    await testValue(token2VariantPlus, `/token/${token2}`)\n\n    await testValue(token2VariantMinus, `/token/${token2}`)\n\n    // Returns a response upon a valid nft_id, redirect to NFT\n    mockAPI.mockRejectedValue(new Error('Tx not found'))\n    mockGetVault.mockRejectedValue(new Error('not found'))\n    mockGetLedger.mockRejectedValue(new Error('not found'))\n    mockGetNFTInfo.mockResolvedValue({ nft_id: nftoken })\n    await testValue(nftoken, `/nft/${nftoken}`)\n\n    await testValue(invalidString, `/search/${invalidString}`)\n\n    // ensure strings are trimmed\n    mockAPI.mockResolvedValue('123')\n    await testValue(` ${hash} `, `/transactions/${hash}`)\n\n    // handle lower case tx hash\n    await testValue(hash.toLowerCase(), `/transactions/${hash}`)\n\n    // handle lower case ctid\n    await testValue(ctid.toLowerCase(), `/transactions/${ctid}`)\n\n    await testValue(mptoken, `/mpt/${mptoken}`)\n\n    // Mock the API to simulate circumstances where the ledger-object is a vault and not a transaction\n    mockAPI.mockRejectedValue()\n    mockGetVault.mockResolvedValue()\n    await testValue(vaultID, `/vault/${vaultID}`)\n\n    // Ledger hash found: tx fails, vault fails, ledger succeeds\n    const ledgerHash =\n      'A1B2C3D4E5F6A1B2C3D4E5F6A1B2C3D4E5F6A1B2C3D4E5F6A1B2C3D4E5F6A1B2'\n    mockAPI.mockRejectedValue(new Error('not found'))\n    mockGetVault.mockRejectedValue(new Error('not found'))\n    mockGetLedger.mockResolvedValue({ ledger_index: 100 })\n    await testValue(ledgerHash, `/ledgers/${ledgerHash}`)\n\n    // All lookups fail: navigates to /search/:hash with error message\n    const unknownHash =\n      'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF'\n    mockAPI.mockRejectedValue(new Error('not found'))\n    mockGetVault.mockRejectedValue(new Error('not found'))\n    mockGetLedger.mockRejectedValue(new Error('not found'))\n    mockGetNFTInfo.mockRejectedValue(new Error('not found'))\n    await testValue(unknownHash, `/search/${unknownHash}`)\n  })\n\n  it('displays hash_not_found when all hash lookups fail', async () => {\n    const client = new MockWsClient()\n    const { container } = render(\n      <HelmetProvider>\n        <I18nextProvider i18n={i18n}>\n          <SocketContext.Provider value={client}>\n            <MemoryRouter initialEntries={['/']}>\n              <QueryClientProvider client={queryClient}>\n                <Routes>\n                  <Route path=\"/\" element={<Search />} />\n                  <Route path=\"/search/:id\" element={<SearchResult />} />\n                </Routes>\n              </QueryClientProvider>\n            </MemoryRouter>\n          </SocketContext.Provider>\n        </I18nextProvider>\n      </HelmetProvider>,\n    )\n\n    jest\n      .spyOn(rippled, 'getTransaction')\n      .mockRejectedValue(new Error('not found'))\n    jest.spyOn(rippled, 'getVault').mockRejectedValue(new Error('not found'))\n    jest.spyOn(rippled, 'getLedger').mockRejectedValue(new Error('not found'))\n    jest.spyOn(rippled, 'getNFTInfo').mockRejectedValue(new Error('not found'))\n\n    const input = container.querySelector('.search input')\n    const unknownHash =\n      'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF'\n    input.value = unknownHash\n    await act(async () => {\n      fireEvent.keyDown(input, { key: 'Enter' })\n      await flushPromises()\n    })\n\n    expect(screen.getByText('hash_not_found')).toBeTruthy()\n  })\n\n  // TODO: Add custom search tests\n})\n"
  },
  {
    "path": "src/containers/Ledger/LedgerTransactionTable.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { Loader } from '../shared/components/Loader'\nimport { TransactionTableProps } from '../shared/components/TransactionTable/TransactionTable'\nimport { LedgerTransactionTableRow } from './LedgerTransactionTableRow'\n\nexport const LedgerTransactionTable = ({\n  emptyMessage = undefined,\n  loading = false,\n  transactions = [],\n}: TransactionTableProps) => {\n  const { t } = useTranslation()\n\n  const renderListItem = (tx: any) => (\n    <LedgerTransactionTableRow tx={tx} key={tx.hash} />\n  )\n\n  return (\n    <>\n      <ol className=\"transaction-table\">\n        <li className=\"transaction-li transaction-li-header\">\n          <div className=\"col col-type\">{t('transaction_type')}</div>\n          <div className=\"col col-account\">{t('account')}</div>\n          <div className=\"col col-sequence\">{t('sequence_number_short')}</div>\n          <div className=\"col col-fee\">{t('transaction_cost_short')}</div>\n        </li>\n        {!transactions || (!loading && transactions.length === 0) ? (\n          <div className=\"empty-transactions-message\">\n            {emptyMessage || t('no_transactions_message')}\n          </div>\n        ) : (\n          transactions.map(renderListItem)\n        )}\n      </ol>\n      {loading && <Loader />}\n    </>\n  )\n}\n"
  },
  {
    "path": "src/containers/Ledger/LedgerTransactionTableRow.tsx",
    "content": "import { TxLabel } from '../shared/components/TxLabel'\nimport { TxDetails } from '../shared/components/TxDetails'\nimport { useLanguage } from '../shared/hooks'\nimport { Sequence } from '../shared/components/Sequence'\nimport { formatPrice } from '../shared/utils'\nimport { TxStatus } from '../shared/components/TxStatus'\nimport { RouteLink } from '../shared/routing'\nimport { TRANSACTION_ROUTE } from '../App/routes'\n\nconst TXN_COST_PADDING = 6\n\nexport interface Props {\n  tx: any\n}\n\nexport const LedgerTransactionTableRow = ({ tx }: Props) => {\n  const language = useLanguage()\n  const success = tx.result === 'tesSUCCESS'\n\n  return (\n    <li\n      className={`transaction-li anchor-mask tx-type ${tx.type} ${\n        success ? 'success' : 'fail'\n      }`}\n    >\n      <RouteLink\n        to={TRANSACTION_ROUTE}\n        params={{ identifier: tx.hash }}\n        className=\"mask-overlay\"\n      />\n      <div className=\"upper\">\n        <div className={`col col-type tx-type ${tx.type}`}>\n          <TxLabel type={tx.type} />\n        </div>\n        <div className=\"col col-account\">{tx.account}</div>\n        <div className=\"col col-sequence\">\n          <Sequence\n            sequence={tx.sequence}\n            ticketSequence={tx.ticketSequence}\n            account={tx.account}\n            isHook={tx.isHook}\n          />\n        </div>\n        <div className=\"col col-fee\">\n          {formatPrice(tx.fee, {\n            lang: language,\n            currency: 'XRP',\n            padding: TXN_COST_PADDING,\n          })}\n        </div>\n      </div>\n      {tx.details && (\n        <div className=\"details\">\n          {success ? null : <TxStatus status={tx.result} />}\n          <TxDetails type={tx.type} instructions={tx.details.instructions} />\n        </div>\n      )}\n    </li>\n  )\n}\n"
  },
  {
    "path": "src/containers/Ledger/index.tsx",
    "content": "import { useContext, useEffect } from 'react'\nimport { Helmet } from 'react-helmet-async'\nimport { useTranslation } from 'react-i18next'\nimport { useQuery } from 'react-query'\nimport NoMatch from '../NoMatch'\nimport { Loader } from '../shared/components/Loader'\nimport SocketContext from '../shared/SocketContext'\nimport { useAnalytics } from '../shared/analytics'\nimport { useLanguage } from '../shared/hooks'\nimport {\n  localizeDate,\n  localizeNumber,\n  formatPrice,\n  NOT_FOUND,\n  BAD_REQUEST,\n  DECIMAL_REGEX,\n  HASH256_REGEX,\n} from '../shared/utils'\n\nimport LeftArrow from '../shared/images/ic_left_arrow.svg'\nimport RightArrow from '../shared/images/ic_right_arrow.svg'\nimport { LedgerTransactionTable } from './LedgerTransactionTable'\n\nimport './ledger.scss'\nimport { getLedger } from '../../rippled'\nimport { useRouteParams, RouteLink } from '../shared/routing'\nimport { LEDGER_ROUTE } from '../App/routes'\n\nconst TIME_ZONE = 'UTC'\nconst DATE_OPTIONS = {\n  hour: 'numeric',\n  minute: 'numeric',\n  second: 'numeric',\n  year: 'numeric',\n  month: 'numeric',\n  day: 'numeric',\n  hour12: true,\n  timeZone: TIME_ZONE,\n}\n\nconst ERROR_MESSAGES: any = {}\nERROR_MESSAGES[NOT_FOUND] = {\n  title: 'ledger_not_found',\n  hints: ['server_ledgers_hint'],\n}\nERROR_MESSAGES[BAD_REQUEST] = {\n  title: 'invalid_ledger_id',\n  hints: ['check_ledger_id'],\n}\nERROR_MESSAGES.default = {\n  title: 'generic_error',\n  hints: ['not_your_fault'],\n}\n\nconst getErrorMessage = (error) =>\n  ERROR_MESSAGES[error] || ERROR_MESSAGES.default\n\nexport const Ledger = () => {\n  const rippledSocket = useContext(SocketContext)\n  const { identifier = '' } = useRouteParams(LEDGER_ROUTE)\n  const { t } = useTranslation()\n  const language = useLanguage()\n  const { trackException, trackScreenLoaded } = useAnalytics()\n\n  const {\n    data: ledgerData,\n    error,\n    isLoading,\n  } = useQuery(['ledger', identifier], () => {\n    if (\n      !DECIMAL_REGEX.test(identifier.toString()) &&\n      !HASH256_REGEX.test(identifier.toString())\n    ) {\n      return Promise.reject(BAD_REQUEST)\n    }\n\n    return getLedger(identifier, rippledSocket).catch(\n      (transactionRequestError) => {\n        const status = transactionRequestError.code\n        trackException(`ledger ${identifier} --- ${JSON.stringify(error)}`)\n        return Promise.reject(status)\n      },\n    )\n  })\n\n  useEffect(() => {\n    trackScreenLoaded()\n  }, [trackScreenLoaded])\n\n  const renderNav = (data: any) => {\n    const { ledger_index: LedgerIndex, ledger_hash: LedgerHash } = data\n    const previousIndex = LedgerIndex - 1\n    const nextIndex = LedgerIndex + 1\n    const date = new Date(data.close_time)\n    return (\n      <div className=\"ledger-header\">\n        <div className=\"ledger-nav\">\n          <RouteLink to={LEDGER_ROUTE} params={{ identifier: previousIndex }}>\n            <div className=\"previous\">\n              <LeftArrow alt=\"previous ledger\" />\n              {previousIndex}\n            </div>\n          </RouteLink>\n          <RouteLink to={LEDGER_ROUTE} params={{ identifier: nextIndex }}>\n            <div className=\"next\">\n              {nextIndex}\n              <RightArrow alt=\"next ledger\" />\n            </div>\n          </RouteLink>\n          <div className=\"clear\" />\n        </div>\n        <div className=\"ledger-info\">\n          <div className=\"summary\">\n            <div className=\"ledger-cols\">\n              <div className=\"ledger-col ledger-index\">\n                <div className=\"title\">{t('ledger_index')}</div>\n                <div className=\"value\">{LedgerIndex}</div>\n              </div>\n              <div className=\"ledger-col\">\n                <div className=\"title\">{t('total_transactions')}</div>\n                <div className=\"value\">\n                  {localizeNumber(data.transactions.length, language)}\n                </div>\n              </div>\n              <div className=\"ledger-col\">\n                <div className=\"title\">{t('total_fees')}</div>\n                <div className=\"value\">\n                  {formatPrice(data.total_fees, {\n                    lang: language,\n                    currency: 'XRP',\n                  })}\n                </div>\n              </div>\n            </div>\n          </div>\n          <div className=\"ledger-hash\">{LedgerHash}</div>\n          <div className=\"closed-date\">\n            {localizeDate(date, language, DATE_OPTIONS)} {TIME_ZONE}\n          </div>\n        </div>\n      </div>\n    )\n  }\n\n  const renderLedger = () =>\n    ledgerData?.ledger_hash ? (\n      <>\n        {renderNav(ledgerData)}\n        <LedgerTransactionTable\n          transactions={ledgerData.transactions}\n          loading={isLoading}\n        />\n      </>\n    ) : null\n\n  const renderError = () => {\n    if (!error) {\n      return null\n    }\n\n    const message = getErrorMessage(error)\n    return <NoMatch title={message.title} hints={message.hints} />\n  }\n\n  return (\n    <div className=\"ledger-page\">\n      <Helmet title={`${t('ledger')} ${identifier}`} />\n      {isLoading && <Loader />}\n      {renderLedger()}\n      {renderError()}\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/Ledger/ledger.scss",
    "content": "@use '../shared/css/variables' as *;\n\n.ledger-page {\n  margin: 0 auto;\n\n  @include for-size(tablet-landscape-up) {\n    width: 600px;\n  }\n  @include for-size(desktop-up) {\n    width: 772px;\n  }\n  @include for-size(big-desktop-up) {\n    width: 864px;\n  }\n\n  .loader {\n    z-index: 1;\n  }\n\n  .ledger-nav {\n    padding: 8px 4px;\n    margin-top: 40px;\n    margin-bottom: 60px;\n    color: $black-40;\n    font-size: 12px;\n    letter-spacing: 0px;\n    line-height: 15px;\n\n    svg {\n      position: relative;\n      height: 8px;\n      color: $black-40;\n    }\n\n    .previous {\n      padding: 6px 16px;\n      border: 1px solid $black-40;\n      border-radius: 100px;\n      float: left;\n\n      svg {\n        margin-right: 16px;\n      }\n\n      &:focus,\n      &:hover {\n        background-color: $black-70;\n      }\n    }\n\n    .next {\n      padding: 6px 16px;\n      border: 1px solid $black-40;\n      border-radius: 100px;\n      float: right;\n\n      svg {\n        margin-left: 16px;\n      }\n\n      &:focus,\n      &:hover {\n        background-color: $black-70;\n      }\n    }\n  }\n\n  .ledger-header {\n    margin: 0px auto;\n\n    .ledger-info {\n      overflow: hidden;\n      padding: 10px 8px;\n\n      @include for-size(desktop-up) {\n        padding: 10px 0px;\n      }\n\n      .closed-date,\n      .ledger-hash {\n        overflow: hidden;\n        padding-top: 48px;\n        margin: auto;\n        color: $black-30;\n        font-size: 12px;\n        line-height: 18px;\n        text-align: center;\n        text-overflow: ellipsis;\n        white-space: nowrap;\n      }\n\n      .closed-date {\n        color: $black-30;\n        font-size: 10px;\n\n        @include for-size(desktop-up) {\n          float: right;\n        }\n      }\n\n      .ledger-hash {\n        @include for-size(desktop-up) {\n          float: left;\n        }\n\n        @include for-size(big-desktop-up) {\n          font-size: 12px;\n        }\n      }\n\n      .summary {\n        display: block;\n        overflow: hidden;\n\n        .title {\n          color: $black-40;\n          font-size: 10px;\n          letter-spacing: 0px;\n          line-height: 18px;\n          text-transform: uppercase;\n          @include medium;\n\n          @include for-size(desktop-up) {\n            font-size: 10px;\n            line-height: 20px;\n          }\n        }\n\n        .value {\n          color: $white;\n          @include bold;\n        }\n\n        .ledger-cols {\n          display: table;\n          width: 100%;\n          margin-bottom: 20px;\n          text-align: right;\n\n          .ledger-col {\n            display: table-cell;\n\n            &:first-child {\n              text-align: left;\n            }\n\n            @include for-size(desktop-up) {\n              width: auto;\n              margin-right: 0px;\n              margin-left: 40px;\n            }\n            @include for-size(big-desktop-up) {\n              margin-right: 0px;\n              margin-left: 40px;\n            }\n\n            .value {\n              margin-top: -4px;\n              font-size: 18px;\n              line-height: 28px;\n\n              @include for-size(desktop-up) {\n                margin-top: -8px;\n                font-size: 18px;\n                line-height: 36px;\n              }\n            }\n\n            &.ledger-index .value {\n              margin-top: 4px;\n              font-size: 42px;\n            }\n          }\n        }\n      }\n    }\n  }\n\n  .transaction-table {\n    padding: 30px 0;\n\n    .col-type,\n    .col-fee,\n    .col-sequence {\n      flex: none;\n    }\n\n    .col-type {\n      width: 175px;\n\n      @include for-size(big-desktop-up) {\n        width: 210px;\n      }\n    }\n\n    .col-account {\n      display: block;\n      text-align: right; // on mobile it is the last column\n\n      @include for-size(tablet-portrait-up) {\n        text-align: left;\n      }\n    }\n\n    .col-sequence {\n      display: none;\n\n      @include for-size(tablet-landscape-up) {\n        display: inline-block;\n        width: 85px;\n      }\n\n      @include for-size(desktop-up) {\n        width: 100px;\n      }\n    }\n\n    .col-fee {\n      display: none;\n      text-align: right;\n\n      @include for-size(tablet-portrait-up) {\n        display: inline-block;\n        width: 100px;\n      }\n    }\n\n    .upper {\n      .col-account {\n        font-size: 10px;\n\n        @include for-size(tablet-portrait-up) {\n          font-size: 12px;\n        }\n      }\n\n      .col-sequence,\n      .col-fee {\n        color: $black-40;\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "src/containers/Ledger/test/Ledger.test.js",
    "content": "import { render, waitFor } from '@testing-library/react'\nimport { Route } from 'react-router'\nimport mockLedger from './storedLedger.json'\nimport i18n from '../../../i18n/testConfig'\nimport { Ledger } from '../index'\nimport { getLedger } from '../../../rippled'\nimport { Error as RippledError } from '../../../rippled/lib/utils'\nimport { QuickHarness } from '../../test/utils'\n\njest.mock('../../../rippled', () => {\n  const originalModule = jest.requireActual('../../../rippled')\n\n  return {\n    __esModule: true,\n    ...originalModule,\n    getLedger: jest.fn(),\n  }\n})\n\nconst mockedGetLedger = getLedger\n\ndescribe('Ledger container', () => {\n  const renderLedger = (identifier = 38079857) =>\n    render(\n      <QuickHarness i18n={i18n} initialEntries={[`/ledgers/${identifier}`]}>\n        <Route path=\"/ledgers/:identifier\" element={<Ledger />} />\n      </QuickHarness>,\n    )\n\n  afterEach(() => {\n    mockedGetLedger.mockReset()\n  })\n\n  it('renders without crashing', () => {\n    renderLedger()\n  })\n\n  it('renders loading', () => {\n    const { container } = renderLedger()\n    expect(container.querySelectorAll('.loader').length).toBe(1)\n  })\n\n  it('renders ledger navbar', async () => {\n    mockedGetLedger.mockImplementation(() => Promise.resolve(mockLedger))\n\n    const { container } = renderLedger()\n\n    await waitFor(() => {\n      expect(container.querySelector('.ledger-header')).toBeInTheDocument()\n    })\n\n    const header = container.querySelector('.ledger-header')\n    expect(header).toBeInTheDocument()\n    expect(header.querySelectorAll('.ledger-nav').length).toBe(1)\n    expect(header.querySelectorAll('.ledger-nav a').length).toBe(2)\n  })\n\n  it('renders ledger summary', async () => {\n    mockedGetLedger.mockImplementation(() => Promise.resolve(mockLedger))\n\n    const { container } = renderLedger()\n\n    await waitFor(() => {\n      expect(\n        container.querySelector('.ledger-header .ledger-info'),\n      ).toBeInTheDocument()\n    })\n\n    const summary = container.querySelector('.ledger-header .ledger-info')\n    expect(summary).toBeInTheDocument()\n    expect(summary.querySelectorAll('.ledger-cols').length).toBe(1)\n    expect(summary.querySelectorAll('.ledger-col').length).toBe(3)\n    expect(summary.querySelectorAll('.ledger-index').length).toBe(1)\n    expect(summary.querySelectorAll('.closed-date').length).toBe(1)\n    expect(summary.querySelectorAll('.ledger-hash').length).toBe(1)\n  })\n\n  it('renders transaction table header', async () => {\n    mockedGetLedger.mockImplementation(() => Promise.resolve(mockLedger))\n\n    const { container } = renderLedger()\n\n    await waitFor(() => {\n      expect(container.querySelector('.transaction-table')).toBeInTheDocument()\n    })\n\n    const table = container.querySelector('.transaction-table')\n    expect(table).toBeInTheDocument()\n    expect(table.querySelectorAll('.transaction-li-header').length).toBe(1)\n    expect(\n      table.querySelectorAll('.transaction-li-header .col-type').length,\n    ).toBe(1)\n    expect(\n      table.querySelectorAll('.transaction-li-header .col-account').length,\n    ).toBe(1)\n  })\n\n  it('renders all transactions', async () => {\n    mockedGetLedger.mockImplementation(() => Promise.resolve(mockLedger))\n\n    const { container } = renderLedger()\n\n    await waitFor(() => {\n      expect(container.querySelector('.transaction-table')).toBeInTheDocument()\n    })\n\n    const table = container.querySelector('.transaction-table')\n    expect(table).toBeInTheDocument()\n    expect(table.querySelectorAll('.transaction-li').length).toBe(\n      mockLedger.transactions.length + 1, // include the header\n    )\n  })\n\n  it('renders 404 page on no match', async () => {\n    mockedGetLedger.mockImplementation(() =>\n      Promise.reject(new RippledError('ledger not found', 404)),\n    )\n\n    const { container } = renderLedger()\n\n    await waitFor(() => {\n      expect(container.querySelector('.no-match .title')).toBeInTheDocument()\n    })\n\n    expect(container.querySelector('.no-match .title').textContent).toEqual(\n      'ledger_not_found',\n    )\n  })\n\n  it('renders server error', async () => {\n    mockedGetLedger.mockImplementation(() =>\n      Promise.reject(new RippledError('ledger failed', 500)),\n    )\n\n    const { container } = renderLedger()\n\n    await waitFor(() => {\n      expect(container.querySelector('.no-match .title')).toBeInTheDocument()\n    })\n\n    expect(container.querySelector('.no-match .title').textContent).toEqual(\n      'generic_error',\n    )\n  })\n\n  it('renders invalid id error', async () => {\n    mockedGetLedger.mockImplementation(() =>\n      Promise.reject(new RippledError('invalid ledger index/hash', 400)),\n    )\n\n    const { container } = renderLedger('aaaa')\n\n    await waitFor(() => {\n      expect(container.querySelector('.no-match .title')).toBeInTheDocument()\n    })\n\n    expect(container.querySelector('.no-match .title').textContent).toEqual(\n      'invalid_ledger_id',\n    )\n  })\n})\n"
  },
  {
    "path": "src/containers/Ledger/test/ledgerNotFound.json",
    "content": "{\n  \"result\": {\n    \"error\": \"lgrNotFound\",\n    \"error_code\": 21,\n    \"error_message\": \"ledgerNotFound\",\n    \"request\": {\n      \"command\": \"ledger\",\n      \"expand\": true,\n      \"id\": 14,\n      \"ledger_index\": 1234,\n      \"transactions\": true\n    }\n  },\n  \"status\": \"error\",\n  \"type\": \"response\"\n}\n"
  },
  {
    "path": "src/containers/Ledger/test/mockLedger.json",
    "content": "{\n  \"result\": {\n    \"ledger\": {\n      \"accepted\": true,\n      \"account_hash\": \"3733C0B5E2F03553169639728D257554B56CC2A57087C9FD550EF7ED98C1FD7C\",\n      \"close_flags\": 0,\n      \"close_time\": 603495661,\n      \"close_time_human\": \"2019-Feb-14 21:41:01.000000000 UTC\",\n      \"close_time_resolution\": 10,\n      \"closed\": true,\n      \"hash\": \"4253E4C67DD89F230CF25334BDD7406C312F90ADEEDA3BBEA5EB3AD0F4FCF9C3\",\n      \"ledger_hash\": \"4253E4C67DD89F230CF25334BDD7406C312F90ADEEDA3BBEA5EB3AD0F4FCF9C3\",\n      \"ledger_index\": \"45136164\",\n      \"parent_close_time\": 603495660,\n      \"parent_hash\": \"821CBBFE2C275C57C735F6F938A8CBBD2DC23877E8B56F2339618BEA995535C9\",\n      \"seqNum\": \"45136164\",\n      \"totalCoins\": \"99991690980788832\",\n      \"total_coins\": \"99991690980788832\",\n      \"transaction_hash\": \"D385E8841A384A125EDAE03626E07E41A8F0431A79504D6872112D40A3229CE3\",\n      \"transactions\": [\n        {\n          \"Account\": \"rJumr5e1HwiuV543H7bqixhtFreChWTaHH\",\n          \"Fee\": \"12\",\n          \"Flags\": 0,\n          \"OfferSequence\": 434833,\n          \"Sequence\": 434837,\n          \"SigningPubKey\": \"02207B680D408E4298BF14EC14CD2751DB20CDE1ADAD6322FBD4239B84F27D3F27\",\n          \"TakerGets\": \"1826283419\",\n          \"TakerPays\": {\n            \"currency\": \"CNY\",\n            \"issuer\": \"rJ1adrpGS3xsnQMb9Cw54tWJVFPuSdZHK\",\n            \"value\": \"3780.406678065401\"\n          },\n          \"TransactionType\": \"OfferCreate\",\n          \"TxnSignature\": \"3045022100B816ADB24E9D8AE35227B98F3D60A4194FEE48673A9CCBFE8CEAB1BAF6E4721E0220234EB25A9240D27BDCCB021727412D9D1C83471151A79E22255D80967F8D2FA1\",\n          \"hash\": \"FBB147825AE38DD4AA47761E7B5B2C9F912D46D07FF60E65D227F2677679471B\",\n          \"metaData\": {\n            \"AffectedNodes\": [\n              {\n                \"CreatedNode\": {\n                  \"LedgerEntryType\": \"Offer\",\n                  \"LedgerIndex\": \"4CE34C91E13290E69FCAD6B08F28B0E951A1BF748FC745C6E33C7CD8829045CE\",\n                  \"NewFields\": {\n                    \"Account\": \"rJumr5e1HwiuV543H7bqixhtFreChWTaHH\",\n                    \"BookDirectory\": \"623C4C4AD65873DA787AC85A0A1385FE6233B6DE100799474F075AA76EB584F4\",\n                    \"Sequence\": 434837,\n                    \"TakerGets\": \"1826283419\",\n                    \"TakerPays\": {\n                      \"currency\": \"CNY\",\n                      \"issuer\": \"rJ1adrpGS3xsnQMb9Cw54tWJVFPuSdZHK\",\n                      \"value\": \"3780.406678065401\"\n                    }\n                  }\n                }\n              },\n              {\n                \"CreatedNode\": {\n                  \"LedgerEntryType\": \"DirectoryNode\",\n                  \"LedgerIndex\": \"623C4C4AD65873DA787AC85A0A1385FE6233B6DE100799474F075AA76EB584F4\",\n                  \"NewFields\": {\n                    \"ExchangeRate\": \"4f075aa76eb584f4\",\n                    \"RootIndex\": \"623C4C4AD65873DA787AC85A0A1385FE6233B6DE100799474F075AA76EB584F4\",\n                    \"TakerPaysCurrency\": \"000000000000000000000000434E590000000000\",\n                    \"TakerPaysIssuer\": \"0360E3E0751BD9A566CD03FA6CAFC78118B82BA0\"\n                  }\n                }\n              },\n              {\n                \"DeletedNode\": {\n                  \"FinalFields\": {\n                    \"ExchangeRate\": \"4f075fe235963271\",\n                    \"Flags\": 0,\n                    \"RootIndex\": \"623C4C4AD65873DA787AC85A0A1385FE6233B6DE100799474F075FE235963271\",\n                    \"TakerGetsCurrency\": \"0000000000000000000000000000000000000000\",\n                    \"TakerGetsIssuer\": \"0000000000000000000000000000000000000000\",\n                    \"TakerPaysCurrency\": \"000000000000000000000000434E590000000000\",\n                    \"TakerPaysIssuer\": \"0360E3E0751BD9A566CD03FA6CAFC78118B82BA0\"\n                  },\n                  \"LedgerEntryType\": \"DirectoryNode\",\n                  \"LedgerIndex\": \"623C4C4AD65873DA787AC85A0A1385FE6233B6DE100799474F075FE235963271\"\n                }\n              },\n              {\n                \"ModifiedNode\": {\n                  \"FinalFields\": {\n                    \"Account\": \"rJumr5e1HwiuV543H7bqixhtFreChWTaHH\",\n                    \"Balance\": \"4799966381\",\n                    \"Flags\": 0,\n                    \"OwnerCount\": 5,\n                    \"Sequence\": 434838\n                  },\n                  \"LedgerEntryType\": \"AccountRoot\",\n                  \"LedgerIndex\": \"649D8F54A04A6503F1B768A1C5A8B7690722F4A96AB1D999261B2661D8223F2D\",\n                  \"PreviousFields\": {\n                    \"Balance\": \"4799966393\",\n                    \"Sequence\": 434837\n                  },\n                  \"PreviousTxnID\": \"123F4CAEC1A315A42F5DC01717C2EBFDC53A71EFDD5B0FC7EA8ECD3FB0A4CFD7\",\n                  \"PreviousTxnLgrSeq\": 45136153\n                }\n              },\n              {\n                \"ModifiedNode\": {\n                  \"FinalFields\": {\n                    \"Flags\": 0,\n                    \"Owner\": \"rJumr5e1HwiuV543H7bqixhtFreChWTaHH\",\n                    \"RootIndex\": \"B85E96605A78ABA153E322936C277B4E1524790EE1A340575FA2088E2F6E8F4F\"\n                  },\n                  \"LedgerEntryType\": \"DirectoryNode\",\n                  \"LedgerIndex\": \"B85E96605A78ABA153E322936C277B4E1524790EE1A340575FA2088E2F6E8F4F\"\n                }\n              },\n              {\n                \"DeletedNode\": {\n                  \"FinalFields\": {\n                    \"Account\": \"rJumr5e1HwiuV543H7bqixhtFreChWTaHH\",\n                    \"BookDirectory\": \"623C4C4AD65873DA787AC85A0A1385FE6233B6DE100799474F075FE235963271\",\n                    \"BookNode\": \"0\",\n                    \"Flags\": 0,\n                    \"OwnerNode\": \"0\",\n                    \"PreviousTxnID\": \"2218940AD74A0C5B4F402FEF3A7B75DA92195E0B795963266BF52DBDD0C5E346\",\n                    \"PreviousTxnLgrSeq\": 45136153,\n                    \"Sequence\": 434833,\n                    \"TakerGets\": \"426867926\",\n                    \"TakerPays\": {\n                      \"currency\": \"CNY\",\n                      \"issuer\": \"rJ1adrpGS3xsnQMb9Cw54tWJVFPuSdZHK\",\n                      \"value\": \"886.0710987852226\"\n                    }\n                  },\n                  \"LedgerEntryType\": \"Offer\",\n                  \"LedgerIndex\": \"E5DDB17F1D0A635E8095704D27807E42A7AF4437CBA9A196ADD18C2BC64EF6CD\"\n                }\n              }\n            ],\n            \"TransactionIndex\": 0,\n            \"TransactionResult\": \"tesSUCCESS\"\n          }\n        },\n        {\n          \"Account\": \"rJumr5e1HwiuV543H7bqixhtFreChWTaHH\",\n          \"Fee\": \"12\",\n          \"Flags\": 0,\n          \"OfferSequence\": 434834,\n          \"Sequence\": 434838,\n          \"SigningPubKey\": \"02207B680D408E4298BF14EC14CD2751DB20CDE1ADAD6322FBD4239B84F27D3F27\",\n          \"TakerGets\": \"387901997\",\n          \"TakerPays\": {\n            \"currency\": \"CNY\",\n            \"issuer\": \"rJ1adrpGS3xsnQMb9Cw54tWJVFPuSdZHK\",\n            \"value\": \"814.3575749822622\"\n          },\n          \"TransactionType\": \"OfferCreate\",\n          \"TxnSignature\": \"3044022021EBE9F2D73781B6C8EE06E551E0203B24F3134CBE7E4AB6BB3B47D469349F450220676C5B79C43340B10CEBE3F97DE6153A11A164FFF26EE73E4176FB6A59908F1E\",\n          \"hash\": \"37468E9FA12C27A7E0E1B7374B3EF472C4DE8FC97F06FE6D1A7A40D77DDEA42E\",\n          \"metaData\": {\n            \"AffectedNodes\": [\n              {\n                \"DeletedNode\": {\n                  \"FinalFields\": {\n                    \"Account\": \"rJumr5e1HwiuV543H7bqixhtFreChWTaHH\",\n                    \"BookDirectory\": \"623C4C4AD65873DA787AC85A0A1385FE6233B6DE100799474F0775625343C677\",\n                    \"BookNode\": \"0\",\n                    \"Flags\": 0,\n                    \"OwnerNode\": \"0\",\n                    \"PreviousTxnID\": \"6959149490F4F066F75C0AF5A161E60D0CDD8BAA8B9C5ACEC29447FE6AAA9F0D\",\n                    \"PreviousTxnLgrSeq\": 45136153,\n                    \"Sequence\": 434834,\n                    \"TakerGets\": \"1615418537\",\n                    \"TakerPays\": {\n                      \"currency\": \"CNY\",\n                      \"issuer\": \"rJ1adrpGS3xsnQMb9Cw54tWJVFPuSdZHK\",\n                      \"value\": \"3391.393524282533\"\n                    }\n                  },\n                  \"LedgerEntryType\": \"Offer\",\n                  \"LedgerIndex\": \"36FFF490D8FA2FF6CEC9001422B2E38925A78C27FBB0923D8FE92CFA31B75AB8\"\n                }\n              },\n              {\n                \"DeletedNode\": {\n                  \"FinalFields\": {\n                    \"ExchangeRate\": \"4f0775625343c677\",\n                    \"Flags\": 0,\n                    \"RootIndex\": \"623C4C4AD65873DA787AC85A0A1385FE6233B6DE100799474F0775625343C677\",\n                    \"TakerGetsCurrency\": \"0000000000000000000000000000000000000000\",\n                    \"TakerGetsIssuer\": \"0000000000000000000000000000000000000000\",\n                    \"TakerPaysCurrency\": \"000000000000000000000000434E590000000000\",\n                    \"TakerPaysIssuer\": \"0360E3E0751BD9A566CD03FA6CAFC78118B82BA0\"\n                  },\n                  \"LedgerEntryType\": \"DirectoryNode\",\n                  \"LedgerIndex\": \"623C4C4AD65873DA787AC85A0A1385FE6233B6DE100799474F0775625343C677\"\n                }\n              },\n              {\n                \"CreatedNode\": {\n                  \"LedgerEntryType\": \"DirectoryNode\",\n                  \"LedgerIndex\": \"623C4C4AD65873DA787AC85A0A1385FE6233B6DE100799474F077562536CF1A6\",\n                  \"NewFields\": {\n                    \"ExchangeRate\": \"4f077562536cf1a6\",\n                    \"RootIndex\": \"623C4C4AD65873DA787AC85A0A1385FE6233B6DE100799474F077562536CF1A6\",\n                    \"TakerPaysCurrency\": \"000000000000000000000000434E590000000000\",\n                    \"TakerPaysIssuer\": \"0360E3E0751BD9A566CD03FA6CAFC78118B82BA0\"\n                  }\n                }\n              },\n              {\n                \"ModifiedNode\": {\n                  \"FinalFields\": {\n                    \"Account\": \"rJumr5e1HwiuV543H7bqixhtFreChWTaHH\",\n                    \"Balance\": \"4799966369\",\n                    \"Flags\": 0,\n                    \"OwnerCount\": 5,\n                    \"Sequence\": 434839\n                  },\n                  \"LedgerEntryType\": \"AccountRoot\",\n                  \"LedgerIndex\": \"649D8F54A04A6503F1B768A1C5A8B7690722F4A96AB1D999261B2661D8223F2D\",\n                  \"PreviousFields\": {\n                    \"Balance\": \"4799966381\",\n                    \"Sequence\": 434838\n                  },\n                  \"PreviousTxnID\": \"FBB147825AE38DD4AA47761E7B5B2C9F912D46D07FF60E65D227F2677679471B\",\n                  \"PreviousTxnLgrSeq\": 45136164\n                }\n              },\n              {\n                \"ModifiedNode\": {\n                  \"FinalFields\": {\n                    \"Flags\": 0,\n                    \"Owner\": \"rJumr5e1HwiuV543H7bqixhtFreChWTaHH\",\n                    \"RootIndex\": \"B85E96605A78ABA153E322936C277B4E1524790EE1A340575FA2088E2F6E8F4F\"\n                  },\n                  \"LedgerEntryType\": \"DirectoryNode\",\n                  \"LedgerIndex\": \"B85E96605A78ABA153E322936C277B4E1524790EE1A340575FA2088E2F6E8F4F\"\n                }\n              },\n              {\n                \"CreatedNode\": {\n                  \"LedgerEntryType\": \"Offer\",\n                  \"LedgerIndex\": \"C3C42E526CADDEFBFFEF065A48AE0608DAF0EA851E3564987E836777F8D2FFE7\",\n                  \"NewFields\": {\n                    \"Account\": \"rJumr5e1HwiuV543H7bqixhtFreChWTaHH\",\n                    \"BookDirectory\": \"623C4C4AD65873DA787AC85A0A1385FE6233B6DE100799474F077562536CF1A6\",\n                    \"Sequence\": 434838,\n                    \"TakerGets\": \"387901997\",\n                    \"TakerPays\": {\n                      \"currency\": \"CNY\",\n                      \"issuer\": \"rJ1adrpGS3xsnQMb9Cw54tWJVFPuSdZHK\",\n                      \"value\": \"814.3575749822622\"\n                    }\n                  }\n                }\n              }\n            ],\n            \"TransactionIndex\": 1,\n            \"TransactionResult\": \"tesSUCCESS\"\n          }\n        },\n        {\n          \"Account\": \"rJumr5e1HwiuV543H7bqixhtFreChWTaHH\",\n          \"Fee\": \"12\",\n          \"Flags\": 0,\n          \"OfferSequence\": 434835,\n          \"Sequence\": 434839,\n          \"SigningPubKey\": \"02207B680D408E4298BF14EC14CD2751DB20CDE1ADAD6322FBD4239B84F27D3F27\",\n          \"TakerGets\": \"1383168304\",\n          \"TakerPays\": {\n            \"currency\": \"CNY\",\n            \"issuer\": \"rJ1adrpGS3xsnQMb9Cw54tWJVFPuSdZHK\",\n            \"value\": \"2921.251458458587\"\n          },\n          \"TransactionType\": \"OfferCreate\",\n          \"TxnSignature\": \"3045022100BDD675579684CBABA579612A9042CC4C76B959791294FA632F0F17C5E5717D8D02201DD18F2965F0D18746A802BB44A86B1773B04AC3E60143C113EFD576BFDA9DD1\",\n          \"hash\": \"7D427958E943B87C31E8F46274EA7D5AFD5515ABE8BBA6EB73DCFD844C9424BA\",\n          \"metaData\": {\n            \"AffectedNodes\": [\n              {\n                \"DeletedNode\": {\n                  \"FinalFields\": {\n                    \"Account\": \"rJumr5e1HwiuV543H7bqixhtFreChWTaHH\",\n                    \"BookDirectory\": \"623C4C4AD65873DA787AC85A0A1385FE6233B6DE100799474F0780DA51CF1B99\",\n                    \"BookNode\": \"0\",\n                    \"Flags\": 0,\n                    \"OwnerNode\": \"0\",\n                    \"PreviousTxnID\": \"154179666B33A8FDCEB066183C3ED65E483AB90CA6698940776291F7AC4C257B\",\n                    \"PreviousTxnLgrSeq\": 45136153,\n                    \"Sequence\": 434835,\n                    \"TakerGets\": \"1209486625\",\n                    \"TakerPays\": {\n                      \"currency\": \"CNY\",\n                      \"issuer\": \"rJ1adrpGS3xsnQMb9Cw54tWJVFPuSdZHK\",\n                      \"value\": \"2554.43575288046\"\n                    }\n                  },\n                  \"LedgerEntryType\": \"Offer\",\n                  \"LedgerIndex\": \"603E508EB428C4B90D8E85626AC498BA8523285F245F69D707C0C170D65CF5D1\"\n                }\n              },\n              {\n                \"CreatedNode\": {\n                  \"LedgerEntryType\": \"DirectoryNode\",\n                  \"LedgerIndex\": \"623C4C4AD65873DA787AC85A0A1385FE6233B6DE100799474F0780DA51C8878D\",\n                  \"NewFields\": {\n                    \"ExchangeRate\": \"4f0780da51c8878d\",\n                    \"RootIndex\": \"623C4C4AD65873DA787AC85A0A1385FE6233B6DE100799474F0780DA51C8878D\",\n                    \"TakerPaysCurrency\": \"000000000000000000000000434E590000000000\",\n                    \"TakerPaysIssuer\": \"0360E3E0751BD9A566CD03FA6CAFC78118B82BA0\"\n                  }\n                }\n              },\n              {\n                \"DeletedNode\": {\n                  \"FinalFields\": {\n                    \"ExchangeRate\": \"4f0780da51cf1b99\",\n                    \"Flags\": 0,\n                    \"RootIndex\": \"623C4C4AD65873DA787AC85A0A1385FE6233B6DE100799474F0780DA51CF1B99\",\n                    \"TakerGetsCurrency\": \"0000000000000000000000000000000000000000\",\n                    \"TakerGetsIssuer\": \"0000000000000000000000000000000000000000\",\n                    \"TakerPaysCurrency\": \"000000000000000000000000434E590000000000\",\n                    \"TakerPaysIssuer\": \"0360E3E0751BD9A566CD03FA6CAFC78118B82BA0\"\n                  },\n                  \"LedgerEntryType\": \"DirectoryNode\",\n                  \"LedgerIndex\": \"623C4C4AD65873DA787AC85A0A1385FE6233B6DE100799474F0780DA51CF1B99\"\n                }\n              },\n              {\n                \"ModifiedNode\": {\n                  \"FinalFields\": {\n                    \"Account\": \"rJumr5e1HwiuV543H7bqixhtFreChWTaHH\",\n                    \"Balance\": \"4799966357\",\n                    \"Flags\": 0,\n                    \"OwnerCount\": 5,\n                    \"Sequence\": 434840\n                  },\n                  \"LedgerEntryType\": \"AccountRoot\",\n                  \"LedgerIndex\": \"649D8F54A04A6503F1B768A1C5A8B7690722F4A96AB1D999261B2661D8223F2D\",\n                  \"PreviousFields\": {\n                    \"Balance\": \"4799966369\",\n                    \"Sequence\": 434839\n                  },\n                  \"PreviousTxnID\": \"37468E9FA12C27A7E0E1B7374B3EF472C4DE8FC97F06FE6D1A7A40D77DDEA42E\",\n                  \"PreviousTxnLgrSeq\": 45136164\n                }\n              },\n              {\n                \"CreatedNode\": {\n                  \"LedgerEntryType\": \"Offer\",\n                  \"LedgerIndex\": \"826253697E997D1674660C06662435F01C13E297C3D1292E6AE582ED8DD6CED4\",\n                  \"NewFields\": {\n                    \"Account\": \"rJumr5e1HwiuV543H7bqixhtFreChWTaHH\",\n                    \"BookDirectory\": \"623C4C4AD65873DA787AC85A0A1385FE6233B6DE100799474F0780DA51C8878D\",\n                    \"Sequence\": 434839,\n                    \"TakerGets\": \"1383168304\",\n                    \"TakerPays\": {\n                      \"currency\": \"CNY\",\n                      \"issuer\": \"rJ1adrpGS3xsnQMb9Cw54tWJVFPuSdZHK\",\n                      \"value\": \"2921.251458458587\"\n                    }\n                  }\n                }\n              },\n              {\n                \"ModifiedNode\": {\n                  \"FinalFields\": {\n                    \"Flags\": 0,\n                    \"Owner\": \"rJumr5e1HwiuV543H7bqixhtFreChWTaHH\",\n                    \"RootIndex\": \"B85E96605A78ABA153E322936C277B4E1524790EE1A340575FA2088E2F6E8F4F\"\n                  },\n                  \"LedgerEntryType\": \"DirectoryNode\",\n                  \"LedgerIndex\": \"B85E96605A78ABA153E322936C277B4E1524790EE1A340575FA2088E2F6E8F4F\"\n                }\n              }\n            ],\n            \"TransactionIndex\": 2,\n            \"TransactionResult\": \"tesSUCCESS\"\n          }\n        },\n        {\n          \"Account\": \"rJumr5e1HwiuV543H7bqixhtFreChWTaHH\",\n          \"Fee\": \"12\",\n          \"Flags\": 0,\n          \"OfferSequence\": 434836,\n          \"Sequence\": 434840,\n          \"SigningPubKey\": \"02207B680D408E4298BF14EC14CD2751DB20CDE1ADAD6322FBD4239B84F27D3F27\",\n          \"TakerGets\": \"1890602253\",\n          \"TakerPays\": {\n            \"currency\": \"CNY\",\n            \"issuer\": \"rJ1adrpGS3xsnQMb9Cw54tWJVFPuSdZHK\",\n            \"value\": \"4026.982799610241\"\n          },\n          \"TransactionType\": \"OfferCreate\",\n          \"TxnSignature\": \"3045022100BA1FAAE5F58A7344BA84DFA63732E5E5BD25D0EFA4A99D751D21612CE8547E3E022006BA6DA095017B4B93953ADF35E65FBD3D7A80C570B569850996C90782A21304\",\n          \"hash\": \"F84B233749ED99090099263469F2F7FC7CB6DF469C6E2FCB3188159B7C295AEB\",\n          \"metaData\": {\n            \"AffectedNodes\": [\n              {\n                \"CreatedNode\": {\n                  \"LedgerEntryType\": \"Offer\",\n                  \"LedgerIndex\": \"005D70B5403FAC98EAC0C28B358FBD3AB894A92734E52679F2A169172922897E\",\n                  \"NewFields\": {\n                    \"Account\": \"rJumr5e1HwiuV543H7bqixhtFreChWTaHH\",\n                    \"BookDirectory\": \"623C4C4AD65873DA787AC85A0A1385FE6233B6DE100799474F0791394564F01E\",\n                    \"Sequence\": 434840,\n                    \"TakerGets\": \"1890602253\",\n                    \"TakerPays\": {\n                      \"currency\": \"CNY\",\n                      \"issuer\": \"rJ1adrpGS3xsnQMb9Cw54tWJVFPuSdZHK\",\n                      \"value\": \"4026.982799610241\"\n                    }\n                  }\n                }\n              },\n              {\n                \"CreatedNode\": {\n                  \"LedgerEntryType\": \"DirectoryNode\",\n                  \"LedgerIndex\": \"623C4C4AD65873DA787AC85A0A1385FE6233B6DE100799474F0791394564F01E\",\n                  \"NewFields\": {\n                    \"ExchangeRate\": \"4f0791394564f01e\",\n                    \"RootIndex\": \"623C4C4AD65873DA787AC85A0A1385FE6233B6DE100799474F0791394564F01E\",\n                    \"TakerPaysCurrency\": \"000000000000000000000000434E590000000000\",\n                    \"TakerPaysIssuer\": \"0360E3E0751BD9A566CD03FA6CAFC78118B82BA0\"\n                  }\n                }\n              },\n              {\n                \"DeletedNode\": {\n                  \"FinalFields\": {\n                    \"ExchangeRate\": \"4f079139456b374f\",\n                    \"Flags\": 0,\n                    \"RootIndex\": \"623C4C4AD65873DA787AC85A0A1385FE6233B6DE100799474F079139456B374F\",\n                    \"TakerGetsCurrency\": \"0000000000000000000000000000000000000000\",\n                    \"TakerGetsIssuer\": \"0000000000000000000000000000000000000000\",\n                    \"TakerPaysCurrency\": \"000000000000000000000000434E590000000000\",\n                    \"TakerPaysIssuer\": \"0360E3E0751BD9A566CD03FA6CAFC78118B82BA0\"\n                  },\n                  \"LedgerEntryType\": \"DirectoryNode\",\n                  \"LedgerIndex\": \"623C4C4AD65873DA787AC85A0A1385FE6233B6DE100799474F079139456B374F\"\n                }\n              },\n              {\n                \"ModifiedNode\": {\n                  \"FinalFields\": {\n                    \"Account\": \"rJumr5e1HwiuV543H7bqixhtFreChWTaHH\",\n                    \"Balance\": \"4799966345\",\n                    \"Flags\": 0,\n                    \"OwnerCount\": 5,\n                    \"Sequence\": 434841\n                  },\n                  \"LedgerEntryType\": \"AccountRoot\",\n                  \"LedgerIndex\": \"649D8F54A04A6503F1B768A1C5A8B7690722F4A96AB1D999261B2661D8223F2D\",\n                  \"PreviousFields\": {\n                    \"Balance\": \"4799966357\",\n                    \"Sequence\": 434840\n                  },\n                  \"PreviousTxnID\": \"7D427958E943B87C31E8F46274EA7D5AFD5515ABE8BBA6EB73DCFD844C9424BA\",\n                  \"PreviousTxnLgrSeq\": 45136164\n                }\n              },\n              {\n                \"ModifiedNode\": {\n                  \"FinalFields\": {\n                    \"Flags\": 0,\n                    \"Owner\": \"rJumr5e1HwiuV543H7bqixhtFreChWTaHH\",\n                    \"RootIndex\": \"B85E96605A78ABA153E322936C277B4E1524790EE1A340575FA2088E2F6E8F4F\"\n                  },\n                  \"LedgerEntryType\": \"DirectoryNode\",\n                  \"LedgerIndex\": \"B85E96605A78ABA153E322936C277B4E1524790EE1A340575FA2088E2F6E8F4F\"\n                }\n              },\n              {\n                \"DeletedNode\": {\n                  \"FinalFields\": {\n                    \"Account\": \"rJumr5e1HwiuV543H7bqixhtFreChWTaHH\",\n                    \"BookDirectory\": \"623C4C4AD65873DA787AC85A0A1385FE6233B6DE100799474F079139456B374F\",\n                    \"BookNode\": \"0\",\n                    \"Flags\": 0,\n                    \"OwnerNode\": \"0\",\n                    \"PreviousTxnID\": \"123F4CAEC1A315A42F5DC01717C2EBFDC53A71EFDD5B0FC7EA8ECD3FB0A4CFD7\",\n                    \"PreviousTxnLgrSeq\": 45136153,\n                    \"Sequence\": 434836,\n                    \"TakerGets\": \"1803992460\",\n                    \"TakerPays\": {\n                      \"currency\": \"CNY\",\n                      \"issuer\": \"rJ1adrpGS3xsnQMb9Cw54tWJVFPuSdZHK\",\n                      \"value\": \"3842.503941229482\"\n                    }\n                  },\n                  \"LedgerEntryType\": \"Offer\",\n                  \"LedgerIndex\": \"CBE547BF8AE1ED78C31C3BE9B99E3B2620422A2E6A2602960A2C96293C86426C\"\n                }\n              }\n            ],\n            \"TransactionIndex\": 3,\n            \"TransactionResult\": \"tesSUCCESS\"\n          }\n        },\n        {\n          \"Account\": \"rKxmaPYJ3A5kbsT9wAyDnC1kbZ4XQ8Mskv\",\n          \"Expiration\": 603501664,\n          \"Fee\": \"12\",\n          \"Flags\": 2148007936,\n          \"LastLedgerSequence\": 45136166,\n          \"OfferSequence\": 175236,\n          \"Sequence\": 175251,\n          \"SigningPubKey\": \"02739CACE15E6E411681DB8DF75498E7CE214A29EB36DB31130DDA5F0F85F099A6\",\n          \"TakerGets\": {\n            \"currency\": \"ETH\",\n            \"issuer\": \"rLAKy3kN7um61z27iYgUiEnhM29FxXMq1F\",\n            \"value\": \"1\"\n          },\n          \"TakerPays\": {\n            \"currency\": \"EUR\",\n            \"issuer\": \"rhqZLBimNU78SGmA9WzcEdtn9ZaG8sqV5x\",\n            \"value\": \"117.183\"\n          },\n          \"TransactionType\": \"OfferCreate\",\n          \"TxnSignature\": \"30440220265A4E8909A306A6F709351EE23BB48F8719A64674C7DD214DB3FE2A114B404F0220530043E23DA694A1CCEB5BF67624FD7580F15A0843973C5F3E0DEB0A9A66EB1F\",\n          \"hash\": \"28044988242B9FD51997722AAC7877358092480478861B37565982AEDF38FFA4\",\n          \"metaData\": {\n            \"AffectedNodes\": [\n              {\n                \"DeletedNode\": {\n                  \"FinalFields\": {\n                    \"Account\": \"rKxmaPYJ3A5kbsT9wAyDnC1kbZ4XQ8Mskv\",\n                    \"BookDirectory\": \"74AD983BC5D0AFFD6C639A05BC96CC97C8752DD9D16DEDFC570427C5B4AB2C00\",\n                    \"BookNode\": \"0\",\n                    \"Expiration\": 603501053,\n                    \"Flags\": 131072,\n                    \"OwnerNode\": \"0\",\n                    \"PreviousTxnID\": \"C5D99CA3407E75AE36E87FC9ADFAD5B8B651ACC2BC84169508156988B923382B\",\n                    \"PreviousTxnLgrSeq\": 45135991,\n                    \"Sequence\": 175236,\n                    \"TakerGets\": {\n                      \"currency\": \"ETH\",\n                      \"issuer\": \"rLAKy3kN7um61z27iYgUiEnhM29FxXMq1F\",\n                      \"value\": \"1\"\n                    },\n                    \"TakerPays\": {\n                      \"currency\": \"EUR\",\n                      \"issuer\": \"rhqZLBimNU78SGmA9WzcEdtn9ZaG8sqV5x\",\n                      \"value\": \"116.963\"\n                    }\n                  },\n                  \"LedgerEntryType\": \"Offer\",\n                  \"LedgerIndex\": \"02C5E91DB128B45CE7BE576F9B513F7E6CAC06E811C12DA73F7B220A7E2EFAFA\"\n                }\n              },\n              {\n                \"CreatedNode\": {\n                  \"LedgerEntryType\": \"Offer\",\n                  \"LedgerIndex\": \"1B175B8C981538A08A1AB58886C8F372C149385516D32757B927410DD18E1FDE\",\n                  \"NewFields\": {\n                    \"Account\": \"rKxmaPYJ3A5kbsT9wAyDnC1kbZ4XQ8Mskv\",\n                    \"BookDirectory\": \"74AD983BC5D0AFFD6C639A05BC96CC97C8752DD9D16DEDFC570429C5EEE31C00\",\n                    \"Expiration\": 603501664,\n                    \"Flags\": 131072,\n                    \"Sequence\": 175251,\n                    \"TakerGets\": {\n                      \"currency\": \"ETH\",\n                      \"issuer\": \"rLAKy3kN7um61z27iYgUiEnhM29FxXMq1F\",\n                      \"value\": \"1\"\n                    },\n                    \"TakerPays\": {\n                      \"currency\": \"EUR\",\n                      \"issuer\": \"rhqZLBimNU78SGmA9WzcEdtn9ZaG8sqV5x\",\n                      \"value\": \"117.183\"\n                    }\n                  }\n                }\n              },\n              {\n                \"DeletedNode\": {\n                  \"FinalFields\": {\n                    \"ExchangeRate\": \"570427c5b4ab2c00\",\n                    \"Flags\": 0,\n                    \"RootIndex\": \"74AD983BC5D0AFFD6C639A05BC96CC97C8752DD9D16DEDFC570427C5B4AB2C00\",\n                    \"TakerGetsCurrency\": \"0000000000000000000000004554480000000000\",\n                    \"TakerGetsIssuer\": \"DAB0AF7434545A03B965685E852E2E156B74B915\",\n                    \"TakerPaysCurrency\": \"0000000000000000000000004555520000000000\",\n                    \"TakerPaysIssuer\": \"2A1754F8CF59F2EFC5C04D62B9EDA8024A7B9ED4\"\n                  },\n                  \"LedgerEntryType\": \"DirectoryNode\",\n                  \"LedgerIndex\": \"74AD983BC5D0AFFD6C639A05BC96CC97C8752DD9D16DEDFC570427C5B4AB2C00\"\n                }\n              },\n              {\n                \"CreatedNode\": {\n                  \"LedgerEntryType\": \"DirectoryNode\",\n                  \"LedgerIndex\": \"74AD983BC5D0AFFD6C639A05BC96CC97C8752DD9D16DEDFC570429C5EEE31C00\",\n                  \"NewFields\": {\n                    \"ExchangeRate\": \"570429c5eee31c00\",\n                    \"RootIndex\": \"74AD983BC5D0AFFD6C639A05BC96CC97C8752DD9D16DEDFC570429C5EEE31C00\",\n                    \"TakerGetsCurrency\": \"0000000000000000000000004554480000000000\",\n                    \"TakerGetsIssuer\": \"DAB0AF7434545A03B965685E852E2E156B74B915\",\n                    \"TakerPaysCurrency\": \"0000000000000000000000004555520000000000\",\n                    \"TakerPaysIssuer\": \"2A1754F8CF59F2EFC5C04D62B9EDA8024A7B9ED4\"\n                  }\n                }\n              },\n              {\n                \"ModifiedNode\": {\n                  \"FinalFields\": {\n                    \"Flags\": 0,\n                    \"IndexNext\": \"0\",\n                    \"IndexPrevious\": \"0\",\n                    \"Owner\": \"rKxmaPYJ3A5kbsT9wAyDnC1kbZ4XQ8Mskv\",\n                    \"RootIndex\": \"A6AC1A7B8B8D7FE10FCB719ABC07F893C2A0C6BEDC1C5B3A9978EEC1D773979B\"\n                  },\n                  \"LedgerEntryType\": \"DirectoryNode\",\n                  \"LedgerIndex\": \"A6AC1A7B8B8D7FE10FCB719ABC07F893C2A0C6BEDC1C5B3A9978EEC1D773979B\"\n                }\n              },\n              {\n                \"ModifiedNode\": {\n                  \"FinalFields\": {\n                    \"Account\": \"rKxmaPYJ3A5kbsT9wAyDnC1kbZ4XQ8Mskv\",\n                    \"Balance\": \"1691920859\",\n                    \"Flags\": 0,\n                    \"OwnerCount\": 21,\n                    \"Sequence\": 175252\n                  },\n                  \"LedgerEntryType\": \"AccountRoot\",\n                  \"LedgerIndex\": \"AC1F31779C17602B1F4040D69F12E969901E7CE9FEB66BCC77BB528D62878D3A\",\n                  \"PreviousFields\": {\n                    \"Balance\": \"1691920871\",\n                    \"Sequence\": 175251\n                  },\n                  \"PreviousTxnID\": \"E861B058A5EB82B0F6720023091F8ED37735BBC1843453A02FADAA3CE4556350\",\n                  \"PreviousTxnLgrSeq\": 45136161\n                }\n              }\n            ],\n            \"TransactionIndex\": 4,\n            \"TransactionResult\": \"tesSUCCESS\"\n          }\n        },\n        {\n          \"Account\": \"rnwe9kEcneb8DaXWtDWxctz7AChk6CAYnD\",\n          \"Balance\": \"69211506\",\n          \"Channel\": \"931CF90A156E4337641451A7B6BF918419E671B6A53B4FECABE91B6F82667FE6\",\n          \"Fee\": \"12\",\n          \"Flags\": 2147483648,\n          \"LastLedgerSequence\": 45136164,\n          \"PublicKey\": \"EDF1C5FD9AB2729C0212E578FB5BC85315121C3A853F630AB45069B99C0C1A0054\",\n          \"Sequence\": 4222,\n          \"Signature\": \"FA5953B2DC3D6175392188F5BB00E19747630322B4FE8C194CBCF048BE3C57BA653D5CF316C0C9FB29CA0DDBC3076C8FDCA9C302BDFEBE415B1DA8B44B73C808\",\n          \"SigningPubKey\": \"030CE927D280A73A12E9938A929A14876A0826A678134A4E659CB3E9814F0C9157\",\n          \"TransactionType\": \"PaymentChannelClaim\",\n          \"TxnSignature\": \"304402202826980DF131E35ACEF8B64940AD95A906958743B3A4A4972F0D82ED33A558890220102BA9D1AB3658216A45A00884ED2FAE8D9DEF8CAD15F46311997D09343E5A44\",\n          \"hash\": \"50F0BE978093592CB68E9AC183E97E799A2B8E3E028CAAE3AF9B95D911B53500\",\n          \"metaData\": {\n            \"AffectedNodes\": [\n              {\n                \"ModifiedNode\": {\n                  \"FinalFields\": {\n                    \"Account\": \"rnwe9kEcneb8DaXWtDWxctz7AChk6CAYnD\",\n                    \"Balance\": \"212797872\",\n                    \"Flags\": 0,\n                    \"OwnerCount\": 3,\n                    \"Sequence\": 4223\n                  },\n                  \"LedgerEntryType\": \"AccountRoot\",\n                  \"LedgerIndex\": \"00833E4D8EC55B9E1BF0C3375A1641756645E4024A0386D62BBF18564B12ED00\",\n                  \"PreviousFields\": {\n                    \"Balance\": \"212618624\",\n                    \"Sequence\": 4222\n                  },\n                  \"PreviousTxnID\": \"446F45CF0C0FC9C13AB4F4333D05C07053E16AD8BD4A518A7AD61E065B0B87B5\",\n                  \"PreviousTxnLgrSeq\": 45136080\n                }\n              },\n              {\n                \"ModifiedNode\": {\n                  \"FinalFields\": {\n                    \"Account\": \"rK6g2UYc4GpQH8DYdPG7wywyQbxkJpQTTN\",\n                    \"Amount\": \"70000000\",\n                    \"Balance\": \"69211506\",\n                    \"Destination\": \"rnwe9kEcneb8DaXWtDWxctz7AChk6CAYnD\",\n                    \"Flags\": 0,\n                    \"OwnerNode\": \"4c\",\n                    \"PublicKey\": \"EDF1C5FD9AB2729C0212E578FB5BC85315121C3A853F630AB45069B99C0C1A0054\",\n                    \"SettleDelay\": 3600,\n                    \"SourceTag\": 1781470388\n                  },\n                  \"LedgerEntryType\": \"PayChannel\",\n                  \"LedgerIndex\": \"931CF90A156E4337641451A7B6BF918419E671B6A53B4FECABE91B6F82667FE6\",\n                  \"PreviousFields\": {\n                    \"Balance\": \"69032246\"\n                  },\n                  \"PreviousTxnID\": \"446F45CF0C0FC9C13AB4F4333D05C07053E16AD8BD4A518A7AD61E065B0B87B5\",\n                  \"PreviousTxnLgrSeq\": 45136080\n                }\n              }\n            ],\n            \"TransactionIndex\": 5,\n            \"TransactionResult\": \"tesSUCCESS\"\n          }\n        },\n        {\n          \"Account\": \"r9Vv4yJeVFYqLBuZ85muKmxHvPzmZUDFMM\",\n          \"Expiration\": 609495656,\n          \"Fee\": \"21\",\n          \"Flags\": 2147483648,\n          \"LastLedgerSequence\": 45136165,\n          \"OfferSequence\": 2500102,\n          \"Sequence\": 2500103,\n          \"SigningPubKey\": \"03F8066FB5D04754E3B77E94C102BB7CF022170DAE53F35676F1A6C839BD94CDE0\",\n          \"TakerGets\": \"2032429310\",\n          \"TakerPays\": {\n            \"currency\": \"USD\",\n            \"issuer\": \"rhub8VRN55s94qWKDv6jmDy1pUykJzF3wq\",\n            \"value\": \"620.1885165967301\"\n          },\n          \"TransactionType\": \"OfferCreate\",\n          \"TxnSignature\": \"304402203A142A7A78D9F230436AF3A028D2BA6D7D6B4F15980724F2FC89069A37983EB002201B146043A30AA15E9262BB2BB5527FADA59862B6C64838146750FFDD9D449289\",\n          \"hash\": \"AED69E8A9B978C30B53CB710A5B7D5FFDD05425351835B7C118897114CF17F4A\",\n          \"metaData\": {\n            \"AffectedNodes\": [\n              {\n                \"ModifiedNode\": {\n                  \"FinalFields\": {\n                    \"Account\": \"r9Vv4yJeVFYqLBuZ85muKmxHvPzmZUDFMM\",\n                    \"Balance\": \"13931529506\",\n                    \"Flags\": 0,\n                    \"OwnerCount\": 12,\n                    \"Sequence\": 2500104\n                  },\n                  \"LedgerEntryType\": \"AccountRoot\",\n                  \"LedgerIndex\": \"25BD8E27BFF4870A055E109C98EE5FE861A44978B17D4D0295EBC500B36F26C1\",\n                  \"PreviousFields\": {\n                    \"Balance\": \"13931529527\",\n                    \"Sequence\": 2500103\n                  },\n                  \"PreviousTxnID\": \"8EA367F72674581760026B4B31639DDC86680F9AACBED1C9B32388FEABCA55C8\",\n                  \"PreviousTxnLgrSeq\": 45136162\n                }\n              },\n              {\n                \"CreatedNode\": {\n                  \"LedgerEntryType\": \"DirectoryNode\",\n                  \"LedgerIndex\": \"79C54A4EBD69AB2EADCE313042F36092BE432423CC6A4F784E0AD74A5C62BECB\",\n                  \"NewFields\": {\n                    \"ExchangeRate\": \"4e0ad74a5c62becb\",\n                    \"RootIndex\": \"79C54A4EBD69AB2EADCE313042F36092BE432423CC6A4F784E0AD74A5C62BECB\",\n                    \"TakerPaysCurrency\": \"0000000000000000000000005553440000000000\",\n                    \"TakerPaysIssuer\": \"2ADB0B3959D60A6E6991F729E1918B7163925230\"\n                  }\n                }\n              },\n              {\n                \"DeletedNode\": {\n                  \"FinalFields\": {\n                    \"ExchangeRate\": \"4e0ad798855ce143\",\n                    \"Flags\": 0,\n                    \"RootIndex\": \"79C54A4EBD69AB2EADCE313042F36092BE432423CC6A4F784E0AD798855CE143\",\n                    \"TakerGetsCurrency\": \"0000000000000000000000000000000000000000\",\n                    \"TakerGetsIssuer\": \"0000000000000000000000000000000000000000\",\n                    \"TakerPaysCurrency\": \"0000000000000000000000005553440000000000\",\n                    \"TakerPaysIssuer\": \"2ADB0B3959D60A6E6991F729E1918B7163925230\"\n                  },\n                  \"LedgerEntryType\": \"DirectoryNode\",\n                  \"LedgerIndex\": \"79C54A4EBD69AB2EADCE313042F36092BE432423CC6A4F784E0AD798855CE143\"\n                }\n              },\n              {\n                \"ModifiedNode\": {\n                  \"FinalFields\": {\n                    \"Flags\": 0,\n                    \"Owner\": \"r9Vv4yJeVFYqLBuZ85muKmxHvPzmZUDFMM\",\n                    \"RootIndex\": \"79D4666D2ABAA909E608476C8056EA4D443C8480F536D609DCC63C4308C54E0F\"\n                  },\n                  \"LedgerEntryType\": \"DirectoryNode\",\n                  \"LedgerIndex\": \"79D4666D2ABAA909E608476C8056EA4D443C8480F536D609DCC63C4308C54E0F\"\n                }\n              },\n              {\n                \"CreatedNode\": {\n                  \"LedgerEntryType\": \"Offer\",\n                  \"LedgerIndex\": \"89FFF8DDE146B346099D50A73B0AB215A004EB04E61DEFA54CF1A2B8A6ABAB01\",\n                  \"NewFields\": {\n                    \"Account\": \"r9Vv4yJeVFYqLBuZ85muKmxHvPzmZUDFMM\",\n                    \"BookDirectory\": \"79C54A4EBD69AB2EADCE313042F36092BE432423CC6A4F784E0AD74A5C62BECB\",\n                    \"Expiration\": 609495656,\n                    \"Sequence\": 2500103,\n                    \"TakerGets\": \"2032429310\",\n                    \"TakerPays\": {\n                      \"currency\": \"USD\",\n                      \"issuer\": \"rhub8VRN55s94qWKDv6jmDy1pUykJzF3wq\",\n                      \"value\": \"620.1885165967301\"\n                    }\n                  }\n                }\n              },\n              {\n                \"DeletedNode\": {\n                  \"FinalFields\": {\n                    \"Account\": \"r9Vv4yJeVFYqLBuZ85muKmxHvPzmZUDFMM\",\n                    \"BookDirectory\": \"79C54A4EBD69AB2EADCE313042F36092BE432423CC6A4F784E0AD798855CE143\",\n                    \"BookNode\": \"0\",\n                    \"Expiration\": 609495652,\n                    \"Flags\": 0,\n                    \"OwnerNode\": \"0\",\n                    \"PreviousTxnID\": \"8EA367F72674581760026B4B31639DDC86680F9AACBED1C9B32388FEABCA55C8\",\n                    \"PreviousTxnLgrSeq\": 45136162,\n                    \"Sequence\": 2500102,\n                    \"TakerGets\": \"2032429310\",\n                    \"TakerPays\": {\n                      \"currency\": \"USD\",\n                      \"issuer\": \"rhub8VRN55s94qWKDv6jmDy1pUykJzF3wq\",\n                      \"value\": \"620.2567442183373\"\n                    }\n                  },\n                  \"LedgerEntryType\": \"Offer\",\n                  \"LedgerIndex\": \"F54DA8C1CF3103A0B328788D426ED9E879A285B385F54A786140E6E55CC8F976\"\n                }\n              }\n            ],\n            \"TransactionIndex\": 6,\n            \"TransactionResult\": \"tesSUCCESS\"\n          }\n        },\n        {\n          \"Account\": \"rfW24fjUr12xJ9j76MdFU5tPTgZem96G3P\",\n          \"Expiration\": 603501664,\n          \"Fee\": \"12\",\n          \"Flags\": 2147483648,\n          \"LastLedgerSequence\": 45136166,\n          \"OfferSequence\": 175141,\n          \"Sequence\": 175156,\n          \"SigningPubKey\": \"021482C1EC8583B0360EBFD0A3FB168D0DE2347E88771D40E5D9FDA64BAEF41F3E\",\n          \"TakerGets\": {\n            \"currency\": \"EUR\",\n            \"issuer\": \"rhqZLBimNU78SGmA9WzcEdtn9ZaG8sqV5x\",\n            \"value\": \"95.679\"\n          },\n          \"TakerPays\": {\n            \"currency\": \"ETH\",\n            \"issuer\": \"rLAKy3kN7um61z27iYgUiEnhM29FxXMq1F\",\n            \"value\": \"1\"\n          },\n          \"TransactionType\": \"OfferCreate\",\n          \"TxnSignature\": \"304402200440D59274849CBBDE1D6EBF0F4DCDAED787F6CF7D0A2155EFA26467300A118702202E4D1DA0F84AD1534271BD583636EA8742D622C4978E031FD3ABEB775EF2686E\",\n          \"hash\": \"21190F133B6863E49D49DBEFE010061DEEA60274F567E305AB9F8951AA53E985\",\n          \"metaData\": {\n            \"AffectedNodes\": [\n              {\n                \"CreatedNode\": {\n                  \"LedgerEntryType\": \"Offer\",\n                  \"LedgerIndex\": \"715DE1907F62617DB90A51A92304C93877E22C89AD8A6B752448CFEFD9A598EA\",\n                  \"NewFields\": {\n                    \"Account\": \"rfW24fjUr12xJ9j76MdFU5tPTgZem96G3P\",\n                    \"BookDirectory\": \"A9E886E5C8C41877D2C2F961F29BED09B0773C99A14969955303B6919B7B1DA7\",\n                    \"Expiration\": 603501664,\n                    \"Sequence\": 175156,\n                    \"TakerGets\": {\n                      \"currency\": \"EUR\",\n                      \"issuer\": \"rhqZLBimNU78SGmA9WzcEdtn9ZaG8sqV5x\",\n                      \"value\": \"95.679\"\n                    },\n                    \"TakerPays\": {\n                      \"currency\": \"ETH\",\n                      \"issuer\": \"rLAKy3kN7um61z27iYgUiEnhM29FxXMq1F\",\n                      \"value\": \"1\"\n                    }\n                  }\n                }\n              },\n              {\n                \"DeletedNode\": {\n                  \"FinalFields\": {\n                    \"Account\": \"rfW24fjUr12xJ9j76MdFU5tPTgZem96G3P\",\n                    \"BookDirectory\": \"A9E886E5C8C41877D2C2F961F29BED09B0773C99A14969955303B8454CB4C64F\",\n                    \"BookNode\": \"0\",\n                    \"Expiration\": 603501053,\n                    \"Flags\": 0,\n                    \"OwnerNode\": \"0\",\n                    \"PreviousTxnID\": \"51C42CDB709E43D568E2DF0585B83334040B2982401B7E42B9B7DE3D29321A49\",\n                    \"PreviousTxnLgrSeq\": 45135991,\n                    \"Sequence\": 175141,\n                    \"TakerGets\": {\n                      \"currency\": \"EUR\",\n                      \"issuer\": \"rhqZLBimNU78SGmA9WzcEdtn9ZaG8sqV5x\",\n                      \"value\": \"95.508\"\n                    },\n                    \"TakerPays\": {\n                      \"currency\": \"ETH\",\n                      \"issuer\": \"rLAKy3kN7um61z27iYgUiEnhM29FxXMq1F\",\n                      \"value\": \"1\"\n                    }\n                  },\n                  \"LedgerEntryType\": \"Offer\",\n                  \"LedgerIndex\": \"7BE25A4CEDEC42FD043B2C00626DAFBA99F65ADFC83ACDB3824B11F8ACD0164F\"\n                }\n              },\n              {\n                \"ModifiedNode\": {\n                  \"FinalFields\": {\n                    \"Account\": \"rfW24fjUr12xJ9j76MdFU5tPTgZem96G3P\",\n                    \"Balance\": \"969944287\",\n                    \"Flags\": 0,\n                    \"OwnerCount\": 21,\n                    \"Sequence\": 175157\n                  },\n                  \"LedgerEntryType\": \"AccountRoot\",\n                  \"LedgerIndex\": \"9610754E8ADBAAC9B4B72C8B7608C627F7B34087CFE08FD3BA12D56AE85FD0E7\",\n                  \"PreviousFields\": {\n                    \"Balance\": \"969944299\",\n                    \"Sequence\": 175156\n                  },\n                  \"PreviousTxnID\": \"D68782DDB079F758FB2698E3244954AD68C1719C278B4741337B53B8DD8FCC32\",\n                  \"PreviousTxnLgrSeq\": 45136161\n                }\n              },\n              {\n                \"CreatedNode\": {\n                  \"LedgerEntryType\": \"DirectoryNode\",\n                  \"LedgerIndex\": \"A9E886E5C8C41877D2C2F961F29BED09B0773C99A14969955303B6919B7B1DA7\",\n                  \"NewFields\": {\n                    \"ExchangeRate\": \"5303b6919b7b1da7\",\n                    \"RootIndex\": \"A9E886E5C8C41877D2C2F961F29BED09B0773C99A14969955303B6919B7B1DA7\",\n                    \"TakerGetsCurrency\": \"0000000000000000000000004555520000000000\",\n                    \"TakerGetsIssuer\": \"2A1754F8CF59F2EFC5C04D62B9EDA8024A7B9ED4\",\n                    \"TakerPaysCurrency\": \"0000000000000000000000004554480000000000\",\n                    \"TakerPaysIssuer\": \"DAB0AF7434545A03B965685E852E2E156B74B915\"\n                  }\n                }\n              },\n              {\n                \"DeletedNode\": {\n                  \"FinalFields\": {\n                    \"ExchangeRate\": \"5303b8454cb4c64f\",\n                    \"Flags\": 0,\n                    \"RootIndex\": \"A9E886E5C8C41877D2C2F961F29BED09B0773C99A14969955303B8454CB4C64F\",\n                    \"TakerGetsCurrency\": \"0000000000000000000000004555520000000000\",\n                    \"TakerGetsIssuer\": \"2A1754F8CF59F2EFC5C04D62B9EDA8024A7B9ED4\",\n                    \"TakerPaysCurrency\": \"0000000000000000000000004554480000000000\",\n                    \"TakerPaysIssuer\": \"DAB0AF7434545A03B965685E852E2E156B74B915\"\n                  },\n                  \"LedgerEntryType\": \"DirectoryNode\",\n                  \"LedgerIndex\": \"A9E886E5C8C41877D2C2F961F29BED09B0773C99A14969955303B8454CB4C64F\"\n                }\n              },\n              {\n                \"ModifiedNode\": {\n                  \"FinalFields\": {\n                    \"Flags\": 0,\n                    \"IndexNext\": \"0\",\n                    \"IndexPrevious\": \"0\",\n                    \"Owner\": \"rfW24fjUr12xJ9j76MdFU5tPTgZem96G3P\",\n                    \"RootIndex\": \"EA52B04690BA476B6934255C1EB4532C923D03D514388105181CCFF4F9E5DEC1\"\n                  },\n                  \"LedgerEntryType\": \"DirectoryNode\",\n                  \"LedgerIndex\": \"EA52B04690BA476B6934255C1EB4532C923D03D514388105181CCFF4F9E5DEC1\"\n                }\n              }\n            ],\n            \"TransactionIndex\": 7,\n            \"TransactionResult\": \"tesSUCCESS\"\n          }\n        },\n        {\n          \"Account\": \"rNXQc5mT7b336bFTkenFTPiF5TYuyrJ3ZH\",\n          \"Amount\": {\n            \"currency\": \"XCN\",\n            \"issuer\": \"r8HgVGenRTAiNSM5iqt9PX2D2EczFZhZr\",\n            \"value\": \"4900\"\n          },\n          \"Destination\": \"rNXQc5mT7b336bFTkenFTPiF5TYuyrJ3ZH\",\n          \"Fee\": \"11\",\n          \"Flags\": 2147942400,\n          \"LastLedgerSequence\": 45136167,\n          \"Paths\": [\n            [\n              {\n                \"currency\": \"CNY\",\n                \"issuer\": \"rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y\",\n                \"type\": 48\n              },\n              {\n                \"currency\": \"CNY\",\n                \"issuer\": \"razqQKzJRdB4UxFPWf5NEpEG3WMkmwgcXA\",\n                \"type\": 48\n              },\n              {\n                \"currency\": \"XRP\",\n                \"type\": 16\n              },\n              {\n                \"currency\": \"XCN\",\n                \"issuer\": \"r8HgVGenRTAiNSM5iqt9PX2D2EczFZhZr\",\n                \"type\": 48\n              }\n            ],\n            [\n              {\n                \"currency\": \"CNY\",\n                \"issuer\": \"razqQKzJRdB4UxFPWf5NEpEG3WMkmwgcXA\",\n                \"type\": 48\n              },\n              {\n                \"currency\": \"CNY\",\n                \"issuer\": \"rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y\",\n                \"type\": 48\n              },\n              {\n                \"currency\": \"XRP\",\n                \"type\": 16\n              },\n              {\n                \"currency\": \"XCN\",\n                \"issuer\": \"r8HgVGenRTAiNSM5iqt9PX2D2EczFZhZr\",\n                \"type\": 48\n              }\n            ],\n            [\n              {\n                \"currency\": \"USD\",\n                \"issuer\": \"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B\",\n                \"type\": 48\n              },\n              {\n                \"currency\": \"USD\",\n                \"issuer\": \"rhub8VRN55s94qWKDv6jmDy1pUykJzF3wq\",\n                \"type\": 48\n              },\n              {\n                \"currency\": \"XRP\",\n                \"type\": 16\n              },\n              {\n                \"currency\": \"XCN\",\n                \"issuer\": \"r8HgVGenRTAiNSM5iqt9PX2D2EczFZhZr\",\n                \"type\": 48\n              }\n            ],\n            [\n              {\n                \"currency\": \"USD\",\n                \"issuer\": \"rhub8VRN55s94qWKDv6jmDy1pUykJzF3wq\",\n                \"type\": 48\n              },\n              {\n                \"currency\": \"USD\",\n                \"issuer\": \"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B\",\n                \"type\": 48\n              },\n              {\n                \"currency\": \"XRP\",\n                \"type\": 16\n              },\n              {\n                \"currency\": \"XCN\",\n                \"issuer\": \"r8HgVGenRTAiNSM5iqt9PX2D2EczFZhZr\",\n                \"type\": 48\n              }\n            ],\n            [\n              {\n                \"currency\": \"EUR\",\n                \"issuer\": \"rhub8VRN55s94qWKDv6jmDy1pUykJzF3wq\",\n                \"type\": 48\n              },\n              {\n                \"currency\": \"USD\",\n                \"issuer\": \"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B\",\n                \"type\": 48\n              },\n              {\n                \"currency\": \"XRP\",\n                \"type\": 16\n              },\n              {\n                \"currency\": \"XCN\",\n                \"issuer\": \"r8HgVGenRTAiNSM5iqt9PX2D2EczFZhZr\",\n                \"type\": 48\n              }\n            ],\n            [\n              {\n                \"currency\": \"USD\",\n                \"issuer\": \"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B\",\n                \"type\": 48\n              },\n              {\n                \"currency\": \"EUR\",\n                \"issuer\": \"rhub8VRN55s94qWKDv6jmDy1pUykJzF3wq\",\n                \"type\": 48\n              },\n              {\n                \"currency\": \"XRP\",\n                \"type\": 16\n              },\n              {\n                \"currency\": \"XCN\",\n                \"issuer\": \"r8HgVGenRTAiNSM5iqt9PX2D2EczFZhZr\",\n                \"type\": 48\n              }\n            ]\n          ],\n          \"SendMax\": \"4900000000\",\n          \"Sequence\": 1180046,\n          \"SigningPubKey\": \"031C4903CDF031E9A08828BE0DE270DF4F74E4BA87B704ED4599810EEF3576BAD6\",\n          \"TransactionType\": \"Payment\",\n          \"TxnSignature\": \"3045022100D0549D9202382D8A3EAD28845C0ECAB1D4EC81034B9F452BB2DCDEA06FA7BB2D022071B35AD1E1C07C59449D82E0D4278320F7F7CB4264B8DE9276B465E6D77F6D99\",\n          \"hash\": \"1172404FF3279BFA384FDF9EDD1934661FFC4A79F7FCDA652D20D377838C2917\",\n          \"metaData\": {\n            \"AffectedNodes\": [\n              {\n                \"ModifiedNode\": {\n                  \"FinalFields\": {\n                    \"Account\": \"rNXQc5mT7b336bFTkenFTPiF5TYuyrJ3ZH\",\n                    \"Balance\": \"4915628372\",\n                    \"Flags\": 0,\n                    \"OwnerCount\": 3,\n                    \"Sequence\": 1180047\n                  },\n                  \"LedgerEntryType\": \"AccountRoot\",\n                  \"LedgerIndex\": \"2563E04A259079D5CF1FDE758CD832B47AF3238E530AB31649CCFFD8E1945AC2\",\n                  \"PreviousFields\": {\n                    \"Balance\": \"4915628383\",\n                    \"Sequence\": 1180046\n                  },\n                  \"PreviousTxnID\": \"FEF2771EDDB76FD30C6C0497DB08DFA4F2F8EBC6BD6A15EA5D94FBE000078B6A\",\n                  \"PreviousTxnLgrSeq\": 45136163\n                }\n              }\n            ],\n            \"TransactionIndex\": 8,\n            \"TransactionResult\": \"tecPATH_DRY\"\n          }\n        },\n        {\n          \"Account\": \"rKLpjpCoXgLQQYQyj13zgay73rsgmzNH13\",\n          \"Amount\": {\n            \"currency\": \"XCN\",\n            \"issuer\": \"rPFLkxQk6xUGdGYEykqe7PR25Gr7mLHDc8\",\n            \"value\": \"10000\"\n          },\n          \"Destination\": \"rKLpjpCoXgLQQYQyj13zgay73rsgmzNH13\",\n          \"Fee\": \"11\",\n          \"Flags\": 2147942400,\n          \"LastLedgerSequence\": 45136165,\n          \"Paths\": [\n            [\n              {\n                \"currency\": \"CNY\",\n                \"issuer\": \"rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y\",\n                \"type\": 48\n              },\n              {\n                \"currency\": \"USD\",\n                \"issuer\": \"rhub8VRN55s94qWKDv6jmDy1pUykJzF3wq\",\n                \"type\": 48\n              },\n              {\n                \"currency\": \"XRP\",\n                \"type\": 16\n              },\n              {\n                \"currency\": \"XCN\",\n                \"issuer\": \"rPFLkxQk6xUGdGYEykqe7PR25Gr7mLHDc8\",\n                \"type\": 48\n              }\n            ],\n            [\n              {\n                \"currency\": \"USD\",\n                \"issuer\": \"rhub8VRN55s94qWKDv6jmDy1pUykJzF3wq\",\n                \"type\": 48\n              },\n              {\n                \"currency\": \"CNY\",\n                \"issuer\": \"rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y\",\n                \"type\": 48\n              },\n              {\n                \"currency\": \"XRP\",\n                \"type\": 16\n              },\n              {\n                \"currency\": \"XCN\",\n                \"issuer\": \"rPFLkxQk6xUGdGYEykqe7PR25Gr7mLHDc8\",\n                \"type\": 48\n              }\n            ],\n            [\n              {\n                \"currency\": \"CNY\",\n                \"issuer\": \"rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y\",\n                \"type\": 48\n              },\n              {\n                \"currency\": \"CNY\",\n                \"issuer\": \"razqQKzJRdB4UxFPWf5NEpEG3WMkmwgcXA\",\n                \"type\": 48\n              },\n              {\n                \"currency\": \"XRP\",\n                \"type\": 16\n              },\n              {\n                \"currency\": \"XCN\",\n                \"issuer\": \"rPFLkxQk6xUGdGYEykqe7PR25Gr7mLHDc8\",\n                \"type\": 48\n              }\n            ],\n            [\n              {\n                \"currency\": \"CNY\",\n                \"issuer\": \"razqQKzJRdB4UxFPWf5NEpEG3WMkmwgcXA\",\n                \"type\": 48\n              },\n              {\n                \"currency\": \"CNY\",\n                \"issuer\": \"rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y\",\n                \"type\": 48\n              },\n              {\n                \"currency\": \"XRP\",\n                \"type\": 16\n              },\n              {\n                \"currency\": \"XCN\",\n                \"issuer\": \"rPFLkxQk6xUGdGYEykqe7PR25Gr7mLHDc8\",\n                \"type\": 48\n              }\n            ],\n            [\n              {\n                \"currency\": \"CNY\",\n                \"issuer\": \"rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y\",\n                \"type\": 48\n              },\n              {\n                \"currency\": \"EUR\",\n                \"issuer\": \"rhub8VRN55s94qWKDv6jmDy1pUykJzF3wq\",\n                \"type\": 48\n              },\n              {\n                \"currency\": \"XRP\",\n                \"type\": 16\n              },\n              {\n                \"currency\": \"XCN\",\n                \"issuer\": \"rPFLkxQk6xUGdGYEykqe7PR25Gr7mLHDc8\",\n                \"type\": 48\n              }\n            ],\n            [\n              {\n                \"currency\": \"EUR\",\n                \"issuer\": \"rhub8VRN55s94qWKDv6jmDy1pUykJzF3wq\",\n                \"type\": 48\n              },\n              {\n                \"currency\": \"CNY\",\n                \"issuer\": \"rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y\",\n                \"type\": 48\n              },\n              {\n                \"currency\": \"XRP\",\n                \"type\": 16\n              },\n              {\n                \"currency\": \"XCN\",\n                \"issuer\": \"rPFLkxQk6xUGdGYEykqe7PR25Gr7mLHDc8\",\n                \"type\": 48\n              }\n            ]\n          ],\n          \"SendMax\": \"10000000000\",\n          \"Sequence\": 1305546,\n          \"SigningPubKey\": \"030AC4F2BA6E1FF86BEB234B639918DAFDF0675032AE264D2B39641503822373FE\",\n          \"TransactionType\": \"Payment\",\n          \"TxnSignature\": \"3045022100818192D12E0300EC1B55693FFD2A4D1B7516271F6B348739A67D6ACE6E793CFA02200CACCC31B98A4C93395AE80B685FBBCC5FFCE3E7F4D4F43EAF26527D598E7973\",\n          \"hash\": \"15DB47164E8EB56C39D402DC67A46FFC2F1EE291A17906F8A18C0C2F746B9E9A\",\n          \"metaData\": {\n            \"AffectedNodes\": [\n              {\n                \"ModifiedNode\": {\n                  \"FinalFields\": {\n                    \"Account\": \"rKLpjpCoXgLQQYQyj13zgay73rsgmzNH13\",\n                    \"Balance\": \"1348797892\",\n                    \"Flags\": 0,\n                    \"OwnerCount\": 5,\n                    \"Sequence\": 1305547\n                  },\n                  \"LedgerEntryType\": \"AccountRoot\",\n                  \"LedgerIndex\": \"792BA4E4659C27CF3B63F96B34F158748B081CF532F6746A1E3EBD07ACBA1A0E\",\n                  \"PreviousFields\": {\n                    \"Balance\": \"1348797903\",\n                    \"Sequence\": 1305546\n                  },\n                  \"PreviousTxnID\": \"EEBA13BCE70F77431BEBF2C67548C631229284D6EF70E4DCC251B6928DAC3787\",\n                  \"PreviousTxnLgrSeq\": 45136163\n                }\n              }\n            ],\n            \"TransactionIndex\": 9,\n            \"TransactionResult\": \"tecPATH_DRY\"\n          }\n        },\n        {\n          \"Account\": \"rsE7AtkwCsXo8zvRu5VHEBEbARcEqUeRnM\",\n          \"Amount\": {\n            \"currency\": \"WCN\",\n            \"issuer\": \"r8HgVGenRTAiNSM5iqt9PX2D2EczFZhZr\",\n            \"value\": \"1025\"\n          },\n          \"Destination\": \"rsE7AtkwCsXo8zvRu5VHEBEbARcEqUeRnM\",\n          \"Fee\": \"11\",\n          \"Flags\": 2147942400,\n          \"LastLedgerSequence\": 45136167,\n          \"Paths\": [\n            [\n              {\n                \"currency\": \"EUR\",\n                \"issuer\": \"rhub8VRN55s94qWKDv6jmDy1pUykJzF3wq\",\n                \"type\": 48\n              },\n              {\n                \"currency\": \"USD\",\n                \"issuer\": \"rhub8VRN55s94qWKDv6jmDy1pUykJzF3wq\",\n                \"type\": 48\n              },\n              {\n                \"currency\": \"XRP\",\n                \"type\": 16\n              },\n              {\n                \"currency\": \"WCN\",\n                \"issuer\": \"r8HgVGenRTAiNSM5iqt9PX2D2EczFZhZr\",\n                \"type\": 48\n              }\n            ],\n            [\n              {\n                \"currency\": \"USD\",\n                \"issuer\": \"rhub8VRN55s94qWKDv6jmDy1pUykJzF3wq\",\n                \"type\": 48\n              },\n              {\n                \"currency\": \"EUR\",\n                \"issuer\": \"rhub8VRN55s94qWKDv6jmDy1pUykJzF3wq\",\n                \"type\": 48\n              },\n              {\n                \"currency\": \"XRP\",\n                \"type\": 16\n              },\n              {\n                \"currency\": \"WCN\",\n                \"issuer\": \"r8HgVGenRTAiNSM5iqt9PX2D2EczFZhZr\",\n                \"type\": 48\n              }\n            ],\n            [\n              {\n                \"currency\": \"EUR\",\n                \"issuer\": \"rhub8VRN55s94qWKDv6jmDy1pUykJzF3wq\",\n                \"type\": 48\n              },\n              {\n                \"currency\": \"CNY\",\n                \"issuer\": \"razqQKzJRdB4UxFPWf5NEpEG3WMkmwgcXA\",\n                \"type\": 48\n              },\n              {\n                \"currency\": \"XRP\",\n                \"type\": 16\n              },\n              {\n                \"currency\": \"WCN\",\n                \"issuer\": \"r8HgVGenRTAiNSM5iqt9PX2D2EczFZhZr\",\n                \"type\": 48\n              }\n            ],\n            [\n              {\n                \"currency\": \"CNY\",\n                \"issuer\": \"razqQKzJRdB4UxFPWf5NEpEG3WMkmwgcXA\",\n                \"type\": 48\n              },\n              {\n                \"currency\": \"EUR\",\n                \"issuer\": \"rhub8VRN55s94qWKDv6jmDy1pUykJzF3wq\",\n                \"type\": 48\n              },\n              {\n                \"currency\": \"XRP\",\n                \"type\": 16\n              },\n              {\n                \"currency\": \"WCN\",\n                \"issuer\": \"r8HgVGenRTAiNSM5iqt9PX2D2EczFZhZr\",\n                \"type\": 48\n              }\n            ],\n            [\n              {\n                \"currency\": \"BTC\",\n                \"issuer\": \"rchGBxcD1A1C2tdxF6papQYZ8kjRKMYcL\",\n                \"type\": 48\n              },\n              {\n                \"currency\": \"USD\",\n                \"issuer\": \"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B\",\n                \"type\": 48\n              },\n              {\n                \"currency\": \"XRP\",\n                \"type\": 16\n              },\n              {\n                \"currency\": \"WCN\",\n                \"issuer\": \"r8HgVGenRTAiNSM5iqt9PX2D2EczFZhZr\",\n                \"type\": 48\n              }\n            ],\n            [\n              {\n                \"currency\": \"USD\",\n                \"issuer\": \"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B\",\n                \"type\": 48\n              },\n              {\n                \"currency\": \"BTC\",\n                \"issuer\": \"rchGBxcD1A1C2tdxF6papQYZ8kjRKMYcL\",\n                \"type\": 48\n              },\n              {\n                \"currency\": \"XRP\",\n                \"type\": 16\n              },\n              {\n                \"currency\": \"WCN\",\n                \"issuer\": \"r8HgVGenRTAiNSM5iqt9PX2D2EczFZhZr\",\n                \"type\": 48\n              }\n            ]\n          ],\n          \"SendMax\": \"1025000000\",\n          \"Sequence\": 813427,\n          \"SigningPubKey\": \"029C3961631E7BCEC8DB33E097131A9EAFA08DB8DC1F4DCEB7A168294D0AE5E809\",\n          \"TransactionType\": \"Payment\",\n          \"TxnSignature\": \"3045022100F2308E6BE5C6415A8255706F83441B72990A43DE46A6B90C4EE46CF610C080190220065D7244EFBF584100C853E336440CE8E94A7CCE582E1662188D3D3B2A2356D8\",\n          \"hash\": \"DF9E9FA9CC0E3C7E715BF7CB69A79ABDBE2F7E2C59C22233CF559D700953D6A3\",\n          \"metaData\": {\n            \"AffectedNodes\": [\n              {\n                \"ModifiedNode\": {\n                  \"FinalFields\": {\n                    \"Account\": \"rsE7AtkwCsXo8zvRu5VHEBEbARcEqUeRnM\",\n                    \"Balance\": \"1024302865\",\n                    \"Flags\": 0,\n                    \"OwnerCount\": 2,\n                    \"Sequence\": 813428\n                  },\n                  \"LedgerEntryType\": \"AccountRoot\",\n                  \"LedgerIndex\": \"286307A9B787E776DA48473CE23C98C117E5B73C6B2A7C2148D785374A66996E\",\n                  \"PreviousFields\": {\n                    \"Balance\": \"1024302876\",\n                    \"Sequence\": 813427\n                  },\n                  \"PreviousTxnID\": \"738546B00D783AA264DDD6E3DC222AACD6FF1B2E80C91D217D7E33FE9D6EA881\",\n                  \"PreviousTxnLgrSeq\": 45136163\n                }\n              }\n            ],\n            \"TransactionIndex\": 10,\n            \"TransactionResult\": \"tecPATH_DRY\"\n          }\n        },\n        {\n          \"Account\": \"r9x5PHDiwuvbpYB3uvGAqEUVV5wxHayQEx\",\n          \"Amount\": {\n            \"currency\": \"YCN\",\n            \"issuer\": \"r8HgVGenRTAiNSM5iqt9PX2D2EczFZhZr\",\n            \"value\": \"2140\"\n          },\n          \"Destination\": \"r9x5PHDiwuvbpYB3uvGAqEUVV5wxHayQEx\",\n          \"Fee\": \"11\",\n          \"Flags\": 2147942400,\n          \"LastLedgerSequence\": 45136166,\n          \"Paths\": [\n            [\n              {\n                \"currency\": \"EUR\",\n                \"issuer\": \"rhub8VRN55s94qWKDv6jmDy1pUykJzF3wq\",\n                \"type\": 48\n              },\n              {\n                \"currency\": \"CNY\",\n                \"issuer\": \"rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y\",\n                \"type\": 48\n              },\n              {\n                \"currency\": \"XRP\",\n                \"type\": 16\n              },\n              {\n                \"currency\": \"YCN\",\n                \"issuer\": \"r8HgVGenRTAiNSM5iqt9PX2D2EczFZhZr\",\n                \"type\": 48\n              }\n            ],\n            [\n              {\n                \"currency\": \"CNY\",\n                \"issuer\": \"rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y\",\n                \"type\": 48\n              },\n              {\n                \"currency\": \"EUR\",\n                \"issuer\": \"rhub8VRN55s94qWKDv6jmDy1pUykJzF3wq\",\n                \"type\": 48\n              },\n              {\n                \"currency\": \"XRP\",\n                \"type\": 16\n              },\n              {\n                \"currency\": \"YCN\",\n                \"issuer\": \"r8HgVGenRTAiNSM5iqt9PX2D2EczFZhZr\",\n                \"type\": 48\n              }\n            ],\n            [\n              {\n                \"currency\": \"BTC\",\n                \"issuer\": \"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B\",\n                \"type\": 48\n              },\n              {\n                \"currency\": \"BTC\",\n                \"issuer\": \"rchGBxcD1A1C2tdxF6papQYZ8kjRKMYcL\",\n                \"type\": 48\n              },\n              {\n                \"currency\": \"XRP\",\n                \"type\": 16\n              },\n              {\n                \"currency\": \"YCN\",\n                \"issuer\": \"r8HgVGenRTAiNSM5iqt9PX2D2EczFZhZr\",\n                \"type\": 48\n              }\n            ],\n            [\n              {\n                \"currency\": \"BTC\",\n                \"issuer\": \"rchGBxcD1A1C2tdxF6papQYZ8kjRKMYcL\",\n                \"type\": 48\n              },\n              {\n                \"currency\": \"BTC\",\n                \"issuer\": \"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B\",\n                \"type\": 48\n              },\n              {\n                \"currency\": \"XRP\",\n                \"type\": 16\n              },\n              {\n                \"currency\": \"YCN\",\n                \"issuer\": \"r8HgVGenRTAiNSM5iqt9PX2D2EczFZhZr\",\n                \"type\": 48\n              }\n            ],\n            [\n              {\n                \"currency\": \"CNY\",\n                \"issuer\": \"rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y\",\n                \"type\": 48\n              },\n              {\n                \"currency\": \"USD\",\n                \"issuer\": \"rhub8VRN55s94qWKDv6jmDy1pUykJzF3wq\",\n                \"type\": 48\n              },\n              {\n                \"currency\": \"XRP\",\n                \"type\": 16\n              },\n              {\n                \"currency\": \"YCN\",\n                \"issuer\": \"r8HgVGenRTAiNSM5iqt9PX2D2EczFZhZr\",\n                \"type\": 48\n              }\n            ],\n            [\n              {\n                \"currency\": \"USD\",\n                \"issuer\": \"rhub8VRN55s94qWKDv6jmDy1pUykJzF3wq\",\n                \"type\": 48\n              },\n              {\n                \"currency\": \"CNY\",\n                \"issuer\": \"rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y\",\n                \"type\": 48\n              },\n              {\n                \"currency\": \"XRP\",\n                \"type\": 16\n              },\n              {\n                \"currency\": \"YCN\",\n                \"issuer\": \"r8HgVGenRTAiNSM5iqt9PX2D2EczFZhZr\",\n                \"type\": 48\n              }\n            ]\n          ],\n          \"SendMax\": \"2140000000\",\n          \"Sequence\": 815442,\n          \"SigningPubKey\": \"038C165E0B29398F710353498F310ACB81AE338A8C7A76433CDD0B0DA3263A32BF\",\n          \"TransactionType\": \"Payment\",\n          \"TxnSignature\": \"3045022100ECDBF50246816FD7E7EEA72B4ED5F7BD205DB3245D404AE2A2580E11163A506202207DD6371FB6FFBA999A7D3BC654EC18A0D3CB73C342FAFE725A76EF824F69DC2E\",\n          \"hash\": \"3B42B88573F98928704101DF471187B63524E9EB8336CD495F131978DBA76E99\",\n          \"metaData\": {\n            \"AffectedNodes\": [\n              {\n                \"ModifiedNode\": {\n                  \"FinalFields\": {\n                    \"Account\": \"r9x5PHDiwuvbpYB3uvGAqEUVV5wxHayQEx\",\n                    \"Balance\": \"2146355335\",\n                    \"Flags\": 0,\n                    \"OwnerCount\": 2,\n                    \"Sequence\": 815443\n                  },\n                  \"LedgerEntryType\": \"AccountRoot\",\n                  \"LedgerIndex\": \"A5A15466F20EFCB711175AF99121BF5B9FE450B02E630C9B73800036A537404C\",\n                  \"PreviousFields\": {\n                    \"Balance\": \"2146355346\",\n                    \"Sequence\": 815442\n                  },\n                  \"PreviousTxnID\": \"9042D34E7B041AF2DE0FC29FCD8FC6111255A73F9BD0285681FFEA20550C6AF9\",\n                  \"PreviousTxnLgrSeq\": 45136163\n                }\n              }\n            ],\n            \"TransactionIndex\": 11,\n            \"TransactionResult\": \"tecPATH_DRY\"\n          }\n        },\n        {\n          \"Account\": \"r96HghtYDxvpHNaru1xbCQPcsHZwqiaENE\",\n          \"Amount\": {\n            \"currency\": \"CNT\",\n            \"issuer\": \"rPFLkxQk6xUGdGYEykqe7PR25Gr7mLHDc8\",\n            \"value\": \"10000\"\n          },\n          \"Destination\": \"r96HghtYDxvpHNaru1xbCQPcsHZwqiaENE\",\n          \"Fee\": \"11\",\n          \"Flags\": 2147942400,\n          \"LastLedgerSequence\": 45136165,\n          \"Paths\": [\n            [\n              {\n                \"currency\": \"BTC\",\n                \"issuer\": \"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B\",\n                \"type\": 48\n              },\n              {\n                \"currency\": \"BTC\",\n                \"issuer\": \"rchGBxcD1A1C2tdxF6papQYZ8kjRKMYcL\",\n                \"type\": 48\n              },\n              {\n                \"currency\": \"XRP\",\n                \"type\": 16\n              },\n              {\n                \"currency\": \"CNT\",\n                \"issuer\": \"rPFLkxQk6xUGdGYEykqe7PR25Gr7mLHDc8\",\n                \"type\": 48\n              }\n            ],\n            [\n              {\n                \"currency\": \"BTC\",\n                \"issuer\": \"rchGBxcD1A1C2tdxF6papQYZ8kjRKMYcL\",\n                \"type\": 48\n              },\n              {\n                \"currency\": \"BTC\",\n                \"issuer\": \"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B\",\n                \"type\": 48\n              },\n              {\n                \"currency\": \"XRP\",\n                \"type\": 16\n              },\n              {\n                \"currency\": \"CNT\",\n                \"issuer\": \"rPFLkxQk6xUGdGYEykqe7PR25Gr7mLHDc8\",\n                \"type\": 48\n              }\n            ],\n            [\n              {\n                \"currency\": \"BTC\",\n                \"issuer\": \"rchGBxcD1A1C2tdxF6papQYZ8kjRKMYcL\",\n                \"type\": 48\n              },\n              {\n                \"currency\": \"ETH\",\n                \"issuer\": \"rcA8X3TVMST1n3CJeAdGk1RdRCHii7N2h\",\n                \"type\": 48\n              },\n              {\n                \"currency\": \"XRP\",\n                \"type\": 16\n              },\n              {\n                \"currency\": \"CNT\",\n                \"issuer\": \"rPFLkxQk6xUGdGYEykqe7PR25Gr7mLHDc8\",\n                \"type\": 48\n              }\n            ],\n            [\n              {\n                \"currency\": \"ETH\",\n                \"issuer\": \"rcA8X3TVMST1n3CJeAdGk1RdRCHii7N2h\",\n                \"type\": 48\n              },\n              {\n                \"currency\": \"BTC\",\n                \"issuer\": \"rchGBxcD1A1C2tdxF6papQYZ8kjRKMYcL\",\n                \"type\": 48\n              },\n              {\n                \"currency\": \"XRP\",\n                \"type\": 16\n              },\n              {\n                \"currency\": \"CNT\",\n                \"issuer\": \"rPFLkxQk6xUGdGYEykqe7PR25Gr7mLHDc8\",\n                \"type\": 48\n              }\n            ],\n            [\n              {\n                \"currency\": \"USD\",\n                \"issuer\": \"rhub8VRN55s94qWKDv6jmDy1pUykJzF3wq\",\n                \"type\": 48\n              },\n              {\n                \"currency\": \"EUR\",\n                \"issuer\": \"rhub8VRN55s94qWKDv6jmDy1pUykJzF3wq\",\n                \"type\": 48\n              },\n              {\n                \"currency\": \"XRP\",\n                \"type\": 16\n              },\n              {\n                \"currency\": \"CNT\",\n                \"issuer\": \"rPFLkxQk6xUGdGYEykqe7PR25Gr7mLHDc8\",\n                \"type\": 48\n              }\n            ],\n            [\n              {\n                \"currency\": \"EUR\",\n                \"issuer\": \"rhub8VRN55s94qWKDv6jmDy1pUykJzF3wq\",\n                \"type\": 48\n              },\n              {\n                \"currency\": \"USD\",\n                \"issuer\": \"rhub8VRN55s94qWKDv6jmDy1pUykJzF3wq\",\n                \"type\": 48\n              },\n              {\n                \"currency\": \"XRP\",\n                \"type\": 16\n              },\n              {\n                \"currency\": \"CNT\",\n                \"issuer\": \"rPFLkxQk6xUGdGYEykqe7PR25Gr7mLHDc8\",\n                \"type\": 48\n              }\n            ]\n          ],\n          \"SendMax\": \"10000000000\",\n          \"Sequence\": 983802,\n          \"SigningPubKey\": \"03E45D5E88ABB50151F5F00A02B2A7B66CB6CEC8E55304C4BF7D0B27BB59A14800\",\n          \"TransactionType\": \"Payment\",\n          \"TxnSignature\": \"304402207438163F7C0C1F5F3B80A8B401B5CD5023A0F8123DC9940B81319E4C79137CDC022044F3510499AD16EB3AECBD3B8C397F3EDD73DFD7F28BBD9FAEDC2CE6C2173E38\",\n          \"hash\": \"BE738E09DEC4ED159A74E62B1BAA9667C1BF512EF6B653D11F81466ED3DAB441\",\n          \"metaData\": {\n            \"AffectedNodes\": [\n              {\n                \"ModifiedNode\": {\n                  \"FinalFields\": {\n                    \"Account\": \"r96HghtYDxvpHNaru1xbCQPcsHZwqiaENE\",\n                    \"Balance\": \"1014727728\",\n                    \"Flags\": 0,\n                    \"OwnerCount\": 2,\n                    \"Sequence\": 983803\n                  },\n                  \"LedgerEntryType\": \"AccountRoot\",\n                  \"LedgerIndex\": \"FA4C6CE33F8419ED2138BDE105C0FC75DFCEB56DAD26A0EB298F3BB3E3267234\",\n                  \"PreviousFields\": {\n                    \"Balance\": \"1014727739\",\n                    \"Sequence\": 983802\n                  },\n                  \"PreviousTxnID\": \"A6FA28E450E7FC2F32199E7AF94B99CD8111B80687EFFBDB34313C913F149A78\",\n                  \"PreviousTxnLgrSeq\": 45136163\n                }\n              }\n            ],\n            \"TransactionIndex\": 12,\n            \"TransactionResult\": \"tecPATH_DRY\"\n          }\n        },\n        {\n          \"Account\": \"rf3B8KcYqKMgybB2ms9KcLhcB8bWX1UDov\",\n          \"Amount\": {\n            \"currency\": \"ZCN\",\n            \"issuer\": \"r8HgVGenRTAiNSM5iqt9PX2D2EczFZhZr\",\n            \"value\": \"2870\"\n          },\n          \"Destination\": \"rf3B8KcYqKMgybB2ms9KcLhcB8bWX1UDov\",\n          \"Fee\": \"11\",\n          \"Flags\": 2147942400,\n          \"LastLedgerSequence\": 45136166,\n          \"Paths\": [\n            [\n              {\n                \"currency\": \"CNY\",\n                \"issuer\": \"rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y\",\n                \"type\": 48\n              },\n              {\n                \"currency\": \"XLM\",\n                \"issuer\": \"rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y\",\n                \"type\": 48\n              },\n              {\n                \"currency\": \"XRP\",\n                \"type\": 16\n              },\n              {\n                \"currency\": \"ZCN\",\n                \"issuer\": \"r8HgVGenRTAiNSM5iqt9PX2D2EczFZhZr\",\n                \"type\": 48\n              }\n            ],\n            [\n              {\n                \"currency\": \"XLM\",\n                \"issuer\": \"rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y\",\n                \"type\": 48\n              },\n              {\n                \"currency\": \"CNY\",\n                \"issuer\": \"rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y\",\n                \"type\": 48\n              },\n              {\n                \"currency\": \"XRP\",\n                \"type\": 16\n              },\n              {\n                \"currency\": \"ZCN\",\n                \"issuer\": \"r8HgVGenRTAiNSM5iqt9PX2D2EczFZhZr\",\n                \"type\": 48\n              }\n            ],\n            [\n              {\n                \"currency\": \"CNY\",\n                \"issuer\": \"rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y\",\n                \"type\": 48\n              },\n              {\n                \"currency\": \"USD\",\n                \"issuer\": \"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B\",\n                \"type\": 48\n              },\n              {\n                \"currency\": \"XRP\",\n                \"type\": 16\n              },\n              {\n                \"currency\": \"ZCN\",\n                \"issuer\": \"r8HgVGenRTAiNSM5iqt9PX2D2EczFZhZr\",\n                \"type\": 48\n              }\n            ],\n            [\n              {\n                \"currency\": \"USD\",\n                \"issuer\": \"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B\",\n                \"type\": 48\n              },\n              {\n                \"currency\": \"CNY\",\n                \"issuer\": \"rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y\",\n                \"type\": 48\n              },\n              {\n                \"currency\": \"XRP\",\n                \"type\": 16\n              },\n              {\n                \"currency\": \"ZCN\",\n                \"issuer\": \"r8HgVGenRTAiNSM5iqt9PX2D2EczFZhZr\",\n                \"type\": 48\n              }\n            ],\n            [\n              {\n                \"currency\": \"CNY\",\n                \"issuer\": \"rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y\",\n                \"type\": 48\n              },\n              {\n                \"currency\": \"ULT\",\n                \"issuer\": \"rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y\",\n                \"type\": 48\n              },\n              {\n                \"currency\": \"XRP\",\n                \"type\": 16\n              },\n              {\n                \"currency\": \"ZCN\",\n                \"issuer\": \"r8HgVGenRTAiNSM5iqt9PX2D2EczFZhZr\",\n                \"type\": 48\n              }\n            ],\n            [\n              {\n                \"currency\": \"ULT\",\n                \"issuer\": \"rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y\",\n                \"type\": 48\n              },\n              {\n                \"currency\": \"CNY\",\n                \"issuer\": \"rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y\",\n                \"type\": 48\n              },\n              {\n                \"currency\": \"XRP\",\n                \"type\": 16\n              },\n              {\n                \"currency\": \"ZCN\",\n                \"issuer\": \"r8HgVGenRTAiNSM5iqt9PX2D2EczFZhZr\",\n                \"type\": 48\n              }\n            ]\n          ],\n          \"SendMax\": \"2870000000\",\n          \"Sequence\": 850699,\n          \"SigningPubKey\": \"02061D47AA1D16CAF48C1DD6FC5DD811EB4D69727357A574BBFB94B55228BC55F1\",\n          \"TransactionType\": \"Payment\",\n          \"TxnSignature\": \"3045022100915C745C407A2B894540802FE3942BAFD532C37A73F64E0095A1F5910422206B02202B94F2E166F6DDBCB682F8D48E9504ECB25BDEE922AEC609600288AF8A54908F\",\n          \"hash\": \"E90EC260A3C239029A3CDAE664940BF07AC2BCF6CBE22F70DD09667F8F1FBCCD\",\n          \"metaData\": {\n            \"AffectedNodes\": [\n              {\n                \"ModifiedNode\": {\n                  \"FinalFields\": {\n                    \"Account\": \"rf3B8KcYqKMgybB2ms9KcLhcB8bWX1UDov\",\n                    \"Balance\": \"2880588942\",\n                    \"Flags\": 0,\n                    \"OwnerCount\": 3,\n                    \"Sequence\": 850700\n                  },\n                  \"LedgerEntryType\": \"AccountRoot\",\n                  \"LedgerIndex\": \"99E14FC78F30B40B082ED2A3018236514F97082D42C42C26F514E5322F623A7E\",\n                  \"PreviousFields\": {\n                    \"Balance\": \"2880588953\",\n                    \"Sequence\": 850699\n                  },\n                  \"PreviousTxnID\": \"9E0589473446157682C577F9765F318E31DCCFEF8C6BF2E222AA252D211C6039\",\n                  \"PreviousTxnLgrSeq\": 45136163\n                }\n              }\n            ],\n            \"TransactionIndex\": 13,\n            \"TransactionResult\": \"tecPATH_DRY\"\n          }\n        }\n      ]\n    },\n    \"ledger_hash\": \"4253E4C67DD89F230CF25334BDD7406C312F90ADEEDA3BBEA5EB3AD0F4FCF9C3\",\n    \"ledger_index\": 45136164,\n    \"validated\": true,\n    \"warnings\": [\n      {\n        \"id\": 1004,\n        \"message\": \"This is a reporting server.  The default behavior of a reporting server is to only return validated data. If you are looking for not yet validated data, include \\\"ledger_index : current\\\" in your request, which will cause this server to forward the request to a p2p node. If the forward is successful the response will include \\\"forwarded\\\" : \\\"true\\\"\"\n      }\n    ]\n  },\n  \"status\": \"success\",\n  \"type\": \"response\"\n}\n"
  },
  {
    "path": "src/containers/Ledger/test/storedLedger.json",
    "content": "{\n  \"ledger_index\": 45136164,\n  \"ledger_hash\": \"4253E4C67DD89F230CF25334BDD7406C312F90ADEEDA3BBEA5EB3AD0F4FCF9C3\",\n  \"parent_hash\": \"821CBBFE2C275C57C735F6F938A8CBBD2DC23877E8B56F2339618BEA995535C9\",\n  \"close_time\": \"2019-02-14T21:41:01Z\",\n  \"total_xrp\": 99991690980.78883,\n  \"total_fees\": 0.000171,\n  \"transactions\": [\n    {\n      \"hash\": \"FBB147825AE38DD4AA47761E7B5B2C9F912D46D07FF60E65D227F2677679471B\",\n      \"type\": \"OfferCreate\",\n      \"result\": \"tesSUCCESS\",\n      \"account\": \"rJumr5e1HwiuV543H7bqixhtFreChWTaHH\",\n      \"index\": 0,\n      \"fee\": 0.000012,\n      \"sequence\": 434837,\n      \"details\": {\n        \"instructions\": {\n          \"gets\": {\n            \"currency\": \"XRP\",\n            \"amount\": 1826.283419\n          },\n          \"pays\": {\n            \"currency\": \"CNY\",\n            \"issuer\": \"rJ1adrpGS3xsnQMb9Cw54tWJVFPuSdZHK\",\n            \"amount\": 3780.406678065401\n          },\n          \"price\": \"2.07000\",\n          \"firstCurrency\": {\n            \"currency\": \"XRP\"\n          },\n          \"secondCurrency\": {\n            \"currency\": \"CNY\",\n            \"issuer\": \"rJ1adrpGS3xsnQMb9Cw54tWJVFPuSdZHK\"\n          },\n          \"cancel\": 434833\n        }\n      }\n    },\n    {\n      \"hash\": \"37468E9FA12C27A7E0E1B7374B3EF472C4DE8FC97F06FE6D1A7A40D77DDEA42E\",\n      \"type\": \"OfferCreate\",\n      \"result\": \"tesSUCCESS\",\n      \"account\": \"rJumr5e1HwiuV543H7bqixhtFreChWTaHH\",\n      \"index\": 1,\n      \"fee\": 0.000012,\n      \"sequence\": 434838,\n      \"details\": {\n        \"instructions\": {\n          \"gets\": {\n            \"currency\": \"XRP\",\n            \"amount\": 387.901997\n          },\n          \"pays\": {\n            \"currency\": \"CNY\",\n            \"issuer\": \"rJ1adrpGS3xsnQMb9Cw54tWJVFPuSdZHK\",\n            \"amount\": 814.3575749822622\n          },\n          \"price\": \"2.09939\",\n          \"firstCurrency\": {\n            \"currency\": \"XRP\"\n          },\n          \"secondCurrency\": {\n            \"currency\": \"CNY\",\n            \"issuer\": \"rJ1adrpGS3xsnQMb9Cw54tWJVFPuSdZHK\"\n          },\n          \"cancel\": 434834\n        }\n      }\n    },\n    {\n      \"hash\": \"7D427958E943B87C31E8F46274EA7D5AFD5515ABE8BBA6EB73DCFD844C9424BA\",\n      \"type\": \"OfferCreate\",\n      \"result\": \"tesSUCCESS\",\n      \"account\": \"rJumr5e1HwiuV543H7bqixhtFreChWTaHH\",\n      \"index\": 2,\n      \"fee\": 0.000012,\n      \"sequence\": 434839,\n      \"details\": {\n        \"instructions\": {\n          \"gets\": {\n            \"currency\": \"XRP\",\n            \"amount\": 1383.168304\n          },\n          \"pays\": {\n            \"currency\": \"CNY\",\n            \"issuer\": \"rJ1adrpGS3xsnQMb9Cw54tWJVFPuSdZHK\",\n            \"amount\": 2921.251458458587\n          },\n          \"price\": \"2.11200\",\n          \"firstCurrency\": {\n            \"currency\": \"XRP\"\n          },\n          \"secondCurrency\": {\n            \"currency\": \"CNY\",\n            \"issuer\": \"rJ1adrpGS3xsnQMb9Cw54tWJVFPuSdZHK\"\n          },\n          \"cancel\": 434835\n        }\n      }\n    },\n    {\n      \"hash\": \"F84B233749ED99090099263469F2F7FC7CB6DF469C6E2FCB3188159B7C295AEB\",\n      \"type\": \"OfferCreate\",\n      \"result\": \"tesSUCCESS\",\n      \"account\": \"rJumr5e1HwiuV543H7bqixhtFreChWTaHH\",\n      \"index\": 3,\n      \"fee\": 0.000012,\n      \"sequence\": 434840,\n      \"details\": {\n        \"instructions\": {\n          \"gets\": {\n            \"currency\": \"XRP\",\n            \"amount\": 1890.602253\n          },\n          \"pays\": {\n            \"currency\": \"CNY\",\n            \"issuer\": \"rJ1adrpGS3xsnQMb9Cw54tWJVFPuSdZHK\",\n            \"amount\": 4026.982799610241\n          },\n          \"price\": \"2.13000\",\n          \"firstCurrency\": {\n            \"currency\": \"XRP\"\n          },\n          \"secondCurrency\": {\n            \"currency\": \"CNY\",\n            \"issuer\": \"rJ1adrpGS3xsnQMb9Cw54tWJVFPuSdZHK\"\n          },\n          \"cancel\": 434836\n        }\n      }\n    },\n    {\n      \"hash\": \"28044988242B9FD51997722AAC7877358092480478861B37565982AEDF38FFA4\",\n      \"type\": \"OfferCreate\",\n      \"result\": \"tesSUCCESS\",\n      \"account\": \"rKxmaPYJ3A5kbsT9wAyDnC1kbZ4XQ8Mskv\",\n      \"index\": 4,\n      \"fee\": 0.000012,\n      \"sequence\": 175251,\n      \"details\": {\n        \"instructions\": {\n          \"gets\": {\n            \"currency\": \"ETH\",\n            \"issuer\": \"rLAKy3kN7um61z27iYgUiEnhM29FxXMq1F\",\n            \"amount\": 1\n          },\n          \"pays\": {\n            \"currency\": \"EUR\",\n            \"issuer\": \"rhqZLBimNU78SGmA9WzcEdtn9ZaG8sqV5x\",\n            \"amount\": 117.183\n          },\n          \"price\": \"117.183\",\n          \"firstCurrency\": {\n            \"currency\": \"ETH\",\n            \"issuer\": \"rLAKy3kN7um61z27iYgUiEnhM29FxXMq1F\"\n          },\n          \"secondCurrency\": {\n            \"currency\": \"EUR\",\n            \"issuer\": \"rhqZLBimNU78SGmA9WzcEdtn9ZaG8sqV5x\"\n          },\n          \"cancel\": 175236\n        }\n      }\n    },\n    {\n      \"hash\": \"50F0BE978093592CB68E9AC183E97E799A2B8E3E028CAAE3AF9B95D911B53500\",\n      \"type\": \"PaymentChannelClaim\",\n      \"result\": \"tesSUCCESS\",\n      \"account\": \"rnwe9kEcneb8DaXWtDWxctz7AChk6CAYnD\",\n      \"index\": 5,\n      \"fee\": 0.000012,\n      \"sequence\": 4222,\n      \"details\": {\n        \"instructions\": {\n          \"channel\": \"931CF90A156E4337641451A7B6BF918419E671B6A53B4FECABE91B6F82667FE6\",\n          \"total_claimed\": {\n            \"currency\": \"XRP\",\n            \"amount\": 69.211506\n          },\n          \"source\": \"rK6g2UYc4GpQH8DYdPG7wywyQbxkJpQTTN:1781470388\",\n          \"destination\": \"rnwe9kEcneb8DaXWtDWxctz7AChk6CAYnD\",\n          \"channel_amount\": {\n            \"currency\": \"XRP\",\n            \"amount\": 70\n          },\n          \"claimed\": {\n            \"currency\": \"XRP\",\n            \"amount\": 0.17926\n          },\n          \"remaining\": {\n            \"currency\": \"XRP\",\n            \"amount\": 0.788494\n          }\n        }\n      }\n    },\n    {\n      \"hash\": \"AED69E8A9B978C30B53CB710A5B7D5FFDD05425351835B7C118897114CF17F4A\",\n      \"type\": \"OfferCreate\",\n      \"result\": \"tesSUCCESS\",\n      \"account\": \"r9Vv4yJeVFYqLBuZ85muKmxHvPzmZUDFMM\",\n      \"index\": 6,\n      \"fee\": 0.000021,\n      \"sequence\": 2500103,\n      \"details\": {\n        \"instructions\": {\n          \"gets\": {\n            \"currency\": \"XRP\",\n            \"amount\": 2032.42931\n          },\n          \"pays\": {\n            \"currency\": \"USD\",\n            \"issuer\": \"rhub8VRN55s94qWKDv6jmDy1pUykJzF3wq\",\n            \"amount\": 620.1885165967301\n          },\n          \"price\": \"0.305146\",\n          \"firstCurrency\": {\n            \"currency\": \"XRP\"\n          },\n          \"secondCurrency\": {\n            \"currency\": \"USD\",\n            \"issuer\": \"rhub8VRN55s94qWKDv6jmDy1pUykJzF3wq\"\n          },\n          \"cancel\": 2500102\n        }\n      }\n    },\n    {\n      \"hash\": \"21190F133B6863E49D49DBEFE010061DEEA60274F567E305AB9F8951AA53E985\",\n      \"type\": \"OfferCreate\",\n      \"result\": \"tesSUCCESS\",\n      \"account\": \"rfW24fjUr12xJ9j76MdFU5tPTgZem96G3P\",\n      \"index\": 7,\n      \"fee\": 0.000012,\n      \"sequence\": 175156,\n      \"details\": {\n        \"instructions\": {\n          \"gets\": {\n            \"currency\": \"EUR\",\n            \"issuer\": \"rhqZLBimNU78SGmA9WzcEdtn9ZaG8sqV5x\",\n            \"amount\": 95.679\n          },\n          \"pays\": {\n            \"currency\": \"ETH\",\n            \"issuer\": \"rLAKy3kN7um61z27iYgUiEnhM29FxXMq1F\",\n            \"amount\": 1\n          },\n          \"price\": \"95.6790\",\n          \"firstCurrency\": {\n            \"currency\": \"ETH\",\n            \"issuer\": \"rLAKy3kN7um61z27iYgUiEnhM29FxXMq1F\"\n          },\n          \"secondCurrency\": {\n            \"currency\": \"EUR\",\n            \"issuer\": \"rhqZLBimNU78SGmA9WzcEdtn9ZaG8sqV5x\"\n          },\n          \"cancel\": 175141\n        }\n      }\n    },\n    {\n      \"hash\": \"1172404FF3279BFA384FDF9EDD1934661FFC4A79F7FCDA652D20D377838C2917\",\n      \"type\": \"Payment\",\n      \"result\": \"tecPATH_DRY\",\n      \"account\": \"rNXQc5mT7b336bFTkenFTPiF5TYuyrJ3ZH\",\n      \"index\": 8,\n      \"fee\": 0.000011,\n      \"sequence\": 1180046,\n      \"details\": {\n        \"instructions\": {\n          \"amount\": {\n            \"currency\": \"XCN\",\n            \"issuer\": \"r8HgVGenRTAiNSM5iqt9PX2D2EczFZhZr\",\n            \"amount\": 0\n          },\n          \"convert\": {\n            \"currency\": \"XRP\",\n            \"amount\": 4900\n          },\n          \"partial\": true\n        }\n      }\n    },\n    {\n      \"hash\": \"15DB47164E8EB56C39D402DC67A46FFC2F1EE291A17906F8A18C0C2F746B9E9A\",\n      \"type\": \"Payment\",\n      \"result\": \"tecPATH_DRY\",\n      \"account\": \"rKLpjpCoXgLQQYQyj13zgay73rsgmzNH13\",\n      \"index\": 9,\n      \"fee\": 0.000011,\n      \"sequence\": 1305546,\n      \"details\": {\n        \"instructions\": {\n          \"amount\": {\n            \"currency\": \"XCN\",\n            \"issuer\": \"rPFLkxQk6xUGdGYEykqe7PR25Gr7mLHDc8\",\n            \"amount\": 0\n          },\n          \"convert\": {\n            \"currency\": \"XRP\",\n            \"amount\": 10000\n          },\n          \"partial\": true\n        }\n      }\n    },\n    {\n      \"hash\": \"DF9E9FA9CC0E3C7E715BF7CB69A79ABDBE2F7E2C59C22233CF559D700953D6A3\",\n      \"type\": \"Payment\",\n      \"result\": \"tecPATH_DRY\",\n      \"account\": \"rsE7AtkwCsXo8zvRu5VHEBEbARcEqUeRnM\",\n      \"index\": 10,\n      \"fee\": 0.000011,\n      \"sequence\": 813427,\n      \"details\": {\n        \"instructions\": {\n          \"amount\": {\n            \"currency\": \"WCN\",\n            \"issuer\": \"r8HgVGenRTAiNSM5iqt9PX2D2EczFZhZr\",\n            \"amount\": 0\n          },\n          \"convert\": {\n            \"currency\": \"XRP\",\n            \"amount\": 1025\n          },\n          \"partial\": true\n        }\n      }\n    },\n    {\n      \"hash\": \"3B42B88573F98928704101DF471187B63524E9EB8336CD495F131978DBA76E99\",\n      \"type\": \"Payment\",\n      \"result\": \"tecPATH_DRY\",\n      \"account\": \"r9x5PHDiwuvbpYB3uvGAqEUVV5wxHayQEx\",\n      \"index\": 11,\n      \"fee\": 0.000011,\n      \"sequence\": 815442,\n      \"details\": {\n        \"instructions\": {\n          \"amount\": {\n            \"currency\": \"YCN\",\n            \"issuer\": \"r8HgVGenRTAiNSM5iqt9PX2D2EczFZhZr\",\n            \"amount\": 0\n          },\n          \"convert\": {\n            \"currency\": \"XRP\",\n            \"amount\": 2140\n          },\n          \"partial\": true\n        }\n      }\n    },\n    {\n      \"hash\": \"BE738E09DEC4ED159A74E62B1BAA9667C1BF512EF6B653D11F81466ED3DAB441\",\n      \"type\": \"Payment\",\n      \"result\": \"tecPATH_DRY\",\n      \"account\": \"r96HghtYDxvpHNaru1xbCQPcsHZwqiaENE\",\n      \"index\": 12,\n      \"fee\": 0.000011,\n      \"sequence\": 983802,\n      \"details\": {\n        \"instructions\": {\n          \"amount\": {\n            \"currency\": \"CNT\",\n            \"issuer\": \"rPFLkxQk6xUGdGYEykqe7PR25Gr7mLHDc8\",\n            \"amount\": 0\n          },\n          \"convert\": {\n            \"currency\": \"XRP\",\n            \"amount\": 10000\n          },\n          \"partial\": true\n        }\n      }\n    },\n    {\n      \"hash\": \"E90EC260A3C239029A3CDAE664940BF07AC2BCF6CBE22F70DD09667F8F1FBCCD\",\n      \"type\": \"Payment\",\n      \"result\": \"tecPATH_DRY\",\n      \"account\": \"rf3B8KcYqKMgybB2ms9KcLhcB8bWX1UDov\",\n      \"index\": 13,\n      \"fee\": 0.000011,\n      \"sequence\": 850699,\n      \"details\": {\n        \"instructions\": {\n          \"amount\": {\n            \"currency\": \"ZCN\",\n            \"issuer\": \"r8HgVGenRTAiNSM5iqt9PX2D2EczFZhZr\",\n            \"amount\": 0\n          },\n          \"convert\": {\n            \"currency\": \"XRP\",\n            \"amount\": 2870\n          },\n          \"partial\": true\n        }\n      }\n    }\n  ]\n}\n"
  },
  {
    "path": "src/containers/Ledgers/LedgerEntryHash.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport SuccessIcon from '../shared/images/success.svg'\nimport { LedgerEntryValidator } from './LedgerEntryValidator'\nimport { LedgerEntryHashTrustedCount } from './LedgerEntryHashTrustedCount'\nimport { LedgerHash } from '../shared/components/Streams'\n\nexport const LedgerEntryHash = ({ hash }: { hash: LedgerHash }) => {\n  const { t } = useTranslation()\n  const shortHash = hash.hash.substring(0, 6)\n  const barStyle = { background: `#${shortHash}` }\n  const validated = hash.validated && <SuccessIcon className=\"validated\" />\n  return (\n    <div className={`hash ${hash.unselected ? 'unselected' : ''}`}>\n      <div className=\"bar\" style={barStyle} />\n      <div className=\"ledger-hash\">\n        <div className=\"hash-concat\">{hash.hash.substring(0, 6)}</div>\n        {validated}\n      </div>\n      <div className=\"subtitle\">\n        <div className=\"validation-total\">\n          <div>{t('total')}:</div>\n          <b>{hash.validations.length}</b>\n        </div>\n        <LedgerEntryHashTrustedCount validations={hash.validations} />\n      </div>\n      <div className=\"validations\">\n        {hash.validations.map((validation, i) => (\n          <LedgerEntryValidator\n            validation={validation}\n            index={i}\n            key={validation.cookie}\n          />\n        ))}\n      </div>\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/Ledgers/LedgerEntryHashTrustedCount.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { useMemo } from 'react'\nimport { useTooltip } from '../shared/components/Tooltip'\nimport { useVHSValidators } from '../shared/components/VHSValidators'\nimport { LedgerValidation } from '../shared/components/Streams'\n\nexport const LedgerEntryHashTrustedCount = ({\n  validations,\n}: {\n  validations: LedgerValidation[]\n}) => {\n  const { t } = useTranslation()\n  const { hideTooltip, showTooltip } = useTooltip()\n  const { unl, validators } = useVHSValidators()\n\n  const status = useMemo(() => {\n    const missing = [...(unl || [])]\n    validations.forEach((v) => {\n      if (!validators?.[v.validation_public_key]) {\n        return\n      }\n\n      const missingIndex = missing.findIndex(\n        (assumedMissing) => assumedMissing === v.validation_public_key,\n      )\n      if (missingIndex !== -1) {\n        missing.splice(missingIndex, 1)\n      }\n    })\n\n    return {\n      missing: missing.map((v) => validators?.[v]),\n      trustedCount: (unl?.length || 0) - missing.length,\n    }\n  }, [unl, validations, validators])\n\n  return status.trustedCount ? (\n    <span\n      tabIndex={0}\n      role=\"button\"\n      className={status.missing.length > 0 ? 'missed' : ''}\n      onMouseMove={(e) => {\n        const { missing } = status\n\n        missing.length && showTooltip('missing', e, { missing })\n      }}\n      onFocus={() => {}}\n      onKeyUp={() => {}}\n      onMouseLeave={() => hideTooltip()}\n    >\n      <div>{t('unl')}:</div>\n      <b>\n        {status.trustedCount}/{unl?.length}\n      </b>\n    </span>\n  ) : null\n}\n"
  },
  {
    "path": "src/containers/Ledgers/LedgerEntryTransaction.tsx",
    "content": "import classNames from 'classnames'\nimport { getAction, getCategory } from '../shared/components/Transaction'\nimport { TRANSACTION_ROUTE } from '../App/routes'\nimport { TransactionActionIcon } from '../shared/components/TransactionActionIcon/TransactionActionIcon'\nimport { RouteLink } from '../shared/routing'\nimport { useTooltip } from '../shared/components/Tooltip'\nimport { TransactionSummary } from '../shared/types'\n\nexport const LedgerEntryTransaction = ({\n  transaction,\n}: {\n  transaction: TransactionSummary\n}) => {\n  const { hideTooltip, showTooltip } = useTooltip()\n\n  return (\n    <RouteLink\n      className={classNames(\n        `txn transaction-type transaction-dot bg`,\n        `tx-category-${getCategory(transaction.type)}`,\n        `transaction-action-${getAction(transaction.type)}`,\n        `${transaction.result}`,\n      )}\n      onMouseOver={(e) => showTooltip('tx', e, transaction)}\n      onFocus={() => {}}\n      onMouseLeave={() => hideTooltip()}\n      to={TRANSACTION_ROUTE}\n      params={{ identifier: transaction.hash }}\n    >\n      <TransactionActionIcon type={transaction.type} />\n      <span>{transaction.hash}</span>\n    </RouteLink>\n  )\n}\n"
  },
  {
    "path": "src/containers/Ledgers/LedgerEntryTransactions.tsx",
    "content": "import { memo } from 'react'\nimport { Loader } from '../shared/components/Loader'\nimport { LedgerEntryTransaction } from './LedgerEntryTransaction'\nimport { TransactionSummary } from '../shared/types'\n\n/**\n * A separate component to handle iterating over the transactions for a ledger on the homepage.\n * It is a separate component so that it can benefit from React's memoization the array only changes once\n * when the ledger closes and the call returns will all its transactions\n * @param transactions\n * @constructor\n */\nexport const LedgerEntryTransactions = memo(\n  ({ transactions }: { transactions: TransactionSummary[] }) => (\n    <>\n      {transactions == null && <Loader />}\n      <div className=\"transactions\">\n        {transactions?.map((tx) => (\n          <LedgerEntryTransaction transaction={tx} key={tx.hash} />\n        ))}\n      </div>\n    </>\n  ),\n  (prevProps, nextProps) =>\n    prevProps.transactions &&\n    nextProps.transactions &&\n    prevProps.transactions.length === nextProps.transactions.length,\n)\n"
  },
  {
    "path": "src/containers/Ledgers/LedgerEntryValidator.tsx",
    "content": "import classNames from 'classnames'\nimport { useSelectedValidator } from './useSelectedValidator'\nimport { useTooltip } from '../shared/components/Tooltip'\nimport { useVHSValidators } from '../shared/components/VHSValidators'\nimport { LedgerValidation } from '../shared/components/Streams'\n\nexport const LedgerEntryValidator = ({\n  validation,\n  index,\n}: {\n  validation: LedgerValidation\n  index: number\n}) => {\n  const { validators } = useVHSValidators()\n  const { showTooltip, hideTooltip } = useTooltip()\n  const { selectedValidator, setSelectedValidator } = useSelectedValidator()\n\n  const className = classNames(\n    'validation',\n    validators?.[validation.validation_public_key]?.unl && 'trusted',\n    selectedValidator && 'unselected',\n    selectedValidator === validation.validation_public_key && 'selected',\n    validation.validation_public_key,\n  )\n\n  return (\n    <div\n      role=\"button\"\n      tabIndex={index}\n      className={className}\n      onMouseOver={(e) =>\n        showTooltip('validator', e, {\n          ...validation,\n          v: validators?.[validation.validation_public_key],\n        })\n      }\n      onFocus={() => {}}\n      onKeyUp={() => {}}\n      onMouseLeave={() => hideTooltip()}\n      onClick={() =>\n        setSelectedValidator(\n          selectedValidator === validation.validation_public_key\n            ? undefined\n            : validation.validation_public_key,\n        )\n      }\n    >\n      {validation.partial && <div className=\"partial\" />}\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/Ledgers/LedgerListEntry.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { RouteLink } from '../shared/routing'\nimport { LEDGER_ROUTE } from '../App/routes'\nimport { Amount } from '../shared/components/Amount'\nimport { LedgerEntryHash } from './LedgerEntryHash'\nimport { LedgerEntryTransactions } from './LedgerEntryTransactions'\nimport {\n  Tooltip,\n  TooltipProvider,\n  useTooltip,\n} from '../shared/components/Tooltip'\nimport { Ledger } from '../shared/components/Streams'\n\nconst SIGMA = '\\u03A3'\n\nconst LedgerIndex = ({ ledgerIndex }: { ledgerIndex: number }) => {\n  const { t } = useTranslation()\n  const flagLedger = ledgerIndex % 256 === 0\n  return (\n    <div\n      className={`ledger-index ${flagLedger ? 'flag-ledger' : ''}`}\n      title={flagLedger ? t('flag_ledger') : ''}\n    >\n      <RouteLink to={LEDGER_ROUTE} params={{ identifier: ledgerIndex }}>\n        {ledgerIndex}\n      </RouteLink>\n    </div>\n  )\n}\n\nexport const LedgerListEntryInner = ({ ledger }: { ledger: Ledger }) => {\n  const { tooltip } = useTooltip()\n  const { t } = useTranslation()\n  const time = ledger.closeTime\n    ? new Date(ledger.closeTime).toLocaleTimeString()\n    : null\n\n  return (\n    <div className=\"ledger\">\n      <div className=\"ledger-head\">\n        <LedgerIndex ledgerIndex={ledger.index} />\n        <div className=\"close-time\">{time}</div>\n        {/* Render Transaction Count (can be 0) */}\n        {ledger.txCount !== undefined && (\n          <div className=\"txn-count\">\n            {t('txn_count')}:<b>{ledger.txCount.toLocaleString()}</b>\n          </div>\n        )}\n        {/* Render Total Fees (can be 0) */}\n        {ledger.totalFees !== undefined && (\n          <div className=\"fees\">\n            {SIGMA} {t('fees')}:\n            <b>\n              <Amount value={{ currency: 'XRP', amount: ledger.totalFees }} />\n            </b>\n          </div>\n        )}\n        <LedgerEntryTransactions transactions={ledger.transactions} />\n      </div>\n      <div className=\"hashes\">\n        {(ledger.hashes ?? []).map((hash) => (\n          <LedgerEntryHash hash={hash} key={hash.hash} />\n        ))}\n      </div>\n      <Tooltip tooltip={tooltip} />\n    </div>\n  )\n}\n\nexport const LedgerListEntry = ({ ledger }: { ledger: Ledger }) => (\n  <TooltipProvider>\n    <LedgerListEntryInner ledger={ledger} />\n  </TooltipProvider>\n)\n"
  },
  {
    "path": "src/containers/Ledgers/LedgerMetrics.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { Tooltip, useTooltip } from '../shared/components/Tooltip'\nimport { renderXRP } from '../shared/utils'\nimport PauseIcon from '../shared/images/ic_pause.svg'\nimport ResumeIcon from '../shared/images/ic_play.svg'\nimport QuorumIcon from '../shared/images/quorum.svg'\nimport FeeIcon from '../shared/images/fee.svg'\nimport ClockIcon from '../shared/images/clock.svg'\nimport ClockAltIcon from '../shared/images/clock_2.svg'\nimport DecentralizedIcon from '../shared/images/decentralized.svg'\nimport CreditIcon from '../shared/images/finance_credit.svg'\nimport UserIcon from '../shared/images/user.svg'\nimport HoverIcon from '../shared/images/hover.svg'\nimport './css/ledgerMetrics.scss'\nimport { useIsOnline } from '../shared/SocketContext'\nimport { useLanguage } from '../shared/hooks'\nimport { useStreams } from '../shared/components/Streams'\n\nconst DEFAULTS = {\n  load_fee: '--',\n  txn_sec: '--',\n  txn_ledger: '--',\n  ledger_interval: '--',\n  avg_fee: '--',\n  quorum: '--',\n  nUnl: [],\n}\n\nconst TOOLTIP_Y_OFFSET = 70\n\nexport const LedgerMetrics = ({\n  onPause,\n  paused,\n}: {\n  onPause: any\n  paused: boolean\n}) => {\n  const { metrics: suppliedData } = useStreams()\n  const data = { ...DEFAULTS, ...suppliedData }\n  const { tooltip, showTooltip, hideTooltip } = useTooltip()\n  const { t } = useTranslation()\n  const isOnline = useIsOnline()\n  const language = useLanguage()\n\n  const renderPause = () => {\n    const Icon = paused ? ResumeIcon : PauseIcon\n    const text = paused ? 'resume' : 'pause'\n\n    return (\n      <div\n        tabIndex={0}\n        role=\"button\"\n        className=\"pause-resume\"\n        onClick={onPause}\n        onKeyUp={onPause}\n      >\n        <Icon className=\"icon\" alt={t(text)} />\n        <span>{t(text)}</span>\n      </div>\n    )\n  }\n\n  const renderMetricIcon = (key: string) => {\n    const classname = 'metrics-icon'\n    switch (key) {\n      case 'quorum':\n        return <QuorumIcon className={classname} />\n      case 'avg_fee':\n        return <FeeIcon className={classname} />\n      case 'ledger_interval':\n        return <ClockIcon className={classname} />\n      case 'txn_ledger':\n        return <DecentralizedIcon className={classname} />\n      case 'txn_sec':\n        return <ClockAltIcon className={classname} />\n      case 'load_fee':\n        return <CreditIcon className={classname} />\n      case 'nUnl':\n        return <UserIcon className={classname} />\n      default:\n        return null\n    }\n  }\n\n  const renderTextTooltip = (key: string) => (\n    <HoverIcon\n      className=\"hover\"\n      onMouseOver={(e) => {\n        const rect = e.currentTarget.getBoundingClientRect()\n        showTooltip('text', e, t(`${key}_description`, { defaultValue: '' }), {\n          x: rect.left + rect.width / 2,\n          y: rect.top - TOOLTIP_Y_OFFSET,\n        })\n      }}\n      onMouseLeave={() => hideTooltip()}\n    />\n  )\n\n  if (data.load_fee === '--') {\n    data.load_fee = data.base_fee || '--'\n  }\n  delete data.base_fee\n  const items = Object.keys(data)\n    .map((key) => {\n      let content: any = null\n\n      if (data[key] === undefined && key !== 'nUnl') {\n        content = '--'\n      } else if (key.includes('fee') && !isNaN(data[key])) {\n        content = renderXRP(data[key], language)\n      } else if (key === 'ledger_interval' && data[key] !== '--') {\n        content = `${data[key]} ${t('seconds_short')}`\n      } else if (key === 'nUnl' && (!data[key] || data[key]?.length === 0)) {\n        return null\n      } else if (key === 'nUnl') {\n        content = data[key]?.length\n        return (\n          <div className=\"cell\" key={key}>\n            <div className=\"label-wrapper\">\n              {renderMetricIcon(key)}\n              <div className=\"label\">\n                <span\n                  className=\"text\"\n                  role=\"link\"\n                  onMouseOver={(e) =>\n                    showTooltip('nUnl', e, { nUnl: data.nUnl })\n                  }\n                  onMouseOut={() => hideTooltip()}\n                  onFocus={() => {}}\n                  onBlur={() => {}}\n                  tabIndex={0}\n                >\n                  <a\n                    key={`link ${key}`}\n                    href=\"https://xrpl.org/negative-unl.html\"\n                    target=\"_blank\"\n                    rel=\"noopener noreferrer\"\n                    className=\"n-unl-metric\"\n                  >\n                    {t(key)}\n                  </a>\n                </span>\n\n                {renderTextTooltip(key)}\n              </div>\n            </div>\n            <span>{content}</span>\n          </div>\n        )\n      } else {\n        content = data[key]\n      }\n\n      return (\n        <div className=\"cell\" key={key}>\n          <div className=\"label-wrapper\">\n            {renderMetricIcon(key)}\n            <div className=\"label\">\n              <span className=\"text\">\n                {t(key, { defaultValue: 'load_fee' })}\n              </span>\n              {renderTextTooltip(key)}\n            </div>\n          </div>\n          <span>{content}</span>\n        </div>\n      )\n    })\n    .reverse()\n\n  return (\n    <div className=\"metrics-control\">\n      {isOnline && (\n        <>\n          <div className=\"control\">{renderPause()}</div>\n          <div className=\"metrics\">{items}</div>\n          <Tooltip tooltip={tooltip} />\n        </>\n      )}\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/Ledgers/Ledgers.tsx",
    "content": "import './css/ledgers.scss'\nimport DomainLink from '../shared/components/DomainLink'\nimport { Loader } from '../shared/components/Loader'\nimport { useIsOnline } from '../shared/SocketContext'\nimport { Legend } from './Legend'\nimport { RouteLink } from '../shared/routing'\nimport { VALIDATOR_ROUTE } from '../App/routes'\nimport { LedgerListEntry } from './LedgerListEntry'\nimport { useSelectedValidator } from './useSelectedValidator'\nimport { usePreviousWithPausing } from '../shared/hooks/usePreviousWithPausing'\nimport { useStreams, Ledger } from '../shared/components/Streams'\nimport { useVHSValidators } from '../shared/components/VHSValidators'\n\nexport const Ledgers = ({ paused }: { paused: boolean }) => {\n  const { validators: validatorsFromVHS } = useVHSValidators()\n  const { selectedValidator } = useSelectedValidator()\n  const { ledgers } = useStreams()\n  const localLedgers = usePreviousWithPausing<Record<number, Ledger>>(\n    ledgers,\n    paused,\n  )\n  const { isOnline } = useIsOnline()\n\n  return (\n    <div className=\"ledgers\">\n      {isOnline && Object.keys(ledgers).length > 0 ? (\n        <>\n          <Legend />\n          <div className=\"control\">\n            {selectedValidator && validatorsFromVHS && (\n              <div className=\"selected-validator\">\n                {validatorsFromVHS[selectedValidator].domain && (\n                  <DomainLink\n                    domain={validatorsFromVHS[selectedValidator].domain}\n                  />\n                )}\n                <RouteLink\n                  to={VALIDATOR_ROUTE}\n                  params={{ identifier: selectedValidator }}\n                  className=\"pubkey\"\n                >\n                  {selectedValidator}\n                </RouteLink>\n              </div>\n            )}\n          </div>\n          <div className=\"ledger-list\">\n            {Object.values(localLedgers ?? {})\n              .reverse()\n              .slice(0, 20)\n              ?.map((ledger) => (\n                <LedgerListEntry ledger={ledger} key={ledger.index} />\n              ))}\n          </div>\n        </>\n      ) : (\n        <Loader />\n      )}\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/Ledgers/Legend.tsx",
    "content": "import { useEffect, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { useWindowSize } from 'usehooks-ts'\nimport {\n  TransactionAction,\n  TransactionCategory,\n} from '../shared/components/Transaction/types'\nimport { useLocalStorage } from '../shared/hooks'\nimport { TransactionActionIcon } from '../shared/components/TransactionActionIcon/TransactionActionIcon'\nimport './css/legend.scss'\n\nexport const LEGEND_STORAGE_KEY = 'explorer-legend-previous-interaction'\n\nexport const Legend = () => {\n  const { t } = useTranslation()\n  const windowSize = useWindowSize()\n  const [previousInteraction, setPreviousInteraction] =\n    useLocalStorage<boolean>(LEGEND_STORAGE_KEY, false)\n  const [hidden, setHidden] = useState(previousInteraction)\n\n  // Show legend by default when on desktop sizes\n  useEffect(() => {\n    if (previousInteraction === false) {\n      setHidden(!(windowSize.width > 900))\n    }\n  }, [previousInteraction, windowSize])\n\n  const actions = [\n    TransactionAction.CREATE,\n    TransactionAction.MODIFY,\n    TransactionAction.FINISH,\n    TransactionAction.CANCEL,\n    TransactionAction.SEND,\n  ]\n\n  const categories = [\n    TransactionCategory.PAYMENT,\n    TransactionCategory.DEX,\n    TransactionCategory.NFT,\n    TransactionCategory.ACCOUNT,\n    TransactionCategory.PSEUDO,\n    TransactionCategory.OTHER,\n  ]\n\n  return (\n    <div className=\"legend\">\n      {!hidden && (\n        <>\n          <div className=\"legend-heading\">Shapes Legend</div>\n          <div className=\"legend-section\">\n            {actions.map((action) => (\n              <div className=\"legend-item\" key={action}>\n                <TransactionActionIcon action={action} />{' '}\n                {t(`transaction_action`, {\n                  context: action,\n                  defaultValue: TransactionAction.UNKNOWN,\n                })}\n              </div>\n            ))}\n          </div>\n          <div className=\"legend-heading\">Colors Legend</div>\n          <div className=\"legend-section\">\n            {categories.map((category: string) => (\n              <div\n                className={`legend-item tx-category-${category}`}\n                key={category}\n              >\n                <div className=\"legend-category\" />{' '}\n                {t(`transaction_category`, {\n                  context: category,\n                  defaultValue: TransactionCategory.OTHER,\n                })}\n              </div>\n            ))}\n          </div>\n        </>\n      )}\n      <button\n        className=\"btn btn-link legend-toggle\"\n        type=\"button\"\n        onClick={() => {\n          if (previousInteraction === false) {\n            setPreviousInteraction(true)\n          }\n          setHidden(!hidden)\n        }}\n      >\n        {t(`transaction_legend_toggle_${hidden ? 'show' : 'hide'}`)}\n      </button>\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/Ledgers/css/ledgerMetrics.scss",
    "content": "@use '../../shared/css/variables' as *;\n\n.metrics {\n  overflow: hidden;\n  align-items: center;\n  justify-content: center;\n  padding: 16px 16px 0;\n  border: 1px solid $black-60;\n  margin: 16px;\n  background-color: $black-80;\n  text-align: center;\n\n  @include for-size(tablet-landscape-up) {\n    display: flex;\n    width: calc(100% - 64px);\n    flex-wrap: wrap;\n    justify-content: space-between;\n    padding: 0;\n    border-bottom: none;\n    margin: 12px auto 0;\n  }\n\n  .cell {\n    position: relative;\n    display: flex;\n    width: 100%;\n    flex: 1;\n    justify-content: space-between;\n    margin-bottom: 16px;\n    color: $white;\n    font-size: 16px;\n    text-align: center;\n\n    @include for-size(tablet-landscape-up) {\n      display: inline-block;\n      width: auto;\n      min-width: 160px;\n      padding: 24px;\n      border-bottom: 1px solid $black-60;\n      margin-bottom: 0;\n\n      &::before {\n        position: absolute;\n        top: 50%;\n        left: -1px;\n        width: 1px;\n        height: 80%;\n        background-color: $black-60;\n        content: '';\n        transform: translateY(-50%);\n      }\n\n      // Hacky way to get rid of the double border when breaking to second row. TODO: cleanup\n      // 3 columns per row\n      @media (width >= 544px) and (width <= 703px) {\n        &:nth-child(3n + 1)::before {\n          content: none;\n        }\n      }\n\n      // 4 columns per row\n      @media (width >= 704px) and (width <= 863px) {\n        &:nth-child(4n + 1)::before {\n          content: none;\n        }\n      }\n\n      // 5 columns per row\n      @media (width >= 864px) and (width <= 1023px) {\n        &:nth-child(5n + 1)::before {\n          content: none;\n        }\n      }\n\n      // 6 columns per row\n      @media (width >= 1024px) and (width <= 1183px) {\n        &:nth-child(6n + 1)::before {\n          content: none;\n        }\n      }\n\n      // 7 columns per row\n      @media (width >= 1184px) {\n        &:nth-child(7n + 1)::before {\n          content: none;\n        }\n      }\n    }\n\n    @include for-size(desktop-up) {\n      min-width: 160px;\n      font-size: 18px;\n      line-height: 22px;\n    }\n\n    .label-wrapper {\n      display: flex;\n      align-items: center;\n      justify-content: flex-start;\n      gap: 8px;\n\n      @include for-size(tablet-landscape-up) {\n        flex-direction: column;\n        align-items: center;\n        gap: 0;\n      }\n    }\n\n    .metrics-icon {\n      width: 24px;\n      height: 24px;\n      margin-bottom: 0;\n      @include for-size(tablet-landscape-up) {\n        margin-bottom: 12px;\n      }\n    }\n\n    .label {\n      display: flex;\n      overflow: hidden;\n      align-items: center;\n      margin-bottom: 0;\n      color: $black-40;\n      float: left;\n      font-size: 12px;\n      gap: 4px;\n      line-height: 25px;\n      text-overflow: ellipsis;\n      text-transform: uppercase;\n      white-space: nowrap;\n      @include semibold;\n\n      @include for-size(tablet-landscape-up) {\n        margin-bottom: 12px;\n        float: none;\n        font-size: 10px;\n        line-height: 12px;\n      }\n\n      .hover {\n        width: 14px;\n        height: 14px;\n      }\n    }\n\n    .n-unl-metric {\n      color: $black-40;\n      text-transform: none;\n    }\n\n    span {\n      display: inline-block;\n      float: right;\n      letter-spacing: 0px;\n      @include bold;\n\n      @include for-size(tablet-landscape-up) {\n        display: block;\n        float: none;\n      }\n    }\n  }\n}\n\n.control {\n  display: flex;\n  min-height: 30px;\n  align-items: center;\n  padding: 0px 14px 0px 32px;\n  line-height: 14px;\n  text-align: right;\n\n  .pause-resume {\n    display: flex;\n    height: 40px;\n    flex-direction: row;\n    align-items: center;\n    color: $white;\n    cursor: pointer;\n    float: left;\n    font-size: 10px;\n    text-align: left;\n    text-transform: uppercase;\n    @include medium;\n\n    .icon {\n      width: 40px;\n      height: 40px;\n      margin-right: 16px;\n      vertical-align: middle;\n    }\n\n    &:hover {\n      color: $black-30;\n    }\n  }\n}\n\n.metrics-control {\n  align-content: center;\n}\n"
  },
  {
    "path": "src/containers/Ledgers/css/ledgers.scss",
    "content": "@use '../../shared/css/variables' as *;\n\n$ledgers-margin-large: 32px;\n$ledgers-border: 1px solid $black-70;\n$ledger-width: 196px;\n\n.ledgers-page {\n  display: flex;\n  width: 100%;\n  flex-direction: column;\n  justify-content: center;\n  margin: 1% 0 auto;\n\n  .loader {\n    position: absolute;\n  }\n}\n\n.ledgers {\n  margin-top: $ledgers-margin-large;\n  justify-self: space-between;\n\n  .control {\n    overflow: hidden;\n    width: calc(100% - 28px);\n    min-height: 30px;\n    padding: 4px 14px;\n    line-height: 14px;\n    text-align: right;\n\n    @include for-size(desktop-up) {\n      width: calc(100% - 80px);\n      padding: 4px 40px;\n    }\n\n    .selected-validator {\n      display: inline-block;\n      width: calc(100% - 100px);\n\n      a {\n        display: inline-block;\n        overflow: hidden;\n        margin: 1px 2px;\n        line-height: 20px;\n        text-overflow: ellipsis;\n        vertical-align: top;\n        white-space: nowrap;\n\n        &.domain {\n          max-width: calc(70% - 5px);\n          font-size: 14px;\n          @include medium;\n        }\n\n        &.pubkey {\n          max-width: calc(30% - 5px);\n          padding-top: 1.5px;\n          font-size: 11px;\n          letter-spacing: 0;\n        }\n\n        @include for-size(tablet-landscape-up) {\n          &.domain {\n            max-width: calc(50% - 5px);\n          }\n\n          &.pubkey {\n            max-width: calc(50% - 5px);\n          }\n        }\n      }\n    }\n  }\n\n  .legend {\n    padding: 16px 24px;\n    border: $ledgers-border;\n    margin: 0 $ledgers-margin-large;\n  }\n\n  .ledger-list {\n    position: relative;\n    display: flex;\n    padding-left: $ledgers-margin-large; /* Did not use margin as that would chop off the scrolling */\n    overflow-x: scroll;\n    scrollbar-width: none; /* Firefox */\n\n    &::-webkit-scrollbar {\n      /* WebKit */\n      width: 0;\n      height: 0;\n    }\n\n    .loader {\n      position: relative;\n      padding: 32px;\n    }\n  }\n\n  .ledger {\n    width: $ledger-width;\n    flex-grow: 0;\n    flex-shrink: 0;\n    margin-right: $ledgers-margin-large;\n    animation-duration: 0.4s;\n    animation-name: ledger-enter;\n    white-space: normal;\n\n    &:first-child {\n      margin-left: 0;\n    }\n  }\n\n  @keyframes ledger-enter {\n    from {\n      margin-left: -$ledger-width;\n    }\n\n    to {\n      margin-left: 0;\n    }\n  }\n\n  .ledger-head {\n    min-height: 170px;\n    padding: $ledgers-margin-large;\n    border: $ledgers-border;\n    border-bottom: 0;\n    color: $black-40;\n    font-size: 10px;\n    line-height: 12px;\n    text-align: center;\n    text-transform: uppercase;\n    @include bold;\n\n    .close-time {\n      padding-bottom: 24px;\n      color: $black-40;\n      font-size: 10px;\n    }\n\n    .txn-count {\n      display: flex;\n      justify-content: space-between;\n    }\n\n    .fees {\n      display: flex;\n      justify-content: space-between;\n    }\n\n    b {\n      color: $white;\n      font-size: 10px;\n      text-align: end;\n      @include medium;\n    }\n\n    .ledger-index {\n      padding-bottom: 3px;\n      color: $white;\n      font-size: 14px;\n      font-weight: 700;\n      line-height: 16px;\n\n      a {\n        display: inline-block;\n        padding: 2px 4px;\n        border-radius: 2px;\n        margin-right: -4px;\n      }\n\n      a:hover {\n        background: $black-70;\n      }\n\n      &.flag-ledger a {\n        background: $black-70;\n        color: $white;\n      }\n    }\n\n    .transactions {\n      display: grid;\n      padding-top: $ledgers-margin-large;\n      gap: 4px 6px;\n      grid-template-columns: repeat(8, 1fr);\n    }\n\n    @keyframes tx-enter {\n      from {\n        width: 0;\n        height: 0;\n      }\n\n      to {\n        width: 11px;\n        height: 11px;\n      }\n    }\n\n    .txn {\n      display: inline-block;\n      width: 11px;\n      height: 11px;\n      align-content: center;\n      align-items: center;\n      opacity: 0.35;\n\n      /* stylelint-disable-next-line selector-class-pattern -- Name comes from server  */\n      &.tesSUCCESS {\n        opacity: 1;\n      }\n\n      span {\n        display: none;\n      }\n\n      svg {\n        animation-duration: 0.3s;\n        animation-name: tx-enter;\n      }\n    }\n  }\n\n  .hash {\n    overflow: hidden;\n    padding: 0 32px 32px;\n    border: 1px solid $black-60;\n    border-top: 0;\n    background: rgba($black-80, 0.7);\n    color: $white;\n    font-size: 15px;\n    text-align: left;\n\n    .bar {\n      height: 2px;\n      margin: 0 -32px;\n    }\n\n    &.unselected {\n      opacity: 0.5;\n\n      .bar {\n        background: $black-20 !important;\n      }\n    }\n\n    .ledger-hash {\n      text-align: center;\n    }\n\n    .hash-concat {\n      padding-top: 32px;\n      color: $white;\n      font-size: 14px;\n      @include bold;\n    }\n\n    .subtitle {\n      display: flex;\n      overflow: hidden;\n      flex-direction: column;\n      padding-top: 24px;\n      padding-bottom: 32px;\n      color: $black-40;\n      font-size: 10px;\n      line-height: 14px;\n      text-transform: uppercase;\n      @include bold;\n    }\n\n    .validation-total {\n      display: flex;\n      justify-content: space-between;\n    }\n\n    .subtitle b {\n      color: $white;\n      font-size: 11px;\n    }\n\n    .subtitle span {\n      display: flex;\n      justify-content: space-between;\n      padding: 0 2px;\n    }\n\n    .subtitle span.missed {\n      color: white;\n      cursor: pointer;\n    }\n\n    .subtitle span.missed b {\n      border-radius: 2px;\n      background: $orange-50;\n      color: white;\n    }\n\n    .validated {\n      display: inline-block;\n      height: 26px;\n      color: $green;\n      text-align: center;\n      vertical-align: middle;\n    }\n\n    @keyframes validation-enter {\n      from {\n        opacity: 0;\n      }\n\n      to {\n        opacity: 0.85;\n      }\n    }\n\n    .validations {\n      display: grid;\n      gap: 4px 8px;\n      grid-template-columns: repeat(5, 1fr);\n    }\n\n    .validation {\n      height: 4px;\n      border-radius: 4px;\n      background: $black-50;\n      cursor: pointer;\n      opacity: 0.85;\n    }\n\n    .validation:hover {\n      opacity: 1;\n    }\n\n    .validation.trusted {\n      background: $white;\n    }\n\n    .validation.selected {\n      background: $green;\n      opacity: 1;\n    }\n\n    .validation.unselected:not(.selected) {\n      opacity: 0.4;\n    }\n\n    .partial {\n      width: 50%;\n      height: 100%;\n      background: $red;\n    }\n  }\n}\n"
  },
  {
    "path": "src/containers/Ledgers/css/legend.scss",
    "content": "@use '../../shared/css/variables' as *;\n\n.legend {\n  display: flex;\n  flex-direction: column;\n  gap: 18px;\n  text-transform: uppercase;\n}\n\n.legend-category {\n  display: inline-block;\n  width: 12px;\n  height: 2px;\n  background: currentcolor;\n}\n\n.legend-item {\n  display: flex;\n  align-items: center;\n  font-size: 14px;\n  font-weight: 600;\n  gap: 8px;\n}\n\n.legend-heading {\n  color: #a2a2a4;\n  font-size: 12px;\n  font-weight: 600;\n}\n\n.legend-section {\n  display: flex;\n  flex-flow: column wrap;\n  gap: 16px;\n\n  @include for-size(desktop-up) {\n    flex-direction: row;\n  }\n}\n\n.legend-toggle {\n  padding: 0;\n}\n"
  },
  {
    "path": "src/containers/Ledgers/index.tsx",
    "content": "import { useEffect, useState } from 'react'\nimport { Helmet } from 'react-helmet-async'\nimport { useTranslation } from 'react-i18next'\nimport { LedgerMetrics } from './LedgerMetrics'\nimport { Ledgers } from './Ledgers'\nimport { useAnalytics } from '../shared/analytics'\nimport { SelectedValidatorProvider } from './useSelectedValidator'\nimport { StreamsProvider } from '../shared/components/Streams'\nimport { VHSValidatorsProvider } from '../shared/components/VHSValidators'\n\nexport const LedgersPage = () => {\n  const { trackScreenLoaded } = useAnalytics()\n  const [paused, setPaused] = useState(false)\n\n  useEffect(() => {\n    trackScreenLoaded()\n    return () => {\n      window.scrollTo(0, 0)\n    }\n  }, [trackScreenLoaded])\n\n  const pause = () => setPaused(!paused)\n  const { t } = useTranslation()\n\n  return (\n    <div className=\"ledgers-page\">\n      <Helmet title={t('ledgers')} />\n      <StreamsProvider>\n        <VHSValidatorsProvider>\n          <SelectedValidatorProvider>\n            <LedgerMetrics onPause={() => pause()} paused={paused} />\n            <Ledgers paused={paused} />\n          </SelectedValidatorProvider>\n        </VHSValidatorsProvider>\n      </StreamsProvider>\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/Ledgers/test/LedgersPage.test.js",
    "content": "import { render, fireEvent, waitFor, cleanup } from '@testing-library/react'\nimport moxios from 'moxios'\nimport WS from 'jest-websocket-mock'\nimport i18n from '../../../i18n/testConfig'\nimport { LedgersPage } from '../index'\nimport SocketContext from '../../shared/SocketContext'\nimport NetworkContext from '../../shared/NetworkContext'\nimport BaseMockWsClient from '../../test/mockWsClient'\nimport prevLedgerMessage from './mock/prevLedger.json'\nimport ledgerMessage from './mock/ledger.json'\nimport validationMessage from './mock/validation.json'\nimport rippledResponses from './mock/rippled.json'\nimport { QuickHarness } from '../../test/utils'\nimport { SelectedValidatorProvider } from '../useSelectedValidator'\n\nfunction sleep(ms) {\n  return new Promise((resolve) => setTimeout(resolve, ms))\n}\n\nconst LEDGER_HASH_MAP = new Map([\n  [\n    'A5F887A191348B69129B168EDA5BC8EEE9EAC60E2599A8034742199471C70604',\n    68992561,\n  ],\n  [\n    '0C12B30677B3D8D6ADC7DCC8528694E2FD1515950FB2AAD621D9E9B31833B444',\n    68992560,\n  ],\n])\n\nconst MOCK_VALIDATORS = [\n  {\n    signing_key: 'n9M2anhK2HzFFiJZRoGKhyLpkh55ZdeWw8YyGgvkzY7AkBvz5Vyj',\n    master_key: 'nHUfPizyJyhAJZzeq3duRVrZmsTZfcLn7yLF5s2adzHdcHMb9HmQ',\n    unl: process.env.VITE_VALIDATOR,\n  },\n  {\n    signing_key: 'n9KaxgJv69FucW5kkiaMhCqS6sAR1wUVxpZaZmLGVXxAcAse9YhR',\n    master_key: 'nHBidG3pZK11zQD6kpNDoAhDxH6WLGui6ZxSbUx7LSqLHsgzMPec',\n    unl: process.env.VITE_VALIDATOR,\n  },\n  {\n    signing_key: 'n9K7Wfxgyqw4XSQ1BaiKPHKxw2D9BiBiseyn7Ldg7KieQZJfrPf4',\n    master_key: 'nHUkhmyFPr3vEN3C8yfhKp4pu4t3wkTCi2KEDBWhyMNpsMj2HbnD',\n    unl: null,\n  },\n]\n\nclass MockWsClient extends BaseMockWsClient {\n  send(message) {\n    if (this.debug) {\n      // eslint-disable-next-line no-console -- For debugging purposes\n      console.log(message)\n    }\n    if (this.returnError) {\n      return Promise.reject(new Error({}))\n    }\n    const { command } = message\n    if (command === 'ledger') {\n      const response = JSON.parse(JSON.stringify(this.responses[command]))\n      response.result.ledger_hash = message.ledger_hash\n      response.result.ledger.hash = message.ledger_hash\n      response.result.ledger.ledger_hash = message.ledger_hash\n      response.result.ledger.ledger_index = LEDGER_HASH_MAP.get(\n        message.ledger_hash,\n      )\n      response.result.ledger_index = LEDGER_HASH_MAP.get(message.ledger_hash)\n      return Promise.resolve(response.result)\n    }\n    return Promise.resolve(this.responses[command]?.result)\n  }\n}\n\nconst WS_URL = 'wss://fakenode.ripple.com:51233'\n\ndescribe('Ledgers Page container', () => {\n  let server\n  let client\n  const renderLedgersPage = (props = { network: 'main', path: '/' }) =>\n    render(\n      <SelectedValidatorProvider>\n        <SocketContext.Provider value={client}>\n          <NetworkContext.Provider value={props.network}>\n            <QuickHarness i18n={i18n} initialEntries={[props.path]}>\n              <LedgersPage />\n            </QuickHarness>\n          </NetworkContext.Provider>\n        </SocketContext.Provider>\n      </SelectedValidatorProvider>,\n    )\n\n  const oldEnvs = process.env\n\n  beforeEach(async () => {\n    process.env = { ...oldEnvs, VITE_ENVIRONMENT: 'mainnet' }\n    server = new WS(WS_URL, { jsonProtocol: true })\n    client = new MockWsClient(WS_URL)\n    await server.connected\n    moxios.install()\n  })\n\n  afterEach(() => {\n    cleanup()\n    process.env = oldEnvs\n    moxios.uninstall()\n    client.close()\n    server.close()\n    WS.clean()\n  })\n\n  it('renders without crashing', () => {\n    renderLedgersPage()\n  })\n\n  it('renders all parts', () => {\n    moxios.stubRequest(`${process.env.VITE_DATA_URL}/validators/main`, {\n      status: 200,\n      response: [],\n    })\n\n    const { container } = renderLedgersPage()\n    expect(container.querySelectorAll('.ledgers').length).toBe(1)\n  })\n\n  it('receives messages from streams', async () => {\n    client.addResponses(rippledResponses)\n\n    moxios.stubRequest(`${process.env.VITE_DATA_URL}/validators/main`, {\n      status: 200,\n      response: {\n        validators: MOCK_VALIDATORS,\n      },\n    })\n\n    moxios.stubRequest('/api/v1/metrics', {\n      base_fee: '0.00001',\n      txn_sec: '12.19',\n      txn_ledger: '46.94',\n      ledger_interval: '3.850',\n      avg_fee: '0.001882',\n    })\n    const { container, unmount } = renderLedgersPage()\n\n    expect(container.querySelectorAll('.ledger').length).toBe(0)\n    expect(container.querySelectorAll('.validation').length).toBe(0)\n    expect(container.querySelectorAll('.txn').length).toBe(0)\n\n    server.send(prevLedgerMessage)\n    await sleep(260)\n    expect(container.querySelectorAll('.ledgers').length).toBe(1)\n    expect(container.querySelectorAll('.ledger-list').length).toBe(1)\n    expect(container.querySelectorAll('.ledger').length).toBe(2)\n\n    server.send(validationMessage)\n    await sleep(200 * 2)\n\n    expect(container.querySelectorAll('.validation').length).toBe(1)\n\n    server.send(ledgerMessage)\n    expect(container.querySelectorAll('.ledger').length).toBe(2)\n\n    server.send({ type: 'invalid' })\n    server.send(null)\n\n    expect(container.querySelectorAll('.ledger').length).toBe(2)\n    expect(\n      container.querySelectorAll('.selected-validator .pubkey').length,\n    ).toBe(0)\n    expect(container.querySelectorAll('.tooltip').length).toBe(0)\n\n    const unlCounter = container.querySelector('.ledger .hash .missed')\n    expect(unlCounter.textContent).toBe('unl:1/2')\n    fireEvent.mouseMove(unlCounter)\n    await waitFor(() => {\n      expect(\n        container.querySelectorAll('.tooltip').length,\n      ).toBeGreaterThanOrEqual(1)\n    })\n    expect(container.querySelector('.tooltip .pubkey').textContent).toBe(\n      'nHUfPizyJyhAJZzeq3duRVrZmsTZfcLn7yLF5s2adzHdcHMb9HmQ',\n    )\n    fireEvent.mouseLeave(unlCounter)\n\n    const validations = container.querySelectorAll('div.validation')\n    const txn = container.querySelectorAll('a.txn')\n\n    expect(txn.length).toBe(12)\n    fireEvent.focus(txn[0])\n    fireEvent.mouseOver(txn[0])\n\n    expect(validations.length).toBe(1)\n    fireEvent.mouseOver(validations[0])\n    await waitFor(() => {\n      expect(\n        container.querySelectorAll('.tooltip').length,\n      ).toBeGreaterThanOrEqual(1)\n    })\n    fireEvent.mouseLeave(validations[0])\n    await waitFor(() => {\n      expect(container.querySelectorAll('.tooltip').length).toBe(0)\n    })\n    fireEvent.focus(validations[0])\n    expect(\n      container.querySelectorAll('.selected-validator a.pubkey').length,\n    ).toBe(0)\n    fireEvent.click(validations[0])\n    await waitFor(() => {\n      expect(\n        container.querySelectorAll('.selected-validator a.pubkey').length,\n      ).toBe(1)\n    })\n    fireEvent.click(validations[0])\n    await waitFor(() => {\n      expect(\n        container.querySelectorAll('.selected-validator a.pubkey').length,\n      ).toBe(0)\n    })\n\n    unmount()\n    await sleep(100)\n    expect(client.listenerCount('ledger')).toBe(0)\n    expect(client.listenerCount('validation')).toBe(0)\n  }, 8000)\n\n  describe('Custom network tests', () => {\n    beforeEach(() => {\n      process.env = { ...oldEnvs, VITE_ENVIRONMENT: 'custom' }\n    })\n\n    afterEach(() => {\n      process.env = oldEnvs\n    })\n\n    it('receives messages from streams', async () => {\n      client.addResponses(rippledResponses)\n      const customNetwork = 'custom_network'\n\n      moxios.stubRequest(\n        `${process.env.VITE_DATA_URL}/validators/${customNetwork}`,\n        {\n          status: 200,\n          response: {\n            validators: MOCK_VALIDATORS,\n          },\n        },\n      )\n\n      const { container, unmount } = renderLedgersPage({\n        network: customNetwork,\n        path: '/my.custom.com',\n      })\n\n      await sleep(100)\n\n      expect(container.querySelectorAll('.validation').length).toBe(0)\n      expect(container.querySelectorAll('.ledger').length).toBe(1)\n      expect(container.querySelectorAll('.txn').length).toBe(6)\n\n      server.send(prevLedgerMessage)\n      await sleep(260)\n      expect(container.querySelectorAll('.ledger').length).toBe(2)\n\n      server.send(validationMessage)\n      await sleep(200 * 2)\n      expect(container.querySelectorAll('.validation').length).toBe(1)\n\n      server.send(ledgerMessage)\n      await sleep(250)\n      expect(container.querySelectorAll('.ledger').length).toBe(2)\n\n      server.send({ type: 'invalid' })\n      server.send(null)\n\n      expect(container.querySelectorAll('.ledger').length).toBe(2)\n      expect(\n        container.querySelectorAll('.selected-validator .pubkey').length,\n      ).toBe(0)\n      expect(container.querySelectorAll('.tooltip').length).toBe(0)\n\n      const unlCounter = container.querySelector('.ledger .hash .missed')\n      expect(unlCounter.textContent).toBe('unl:1/2')\n      fireEvent.mouseMove(unlCounter)\n      await waitFor(() => {\n        expect(\n          container.querySelectorAll('.tooltip').length,\n        ).toBeGreaterThanOrEqual(1)\n      })\n      expect(container.querySelector('.tooltip .pubkey').textContent).toBe(\n        'nHUfPizyJyhAJZzeq3duRVrZmsTZfcLn7yLF5s2adzHdcHMb9HmQ',\n      )\n      fireEvent.mouseLeave(unlCounter)\n\n      const validations = container.querySelectorAll('div.validation')\n      const txn = container.querySelectorAll('a.txn')\n\n      expect(txn.length).toBe(12)\n      fireEvent.focus(txn[0])\n      fireEvent.mouseOver(txn[0])\n\n      expect(validations.length).toBe(1)\n      fireEvent.mouseOver(validations[0])\n      await waitFor(() => {\n        expect(\n          container.querySelectorAll('.tooltip').length,\n        ).toBeGreaterThanOrEqual(1)\n      })\n      fireEvent.mouseLeave(validations[0])\n      await waitFor(() => {\n        expect(container.querySelectorAll('.tooltip').length).toBe(0)\n      })\n      fireEvent.focus(validations[0])\n      expect(\n        container.querySelectorAll('.selected-validator .pubkey').length,\n      ).toBe(0)\n      fireEvent.click(validations[0])\n      await waitFor(() => {\n        expect(\n          container.querySelectorAll('.selected-validator a.pubkey').length,\n        ).toBe(1)\n      })\n      expect(\n        container\n          .querySelector('.selected-validator a.pubkey')\n          .getAttribute('href'),\n      ).toBe('/validators/n9KaxgJv69FucW5kkiaMhCqS6sAR1wUVxpZaZmLGVXxAcAse9YhR')\n      fireEvent.click(validations[0])\n      await waitFor(() => {\n        expect(\n          container.querySelectorAll('.selected-validator .pubkey').length,\n        ).toBe(0)\n      })\n\n      unmount()\n    }, 8000)\n  })\n})\n"
  },
  {
    "path": "src/containers/Ledgers/test/Legend.test.tsx",
    "content": "import { render } from '@testing-library/react'\nimport userEvent from '@testing-library/user-event'\nimport { I18nextProvider } from 'react-i18next'\nimport { Legend, LEGEND_STORAGE_KEY } from '../Legend'\nimport i18n from '../../../i18n/testConfigEnglish'\n\ndescribe(`Legend`, () => {\n  const setupTest = (localStorageValue?: boolean) => {\n    localStorage.removeItem(LEGEND_STORAGE_KEY)\n    if (localStorageValue) {\n      localStorage.setItem(\n        LEGEND_STORAGE_KEY,\n        JSON.stringify(localStorageValue),\n      )\n    }\n\n    return render(\n      <I18nextProvider i18n={i18n}>\n        <Legend />\n      </I18nextProvider>,\n    )\n  }\n\n  it(`renders open when localStorage entry 'explorer-legend-previous-interaction' is not defined`, () => {\n    const { container } = setupTest()\n\n    expect(container.querySelectorAll('.legend-heading')).toHaveLength(2)\n    expect(container.querySelectorAll('.legend-section')).toHaveLength(2)\n    // TransactionActionIcon renders SVGs directly without a wrapper class\n    expect(container.querySelectorAll('.legend-item svg')).toHaveLength(5)\n    expect(container.querySelectorAll('.legend-category')).toHaveLength(6)\n  })\n\n  it(`renders open when localStorage entry 'explorer-legend-previous-interaction' is set to false`, () => {\n    const { container } = setupTest(false)\n\n    expect(container.querySelectorAll('.legend-heading')).toHaveLength(2)\n    expect(container.querySelectorAll('.legend-section')).toHaveLength(2)\n  })\n\n  it(`renders closed when localStorage entry 'explorer-legend-previous-interaction' is set to true`, () => {\n    const { container } = setupTest(true)\n\n    expect(container.querySelector('.legend-heading')).not.toBeInTheDocument()\n    expect(container.querySelector('.legend-section')).not.toBeInTheDocument()\n  })\n\n  it(`sets 'explorer-legend-previous-interaction' when the toggle is clicked`, async () => {\n    const { container } = setupTest(false)\n\n    const toggle = container.querySelector('.legend-toggle')!\n    await userEvent.click(toggle)\n    expect(localStorage.getItem(LEGEND_STORAGE_KEY)).toEqual('true')\n\n    await userEvent.click(toggle)\n    expect(localStorage.getItem(LEGEND_STORAGE_KEY)).toEqual('true') // keeps it true\n  })\n})\n"
  },
  {
    "path": "src/containers/Ledgers/test/mock/ledger.json",
    "content": "{\n  \"fee_base\": 10,\n  \"fee_ref\": 10,\n  \"ledger_hash\": \"A5F887A191348B69129B168EDA5BC8EEE9EAC60E2599A8034742199471C70604\",\n  \"ledger_index\": 68992561,\n  \"ledger_time\": 695420130,\n  \"reserve_base\": 10000000,\n  \"reserve_inc\": 2000000,\n  \"txn_count\": 6,\n  \"type\": \"ledgerClosed\",\n  \"validated_ledgers\": \"22865937-24405095\"\n}\n"
  },
  {
    "path": "src/containers/Ledgers/test/mock/prevLedger.json",
    "content": "{\n  \"fee_base\": 10,\n  \"fee_ref\": 10,\n  \"ledger_hash\": \"0C12B30677B3D8D6ADC7DCC8528694E2FD1515950FB2AAD621D9E9B31833B444\",\n  \"ledger_index\": 68992560,\n  \"ledger_time\": 695420130,\n  \"reserve_base\": 10000000,\n  \"reserve_inc\": 2000000,\n  \"txn_count\": 6,\n  \"type\": \"ledgerClosed\",\n  \"validated_ledgers\": \"22865937-24405095\"\n}\n"
  },
  {
    "path": "src/containers/Ledgers/test/mock/rippled.json",
    "content": "{\n  \"server_info\": {\n    \"result\": {\n      \"info\": {\n        \"load_factor\": 1,\n        \"pubkey_node\": \"n9McviCgS1MCatDQRmezqorM2ErYwyspAgx8Y8RBKSRPensyaZHp\",\n        \"published_ledger\": \"none\",\n        \"time\": \"2022-Jan-13 20:40:18.473782 UTC\",\n        \"uptime\": 1820444,\n        \"validated_ledger\": {\n          \"age\": 6,\n          \"base_fee_xrp\": 0.00001,\n          \"hash\": \"A5F887A191348B69129B168EDA5BC8EEE9EAC60E2599A8034742199471C70604\",\n          \"reserve_base_xrp\": 10,\n          \"reserve_inc_xrp\": 2,\n          \"seq\": 68992561\n        },\n        \"validation_quorum\": 1\n      }\n    },\n    \"status\": \"success\",\n    \"type\": \"response\"\n  },\n  \"ledger_entry\": {\n    \"result\": {\n      \"node\": {\n        \"DisabledValidators\": [\n          {\n            \"DisabledValidator\": {\n              \"FirstLedgerSequence\": 1609728,\n              \"PublicKey\": \"ED6629D456285AE3613B285F65BBFF168D695BA3921F309949AFCD2CA7AFEC16FE\"\n            }\n          }\n        ],\n        \"Flags\": 0,\n        \"LedgerEntryType\": \"NegativeUNL\",\n        \"index\": \"2E8A59AA9D3B5B186B0B9E0F62E6C02587CA74A4D778938E957B6357D364B244\"\n      }\n    }\n  },\n  \"ledger\": {\n    \"result\": {\n      \"ledger\": {\n        \"closed\": true,\n        \"hash\": \"A5F887A191348B69129B168EDA5BC8EEE9EAC60E2599A8034742199471C70604\",\n        \"ledger_hash\": \"A5F887A191348B69129B168EDA5BC8EEE9EAC60E2599A8034742199471C70604\",\n        \"ledger_index\": \"68992561\",\n        \"parent_close_time\": 410459110,\n        \"parent_hash\": \"CDFD329A6E418591770695D0FB859113641AC20CB3A1F39AB3D721CEA2685EFE\",\n        \"seqNum\": \"68992561\",\n        \"totalCoins\": \"99999999999996310\",\n        \"total_coins\": \"99999999999996310\",\n        \"transaction_hash\": \"0000000000000000000000000000000000000000000000000000000000000000\",\n        \"transactions\": [\n          {\n            \"Account\": \"r3rhWeE31Jt5sWmi4QiGLMZnY3ENgqw96W\",\n            \"Fee\": \"10\",\n            \"Flags\": 0,\n            \"LastLedgerSequence\": 71273384,\n            \"OfferSequence\": 54681324,\n            \"Sequence\": 54681459,\n            \"SigningPubKey\": \"03C48299E57F5AE7C2BE1391B581D313F1967EA2301628C07AC412092FDC15BA22\",\n            \"TransactionType\": \"OfferCancel\",\n            \"TxnSignature\": \"30440220216DBEDCA747465AC638CA942FC0A15F4426F31342892D9481F8749BE72BB93B02201855A304190833ED94D52D40EA15F9C91728013373508F7C02F0AA87EB78139F\",\n            \"hash\": \"0A9FF30C6ADC165002425F764A3D87743F1674853D0D32DC123DF55D6438DEE0\",\n            \"metaData\": {\n              \"TransactionResult\": \"tesSUCCESS\"\n            }\n          },\n          {\n            \"Account\": \"r3rhWeE31Jt5sWmi4QiGLMZnY3ENgqw96W\",\n            \"Fee\": \"10\",\n            \"Flags\": 0,\n            \"LastLedgerSequence\": 71273384,\n            \"OfferSequence\": 54681324,\n            \"Sequence\": 54681459,\n            \"SigningPubKey\": \"03C48299E57F5AE7C2BE1391B581D313F1967EA2301628C07AC412092FDC15BA22\",\n            \"TransactionType\": \"OfferCancel\",\n            \"TxnSignature\": \"30440220216DBEDCA747465AC638CA942FC0A15F4426F31342892D9481F8749BE72BB93B02201855A304190833ED94D52D40EA15F9C91728013373508F7C02F0AA87EB78139F\",\n            \"hash\": \"1A9FF30C6ADC165002425F764A3D87743F1674853D0D32DC123DF55D6438DEE0\",\n            \"metaData\": {\n              \"TransactionResult\": \"tesSUCCESS\"\n            }\n          },\n          {\n            \"Account\": \"r3rhWeE31Jt5sWmi4QiGLMZnY3ENgqw96W\",\n            \"Fee\": \"10\",\n            \"Flags\": 0,\n            \"LastLedgerSequence\": 71273384,\n            \"OfferSequence\": 54681324,\n            \"Sequence\": 54681459,\n            \"SigningPubKey\": \"03C48299E57F5AE7C2BE1391B581D313F1967EA2301628C07AC412092FDC15BA22\",\n            \"TransactionType\": \"OfferCancel\",\n            \"TxnSignature\": \"30440220216DBEDCA747465AC638CA942FC0A15F4426F31342892D9481F8749BE72BB93B02201855A304190833ED94D52D40EA15F9C91728013373508F7C02F0AA87EB78139F\",\n            \"hash\": \"2A9FF30C6ADC165002425F764A3D87743F1674853D0D32DC123DF55D6438DEE0\",\n            \"metaData\": {\n              \"TransactionResult\": \"tesSUCCESS\"\n            }\n          },\n          {\n            \"Account\": \"r3rhWeE31Jt5sWmi4QiGLMZnY3ENgqw96W\",\n            \"Fee\": \"10\",\n            \"Flags\": 0,\n            \"LastLedgerSequence\": 71273384,\n            \"OfferSequence\": 54681324,\n            \"Sequence\": 54681459,\n            \"SigningPubKey\": \"03C48299E57F5AE7C2BE1391B581D313F1967EA2301628C07AC412092FDC15BA22\",\n            \"TransactionType\": \"OfferCancel\",\n            \"TxnSignature\": \"30440220216DBEDCA747465AC638CA942FC0A15F4426F31342892D9481F8749BE72BB93B02201855A304190833ED94D52D40EA15F9C91728013373508F7C02F0AA87EB78139F\",\n            \"hash\": \"3A9FF30C6ADC165002425F764A3D87743F1674853D0D32DC123DF55D6438DEE0\",\n            \"metaData\": {\n              \"TransactionResult\": \"tesSUCCESS\"\n            }\n          },\n          {\n            \"Account\": \"r3rhWeE31Jt5sWmi4QiGLMZnY3ENgqw96W\",\n            \"Fee\": \"10\",\n            \"Flags\": 0,\n            \"LastLedgerSequence\": 71273384,\n            \"OfferSequence\": 54681324,\n            \"Sequence\": 54681459,\n            \"SigningPubKey\": \"03C48299E57F5AE7C2BE1391B581D313F1967EA2301628C07AC412092FDC15BA22\",\n            \"TransactionType\": \"OfferCancel\",\n            \"TxnSignature\": \"30440220216DBEDCA747465AC638CA942FC0A15F4426F31342892D9481F8749BE72BB93B02201855A304190833ED94D52D40EA15F9C91728013373508F7C02F0AA87EB78139F\",\n            \"hash\": \"4A9FF30C6ADC165002425F764A3D87743F1674853D0D32DC123DF55D6438DEE0\",\n            \"metaData\": {\n              \"TransactionResult\": \"tesSUCCESS\"\n            }\n          },\n          {\n            \"Account\": \"r3rhWeE31Jt5sWmi4QiGLMZnY3ENgqw96W\",\n            \"Fee\": \"10\",\n            \"Flags\": 0,\n            \"LastLedgerSequence\": 71273384,\n            \"OfferSequence\": 54681324,\n            \"Sequence\": 54681459,\n            \"SigningPubKey\": \"03C48299E57F5AE7C2BE1391B581D313F1967EA2301628C07AC412092FDC15BA22\",\n            \"TransactionType\": \"OfferCancel\",\n            \"TxnSignature\": \"30440220216DBEDCA747465AC638CA942FC0A15F4426F31342892D9481F8749BE72BB93B02201855A304190833ED94D52D40EA15F9C91728013373508F7C02F0AA87EB78139F\",\n            \"hash\": \"5A9FF30C6ADC165002425F764A3D87743F1674853D0D32DC123DF55D6438DEE0\",\n            \"metaData\": {\n              \"TransactionResult\": \"tesSUCCESS\"\n            }\n          }\n        ]\n      },\n      \"validated\": true,\n      \"ledger_hash\": \"A5F887A191348B69129B168EDA5BC8EEE9EAC60E2599A8034742199471C70604\",\n      \"ledger_index\": 68992561\n    },\n    \"status\": \"success\",\n    \"type\": \"response\"\n  }\n}\n"
  },
  {
    "path": "src/containers/Ledgers/test/mock/validation.json",
    "content": "{\n  \"cookie\": \"14152263757286605278\",\n  \"data\": \"228000000126041CBE3129297345043AC466F0E7C4B401DE51A5F887A191348B69129B168EDA5BC8EEE9EAC60E2599A8034742199471C706045017BAE56CBDEAAFD73CBDEBE8BCF1CDDE879D327430F8A47BB9B787DA6D0A5E91F450190C12B30677B3D8D6ADC7DCC8528694E2FD1515950FB2AAD621D9E9B31833B4447321032CE084DEC33CF6FA0D093E0BC8C3E95C6702DBEB30FDF06F87545AF8A43B26FA76463044022023EDCAEE7C6812A418F51AB044974AD35B33D9B147C0A3417833E8F0D406CCEE022026AB3CF6BC52B94B43EC64EC6731304483630DB43BE7720CBCF93E71CF66AEC9\",\n  \"flags\": 2147483649,\n  \"full\": true,\n  \"ledger_hash\": \"A5F887A191348B69129B168EDA5BC8EEE9EAC60E2599A8034742199471C70604\",\n  \"ledger_index\": \"68992561\",\n  \"master_key\": \"nHUFCyRCrUjvtZmKiLeF8ReopzKuUoKeDeXo3wEUBVSaawzcSBpW\",\n  \"signature\": \"3044022023EDCAEE7C6812A418F51AB044974AD35B33D9B147C0A3417833E8F0D406CCEE022026AB3CF6BC52B94B43EC64EC6731304483630DB43BE7720CBCF93E71CF66AEC9\",\n  \"signing_time\": 695420164,\n  \"type\": \"validationReceived\",\n  \"validated_hash\": \"0C12B30677B3D8D6ADC7DCC8528694E2FD1515950FB2AAD621D9E9B31833B444\",\n  \"validation_public_key\": \"n9KaxgJv69FucW5kkiaMhCqS6sAR1wUVxpZaZmLGVXxAcAse9YhR\"\n}\n"
  },
  {
    "path": "src/containers/Ledgers/useSelectedValidator.tsx",
    "content": "import {\n  createContext,\n  Dispatch,\n  FC,\n  PropsWithChildren,\n  SetStateAction,\n  useContext,\n  useMemo,\n  useState,\n} from 'react'\n\nexport interface SelectedValidatorContextType {\n  selectedValidator?: string\n  setSelectedValidator: Dispatch<SetStateAction<string | undefined>>\n}\n\nexport const SelectedValidatorContext =\n  createContext<SelectedValidatorContextType>({\n    selectedValidator: undefined,\n    setSelectedValidator: (validator: SetStateAction<string | undefined>) =>\n      validator,\n  })\n\nexport const SelectedValidatorProvider: FC<PropsWithChildren> = ({\n  children,\n}) => {\n  const [selectedValidator, setSelectedValidator] = useState<string>()\n\n  const selectedValidatorValues = useMemo(\n    () => ({\n      selectedValidator,\n      setSelectedValidator,\n    }),\n    [selectedValidator],\n  )\n\n  return (\n    <SelectedValidatorContext.Provider value={selectedValidatorValues}>\n      {children}\n    </SelectedValidatorContext.Provider>\n  )\n}\n\nexport const useSelectedValidator = (): SelectedValidatorContextType =>\n  useContext(SelectedValidatorContext)\n"
  },
  {
    "path": "src/containers/NFT/NFT.tsx",
    "content": "import { FC, PropsWithChildren, useEffect, useState } from 'react'\nimport { useParams } from 'react-router'\nimport { Helmet } from 'react-helmet-async'\nimport NoMatch from '../NoMatch'\nimport { NFTHeader } from './NFTHeader/NFTHeader'\nimport { NFTTabs } from './NFTTabs/NFTTabs'\nimport { useAnalytics } from '../shared/analytics'\nimport { NOT_FOUND, BAD_REQUEST } from '../shared/utils'\nimport { ErrorMessage } from '../shared/Interfaces'\nimport { parseIssuerFromNFTokenID } from '../../rippled/NFTTransactions'\nimport './styles.scss'\n\nconst ERROR_MESSAGES: { [code: number]: ErrorMessage } = {\n  [NOT_FOUND]: {\n    title: 'assets.no_nfts_message',\n    hints: ['check_nft_id'],\n  },\n  [BAD_REQUEST]: {\n    title: 'invalid_xrpl_address',\n    hints: ['check_nft_id'],\n  },\n}\n\nconst DEFAULT_ERROR: ErrorMessage = {\n  title: 'generic_error',\n  hints: ['not_your_fault'],\n}\n\nconst getErrorMessage = (error: any) => ERROR_MESSAGES[error] ?? DEFAULT_ERROR\n\nconst Page: FC<PropsWithChildren<{ tokenId: string }>> = ({\n  tokenId,\n  children,\n}) => (\n  <div className=\"nft-page\">\n    <Helmet title={`NFT ${tokenId.substring(0, 12)}...`} />\n    {children}\n  </div>\n)\n\nexport const NFT = () => {\n  const { trackScreenLoaded } = useAnalytics()\n  const { id: tokenId = '' } = useParams<{ id: string }>()\n  const [error, setError] = useState<number | null>(null)\n\n  useEffect(() => {\n    trackScreenLoaded({\n      nftoken_id: tokenId,\n      issuer: parseIssuerFromNFTokenID(tokenId),\n    })\n    return () => {\n      window.scrollTo(0, 0)\n    }\n  }, [tokenId, trackScreenLoaded])\n\n  const renderError = () => {\n    const message = getErrorMessage(error)\n    return (\n      <div className=\"token-page\">\n        <NoMatch title={message.title} hints={message.hints} />\n      </div>\n    )\n  }\n\n  if (error) {\n    return <Page tokenId={tokenId}>{renderError()}</Page>\n  }\n  return (\n    <Page tokenId={tokenId}>\n      {tokenId && <NFTHeader tokenId={tokenId} setError={setError} />}\n      {tokenId && <NFTTabs tokenId={tokenId} />}\n      {!tokenId && (\n        <div className=\"nft-warning\">\n          <h2>Enter a NFT ID in the search box</h2>\n        </div>\n      )}\n    </Page>\n  )\n}\n"
  },
  {
    "path": "src/containers/NFT/NFTHeader/Details.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport './styles.scss'\nimport { useLanguage } from '../../shared/hooks'\nimport { localizeNumber } from '../../shared/utils'\nimport { NFTFormattedInfo, AccountFormattedInfo } from '../../shared/Interfaces'\nimport { Account } from '../../shared/components/Account'\nimport { TokenTableRow } from '../../shared/components/TokenTableRow'\n\ninterface MintedProps {\n  minted?: string\n}\n\ninterface Props {\n  data: NFTFormattedInfo & AccountFormattedInfo & MintedProps\n}\n\nexport const Details = ({ data }: Props) => {\n  const {\n    minted,\n    domain,\n    NFTTaxon: nftTaxon,\n    uri,\n    transferFee,\n    owner,\n    isBurned,\n    NFTSerial: nftSerial,\n  } = data\n  const { t } = useTranslation()\n  const language = useLanguage()\n  const formattedFee =\n    transferFee &&\n    `${localizeNumber((transferFee / 1000).toPrecision(5), language, {\n      minimumFractionDigits: 3,\n    })}%`\n\n  return (\n    <table className=\"token-table\">\n      <tbody>\n        {minted && <TokenTableRow label={t('minted')} value={minted} />}\n        {domain && <TokenTableRow label={t('domain')} value={domain} />}\n        <TokenTableRow label={t('taxon_id')} value={nftTaxon} />\n        <TokenTableRow label={t('serial')} value={nftSerial} />\n        {uri && <TokenTableRow label=\"URI\" value={uri} />}\n        <TokenTableRow label={t('transfer_fee')} value={formattedFee} />\n        {isBurned && <TokenTableRow label={t('is_burned')} value=\"true\" />}\n        {owner && (\n          <TokenTableRow\n            label={t('owner')}\n            value={<Account account={owner!} />}\n          />\n        )}\n      </tbody>\n    </table>\n  )\n}\n"
  },
  {
    "path": "src/containers/NFT/NFTHeader/NFTHeader.tsx",
    "content": "import { useEffect, useContext, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { useQuery } from 'react-query'\nimport { Loader } from '../../shared/components/Loader'\nimport './styles.scss'\nimport SocketContext from '../../shared/SocketContext'\nimport { Tooltip, TooltipInstance } from '../../shared/components/Tooltip'\nimport { getNFTInfo, getAccountInfo } from '../../../rippled/lib/rippled'\nimport { formatNFTInfo, formatAccountInfo } from '../../../rippled/lib/utils'\nimport { localizeDate, BAD_REQUEST, HASH256_REGEX } from '../../shared/utils'\nimport { Details } from './Details'\nimport { Settings } from './Settings'\nimport { Account } from '../../shared/components/Account'\nimport { getOldestNFTTransaction } from '../../../rippled/NFTTransactions'\nimport { useAnalytics } from '../../shared/analytics'\nimport { useLanguage } from '../../shared/hooks'\nimport { NFTFormattedInfo, AccountFormattedInfo } from '../../shared/Interfaces'\n\nconst TIME_ZONE = 'UTC'\nconst DATE_OPTIONS = {\n  hour: 'numeric',\n  minute: 'numeric',\n  second: 'numeric',\n  year: 'numeric',\n  month: 'numeric',\n  day: 'numeric',\n  hour12: true,\n  timeZone: TIME_ZONE,\n}\n\ninterface Props {\n  tokenId: string\n  setError: (error: number | null) => void\n}\n\nexport const NFTHeader = (props: Props) => {\n  const { t } = useTranslation()\n  const language = useLanguage()\n  const { tokenId, setError } = props\n  const rippledSocket = useContext(SocketContext)\n  const { trackException } = useAnalytics()\n  const [tooltip, setTooltip] = useState<TooltipInstance | undefined>(undefined)\n\n  const { data, isFetching: loading } = useQuery<NFTFormattedInfo>(\n    ['getNFTInfo', tokenId],\n    async () => {\n      const info = await getNFTInfo(rippledSocket, tokenId)\n      return formatNFTInfo(info)\n    },\n    {\n      onError: (e: any) => {\n        trackException(`NFT ${tokenId} --- ${JSON.stringify(e)}`)\n        setError(e.code)\n      },\n    },\n  )\n\n  useEffect(() => {\n    if (!HASH256_REGEX.test(tokenId)) {\n      setError(BAD_REQUEST)\n    }\n  }, [setError, tokenId])\n\n  // fetch the oldest NFT transaction to get its minted data\n  const { data: firstTransaction } = useQuery(\n    ['getFirstTransaction', tokenId],\n    () => getOldestNFTTransaction(rippledSocket, tokenId),\n    {\n      enabled: !!data,\n    },\n  )\n\n  // fetch account from issuer to get the domain\n  const { data: accountData } = useQuery<AccountFormattedInfo>(\n    ['getAccountInfo'],\n    async () => {\n      const info = await getAccountInfo(rippledSocket, data?.issuer)\n      return formatAccountInfo(info, {})\n    },\n    { enabled: !!data },\n  )\n\n  const mintedDate =\n    firstTransaction?.transaction?.type === 'NFTokenMint'\n      ? `${localizeDate(\n          new Date(firstTransaction.transaction.date),\n          language,\n          DATE_OPTIONS,\n        )} ${TIME_ZONE}`\n      : undefined\n\n  const showTooltip = (event: any, d: any) => {\n    setTooltip({\n      data: d,\n      mode: 'nftId',\n      x: event.currentTarget.offsetLeft,\n      y: event.currentTarget.offsetTop,\n    })\n  }\n\n  const hideTooltip = () => {\n    setTooltip(undefined)\n  }\n\n  const renderHeaderContent = () => {\n    const { issuer } = data!\n    return (\n      <div className=\"section nft-header-container\">\n        <div className=\"nft-info-container\">\n          <div className=\"values\">\n            <div className=\"title\">{t('issuer_address')}</div>\n            <div className=\"value\">\n              <div className=\"nft-issuer\">\n                <Account account={issuer!} />\n              </div>\n            </div>\n          </div>\n        </div>\n        <div className=\"nft-bottom-container\">\n          <div className=\"details\">\n            <h2>{t('details')}</h2>\n            <Details\n              data={{\n                ...data,\n                domain: accountData?.domain,\n                minted: mintedDate,\n              }}\n            />\n          </div>\n          <div className=\"settings\">\n            <h2 className=\"title\">{t('settings')}</h2>\n            <Settings flags={data!.flags!} />\n          </div>\n        </div>\n      </div>\n    )\n  }\n\n  return (\n    <div className=\"nft-token-header\">\n      <div className=\"section\">\n        {!loading && (\n          <div className=\"nft-box-header\">\n            <div className=\"token-title\">\n              NFT ID\n              <div className=\"badge\">NFT</div>\n            </div>\n            <div\n              className=\"title-content\"\n              onMouseOver={(e) => showTooltip(e, { tokenId })}\n              onFocus={() => {}}\n              onMouseLeave={hideTooltip}\n            >\n              {tokenId}\n            </div>\n          </div>\n        )}\n      </div>\n      <div className=\"box-content\">\n        {loading ? <Loader /> : renderHeaderContent()}\n      </div>\n      <Tooltip tooltip={tooltip} />\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/NFT/NFTHeader/Settings.tsx",
    "content": "import './styles.scss'\nimport { useTranslation } from 'react-i18next'\nimport { TokenTableRow } from '../../shared/components/TokenTableRow'\n\ninterface Props {\n  flags: string[]\n}\n\nexport const Settings = ({ flags }: Props) => {\n  const { t } = useTranslation()\n\n  const burnable = flags.includes('lsfBurnable') ? 'enabled' : 'disabled'\n  const onlyXRP = flags.includes('lsfOnlyXRP') ? 'enabled' : 'disabled'\n  const transferable = flags.includes('lsfTransferable')\n    ? 'enabled'\n    : 'disabled'\n\n  return (\n    <table className=\"token-table\">\n      <tbody>\n        <TokenTableRow label={t('burnable')} value={burnable} />\n        <TokenTableRow label={t('only_xrp')} value={onlyXRP} />\n        <TokenTableRow label={t('transferable')} value={transferable} />\n      </tbody>\n    </table>\n  )\n}\n"
  },
  {
    "path": "src/containers/NFT/NFTHeader/styles.scss",
    "content": "@use '../../shared/css/variables' as *;\n@use '../../shared/css/table';\n\n.nft-header-container {\n  .nft-bottom-container {\n    display: flex;\n    flex-direction: column;\n    padding-top: 64px;\n\n    @include for-size(desktop-up) {\n      flex-direction: row;\n      padding-top: 80px;\n    }\n\n    .details {\n      width: 100%;\n      @include for-size(desktop-up) {\n        width: 490px;\n      }\n    }\n\n    .settings {\n      width: 100%;\n      @include for-size(desktop-up) {\n        width: 650px;\n      }\n    }\n  }\n\n  .nft-info-container {\n    display: flex;\n    flex-direction: column;\n    justify-content: space-between;\n    margin-top: 68px;\n\n    @include for-size(desktop-up) {\n      flex-direction: row;\n      margin-top: 80px;\n    }\n\n    .values {\n      display: flex;\n      flex-direction: row;\n      justify-content: space-between;\n      margin-bottom: 18px;\n      color: $white;\n\n      @include for-size(desktop-up) {\n        flex-direction: column;\n        margin-bottom: 0;\n      }\n\n      .title {\n        padding-bottom: 4px;\n        margin-bottom: 4.5px;\n        color: $black-40;\n        font-size: 14px;\n        text-transform: uppercase;\n        @include semibold;\n      }\n\n      .value {\n        display: flex;\n\n        .nft-issuer {\n          margin: auto;\n          color: $white;\n          font-size: 18px;\n          font-style: normal;\n          line-height: 125%;\n          text-align: right;\n          text-decoration: none;\n          @include bold;\n        }\n\n        .copy {\n          width: 24px;\n          height: 24px;\n          flex: none;\n          flex-grow: 0;\n          order: 1;\n          margin-left: 10px;\n        }\n      }\n    }\n  }\n}\n\n.nft-token-header {\n  width: 100%;\n  margin-bottom: 16px;\n\n  .nft-box-header {\n    display: flex;\n    flex-direction: column;\n    align-items: flex-start;\n    margin-top: 0;\n    text-align: left;\n\n    .title-content {\n      overflow: hidden;\n      width: 100%;\n      min-width: 0;\n      min-height: 0;\n      padding-top: 0;\n      margin-top: 0;\n      margin-bottom: 0;\n      color: $white;\n      font-size: 24px;\n      text-overflow: ellipsis;\n      white-space: nowrap;\n      @include bold;\n    }\n\n    .token-title {\n      display: flex;\n      flex-direction: row;\n      align-items: center;\n      padding-bottom: 4px;\n      color: $black-40;\n      font-size: 14px;\n      text-transform: uppercase;\n\n      @include semibold;\n\n      .badge {\n        background: $nft;\n        color: $white;\n      }\n    }\n\n    img {\n      width: 24px;\n      height: 24px;\n      margin-left: 16px;\n      object-fit: contain;\n    }\n  }\n\n  .box-content {\n    min-height: 100px;\n    padding-bottom: 20px;\n  }\n}\n"
  },
  {
    "path": "src/containers/NFT/NFTHeader/test/Details.test.js",
    "content": "import { render } from '@testing-library/react'\nimport { I18nextProvider } from 'react-i18next'\nimport { BrowserRouter } from 'react-router'\nimport { Details } from '../Details'\nimport i18n from '../../../../i18n/testConfig'\n\ndescribe('NFT Details container', () => {\n  const dataDefault = {\n    NFTId: '0000000025CC40A6A240DB42512BA22826B903A785EE2FA512C5D5A70000000C',\n    ledgerIndex: 2436210,\n    owner: 'rhSigFwZ9UnbiKbpaco8aSQUsNFXJVz51W',\n    isBurned: true,\n    flags: ['lsfBurnable', 'lsfOnlyXRP'],\n    transferFee: 0,\n    issuer: 'rhSigFwZ9UnbiKbpaco8aSQUsNFXJVz51W',\n    NFTTaxon: 0,\n    NFTSerial: 12,\n    uri: 'ipfs://bafybeigdyrzt5sfp7udm7hu76uh7y26nf4dfuylqabf3oclgtqy55fbzdi',\n    validated: true,\n    status: 'success',\n    warnings: [\n      \"This is a clio server. clio only serves validated data. If you want to talk to rippled, include 'ledger_index':'current' in your request\",\n    ],\n    minted: undefined,\n    domain: '123456',\n  }\n\n  const renderDetails = (data = dataDefault) =>\n    render(\n      <I18nextProvider i18n={i18n}>\n        <BrowserRouter>\n          <Details data={data} />\n        </BrowserRouter>\n      </I18nextProvider>,\n    )\n\n  it('renders without crashing', () => {\n    renderDetails()\n  })\n\n  it('renders defined fields', () => {\n    const { container } = renderDetails()\n    expect(container.querySelectorAll('.row').length).toEqual(7)\n    expect(container.textContent).toEqual(\n      expect.stringContaining(\n        'ipfs://bafybeigdyrzt5sfp7udm7hu76uh7y26nf4dfuylqabf3oclgtqy55fbzdi',\n      ),\n    )\n    expect(container.textContent).toEqual(\n      expect.stringContaining('rhSigFwZ9UnbiKbpaco8aSQUsNFXJVz51W'),\n    )\n  })\n})\n"
  },
  {
    "path": "src/containers/NFT/NFTHeader/test/NFTHeader.test.js",
    "content": "import { render, fireEvent, waitFor } from '@testing-library/react'\nimport { I18nextProvider } from 'react-i18next'\nimport { BrowserRouter } from 'react-router'\nimport { useQuery, QueryClientProvider } from 'react-query'\nimport { NFTHeader } from '../NFTHeader'\nimport i18n from '../../../../i18n/testConfig'\nimport { queryClient } from '../../../shared/QueryClient'\n\nconst data = {\n  NFTId: '0000000025CC40A6A240DB42512BA22826B903A785EE2FA512C5D5A70000000C',\n  ledgerIndex: 2436210,\n  owner: 'rhSigFwZ9UnbiKbpaco8aSQUsNFXJVz51W',\n  isBurned: false,\n  flags: ['lsfBurnable', 'lsfOnlyXRP'],\n  transferFee: 0,\n  issuer: 'rhSigFwZ9UnbiKbpaco8aSQUsNFXJVz51W',\n  NFTTaxon: 0,\n  NFTSerial: 12,\n  uri: 'ipfs://bafybeigdyrzt5sfp7udm7hu76uh7y26nf4dfuylqabf3oclgtqy55fbzdi',\n  validated: true,\n  status: 'success',\n  warnings: [\n    \"This is a clio server. clio only serves validated data. If you want to talk to rippled, include 'ledger_index':'current' in your request\",\n  ],\n}\n\njest.mock('react-query', () => ({\n  ...jest.requireActual('react-query'),\n  useQuery: jest.fn(),\n}))\nconst setError = jest.fn()\n\ndescribe('NFT header container', () => {\n  const renderNFTHeader = () =>\n    render(\n      <QueryClientProvider client={queryClient}>\n        <BrowserRouter>\n          <I18nextProvider i18n={i18n}>\n            <NFTHeader\n              tokenId=\"0000000025CC40A6A240DB42512BA22826B903A785EE2FA512C5D5A70000000C\"\n              setError={setError}\n            />\n          </I18nextProvider>\n        </BrowserRouter>\n      </QueryClientProvider>,\n    )\n\n  it('renders without crashing', async () => {\n    useQuery.mockImplementation(() => ({\n      data,\n      isFetching: false,\n    }))\n    renderNFTHeader()\n  })\n\n  it('renders NFT content', async () => {\n    useQuery.mockImplementation(() => ({\n      data,\n      isFetching: false,\n    }))\n    const { container } = renderNFTHeader()\n\n    expect(\n      container.textContent.includes(\n        '0000000025CC40A6A240DB42512BA22826B903A785EE2FA512C5D5A70000000C',\n      ),\n    ).toBe(true)\n    expect(\n      container.textContent.includes('rhSigFwZ9UnbiKbpaco8aSQUsNFXJVz51W'),\n    ).toBe(true)\n    expect(container.querySelectorAll('.settings').length).toBe(1)\n    expect(container.querySelectorAll('.details').length).toBe(1)\n    fireEvent.mouseOver(container.querySelector('.title-content'))\n    await waitFor(() => {\n      expect(container.querySelectorAll('.tooltip').length).toBe(1)\n    })\n  })\n\n  it('renders loader', async () => {\n    useQuery.mockImplementation(() => ({\n      data,\n      isFetching: true,\n      error: {},\n    }))\n    const { container } = renderNFTHeader()\n    expect(container.querySelectorAll('.loader').length).toEqual(1)\n  })\n})\n"
  },
  {
    "path": "src/containers/NFT/NFTHeader/test/Settings.test.js",
    "content": "import { render } from '@testing-library/react'\nimport { I18nextProvider } from 'react-i18next'\nimport { Settings } from '../Settings'\nimport i18n from '../../../../i18n/testConfig'\n\ndescribe('NFT Setttings container', () => {\n  const flags = ['lsfBurnable', 'lsfOnlyXRP']\n\n  const renderSettings = () =>\n    render(\n      <I18nextProvider i18n={i18n}>\n        <Settings flags={flags} />\n      </I18nextProvider>,\n    )\n\n  it('renders without crashing', () => {\n    renderSettings()\n  })\n\n  it('renders defined fields', () => {\n    const { container } = renderSettings()\n    expect(container.querySelectorAll('.row').length).toEqual(3)\n    expect((container.textContent.match(/enabled/g) || []).length).toEqual(2)\n    expect((container.textContent.match(/disabled/g) || []).length).toEqual(1)\n  })\n})\n"
  },
  {
    "path": "src/containers/NFT/NFTTabs/NFTTabs.tsx",
    "content": "import './styles.scss'\nimport { Tabs } from '../../shared/components/Tabs'\nimport { getBuyNFToffers, getSellNFToffers } from '../../../rippled/lib/rippled'\nimport { Offers } from './Offers'\nimport { Transactions } from './Transactions'\nimport { NFT_ROUTE } from '../../App/routes'\nimport { buildPath, useRouteParams } from '../../shared/routing'\n\ninterface Props {\n  tokenId: string\n}\n\nexport const NFTTabs = (props: Props) => {\n  const { id = '', tab = 'transactions' } = useRouteParams(NFT_ROUTE)\n  const { tokenId } = props\n\n  function renderTabs() {\n    const tabs = ['transactions', 'buy-offers', 'sell-offers']\n    const mainPath = buildPath(NFT_ROUTE, { id })\n    return <Tabs tabs={tabs} selected={tab} path={mainPath} />\n  }\n\n  function renderTransactions() {\n    switch (tab) {\n      case 'sell-offers':\n        return (\n          <Offers\n            key=\"SellOffers\"\n            tokenId={tokenId}\n            fetchOffers={getSellNFToffers}\n            offerType=\"SellOffers\"\n          />\n        )\n      case 'buy-offers':\n        return (\n          <Offers\n            key=\"BuyOffers\"\n            tokenId={tokenId}\n            fetchOffers={getBuyNFToffers}\n            offerType=\"BuyOffers\"\n          />\n        )\n      default:\n        return <Transactions tokenId={tokenId} />\n    }\n  }\n\n  return (\n    <div className=\"nft-tabs section\">\n      {renderTabs()}\n      <div className=\"tab-body\">{renderTransactions()}</div>\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/NFT/NFTTabs/Offers.tsx",
    "content": "import { useContext } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { useInfiniteQuery } from 'react-query'\nimport { Loader } from '../../shared/components/Loader'\nimport './styles.scss'\nimport NoInfo from '../../shared/images/no_info.svg'\nimport { useAnalytics } from '../../shared/analytics'\nimport SocketContext from '../../shared/SocketContext'\nimport { Amount } from '../../shared/components/Amount'\nimport '../../shared/components/TransactionTable/styles.scss' // Reuse load-more-btn\nimport { formatAmount } from '../../../rippled/lib/txSummary/formatAmount'\nimport { LoadMoreButton } from '../../shared/LoadMoreButton'\nimport { ACCOUNT_ROUTE } from '../../App/routes'\nimport { RouteLink } from '../../shared/routing'\n\ninterface Props {\n  tokenId: string\n  offerType: string\n  fetchOffers: (\n    socket: any,\n    id: string,\n    limit: number | undefined,\n    marker: any,\n  ) => Promise<any>\n}\n\nexport const Offers = (props: Props) => {\n  const { t } = useTranslation()\n  const { tokenId, fetchOffers, offerType } = props\n  const { trackException } = useAnalytics()\n  const rippledSocket = useContext(SocketContext)\n\n  const {\n    data,\n    isFetching: loading,\n    fetchNextPage,\n    hasNextPage,\n  } = useInfiniteQuery(\n    [offerType, tokenId],\n    ({ pageParam = '' }) =>\n      fetchOffers(rippledSocket, tokenId, undefined, pageParam),\n    {\n      getNextPageParam: (lastPage) => lastPage.marker,\n      onError: (_e: any) => {\n        trackException(`Cannot find ${offerType} for NFT ${tokenId}`)\n      },\n    },\n  )\n\n  const renderLoadMoreButton = () =>\n    hasNextPage && <LoadMoreButton onClick={() => fetchNextPage()} />\n\n  const renderOffer = (d: any) => {\n    const { amount, owner, nft_offer_index: offerIndex } = d\n    return (\n      <tr key={offerIndex}>\n        <td className=\"offer-id text-truncate\" title={offerIndex}>\n          {offerIndex}\n        </td>\n        <td className=\"owner text-truncate\">\n          <RouteLink to={ACCOUNT_ROUTE} params={{ id: owner }}>\n            {owner}\n          </RouteLink>\n        </td>\n        <td className=\"amount right\">\n          <Amount value={formatAmount(amount)} />\n        </td>\n      </tr>\n    )\n  }\n\n  const renderOffers = () => (\n    <div className=\"offers-table\">\n      <table className=\"basic\">\n        <thead>\n          <tr>\n            <th className=\"offer-id\">{t('offer_index')}</th>\n            <th className=\"owner\">{t('owner')}</th>\n            <th className=\"amount right\">{t('amount')}</th>\n          </tr>\n        </thead>\n        <tbody>\n          {data ? (\n            data.pages.map((page: any) => page.offers.map(renderOffer))\n          ) : (\n            <tr key=\"noInfo\" className=\"no-info-panel\">\n              <td colSpan={3}>\n                <div className=\"no-info-content\">\n                  {offerType === 'BuyOffers'\n                    ? t('no_buy_offers')\n                    : t('no_sell_offers')}\n                  <NoInfo className=\"no-info-img\" alt=\"NoInfo\" />\n                </div>\n              </td>\n            </tr>\n          )}\n        </tbody>\n      </table>\n      {loading ? <Loader /> : renderLoadMoreButton()}\n    </div>\n  )\n\n  return <div>{loading ? <Loader /> : renderOffers()}</div>\n}\n"
  },
  {
    "path": "src/containers/NFT/NFTTabs/Transactions.tsx",
    "content": "import { useContext } from 'react'\nimport { useInfiniteQuery } from 'react-query'\nimport './styles.scss'\nimport SocketContext from '../../shared/SocketContext'\nimport { getNFTTransactions } from '../../../rippled/NFTTransactions'\nimport { TransactionTable } from '../../shared/components/TransactionTable/TransactionTable'\n\ninterface Props {\n  tokenId: string\n}\n\nexport const Transactions = (props: Props) => {\n  const { tokenId } = props\n  const rippledSocket = useContext(SocketContext)\n\n  const {\n    data,\n    isFetching: loading,\n    fetchNextPage,\n    hasNextPage,\n  } = useInfiniteQuery(\n    ['fetchTransactions', tokenId],\n    ({ pageParam = '' }) =>\n      getNFTTransactions(rippledSocket, tokenId, undefined, pageParam),\n    {\n      getNextPageParam: (lastPage) => lastPage.marker,\n    },\n  )\n\n  const renderListContents = () => {\n    const flatData = data?.pages?.map((page: any) => page.transactions).flat()\n    return (\n      <TransactionTable\n        loading={loading}\n        onLoadMore={() => fetchNextPage()}\n        transactions={flatData}\n        hasAdditionalResults={hasNextPage}\n      />\n    )\n  }\n\n  return renderListContents()\n}\n"
  },
  {
    "path": "src/containers/NFT/NFTTabs/styles.scss",
    "content": "@use '../../shared/css/variables' as *;\n@use '../../shared/css/table';\n\n.nft-tabs {\n  margin-top: 60px;\n}\n\n.offers-table {\n  position: relative;\n  min-height: 150px;\n\n  table {\n    .no-info-panel {\n      color: $black-40;\n      font-size: 14px;\n      font-weight: 400;\n      line-height: 150%;\n      text-align: center;\n\n      .no-info-content {\n        display: flex;\n        flex-direction: column;\n\n        .no-info-img {\n          max-width: 100%;\n          height: auto;\n          margin: 10px auto;\n        }\n      }\n    }\n\n    .offer-id {\n      width: 55%;\n      padding-left: 32px;\n\n      @include for-size(tablet-portrait-up) {\n        max-width: 140px;\n      }\n\n      @include for-size(big-desktop-up) {\n        max-width: 180px;\n      }\n    }\n\n    .amount {\n      display: table-cell;\n      width: 15%;\n      padding-right: 32px;\n      @include medium;\n\n      span.amount {\n        padding: 0;\n      }\n    }\n\n    .owner {\n      display: table-cell;\n      width: 30%;\n      min-width: 0;\n      @include for-size(tablet-portrait-up) {\n        max-width: 80px;\n      }\n\n      @include for-size(big-desktop-up) {\n        max-width: 120px;\n      }\n      @include medium;\n    }\n    @include for-size(tablet-landscape-up) {\n      .offer-id {\n        display: table-cell;\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "src/containers/NFT/NFTTabs/test/NFTTabs.test.js",
    "content": "import { render } from '@testing-library/react'\nimport { Route } from 'react-router'\nimport { NFTTabs } from '../NFTTabs'\nimport i18n from '../../../../i18n/testConfig'\nimport { QuickHarness } from '../../../test/utils'\nimport { NFT_ROUTE } from '../../../App/routes'\n\ndescribe('NFT Transactions tab container', () => {\n  const nftId =\n    '000800011C7D8ED1D715A0017E41BF9499ECC17E7FB666320000099B00000000'\n\n  const renderNFTTabs = (tab = 'transactions') =>\n    render(\n      <QuickHarness i18n={i18n} initialEntries={[`/nft/${nftId}/${tab}`]}>\n        <Route path={NFT_ROUTE.path} element={<NFTTabs />} />\n      </QuickHarness>,\n    )\n\n  it('renders without crashing', () => {\n    renderNFTTabs()\n  })\n\n  it('renders transactions tab', () => {\n    const { container } = renderNFTTabs()\n    expect(container.querySelectorAll('.tabs').length).toBe(1)\n    const tabs = container.querySelectorAll('a.tab')\n    expect(tabs.length).toBe(3)\n    expect(tabs[0].getAttribute('title')).toBe('transactions')\n    expect(tabs[1].getAttribute('title')).toBe('buy_offers')\n    expect(tabs[2].getAttribute('title')).toBe('sell_offers')\n    expect(container.querySelector('a.tab.selected').textContent).toEqual(\n      'transactions',\n    )\n  })\n\n  it('renders buy offers tab', () => {\n    const { container } = renderNFTTabs('buy-offers')\n    expect(container.querySelector('a.tab.selected').textContent).toEqual(\n      'buy_offers',\n    )\n  })\n\n  it('renders sell offers tab', () => {\n    const { container } = renderNFTTabs('sell-offers')\n    expect(container.querySelector('a.tab.selected').textContent).toEqual(\n      'sell_offers',\n    )\n  })\n})\n"
  },
  {
    "path": "src/containers/NFT/NFTTabs/test/Offers.test.js",
    "content": "import { render } from '@testing-library/react'\nimport { I18nextProvider } from 'react-i18next'\nimport { BrowserRouter } from 'react-router'\nimport { useInfiniteQuery, QueryClientProvider } from 'react-query'\nimport { Offers } from '../Offers'\nimport i18n from '../../../../i18n/testConfig'\nimport { queryClient } from '../../../shared/QueryClient'\n\nconst data = {\n  pages: [\n    {\n      limit: 50,\n      marker:\n        '99511000B8DD99BC26E4EAF4950A4D3828154C32FF87E488CDF97090FF50C7E3',\n      nft_id:\n        '000800011C7D8ED1D715A0017E41BF9499ECC17E7FB666320000099B00000000',\n      offers: [\n        {\n          amount: '43',\n          flags: 1,\n          nft_offer_index:\n            '04A971FB801C8EDD9B839F5814A7996441303C1E9BB112BFC239A803D614AA23',\n          owner: 'rsbeLHcGyFjt2oQsgoao9s3p5BLhP4CdMo',\n        },\n        {\n          amount: '43',\n          flags: 1,\n          nft_offer_index:\n            '0758BE16FBC30B823F4C80E46378F7FEA4CCE3115EB9637F73211ADD1E17C298',\n          owner: 'rsbeLHcGyFjt2oQsgoao9s3p5BLhP4CdMo',\n        },\n      ],\n    },\n  ],\n  pageParams: [null],\n}\n\njest.mock('react-query', () => ({\n  ...jest.requireActual('react-query'),\n  useInfiniteQuery: jest.fn(),\n}))\nconst fetchOffers = jest.fn()\n\ndescribe('NFT Offers container', () => {\n  const renderOffers = () =>\n    render(\n      <QueryClientProvider client={queryClient}>\n        <BrowserRouter>\n          <I18nextProvider i18n={i18n}>\n            <Offers\n              tokenId=\"0008000053CB74A272C39586ACD55AEC7594A05003AB08830000099B00000000\"\n              fetchOffers={fetchOffers}\n              offerType=\"Offers\"\n            />\n          </I18nextProvider>\n        </BrowserRouter>\n      </QueryClientProvider>,\n    )\n\n  it('renders without crashing', () => {\n    useInfiniteQuery.mockImplementation(() => ({\n      data,\n      isFetching: false,\n      error: {},\n    }))\n    renderOffers()\n  })\n\n  it('renders table content', () => {\n    useInfiniteQuery.mockImplementation(() => ({\n      data,\n      isFetching: false,\n      error: {},\n    }))\n    const { container } = renderOffers()\n    expect(container.querySelectorAll('tr').length).toEqual(3)\n    expect(container.querySelectorAll('a').length).toEqual(2)\n    expect(container.textContent.includes('0.000043')).toBe(true)\n    expect(\n      container.textContent.includes(\n        '04A971FB801C8EDD9B839F5814A7996441303C1E9BB112BFC239A803D614AA23',\n      ),\n    ).toBe(true)\n    expect(\n      container.textContent.includes(\n        '0758BE16FBC30B823F4C80E46378F7FEA4CCE3115EB9637F73211ADD1E17C298',\n      ),\n    ).toBe(true)\n    expect(container.querySelectorAll('.load-more-btn').length).toEqual(0)\n  })\n\n  it('renders loader', () => {\n    useInfiniteQuery.mockImplementation(() => ({\n      data,\n      isFetching: true,\n      error: {},\n    }))\n    const { container } = renderOffers()\n    expect(container.querySelectorAll('.loader').length).toEqual(1)\n  })\n\n  it('renders no information warning when there is no data', () => {\n    useInfiniteQuery.mockImplementation(() => ({\n      data: undefined,\n      isFetching: false,\n      error: {},\n    }))\n    const { container } = renderOffers()\n    expect(container.querySelectorAll('.no-info-content').length).toEqual(1)\n  })\n\n  it('renders load more button', () => {\n    useInfiniteQuery.mockImplementation(() => ({\n      data: undefined,\n      isFetching: false,\n      error: {},\n      hasNextPage: true,\n    }))\n    const { container } = renderOffers()\n    expect(container.querySelectorAll('.load-more-btn').length).toEqual(1)\n  })\n})\n"
  },
  {
    "path": "src/containers/NFT/NFTTabs/test/Transactions.test.js",
    "content": "import { render } from '@testing-library/react'\nimport { I18nextProvider } from 'react-i18next'\nimport { BrowserRouter } from 'react-router'\nimport { useInfiniteQuery, QueryClientProvider } from 'react-query'\nimport { Transactions } from '../Transactions'\nimport i18n from '../../../../i18n/testConfig'\nimport { queryClient } from '../../../shared/QueryClient'\n\njest.mock('react-query', () => ({\n  ...jest.requireActual('react-query'),\n  useInfiniteQuery: jest.fn(),\n}))\n\ndescribe('NFT Offers container', () => {\n  const renderTransactions = () =>\n    render(\n      <QueryClientProvider client={queryClient}>\n        <BrowserRouter>\n          <I18nextProvider i18n={i18n}>\n            <Transactions tokenId=\"0008000053CB74A272C39586ACD55AEC7594A05003AB08830000099B00000000\" />\n          </I18nextProvider>\n        </BrowserRouter>\n      </QueryClientProvider>,\n    )\n\n  it('renders without crashing', () => {\n    useInfiniteQuery.mockImplementation(() => ({\n      data: {},\n      isFetching: false,\n      error: {},\n    }))\n    const { container } = renderTransactions()\n    expect(container.querySelectorAll('.transaction-table').length).toEqual(1)\n  })\n})\n"
  },
  {
    "path": "src/containers/NFT/styles.scss",
    "content": "@use '../shared/css/variables' as *;\n\n.nft-page {\n  width: 100%;\n  margin-top: 100px;\n\n  .loader {\n    min-height: 100px;\n  }\n}\n\n.nft-warning {\n  font-size: 14px;\n  text-align: center;\n}\n"
  },
  {
    "path": "src/containers/NFT/test/NFT.test.js",
    "content": "import * as React from 'react'\nimport { render } from '@testing-library/react'\nimport { Route } from 'react-router'\nimport { NFT } from '../NFT'\nimport i18n from '../../../i18n/testConfig'\nimport { QuickHarness } from '../../test/utils'\nimport { NFT_ROUTE } from '../../App/routes'\n\ndescribe('NFT container', () => {\n  const nftId =\n    '000800011C7D8ED1D715A0017E41BF9499ECC17E7FB666320000099B00000000'\n\n  const renderNFT = (nft = undefined) =>\n    render(\n      <QuickHarness i18n={i18n} initialEntries={[`/nft/${nft}`]}>\n        <Route path={NFT_ROUTE.path} element={<NFT />} />\n      </QuickHarness>,\n    )\n\n  it('renders without crashing', () => {\n    renderNFT(nftId)\n  })\n\n  it('renders children', () => {\n    const { container } = renderNFT(nftId)\n    // NFTHeader and NFTTabs wrapper elements are rendered as part of the component tree\n    // Note: .nft-header-container is only rendered when data is loaded, not during loading state\n    expect(container.querySelector('.nft-token-header')).toBeInTheDocument()\n    expect(container.querySelector('.nft-tabs')).toBeInTheDocument()\n  })\n\n  it('does not render when no nft provided', () => {\n    const { container } = renderNFT()\n    expect(\n      container.querySelector('.nft-header-container'),\n    ).not.toBeInTheDocument()\n    expect(container.querySelector('.nft-tabs')).not.toBeInTheDocument()\n  })\n\n  it('renders error', () => {\n    jest.mock('../NFTHeader/NFTHeader', () => ({\n      NFTHeader: ({ setError }) => {\n        setError(404)\n      },\n    }))\n\n    const { container } = renderNFT('something')\n    expect(container.querySelector('.no-match')).toBeInTheDocument()\n  })\n})\n"
  },
  {
    "path": "src/containers/Network/BarChartVersion.tsx",
    "content": "import { useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport {\n  BarChart,\n  Bar,\n  XAxis,\n  YAxis,\n  Tooltip,\n  TooltipProps,\n  Label,\n  ResponsiveContainer,\n  Text,\n  Cell,\n} from 'recharts'\nimport { Loader } from '../shared/components/Loader'\nimport {\n  PURPLE,\n  GREY_600,\n  GREY_800,\n  GREEN_500,\n  PURPLE_500,\n  GREEN_800,\n  PURPLE_700,\n  GREY_0,\n  GREY_400,\n} from '../shared/utils'\nimport './css/barchart.scss'\n\ninterface Props {\n  data: any[]\n  stableVersion: string | null\n}\n\ninterface LegendProps {\n  stableVersion: string | null\n}\n\n// TODO: figure out a better way to import this from recharts\n// copied from https://github.com/recharts/recharts/blob/master/src/component/DefaultTooltipContent.tsx\ntype ValueType = number | string | Array<number | string>\ntype NameType = number | string\n\nconst CustomTooltip = ({\n  active,\n  payload,\n  label,\n}: TooltipProps<ValueType, NameType>) => {\n  const { t } = useTranslation()\n  if (active) {\n    const valCount = payload?.[0]?.payload?.validatorCount ?? 0\n    const valPercent = payload?.[0]?.payload?.validatorPercent.toFixed(2) ?? 0\n    const nodeCount = payload?.[0]?.payload?.nodeCount ?? 0\n    const nodePercent = payload?.[0]?.payload?.nodePercent.toFixed(2) ?? 0\n    return (\n      <div className=\"custom-tooltip\">\n        <p className=\"label\">{t('version_display', { version: label })}</p>\n        <p className=\"value\">\n          {t('validator_count', {\n            val_count: `${valCount} (${valPercent}%)`,\n          })}\n        </p>\n        <p className=\"value\">\n          {t('node_count', {\n            node_count: `${nodeCount} (${nodePercent}%)`,\n          })}\n        </p>\n      </div>\n    )\n  }\n  return null\n}\n\nconst CustomLegend = (props: LegendProps) => {\n  const { stableVersion } = props\n  const { t } = useTranslation()\n  return (\n    <div className=\"custom-legend\">\n      <div className=\"legend-color\">\n        <div className=\"segment\">\n          <span className=\"icon vals\" />\n          <span className=\"text\">{t('validators')}</span>\n        </div>\n        <div className=\"segment\">\n          <span className=\"icon nodes\" />\n          <span className=\"text\">{t('nodes')}</span>\n        </div>\n      </div>\n      <div className=\"legend-stable\">\n        <div className=\"stable-text\">\n          <span>{t('current_stable_version')}:</span>\n          <strong className=\"stable\">\n            {' '}\n            {t('stable_version', { stableVersion })}{' '}\n          </strong>\n        </div>\n      </div>\n    </div>\n  )\n}\n\nconst stableColorCode = (\n  type: string,\n  dataLabel: string,\n  stableVersion: string,\n) => {\n  if (dataLabel === stableVersion) {\n    if (type === 'validators') return GREEN_500\n    return PURPLE_500\n  }\n  if (type === 'validators') return GREEN_800\n  return PURPLE_700\n}\n\nconst BarChartVersion = (props: Props) => {\n  const { data, stableVersion } = props\n  const { t } = useTranslation()\n  const [showTooltips, setShowTooltips] = useState(false)\n  const customTick = (e) => {\n    const {\n      payload: { value },\n    } = e\n    const color = value === stableVersion ? GREY_0 : GREY_400\n    e.fill = color\n    if (value === stableVersion)\n      /* eslint-disable react/jsx-props-no-spreading */\n      return (\n        <Text {...e} style={{ fontWeight: 700 }}>\n          {value}\n        </Text>\n      )\n    return <Text {...e}>{value}</Text>\n  }\n  return (\n    <div className=\"barchart\">\n      <CustomLegend stableVersion={stableVersion} />\n      <ResponsiveContainer height={532} width=\"100%\">\n        <BarChart\n          data={data}\n          margin={{ top: 5, right: 20, bottom: 5, left: 0 }}\n        >\n          <XAxis\n            dataKey=\"label\"\n            angle={-65}\n            dy={30}\n            dx={-7}\n            height={90}\n            tickLine={false}\n            minTickGap={-1}\n            stroke={GREY_400}\n            tick={customTick}\n            interval={0}\n          />\n          <YAxis\n            className=\"yAxis\"\n            tickLine={false}\n            tickFormatter={(tick) => `${tick}%`}\n            stroke={GREY_400}\n          >\n            <Label\n              className=\"y-label\"\n              value={t('%_of_total_nodes_validators')}\n              angle={-90}\n              position=\"insideTop\"\n              dx={45}\n              dy={110}\n            />\n          </YAxis>\n          <Bar\n            dataKey=\"validatorPercent\"\n            barSize={30}\n            fill={PURPLE}\n            radius={[4, 4, 0, 0]}\n            isAnimationActive={false}\n            onMouseOver={() => setShowTooltips(true)}\n            onMouseLeave={() => setShowTooltips(false)}\n          >\n            {stableVersion &&\n              data.map((_entry, index) => (\n                <Cell\n                  key={data[index].label}\n                  fill={stableColorCode(\n                    'validators',\n                    data[index].label,\n                    stableVersion,\n                  )}\n                />\n              ))}\n          </Bar>\n          <Bar\n            dataKey=\"nodePercent\"\n            barSize={30}\n            fill={PURPLE}\n            radius={[4, 4, 0, 0]}\n            isAnimationActive={false}\n            onMouseOver={() => setShowTooltips(true)}\n            onMouseLeave={() => setShowTooltips(false)}\n          >\n            {stableVersion &&\n              data.map((_entry, index) => (\n                <Cell\n                  key={data[index].label}\n                  fill={stableColorCode(\n                    'nodes',\n                    data[index].label,\n                    stableVersion,\n                  )}\n                />\n              ))}\n          </Bar>\n          <Tooltip\n            content={<CustomTooltip />}\n            cursor={false}\n            offset={-10}\n            wrapperStyle={{\n              backgroundColor: GREY_600,\n              borderRadius: 8,\n              border: `1px solid ${GREY_800}`,\n              opacity: showTooltips ? '100%' : '0',\n            }}\n          />\n        </BarChart>\n      </ResponsiveContainer>\n      {!(data !== null && data.length > 0 && stableVersion) && <Loader />}\n    </div>\n  )\n}\n\nexport default BarChartVersion\n"
  },
  {
    "path": "src/containers/Network/Hexagons.tsx",
    "content": "import { useEffect, useState } from 'react'\nimport { useWindowSize } from 'usehooks-ts'\n\nimport { hexbin } from 'd3-hexbin'\nimport { Loader } from '../shared/components/Loader'\nimport { Tooltip, useTooltip } from '../shared/components/Tooltip'\nimport './css/hexagons.scss'\nimport { ValidatorResponse } from '../shared/vhsTypes'\n\nconst MAX_WIDTH = 1200\nconst getDimensions = (width) => ({\n  width,\n  height: Math.min(width, MAX_WIDTH) / 2.4,\n  radius: Math.min(width, MAX_WIDTH) / 25,\n})\n\ntype Hexagon = {\n  cookie?: string\n  pubkey?: string\n  ledger_hash: string\n  x: number\n  y: number\n}\n\nconst prepareHexagons = (\n  data,\n  list: Record<string, ValidatorResponse>,\n  height: number,\n  radius: number,\n  prev: Hexagon[] = [],\n) => {\n  const maxRows = Math.ceil(height / ((radius * 3) / 2))\n  const hexWidth = radius * Math.sqrt(3)\n  let row = 0\n  let column = 0\n  let max = 0\n\n  return data.map((d, i) => {\n    const pos = {\n      x: column * hexWidth + (row % 2 ? hexWidth / 2 : 0),\n      y: (row * radius * 3) / 2,\n    }\n\n    if (row === maxRows || (column === 0 && row === max)) {\n      max += 1\n      row = 0\n      column = max\n    } else {\n      column -= 1\n      row += 1\n    }\n\n    return {\n      ...d,\n      ...pos,\n      ...list[d.pubkey],\n      prev:\n        prev[i] && prev[i]?.ledger_hash !== d.ledger_hash\n          ? prev[i]?.ledger_hash.substr(0, 6)\n          : undefined,\n    }\n  })\n}\n\nexport const Hexagons = ({\n  list,\n  data,\n}: {\n  data: any\n  list?: Record<string, ValidatorResponse>\n}) => {\n  const { width } = useWindowSize()\n  const [hexagons, setHexagons] = useState<Hexagon[]>([])\n  const { width: gridWidth, height: gridHeight, radius } = getDimensions(width)\n  const { tooltip, showTooltip, hideTooltip } = useTooltip()\n  const bin = hexbin()\n    .extent([\n      [0, 0],\n      [gridWidth, gridHeight],\n    ])\n    .radius(radius)\n\n  useEffect(() => {\n    if (width > 0 && list) {\n      setHexagons((prevHexagons) =>\n        prepareHexagons(\n          Object.values(data),\n          list,\n          gridHeight,\n          radius,\n          prevHexagons,\n        ),\n      )\n    }\n  }, [data, list, width, gridHeight, radius])\n\n  const renderHexagon = (d, theHex) => {\n    const { cookie, pubkey, ledger_hash: ledgerHash } = d\n    const fill = `#${ledgerHash.substr(0, 6)}`\n    const strokeWidth = theHex.radius() / 16\n    return (\n      <g\n        key={`${pubkey}${cookie}${ledgerHash}`}\n        transform={`translate(${d.x},${d.y})`}\n        className=\"hexagon updated\"\n        onMouseOver={(e) =>\n          showTooltip('validator', e, { ...d, v: list?.[d.pubkey] })\n        }\n        onFocus={() => {}}\n        onMouseLeave={hideTooltip}\n      >\n        <path\n          d={theHex.hexagon(theHex.radius() * 0.85)}\n          fill={fill}\n          stroke={fill}\n          strokeWidth={strokeWidth}\n          strokeLinejoin=\"round\"\n        />\n      </g>\n    )\n  }\n\n  return (\n    <div className=\"validators-container\">\n      <div className=\"validators\">\n        <svg width={gridWidth} height={gridHeight}>\n          <g className=\"mesh\">\n            <path\n              fill=\"none\"\n              d={bin.mesh()}\n              strokeWidth={bin.radius() / 8}\n              strokeLinejoin=\"round\"\n            />\n          </g>\n          <g className=\"hexagons\">\n            {hexagons.map((hexagon) => renderHexagon(hexagon, bin))}\n          </g>\n        </svg>\n        {hexagons?.length === 0 && <Loader />}\n      </div>\n      <Tooltip tooltip={tooltip} />\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/Network/Map.tsx",
    "content": "import axios from 'axios'\nimport { useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { useQuery } from 'react-query'\nimport { geoPath, geoNaturalEarth1 } from 'd3-geo'\nimport { scaleLinear } from 'd3-scale'\nimport { hexbin } from 'd3-hexbin'\nimport { feature } from 'topojson-client'\nimport { useWindowSize } from 'usehooks-ts'\nimport { Loader } from '../shared/components/Loader'\nimport './css/map.scss'\n\nconst MAX_WIDTH = 1200\nconst BAR_COUNT = 30\nconst HEX_RADIUS_FACTOR = 40\n\nexport interface MapProps {\n  locations?: any[]\n}\n\nexport const Map = ({ locations = undefined }: MapProps) => {\n  const [tooltip, setTooltip] = useState<{\n    count: number\n    x: number\n    y: number\n  } | null>(null)\n  const { t } = useTranslation()\n  const { width: propsWidth } = useWindowSize()\n  const { data: countries } = useQuery('countries', () =>\n    axios\n      .get('/countries.json')\n      .then(\n        (response) =>\n          feature(response.data, response.data.objects.countries).features,\n      ),\n  )\n\n  const getProjection = (width, height) =>\n    geoNaturalEarth1()\n      .scale(width / 4.8)\n      .translate([width / 2.2, height / 1.7])\n\n  const getHexbin = (offset, width, height) =>\n    hexbin()\n      .extent([\n        [0, 0],\n        [offset * 2 + width, height],\n      ])\n      .radius(Math.sqrt(width / HEX_RADIUS_FACTOR))\n\n  const getDimensions = () => {\n    const pageWidth = propsWidth\n    const width = Math.min(pageWidth, MAX_WIDTH)\n    return {\n      width,\n      height: width / 2,\n    }\n  }\n\n  const renderMap = (width, height) => {\n    const offset = (propsWidth - width) / 2\n    const projection = getProjection(width, height)\n    const hex = getHexbin(offset, width, height)\n    const bins = hex(\n      locations?.map((node) => projection([node.long, node.lat])),\n    )\n    const counts = bins.map((bin) => bin.length)\n    const max = counts.length ? Math.max(...counts) : 0\n    // @ts-ignore -- d3-color allows strings to be returned\n    const color: Function<string> = scaleLinear()\n      .domain([1, max])\n      // @ts-ignore -- d3-color allows strings to be passed in\n      .range(['#FF6719', '#7919FF'])\n    const bars: { index: number; color: any }[] = []\n    let i = 0\n    const BAR_WIDTH = Math.ceil(width / (BAR_COUNT * 8))\n    const BAR_HEIGHT = BAR_WIDTH / 1.5\n    const LEGEND_OFFSET_X = BAR_WIDTH * 2 + offset\n    const LEGEND_OFFSET_Y = BAR_WIDTH * 2\n    const tooltipText = tooltip ? `${tooltip.count} ${t('nodes')}` : ''\n\n    while (i < BAR_COUNT) {\n      const increment = (max / BAR_COUNT) * i + 1\n      bars.push({\n        index: i,\n        color: color(increment),\n      })\n      i += 1\n    }\n\n    return (\n      <>\n        <g className=\"map\">\n          {countries?.map((d) => (\n            <path\n              key={`path-${d.id}-${d.geometry.coordinates[0].length}`}\n              d={geoPath().projection(projection)(d)}\n              transform={`translate(${offset},0)`}\n              className=\"country\"\n              strokeWidth={2}\n            />\n          ))}\n        </g>\n        <g className=\"mesh\">\n          <path\n            d={hex.mesh()}\n            stroke=\"black\"\n            strokeOpacity=\"0.2\"\n            strokeWidth=\"2\"\n            fillOpacity=\"0\"\n          />\n        </g>\n        {max && (\n          <g className=\"legend\">\n            {bars.map((bar) => (\n              <rect\n                key={`bar-${bar.index}`}\n                width={BAR_WIDTH}\n                x={bar.index * BAR_WIDTH + LEGEND_OFFSET_X}\n                y={height - LEGEND_OFFSET_Y}\n                height={BAR_HEIGHT}\n                fill={bar.color}\n              />\n            ))}\n            <text\n              className=\"min\"\n              textAnchor=\"start\"\n              y={height - LEGEND_OFFSET_Y * 1.2 - 8}\n              x={LEGEND_OFFSET_X}\n            >\n              1\n            </text>\n            <text\n              className=\"max\"\n              textAnchor=\"end\"\n              y={height - LEGEND_OFFSET_Y * 1.2 - 8}\n              x={BAR_WIDTH * BAR_COUNT + LEGEND_OFFSET_X}\n            >\n              {max}\n            </text>\n          </g>\n        )}\n        <g className=\"hexagons\">\n          {bins.map((bin) => (\n            <path\n              key={`hex-${bin.x}${bin.y}`}\n              d={hex.hexagon(hex.radius() * 0.9)}\n              transform={`translate(${bin.x + offset},${bin.y})`}\n              fill={color(bin.length)}\n              fillOpacity=\"1\"\n              className=\"node\"\n              onMouseOver={() => {\n                setTooltip({\n                  count: bin.length,\n                  x: bin.x,\n                  y: bin.y,\n                })\n              }}\n              onFocus={() => {}}\n              onKeyUp={() => {}}\n              onMouseLeave={() => {\n                setTooltip(null)\n              }}\n            />\n          ))}\n        </g>\n        {tooltip && (\n          <g className=\"tooltip\">\n            <rect\n              rx=\"2\"\n              ry=\"2\"\n              x={tooltip.x + offset + 10}\n              y={tooltip.y - 6}\n              width={tooltipText.length * 8 + 4}\n              height=\"15\"\n            />\n            <text x={tooltip.x + offset + 12} y={tooltip.y + 6}>\n              {tooltipText}\n            </text>\n          </g>\n        )}\n      </>\n    )\n  }\n\n  const { width, height } = getDimensions()\n  return (\n    <div className=\"nodes-map\" style={{ height }}>\n      {!locations && <Loader />}\n      <svg width={propsWidth} height={height}>\n        {locations && renderMap(width, height)}\n      </svg>\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/Network/Nodes.tsx",
    "content": "import { useContext } from 'react'\nimport axios from 'axios'\nimport { useTranslation } from 'react-i18next'\nimport { useQuery } from 'react-query'\nimport { Map } from './Map'\nimport { NodesTable } from './NodesTable'\nimport Log from '../shared/log'\nimport {\n  FETCH_INTERVAL_ERROR_MILLIS,\n  FETCH_INTERVAL_NODES_MILLIS,\n  isEarlierVersion,\n  localizeNumber,\n} from '../shared/utils'\nimport { useLanguage } from '../shared/hooks'\nimport { NodeData, NodeResponse } from '../shared/vhsTypes'\nimport NetworkContext from '../shared/NetworkContext'\nimport './css/style.scss'\n\nexport const ledgerCompare = (a: NodeData, b: NodeData) => {\n  const aLedger = a.validated_ledger.ledger_index\n  const bLedger = b.validated_ledger.ledger_index\n  const compareVersion = isEarlierVersion(b.version, a.version) ? -1 : 1\n  return bLedger === aLedger ? compareVersion : bLedger - aLedger\n}\n\nexport const Nodes = () => {\n  const language = useLanguage()\n  const { t } = useTranslation()\n  const network = useContext(NetworkContext)\n\n  const { data } = useQuery(['fetchNodesData'], async () => fetchData(), {\n    refetchInterval: (returnedData, _) =>\n      returnedData == null\n        ? FETCH_INTERVAL_ERROR_MILLIS\n        : FETCH_INTERVAL_NODES_MILLIS,\n    enabled: !!network,\n  })\n\n  const fetchData = async () =>\n    axios\n      .get(`${process.env.VITE_DATA_URL}/topology/nodes/${network}`)\n      .then((resp) => resp.data.nodes)\n      .then((allNodes) => {\n        const nodes: NodeData[] = allNodes.map((node: NodeResponse) => ({\n          ...node,\n          version: node.version?.startsWith('rippled')\n            ? node.version.split('-').slice(1).join('-')\n            : node.version,\n          validated_ledger: {\n            ledger_index: node.complete_ledgers\n              ? Number(node.complete_ledgers.split('-')[1])\n              : 0,\n          },\n          load_factor: node.load_factor_server\n            ? Number(node.load_factor_server)\n            : null,\n        }))\n\n        nodes.sort((a: NodeData, b: NodeData) => {\n          if (a.server_state === b.server_state) {\n            return ledgerCompare(a, b)\n          }\n          if (a.server_state && !b.server_state) {\n            return -1\n          }\n          return 1\n        })\n        const nodesWithLocations = nodes.filter(\n          (node: any) => 'lat' in node && 'long' in node,\n        )\n        return {\n          nodes,\n          unmapped: nodes.length - nodesWithLocations.length,\n          locations: nodesWithLocations,\n        }\n      })\n      .catch((e) => Log.error(e))\n\n  return (\n    <div className=\"network-page\">\n      <div className=\"type\">{t('nodes')}</div>\n      {\n        // @ts-ignore - Work around for complex type assignment issues\n        <Map locations={data?.locations} />\n      }\n      <div className=\"stat\">\n        {data?.nodes && (\n          <>\n            <span>{t('nodes_found')}: </span>\n            <span>\n              {localizeNumber(data?.nodes.length, language)}\n              {data?.unmapped ? (\n                <i>\n                  {' '}\n                  ({data?.unmapped} {t('unmapped')})\n                </i>\n              ) : null}\n            </span>\n          </>\n        )}\n      </div>\n      <div className=\"wrap\">\n        <NodesTable nodes={data?.nodes} />\n      </div>\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/Network/NodesTable.tsx",
    "content": "import { FC } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { Loader } from '../shared/components/Loader'\nimport { durationToHuman } from '../shared/utils'\nimport { NodeData } from '../shared/vhsTypes'\nimport './css/nodesTable.scss'\nimport { LEDGER_ROUTE } from '../App/routes'\nimport { RouteLink } from '../shared/routing'\n\nconst renderLastLedger = (ledger) =>\n  ledger && ledger.ledger_index ? (\n    <RouteLink to={LEDGER_ROUTE} params={{ identifier: ledger.ledger_index }}>\n      {ledger.ledger_index}\n    </RouteLink>\n  ) : (\n    <i>unknown</i>\n  )\n\nconst renderLedgerHistory = (ledgers, range) => {\n  let count = 0\n  const MAX_WIDTH = 160\n  const min = Math.max(range[1] - 10000000, range[0])\n  const diff = range[1] - min\n\n  if (ledgers) {\n    const boxes = ledgers.map((l) => {\n      const [low, high] = l\n      const width = Math.min((high - low + 1) / diff, 1) * MAX_WIDTH\n      const left = Math.max((low - min) / diff, 0) * MAX_WIDTH\n      count += high - low\n      return <div key={low} style={{ left, width }} />\n    })\n\n    if (count < 0) {\n      return null\n    }\n\n    return (\n      <>\n        <div className=\"boxes\" style={{ width: MAX_WIDTH }}>\n          {boxes}\n        </div>\n        <span>{`~${durationToHuman(count * 3.55, 0)}`}</span>\n      </>\n    )\n  }\n\n  return null\n}\n\nconst formatLedgerHistory = (nodes) =>\n  nodes.map((d) => {\n    if (d.complete_ledgers != null && typeof d.complete_ledgers === 'string') {\n      const ranges = d.complete_ledgers.split(',')\n      const ledgers = ranges\n        .map((l) => {\n          const local = l.split('-')\n          const low = Number(local[0])\n          return isNaN(low) ? undefined : [low, Number(local[1] || local[0])]\n        })\n        .filter((l) => Boolean(l))\n\n      return { ...d, ledgers }\n    }\n\n    return { ...d }\n  })\n\nconst getLedgerRange = (data) => {\n  let min = Infinity\n  let max = 0\n  data.forEach((d) => {\n    if (d.ledgers) {\n      d.ledgers.forEach((l) => {\n        const [low, high] = l\n        if (low < min) {\n          min = low\n        }\n\n        if (high > max) {\n          max = high\n        }\n      })\n    }\n  })\n\n  return [min, max]\n}\n\nconst getVersion = (version) => {\n  if (version && version.includes('+')) {\n    return `${version.split('+')[0]}*`\n  }\n  return version\n}\n\nexport const NodesTable: FC<{ nodes: NodeData[] }> = ({\n  nodes: unformattedNodes,\n}) => {\n  const nodes = unformattedNodes ? formatLedgerHistory(unformattedNodes) : null\n  const ledgerRange = nodes && getLedgerRange(nodes)\n\n  const { t } = useTranslation()\n  const renderNode = (node) => (\n    <tr key={node.node_public_key}>\n      <td className=\"pubkey text-truncate\">{node.node_public_key}</td>\n      <td className=\"ip text-truncate\">{node.ip}</td>\n      <td className=\"state center\">\n        <span className={node.server_state}>{node.server_state}</span>\n      </td>\n      <td className=\"version\">{getVersion(node.version)}</td>\n      <td className=\"last-ledger\">{renderLastLedger(node.validated_ledger)}</td>\n      <td className=\"uptime\">{durationToHuman(node.uptime)}</td>\n      <td className=\"peers right\">\n        {node.inbound_count + node.outbound_count}\n      </td>\n      <td className=\"in-out\">\n        <small>\n          ({node.inbound_count}:{node.outbound_count})\n        </small>\n      </td>\n      <td className=\"ledgers\">\n        {renderLedgerHistory(node.ledgers, ledgerRange)}\n      </td>\n      <td className=\"quorum right\">{node.quorum}</td>\n      <td className=\"load-factor right\">\n        {node.load_factor && node.load_factor > 1\n          ? node.load_factor.toFixed(2)\n          : ''}\n      </td>\n      <td className=\"latency right\">\n        {node.io_latency_ms && node.io_latency_ms > 1}\n      </td>\n    </tr>\n  )\n\n  const content = nodes ? (\n    <table className=\"basic\">\n      <thead>\n        <tr>\n          <th className=\"pubkey\">{t('node_pubkey')}</th>\n          <th className=\"ip\">{t('ip')}</th>\n          <th className=\"server-state center\">{t('state')}</th>\n          <th className=\"version\">{t('rippled_version')}</th>\n          <th className=\"last-ledger\">{t('last_ledger')}</th>\n          <th className=\"uptime\">{t('uptime')}</th>\n          <th className=\"peers right\">{t('peers')}</th>\n          <th className=\"in-out\">\n            <small>{t('in_out')}</small>\n          </th>\n          <th className=\"ledgers\">{t('ledger_history')}</th>\n          <th className=\"quorum right\">{t('quorum')}</th>\n          <th className=\"load-factor right\">{t('load')}</th>\n          <th className=\"latency right\">{t('latency')}</th>\n        </tr>\n      </thead>\n      <tbody>{nodes.map(renderNode)}</tbody>\n    </table>\n  ) : (\n    <Loader />\n  )\n\n  return <div className=\"nodes-table\">{content}</div>\n}\n"
  },
  {
    "path": "src/containers/Network/UpgradeStatus.tsx",
    "content": "import { useState, useContext } from 'react'\nimport axios from 'axios'\nimport { useQuery } from 'react-query'\nimport { useTranslation } from 'react-i18next'\nimport BarChartVersion from './BarChartVersion'\nimport {\n  FETCH_INTERVAL_MILLIS,\n  FETCH_INTERVAL_ERROR_MILLIS,\n  isEarlierVersion,\n} from '../shared/utils'\nimport Log from '../shared/log'\nimport { NodeData, NodeResponse, ValidatorResponse } from '../shared/vhsTypes'\nimport NetworkContext from '../shared/NetworkContext'\nimport { ledgerCompare } from './Nodes'\nimport { Loader } from '../shared/components/Loader'\nimport './css/style.scss'\n\ninterface NodeStats {\n  nodePercent: number\n  nodeCount: number\n}\n\ninterface ValidatorStats {\n  validatorPercent: number\n  validatorCount: number\n}\n\ninterface ValidatorAggregation {\n  [label: string]: ValidatorStats\n}\n\ninterface NodeAggregation {\n  [label: string]: NodeStats\n}\n\ninterface DataAggregation extends ValidatorStats, NodeStats {\n  label: string\n}\n\nexport const aggregateValidators = (validators: ValidatorResponse[]) => {\n  let totalVals = 0\n  const aggregation: ValidatorAggregation = {}\n  validators?.forEach((validator) => {\n    if (!validator.signing_key) return\n    const version = validator.server_version\n    totalVals += 1\n    if (version) {\n      if (!aggregation[version]) {\n        aggregation[version] = { validatorCount: 0, validatorPercent: 0 }\n      }\n      aggregation[version].validatorCount += 1\n    }\n  })\n  for (const label of Object.keys(aggregation)) {\n    aggregation[label].validatorPercent =\n      totalVals > 0 ? (aggregation[label].validatorCount / totalVals) * 100 : 0\n  }\n\n  return aggregation\n}\n\nexport const aggregateNodes = (nodes: NodeResponse[]) => {\n  let totalNodes = 0\n  const aggregation: NodeAggregation = {}\n  nodes?.forEach((node) => {\n    const { version } = node\n    if (!node.node_public_key) return\n    totalNodes += 1\n    if (version) {\n      if (!aggregation[version]) {\n        aggregation[version] = { nodeCount: 0, nodePercent: 0 }\n      }\n      aggregation[version].nodeCount += 1\n    }\n  })\n  for (const label of Object.keys(aggregation)) {\n    aggregation[label].nodePercent =\n      totalNodes > 0 ? (aggregation[label].nodeCount / totalNodes) * 100 : 0\n  }\n\n  return aggregation\n}\n\nexport const aggregateData = (\n  validatorAggregation: ValidatorAggregation,\n  nodeAggregation: NodeAggregation,\n): DataAggregation[] => {\n  const combinedAggregation: { [label: string]: ValidatorStats & NodeStats } =\n    {}\n  for (const label of Object.keys(validatorAggregation)) {\n    combinedAggregation[label] = {\n      validatorPercent: validatorAggregation[label].validatorPercent,\n      validatorCount: validatorAggregation[label].validatorCount,\n      nodePercent: 0,\n      nodeCount: 0,\n    }\n  }\n\n  for (const label of Object.keys(nodeAggregation)) {\n    if (!combinedAggregation[label]) {\n      combinedAggregation[label] = {\n        validatorPercent: 0,\n        validatorCount: 0,\n        nodePercent: nodeAggregation[label].nodePercent,\n        nodeCount: nodeAggregation[label].nodeCount,\n      }\n    } else {\n      combinedAggregation[label].nodePercent =\n        nodeAggregation[label].nodePercent\n      combinedAggregation[label].nodeCount = nodeAggregation[label].nodeCount\n    }\n  }\n\n  return Object.entries(combinedAggregation)\n    .map(([label, stats]) => ({\n      label,\n      ...stats,\n    }))\n    .sort((a, b) => (isEarlierVersion(a.label, b.label) ? -1 : 1))\n}\n\n/**\n * Extracts the correct node version format from the source data.\n * (https://data.xrpl.org/v1/network/topology/nodes)\n *\n * Node versions often come in in this format:\n * rippled-[version]-[release (optional)]+[rippled hash (optional)]\n * Output format:\n * [version]-[release (optional)]\n * e.g. rippled-1.9.4+ba3c0e51455a88d76d90b996f20c0f102ac3f5a0.DEBUG should returns 1.9.4\n *      rippled-1.9.4-b1 should returns 1.9.4-b1\n *\n * @param version - The version retrieved from source data.\n * @returns - The correct version format.\n */\nconst handleNodeVersion = (version: string | undefined) => {\n  let cleanedVersion = version\n  if (version?.startsWith('rippled'))\n    cleanedVersion = `${version.split('-').slice(1).join('-')}`\n  if (version?.includes('+'))\n    cleanedVersion = `${cleanedVersion?.split('+')[0]}`\n  return cleanedVersion\n}\n\nexport const UpgradeStatus = () => {\n  const { t } = useTranslation()\n  const [validatorAggregation, setValidatorAggregation] =\n    useState<ValidatorAggregation>({})\n  const [nodeAggregation, setNodeAggregation] = useState<NodeAggregation>({})\n  const network = useContext(NetworkContext)\n\n  useQuery(\n    ['fetchUpgradeStatusData'],\n    () => {\n      fetchData()\n    },\n    {\n      refetchInterval: (returnedData, _) =>\n        returnedData == null\n          ? FETCH_INTERVAL_ERROR_MILLIS\n          : FETCH_INTERVAL_MILLIS,\n      refetchOnMount: true,\n      enabled: process.env.VITE_ENVIRONMENT !== 'custom' || !!network,\n    },\n  )\n\n  const { data: stableVersion } = useQuery(\n    ['stableVersion'],\n    () => fetchStableVersion(),\n    {\n      placeholderData: null,\n      retryDelay: (returnedData, _) =>\n        returnedData == null\n          ? FETCH_INTERVAL_ERROR_MILLIS\n          : FETCH_INTERVAL_MILLIS,\n      refetchOnMount: true,\n      enabled: process.env.VITE_ENVIRONMENT !== 'custom' || !!network,\n    },\n  )\n\n  const fetchData = () => {\n    axios\n      .get(`${process.env.VITE_DATA_URL}/validators/${network}`)\n      .then((resp) => resp.data.validators)\n      .then((validators: ValidatorResponse[]) => {\n        const newValidatorList: Record<string, ValidatorResponse> = {}\n        validators.forEach((validator) => {\n          newValidatorList[validator.signing_key] = validator\n        })\n        setValidatorAggregation(aggregateValidators(validators))\n        return Object.values(newValidatorList)\n      })\n      .catch((e) => Log.error(e))\n\n    axios\n      .get(`${process.env.VITE_DATA_URL}/topology/nodes/${network}`)\n      .then((resp) => resp.data.nodes)\n      .then((allNodes) => {\n        const nodes: NodeData[] = allNodes.map((node: NodeResponse) => ({\n          ...node,\n          version: handleNodeVersion(node.version),\n          validated_ledger: {\n            ledger_index: node.complete_ledgers\n              ? Number(node.complete_ledgers.split('-')[1])\n              : 0,\n          },\n          load_factor: node.load_factor_server\n            ? Number(node.load_factor_server)\n            : null,\n        }))\n\n        nodes.sort((a: NodeData, b: NodeData) => {\n          if (a.server_state === b.server_state) {\n            return ledgerCompare(a, b)\n          }\n          if (a.server_state && !b.server_state) {\n            return -1\n          }\n          return 1\n        })\n\n        setNodeAggregation(aggregateNodes(nodes))\n        return nodes\n      })\n      .catch((e) => Log.error(e))\n  }\n\n  const fetchStableVersion = () => {\n    const url = 'https://api.github.com/repos/XRPLF/rippled/releases'\n    return axios\n      .get(url)\n      .then(\n        (resp) =>\n          resp.data.find(\n            (release: any) => release.tag_name && !release.prerelease,\n          )?.tag_name || null,\n      )\n  }\n\n  return (\n    <div className=\"network-page\">\n      <div className=\"type\">{t('upgrade_status')}</div>\n      <div className=\"wrap\">\n        {Object.keys(validatorAggregation).length > 0 ||\n        Object.keys(nodeAggregation).length > 0 ? (\n          <div className=\"upgrade_status\">\n            <BarChartVersion\n              data={aggregateData(validatorAggregation, nodeAggregation)}\n              stableVersion={stableVersion}\n            />\n          </div>\n        ) : (\n          <Loader />\n        )}\n      </div>\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/Network/Validators.tsx",
    "content": "import './css/style.scss'\n\nimport { useContext, useMemo, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { Helmet } from 'react-helmet-async'\nimport { useQuery } from 'react-query'\nimport { getServerState } from '../../rippled/lib/rippled'\nimport { ValidatorsTable } from './ValidatorsTable'\nimport {\n  FETCH_INTERVAL_ERROR_MILLIS,\n  FETCH_INTERVAL_FEE_SETTINGS_MILLIS,\n  localizeNumber,\n} from '../shared/utils'\nimport { useLanguage } from '../shared/hooks'\nimport { Hexagons } from './Hexagons'\nimport { FeeSettings, StreamValidator } from '../shared/vhsTypes'\nimport { VALIDATORS_ROUTE } from '../App/routes'\nimport { useRouteParams } from '../shared/routing'\nimport ValidatorsTabs from './ValidatorsTabs'\nimport { useStreams, StreamsProvider } from '../shared/components/Streams'\nimport {\n  VHSValidatorsProvider,\n  useVHSValidators,\n} from '../shared/components/VHSValidators'\nimport SocketContext from '../shared/SocketContext'\nimport NetworkContext from '../shared/NetworkContext'\n\nexport const ValidatorsData = () => {\n  const rippledSocket = useContext(SocketContext)\n  const network = useContext(NetworkContext)\n\n  const language = useLanguage()\n  const { t } = useTranslation()\n  const { validators: validatorsFromValidations, metrics } = useStreams()\n  const { validators: validatorsFromVHS, unl } = useVHSValidators()\n  const [feeSettings, setFeeSettings] = useState<FeeSettings>()\n\n  const merged = useMemo(() => {\n    const fromVHS = validatorsFromVHS ?? {}\n    const fromStream = validatorsFromValidations ?? {}\n\n    if (\n      Object.keys(fromVHS).length === 0 &&\n      Object.keys(fromStream).length === 0\n    ) {\n      return []\n    }\n\n    const updated: Record<string, StreamValidator> = {}\n    const keys = new Set(Object.keys(fromVHS).concat(Object.keys(fromStream)))\n    keys.forEach((d: string) => {\n      const newData: StreamValidator = fromVHS[d] ?? fromStream[d]\n      if (\n        newData.ledger_index == null &&\n        fromStream[d] &&\n        fromStream[d].ledger_index\n      ) {\n        // VHS uses `current_index` instead of `ledger_index`\n        // If `ledger_index` isn't defined, then we're still using the VHS data,\n        // instead of the Streams data\n        newData.ledger_index = fromStream[d].ledger_index\n        newData.ledger_hash = fromStream[d].ledger_hash\n      }\n\n      updated[d] = newData\n    })\n\n    return Object.values(updated)\n  }, [validatorsFromVHS, validatorsFromValidations])\n\n  const validatorCount = useMemo(\n    () => merged && Object.keys(merged).length,\n    [merged],\n  )\n\n  const { tab = 'uptime' } = useRouteParams(VALIDATORS_ROUTE)\n\n  useQuery(['fetchFeeSettingsData'], () => fetchFeeSettingsData(), {\n    refetchInterval: (returnedData, _) =>\n      returnedData == null\n        ? FETCH_INTERVAL_ERROR_MILLIS\n        : FETCH_INTERVAL_FEE_SETTINGS_MILLIS,\n    refetchOnMount: true,\n    enabled:\n      (process.env.VITE_ENVIRONMENT !== 'custom' || !!network) &&\n      tab === 'voting',\n  })\n\n  function fetchFeeSettingsData() {\n    getServerState(rippledSocket).then((res) => {\n      setFeeSettings({\n        base_fee: res.state.validated_ledger.base_fee,\n        reserve_base: res.state.validated_ledger.reserve_base,\n        reserve_inc: res.state.validated_ledger.reserve_inc,\n      })\n    })\n  }\n\n  const Body = {\n    uptime: (\n      <ValidatorsTable validators={merged} metrics={metrics} tab=\"uptime\" />\n    ),\n    voting: (\n      <ValidatorsTable\n        validators={merged}\n        metrics={metrics}\n        tab=\"voting\"\n        feeSettings={feeSettings}\n      />\n    ),\n  }[tab]\n  return (\n    <div className=\"network-page\">\n      <div className=\"type\">{t('validators')}</div>\n      {\n        // @ts-ignore - Work around for complex type assignment issues\n        <Hexagons data={validatorsFromValidations} list={validatorsFromVHS} />\n      }\n      <div className=\"stat\">\n        <span>{t('validators_found')}: </span>\n        <span>\n          {localizeNumber(validatorCount, language)}\n          {unl?.length !== 0 && (\n            <i>\n              {' '}\n              ({t('unl')}: {unl?.length})\n            </i>\n          )}\n        </span>\n      </div>\n      <div className=\"wrap\">\n        <ValidatorsTabs selected={tab} />\n        <Helmet title={t('validators')} />\n        {Body}\n      </div>\n    </div>\n  )\n}\n\nexport const Validators = () => (\n  <StreamsProvider>\n    <VHSValidatorsProvider>\n      <ValidatorsData />\n    </VHSValidatorsProvider>\n  </StreamsProvider>\n)\n"
  },
  {
    "path": "src/containers/Network/ValidatorsTable.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { FeeSettings, StreamValidator } from '../shared/vhsTypes'\nimport { RouteLink } from '../shared/routing'\nimport { VALIDATOR_ROUTE, LEDGER_ROUTE } from '../App/routes'\nimport SuccessIcon from '../shared/images/success.svg'\nimport UpIcon from '../shared/images/ic_up.svg'\nimport DownIcon from '../shared/images/ic_down.svg'\nimport DomainLink from '../shared/components/DomainLink'\nimport InfoIcon from '../shared/images/info.svg'\nimport { Loader } from '../shared/components/Loader'\nimport './css/validatorsTable.scss'\nimport { useLanguage } from '../shared/hooks'\nimport { DROPS_TO_XRP_FACTOR, renderXRP } from '../shared/utils'\n\ninterface ValidatorsTableProps {\n  validators?: StreamValidator[]\n  metrics: any\n  tab: string\n  feeSettings?: FeeSettings\n}\n\nconst sortValidators = (data) => {\n  data.sort((a, b) => {\n    const aUnl = a.unl || 'zzz'\n    const bUnl = b.unl || 'zzz'\n    const aDomain = a.domain || 'zzz'\n    const bDomain = b.domain || 'zzz'\n    const aScore = a.agreement_30day ? a.agreement_30day.score : -1\n    const bScore = b.agreement_30day ? b.agreement_30day.score : -1\n    const aPubkey = a.master_key || a.signing_key\n    const bPubkey = b.master_key || b.signing_key\n\n    // 1. Sort by whether the validator is on the UNL\n    if (aUnl > bUnl) return 1\n    if (aUnl < bUnl) return -1\n    // 2. Sort by the 30 day score (descending)\n    if (aScore < bScore) return 1\n    if (aScore > bScore) return -1\n    // 3. Sort alphabetically by the domain\n    if (aDomain > bDomain) return 1\n    if (aDomain < bDomain) return -1\n    // 4. Sort alphabetically by the public key\n    if (aPubkey > bPubkey) return 1\n    if (aPubkey < bPubkey) return -1\n\n    return 0\n  })\n\n  return data\n}\n\nexport const ValidatorsTable = (props: ValidatorsTableProps) => {\n  const { validators: rawValidators, metrics, tab, feeSettings } = props\n  const validators = rawValidators\n    ? sortValidators(\n        rawValidators.filter((v) => v.master_key || v.signing_key || v.pubkey),\n      )\n    : undefined\n  const { t } = useTranslation()\n  const language = useLanguage()\n\n  const renderDomain = (domain) => domain && <DomainLink domain={domain} />\n\n  const renderAgreement = (className, agreement) =>\n    agreement ? (\n      <td\n        className={`${className} score ${agreement.score < 1 ? 'missed' : ''}`}\n        title={t('missed_validations', { count: agreement.missed })}\n      >\n        {Number.parseFloat(agreement.score).toFixed(5)}\n        {agreement.incomplete && <span title={t('incomplete')}>*</span>}\n      </td>\n    ) : (\n      <td className={`${className} score`} />\n    )\n\n  const renderFeeVoting = (className, data, currentFee, pubkey) =>\n    data ? (\n      <td className={`${className} vote`}>\n        {currentFee &&\n          data !== currentFee &&\n          (data > currentFee ? (\n            <span>\n              <UpIcon className=\"fee-icon\" title={pubkey} alt={pubkey} />\n            </span>\n          ) : (\n            <span>\n              <DownIcon className=\"fee-icon\" title={pubkey} alt={pubkey} />\n            </span>\n          ))}\n        <span>{renderXRP(data / DROPS_TO_XRP_FACTOR, language)}</span>\n      </td>\n    ) : (\n      <td className={`${className} vote`} />\n    )\n\n  const renderValidator = (d) => {\n    const color = d.ledger_hash ? `#${d.ledger_hash.substring(0, 6)}` : ''\n    const trusted = d.unl ? 'yes' : 'no'\n    // Note: Validator information is obtained from VHS and subscription Stream. The latter type uses pubkey as an alias for validation_public_key field (which is the signing key of the validator)\n    const pubkey = d.master_key || d.signing_key || d.pubkey\n    const onNegativeUnl = metrics.nUnl && metrics.nUnl.includes(pubkey)\n    const nUnl = onNegativeUnl ? 'yes' : 'no'\n    const ledgerIndex = d.ledger_index ?? d.current_index\n\n    return (\n      <tr key={pubkey}>\n        <td className=\"pubkey text-truncate\" title={pubkey}>\n          <RouteLink to={VALIDATOR_ROUTE} params={{ identifier: pubkey }}>\n            {pubkey}\n          </RouteLink>\n        </td>\n        <td className=\"domain text-truncate\">{renderDomain(d.domain)}</td>\n        <td className={`unl ${trusted}`}>\n          {d.unl && <SuccessIcon title={d.unl} alt={d.unl} />}\n        </td>\n        <td className={`n-unl ${nUnl}`}>\n          {onNegativeUnl && <InfoIcon title={d.unl} alt={d.unl} />}\n        </td>\n        <td className=\"version text-truncate\">{d.server_version}</td>\n        {tab === 'uptime' ? (\n          <>\n            {renderAgreement('h1', d.agreement_1h)}\n            {renderAgreement('h24', d.agreement_24h)}\n            {renderAgreement('d30', d.agreement_30day)}\n          </>\n        ) : (\n          <>\n            {renderFeeVoting(\n              'base',\n              d.reserve_base,\n              feeSettings?.reserve_base,\n              pubkey,\n            )}\n            {renderFeeVoting(\n              'owner',\n              d.reserve_inc,\n              feeSettings?.reserve_inc,\n              pubkey,\n            )}\n            {renderFeeVoting(\n              'base_fee',\n              d.base_fee,\n              feeSettings?.base_fee,\n              pubkey,\n            )}\n          </>\n        )}\n\n        <td\n          className=\"last-ledger\"\n          style={{ color }}\n          title={d.partial ? 'partial validation' : undefined}\n        >\n          <RouteLink to={LEDGER_ROUTE} params={{ identifier: ledgerIndex }}>\n            {ledgerIndex}\n          </RouteLink>\n          {d.partial && '*'}\n        </td>\n      </tr>\n    )\n  }\n\n  const content = validators ? (\n    <table className=\"basic\">\n      <thead>\n        <tr>\n          <th className=\"pubkey\">{t('pubkey')}</th>\n          <th className=\"domain\">{t('domain')}</th>\n          <th className=\"unl\">{t('unl')}</th>\n          <th className=\"n-unl\">{t('nUnlCol')}</th>\n          <th className=\"version\">{t('Version')}</th>\n          {tab === 'uptime' ? (\n            <>\n              <th className=\"score h1\">{t('1H')}</th>\n              <th className=\"score h24\">{t('24H')}</th>\n              <th className=\"score d30\">{t('30D')}</th>\n            </>\n          ) : (\n            <>\n              {' '}\n              <th className=\"base\">\n                <span>{t('base')}</span>\n              </th>\n              <th className=\"owner\">{t('owner')}</th>\n              <th className=\"base_fee\">{t('base_fee')}</th>\n            </>\n          )}\n          <th className=\"last-ledger\">{t('ledger')}</th>\n        </tr>\n      </thead>\n      <tbody>{validators.map(renderValidator)}</tbody>\n    </table>\n  ) : (\n    <Loader />\n  )\n\n  return <div className={`validators-table ${tab}-tab`}>{content}</div>\n}\n"
  },
  {
    "path": "src/containers/Network/ValidatorsTabs.tsx",
    "content": "import { Tabs } from '../shared/components/Tabs'\nimport { buildPath } from '../shared/routing'\nimport { VALIDATORS_ROUTE } from '../App/routes'\n\ninterface Props {\n  selected: string\n}\n\nconst ValidatorsTabs = (props: Props) => {\n  const { selected } = props\n  const tabs = ['uptime', 'voting']\n  return (\n    <Tabs\n      tabs={tabs}\n      selected={selected}\n      path={buildPath(VALIDATORS_ROUTE, {})}\n    />\n  )\n}\n\nexport default ValidatorsTabs\n"
  },
  {
    "path": "src/containers/Network/css/barchart.scss",
    "content": "@use '../../shared/css/variables' as *;\n\n.y-label {\n  fill: $black-40;\n}\n\n.barchart {\n  position: relative;\n  overflow: hidden;\n  width: 100%;\n  height: 100%;\n\n  p,\n  span {\n    color: $black-40;\n    line-height: 70%;\n  }\n}\n\n.custom-tooltip {\n  margin: 10px;\n\n  p {\n    color: $white;\n  }\n}\n\n.custom-legend {\n  display: flex;\n  margin: 0 16px 40px;\n\n  .legend-color {\n    display: flex;\n    align-items: center;\n    gap: 0 16px;\n\n    .segment {\n      display: flex;\n      align-items: center;\n      gap: 0 16px;\n\n      .icon {\n        &.vals {\n          background-color: $green-50;\n        }\n\n        &.nodes {\n          background-color: $blue-purple-50;\n        }\n\n        &.yea {\n          background-color: $green-50;\n        }\n\n        &.nay {\n          background-color: $magenta-70;\n        }\n\n        width: 16px;\n        height: 16px;\n        border-radius: 4px;\n      }\n\n      .text {\n        color: $white;\n        text-transform: capitalize;\n      }\n    }\n  }\n\n  .legend-stable {\n    padding: 16px;\n    border-radius: $border-radius;\n    margin-left: auto;\n    background-color: $black-70;\n\n    .stable {\n      color: $black-0;\n      font-weight: 700;\n    }\n  }\n}\n"
  },
  {
    "path": "src/containers/Network/css/hexagons.scss",
    "content": "@use '../../shared/css/variables' as *;\n\n.validators-container {\n  .validators {\n    position: relative;\n    background: $black-80;\n\n    svg {\n      display: block;\n      filter: drop-shadow(0px 0px 2px $black-70);\n    }\n\n    .mesh path {\n      fill: none;\n      stroke: $black;\n    }\n\n    .hexagons {\n      display: block;\n      margin: auto;\n\n      .hexagon path {\n        cursor: pointer;\n        fill-opacity: 0.8;\n        stroke-opacity: 1;\n\n        @include for-size(tablet-landscape-up) {\n          cursor: auto;\n        }\n      }\n\n      .hexagon.updated path {\n        animation-duration: 0.7s;\n        animation-name: hex-update;\n        animation-timing-function: ease-in-out;\n      }\n\n      .hexagon.selected path {\n        fill-opacity: 1;\n        stroke: black !important;\n      }\n\n      @keyframes hex-update {\n        0% {\n          transform: scale(1);\n        }\n\n        20% {\n          transform: scale(1.15);\n        }\n\n        100% {\n          transform: scale(1);\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "src/containers/Network/css/map.scss",
    "content": "@use '../../shared/css/variables' as *;\n\n.nodes-map {\n  position: relative;\n\n  svg {\n    display: block;\n    margin: auto;\n\n    .country {\n      fill: $black-40;\n      opacity: 0.2;\n    }\n\n    .tooltip {\n      font-size: 12px;\n\n      rect {\n        fill: white;\n        fill-opacity: 0.5;\n      }\n    }\n\n    .legend {\n      text {\n        fill: $black-40;\n        font-size: 10px;\n        @include regular;\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "src/containers/Network/css/nodesTable.scss",
    "content": "@use '../../shared/css/variables' as *;\n@use '../../shared/css/table';\n\n.nodes-table {\n  position: relative;\n  min-height: 150px;\n\n  table {\n    .pubkey {\n      max-width: 70px;\n\n      @include for-size(tablet-portrait-up) {\n        max-width: 100px;\n      }\n\n      @include for-size(big-desktop-up) {\n        max-width: 180px;\n      }\n\n      @media (width >= 1300px) {\n        max-width: 280px;\n      }\n\n      @media (width >= 1400px) {\n        max-width: 350px;\n      }\n    }\n\n    .state {\n      min-width: 60px;\n      text-transform: uppercase;\n      @include semibold;\n    }\n\n    .state span {\n      display: inline-block;\n      padding: 4px 12px;\n      border-radius: 100px;\n      margin: 1px 0;\n    }\n\n    .state .full {\n      background-color: $green;\n      color: black;\n    }\n\n    .state .proposing {\n      background-color: $orange;\n      color: white;\n    }\n\n    .state .connected {\n      background-color: $yellow;\n      color: $black-60;\n    }\n\n    .version {\n      max-width: 60px;\n    }\n\n    .uptime {\n      text-align: right;\n\n      @include for-size(tablet-landscape-up) {\n        text-align: left;\n      }\n    }\n\n    .last-ledger {\n      i {\n        color: $black-30;\n      }\n    }\n\n    .in-out small {\n      color: $black-50;\n      font-weight: bold;\n    }\n\n    .ledgers {\n      text-align: right;\n\n      @include for-size(big-desktop-up) {\n        text-align: left;\n      }\n    }\n\n    .ledgers .boxes {\n      position: relative;\n      display: none;\n      height: 12px;\n      margin: 3px 5px;\n      vertical-align: middle;\n\n      @include for-size(big-desktop-up) {\n        display: inline-block;\n      }\n    }\n\n    .ledgers .boxes div {\n      position: absolute;\n      height: 100%;\n      border-radius: 2px;\n      background: $black-50;\n    }\n\n    .ledgers span {\n      color: $black-50;\n      font-weight: bold;\n      vertical-align: middle;\n    }\n\n    .quorum,\n    .load-factor,\n    .latency {\n      display: none;\n\n      @include for-size(desktop-up) {\n        display: table-cell;\n      }\n    }\n\n    .last-ledger,\n    .ledgers {\n      display: none;\n\n      @media (width >= 750px) {\n        display: table-cell;\n      }\n    }\n\n    .peers,\n    .version,\n    .in-out {\n      display: none;\n\n      @include for-size(tablet-landscape-up) {\n        display: table-cell;\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "src/containers/Network/css/style.scss",
    "content": "@use '../../shared/css/variables' as *;\n\n.network-page {\n  // Needs additional bottom margin to break up table from the horizontal\n  // rule that delineates the footer\n  margin: 0 0 50px;\n\n  .loader {\n    position: absolute;\n    top: 1px;\n    min-height: 100px;\n  }\n\n  .stat {\n    min-height: 15px;\n    padding: 2px;\n    color: $black-40;\n    font-size: 11px;\n    text-align: center;\n    text-transform: uppercase;\n\n    i {\n      font-size: 10px;\n    }\n\n    @include for-size(tablet-landscape-up) {\n      padding: 4px 10px;\n      font-size: 12px;\n\n      i {\n        font-size: 11px;\n      }\n    }\n  }\n\n  .wrap {\n    overflow: auto;\n    width: 100%;\n    max-width: 1500px;\n    margin: auto;\n  }\n\n  .type {\n    display: inline-block;\n    margin-top: 80px;\n    margin-bottom: 32px;\n    margin-left: 16px;\n    margin-left: calc((100vw - 1500px) / 2);\n    margin-left: clamp(\n      16px,\n      calc((100vw - 1500px) / 2),\n      calc((100vw - 1500px) / 2)\n    ); // Adjust based on wrap margin with min 16px\n\n    color: $white;\n    font-size: 32px;\n    @include for-size(tablet-portrait-up) {\n      font-size: 42px;\n    }\n\n    @include bold;\n  }\n}\n"
  },
  {
    "path": "src/containers/Network/css/validatorsTable.scss",
    "content": "@use '../../shared/css/variables' as *;\n\n.validators-table {\n  position: relative;\n  min-height: 150px;\n\n  table {\n    .pubkey {\n      max-width: 70px;\n      @include for-size(tablet-portrait-up) {\n        max-width: 100px;\n      }\n\n      @include for-size(big-desktop-up) {\n        max-width: 180px;\n      }\n\n      @media (width >= 1300px) {\n        max-width: 280px;\n      }\n\n      @media (width >= 1400px) {\n        max-width: 350px;\n      }\n    }\n\n    .fee {\n      min-width: 90px;\n      color: $orange-50;\n    }\n\n    .missed {\n      color: $orange-50;\n    }\n\n    .domain {\n      max-width: 140px;\n      @include medium;\n    }\n\n    .last-ledger {\n      min-width: 55px;\n      @include bold;\n\n      // When a validation comes in we update the color to use the ledgers hash. Until that occurs the table's default\n      // text color is used.\n      a {\n        color: inherit;\n      }\n    }\n\n    .unl,\n    .n-unl {\n      max-width: 40px;\n    }\n\n    .unl {\n      text-align: center;\n    }\n\n    .unl.yes {\n      color: $green;\n    }\n\n    .n-unl {\n      text-align: center;\n      text-transform: none;\n\n      img {\n        height: 16px;\n        transform: rotate(180deg);\n      }\n    }\n\n    .n-unl.yes {\n      color: $orange-40;\n    }\n\n    .fee-icon {\n      position: relative;\n      top: 1.5px;\n      margin-right: 4px;\n    }\n\n    .vote {\n      white-space: nowrap;\n    }\n  }\n\n  &.uptime-tab {\n    .pubkey,\n    .score.h1,\n    .score.d30,\n    .fee {\n      display: none;\n    }\n\n    @include for-size(tablet-portrait-up) {\n      .score.d30 {\n        display: table-cell;\n      }\n    }\n\n    @include for-size(tablet-landscape-up) {\n      .pubkey {\n        display: table-cell;\n      }\n    }\n\n    @include for-size(desktop-up) {\n      .score.h1,\n      .fee {\n        display: table-cell;\n      }\n    }\n  }\n\n  &.voting-tab {\n    .pubkey,\n    .last-ledger,\n    .n-unl,\n    .version {\n      display: none;\n    }\n\n    @include for-size(tablet-portrait-up) {\n      .n-unl,\n      .version {\n        display: table-cell;\n      }\n    }\n\n    @include for-size(tablet-landscape-up) {\n      .pubkey {\n        display: table-cell;\n      }\n    }\n\n    @include for-size(desktop-up) {\n      .last-ledger {\n        display: table-cell;\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "src/containers/Network/test/metrics.json",
    "content": "[\n  {\n    \"type\": \"metric\",\n    \"data\": {\n      \"base_fee\": \"0.00001\",\n      \"txn_sec\": \"4.54\",\n      \"txn_ledger\": \"17.20\",\n      \"ledger_interval\": \"3.788\",\n      \"avg_fee\": \"0.00001185\",\n      \"quorum\": 7,\n      \"nUNL\": []\n    }\n  },\n  {\n    \"type\": \"metric\",\n    \"data\": {\n      \"base_fee\": \"0.00001\",\n      \"txn_sec\": \"4.54\",\n      \"txn_ledger\": \"17.20\",\n      \"ledger_interval\": \"3.788\",\n      \"avg_fee\": \"0.00001185\",\n      \"quorum\": 7,\n      \"nUNL\": [\"nHUroc3Q1ErBXs689SEi3nWEeM759Pn1LsZk27jMHJtiemHXVmJb\"]\n    }\n  },\n  {\n    \"type\": \"metric\",\n    \"data\": {\n      \"base_fee\": \"0.00001\",\n      \"txn_sec\": \"4.54\",\n      \"txn_ledger\": \"17.20\",\n      \"ledger_interval\": \"3.788\",\n      \"avg_fee\": \"0.00001185\",\n      \"quorum\": 7,\n      \"nUNL\": [\n        \"nHUigfqnuuNAzcppLjb33mquLVnxU6jGQHvEo47XRjaHHE6pZUUY\",\n        \"nHUACtV4UJoQjA6eR7Nj5sc5hKwXFrzXKz8H3qxD5ksjt3ihgf4c\"\n      ]\n    }\n  }\n]\n"
  },
  {
    "path": "src/containers/Network/test/mockNodes.json",
    "content": "[\n  {\n    \"ip\": \"169.44.60.105\",\n    \"inbound_count\": 21,\n    \"outbound_count\": 50,\n    \"node_public_key\": \"n9KDJqdL5pebR35tkE4pRuZ7MhTvQGid8YqwjJajwrZUN5fEDxsZ\",\n    \"hostid\": \"LILY\",\n    \"server_state\": \"full\",\n    \"last_close\": {\n      \"converge_time_s\": 3.002,\n      \"proposers\": 26\n    },\n    \"state_accounting\": {\n      \"connected\": {\n        \"duration\": 382.5318,\n        \"transitions\": 1\n      },\n      \"disconnected\": {\n        \"duration\": 1.132517,\n        \"transitions\": 1\n      },\n      \"full\": {\n        \"duration\": 4964702.486372,\n        \"transitions\": 1\n      },\n      \"syncing\": {\n        \"duration\": 3.070643,\n        \"transitions\": 1\n      },\n      \"tracking\": {\n        \"duration\": 0.000009,\n        \"transitions\": 1\n      }\n    },\n    \"complete_ledgers\": \"32570-44989400\",\n    \"io_latency_ms\": 1,\n    \"load_factor_server\": 1,\n    \"peers\": 71,\n    \"peer_disconnects\": 280,\n    \"peer_disconnects_resources\": 55,\n    \"validated_ledger\": {\n      \"ledger_index\": 44989400,\n      \"ledger_hash\": \"F316CE01C93F763C9A831A0708E107C367D82DC9D93DF71619571D826EF6EDB5\",\n      \"age\": 5\n    },\n    \"quorum\": 21,\n    \"version\": \"1.1.2\",\n    \"uptime\": 4965089,\n    \"lat\": \"42.36\",\n    \"long\": \"-71.10\"\n  },\n  {\n    \"node_public_key\": \"n9LkwyXNWRjYv7sR1Ks9D8XbEhabeNPH9nCNViYmV7ouFCj1mdAd\",\n    \"version\": \"1.2.0-rc2\",\n    \"uptime\": 318727,\n    \"inbound_count\": 47,\n    \"outbound_count\": 8,\n    \"lat\": \"42.27\",\n    \"long\": \"-83.71\"\n  },\n  {\n    \"ip\": \"54.218.232.1\",\n    \"port\": 51235,\n    \"node_public_key\": \"n9Kt2gdtxsYV6h4SAfHkRFUMU8gB6rDQ3MktiB3MMEDS9s9obu9b\",\n    \"version\": \"rippled-1.2.0-rc2\",\n    \"uptime\": 322409,\n    \"inbound_count\": 106,\n    \"outbound_count\": 88,\n    \"hostid\": \"ABUT\",\n    \"server_state\": \"full\",\n    \"last_close\": {\n      \"converge_time_s\": 3.002,\n      \"proposers\": 26\n    },\n    \"state_accounting\": {\n      \"connected\": {\n        \"duration\": 189.370719,\n        \"transitions\": 1\n      },\n      \"disconnected\": {\n        \"duration\": 1.095056,\n        \"transitions\": 1\n      },\n      \"full\": {\n        \"duration\": 322216.468535,\n        \"transitions\": 1\n      },\n      \"syncing\": {\n        \"duration\": 2.139793,\n        \"transitions\": 1\n      },\n      \"tracking\": {\n        \"duration\": 0.002662,\n        \"transitions\": 1\n      }\n    },\n    \"complete_ledgers\": \"44110988-44989400\",\n    \"latency\": 1,\n    \"load_factor\": 1,\n    \"peers\": 195,\n    \"peer_disconnects\": 33855,\n    \"peer_disconnects_resources\": 73,\n    \"validated_ledger\": {\n      \"ledger_index\": 44989400,\n      \"ledger_hash\": \"F316CE01C93F763C9A831A0708E107C367D82DC9D93DF71619571D826EF6EDB5\",\n      \"age\": 6\n    },\n    \"quorum\": 21\n  }\n]\n"
  },
  {
    "path": "src/containers/Network/test/mockValidation.json",
    "content": "{\n  \"cookie\": \"14152263757286605278\",\n  \"data\": \"228000000126041CBE3129297345043AC466F0E7C4B401DE51A5F887A191348B69129B168EDA5BC8EEE9EAC60E2599A8034742199471C706045017BAE56CBDEAAFD73CBDEBE8BCF1CDDE879D327430F8A47BB9B787DA6D0A5E91F450190C12B30677B3D8D6ADC7DCC8528694E2FD1515950FB2AAD621D9E9B31833B4447321032CE084DEC33CF6FA0D093E0BC8C3E95C6702DBEB30FDF06F87545AF8A43B26FA76463044022023EDCAEE7C6812A418F51AB044974AD35B33D9B147C0A3417833E8F0D406CCEE022026AB3CF6BC52B94B43EC64EC6731304483630DB43BE7720CBCF93E71CF66AEC9\",\n  \"flags\": 2147483649,\n  \"full\": true,\n  \"ledger_hash\": \"A1689E0CDA6523C82D5D848202DAB2FD458D715EED9DB11A3B7088A56681D588\",\n  \"ledger_index\": \"44921927\",\n  \"master_key\": \"nHUFCyRCrUjvtZmKiLeF8ReopzKuUoKeDeXo3wEUBVSaawzcSBpW\",\n  \"signature\": \"3044022023EDCAEE7C6812A418F51AB044974AD35B33D9B147C0A3417833E8F0D406CCEE022026AB3CF6BC52B94B43EC64EC6731304483630DB43BE7720CBCF93E71CF66AEC9\",\n  \"signing_time\": 1549400032000,\n  \"type\": \"validationReceived\",\n  \"validated_hash\": \"0C12B30677B3D8D6ADC7DCC8528694E2FD1515950FB2AAD621D9E9B31833B444\",\n  \"validation_public_key\": \"n9KaxgJv69FucW5kkiaMhCqS6sAR1wUVxpZaZmLGVXxAcAse9YhR\"\n}\n"
  },
  {
    "path": "src/containers/Network/test/mockValidators.json",
    "content": "[\n  {\n    \"master_key\": \"nHUtXf1nPkE4YuVTurzCJjSWKpmET3orqgfSFXWiQD31fMhf4Sf1\",\n    \"signing_key\": \"n9MLBvEW5cNsF4kzjKfF8eaLSg3fKDay4EpkG4pNxoYemmWz926y\",\n    \"ledger_hash\": \"0FF09638B2F02577ABB916E20E99F94B1D159FC0F4A6E233B0029F6211A28B32\",\n    \"current_index\": 44993868,\n    \"partial\": false,\n    \"chain\": null,\n    \"unl\": \"vl.ripple.com\",\n    \"last_ledger_time\": \"2019-02-08T22:44:56.000Z\",\n    \"agreement_1h\": {\n      \"score\": 1,\n      \"missed\": 0,\n      \"incomplete\": false\n    },\n    \"agreement_24h\": {\n      \"score\": 0.91729,\n      \"missed\": 17,\n      \"incomplete\": true\n    },\n    \"agreement_30day\": {\n      \"score\": 0.98468,\n      \"missed\": 120,\n      \"incomplete\": true\n    },\n    \"base_fee\": 10,\n    \"reserve_base\": 1000000,\n    \"reserve_inc\": 200000\n  },\n  {\n    \"master_key\": \"nHDaxUL87HiVszvCamVu4A3Gecq6LTxKkUVNdzf3nqmuSywgRqu4\",\n    \"signing_key\": \"n9KP4hb94gXC5Sq8Kay4ibXmaxcHWyGDB4RX4AxxgzsQZq1YJ3Co\",\n    \"ledger_hash\": \"0FF09638B2F02577ABB916E20E99F94B1D159FC0F4A6E233B0029F6211A28B32\",\n    \"current_index\": 44993868,\n    \"partial\": false,\n    \"chain\": null,\n    \"unl\": \"vl.ripple.com\",\n    \"last_ledger_time\": \"2019-02-08T22:44:56.000Z\",\n    \"agreement_1h\": {\n      \"score\": 1,\n      \"missed\": 0,\n      \"incomplete\": false\n    },\n    \"agreement_24h\": {\n      \"score\": 1,\n      \"missed\": 0,\n      \"incomplete\": true\n    },\n    \"agreement_30day\": {\n      \"score\": 0.98,\n      \"missed\": 1,\n      \"incomplete\": true\n    },\n    \"base_fee\": 200,\n    \"reserve_base\": 1000000,\n    \"reserve_inc\": 200000\n  },\n  {\n    \"master_key\": \"nHUroc3Q1ErBXs689SEi3nWEeM759Pn1LsZk27jMHJtiemHXVmJb\",\n    \"signing_key\": \"n9MvNaY8mc9zjp5FfkWNG86medDQe3KSGdovyTnhj1w5x1eqFo7F\",\n    \"ledger_hash\": \"0FF09638B2F02577ABB916E20E99F94B1D159FC0F4A6E233B0029F6211A28B32\",\n    \"current_index\": 44993868,\n    \"partial\": false,\n    \"chain\": null,\n    \"unl\": null,\n    \"last_ledger_time\": \"2019-02-08T22:44:56.000Z\",\n    \"agreement_1h\": {\n      \"score\": 1,\n      \"missed\": 0,\n      \"incomplete\": false\n    },\n    \"agreement_24h\": {\n      \"score\": 1,\n      \"missed\": 0,\n      \"incomplete\": true\n    },\n    \"agreement_30day\": {\n      \"score\": 0.99947,\n      \"missed\": 33,\n      \"incomplete\": true\n    }\n  },\n  {\n    \"master_key\": null,\n    \"signing_key\": \"n9Jq65bCFdcPzC6Fca6RrXmvu9jwgVo9rPJ3UZv6y9Kihnt2Xfd8\",\n    \"ledger_hash\": \"0FF09638B2F02577ABB916E20E99F94B1D159FC0F4A6E233B0029F6211A28B32\",\n    \"current_index\": 44993868,\n    \"partial\": false,\n    \"chain\": null,\n    \"unl\": null,\n    \"last_ledger_time\": \"2019-02-08T22:44:56.000Z\",\n    \"agreement_1h\": {\n      \"score\": 1,\n      \"missed\": 0,\n      \"incomplete\": false\n    },\n    \"agreement_24h\": {\n      \"score\": 0.99942,\n      \"missed\": 7,\n      \"incomplete\": true\n    },\n    \"agreement_30day\": {\n      \"score\": 0.99964,\n      \"missed\": 15,\n      \"incomplete\": true\n    },\n    \"base_fee\": 12,\n    \"reserve_base\": 1000000,\n    \"reserve_inc\": 100000\n  }\n]\n"
  },
  {
    "path": "src/containers/Network/test/nodes.test.js",
    "content": "import { render, fireEvent, waitFor } from '@testing-library/react'\nimport moxios from 'moxios'\nimport { Route } from 'react-router'\nimport i18n from '../../../i18n/testConfig'\nimport mockNodes from './mockNodes.json'\nimport NetworkContext from '../../shared/NetworkContext'\nimport countries from '../../../../public/countries.json'\nimport { QuickHarness } from '../../test/utils'\nimport { NODES_ROUTE } from '../../App/routes'\nimport { Nodes } from '../Nodes'\n\njest.mock('usehooks-ts', () => ({\n  useWindowSize: () => ({\n    width: 375,\n    height: 600,\n  }),\n}))\n\ndescribe('Nodes Page container', () => {\n  const renderNodes = () =>\n    render(\n      <NetworkContext.Provider value=\"main\">\n        <QuickHarness i18n={i18n} initialEntries={['/network/nodes']}>\n          <Route path={NODES_ROUTE.path} element={<Nodes />} />\n        </QuickHarness>\n      </NetworkContext.Provider>,\n    )\n\n  const oldEnvs = process.env\n\n  beforeEach(() => {\n    moxios.install()\n    process.env = { ...oldEnvs, VITE_ENVIRONMENT: 'mainnet' }\n  })\n\n  afterEach(() => {\n    moxios.uninstall()\n    process.env = oldEnvs\n  })\n\n  it('renders without crashing', () => {\n    renderNodes()\n  })\n\n  it('renders all parts', async () => {\n    moxios.stubRequest(`${process.env.VITE_DATA_URL}/topology/nodes/main`, {\n      status: 200,\n      response: { nodes: mockNodes },\n    })\n\n    moxios.stubRequest(`/countries.json`, {\n      status: 200,\n      response: countries,\n    })\n\n    const { container } = renderNodes()\n\n    expect(container.querySelectorAll('.nodes-map').length).toBe(1)\n    expect(container.querySelector('.stat').outerHTML).toBe(\n      '<div class=\"stat\"></div>',\n    )\n    expect(container.querySelectorAll('.nodes-table').length).toBe(1)\n\n    await waitFor(() => {\n      expect(container.querySelector('.stat').outerHTML).toBe(\n        '<div class=\"stat\"><span>nodes_found: </span><span>3<i> (1 unmapped)</i></span></div>',\n      )\n    })\n\n    expect(container.querySelectorAll('.nodes-map .tooltip').length).toBe(0)\n    const nodeElement = container.querySelector('.nodes-map path.node')\n    fireEvent.mouseOver(nodeElement)\n\n    await waitFor(() => {\n      expect(container.querySelectorAll('.nodes-map .tooltip').length).toBe(1)\n    })\n    expect(container.querySelector('.nodes-map .tooltip').outerHTML).toBe(\n      '<g class=\"tooltip\"><rect rx=\"2\" ry=\"2\" x=\"102.80776503073434\" y=\"44.52072594490305\" width=\"60\" height=\"15\"></rect><text x=\"104.80776503073434\" y=\"56.52072594490305\">1 nodes</text></g>',\n    )\n\n    fireEvent.mouseLeave(nodeElement)\n    await waitFor(() => {\n      expect(container.querySelectorAll('.nodes-map .tooltip').length).toBe(0)\n    })\n\n    expect(container.querySelectorAll('.nodes-map path.node').length).toBe(2)\n    expect(container.querySelectorAll('.nodes-table table tr').length).toBe(4)\n  })\n})\n"
  },
  {
    "path": "src/containers/Network/test/nodesTable.test.js",
    "content": "import { render } from '@testing-library/react'\nimport { BrowserRouter as Router } from 'react-router'\nimport { I18nextProvider } from 'react-i18next'\nimport i18n from '../../../i18n/testConfig'\nimport { NodesTable } from '../NodesTable'\nimport nodes from './mockNodes.json'\n\n/* eslint-disable react/jsx-props-no-spreading */\nconst renderNodesTable = (props = {}) =>\n  render(\n    <Router>\n      <I18nextProvider i18n={i18n}>\n        <NodesTable {...props} />\n      </I18nextProvider>\n    </Router>,\n  )\n\ndescribe('Nodes table', () => {\n  it('renders without crashing', () => {\n    renderNodesTable()\n  })\n\n  it('renders all parts', () => {\n    const { container } = renderNodesTable({ nodes })\n    expect(container.querySelectorAll('tr').length).toBe(nodes.length + 1)\n  })\n})\n"
  },
  {
    "path": "src/containers/Network/test/upgradeStatus.test.js",
    "content": "import { render, waitFor } from '@testing-library/react'\nimport moxios from 'moxios'\nimport WS from 'jest-websocket-mock'\nimport { Route } from 'react-router'\nimport i18n from '../../../i18n/testConfig'\nimport SocketContext from '../../shared/SocketContext'\nimport NetworkContext from '../../shared/NetworkContext'\nimport MockWsClient from '../../test/mockWsClient'\nimport { QuickHarness } from '../../test/utils'\nimport {\n  UpgradeStatus,\n  aggregateData,\n  aggregateNodes,\n  aggregateValidators,\n} from '../UpgradeStatus'\nimport { UPGRADE_STATUS_ROUTE } from '../../App/routes'\n\nconst undefinedValidatorsData = [\n  {\n    ledger_index: 74661353,\n    ledger_hash:\n      '613E298A8C0AEB816D16AA61952E0834BBD9B5E5677EA3E9A2413118EE074363',\n  },\n  {\n    master_key: 'nHUakYHufAvdx5XqTS2F4Pu7i8fQqDqpKqXN2kUGHhBFcG38GNqL',\n    signing_key: 'n9M38x7Sf7epp3gaxgcFxEtwkSc4w2ePb1SgfLiz9bVCr5Lvzrm8',\n    unl: false,\n    domain: 'gerty.one',\n    ledger_index: 74554449,\n    server_version: '1.9.4',\n    agreement_1hour: {\n      missed: 936,\n      total: 936,\n      score: '0.00000',\n      incomplete: false,\n    },\n    agreement_24hour: {\n      missed: 22338,\n      total: 22338,\n      score: '0.00000',\n      incomplete: false,\n    },\n    agreement_30day: {\n      missed: 263139,\n      total: 535427,\n      score: '0.50854',\n      incomplete: false,\n    },\n    chain: 'chain.4',\n    partial: false,\n  },\n]\n\nconst nodesData = [\n  {\n    node_public_key: 'n9JoeT8XKeBSR8y4D9aDz2PL1DD1j6LQwkRTbH2eFqeRmWYHj2Nw',\n    networks: 'dev',\n    complete_ledgers: '22085270-29882772',\n    ip: '34.208.12.148',\n    port: 2459,\n    uptime: 1257336,\n    version: '1.11.0-rc3',\n    server_state: 'full',\n    io_latency_ms: 1,\n    load_factor_server: '256',\n    inbound_count: 4,\n    outbound_count: 9,\n    lat: '45.82',\n    long: '-119.73',\n    country_code: 'US',\n    country: 'United States',\n    region: 'Oregon',\n    region_code: 'OR',\n    city: 'Boardman',\n    postal_code: '97818',\n    timezone: 'America/Los_Angeles',\n  },\n]\n\ndescribe('UpgradeStatus test functions', () => {\n  it('aggregate data works with validators without keys', () => {\n    const validatorAggregate = aggregateValidators(undefinedValidatorsData)\n    expect(validatorAggregate).toEqual({\n      '1.9.4': { validatorCount: 1, validatorPercent: 100 },\n    })\n    const nodeAggregate = aggregateNodes(nodesData)\n    expect(nodeAggregate).toEqual({\n      '1.11.0-rc3': { nodeCount: 1, nodePercent: 100 },\n    })\n    expect(aggregateData(validatorAggregate, nodeAggregate)).toEqual([\n      {\n        label: '1.9.4',\n        validatorCount: 1,\n        validatorPercent: 100,\n        nodeCount: 0,\n        nodePercent: 0,\n      },\n      {\n        label: '1.11.0-rc3',\n        validatorCount: 0,\n        validatorPercent: 0,\n        nodeCount: 1,\n        nodePercent: 100,\n      },\n    ])\n  })\n})\n\ndescribe('UpgradeStatus renders', () => {\n  let server\n  let client\n  const WS_URL = 'ws://localhost:1234'\n  const renderUpgradeStatus = () =>\n    render(\n      <SocketContext.Provider value={client}>\n        <NetworkContext.Provider value=\"main\">\n          <QuickHarness\n            i18n={i18n}\n            initialEntries={['/network/upgrade-status']}\n          >\n            <Route\n              path={UPGRADE_STATUS_ROUTE.path}\n              element={<UpgradeStatus />}\n            />\n          </QuickHarness>\n        </NetworkContext.Provider>\n      </SocketContext.Provider>,\n    )\n\n  beforeEach(async () => {\n    window.ResizeObserver = jest.fn().mockImplementation(() => ({\n      observe: jest.fn(),\n      unobserve: jest.fn(),\n      disconnect: jest.fn(),\n    }))\n    server = new WS(WS_URL, { jsonProtocol: true })\n    client = new MockWsClient(WS_URL)\n    await server.connected\n    moxios.install()\n  })\n\n  afterEach(async () => {\n    moxios.uninstall()\n    server.close()\n    client.close()\n    WS.clean()\n  })\n\n  it('renders without crashing', async () => {\n    renderUpgradeStatus()\n  })\n\n  it('renders when nodes request errors', async () => {\n    moxios.stubRequest(`${process.env.VITE_DATA_URL}/validators/main`, {\n      status: 200,\n      response: { validators: undefinedValidatorsData },\n    })\n    moxios.stubRequest(`${process.env.VITE_DATA_URL}/topology/nodes/main`, {\n      status: 502,\n    })\n\n    const { container } = renderUpgradeStatus()\n    await waitFor(() => {\n      expect(container.querySelectorAll('.barchart').length).toEqual(1)\n    })\n  })\n})\n"
  },
  {
    "path": "src/containers/Network/test/validators.test.js",
    "content": "import { render, waitFor, screen } from '@testing-library/react'\nimport moxios from 'moxios'\nimport WS from 'jest-websocket-mock'\nimport { Route } from 'react-router'\nimport { QueryClientProvider } from 'react-query'\nimport i18n from '../../../i18n/testConfig'\nimport mockValidators from './mockValidators.json'\nimport validationMessage from './mockValidation.json'\nimport SocketContext from '../../shared/SocketContext'\nimport NetworkContext from '../../shared/NetworkContext'\nimport MockWsClient from '../../test/mockWsClient'\nimport { QuickHarness } from '../../test/utils'\nimport { VALIDATORS_ROUTE } from '../../App/routes'\nimport { Validators } from '../Validators'\nimport { queryClient } from '../../shared/QueryClient'\n\nconst WS_URL = 'ws://localhost:1234'\n\ndescribe('Validators Tab container', () => {\n  let server\n  let client\n\n  const renderValidators = () =>\n    render(\n      <SocketContext.Provider value={client}>\n        <NetworkContext.Provider value=\"main\">\n          <QueryClientProvider client={queryClient}>\n            <QuickHarness i18n={i18n} initialEntries={['/network/validators']}>\n              <Route path={VALIDATORS_ROUTE.path} element={<Validators />} />\n            </QuickHarness>\n          </QueryClientProvider>\n        </NetworkContext.Provider>\n      </SocketContext.Provider>,\n    )\n\n  beforeEach(async () => {\n    server = new WS(WS_URL, { jsonProtocol: true })\n    client = new MockWsClient(WS_URL)\n    await server.connected\n    moxios.install()\n  })\n\n  afterEach(() => {\n    moxios.uninstall()\n    server.close()\n    client.close()\n    WS.clean()\n  })\n\n  it('renders without crashing', async () => {\n    renderValidators()\n  })\n\n  it('displays validators from VHS API', async () => {\n    moxios.stubRequest(`${process.env.VITE_DATA_URL}/validators/main`, {\n      status: 200,\n      response: { validators: mockValidators },\n    })\n\n    const { container } = renderValidators()\n\n    await waitFor(() => {\n      expect(container.querySelector('.stat').textContent).toEqual(\n        'validators_found: 4 (unl: 2)',\n      )\n    })\n\n    expect(container.querySelectorAll('.hexagons').length).toBe(1)\n  })\n\n  it('merges validators from both VHS API and WebSocket stream', async () => {\n    moxios.stubRequest(`${process.env.VITE_DATA_URL}/validators/main`, {\n      status: 200,\n      response: { validators: mockValidators },\n    })\n\n    const { container } = renderValidators()\n\n    server.send(validationMessage)\n\n    await waitFor(() => {\n      expect(container.querySelector('.stat').textContent).toEqual(\n        'validators_found: 5 (unl: 2)',\n      )\n    })\n\n    expect(container.querySelectorAll('.hexagons').length).toBe(1)\n    expect(container.querySelectorAll('.validators-table').length).toBe(1)\n\n    const tableRows = container.querySelectorAll(\n      '.validators-table table tbody tr',\n    )\n    expect(tableRows.length).toBe(5)\n\n    expect(\n      screen.getByText('n9KaxgJv69FucW5kkiaMhCqS6sAR1wUVxpZaZmLGVXxAcAse9YhR'),\n    ).toBeInTheDocument()\n  })\n})\n"
  },
  {
    "path": "src/containers/Network/test/validatorsTable.test.js",
    "content": "import { render } from '@testing-library/react'\nimport { BrowserRouter as Router } from 'react-router'\nimport { I18nextProvider } from 'react-i18next'\nimport i18n from '../../../i18n/testConfig'\nimport { ValidatorsTable } from '../ValidatorsTable'\nimport validators from './mockValidators.json'\nimport metrics from './metrics.json'\n\n/* eslint-disable react/jsx-props-no-spreading */\nconst renderValidatorsTable = (props = {}) =>\n  render(\n    <Router>\n      <I18nextProvider i18n={i18n}>\n        <ValidatorsTable {...props} />\n      </I18nextProvider>\n    </Router>,\n  )\n\ndescribe('Validators table', () => {\n  it('renders without crashing', () => {\n    renderValidatorsTable()\n  })\n\n  it('renders all parts', () => {\n    const tab = 'uptime'\n    const { container } = renderValidatorsTable({ validators, metrics, tab })\n    expect(container.querySelectorAll('tr').length).toBe(validators.length + 1)\n  })\n\n  it('renders uptime tab', () => {\n    const tab = 'uptime'\n    const { container } = renderValidatorsTable({ validators, metrics, tab })\n    expect(container.querySelectorAll('.uptime-tab').length).toBe(1)\n    expect(container.querySelector('td.h1').textContent.trim()).toBe('1.00000')\n    expect(container.querySelector('td.h24').textContent.trim()).toBe(\n      '0.91729*',\n    )\n    expect(container.querySelector('td.d30').textContent.trim()).toBe(\n      '0.98468*',\n    )\n  })\n\n  it('renders voting tab', () => {\n    const tab = 'voting'\n    const { container } = renderValidatorsTable({ validators, metrics, tab })\n    expect(container.querySelectorAll('.voting-tab').length).toBe(1)\n    expect(container.querySelector('td.base').textContent.trim()).toContain(\n      '1.00',\n    )\n    expect(container.querySelector('td.owner').textContent.trim()).toContain(\n      '0.20',\n    )\n    expect(container.querySelector('td.base_fee').textContent.trim()).toContain(\n      '0.00001',\n    )\n  })\n})\n"
  },
  {
    "path": "src/containers/NoMatch/index.tsx",
    "content": "import { useContext, useEffect } from 'react'\nimport { Helmet } from 'react-helmet-async'\nimport { useTranslation } from 'react-i18next'\nimport { useAnalytics } from '../shared/analytics'\nimport SocketContext from '../shared/SocketContext'\nimport InfoIcon from '../shared/images/info.svg'\nimport './nomatch.scss'\n\nexport interface NoMatchProps {\n  /** The i18n key to use for the title.  If the key contains \"not_found\" it is treated as a 404 type page */\n  title?: string\n  /** An array of i18n keys to use for hints */\n  hints?: string[]\n  /** Treat the message as an error. Adds \"Uh Oh\". */\n  isError?: boolean\n  /** Custom warning message to display next to info icon */\n  warning?: string\n}\n\n/**\n * Provides messaging for not found. I18n values have access to XrplClient's ConnectionState through the variable `connection`.\n * @constructor\n */\nconst NoMatch = ({\n  title = 'not_found_default_title',\n  hints = ['not_found_check_url'],\n  isError = true,\n  warning = undefined,\n}: NoMatchProps) => {\n  const { track } = useAnalytics()\n  const { t } = useTranslation()\n  const socket = useContext(SocketContext)\n  const values = { connection: socket?.getState() }\n\n  useEffect(() => {\n    track('not_found', {\n      description: `${title} -- ${hints.join(', ')}`,\n    })\n    // eslint-disable-next-line react-hooks/exhaustive-deps -- hints has to be spread to prevent this from running multiple times\n  }, [...hints, title, track])\n\n  const notFound = title.includes('not_found')\n  const hintMsg = hints.map((hint) => (\n    <div className=\"hint\" key={hint}>\n      {t(hint as any, values)}\n    </div>\n  ))\n  const derivedWarning = warning ?? (notFound && t('not_found'))\n\n  return (\n    <div className=\"no-match\">\n      <Helmet title={t(title as any)} />\n      {isError && <div className=\"uh-oh\">{t('uh_oh')}</div>}\n      <div className=\"title\">{t(title as any, values)}</div>\n      {hintMsg}\n      {(derivedWarning || isError) && (\n        <div className=\"warning\">\n          <InfoIcon title={derivedWarning} />\n          &nbsp;\n          <span>{derivedWarning}</span>\n        </div>\n      )}\n    </div>\n  )\n}\n\nexport default NoMatch\n"
  },
  {
    "path": "src/containers/NoMatch/nomatch.scss",
    "content": "@use '../shared/css/variables' as *;\n\n.no-match {\n  margin: 10% auto;\n  text-align: center;\n\n  .uh-oh {\n    display: inline-block;\n    padding: 2px 8px;\n    border: 1px solid $black-80;\n    border-radius: 4px;\n    margin-bottom: 24px;\n    color: $black-20;\n    font-size: 12px;\n    line-height: 20px;\n    @include bold;\n  }\n\n  .title {\n    margin-bottom: 16px;\n    color: $black-20;\n    font-size: 40px;\n    line-height: 48px;\n    @include bold;\n  }\n\n  .hint {\n    margin-bottom: 16px;\n    color: $black-50;\n    font-size: 16px;\n    line-height: 24px;\n    @include bold;\n  }\n\n  .warning {\n    justify-content: center;\n  }\n}\n"
  },
  {
    "path": "src/containers/NoMatch/test/NoMatch.test.tsx",
    "content": "import { render, screen } from '@testing-library/react'\nimport { I18nextProvider } from 'react-i18next'\nimport { HelmetProvider } from 'react-helmet-async'\nimport MockWsClient from '../../test/mockWsClient'\nimport SocketContext, { ExplorerXrplClient } from '../../shared/SocketContext'\nimport i18n from '../../../i18n/testConfigEnglish'\nimport NoMatch from '../index'\n\n/* eslint-disable react/jsx-props-no-spreading */\ndescribe('NoMatch container', () => {\n  const renderNoMatch = (props = {}) => {\n    const client = new MockWsClient() as unknown as ExplorerXrplClient\n\n    return render(\n      <I18nextProvider i18n={i18n}>\n        <SocketContext.Provider value={client}>\n          <HelmetProvider>\n            <NoMatch {...props} />\n          </HelmetProvider>\n        </SocketContext.Provider>\n      </I18nextProvider>,\n    )\n  }\n\n  it('renders without crashing', () => {\n    renderNoMatch()\n  })\n\n  it('renders default messages and parts', () => {\n    const { container } = renderNoMatch()\n    expect(screen.getByText('UH-OH!')).toBeInTheDocument()\n    expect(screen.getByText('Page Not Found')).toBeInTheDocument()\n    expect(screen.getByText('Please double check your URL')).toBeInTheDocument()\n    expect(container.querySelector('.warning')).toBeInTheDocument()\n  })\n\n  it('renders correct messages from props', () => {\n    const params = {\n      title: 'props_title',\n      hints: ['props_hint_1', 'props_hint_2'],\n    }\n    const { container } = renderNoMatch(params)\n    expect(screen.getByText('UH-OH!')).toBeInTheDocument()\n    expect(screen.getByText('props_title')).toBeInTheDocument()\n    const hints = container.querySelectorAll('.hint')\n    expect(hints).toHaveLength(2)\n    expect(hints[0]).toHaveTextContent('props_hint_1')\n    expect(hints[1]).toHaveTextContent('props_hint_2')\n    expect(container.querySelector('.warning')).toBeInTheDocument()\n  })\n\n  it('does not render warning or uhoh when not an error', () => {\n    const params = {\n      title: 'props_title',\n      hints: ['props_hint_1', 'props_hint_2'],\n      isError: false,\n    }\n    const { container } = renderNoMatch(params)\n    expect(container.querySelector('.uh-oh')).not.toBeInTheDocument()\n    expect(screen.getByText('props_title')).toBeInTheDocument()\n    const hints = container.querySelectorAll('.hint')\n    expect(hints).toHaveLength(2)\n    expect(hints[0]).toHaveTextContent('props_hint_1')\n    expect(hints[1]).toHaveTextContent('props_hint_2')\n    expect(container.querySelector('.warning')).not.toBeInTheDocument()\n  })\n\n  it('renders custom warning', () => {\n    const params = {\n      title: 'props_title',\n      hints: ['props_hint_1', 'props_hint_2'],\n      warning: 'be_warned',\n    }\n    renderNoMatch(params)\n    expect(screen.getByText('be_warned')).toBeInTheDocument()\n  })\n\n  it('renders connection state', () => {\n    i18n.addResource(\n      'en-US',\n      'test',\n      'hint_test',\n      'Version: {{connection.server.version}}',\n    )\n    const params = {\n      title: 'props_title',\n      hints: ['test:hint_test'],\n    }\n    renderNoMatch(params)\n    expect(screen.getByText('Version: 1.9.4')).toBeInTheDocument()\n  })\n})\n"
  },
  {
    "path": "src/containers/SearchResult/index.tsx",
    "content": "import NoMatch from '../NoMatch'\n\nconst SearchResult = () => <NoMatch title=\"hash_not_found\" />\n\nexport default SearchResult\n"
  },
  {
    "path": "src/containers/Token/IOU/Header/index.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { useMemo } from 'react'\nimport './styles.scss'\nimport Currency from '../../../shared/components/Currency'\nimport {\n  HeaderBoxes,\n  MarketData,\n  OverviewData,\n} from '../components/HeaderBoxes'\nimport { LOSToken } from '../../../shared/losTypes'\nimport { TokenHoldersData } from '../api/holders'\nimport DomainLink from '../../../shared/components/DomainLink'\nimport GlobeSvg from '../../../shared/images/globe.svg'\nimport {\n  parseAmount,\n  parseCurrencyAmount,\n  parseIntegerAmount,\n  parsePercent,\n  parsePrice,\n} from '../../../shared/NumberFormattingUtils'\nimport { shortenDomain, stripHttpProtocol } from '../../../shared/utils'\n\ninterface HeaderProps {\n  currency: string\n  tokenData: LOSToken\n  xrpUSDRate: string\n  holdersData?: TokenHoldersData\n  isHoldersDataLoading: boolean\n  ammTvlData?: { tvl: number; account: string }\n  isAmmTvlLoading: boolean\n}\n\nconst calculateCirculatingSupply = (\n  tokenData: LOSToken,\n  holdersData: TokenHoldersData | undefined,\n): number => {\n  if (tokenData.circ_supply) {\n    return Number(tokenData.circ_supply)\n  }\n  let circSupply = Number(tokenData.supply) || holdersData?.totalSupply || 0\n\n  // For stablecoins, don't subtract large percentage holders from circulating supply\n  if (tokenData.asset_subclass !== 'stablecoin' && holdersData) {\n    holdersData.holders.forEach((holder) => {\n      if (holder.percent >= 20) {\n        circSupply -= holder.balance\n      }\n    })\n  }\n\n  return circSupply\n}\n\nexport const Header = ({\n  currency,\n  tokenData,\n  xrpUSDRate,\n  holdersData,\n  isHoldersDataLoading,\n  ammTvlData,\n  isAmmTvlLoading,\n}: HeaderProps) => {\n  const { t } = useTranslation()\n  const circSupply = calculateCirculatingSupply(tokenData, holdersData)\n  const xrpRate = Number(xrpUSDRate) || 0\n\n  // Memoized formatted overview data\n  const overviewData: OverviewData = useMemo(() => {\n    const priceNum = Number(tokenData.price) || 0\n    const normPrice = priceNum * xrpRate\n    const formattedPrice = parsePrice(normPrice)\n    const formattedHolders = parseIntegerAmount(tokenData.holders || 0)\n    const formattedTrustlines = parseIntegerAmount(tokenData.trustlines || 0)\n    const formattedTransferFee =\n      parsePercent(tokenData.transfer_fee || 0) !== '0.00%'\n        ? parsePercent(tokenData.transfer_fee || 0)\n        : '--'\n\n    return {\n      issuer: tokenData.issuer_name || tokenData.issuer_account,\n      issuer_account: tokenData.issuer_account,\n      price: formattedPrice,\n      holders: formattedHolders,\n      trustlines: formattedTrustlines,\n      transfer_fee: formattedTransferFee,\n    }\n  }, [tokenData, xrpRate])\n\n  // Memoized formatted market data\n  const marketData: MarketData = useMemo(() => {\n    const circSupplyNum = Number(circSupply) || 0\n    const priceNum = Number(tokenData.price) || 0\n    const volume24hNum = Number(tokenData.daily_volume) || 0\n    const trades24hNum = Number(tokenData.daily_trades) || 0\n\n    // Format supply values\n    const formattedSupply = parseAmount(\n      holdersData?.totalSupply?.toString() || tokenData.supply || '0',\n    )\n    const formattedCircSupply = parseAmount(circSupplyNum)\n\n    // Calculate market cap\n    let marketCap: string | null = null\n    if (tokenData.market_cap_usd) {\n      marketCap = parseCurrencyAmount(tokenData.market_cap_usd)\n    } else if (circSupplyNum && priceNum && xrpRate) {\n      marketCap = parseCurrencyAmount(circSupplyNum * priceNum * xrpRate)\n    }\n\n    // Format volume and trades\n    const parsedVolume = parseCurrencyAmount(volume24hNum * xrpRate)\n    const formattedVolume = parsedVolume !== '$0.00' ? parsedVolume : '--'\n    const formattedTrades =\n      parseIntegerAmount(trades24hNum) !== '0'\n        ? parseIntegerAmount(trades24hNum)\n        : '--'\n\n    // Format AMM TVL\n    const formattedAmmTvl = ammTvlData?.tvl\n      ? parseCurrencyAmount(ammTvlData.tvl)\n      : ''\n    const formattedTvlUsd = tokenData.tvl_usd\n      ? parseCurrencyAmount(tokenData.tvl_usd)\n      : ''\n\n    return {\n      supply: formattedSupply,\n      circ_supply: formattedCircSupply,\n      market_cap: marketCap || '',\n      market_cap_usd: tokenData.market_cap_usd,\n      volume_24h: formattedVolume,\n      trades_24h: formattedTrades,\n      amm_tvl: formattedAmmTvl,\n      amm_account: ammTvlData?.account || '',\n      tvl_usd: formattedTvlUsd,\n    }\n  }, [circSupply, tokenData, xrpRate, ammTvlData, holdersData])\n\n  return (\n    <div className=\"box token-header iou\">\n      <div className=\"section token-indicator\">\n        <div className=\"token-label\">{t('token')}</div>\n        <div className=\"category-pill\">\n          <div className=\"category-text\">{t('token_type.iou')}</div>\n        </div>\n      </div>\n      <div className=\"section box-header\">\n        <div className=\"token-info-group\">\n          {tokenData.icon ? (\n            <img\n              className=\"token-logo\"\n              alt={`${currency} logo`}\n              src={tokenData.icon}\n            />\n          ) : (\n            <div className=\"token-logo no-logo\" />\n          )}\n          <Currency currency={currency} />\n          {tokenData.issuer_name && (\n            <div className=\"token-issuer-wrap\">\n              (\n              <span className=\"issuer-name\">\n                {tokenData.issuer_name\n                  .trim()\n                  .toUpperCase()\n                  .replace(/\\(/g, '')\n                  .replace(/\\)/g, '')}\n              </span>\n              )\n            </div>\n          )}\n        </div>\n\n        {tokenData.issuer_domain && (\n          <div className=\"header-actions\">\n            <div className=\"domain-link-container\">\n              <GlobeSvg className=\"domain-link-icon\" />\n              <DomainLink\n                className=\"domain-link\"\n                domain={tokenData.issuer_domain}\n                displayDomain={shortenDomain(\n                  stripHttpProtocol(tokenData.issuer_domain),\n                  12,\n                  7,\n                )}\n              />\n            </div>\n          </div>\n        )}\n      </div>\n      <div className=\"section box-content\">\n        <HeaderBoxes\n          overviewData={overviewData}\n          marketData={marketData}\n          isHoldersDataLoading={isHoldersDataLoading}\n          isAmmTvlLoading={isAmmTvlLoading}\n        />\n      </div>\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/Token/IOU/Header/styles.scss",
    "content": "@use '../../../shared/css/variables' as *;\n\n// IOU-specific category pill variant (white border)\n.token-header.iou {\n  .token-indicator {\n    .category-pill {\n      border: 1px solid $white;\n      background: $black-80;\n    }\n  }\n}\n"
  },
  {
    "path": "src/containers/Token/IOU/Header/test/actNotFound.json",
    "content": "{\n  \"account\": \"rDsbeomae4FXwgQTJp9Rs64Qg9vDiTCdBv\",\n  \"error\": \"actNotFound\",\n  \"error_code\": 19,\n  \"error_message\": \"Account not found.\",\n  \"ledger_hash\": \"97992DBB4ED350B572B39D0026604943ACC84A3E5967454147253CB317551891\",\n  \"ledger_index\": 68989958,\n  \"request\": {\n    \"account\": \"rDsbeomae4FXwgQTJp9Rs64Qg9vDiTCdBv\",\n    \"command\": \"account_info\",\n    \"ledger_index\": \"validated\",\n    \"queue\": false,\n    \"signer_lists\": false,\n    \"strict\": false\n  },\n  \"validated\": true\n}\n"
  },
  {
    "path": "src/containers/Token/IOU/Header/test/rippledResponses.json",
    "content": "{\n  \"account_info\": {\n    \"result\": {\n      \"account_data\": {\n        \"Account\": \"rDsbeomae4FXwgQTJp9Rs64Qg9vDiTCdBv\",\n        \"Balance\": \"123456000\",\n        \"Flags\": 0,\n        \"LedgerEntryType\": \"AccountRoot\",\n        \"OwnerCount\": 0,\n        \"PreviousTxnID\": \"6B6F2CA1633A22247058E988372BA9EFFFC5BF10212230B67341CA32DC9D4A82\",\n        \"PreviousTxnLgrSeq\": 68990183,\n        \"Sequence\": 2148991,\n        \"index\": \"C3B625B296E95A21D7BBBB7E3D343AF423B463B87B5D56EE7F79C8E16A47A6F5\",\n        \"signer_lists\": []\n      },\n      \"ledger_hash\": \"43C4195B2C90423771E6C5DF4AED11BF3D77FFD1E8A153A489E5B00C96318FCA\",\n      \"ledger_index\": 68990183,\n      \"validated\": true\n    },\n    \"status\": \"success\",\n    \"type\": \"response\"\n  },\n  \"account_objects\": {\n    \"result\": {\n      \"account\": \"rDsbeomae4FXwgQTJp9Rs64Qg9vDiTCdBv\",\n      \"account_objects\": [],\n      \"ledger_current_index\": 24402380,\n      \"validated\": false\n    },\n    \"status\": \"success\",\n    \"type\": \"response\"\n  },\n  \"gateway_balances\": {\n    \"result\": {\n      \"account\": \"rDsbeomae4FXwgQTJp9Rs64Qg9vDiTCdBv\",\n      \"ledger_hash\": \"F4023C801B8B4D05F16EFE5D8C4C3C14D02354AABBB94151F581A6BF0E04C20B\",\n      \"ledger_index\": 24402706,\n      \"obligations\": {\n        \"ABC\": \"100\"\n      },\n      \"validated\": true\n    },\n    \"status\": \"success\",\n    \"type\": \"response\"\n  },\n  \"server_info\": {\n    \"result\": {\n      \"info\": {\n        \"validated_ledger\": {\n          \"age\": 1,\n          \"base_fee_xrp\": 0.00001,\n          \"hash\": \"EA01E248FCA5CFD33A3393DA5EBCCD9219BA8DB6AF6DC28A3B0A968604F46A76\",\n          \"reserve_base_xrp\": 10,\n          \"reserve_inc_xrp\": 2,\n          \"seq\": 24402729\n        },\n        \"validation_quorum\": 5\n      }\n    },\n    \"status\": \"success\",\n    \"type\": \"response\"\n  }\n}\n"
  },
  {
    "path": "src/containers/Token/IOU/TablePicker/index.tsx",
    "content": "import { useState, useEffect, useMemo } from 'react'\nimport { useTranslation } from 'react-i18next'\n\nimport { TransactionTable } from '../../../shared/components/TransactionTable/TransactionTable'\nimport { Tabs } from '../../../shared/components/Tabs'\nimport { useAccountTransactions } from '../../shared/hooks/useAccountTransactions'\nimport {\n  DexTradeTable,\n  DexTradeFormatted,\n} from '../../../shared/components/DexTradeTable/DexTradeTable'\nimport {\n  HoldersTable,\n  XRPLHolder,\n} from '../../../shared/components/HoldersTable/HoldersTable'\nimport {\n  LOSTransfer,\n  TransfersTable,\n} from '../../shared/components/TransfersTable/TransfersTable'\nimport { TokenHoldersData } from '../api/holders'\nimport { LOSToken } from '../../../shared/losTypes'\nimport { TablePaginationState } from '../../shared/hooks/usePaginationState'\nimport { TableSortingState } from '../../shared/hooks/useSortingState'\n\n// Re-export for backward compatibility\nexport type { TablePaginationState, TableSortingState }\n\n/**\n * Data and loading state for a single table\n */\nexport interface TableDataState {\n  data: any\n  isLoading: boolean\n}\n\nexport interface TablePickerProps {\n  accountId: string\n  currency: string\n  xrpUSDRate: string\n  tokenData: LOSToken\n\n  // Holders table state\n  holdersData?: TokenHoldersData\n  holdersPagination: TablePaginationState\n  holdersLoading: boolean\n\n  // Dex trades table state\n  dexTradesData?: DexTradeFormatted[]\n  dexTradesPagination: TablePaginationState\n  dexTradesSorting: TableSortingState\n  dexTradesLoading: boolean\n  onRefreshDexTrades?: () => void\n\n  // Transfers table state\n  transfersData?: LOSTransfer[]\n  transfersPagination: TablePaginationState\n  transfersSorting: TableSortingState\n  transfersLoading: boolean\n  onRefreshTransfers?: () => void\n}\n\nexport const TablePicker = ({\n  accountId,\n  currency,\n  xrpUSDRate,\n  tokenData,\n  holdersData,\n  holdersPagination,\n  holdersLoading,\n  dexTradesData,\n  dexTradesPagination,\n  dexTradesSorting,\n  dexTradesLoading,\n  onRefreshDexTrades,\n  transfersData,\n  transfersPagination,\n  transfersSorting,\n  transfersLoading,\n  onRefreshTransfers,\n}: TablePickerProps) => {\n  const { t } = useTranslation()\n\n  const { data, error, loading, fetchNextPage, hasNextPage } =\n    useAccountTransactions({\n      account: accountId,\n      tokenId: currency,\n    })\n\n  const [tablePickerState, setTablePickerState] = useState<\n    'all' | 'dex' | 'transfers' | 'holders'\n  >('all')\n\n  // Reset table picker state when token changes\n  useEffect(() => {\n    setTablePickerState('all')\n  }, [currency, accountId])\n\n  // Format data for tables\n  const XRPUSDPrice = Number(xrpUSDRate) || 0\n\n  const holdersFormatted: XRPLHolder[] = useMemo(\n    () =>\n      holdersData?.holders?.map((holder, index) => ({\n        ...holder,\n        rank:\n          (holdersPagination.currentPage - 1) * holdersPagination.pageSize +\n          index +\n          1,\n        value_usd: holder.balance * Number(tokenData?.price) * XRPUSDPrice,\n      })) || [],\n    [\n      holdersData,\n      holdersPagination.currentPage,\n      holdersPagination.pageSize,\n      tokenData?.price,\n      XRPUSDPrice,\n    ],\n  )\n\n  // transfers is already formatted array from pagination service\n  const transfersFormatted: LOSTransfer[] = transfersData || []\n\n  // dexTrades is already formatted array from pagination service\n  const dexTradesFormatted: DexTradeFormatted[] = dexTradesData || []\n\n  // Helper to reset pagination to page 1\n  const resetTablePagination = (setCurrentPage: (page: number) => void) => {\n    setCurrentPage(1)\n  }\n\n  // Helper to render transaction table\n  const renderTransactionTable = () => (\n    <TransactionTable\n      transactions={data?.pages?.map((page: any) => page.transactions).flat()}\n      loading={loading}\n      emptyMessage={error?.message ? t(error.message as any) : ''}\n      onLoadMore={() => fetchNextPage()}\n      hasAdditionalResults={hasNextPage}\n    />\n  )\n\n  // Helper to render dex trades table\n  const renderDexTradesTable = () => (\n    <DexTradeTable\n      transactions={dexTradesFormatted}\n      isLoading={dexTradesLoading}\n      totalTrades={dexTradesPagination.total}\n      currentPage={dexTradesPagination.currentPage}\n      onPageChange={dexTradesPagination.setCurrentPage}\n      pageSize={dexTradesPagination.pageSize}\n      hasMore={dexTradesPagination.hasMore}\n      hasPrevPage={dexTradesPagination.hasPrevPage}\n      sortField={dexTradesSorting.sortField}\n      setSortField={dexTradesSorting.setSortField}\n      sortOrder={dexTradesSorting.sortOrder}\n      setSortOrder={dexTradesSorting.setSortOrder}\n      onRefresh={onRefreshDexTrades}\n    />\n  )\n\n  // Helper to render transfers table\n  const renderTransfersTable = () => (\n    <TransfersTable\n      transactions={transfersFormatted}\n      isTransfersLoading={transfersLoading}\n      totalTransfers={transfersPagination.total}\n      currentPage={transfersPagination.currentPage}\n      onPageChange={transfersPagination.setCurrentPage}\n      pageSize={transfersPagination.pageSize}\n      hasMore={transfersPagination.hasMore}\n      hasPrevPage={transfersPagination.hasPrevPage}\n      sortField={transfersSorting.sortField}\n      setSortField={transfersSorting.setSortField}\n      sortOrder={transfersSorting.sortOrder}\n      setSortOrder={transfersSorting.setSortOrder}\n      onRefresh={onRefreshTransfers}\n    />\n  )\n\n  // Helper to render holders table\n  const renderHoldersTable = () => (\n    <HoldersTable\n      isHoldersDataLoading={holdersLoading}\n      holders={holdersFormatted}\n      totalHolders={holdersPagination.total}\n      currentPage={holdersPagination.currentPage}\n      onPageChange={holdersPagination.setCurrentPage}\n      pageSize={holdersPagination.pageSize}\n    />\n  )\n\n  const tabs = [\n    { id: 'all', labelKey: 'token_page.all_tx' },\n    {\n      id: 'dex',\n      labelKey: 'token_page.dex_tx',\n      onTabClick: () =>\n        resetTablePagination(dexTradesPagination.setCurrentPage),\n    },\n    {\n      id: 'transfers',\n      labelKey: 'token_page.transfers_tx',\n      onTabClick: () =>\n        resetTablePagination(transfersPagination.setCurrentPage),\n    },\n    {\n      id: 'holders',\n      labelKey: 'token_page.holders_table',\n      onTabClick: () => resetTablePagination(holdersPagination.setCurrentPage),\n    },\n  ]\n\n  return (\n    <div className=\"token-transaction-table-container\">\n      <hr className=\"full-width-line\" />\n      <div className=\"tx-table-picker\">\n        <Tabs\n          tabs={tabs}\n          selected={tablePickerState}\n          onTabChange={(tabId) =>\n            setTablePickerState(\n              tabId as 'all' | 'dex' | 'transfers' | 'holders',\n            )\n          }\n        />\n      </div>\n\n      {tablePickerState === 'all' && renderTransactionTable()}\n\n      {tablePickerState === 'dex' && renderDexTradesTable()}\n\n      {tablePickerState === 'transfers' && renderTransfersTable()}\n\n      {tablePickerState === 'holders' && renderHoldersTable()}\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/Token/IOU/api/holders.ts",
    "content": "import axios from 'axios'\nimport logger from '../../../../rippled/lib/logger'\n\nconst log = logger({ name: 'iou' })\n\nexport interface TokenHoldersData {\n  totalSupply: number\n  totalHolders: number\n  holders: Array<{\n    account: string\n    balance: number\n    percent: number\n  }>\n}\n\nconst fetchTokenHoldersInfo = (\n  currency: string,\n  issuer: string,\n  limit: number,\n  offset: number,\n): Promise<TokenHoldersData> =>\n  axios\n    .get(\n      `https://${process.env.XRPL_META_URL}/token/${currency}:${issuer}/holders?limit=${limit}&offset=${offset}`,\n    )\n    .then((resp) => resp.data)\n\nasync function getTokenHolders(\n  currencyCode: string,\n  issuer: string,\n  limit: number = 100,\n  offset: number = 0,\n): Promise<TokenHoldersData> {\n  try {\n    log.info('fetching holders data from XRPLMeta')\n    return await fetchTokenHoldersInfo(currencyCode, issuer, limit, offset)\n  } catch (error) {\n    log.error(\n      `Failed to fetch token holders ${currencyCode}.${issuer}: ${error}`,\n    )\n    throw error\n  }\n}\n\nexport default getTokenHolders\n"
  },
  {
    "path": "src/containers/Token/IOU/api/token.ts",
    "content": "import axios from 'axios'\nimport logger from '../../../../rippled/lib/logger'\nimport { LOSToken } from '../../../shared/losTypes'\n\nconst log = logger({ name: 'iou-token' })\n\nexport interface TokenData {\n  balance: string\n  reserve: number\n  sequence: number\n  rate?: string\n  obligations?: string\n  domain?: string\n  emailHash?: string\n  previousLedger: number\n  previousTxn: string\n  flags: string[]\n}\nconst fetchTokenInfo = (currency: string, issuer: string): Promise<any> =>\n  axios.get(`${process.env.VITE_LOS_URL}/tokens/${currency}.${issuer}`)\n\nconst mapTokenResponse = (response: any): LOSToken => ({\n  currency: response.currency,\n  issuer_account: response.issuer_account,\n  name: response.token_name || undefined,\n  asset_class: response.asset_class,\n  asset_subclass: response.asset_subclass,\n  daily_trades: response.number_of_trades\n    ? String(response.number_of_trades)\n    : undefined,\n  icon: response.icon,\n  ttl: response.ttl,\n  social_links: response.social_links,\n  trustlines: response.number_of_trustlines || undefined,\n  transfer_fee: response.transfer_fee,\n  issuer_domain: response.issuer_domain,\n  issuer_name: response.issuer_name,\n  market_cap: response.market_cap,\n  market_cap_usd: response.market_cap_usd,\n  holders: response.number_of_holders || undefined,\n  daily_volume: response.daily_volume,\n  supply: response.supply,\n  trust_level: response.trust_level,\n  price: response.price,\n  tvl_usd: response.tvl_usd,\n  index: response.index ?? -1,\n  circ_supply: response.circ_supply,\n})\n\nasync function getToken(\n  currencyCode: string,\n  issuer: string,\n): Promise<LOSToken> {\n  try {\n    log.info('fetching token data from LOS')\n    const response = await fetchTokenInfo(currencyCode, issuer)\n    return mapTokenResponse(response.data)\n  } catch (error) {\n    log.error(`Failed to fetch token ${currencyCode}.${issuer}: ${error}`)\n    throw error\n  }\n}\n\nexport default getToken\n"
  },
  {
    "path": "src/containers/Token/IOU/components/HeaderBoxes.tsx",
    "content": "import { useTranslation } from 'react-i18next'\n\nimport { shortenAccount } from '../../../shared/utils'\nimport { Account } from '../../../shared/components/Account'\n\nexport interface OverviewData {\n  issuer: string\n  issuer_account: string\n  price: string // Pre-formatted price string\n  holders: string // Pre-formatted holders count\n  trustlines: string // Pre-formatted trustlines count\n  transfer_fee: string // Pre-formatted transfer fee or '--'\n}\n\nexport interface MarketData {\n  supply: string // Pre-formatted supply\n  circ_supply: string // Pre-formatted circulating supply\n  market_cap: string // Pre-formatted market cap or empty string\n  market_cap_usd?: string // Raw USD value (for reference)\n  volume_24h: string // Pre-formatted volume or '--'\n  trades_24h: string // Pre-formatted trades count or '--'\n  amm_tvl: string // Pre-formatted AMM TVL or empty string\n  amm_account: string // AMM account address\n  tvl_usd?: string // Pre-formatted TVL USD or empty string\n}\n\ninterface HeaderBoxesProps {\n  overviewData: OverviewData\n  marketData: MarketData\n  isHoldersDataLoading?: boolean\n  isAmmTvlLoading?: boolean\n}\n\nexport const HeaderBoxes = ({\n  overviewData,\n  marketData,\n  isHoldersDataLoading = false,\n  isAmmTvlLoading = false,\n}: HeaderBoxesProps): JSX.Element => {\n  const { t } = useTranslation()\n  const {\n    issuer,\n    issuer_account: issuerAccount,\n    price,\n    holders,\n    trustlines,\n    transfer_fee: transferFee,\n  } = overviewData\n  const {\n    supply,\n    circ_supply: circSupply,\n    volume_24h: volume24h,\n    trades_24h: trades24h,\n    amm_tvl: ammTvl,\n    amm_account: ammAccount,\n    tvl_usd: tvlUsd,\n  } = marketData\n\n  const shouldShowAccountLink = !!(tvlUsd || ammTvl) && ammAccount\n\n  return (\n    <div className=\"header-boxes\">\n      <div className=\"header-box\">\n        <div className=\"header-box-title\">\n          {t('token_page.general_overview')}\n        </div>\n        <div className=\"header-box-contents\">\n          <div className=\"header-box-item\">\n            <div className=\"item-name\">{t('token_page.issuer')}</div>\n            <div className=\"item-value account-link\">\n              <Account\n                account={issuerAccount}\n                displayText={shortenAccount(issuer)}\n              />\n            </div>\n          </div>\n          <div className=\"header-box-item\">\n            <div className=\"item-name\">{t('token_page.price')}</div>\n            <div className=\"item-value\">{price}</div>\n          </div>\n          <div className=\"header-box-item\">\n            <div className=\"item-name\">{t('token_page.holders')}</div>\n            <div className=\"item-value\">{holders}</div>\n          </div>\n          <div className=\"header-box-item\">\n            <div className=\"item-name\">{t('iou_page.trustlines')}</div>\n            <div className=\"item-value\">{trustlines}</div>\n          </div>\n          <div className=\"header-box-item\">\n            <div className=\"item-name\">{t('token_page.transfer_fee')}</div>\n            <div className=\"item-value\">{transferFee}</div>\n          </div>\n        </div>\n      </div>\n\n      <div className=\"header-box\">\n        <div className=\"header-box-title\">{t('token_page.market_data')}</div>\n        <div className=\"header-box-contents\">\n          <div className=\"header-box-item\">\n            <div className=\"item-name\">{t('token_page.supply')}</div>\n            <div className=\"item-value\">{supply}</div>\n          </div>\n          <div className=\"header-box-item\">\n            <div className=\"item-name\">\n              {t('token_page.circulating_supply')}\n            </div>\n            <div className=\"item-value\">\n              {isHoldersDataLoading ? (\n                <span className=\"loading-spinner\" />\n              ) : (\n                circSupply\n              )}\n            </div>\n          </div>\n          <div className=\"header-box-item\">\n            <div className=\"item-name\">{t('token_page.market_cap')}</div>\n            <div className=\"item-value\">\n              {isHoldersDataLoading ? (\n                <span className=\"loading-spinner\" />\n              ) : (\n                marketData.market_cap\n              )}\n            </div>\n          </div>\n          <div className=\"header-box-item\">\n            <div className=\"item-name\">{t('token_page.volume_24h')}</div>\n            <div className=\"item-value\">{volume24h}</div>\n          </div>\n          <div className=\"header-box-item\">\n            <div className=\"item-name\">{t('token_page.trades_24h')}</div>\n            <div className=\"item-value\">{trades24h}</div>\n          </div>\n          <div className=\"header-box-item\">\n            <div className=\"item-name\">{t('token_page.amm_tvl')}</div>\n            <div className=\"item-value\">\n              {isAmmTvlLoading && <span className=\"loading-spinner\" />}\n              {!isAmmTvlLoading &&\n                (shouldShowAccountLink ? (\n                  <Account\n                    account={ammAccount}\n                    displayText={tvlUsd || ammTvl}\n                  />\n                ) : (\n                  '--'\n                ))}\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/Token/IOU/hooks/useMarketCalculations.ts",
    "content": "import { useMemo } from 'react'\nimport { formatPrice } from '../../../shared/utils'\nimport { TokenHoldersData } from '../api/holders'\nimport { LOSToken } from '../../../shared/losTypes'\nimport {\n  calculateCirculatingSupply,\n  formatCirculatingSupply,\n} from '../utils/tokenCalculations'\n\ninterface MarketCalculations {\n  marketCap: string | null\n  circSupply: number\n  formattedCircSupply: string\n}\n\ninterface UseMarketCalculationsProps {\n  holdersData: TokenHoldersData | undefined\n  tokenData: LOSToken\n  price: string\n  xrpUSDRate: string\n  isHoldersDataLoading: boolean\n}\n\nexport const useMarketCalculations = ({\n  holdersData,\n  tokenData,\n  price,\n  xrpUSDRate,\n  isHoldersDataLoading,\n}: UseMarketCalculationsProps): MarketCalculations =>\n  useMemo(() => {\n    const circSupply = calculateCirculatingSupply(holdersData, tokenData)\n\n    const marketCap =\n      !isHoldersDataLoading && circSupply && price && xrpUSDRate\n        ? formatPrice(\n            Number(circSupply) * Number(price) * Number(xrpUSDRate),\n          ) || null\n        : null\n\n    const formattedCircSupply = formatCirculatingSupply(circSupply)\n\n    return {\n      marketCap,\n      circSupply,\n      formattedCircSupply,\n    }\n  }, [holdersData, tokenData, price, xrpUSDRate, isHoldersDataLoading])\n"
  },
  {
    "path": "src/containers/Token/IOU/index.tsx",
    "content": "import { FC, PropsWithChildren, useState, useContext, useEffect } from 'react'\nimport { Helmet } from 'react-helmet-async'\nimport { useQuery } from 'react-query'\nimport { Header } from './Header'\nimport { TablePicker } from './TablePicker'\nimport NoMatch from '../../NoMatch'\n\nimport './styles.scss'\nimport '../shared/styles.scss'\nimport { NOT_FOUND, BAD_REQUEST, DROPS_TO_XRP_FACTOR } from '../../shared/utils'\nimport { useAnalytics } from '../../shared/analytics'\nimport { ErrorMessages } from '../../shared/Interfaces'\nimport { TOKEN_ROUTE } from '../../App/routes'\nimport { useRouteParams } from '../../shared/routing'\nimport { Loader } from '../../shared/components/Loader'\nimport { Tooltip, useTooltip } from '../../shared/components/Tooltip'\nimport SocketContext from '../../shared/SocketContext'\nimport { getAMMInfoByAssets } from '../../../rippled/lib/rippled'\nimport getTokenHolders from './api/holders'\nimport { paginationService as dexTradesPaginationService } from './services/dexTradesPagination'\nimport { paginationService as transfersPaginationService } from '../shared/services/transfersPagination'\nimport { useCursorPaginatedQuery } from '../../shared/hooks/useCursorPaginatedQuery'\nimport { PAGINATION_CONFIG, INITIAL_PAGE } from '../shared/constants'\nimport { useXRPToUSDRate } from '../../shared/hooks/useXRPToUSDRate'\nimport getToken from './api/token'\n\nconst ERROR_MESSAGES: ErrorMessages = {\n  default: {\n    title: 'generic_error',\n    hints: ['not_your_fault'],\n  },\n  [NOT_FOUND]: {\n    title: 'account_not_found',\n    hints: ['check_account_id'],\n  },\n  [BAD_REQUEST]: {\n    title: 'invalid_xrpl_address',\n    hints: ['check_account_id'],\n  },\n}\n\nconst getErrorMessage = (error: unknown) =>\n  ERROR_MESSAGES[error as string | number] || ERROR_MESSAGES.default\n\nconst Page: FC<PropsWithChildren<{ accountId: string }>> = ({\n  accountId,\n  children,\n}) => (\n  <div className=\"token-page\">\n    <Helmet title={`${accountId.substring(0, 12)}...`} />\n    {children}\n  </div>\n)\n\nexport const IOU = () => {\n  const { trackScreenLoaded, trackException } = useAnalytics()\n  const { tooltip } = useTooltip()\n  const { token = '' } = useRouteParams(TOKEN_ROUTE)\n  const [currency, accountId] = token.split('.')\n\n  // Holders pagination\n  const [holdersPage, setHoldersPage] = useState(INITIAL_PAGE)\n\n  // get basic token stats and info\n  const {\n    data: tokenData,\n    error: tokenDataError,\n    isLoading: isTokenDataLoading,\n  } = useQuery({\n    queryKey: ['token', currency, accountId],\n    queryFn: () => getToken(currency, accountId),\n  })\n\n  // Track token data API errors\n  useEffect(() => {\n    if (tokenDataError) {\n      trackException(\n        `token ${currency}.${accountId} --- ${JSON.stringify(tokenDataError)}`,\n      )\n    }\n  }, [tokenDataError, currency, accountId, trackException])\n\n  // get top holders information for calculations and holders table\n  const { data: holdersData, isLoading: isHoldersDataLoading } = useQuery({\n    queryKey: ['holders', currency, accountId, holdersPage],\n    queryFn: () => {\n      const offset = (holdersPage - 1) * PAGINATION_CONFIG.HOLDERS_PAGE_SIZE\n      return getTokenHolders(\n        currency,\n        accountId,\n        PAGINATION_CONFIG.HOLDERS_PAGE_SIZE,\n        offset,\n      )\n    },\n  })\n\n  // get XRP to USD rate\n  const XRPUSDPrice = useXRPToUSDRate()\n\n  // get rippled socket for AMM info\n  const rippledSocket = useContext(SocketContext)\n\n  // DEX Trades — using shared hook\n  const tokenId = `${currency}.${accountId}`\n  const dexTrades = useCursorPaginatedQuery({\n    service: dexTradesPaginationService,\n    id: tokenId,\n    pageSize: PAGINATION_CONFIG.DEX_TRADES_PAGE_SIZE,\n    enabled: !!currency && !!accountId,\n  })\n\n  // Transfers — using shared hook\n  const transfers = useCursorPaginatedQuery({\n    service: transfersPaginationService,\n    id: tokenId,\n    pageSize: PAGINATION_CONFIG.TRANSFERS_PAGE_SIZE,\n    enabled: !!currency && !!accountId,\n  })\n\n  // get amm info for TVL calculation\n  // note: only fetch xrp-<token> amm info to simplify API calls for most tokens\n  const fetchAmmInfo = () =>\n    getAMMInfoByAssets(\n      rippledSocket,\n      { currency: 'XRP' },\n      { currency, issuer: accountId },\n    ).then((data) => ({\n      tvl: (Number(data.amm.amount) / DROPS_TO_XRP_FACTOR) * XRPUSDPrice * 2,\n      account: data.amm.account,\n    }))\n\n  const { data: ammTvlData, isLoading: isAmmTvlLoading } = useQuery({\n    queryKey: ['ammTvl', currency, accountId],\n    queryFn: fetchAmmInfo,\n    enabled: !!XRPUSDPrice, // only fetch if we have a valid XRP to USD price\n  })\n\n  // Reset pagination when token changes\n  useEffect(() => {\n    setHoldersPage(INITIAL_PAGE)\n  }, [currency, accountId])\n\n  useEffect(() => {\n    trackScreenLoaded({\n      issuer: accountId,\n      currency_code: currency,\n    })\n\n    return () => {\n      window.scrollTo(0, 0)\n    }\n  }, [accountId, currency, trackScreenLoaded])\n\n  const renderError = () => {\n    const message = getErrorMessage(tokenDataError)\n    return <NoMatch title={message.title} hints={message.hints} />\n  }\n\n  if (tokenDataError) {\n    return <Page accountId={accountId}>{renderError()}</Page>\n  }\n\n  return (\n    <Page accountId={accountId}>\n      {isTokenDataLoading ? (\n        <Loader />\n      ) : (\n        tokenData && (\n          <Header\n            currency={currency}\n            tokenData={tokenData}\n            xrpUSDRate={XRPUSDPrice.toString()}\n            holdersData={holdersData}\n            isHoldersDataLoading={isHoldersDataLoading}\n            ammTvlData={ammTvlData}\n            isAmmTvlLoading={isAmmTvlLoading}\n          />\n        )\n      )}\n\n      {accountId && tokenData && (\n        <div className=\"section\">\n          <TablePicker\n            accountId={accountId}\n            currency={currency}\n            xrpUSDRate={XRPUSDPrice.toString()}\n            tokenData={tokenData}\n            holdersData={holdersData}\n            holdersPagination={{\n              currentPage: holdersPage,\n              setCurrentPage: setHoldersPage,\n              pageSize: PAGINATION_CONFIG.HOLDERS_PAGE_SIZE,\n              total: holdersData?.totalHolders || 0,\n            }}\n            holdersLoading={isHoldersDataLoading}\n            dexTradesData={dexTrades.data?.items || []}\n            dexTradesPagination={{\n              currentPage: dexTrades.page,\n              setCurrentPage: dexTrades.setPage,\n              pageSize: PAGINATION_CONFIG.DEX_TRADES_PAGE_SIZE,\n              total: dexTrades.data?.totalItems || 0,\n              hasMore: dexTrades.data?.hasMore || false,\n              hasPrevPage: dexTrades.page > 1,\n            }}\n            dexTradesSorting={{\n              sortField: dexTrades.sortField,\n              setSortField: dexTrades.setSortField,\n              sortOrder: dexTrades.sortOrder,\n              setSortOrder: dexTrades.setSortOrder,\n            }}\n            dexTradesLoading={dexTrades.isLoading}\n            onRefreshDexTrades={dexTrades.refresh}\n            transfersData={transfers.data?.items || []}\n            transfersPagination={{\n              currentPage: transfers.page,\n              setCurrentPage: transfers.setPage,\n              pageSize: PAGINATION_CONFIG.TRANSFERS_PAGE_SIZE,\n              total: transfers.data?.totalItems || 0,\n              hasMore: transfers.data?.hasMore || false,\n              hasPrevPage: transfers.page > 1,\n            }}\n            transfersSorting={{\n              sortField: transfers.sortField,\n              setSortField: transfers.setSortField,\n              sortOrder: transfers.sortOrder,\n              setSortOrder: transfers.setSortOrder,\n            }}\n            transfersLoading={transfers.isLoading}\n            onRefreshTransfers={transfers.refresh}\n          />\n        </div>\n      )}\n      <Tooltip tooltip={tooltip} />\n    </Page>\n  )\n}\n"
  },
  {
    "path": "src/containers/Token/IOU/services/dexTradesPagination.ts",
    "content": "import { getDexTrades } from '../../shared/api/tokenTx'\nimport { DexTradeFormatted } from '../../../shared/components/DexTradeTable/DexTradeTable'\nimport { formatDexTrade } from '../../../shared/components/DexTradeTable/formatDexTrade'\nimport {\n  CursorPaginationService,\n  PaginationResult,\n} from '../../../shared/services/CursorPaginationService'\n\nexport interface DexTradesPaginationResult {\n  trades: DexTradeFormatted[]\n  totalTrades: number\n  hasMore: boolean\n  isLoading: boolean\n}\n\nexport const paginationService = new CursorPaginationService<DexTradeFormatted>(\n  {\n    fetchFn: getDexTrades,\n    formatFn: formatDexTrade,\n    batchSize: 200,\n    pageSize: 10,\n  },\n)\n\nfunction toResult(\n  result: PaginationResult<DexTradeFormatted>,\n): DexTradesPaginationResult {\n  return {\n    trades: result.items,\n    totalTrades: result.totalItems,\n    hasMore: result.hasMore,\n    isLoading: result.isLoading,\n  }\n}\n\nexport const dexTradesPaginationService = {\n  async getDexTradesPage(\n    tokenId: string,\n    page: number,\n    pageSize?: number,\n    sortField?: string,\n    sortOrder?: string,\n  ): Promise<DexTradesPaginationResult> {\n    const result = await paginationService.getPage(\n      tokenId,\n      page,\n      pageSize,\n      sortField,\n      sortOrder,\n    )\n    return toResult(result)\n  },\n\n  clearCache(tokenId?: string, sortField?: string, sortOrder?: string): void {\n    paginationService.clearCache(tokenId, sortField, sortOrder)\n  },\n\n  getCachedTradesCount(tokenId: string): number {\n    return paginationService.getCachedItemCount(tokenId)\n  },\n}\n"
  },
  {
    "path": "src/containers/Token/IOU/styles.scss",
    "content": "@import '../shared/styles';\n@import '../../shared/css/data-tables-mobile';\n"
  },
  {
    "path": "src/containers/Token/IOU/test/Header/Header.test.tsx",
    "content": "import { render, screen } from '@testing-library/react'\nimport { I18nextProvider } from 'react-i18next'\nimport { BrowserRouter as Router } from 'react-router'\nimport moxios from 'moxios'\nimport i18n from '../../../../../i18n/testConfigEnglish'\nimport { Header } from '../../Header'\nimport { LOSToken } from '../../../../shared/losTypes'\nimport { TokenHoldersData } from '../../api/holders'\n\njest.mock('../../../../shared/components/Currency', () => ({\n  __esModule: true,\n  default: ({ currency }: { currency: string }) => <div>{currency}</div>,\n}))\n\njest.mock('../../components/HeaderBoxes', () => ({\n  HeaderBoxes: () => <div>HeaderBoxes</div>,\n}))\n\njest.mock('../../../../shared/components/Account', () => ({\n  Account: ({ displayText }: { displayText: string }) => (\n    <div>{displayText}</div>\n  ),\n}))\n\njest.mock('../../../../shared/utils', () => ({\n  shortenAccount: (account: string) => account.substring(0, 10),\n  localizeNumber: (num: number) => num.toString(),\n  formatLargeNumber: (d: number, digits: number = 1) => {\n    if (d >= 1000000) return { num: (d / 1000000).toFixed(digits), unit: 'M' }\n    if (d >= 1000) return { num: (d / 1000).toFixed(digits), unit: 'K' }\n    return { num: d.toString(), unit: '' }\n  },\n  formatSmallNumber: (value: number) => value.toFixed(4),\n  shortenDomain: (domain: string) => domain,\n  stripHttpProtocol: (url: string) => url.replace(/^https?:\\/\\//, ''),\n}))\n\nconst TestWrapper = ({ children }: { children: React.ReactNode }) => (\n  <I18nextProvider i18n={i18n}>\n    <Router>{children}</Router>\n  </I18nextProvider>\n)\n\nconst mockTokenData: LOSToken = {\n  issuer_account: 'rN7n7otQDd6FczFgLdSqtcsAUxDkw6fzRH',\n  issuer_name: 'Test Issuer',\n  issuer_domain: 'https://example.com',\n  icon: 'https://example.com/icon.png',\n  price: '0.50',\n  holders: 1000,\n  trustlines: 5000,\n  transfer_fee: 0.5,\n  supply: '1000000',\n  circ_supply: '800000',\n  currency: 'USD',\n  index: 0,\n  daily_volume: '50000',\n  daily_trades: '1234',\n  market_cap_usd: '400000',\n  tvl_usd: '100000',\n  asset_subclass: 'stablecoin',\n}\n\nconst mockHoldersData: TokenHoldersData = {\n  totalHolders: 2,\n  holders: [\n    {\n      account: 'rN7n7otQDd6FczFgLdSqtcsAUxDkw6fzRH',\n      balance: 250000,\n      percent: 25,\n    },\n    {\n      account: 'rLNaPoKeeBjZe2qs6x52yVPZpZ8td4dc6w',\n      balance: 150000,\n      percent: 15,\n    },\n  ],\n  totalSupply: 1000000,\n}\n\ndescribe('Header Component', () => {\n  beforeEach(() => {\n    moxios.install()\n  })\n\n  afterEach(() => {\n    moxios.uninstall()\n  })\n\n  it('renders without crashing', () => {\n    render(\n      <TestWrapper>\n        <Header\n          currency=\"USD\"\n          tokenData={mockTokenData}\n          xrpUSDRate=\"2.50\"\n          isHoldersDataLoading={false}\n          isAmmTvlLoading={false}\n        />\n      </TestWrapper>,\n    )\n    expect(screen.getByText('USD')).toBeInTheDocument()\n  })\n\n  it('displays token currency', () => {\n    render(\n      <TestWrapper>\n        <Header\n          currency=\"EUR\"\n          tokenData={mockTokenData}\n          xrpUSDRate=\"2.50\"\n          isHoldersDataLoading={false}\n          isAmmTvlLoading={false}\n        />\n      </TestWrapper>,\n    )\n    expect(screen.getByText('EUR')).toBeInTheDocument()\n  })\n\n  it('displays issuer name when available', () => {\n    const { container } = render(\n      <TestWrapper>\n        <Header\n          currency=\"USD\"\n          tokenData={mockTokenData}\n          xrpUSDRate=\"2.50\"\n          isHoldersDataLoading={false}\n          isAmmTvlLoading={false}\n        />\n      </TestWrapper>,\n    )\n    const issuerNameSpan = container.querySelector('.issuer-name')\n    expect(issuerNameSpan).toBeInTheDocument()\n    expect(issuerNameSpan?.textContent).toBe('TEST ISSUER')\n  })\n\n  it('displays issuer domain link when available', () => {\n    render(\n      <TestWrapper>\n        <Header\n          currency=\"USD\"\n          tokenData={mockTokenData}\n          xrpUSDRate=\"2.50\"\n          isHoldersDataLoading={false}\n          isAmmTvlLoading={false}\n        />\n      </TestWrapper>,\n    )\n    expect(screen.getByText('example.com')).toBeInTheDocument()\n  })\n\n  it('renders HeaderBoxes component', () => {\n    render(\n      <TestWrapper>\n        <Header\n          currency=\"USD\"\n          tokenData={mockTokenData}\n          xrpUSDRate=\"2.50\"\n          isHoldersDataLoading={false}\n          isAmmTvlLoading={false}\n        />\n      </TestWrapper>,\n    )\n    expect(screen.getByText('HeaderBoxes')).toBeInTheDocument()\n  })\n\n  it('displays token logo when available', () => {\n    const { container } = render(\n      <TestWrapper>\n        <Header\n          currency=\"USD\"\n          tokenData={mockTokenData}\n          xrpUSDRate=\"2.50\"\n          isHoldersDataLoading={false}\n          isAmmTvlLoading={false}\n        />\n      </TestWrapper>,\n    )\n    const logo = container.querySelector('img.token-logo')\n    expect(logo).toBeInTheDocument()\n    expect(logo).toHaveAttribute('src', 'https://example.com/icon.png')\n  })\n\n  it('displays placeholder when token logo is not available', () => {\n    const tokenDataWithoutIcon = { ...mockTokenData, icon: '' }\n    const { container } = render(\n      <TestWrapper>\n        <Header\n          currency=\"USD\"\n          tokenData={tokenDataWithoutIcon}\n          xrpUSDRate=\"2.50\"\n          isHoldersDataLoading={false}\n          isAmmTvlLoading={false}\n        />\n      </TestWrapper>,\n    )\n    const placeholder = container.querySelector('.token-logo.no-logo')\n    expect(placeholder).toBeInTheDocument()\n  })\n\n  it('handles issuer domain without protocol', () => {\n    const tokenDataWithoutProtocol = {\n      ...mockTokenData,\n      issuer_domain: 'example.com',\n    }\n    render(\n      <TestWrapper>\n        <Header\n          currency=\"USD\"\n          tokenData={tokenDataWithoutProtocol}\n          xrpUSDRate=\"2.50\"\n          isHoldersDataLoading={false}\n          isAmmTvlLoading={false}\n        />\n      </TestWrapper>,\n    )\n    const link = screen.getByText('example.com').closest('a')\n    expect(link).toHaveAttribute('href', 'https://example.com')\n  })\n\n  it('handles issuer domain with protocol', () => {\n    const tokenDataWithProtocol = {\n      ...mockTokenData,\n      issuer_domain: 'https://example.com',\n    }\n    render(\n      <TestWrapper>\n        <Header\n          currency=\"USD\"\n          tokenData={tokenDataWithProtocol}\n          xrpUSDRate=\"2.50\"\n          isHoldersDataLoading={false}\n          isAmmTvlLoading={false}\n        />\n      </TestWrapper>,\n    )\n    const link = screen.getByText('example.com').closest('a')\n    expect(link).toHaveAttribute('href', 'https://example.com')\n  })\n\n  it('passes holders data to HeaderBoxes', () => {\n    render(\n      <TestWrapper>\n        <Header\n          currency=\"USD\"\n          tokenData={mockTokenData}\n          xrpUSDRate=\"2.50\"\n          holdersData={mockHoldersData}\n          isHoldersDataLoading={false}\n          isAmmTvlLoading={false}\n        />\n      </TestWrapper>,\n    )\n    expect(screen.getByText('HeaderBoxes')).toBeInTheDocument()\n  })\n\n  it('passes AMM TVL data to HeaderBoxes', () => {\n    const ammTvlData = { tvl: 100000, account: 'rAMMAccount123456789' }\n    render(\n      <TestWrapper>\n        <Header\n          currency=\"USD\"\n          tokenData={mockTokenData}\n          xrpUSDRate=\"2.50\"\n          ammTvlData={ammTvlData}\n          isHoldersDataLoading={false}\n          isAmmTvlLoading={false}\n        />\n      </TestWrapper>,\n    )\n    expect(screen.getByText('HeaderBoxes')).toBeInTheDocument()\n  })\n\n  it('passes loading states to HeaderBoxes', () => {\n    render(\n      <TestWrapper>\n        <Header\n          currency=\"USD\"\n          tokenData={mockTokenData}\n          xrpUSDRate=\"2.50\"\n          isHoldersDataLoading\n          isAmmTvlLoading\n        />\n      </TestWrapper>,\n    )\n    expect(screen.getByText('HeaderBoxes')).toBeInTheDocument()\n  })\n\n  it('handles zero XRP USD rate', () => {\n    render(\n      <TestWrapper>\n        <Header\n          currency=\"USD\"\n          tokenData={mockTokenData}\n          xrpUSDRate=\"0\"\n          isHoldersDataLoading={false}\n          isAmmTvlLoading={false}\n        />\n      </TestWrapper>,\n    )\n    expect(screen.getByText('USD')).toBeInTheDocument()\n  })\n\n  it('handles non-stablecoin asset subclass', () => {\n    const tokenDataNonStablecoin = {\n      ...mockTokenData,\n      asset_subclass: 'utility',\n    }\n    render(\n      <TestWrapper>\n        <Header\n          currency=\"USD\"\n          tokenData={tokenDataNonStablecoin}\n          xrpUSDRate=\"2.50\"\n          holdersData={mockHoldersData}\n          isHoldersDataLoading={false}\n          isAmmTvlLoading={false}\n        />\n      </TestWrapper>,\n    )\n    expect(screen.getByText('USD')).toBeInTheDocument()\n  })\n\n  it('renders token label and category pill', () => {\n    const { container } = render(\n      <TestWrapper>\n        <Header\n          currency=\"USD\"\n          tokenData={mockTokenData}\n          xrpUSDRate=\"2.50\"\n          isHoldersDataLoading={false}\n          isAmmTvlLoading={false}\n        />\n      </TestWrapper>,\n    )\n    expect(container.querySelector('.token-indicator')).toBeInTheDocument()\n    expect(container.querySelector('.category-pill')).toBeInTheDocument()\n  })\n\n  it('handles issuer name with special characters', () => {\n    const tokenDataWithSpecialChars = {\n      ...mockTokenData,\n      issuer_name: '(Test) Issuer (Name)',\n    }\n    const { container } = render(\n      <TestWrapper>\n        <Header\n          currency=\"USD\"\n          tokenData={tokenDataWithSpecialChars}\n          xrpUSDRate=\"2.50\"\n          isHoldersDataLoading={false}\n          isAmmTvlLoading={false}\n        />\n      </TestWrapper>,\n    )\n\n    const issuerNameSpan = container.querySelector('.issuer-name')\n    expect(issuerNameSpan).toBeInTheDocument()\n    expect(issuerNameSpan?.textContent).toBe('TEST ISSUER NAME')\n  })\n\n  it('handles missing issuer name', () => {\n    const tokenDataWithoutIssuerName = {\n      ...mockTokenData,\n      issuer_name: '',\n    }\n    render(\n      <TestWrapper>\n        <Header\n          currency=\"USD\"\n          tokenData={tokenDataWithoutIssuerName}\n          xrpUSDRate=\"2.50\"\n          isHoldersDataLoading={false}\n          isAmmTvlLoading={false}\n        />\n      </TestWrapper>,\n    )\n    expect(screen.getByText('USD')).toBeInTheDocument()\n  })\n})\n"
  },
  {
    "path": "src/containers/Token/IOU/test/TablePicker/TablePicker.test.tsx",
    "content": "import { render, fireEvent, waitFor } from '@testing-library/react'\nimport { I18nextProvider } from 'react-i18next'\nimport { BrowserRouter as Router } from 'react-router'\nimport { QueryClientProvider } from 'react-query'\nimport moxios from 'moxios'\nimport i18n from '../../../../../i18n/testConfig'\nimport { TablePicker } from '../../TablePicker'\nimport TEST_TRANSACTIONS_DATA from '../../../../Accounts/AccountTransactionTable/test/mockTransactions.json'\n\nimport { getAccountTransactions } from '../../../../../rippled'\nimport { testQueryClient } from '../../../../test/QueryClient'\nimport { flushPromises } from '../../../../test/utils'\nimport Mock = jest.Mock\n\njest.mock('../../../../../rippled', () => ({\n  __esModule: true,\n  getAccountTransactions: jest.fn(),\n}))\n\nconst TEST_ACCOUNT_ID = 'rTEST_ACCOUNT'\nconst TEST_CURRENCY = 'abc'\nconst TEST_TOKEN_DATA = {\n  currency: TEST_CURRENCY,\n  issuer_account: TEST_ACCOUNT_ID,\n  trustlines: 100,\n  index: 0,\n  price: '1.0',\n}\n\nconst mockHoldersData = {\n  holders: [\n    {\n      account: 'rN7n7otQDd6FczFgLdSqtcsAUxDkw6fzRH',\n      balance: 250000,\n      percent: 25,\n    },\n  ],\n  totalSupply: 1000000,\n}\n\nconst mockDexTrades = [\n  {\n    hash: 'E3FE6EA3D48F0C2B639448020EA4F03D4F4F8FFDB243A852A0F59177921B4879',\n    ledger: 12345,\n    timestamp: 1609459200,\n    from: 'rN7n7otQDd6FczFgLdSqtcsAUxDkw6fzRH',\n    to: 'rLNaPoKeeBjZe2qs6x52yVPZpZ8td4dc6w',\n    amount_in: {\n      currency: 'USD',\n      issuer: 'rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B',\n      amount: '100',\n    },\n    amount_out: {\n      currency: 'XRP',\n      issuer: '',\n      amount: '500',\n    },\n    rate: 5,\n    type: 'orderBook',\n  },\n]\n\nconst mockTransfers = [\n  {\n    hash: 'E3FE6EA3D48F0C2B639448020EA4F03D4F4F8FFDB243A852A0F59177921B4879',\n    ledger: 12345,\n    action: 'send',\n    timestamp: 1609459200,\n    from: 'rN7n7otQDd6FczFgLdSqtcsAUxDkw6fzRH',\n    to: 'rLNaPoKeeBjZe2qs6x52yVPZpZ8td4dc6w',\n    amount: {\n      currency: 'USD',\n      issuer: 'rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B',\n      value: '100',\n    },\n  },\n]\n\ndescribe('TablePicker container', () => {\n  beforeEach(() => {\n    moxios.install()\n  })\n\n  afterEach(() => {\n    moxios.uninstall()\n  })\n\n  const renderTablePicker = (\n    getAccountTransactionsImpl = () => new Promise(() => {}),\n    overrides: any = {},\n  ) => {\n    ;(getAccountTransactions as Mock).mockImplementation(\n      getAccountTransactionsImpl,\n    )\n    return render(\n      <QueryClientProvider client={testQueryClient}>\n        <I18nextProvider i18n={i18n}>\n          <Router>\n            <TablePicker\n              accountId={TEST_ACCOUNT_ID}\n              currency={TEST_CURRENCY}\n              xrpUSDRate=\"1.0\"\n              tokenData={TEST_TOKEN_DATA}\n              holdersData={overrides.holdersData}\n              holdersPagination={\n                overrides.holdersPagination || {\n                  currentPage: 1,\n                  setCurrentPage: jest.fn(),\n                  pageSize: 20,\n                  total: 0,\n                }\n              }\n              holdersLoading={overrides.holdersLoading || false}\n              dexTradesData={overrides.dexTradesData || []}\n              dexTradesPagination={\n                overrides.dexTradesPagination || {\n                  currentPage: 1,\n                  setCurrentPage: jest.fn(),\n                  pageSize: 10,\n                  total: 0,\n                }\n              }\n              dexTradesSorting={\n                overrides.dexTradesSorting || {\n                  sortField: 'timestamp',\n                  setSortField: jest.fn(),\n                  sortOrder: 'desc',\n                  setSortOrder: jest.fn(),\n                }\n              }\n              dexTradesLoading={overrides.dexTradesLoading || false}\n              transfersData={overrides.transfersData || []}\n              transfersPagination={\n                overrides.transfersPagination || {\n                  currentPage: 1,\n                  setCurrentPage: jest.fn(),\n                  pageSize: 10,\n                  total: 0,\n                }\n              }\n              transfersSorting={\n                overrides.transfersSorting || {\n                  sortField: 'timestamp',\n                  setSortField: jest.fn(),\n                  sortOrder: 'desc',\n                  setSortOrder: jest.fn(),\n                }\n              }\n              transfersLoading={overrides.transfersLoading || false}\n              onRefreshDexTrades={overrides.onRefreshDexTrades}\n              onRefreshTransfers={overrides.onRefreshTransfers}\n            />\n          </Router>\n        </I18nextProvider>\n      </QueryClientProvider>,\n    )\n  }\n\n  it('renders static parts', () => {\n    const { container } = renderTablePicker()\n    expect(container.querySelectorAll('.transaction-table').length).toBe(1)\n  })\n\n  it('renders loader when fetching data', () => {\n    const { container } = renderTablePicker()\n    expect(container.querySelectorAll('.loader').length).toBe(1)\n  })\n\n  it('renders dynamic content with transaction data', async () => {\n    const { container } = renderTablePicker(() =>\n      Promise.resolve(TEST_TRANSACTIONS_DATA),\n    )\n\n    await flushPromises()\n    await waitFor(() => {\n      expect(container.querySelector('.load-more-btn')).toBeInTheDocument()\n    })\n    expect(container.querySelector('.transaction-table')).toBeInTheDocument()\n    expect(\n      container.querySelectorAll('.transaction-li.transaction-li-header')\n        .length,\n    ).toBe(1)\n    expect(container.querySelectorAll('a').length).toBe(60)\n\n    fireEvent.click(container.querySelector('.load-more-btn')!)\n    expect(getAccountTransactions).toHaveBeenCalledWith(\n      TEST_ACCOUNT_ID,\n      TEST_CURRENCY,\n      '44922483.5',\n      undefined,\n      undefined,\n    )\n  })\n\n  it('renders error message when request fails', async () => {\n    const { container } = renderTablePicker(() => Promise.reject())\n\n    await flushPromises()\n    await waitFor(() => {\n      expect(\n        container.querySelector('.empty-transactions-message'),\n      ).toBeInTheDocument()\n    })\n\n    expect(container.querySelector('.load-more-btn')).not.toBeInTheDocument()\n    expect(container.querySelector('.transaction-table')).toBeInTheDocument()\n    expect(\n      container.querySelector('.empty-transactions-message'),\n    ).toHaveTextContent('get_account_transactions_failed')\n    expect(container.querySelectorAll('a').length).toBe(0)\n  })\n\n  it('renders with holders data', () => {\n    const setCurrentPage = jest.fn()\n    const { container } = renderTablePicker(() => new Promise(() => {}), {\n      holdersData: mockHoldersData,\n      holdersPagination: {\n        currentPage: 1,\n        setCurrentPage,\n        pageSize: 20,\n        total: 100,\n      },\n    })\n    expect(container.querySelectorAll('.transaction-table').length).toBe(1)\n  })\n\n  it('renders with dex trades data', () => {\n    const setSortField = jest.fn()\n    const setSortOrder = jest.fn()\n    const { container } = renderTablePicker(() => new Promise(() => {}), {\n      dexTradesData: mockDexTrades,\n      dexTradesPagination: {\n        currentPage: 1,\n        setCurrentPage: jest.fn(),\n        pageSize: 10,\n        total: 100,\n        hasMore: true,\n        hasPrevPage: false,\n      },\n      dexTradesSorting: {\n        sortField: 'timestamp',\n        setSortField,\n        sortOrder: 'desc',\n        setSortOrder,\n      },\n    })\n    expect(container.querySelectorAll('.transaction-table').length).toBe(1)\n  })\n\n  it('renders with transfers data', () => {\n    const setSortField = jest.fn()\n    const setSortOrder = jest.fn()\n    const { container } = renderTablePicker(() => new Promise(() => {}), {\n      transfersData: mockTransfers,\n      transfersPagination: {\n        currentPage: 1,\n        setCurrentPage: jest.fn(),\n        pageSize: 10,\n        total: 100,\n        hasMore: true,\n        hasPrevPage: false,\n      },\n      transfersSorting: {\n        sortField: 'timestamp',\n        setSortField,\n        sortOrder: 'desc',\n        setSortOrder,\n      },\n    })\n    expect(container.querySelectorAll('.transaction-table').length).toBe(1)\n  })\n\n  it('renders with all data populated', () => {\n    const { container } = renderTablePicker(() => new Promise(() => {}), {\n      holdersData: mockHoldersData,\n      dexTradesData: mockDexTrades,\n      transfersData: mockTransfers,\n      holdersPagination: {\n        currentPage: 1,\n        setCurrentPage: jest.fn(),\n        pageSize: 20,\n        total: 100,\n      },\n      dexTradesPagination: {\n        currentPage: 1,\n        setCurrentPage: jest.fn(),\n        pageSize: 10,\n        total: 100,\n        hasMore: true,\n        hasPrevPage: false,\n      },\n      transfersPagination: {\n        currentPage: 1,\n        setCurrentPage: jest.fn(),\n        pageSize: 10,\n        total: 100,\n        hasMore: true,\n        hasPrevPage: false,\n      },\n    })\n    expect(container.querySelectorAll('.transaction-table').length).toBe(1)\n  })\n\n  it('renders with loading states', () => {\n    const { container } = renderTablePicker(() => new Promise(() => {}), {\n      holdersLoading: true,\n      dexTradesLoading: true,\n      transfersLoading: true,\n    })\n    expect(container.querySelectorAll('.transaction-table').length).toBe(1)\n  })\n\n  it('renders with refresh callbacks', () => {\n    const onRefreshDexTrades = jest.fn()\n    const onRefreshTransfers = jest.fn()\n    const { container } = renderTablePicker(() => new Promise(() => {}), {\n      onRefreshDexTrades,\n      onRefreshTransfers,\n    })\n    expect(container.querySelectorAll('.transaction-table').length).toBe(1)\n  })\n})\n"
  },
  {
    "path": "src/containers/Token/IOU/test/api/holders.test.ts",
    "content": "import axios from 'axios'\nimport getTokenHolders, { TokenHoldersData } from '../../api/holders'\n\njest.mock('axios')\n\ndescribe('Token Holders API', () => {\n  const mockAxios = axios as jest.Mocked<typeof axios>\n\n  beforeAll(() => {\n    jest.spyOn(console, 'error').mockImplementation(() => {})\n  })\n\n  afterAll(() => {\n    jest.restoreAllMocks()\n  })\n\n  beforeEach(() => {\n    jest.clearAllMocks()\n  })\n\n  describe('getTokenHolders', () => {\n    const mockHoldersData: TokenHoldersData = {\n      totalSupply: 1000000,\n      totalHolders: 100,\n      holders: [\n        { account: 'rHolder1', balance: 100000, percent: 10 },\n        { account: 'rHolder2', balance: 50000, percent: 5 },\n        { account: 'rHolder3', balance: 25000, percent: 2.5 },\n      ],\n    }\n\n    it('should fetch token holders successfully with default parameters', async () => {\n      mockAxios.get.mockResolvedValueOnce({ data: mockHoldersData })\n\n      const result = await getTokenHolders('USD', 'rIssuer123')\n\n      expect(result).toEqual(mockHoldersData)\n      expect(mockAxios.get).toHaveBeenCalledWith(\n        expect.stringContaining('USD:rIssuer123'),\n      )\n      expect(mockAxios.get).toHaveBeenCalledWith(\n        expect.stringContaining('limit=100'),\n      )\n      expect(mockAxios.get).toHaveBeenCalledWith(\n        expect.stringContaining('offset=0'),\n      )\n    })\n\n    it('should fetch token holders with custom limit and offset', async () => {\n      mockAxios.get.mockResolvedValueOnce({ data: mockHoldersData })\n\n      const result = await getTokenHolders('USD', 'rIssuer123', 50, 100)\n\n      expect(result).toEqual(mockHoldersData)\n      expect(mockAxios.get).toHaveBeenCalledWith(\n        expect.stringContaining('limit=50'),\n      )\n      expect(mockAxios.get).toHaveBeenCalledWith(\n        expect.stringContaining('offset=100'),\n      )\n    })\n\n    it('should construct correct URL with currency and issuer', async () => {\n      mockAxios.get.mockResolvedValueOnce({ data: mockHoldersData })\n\n      await getTokenHolders('EUR', 'rEURIssuer', 20, 0)\n\n      expect(mockAxios.get).toHaveBeenCalledWith(\n        expect.stringContaining('EUR:rEURIssuer'),\n      )\n    })\n\n    it('should handle empty holders list', async () => {\n      const emptyData: TokenHoldersData = {\n        totalSupply: 0,\n        totalHolders: 0,\n        holders: [],\n      }\n\n      mockAxios.get.mockResolvedValueOnce({ data: emptyData })\n\n      const result = await getTokenHolders('TEST', 'rTest')\n\n      expect(result.holders).toEqual([])\n      expect(result.totalHolders).toBe(0)\n    })\n\n    it('should handle large holder lists', async () => {\n      const largeHoldersList: TokenHoldersData = {\n        totalSupply: 10000000,\n        totalHolders: 1000,\n        holders: Array.from({ length: 100 }, (_, i) => ({\n          account: `rHolder${i}`,\n          balance: 100000,\n          percent: 1,\n        })),\n      }\n\n      mockAxios.get.mockResolvedValueOnce({ data: largeHoldersList })\n\n      const result = await getTokenHolders('LARGE', 'rLarge', 100, 0)\n\n      expect(result.holders.length).toBe(100)\n      expect(result.totalHolders).toBe(1000)\n    })\n\n    it('should throw error on API failure', async () => {\n      const error = new Error('Network error')\n      mockAxios.get.mockRejectedValueOnce(error)\n\n      await expect(getTokenHolders('USD', 'rIssuer123')).rejects.toThrow(\n        'Network error',\n      )\n    })\n\n    it('should throw error on 404 response', async () => {\n      const error = new Error('Not found')\n      mockAxios.get.mockRejectedValueOnce(error)\n\n      await expect(getTokenHolders('INVALID', 'rInvalid')).rejects.toThrow()\n    })\n\n    it('should handle pagination correctly', async () => {\n      mockAxios.get.mockResolvedValueOnce({ data: mockHoldersData })\n      mockAxios.get.mockResolvedValueOnce({ data: mockHoldersData })\n\n      // First page\n      await getTokenHolders('USD', 'rIssuer123', 20, 0)\n      expect(mockAxios.get).toHaveBeenLastCalledWith(\n        expect.stringContaining('offset=0'),\n      )\n\n      // Second page\n      await getTokenHolders('USD', 'rIssuer123', 20, 20)\n      expect(mockAxios.get).toHaveBeenLastCalledWith(\n        expect.stringContaining('offset=20'),\n      )\n    })\n\n    it('should handle holders with different percentages', async () => {\n      const diverseHolders: TokenHoldersData = {\n        totalSupply: 1000000,\n        totalHolders: 5,\n        holders: [\n          { account: 'rHolder1', balance: 500000, percent: 50 },\n          { account: 'rHolder2', balance: 300000, percent: 30 },\n          { account: 'rHolder3', balance: 150000, percent: 15 },\n          { account: 'rHolder4', balance: 40000, percent: 4 },\n          { account: 'rHolder5', balance: 10000, percent: 1 },\n        ],\n      }\n\n      mockAxios.get.mockResolvedValueOnce({ data: diverseHolders })\n\n      const result = await getTokenHolders('USD', 'rIssuer123')\n\n      expect(result.holders[0].percent).toBe(50)\n      expect(result.holders[4].percent).toBe(1)\n    })\n\n    it('should handle very small balances', async () => {\n      const smallBalances: TokenHoldersData = {\n        totalSupply: 1000000,\n        totalHolders: 3,\n        holders: [\n          { account: 'rHolder1', balance: 0.0001, percent: 0.00001 },\n          { account: 'rHolder2', balance: 0.00001, percent: 0.000001 },\n          { account: 'rHolder3', balance: 0.000001, percent: 0.0000001 },\n        ],\n      }\n\n      mockAxios.get.mockResolvedValueOnce({ data: smallBalances })\n\n      const result = await getTokenHolders('SMALL', 'rSmall')\n\n      expect(result.holders[0].balance).toBe(0.0001)\n      expect(result.totalSupply).toBe(1000000)\n    })\n\n    it('should handle very large balances', async () => {\n      const largeBalances: TokenHoldersData = {\n        totalSupply: 999999999999,\n        totalHolders: 2,\n        holders: [{ account: 'rHolder1', balance: 999999999999, percent: 100 }],\n      }\n\n      mockAxios.get.mockResolvedValueOnce({ data: largeBalances })\n\n      const result = await getTokenHolders('LARGE', 'rLarge')\n\n      expect(result.totalSupply).toBe(999999999999)\n      expect(result.holders[0].balance).toBe(999999999999)\n    })\n\n    it('should handle timeout errors', async () => {\n      const timeoutError = new Error('timeout of 5000ms exceeded')\n      mockAxios.get.mockRejectedValueOnce(timeoutError)\n\n      await expect(getTokenHolders('USD', 'rIssuer123')).rejects.toThrow(\n        'timeout',\n      )\n    })\n\n    it('should handle server errors', async () => {\n      const serverError = new Error('500 Internal Server Error')\n      mockAxios.get.mockRejectedValueOnce(serverError)\n\n      await expect(getTokenHolders('USD', 'rIssuer123')).rejects.toThrow()\n    })\n\n    it('should handle zero offset correctly', async () => {\n      mockAxios.get.mockResolvedValueOnce({ data: mockHoldersData })\n\n      await getTokenHolders('USD', 'rIssuer123', 100, 0)\n\n      expect(mockAxios.get).toHaveBeenCalledWith(\n        expect.stringContaining('offset=0'),\n      )\n    })\n\n    it('should handle large offset values', async () => {\n      mockAxios.get.mockResolvedValueOnce({ data: mockHoldersData })\n\n      await getTokenHolders('USD', 'rIssuer123', 20, 10000)\n\n      expect(mockAxios.get).toHaveBeenCalledWith(\n        expect.stringContaining('offset=10000'),\n      )\n    })\n  })\n})\n"
  },
  {
    "path": "src/containers/Token/IOU/test/api/token.test.ts",
    "content": "import axios from 'axios'\nimport getToken from '../../api/token'\nimport { LOSToken } from '../../../../shared/losTypes'\n\njest.mock('axios')\n\ndescribe('Token API', () => {\n  const mockAxios = axios as jest.Mocked<typeof axios>\n\n  beforeAll(() => {\n    jest.spyOn(console, 'error').mockImplementation(() => {})\n  })\n\n  afterAll(() => {\n    jest.restoreAllMocks()\n  })\n\n  beforeEach(() => {\n    jest.clearAllMocks()\n  })\n\n  describe('getToken', () => {\n    const mockResponse: LOSToken = {\n      currency: 'USD',\n      issuer_account: 'rIssuer123',\n      name: 'US Dollar',\n      asset_class: 'currency',\n      asset_subclass: 'stablecoin',\n      daily_trades: '1000',\n      icon: 'https://example.com/icon.png',\n      ttl: 3600,\n      social_links: [],\n      trustlines: 5000,\n      transfer_fee: 0.5,\n      issuer_domain: 'https://example.com',\n      issuer_name: 'Example Issuer',\n      market_cap: '1000000',\n      market_cap_usd: '1000000',\n      holders: 500,\n      daily_volume: '50000',\n      supply: '1000000',\n      trust_level: 1,\n      price: '1.00',\n      tvl_usd: '100000',\n      index: 0,\n      circ_supply: '800000',\n    }\n\n    it('should fetch token data successfully', async () => {\n      const apiResponse = {\n        currency: 'USD',\n        issuer_account: 'rIssuer123',\n        token_name: 'US Dollar',\n        asset_class: 'currency',\n        asset_subclass: 'stablecoin',\n        number_of_trades: 1000,\n        icon: 'https://example.com/icon.png',\n        ttl: 3600,\n        social_links: [],\n        number_of_trustlines: 5000,\n        transfer_fee: 0.5,\n        issuer_domain: 'https://example.com',\n        issuer_name: 'Example Issuer',\n        market_cap: '1000000',\n        market_cap_usd: '1000000',\n        number_of_holders: 500,\n        daily_volume: '50000',\n        supply: '1000000',\n        trust_level: 1,\n        price: '1.00',\n        tvl_usd: '100000',\n        index: 0,\n        circ_supply: '800000',\n      }\n      mockAxios.get.mockResolvedValueOnce({ data: apiResponse })\n\n      const result = await getToken('USD', 'rIssuer123')\n\n      expect(result).toEqual(mockResponse)\n      expect(mockAxios.get).toHaveBeenCalledWith(\n        expect.stringContaining('/tokens/USD.rIssuer123'),\n      )\n    })\n\n    it('should map response data correctly', async () => {\n      const apiResponse = {\n        currency: 'EUR',\n        issuer_account: 'rEURIssuer',\n        token_name: 'Euro',\n        asset_class: 'currency',\n        asset_subclass: 'fiat',\n        number_of_trades: 500,\n        icon: 'https://example.com/eur.png',\n        ttl: 7200,\n        social_links: ['https://twitter.com/example'],\n        number_of_trustlines: 2000,\n        transfer_fee: 0.25,\n        issuer_domain: 'https://euro.example.com',\n        issuer_name: 'Euro Issuer',\n        market_cap: '500000',\n        market_cap_usd: '500000',\n        number_of_holders: 250,\n        daily_volume: '25000',\n        supply: '500000',\n        trust_level: 1,\n        price: '1.10',\n        tvl_usd: '50000',\n        circ_supply: '400000',\n      }\n\n      mockAxios.get.mockResolvedValueOnce({ data: apiResponse })\n\n      const result = await getToken('EUR', 'rEURIssuer')\n\n      expect(result.currency).toBe('EUR')\n      expect(result.issuer_account).toBe('rEURIssuer')\n      expect(result.name).toBe('Euro')\n      expect(result.holders).toBe(250)\n      expect(result.trustlines).toBe(2000)\n    })\n\n    it('should handle missing optional fields', async () => {\n      const minimalResponse = {\n        currency: 'TEST',\n        issuer_account: 'rTest',\n        token_name: 'Test Token',\n        asset_class: 'token',\n      }\n\n      mockAxios.get.mockResolvedValueOnce({ data: minimalResponse })\n\n      const result = await getToken('TEST', 'rTest')\n\n      expect(result.currency).toBe('TEST')\n      expect(result.index).toBe(-1)\n    })\n\n    it('should throw error on API failure', async () => {\n      const error = new Error('Network error')\n      mockAxios.get.mockRejectedValueOnce(error)\n\n      await expect(getToken('USD', 'rIssuer123')).rejects.toThrow(\n        'Network error',\n      )\n    })\n\n    it('should throw error on 404 response', async () => {\n      const error = new Error('Not found')\n      mockAxios.get.mockRejectedValueOnce(error)\n\n      await expect(getToken('INVALID', 'rInvalid')).rejects.toThrow()\n    })\n\n    it('should construct correct URL with currency and issuer', async () => {\n      mockAxios.get.mockResolvedValueOnce({ data: mockResponse })\n\n      await getToken('XRP', 'rXRPIssuer')\n\n      expect(mockAxios.get).toHaveBeenCalledWith(\n        expect.stringContaining('XRP.rXRPIssuer'),\n      )\n    })\n\n    it('should handle response with all optional fields', async () => {\n      const fullResponse = {\n        currency: 'FULL',\n        issuer_account: 'rFull',\n        token_name: 'Full Token',\n        asset_class: 'token',\n        asset_subclass: 'utility',\n        number_of_trades: 5000,\n        icon: 'https://example.com/full.png',\n        ttl: 86400,\n        social_links: ['https://twitter.com/full', 'https://discord.gg/full'],\n        number_of_trustlines: 10000,\n        transfer_fee: 1.5,\n        issuer_domain: 'https://full.example.com',\n        issuer_name: 'Full Issuer',\n        market_cap: '5000000',\n        market_cap_usd: '5000000',\n        number_of_holders: 5000,\n        daily_volume: '500000',\n        supply: '5000000',\n        trust_level: 1,\n        price: '1.50',\n        tvl_usd: '1000000',\n        index: 1,\n        circ_supply: '4000000',\n      }\n\n      mockAxios.get.mockResolvedValueOnce({ data: fullResponse })\n\n      const result = await getToken('FULL', 'rFull')\n\n      expect(result.currency).toBe('FULL')\n      expect(result.name).toBe('Full Token')\n      expect(result.social_links).toEqual([\n        'https://twitter.com/full',\n        'https://discord.gg/full',\n      ])\n      expect(result.index).toBe(1)\n    })\n\n    it('should handle timeout errors', async () => {\n      const timeoutError = new Error('timeout of 5000ms exceeded')\n      mockAxios.get.mockRejectedValueOnce(timeoutError)\n\n      await expect(getToken('USD', 'rIssuer123')).rejects.toThrow('timeout')\n    })\n\n    it('should handle server errors', async () => {\n      const serverError = new Error('500 Internal Server Error')\n      mockAxios.get.mockRejectedValueOnce(serverError)\n\n      await expect(getToken('USD', 'rIssuer123')).rejects.toThrow()\n    })\n  })\n})\n"
  },
  {
    "path": "src/containers/Token/IOU/test/components/HeaderBoxes.test.tsx",
    "content": "import { render, screen } from '@testing-library/react'\nimport { I18nextProvider } from 'react-i18next'\nimport { BrowserRouter as Router } from 'react-router'\nimport i18n from '../../../../../i18n/testConfigEnglish'\nimport {\n  HeaderBoxes,\n  OverviewData,\n  MarketData,\n} from '../../components/HeaderBoxes'\n\njest.mock('../../../../shared/components/Account', () => ({\n  Account: ({ displayText }: { displayText: string }) => (\n    <div>{displayText}</div>\n  ),\n}))\n\njest.mock('../../../../shared/utils', () => ({\n  shortenAccount: (account: string) => account.substring(0, 10),\n}))\n\nconst TestWrapper = ({ children }: { children: React.ReactNode }) => (\n  <I18nextProvider i18n={i18n}>\n    <Router>{children}</Router>\n  </I18nextProvider>\n)\n\nconst mockOverviewData: OverviewData = {\n  issuer: 'rN7n7otQDd6FczFgLdSqtcsAUxDkw6fzRH',\n  issuer_account: 'rN7n7otQDd6FczFgLdSqtcsAUxDkw6fzRH',\n  price: '$0.50',\n  holders: '1,234',\n  trustlines: '5,678',\n  transfer_fee: '0.50%',\n}\n\nconst mockMarketData: MarketData = {\n  supply: '1,000,000',\n  circ_supply: '800,000',\n  market_cap: '$400,000',\n  market_cap_usd: '400000',\n  volume_24h: '$50,000',\n  trades_24h: '9,999',\n  amm_tvl: '$100,000',\n  amm_account: 'rAMMAccount123456789',\n  tvl_usd: '$100,000',\n}\n\ndescribe('HeaderBoxes Component', () => {\n  it('renders without crashing', () => {\n    render(\n      <TestWrapper>\n        <HeaderBoxes\n          overviewData={mockOverviewData}\n          marketData={mockMarketData}\n        />\n      </TestWrapper>,\n    )\n    expect(screen.getByText('$0.50')).toBeInTheDocument()\n  })\n\n  it('displays overview data correctly', () => {\n    render(\n      <TestWrapper>\n        <HeaderBoxes\n          overviewData={mockOverviewData}\n          marketData={mockMarketData}\n        />\n      </TestWrapper>,\n    )\n    expect(screen.getByText('1,234')).toBeInTheDocument()\n    expect(screen.getByText('5,678')).toBeInTheDocument()\n    expect(screen.getByText('0.50%')).toBeInTheDocument()\n  })\n\n  it('displays market data correctly', () => {\n    render(\n      <TestWrapper>\n        <HeaderBoxes\n          overviewData={mockOverviewData}\n          marketData={mockMarketData}\n        />\n      </TestWrapper>,\n    )\n    expect(screen.getByText('1,000,000')).toBeInTheDocument()\n    expect(screen.getByText('800,000')).toBeInTheDocument()\n    expect(screen.getByText('$400,000')).toBeInTheDocument()\n    expect(screen.getByText('$50,000')).toBeInTheDocument()\n  })\n\n  it('shows loading spinner for circulating supply when isHoldersDataLoading is true', () => {\n    const { container } = render(\n      <TestWrapper>\n        <HeaderBoxes\n          overviewData={mockOverviewData}\n          marketData={mockMarketData}\n          isHoldersDataLoading\n        />\n      </TestWrapper>,\n    )\n    const spinners = container.querySelectorAll('.loading-spinner')\n    expect(spinners.length).toBeGreaterThan(0)\n  })\n\n  it('shows loading spinner for market cap when isHoldersDataLoading is true', () => {\n    const { container } = render(\n      <TestWrapper>\n        <HeaderBoxes\n          overviewData={mockOverviewData}\n          marketData={mockMarketData}\n          isHoldersDataLoading\n        />\n      </TestWrapper>,\n    )\n    const spinners = container.querySelectorAll('.loading-spinner')\n    expect(spinners.length).toBeGreaterThan(0)\n  })\n\n  it('shows loading spinner for AMM TVL when isAmmTvlLoading is true', () => {\n    const { container } = render(\n      <TestWrapper>\n        <HeaderBoxes\n          overviewData={mockOverviewData}\n          marketData={mockMarketData}\n          isAmmTvlLoading\n        />\n      </TestWrapper>,\n    )\n    const spinners = container.querySelectorAll('.loading-spinner')\n    expect(spinners.length).toBeGreaterThan(0)\n  })\n\n  it('displays circulating supply when not loading', () => {\n    render(\n      <TestWrapper>\n        <HeaderBoxes\n          overviewData={mockOverviewData}\n          marketData={mockMarketData}\n          isHoldersDataLoading={false}\n        />\n      </TestWrapper>,\n    )\n    expect(screen.getByText('800,000')).toBeInTheDocument()\n  })\n\n  it('displays market cap when not loading', () => {\n    render(\n      <TestWrapper>\n        <HeaderBoxes\n          overviewData={mockOverviewData}\n          marketData={mockMarketData}\n          isHoldersDataLoading={false}\n        />\n      </TestWrapper>,\n    )\n    expect(screen.getByText('$400,000')).toBeInTheDocument()\n  })\n\n  it('handles empty market cap gracefully', () => {\n    const dataWithoutMarketCap: MarketData = {\n      ...mockMarketData,\n      market_cap: '',\n    }\n    render(\n      <TestWrapper>\n        <HeaderBoxes\n          overviewData={mockOverviewData}\n          marketData={dataWithoutMarketCap}\n        />\n      </TestWrapper>,\n    )\n    expect(screen.getByText('$50,000')).toBeInTheDocument()\n  })\n\n  it('handles transfer fee as dash when not applicable', () => {\n    const dataWithoutFee: OverviewData = {\n      ...mockOverviewData,\n      transfer_fee: '--',\n    }\n    render(\n      <TestWrapper>\n        <HeaderBoxes\n          overviewData={dataWithoutFee}\n          marketData={mockMarketData}\n        />\n      </TestWrapper>,\n    )\n    expect(screen.getByText('--')).toBeInTheDocument()\n  })\n\n  it('displays volume and trades data', () => {\n    render(\n      <TestWrapper>\n        <HeaderBoxes\n          overviewData={mockOverviewData}\n          marketData={mockMarketData}\n        />\n      </TestWrapper>,\n    )\n    expect(screen.getByText('$50,000')).toBeInTheDocument()\n  })\n\n  it('renders both header boxes', () => {\n    const { container } = render(\n      <TestWrapper>\n        <HeaderBoxes\n          overviewData={mockOverviewData}\n          marketData={mockMarketData}\n        />\n      </TestWrapper>,\n    )\n    const boxes = container.querySelectorAll('.header-box')\n    expect(boxes.length).toBe(2)\n  })\n\n  it('renders all overview items', () => {\n    const { container } = render(\n      <TestWrapper>\n        <HeaderBoxes\n          overviewData={mockOverviewData}\n          marketData={mockMarketData}\n        />\n      </TestWrapper>,\n    )\n    const overviewItems = container.querySelectorAll('.header-box-item')\n    expect(overviewItems.length).toBeGreaterThanOrEqual(5)\n  })\n\n  it('handles zero values correctly', () => {\n    const zeroData: OverviewData = {\n      issuer: 'rN7n7otQDd6FczFgLdSqtcsAUxDkw6fzRH',\n      issuer_account: 'rN7n7otQDd6FczFgLdSqtcsAUxDkw6fzRH',\n      price: '$0.00',\n      holders: '0',\n      trustlines: '0',\n      transfer_fee: '--',\n    }\n    const zeroMarketData: MarketData = {\n      supply: '0',\n      circ_supply: '0',\n      market_cap: '',\n      volume_24h: '--',\n      trades_24h: '--',\n      amm_tvl: '',\n      amm_account: '',\n    }\n    render(\n      <TestWrapper>\n        <HeaderBoxes overviewData={zeroData} marketData={zeroMarketData} />\n      </TestWrapper>,\n    )\n    expect(screen.getByText('$0.00')).toBeInTheDocument()\n  })\n\n  it('displays -- when both amm_tvl and tvl_usd are empty', () => {\n    const dataWithoutTvl: MarketData = {\n      ...mockMarketData,\n      amm_tvl: '',\n      tvl_usd: '',\n    }\n    render(\n      <TestWrapper>\n        <HeaderBoxes\n          overviewData={mockOverviewData}\n          marketData={dataWithoutTvl}\n        />\n      </TestWrapper>,\n    )\n    expect(screen.getByText('--')).toBeInTheDocument()\n  })\n\n  it('displays tvl_usd when available', () => {\n    const dataWithTvlUsd: MarketData = {\n      ...mockMarketData,\n      amm_tvl: '',\n      tvl_usd: '$50,000',\n    }\n    render(\n      <TestWrapper>\n        <HeaderBoxes\n          overviewData={mockOverviewData}\n          marketData={dataWithTvlUsd}\n        />\n      </TestWrapper>,\n    )\n    const tvlElements = screen.getAllByText('$50,000')\n    expect(tvlElements.length).toBeGreaterThan(0)\n  })\n\n  it('displays amm_tvl when tvl_usd is not available', () => {\n    const dataWithAmmTvl: MarketData = {\n      ...mockMarketData,\n      amm_tvl: '$75,000',\n      tvl_usd: '',\n    }\n    render(\n      <TestWrapper>\n        <HeaderBoxes\n          overviewData={mockOverviewData}\n          marketData={dataWithAmmTvl}\n        />\n      </TestWrapper>,\n    )\n    expect(screen.getByText('$75,000')).toBeInTheDocument()\n  })\n})\n"
  },
  {
    "path": "src/containers/Token/IOU/test/hooks/useMarketCalculations.test.ts",
    "content": "import { renderHook } from '@testing-library/react'\nimport { useMarketCalculations } from '../../hooks/useMarketCalculations'\nimport { TokenHoldersData } from '../../api/holders'\nimport { LOSToken } from '../../../../shared/losTypes'\n\ndescribe('useMarketCalculations', () => {\n  const mockTokenData: LOSToken = {\n    currency: 'USD',\n    issuer_account: 'rIssuer',\n    trustlines: 100,\n    index: 0,\n  }\n\n  const mockHoldersData: TokenHoldersData = {\n    totalSupply: 1000000,\n    totalHolders: 100,\n    holders: [],\n  }\n\n  it('returns market calculations with valid data', () => {\n    const { result } = renderHook(() =>\n      useMarketCalculations({\n        holdersData: mockHoldersData,\n        tokenData: { ...mockTokenData, supply: '1000000' },\n        price: '0.5',\n        xrpUSDRate: '2',\n        isHoldersDataLoading: false,\n      }),\n    )\n\n    expect(result.current.circSupply).toBe(1000000)\n    expect(result.current.formattedCircSupply).toBeDefined()\n    expect(result.current.marketCap).toBeDefined()\n  })\n\n  it('returns null marketCap when isHoldersDataLoading is true', () => {\n    const { result } = renderHook(() =>\n      useMarketCalculations({\n        holdersData: mockHoldersData,\n        tokenData: { ...mockTokenData, supply: '1000000' },\n        price: '0.5',\n        xrpUSDRate: '2',\n        isHoldersDataLoading: true,\n      }),\n    )\n\n    expect(result.current.marketCap).toBeNull()\n  })\n\n  it('returns null marketCap when circSupply is 0', () => {\n    const { result } = renderHook(() =>\n      useMarketCalculations({\n        holdersData: undefined,\n        tokenData: mockTokenData,\n        price: '0.5',\n        xrpUSDRate: '2',\n        isHoldersDataLoading: false,\n      }),\n    )\n\n    expect(result.current.marketCap).toBeNull()\n  })\n\n  it('returns null marketCap when price is empty', () => {\n    const { result } = renderHook(() =>\n      useMarketCalculations({\n        holdersData: mockHoldersData,\n        tokenData: { ...mockTokenData, supply: '1000000' },\n        price: '',\n        xrpUSDRate: '2',\n        isHoldersDataLoading: false,\n      }),\n    )\n\n    expect(result.current.marketCap).toBeNull()\n  })\n\n  it('returns null marketCap when xrpUSDRate is empty', () => {\n    const { result } = renderHook(() =>\n      useMarketCalculations({\n        holdersData: mockHoldersData,\n        tokenData: { ...mockTokenData, supply: '1000000' },\n        price: '0.5',\n        xrpUSDRate: '',\n        isHoldersDataLoading: false,\n      }),\n    )\n\n    expect(result.current.marketCap).toBeNull()\n  })\n\n  it('calculates marketCap correctly with valid inputs', () => {\n    const { result } = renderHook(() =>\n      useMarketCalculations({\n        holdersData: mockHoldersData,\n        tokenData: { ...mockTokenData, supply: '1000000' },\n        price: '1',\n        xrpUSDRate: '2',\n        isHoldersDataLoading: false,\n      }),\n    )\n\n    // 1000000 * 1 * 2 = 2000000\n    expect(result.current.marketCap).toBeDefined()\n  })\n\n  it('handles zero price', () => {\n    const { result } = renderHook(() =>\n      useMarketCalculations({\n        holdersData: mockHoldersData,\n        tokenData: { ...mockTokenData, supply: '1000000' },\n        price: '0',\n        xrpUSDRate: '2',\n        isHoldersDataLoading: false,\n      }),\n    )\n\n    expect(result.current.marketCap).toBeNull()\n  })\n\n  it('handles zero xrpUSDRate', () => {\n    const { result } = renderHook(() =>\n      useMarketCalculations({\n        holdersData: mockHoldersData,\n        tokenData: { ...mockTokenData, supply: '1000000' },\n        price: '0.5',\n        xrpUSDRate: '0',\n        isHoldersDataLoading: false,\n      }),\n    )\n\n    expect(result.current.marketCap).toBeNull()\n  })\n\n  it('handles very small price values', () => {\n    const { result } = renderHook(() =>\n      useMarketCalculations({\n        holdersData: mockHoldersData,\n        tokenData: { ...mockTokenData, supply: '1000000' },\n        price: '0.0001',\n        xrpUSDRate: '2',\n        isHoldersDataLoading: false,\n      }),\n    )\n\n    expect(result.current.marketCap).toBeDefined()\n  })\n\n  it('handles very large price values', () => {\n    const { result } = renderHook(() =>\n      useMarketCalculations({\n        holdersData: mockHoldersData,\n        tokenData: { ...mockTokenData, supply: '1000000' },\n        price: '1000000',\n        xrpUSDRate: '2',\n        isHoldersDataLoading: false,\n      }),\n    )\n\n    expect(result.current.marketCap).toBeDefined()\n  })\n\n  it('formats circulating supply', () => {\n    const { result } = renderHook(() =>\n      useMarketCalculations({\n        holdersData: mockHoldersData,\n        tokenData: { ...mockTokenData, supply: '1000000' },\n        price: '0.5',\n        xrpUSDRate: '2',\n        isHoldersDataLoading: false,\n      }),\n    )\n\n    expect(result.current.formattedCircSupply).toBeDefined()\n    expect(typeof result.current.formattedCircSupply).toBe('string')\n  })\n\n  it('returns circSupply as number', () => {\n    const { result } = renderHook(() =>\n      useMarketCalculations({\n        holdersData: mockHoldersData,\n        tokenData: { ...mockTokenData, supply: '1000000' },\n        price: '0.5',\n        xrpUSDRate: '2',\n        isHoldersDataLoading: false,\n      }),\n    )\n\n    expect(typeof result.current.circSupply).toBe('number')\n  })\n\n  it('handles undefined holdersData', () => {\n    const { result } = renderHook(() =>\n      useMarketCalculations({\n        holdersData: undefined,\n        tokenData: { ...mockTokenData, supply: '1000000' },\n        price: '0.5',\n        xrpUSDRate: '2',\n        isHoldersDataLoading: false,\n      }),\n    )\n\n    expect(result.current.circSupply).toBe(1000000)\n  })\n\n  it('handles circ_supply in tokenData', () => {\n    const { result } = renderHook(() =>\n      useMarketCalculations({\n        holdersData: mockHoldersData,\n        tokenData: { ...mockTokenData, circ_supply: '500000' },\n        price: '0.5',\n        xrpUSDRate: '2',\n        isHoldersDataLoading: false,\n      }),\n    )\n\n    expect(result.current.circSupply).toBe(500000)\n  })\n\n  it('memoizes results correctly', () => {\n    const { result, rerender } = renderHook(\n      (props) => useMarketCalculations(props),\n      {\n        initialProps: {\n          holdersData: mockHoldersData,\n          tokenData: { ...mockTokenData, supply: '1000000' },\n          price: '0.5',\n          xrpUSDRate: '2',\n          isHoldersDataLoading: false,\n        },\n      },\n    )\n\n    const firstResult = result.current\n\n    rerender({\n      holdersData: mockHoldersData,\n      tokenData: { ...mockTokenData, supply: '1000000' },\n      price: '0.5',\n      xrpUSDRate: '2',\n      isHoldersDataLoading: false,\n    })\n\n    expect(result.current).toEqual(firstResult)\n  })\n\n  it('updates when dependencies change', () => {\n    const { result, rerender } = renderHook(\n      (props) => useMarketCalculations(props),\n      {\n        initialProps: {\n          holdersData: mockHoldersData,\n          tokenData: { ...mockTokenData, supply: '1000000' },\n          price: '0.5',\n          xrpUSDRate: '2',\n          isHoldersDataLoading: false,\n        },\n      },\n    )\n\n    const firstResult = result.current\n\n    rerender({\n      holdersData: mockHoldersData,\n      tokenData: { ...mockTokenData, supply: '2000000' },\n      price: '0.5',\n      xrpUSDRate: '2',\n      isHoldersDataLoading: false,\n    })\n\n    expect(result.current.circSupply).not.toEqual(firstResult.circSupply)\n  })\n})\n"
  },
  {
    "path": "src/containers/Token/IOU/test/index.test.tsx",
    "content": "import { IOU } from '../index'\n\njest.mock('../api/token', () => ({\n  __esModule: true,\n  default: jest.fn(),\n}))\n\ndescribe('IOU container', () => {\n  it('exports IOU component', () => {\n    expect(IOU).toBeDefined()\n    expect(typeof IOU).toBe('function')\n  })\n\n  it('IOU component is a valid React component', () => {\n    expect(IOU.length >= 0).toBe(true)\n  })\n})\n"
  },
  {
    "path": "src/containers/Token/IOU/test/services/dexTradesPagination.test.ts",
    "content": "import { dexTradesPaginationService } from '../../services/dexTradesPagination'\n\nimport { getDexTrades } from '../../../shared/api/tokenTx'\n\njest.mock('../../../shared/api/tokenTx', () => ({\n  getDexTrades: jest.fn(),\n}))\n\nconst mockGetDexTrades = getDexTrades as jest.Mock\n\ndescribe('DexTradesPaginationService', () => {\n  beforeEach(() => {\n    jest.clearAllMocks()\n    dexTradesPaginationService.clearCache()\n  })\n\n  describe('getDexTradesPage', () => {\n    it('returns empty trades on first call with no data', async () => {\n      mockGetDexTrades.mockResolvedValue({\n        results: [],\n        next_cursor: null,\n      })\n\n      const result = await dexTradesPaginationService.getDexTradesPage(\n        'USD.rIssuer',\n        1,\n      )\n\n      expect(result.trades).toEqual([])\n      expect(result.totalTrades).toBe(0)\n      expect(result.hasMore).toBe(false)\n    })\n\n    it('fetches and returns trades on first page', async () => {\n      const mockTrades = [\n        {\n          tx_hash: 'hash1',\n          ledger_index: 100,\n          timestamp: 1000,\n          from: 'rFrom1',\n          to: 'rTo1',\n          amount_in: { currency: 'USD', issuer: 'rIssuer', value: '100' },\n          amount_out: { currency: 'XRP', issuer: '', value: '50' },\n        },\n      ]\n\n      mockGetDexTrades.mockResolvedValue({\n        results: mockTrades,\n        next_cursor: 'cursor1',\n      })\n\n      const result = await dexTradesPaginationService.getDexTradesPage(\n        'USD.rIssuer',\n        1,\n      )\n\n      expect(result.trades.length).toBe(1)\n      expect(result.totalTrades).toBe(1)\n      expect(result.hasMore).toBe(false)\n    })\n\n    it('uses default page size when not provided', async () => {\n      mockGetDexTrades.mockResolvedValue({\n        results: [],\n        next_cursor: null,\n      })\n\n      await dexTradesPaginationService.getDexTradesPage('USD.rIssuer', 1)\n\n      expect(mockGetDexTrades).toHaveBeenCalledWith(\n        'USD.rIssuer',\n        200,\n        undefined,\n        'next',\n        undefined,\n        undefined,\n      )\n    })\n\n    it('uses custom page size when provided', async () => {\n      mockGetDexTrades.mockResolvedValue({\n        results: [],\n        next_cursor: null,\n      })\n\n      await dexTradesPaginationService.getDexTradesPage('USD.rIssuer', 1, 20)\n\n      expect(mockGetDexTrades).toHaveBeenCalled()\n    })\n\n    it('handles multiple pages correctly', async () => {\n      const mockTrades = Array.from({ length: 200 }, (_, i) => ({\n        tx_hash: `hash${i}`,\n        ledger_index: 100 + i,\n        timestamp: 1000 + i,\n        from: `rFrom${i}`,\n        to: `rTo${i}`,\n        amount_in: { currency: 'USD', issuer: 'rIssuer', value: '100' },\n        amount_out: { currency: 'XRP', issuer: '', value: '50' },\n      }))\n\n      mockGetDexTrades.mockResolvedValue({\n        results: mockTrades,\n        next_cursor: 'cursor1',\n      })\n\n      const result1 = await dexTradesPaginationService.getDexTradesPage(\n        'USD.rIssuer',\n        1,\n        10,\n      )\n\n      expect(result1.trades.length).toBe(10)\n      expect(result1.hasMore).toBe(true)\n    })\n\n    it('caches trades between calls', async () => {\n      const mockTrades = [\n        {\n          tx_hash: 'hash1',\n          ledger_index: 100,\n          timestamp: 1000,\n          from: 'rFrom1',\n          to: 'rTo1',\n          amount_in: { currency: 'USD', issuer: 'rIssuer', value: '100' },\n          amount_out: { currency: 'XRP', issuer: '', value: '50' },\n        },\n      ]\n\n      mockGetDexTrades.mockResolvedValue({\n        results: mockTrades,\n        next_cursor: null,\n      })\n\n      await dexTradesPaginationService.getDexTradesPage('USD.rIssuer', 1)\n      const callCount1 = mockGetDexTrades.mock.calls.length\n\n      await dexTradesPaginationService.getDexTradesPage('USD.rIssuer', 1)\n      const callCount2 = mockGetDexTrades.mock.calls.length\n\n      // Should not fetch again for same page\n      expect(callCount2).toBe(callCount1)\n    })\n\n    it('handles sorting parameters', async () => {\n      mockGetDexTrades.mockResolvedValue({\n        results: [],\n        next_cursor: null,\n      })\n\n      await dexTradesPaginationService.getDexTradesPage(\n        'USD.rIssuer',\n        1,\n        10,\n        'timestamp',\n        'asc',\n      )\n\n      expect(mockGetDexTrades).toHaveBeenCalledWith(\n        'USD.rIssuer',\n        200,\n        undefined,\n        'next',\n        'timestamp',\n        'asc',\n      )\n    })\n\n    it('returns correct hasMore flag', async () => {\n      const mockTrades = Array.from({ length: 200 }, (_, i) => ({\n        tx_hash: `hash${i}`,\n        ledger_index: 100 + i,\n        timestamp: 1000 + i,\n        from: `rFrom${i}`,\n        to: `rTo${i}`,\n        amount_in: { currency: 'USD', issuer: 'rIssuer', value: '100' },\n        amount_out: { currency: 'XRP', issuer: '', value: '50' },\n      }))\n\n      mockGetDexTrades.mockResolvedValue({\n        results: mockTrades,\n        next_cursor: 'cursor1',\n      })\n\n      const result = await dexTradesPaginationService.getDexTradesPage(\n        'USD.rIssuer',\n        1,\n        10,\n      )\n\n      expect(result.hasMore).toBe(true)\n    })\n\n    it('awaits in-flight prefetch when page exceeds cache', async () => {\n      // First batch: 100 trades with a next_cursor\n      const batch1 = Array.from({ length: 100 }, (_, i) => ({\n        tx_hash: `hash${i}`,\n        ledger_index: 100 + i,\n        timestamp: 1000 + i,\n        from: `rFrom${i}`,\n        to: `rTo${i}`,\n        amount_in: { currency: 'USD', issuer: 'rIssuer', value: '100' },\n        amount_out: { currency: 'XRP', issuer: '', value: '50' },\n      }))\n\n      // Second batch: 100 more trades\n      const batch2 = Array.from({ length: 100 }, (_, i) => ({\n        tx_hash: `hash${100 + i}`,\n        ledger_index: 200 + i,\n        timestamp: 2000 + i,\n        from: `rFrom${100 + i}`,\n        to: `rTo${100 + i}`,\n        amount_in: { currency: 'USD', issuer: 'rIssuer', value: '100' },\n        amount_out: { currency: 'XRP', issuer: '', value: '50' },\n      }))\n\n      mockGetDexTrades\n        .mockResolvedValueOnce({ results: batch1, next_cursor: 'cursor1' })\n        .mockResolvedValueOnce({ results: batch2, next_cursor: null })\n\n      // Page 8 triggers initial fetch (batch1) and prefetch at 70% threshold\n      // (endIndex 80 > 100 * 0.7 = 70)\n      await dexTradesPaginationService.getDexTradesPage('USD.rIssuer', 8, 10)\n\n      // Page 11 is beyond cache (100 items), should await prefetch and return data\n      const result = await dexTradesPaginationService.getDexTradesPage(\n        'USD.rIssuer',\n        11,\n        10,\n      )\n\n      // Page 11 returned a full page, not empty — prefetch was awaited\n      expect(result.trades.length).toBe(10)\n      // First item is from batch2 (hash100–hash199), confirming data came from the prefetched batch\n      expect(result.trades[0].hash).toBe('hash100')\n    })\n  })\n\n  describe('clearCache', () => {\n    it('clears cache for specific tokenId', async () => {\n      mockGetDexTrades.mockResolvedValue({\n        results: [],\n        next_cursor: null,\n      })\n\n      await dexTradesPaginationService.getDexTradesPage('USD.rIssuer', 1)\n      dexTradesPaginationService.clearCache('USD.rIssuer')\n\n      const count1 = mockGetDexTrades.mock.calls.length\n      await dexTradesPaginationService.getDexTradesPage('USD.rIssuer', 1)\n      const count2 = mockGetDexTrades.mock.calls.length\n\n      expect(count2).toBeGreaterThan(count1)\n    })\n\n    it('clears all caches when no parameters provided', async () => {\n      mockGetDexTrades.mockResolvedValue({\n        results: [],\n        next_cursor: null,\n      })\n\n      await dexTradesPaginationService.getDexTradesPage('USD.rIssuer', 1)\n      dexTradesPaginationService.clearCache()\n\n      const count1 = mockGetDexTrades.mock.calls.length\n      await dexTradesPaginationService.getDexTradesPage('USD.rIssuer', 1)\n      const count2 = mockGetDexTrades.mock.calls.length\n\n      expect(count2).toBeGreaterThan(count1)\n    })\n  })\n\n  describe('getCachedTradesCount', () => {\n    it('returns 0 for uncached tokenId', () => {\n      const count =\n        dexTradesPaginationService.getCachedTradesCount('USD.rIssuer')\n      expect(count).toBe(0)\n    })\n\n    it('returns correct count after fetching', async () => {\n      const mockTrades = Array.from({ length: 5 }, (_, i) => ({\n        tx_hash: `hash${i}`,\n        ledger_index: 100 + i,\n        timestamp: 1000 + i,\n        from: `rFrom${i}`,\n        to: `rTo${i}`,\n        amount_in: { currency: 'USD', issuer: 'rIssuer', value: '100' },\n        amount_out: { currency: 'XRP', issuer: '', value: '50' },\n      }))\n\n      mockGetDexTrades.mockResolvedValue({\n        results: mockTrades,\n        next_cursor: null,\n      })\n\n      await dexTradesPaginationService.getDexTradesPage('USD.rIssuer', 1)\n      const count =\n        dexTradesPaginationService.getCachedTradesCount('USD.rIssuer')\n\n      expect(count).toBe(5)\n    })\n  })\n\n  describe('edge cases', () => {\n    it('handles invalid page size gracefully', async () => {\n      mockGetDexTrades.mockResolvedValue({\n        results: [],\n        next_cursor: null,\n      })\n\n      const result = await dexTradesPaginationService.getDexTradesPage(\n        'USD.rIssuer',\n        1,\n        0,\n      )\n\n      expect(result).toBeDefined()\n    })\n\n    it('handles negative page number', async () => {\n      mockGetDexTrades.mockResolvedValue({\n        results: [],\n        next_cursor: null,\n      })\n\n      const result = await dexTradesPaginationService.getDexTradesPage(\n        'USD.rIssuer',\n        -1,\n      )\n\n      expect(result).toBeDefined()\n    })\n\n    it('handles empty tokenId', async () => {\n      mockGetDexTrades.mockResolvedValue({\n        results: [],\n        next_cursor: null,\n      })\n\n      const result = await dexTradesPaginationService.getDexTradesPage('', 1)\n\n      expect(result).toBeDefined()\n    })\n  })\n})\n"
  },
  {
    "path": "src/containers/Token/IOU/test/utils/tokenCalculations.test.ts",
    "content": "import {\n  calculateCirculatingSupply,\n  formatCirculatingSupply,\n} from '../../utils/tokenCalculations'\nimport { TokenHoldersData } from '../../api/holders'\nimport { LOSToken } from '../../../../shared/losTypes'\n\ndescribe('tokenCalculations', () => {\n  describe('calculateCirculatingSupply', () => {\n    const mockTokenData: LOSToken = {\n      currency: 'USD',\n      issuer_account: 'rIssuer',\n      trustlines: 100,\n      index: 0,\n    }\n\n    it('returns circ_supply from tokenData if available', () => {\n      const tokenData = {\n        ...mockTokenData,\n        circ_supply: '1000000',\n      }\n      const result = calculateCirculatingSupply(undefined, tokenData)\n      expect(result).toBe(1000000)\n    })\n\n    it('returns supply from tokenData when circ_supply is not available', () => {\n      const tokenData = {\n        ...mockTokenData,\n        supply: '5000000',\n      }\n      const result = calculateCirculatingSupply(undefined, tokenData)\n      expect(result).toBe(5000000)\n    })\n\n    it('returns totalSupply from holdersData when tokenData supply is not available', () => {\n      const holdersData: TokenHoldersData = {\n        totalSupply: 3000000,\n        totalHolders: 100,\n        holders: [],\n      }\n      const tokenData = {\n        ...mockTokenData,\n      }\n      const result = calculateCirculatingSupply(holdersData, tokenData)\n      expect(result).toBe(3000000)\n    })\n\n    it('returns 0 when no supply data is available', () => {\n      const tokenData = {\n        ...mockTokenData,\n      }\n      const result = calculateCirculatingSupply(undefined, tokenData)\n      expect(result).toBe(0)\n    })\n\n    it('subtracts large holders (>= 20%) for non-stablecoin tokens', () => {\n      const holdersData: TokenHoldersData = {\n        totalSupply: 1000000,\n        totalHolders: 5,\n        holders: [\n          { account: 'rHolder1', balance: 300000, percent: 30 },\n          { account: 'rHolder2', balance: 200000, percent: 20 },\n          { account: 'rHolder3', balance: 100000, percent: 10 },\n        ],\n      }\n      const tokenData = {\n        ...mockTokenData,\n        supply: '1000000',\n        asset_subclass: 'token',\n      }\n      const result = calculateCirculatingSupply(holdersData, tokenData)\n      // 1000000 - 300000 (30%) - 200000 (20%) = 500000\n      expect(result).toBe(500000)\n    })\n\n    it('does not subtract large holders for stablecoin tokens', () => {\n      const holdersData: TokenHoldersData = {\n        totalSupply: 1000000,\n        totalHolders: 5,\n        holders: [\n          { account: 'rHolder1', balance: 300000, percent: 30 },\n          { account: 'rHolder2', balance: 200000, percent: 20 },\n          { account: 'rHolder3', balance: 100000, percent: 10 },\n        ],\n      }\n      const tokenData = {\n        ...mockTokenData,\n        supply: '1000000',\n        asset_subclass: 'stablecoin',\n      }\n      const result = calculateCirculatingSupply(holdersData, tokenData)\n      // For stablecoins, no subtraction: 1000000\n      expect(result).toBe(1000000)\n    })\n\n    it('handles holders with exactly 20% threshold', () => {\n      const holdersData: TokenHoldersData = {\n        totalSupply: 1000000,\n        totalHolders: 5,\n        holders: [\n          { account: 'rHolder1', balance: 200000, percent: 20 },\n          { account: 'rHolder2', balance: 100000, percent: 10 },\n        ],\n      }\n      const tokenData = {\n        ...mockTokenData,\n        supply: '1000000',\n        asset_subclass: 'token',\n      }\n      const result = calculateCirculatingSupply(holdersData, tokenData)\n      // 1000000 - 200000 (20%) = 800000\n      expect(result).toBe(800000)\n    })\n\n    it('handles holders with less than 20% threshold', () => {\n      const holdersData: TokenHoldersData = {\n        totalSupply: 1000000,\n        totalHolders: 5,\n        holders: [\n          { account: 'rHolder1', balance: 190000, percent: 19 },\n          { account: 'rHolder2', balance: 100000, percent: 10 },\n        ],\n      }\n      const tokenData = {\n        ...mockTokenData,\n        supply: '1000000',\n        asset_subclass: 'token',\n      }\n      const result = calculateCirculatingSupply(holdersData, tokenData)\n      // No subtraction: 1000000\n      expect(result).toBe(1000000)\n    })\n\n    it('handles empty holders array', () => {\n      const holdersData: TokenHoldersData = {\n        totalSupply: 1000000,\n        totalHolders: 0,\n        holders: [],\n      }\n      const tokenData = {\n        ...mockTokenData,\n        supply: '1000000',\n        asset_subclass: 'token',\n      }\n      const result = calculateCirculatingSupply(holdersData, tokenData)\n      expect(result).toBe(1000000)\n    })\n\n    it('handles multiple large holders', () => {\n      const holdersData: TokenHoldersData = {\n        totalSupply: 1000000,\n        totalHolders: 10,\n        holders: [\n          { account: 'rHolder1', balance: 250000, percent: 25 },\n          { account: 'rHolder2', balance: 250000, percent: 25 },\n          { account: 'rHolder3', balance: 250000, percent: 25 },\n          { account: 'rHolder4', balance: 250000, percent: 25 },\n        ],\n      }\n      const tokenData = {\n        ...mockTokenData,\n        supply: '1000000',\n        asset_subclass: 'token',\n      }\n      const result = calculateCirculatingSupply(holdersData, tokenData)\n      // 1000000 - (250000 * 4) = 0\n      expect(result).toBe(0)\n    })\n\n    it('prioritizes circ_supply over supply', () => {\n      const holdersData: TokenHoldersData = {\n        totalSupply: 5000000,\n        totalHolders: 100,\n        holders: [],\n      }\n      const tokenData = {\n        ...mockTokenData,\n        circ_supply: '2000000',\n        supply: '3000000',\n      }\n      const result = calculateCirculatingSupply(holdersData, tokenData)\n      expect(result).toBe(2000000)\n    })\n  })\n\n  describe('formatCirculatingSupply', () => {\n    it('formats small numbers with full precision', () => {\n      const result = formatCirculatingSupply(100)\n      expect(result).toBe('100')\n    })\n\n    it('formats large numbers with abbreviation', () => {\n      const result = formatCirculatingSupply(1000000)\n      expect(result).toMatch(/1\\.0M|1M/)\n    })\n\n    it('formats very large numbers with abbreviation', () => {\n      const result = formatCirculatingSupply(1000000000)\n      expect(result).toMatch(/1\\.0B|1B/)\n    })\n\n    it('formats zero', () => {\n      const result = formatCirculatingSupply(0)\n      expect(result).toBe('0')\n    })\n\n    it('formats decimal numbers', () => {\n      const result = formatCirculatingSupply(1234.5678)\n      expect(result).toBeDefined()\n    })\n\n    it('handles very small numbers', () => {\n      const result = formatCirculatingSupply(0.0001)\n      expect(result).toBeDefined()\n    })\n  })\n})\n"
  },
  {
    "path": "src/containers/Token/IOU/utils/tokenCalculations.ts",
    "content": "import { parseIntegerAmount } from '../../../shared/NumberFormattingUtils'\nimport { TokenHoldersData } from '../api/holders'\nimport { LOSToken } from '../../../shared/losTypes'\n\n/**\n * Calculates the circulating supply for a token\n * @param holdersData - Token holders data\n * @param tokenData - Token data\n * @returns Calculated circulating supply\n */\nexport const calculateCirculatingSupply = (\n  holdersData: TokenHoldersData | undefined,\n  tokenData: LOSToken,\n): number => {\n  if (tokenData.circ_supply) {\n    return Number(tokenData.circ_supply)\n  }\n  let circSupply = Number(tokenData.supply) || holdersData?.totalSupply || 0\n\n  // For stablecoins, don't subtract large percentage holders from circulating supply\n  if (tokenData.asset_subclass !== 'stablecoin' && holdersData) {\n    holdersData.holders.forEach((holder) => {\n      if (holder.percent >= 20) {\n        circSupply -= holder.balance\n      }\n    })\n  }\n\n  return circSupply\n}\n\n/**\n * Formats the circulating supply for display\n * @param circSupply - The circulating supply number\n * @returns Formatted circulating supply string\n */\nexport const formatCirculatingSupply = (circSupply: number): string =>\n  parseIntegerAmount(circSupply)\n"
  },
  {
    "path": "src/containers/Token/MPT/Header/GeneralOverview.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { shortenAccount, shortenMPTID } from '../../../shared/utils'\nimport { Account } from '../../../shared/components/Account'\nimport { CopyableText } from '../../../shared/components/CopyableText'\nimport {\n  parseIntegerAmount,\n  parsePercent,\n} from '../../../shared/NumberFormattingUtils'\n\ninterface GeneralOverviewProps {\n  issuer: string\n  issuerName?: string\n  transferFee?: number\n  assetScale?: number\n  mptIssuanceId: string\n  showMptId: boolean\n  holdersCount?: number\n  holdersLoading?: boolean\n}\n\nexport const GeneralOverview = ({\n  issuer,\n  issuerName,\n  transferFee,\n  assetScale,\n  mptIssuanceId,\n  showMptId: showMptIssuanceId,\n  holdersCount,\n  holdersLoading,\n}: GeneralOverviewProps): JSX.Element => {\n  const { t } = useTranslation()\n\n  return (\n    <div className=\"header-box\">\n      <div className=\"header-box-title\">{t('token_page.general_overview')}</div>\n      <div className=\"header-box-contents\">\n        <div className=\"header-box-item\">\n          <div className=\"item-name\">{t('token_page.issuer')}</div>\n          <div className=\"item-value account-link\">\n            <Account\n              account={issuer}\n              displayText={shortenAccount(issuerName) || shortenAccount(issuer)}\n            />\n          </div>\n        </div>\n        <div className=\"header-box-item\">\n          <div className=\"item-name\">{t('token_page.price')}</div>\n          <div className=\"item-value\">--</div>\n        </div>\n        <div className=\"header-box-item\">\n          <div className=\"item-name\">{t('token_page.holders')}</div>\n          <div className=\"item-value\">\n            {holdersLoading ? (\n              <span className=\"loading-spinner\" />\n            ) : (\n              parseIntegerAmount(holdersCount ?? 0)\n            )}\n          </div>\n        </div>\n        <div className=\"header-box-item\">\n          <div className=\"item-name\">{t('token_page.transfer_fee')}</div>\n          <div className=\"item-value\">\n            {(transferFee && parsePercent(transferFee / 1000, 3)) ?? '--'}\n          </div>\n        </div>\n        <div className=\"header-box-item\">\n          <div className=\"item-name\">{t('asset_scale')}</div>\n          <div className=\"item-value\">{assetScale ?? 0}</div>\n        </div>\n        {showMptIssuanceId && (\n          <div className=\"header-box-item\">\n            <div className=\"item-name\">{t('mpt_issuance_id')}</div>\n            <div className=\"item-value\">\n              <CopyableText\n                text={mptIssuanceId.toUpperCase()}\n                displayText={shortenMPTID(mptIssuanceId, 8, 6)}\n              />\n            </div>\n          </div>\n        )}\n      </div>\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/Token/MPT/Header/MarketData.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { convertScaledPrice } from '../../../shared/utils'\nimport { parseAmount } from '../../../shared/NumberFormattingUtils'\n\ninterface MarketDataProps {\n  maxAmt?: string\n  outstandingAmt?: string\n  assetScale?: number\n}\n\nexport const MarketData = ({\n  maxAmt,\n  outstandingAmt,\n  assetScale,\n}: MarketDataProps): JSX.Element => {\n  const { t } = useTranslation()\n\n  const formattedSupply = parseAmount(\n    convertScaledPrice(BigInt(maxAmt || '0'), assetScale ?? 0),\n  )\n\n  const formattedCircSupply = parseAmount(\n    convertScaledPrice(BigInt(outstandingAmt || '0'), assetScale ?? 0),\n  )\n\n  return (\n    <div className=\"header-box\">\n      <div className=\"header-box-title\">{t('token_page.market_data')}</div>\n      <div className=\"header-box-contents\">\n        <div className=\"header-box-item\">\n          <div className=\"item-name\">{t('token_page.supply')}</div>\n          <div className=\"item-value\">{formattedSupply}</div>\n        </div>\n        <div className=\"header-box-item\">\n          <div className=\"item-name\">{t('token_page.circulating_supply')}</div>\n          <div className=\"item-value\">{formattedCircSupply}</div>\n        </div>\n        <div className=\"header-box-item\">\n          <div className=\"item-name\">{t('token_page.market_cap')}</div>\n          <div className=\"item-value\">--</div>\n        </div>\n        <div className=\"header-box-item\">\n          <div className=\"item-name\">{t('token_page.volume_24h')}</div>\n          <div className=\"item-value\">--</div>\n        </div>\n        <div className=\"header-box-item\">\n          <div className=\"item-name\">{t('token_page.trades_24h')}</div>\n          <div className=\"item-value\">--</div>\n        </div>\n        <div className=\"header-box-item\">\n          <div className=\"item-name\">{t('token_page.amm_tvl')}</div>\n          <div className=\"item-value\">--</div>\n        </div>\n      </div>\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/Token/MPT/Header/Metadata.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { JsonView } from '../../../shared/components/JsonView'\n\ninterface MetadataProps {\n  decodedMPTMetadata: Record<string, unknown> | string\n  displayMetadataTitle?: boolean\n}\n\nexport const Metadata = ({\n  decodedMPTMetadata,\n  displayMetadataTitle = true,\n}: MetadataProps): JSX.Element => {\n  const { t } = useTranslation()\n  const isString = typeof decodedMPTMetadata === 'string'\n\n  return (\n    <div className=\"header-box metadata-box\">\n      {displayMetadataTitle && (\n        <div className=\"header-box-title\">{t('metadata')}</div>\n      )}\n      <div className=\"header-box-contents metadata-json\">\n        {isString ? (\n          <div className=\"metadata-string\">{decodedMPTMetadata}</div>\n        ) : (\n          <JsonView data={decodedMPTMetadata} showExpandButton showBackground />\n        )}\n      </div>\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/Token/MPT/Header/Settings.tsx",
    "content": "import { useTranslation } from 'react-i18next'\n\ninterface Props {\n  flags?: string[]\n}\n\ninterface FlagItem {\n  key: string\n  label: string\n  enabled: boolean\n}\n\nexport const Settings = ({ flags = [] }: Props): JSX.Element => {\n  const { t } = useTranslation()\n\n  const flagItems: FlagItem[] = [\n    {\n      key: 'locked',\n      label: t('locked'),\n      enabled: flags.includes('lsfMPTLocked'),\n    },\n    {\n      key: 'canLock',\n      label: t('can_lock'),\n      enabled: flags.includes('lsfMPTCanLock'),\n    },\n    {\n      key: 'requireAuth',\n      label: t('require_auth'),\n      enabled: flags.includes('lsfMPTRequireAuth'),\n    },\n    {\n      key: 'canEscrow',\n      label: t('can_escrow'),\n      enabled: flags.includes('lsfMPTCanEscrow'),\n    },\n    {\n      key: 'canTrade',\n      label: t('can_trade'),\n      enabled: flags.includes('lsfMPTCanTrade'),\n    },\n    {\n      key: 'canTransfer',\n      label: t('can_transfer'),\n      enabled: flags.includes('lsfMPTCanTransfer'),\n    },\n    {\n      key: 'canClawback',\n      label: t('can_clawback'),\n      enabled: flags.includes('lsfMPTCanClawback'),\n    },\n  ]\n\n  return (\n    <div className=\"header-box settings-box\">\n      <div className=\"header-box-title\">{t('settings')}</div>\n      <div className=\"header-box-contents\">\n        {flagItems.map((flag) => (\n          <div className=\"header-box-item\" key={flag.key}>\n            <div className=\"item-name\">{flag.label}</div>\n            <div\n              className={`flag-status ${flag.enabled ? 'enabled' : 'disabled'}`}\n            >\n              {flag.enabled ? t('enabled') : t('disabled')}\n            </div>\n          </div>\n        ))}\n      </div>\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/Token/MPT/Header/index.tsx",
    "content": "import { useEffect, useState, useRef } from 'react'\nimport { useTranslation, Trans } from 'react-i18next'\nimport { Loader } from '../../../shared/components/Loader'\nimport './styles.scss'\nimport {\n  BAD_REQUEST,\n  HASH192_REGEX,\n  shortenDomain,\n  shortenMPTID,\n  stripHttpProtocol,\n  convertToHttpURL,\n  shortenAccount,\n} from '../../../shared/utils'\nimport { CopyableText } from '../../../shared/components/CopyableText'\nimport DomainLink from '../../../shared/components/DomainLink'\nimport { FormattedMPTIssuance } from '../../../shared/Interfaces'\nimport { GeneralOverview } from './GeneralOverview'\nimport { MarketData } from './MarketData'\nimport { Settings } from './Settings'\n\nimport { Metadata } from './Metadata'\nimport GlobeSvg from '../../../shared/images/globe.svg'\nimport DefaultTokenIcon from '../../../shared/images/default_token_icon.svg'\nimport DownArrow from '../../../shared/images/down_arrow.svg'\nimport InfoIcon from '../../../shared/images/info-duotone.svg'\n\ninterface MetadataUri {\n  uri: string\n  category: string\n  title: string\n}\n\ninterface Props {\n  mptIssuanceId: string\n  data?: FormattedMPTIssuance\n  loading?: boolean\n  setError: (error: number | null) => void\n  holdersCount?: number\n  holdersLoading?: boolean\n}\n\nexport const Header = (props: Props) => {\n  const { t } = useTranslation()\n  const {\n    mptIssuanceId,\n    data,\n    loading,\n    setError,\n    holdersCount,\n    holdersLoading,\n  } = props\n  const [showURLDropdown, setShowURLDropdown] = useState(false)\n  const dropdownRef = useRef<HTMLDivElement>(null)\n\n  useEffect(() => {\n    if (!HASH192_REGEX.test(mptIssuanceId)) {\n      setError(BAD_REQUEST)\n    }\n  }, [setError, mptIssuanceId])\n\n  // Close dropdown when clicking outside\n  useEffect(() => {\n    const handleClickOutside = (event: MouseEvent) => {\n      if (\n        dropdownRef.current &&\n        !dropdownRef.current.contains(event.target as Node)\n      ) {\n        setShowURLDropdown(false)\n      }\n    }\n    document.addEventListener('mousedown', handleClickOutside)\n    return () => document.removeEventListener('mousedown', handleClickOutside)\n  }, [])\n\n  if (loading) {\n    return (\n      <div className=\"box token-header mpt\">\n        <Loader />\n      </div>\n    )\n  }\n\n  if (!data) {\n    return null\n  }\n\n  const {\n    issuer,\n    assetScale,\n    maxAmt,\n    outstandingAmt,\n    transferFee,\n    flags,\n    rawMPTMetadata,\n    parsedMPTMetadata,\n    isMPTMetadataCompliant,\n  } = data\n  const ticker = parsedMPTMetadata?.ticker as string | undefined\n  const logoUrl = parsedMPTMetadata?.icon as string | undefined\n  const issuerName = parsedMPTMetadata?.issuer_name as string | undefined\n  const uris = parsedMPTMetadata?.uris as MetadataUri[] | undefined\n\n  const showMPTMetadataWarning = !isMPTMetadataCompliant\n  // Only show MPT issuance ID if ticker exists (since we show ticker in header, need to show ID somewhere)\n  const showMPTIssuanceId = !!ticker\n\n  // Convert logo URL to HTTP/HTTPS format (handles IPFS URLs)\n  const RenderedLogoUrl = logoUrl ? convertToHttpURL(logoUrl) : undefined\n\n  // Get all URIs for dropdown, filtering out items without uri\n  const allUris = (uris || []).filter((u) => u.uri)\n\n  return (\n    <div className=\"box token-header mpt\">\n      {showMPTMetadataWarning && (\n        <div className=\"section metadata-warning\">\n          <InfoIcon className=\"warning-icon\" aria-hidden=\"true\" />\n          <div className=\"warning-message\">\n            <Trans\n              i18nKey=\"mpt_page.metadata_warning\"\n              components={{\n                br: <br />,\n                a: (\n                  <a\n                    href=\"https://xrpl.org/docs/concepts/tokens/fungible-tokens/multi-purpose-tokens#metadata-schema\"\n                    target=\"_blank\"\n                    rel=\"noopener noreferrer\"\n                  >\n                    {/* placeholder */}\n                  </a>\n                ),\n              }}\n            />\n          </div>\n        </div>\n      )}\n      <div className=\"section token-indicator\">\n        <div className=\"token-label\">{t('token')}</div>\n        <div className=\"category-pill\">\n          <div className=\"category-text\">{t('token_type.mpt')}</div>\n        </div>\n      </div>\n      <div className=\"section box-header\">\n        <div className=\"token-info-group\">\n          {RenderedLogoUrl ? (\n            <img\n              className=\"token-logo\"\n              alt={`${ticker || mptIssuanceId} logo`}\n              src={RenderedLogoUrl}\n            />\n          ) : (\n            <DefaultTokenIcon className=\"token-logo no-logo\" />\n          )}\n          {ticker ? (\n            <span>{ticker.toUpperCase()}</span>\n          ) : (\n            <span className=\"mpt-id\">\n              <CopyableText\n                text={mptIssuanceId.toUpperCase()}\n                displayText={shortenMPTID(mptIssuanceId)}\n              />\n            </span>\n          )}\n          {/* Show issuer name if available */}\n          {issuerName && (\n            <div className=\"token-issuer-wrap\">\n              (<span className=\"issuer-name\">{shortenAccount(issuerName)}</span>\n              )\n            </div>\n          )}\n        </div>\n\n        {allUris.length > 0 && (\n          <div className=\"header-actions\">\n            <div\n              className=\"domain-link-container links-dropdown-container\"\n              ref={dropdownRef}\n            >\n              <GlobeSvg className=\"domain-link-icon\" />\n              <DomainLink\n                className=\"domain-link\"\n                domain={allUris[0].uri}\n                displayDomain={shortenDomain(\n                  stripHttpProtocol(allUris[0].uri),\n                  12,\n                  7,\n                )}\n              />\n              {allUris.length > 1 && (\n                <button\n                  type=\"button\"\n                  className=\"dropdown-toggle-button\"\n                  onClick={() => setShowURLDropdown(!showURLDropdown)}\n                >\n                  <DownArrow className=\"dropdown-arrow\" />\n                </button>\n              )}\n              {showURLDropdown && allUris.length > 1 && (\n                <div className=\"links-dropdown-menu\">\n                  {allUris.slice(1).map((uriItem) => (\n                    <DomainLink\n                      key={`${uriItem.uri}-${uriItem.category}-${uriItem.title}`}\n                      className=\"links-dropdown-item\"\n                      domain={uriItem.uri}\n                      displayDomain={shortenDomain(\n                        stripHttpProtocol(uriItem.uri),\n                        12,\n                        7,\n                      )}\n                      keepProtocol={false}\n                    />\n                  ))}\n                </div>\n              )}\n            </div>\n          </div>\n        )}\n      </div>\n      <div className=\"section box-content\">\n        <div className=\"header-boxes\">\n          <GeneralOverview\n            issuer={issuer}\n            issuerName={issuerName}\n            transferFee={transferFee}\n            assetScale={assetScale}\n            mptIssuanceId={mptIssuanceId}\n            showMptId={showMPTIssuanceId}\n            holdersCount={holdersCount}\n            holdersLoading={holdersLoading}\n          />\n          <MarketData\n            maxAmt={maxAmt}\n            outstandingAmt={outstandingAmt}\n            assetScale={assetScale}\n          />\n          <Settings flags={flags} />\n          {(parsedMPTMetadata || rawMPTMetadata) && (\n            <Metadata\n              decodedMPTMetadata={(parsedMPTMetadata || rawMPTMetadata)!}\n            />\n          )}\n        </div>\n      </div>\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/Token/MPT/Header/styles.scss",
    "content": "@use '../../../shared/css/variables' as *;\n\n// =============================================================================\n// MPT HEADER - MPT-specific header styles only\n// All shared styles are in src/containers/Token/shared/styles.scss\n// =============================================================================\n\n.token-header.mpt {\n  // MPT-specific category pill variant ($mpt color)\n  .token-indicator {\n    .category-pill {\n      border: 1px solid $mpt;\n      background: $mpt;\n    }\n  }\n\n  // MPT metadata warning banner\n  .metadata-warning {\n    display: flex;\n    align-items: center;\n    padding: 25px;\n    border: 1px solid $orange-50;\n    border-radius: 8px;\n    margin-bottom: 30px;\n    background: $orange-90;\n    gap: 12px;\n\n    .warning-icon {\n      width: 16px;\n      min-width: 16px;\n      height: 16px;\n      min-height: 16px;\n      flex-shrink: 0;\n      margin-top: 2px;\n    }\n\n    .warning-message {\n      margin: 0;\n      color: $black-0;\n      font-size: 16px;\n      line-height: 1.5;\n\n      a {\n        color: $black-0;\n        text-decoration: underline;\n\n        &:hover {\n          color: $orange-30;\n        }\n      }\n    }\n  }\n\n  .mpt-id {\n    word-break: break-all;\n  }\n\n  // MPT-specific dropdown styles (base styles are in shared/styles.scss)\n  .links-dropdown-container {\n    position: relative;\n  }\n\n  .dropdown-toggle-button {\n    display: flex;\n    align-items: center;\n    padding: 0;\n    border: none;\n    background: transparent;\n    cursor: pointer;\n\n    .dropdown-arrow {\n      width: 12px;\n      height: 12px;\n\n      path {\n        fill: $green-30;\n        transition: fill 0.2s ease;\n      }\n    }\n  }\n\n  .domain-link-container:hover {\n    .dropdown-arrow path {\n      fill: $green-50;\n    }\n  }\n\n  .links-dropdown-menu {\n    position: absolute;\n    z-index: 100;\n    top: 100%;\n    right: 0;\n    left: 0;\n    display: flex;\n    flex-direction: column;\n    padding: 8px 0;\n    border: 1px solid $green-30;\n    border-radius: 8px;\n    margin-top: 4px;\n    background: $black-80;\n    box-shadow: 0 4px 12px rgb(0 0 0 / 30%);\n\n    .links-dropdown-item {\n      padding: 8px 16px;\n      color: $green-30;\n      font-size: 14px;\n      text-decoration: none;\n      transition: background-color 0.2s ease;\n\n      &:hover {\n        background-color: rgba($green-30, 0.1);\n        color: $green-50;\n      }\n    }\n  }\n\n  // MPT-specific description value styling\n  .description-value {\n    max-width: 300px;\n    overflow-wrap: break-word;\n  }\n\n  // Settings box flag status styling\n  .settings-box {\n    .flag-status {\n      min-width: 85px;\n      padding: 4px 10px;\n      border-radius: 999px;\n      font-size: 12px;\n      letter-spacing: 0.06em;\n      text-align: center;\n      text-transform: uppercase;\n      white-space: nowrap;\n      @include semibold;\n\n      &.enabled {\n        background: $green-50;\n        color: $black-100;\n      }\n\n      &.disabled {\n        background: $black-50;\n        color: $black-0;\n      }\n    }\n  }\n\n  // Metadata box takes full width\n  .metadata-box {\n    @include for-size(tablet-landscape-up) {\n      width: 100%;\n      max-width: 100%;\n      flex: 0 0 100%;\n    }\n\n    .metadata-json {\n      max-height: 250px;\n      overflow-y: auto;\n      scrollbar-color: rgb(255 255 255 / 20%) transparent;\n\n      /* Firefox */\n      scrollbar-width: thin;\n\n      /* WebKit */\n      &::-webkit-scrollbar {\n        width: 10px;\n        height: 10px;\n      }\n\n      &::-webkit-scrollbar-track {\n        background: transparent;\n      }\n\n      &::-webkit-scrollbar-thumb {\n        border: 2px solid transparent; /* create padding effect */\n        border-radius: 6px;\n        background: rgb(255 255 255 / 20%);\n        background-clip: padding-box;\n      }\n\n      &::-webkit-scrollbar-thumb:hover {\n        background: rgb(255 255 255 / 12%);\n      }\n\n      .json-view {\n        padding: 16px;\n        margin-bottom: 0;\n      }\n\n      .json-view-controls {\n        top: 16px;\n        right: 16px;\n\n        @include for-size(phone-only) {\n          top: 16px;\n          left: 16px;\n        }\n      }\n\n      .metadata-string {\n        padding: 16px;\n        font-family: monospace;\n        font-size: 14px;\n        line-height: 1.5;\n        overflow-wrap: break-word;\n        white-space: pre-wrap;\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "src/containers/Token/MPT/TablePicker/index.tsx",
    "content": "import { useState, useEffect, useMemo } from 'react'\nimport { useTranslation } from 'react-i18next'\n\nimport { TransactionTable } from '../../../shared/components/TransactionTable/TransactionTable'\nimport { Tabs } from '../../../shared/components/Tabs'\nimport { useAccountTransactions } from '../../shared/hooks/useAccountTransactions'\nimport {\n  HoldersTable,\n  XRPLHolder,\n} from '../../../shared/components/HoldersTable/HoldersTable'\nimport {\n  TransfersTable,\n  LOSTransfer,\n} from '../../shared/components/TransfersTable/TransfersTable'\nimport { TablePaginationState } from '../../shared/hooks/usePaginationState'\nimport { TableSortingState } from '../../shared/hooks/useSortingState'\nimport { convertScaledPrice } from '../../../shared/utils'\n\nexport interface TablePickerProps {\n  mptIssuanceId: string\n  issuer: string\n  assetScale?: number\n\n  // Holders table state\n  holdersData?: XRPLHolder[]\n  holdersPagination: TablePaginationState\n  holdersLoading: boolean\n\n  // Transfers table state\n  transfersData?: LOSTransfer[]\n  transfersPagination: TablePaginationState\n  transfersSorting: TableSortingState\n  transfersLoading: boolean\n  onRefreshTransfers?: () => void\n}\n\nexport const TablePicker = ({\n  mptIssuanceId,\n  issuer,\n  assetScale,\n  holdersData,\n  holdersPagination,\n  holdersLoading,\n  transfersData,\n  transfersPagination,\n  transfersSorting,\n  transfersLoading,\n  onRefreshTransfers,\n}: TablePickerProps) => {\n  const { t } = useTranslation()\n\n  const { data, error, loading, fetchNextPage, hasNextPage } =\n    useAccountTransactions({\n      account: issuer,\n      tokenId: mptIssuanceId,\n      limit: 50,\n    })\n\n  const [tablePickerState, setTablePickerState] = useState<\n    'all' | 'transfers' | 'holders'\n  >('all')\n\n  // Reset table picker state when token changes\n  useEffect(() => {\n    setTablePickerState('all')\n  }, [mptIssuanceId])\n\n  // Helper to reset pagination to page 1\n  const resetTablePagination = (setCurrentPage: (page: number) => void) => {\n    setCurrentPage(1)\n  }\n\n  // Helper to render transaction table\n  const renderTransactionTable = () => (\n    <TransactionTable\n      transactions={data?.pages?.map((page: any) => page.transactions).flat()}\n      loading={loading}\n      emptyMessage={error?.message ? t(error.message as any) : ''}\n      onLoadMore={() => fetchNextPage()}\n      hasAdditionalResults={hasNextPage}\n    />\n  )\n\n  // Transform transfer amount.value using assetScale\n  const transfersFormatted: LOSTransfer[] = useMemo(() => {\n    if (!transfersData) {\n      return []\n    }\n    return transfersData.map((transfer) => ({\n      ...transfer,\n      amount: {\n        ...transfer.amount,\n        value: convertScaledPrice(\n          BigInt(transfer.amount.value),\n          assetScale ?? 0,\n        ),\n      },\n    }))\n  }, [transfersData, assetScale])\n\n  // Helper to render transfers table\n  const renderTransfersTable = () => (\n    <TransfersTable\n      transactions={transfersFormatted}\n      isTransfersLoading={transfersLoading}\n      totalTransfers={transfersPagination.total}\n      currentPage={transfersPagination.currentPage}\n      onPageChange={transfersPagination.setCurrentPage}\n      pageSize={transfersPagination.pageSize}\n      hasMore={transfersPagination.hasMore}\n      hasPrevPage={transfersPagination.hasPrevPage}\n      sortField={transfersSorting.sortField}\n      setSortField={transfersSorting.setSortField}\n      sortOrder={transfersSorting.sortOrder}\n      setSortOrder={transfersSorting.setSortOrder}\n      onRefresh={onRefreshTransfers}\n    />\n  )\n\n  // Helper to render holders table\n  const renderHoldersTable = () => (\n    <HoldersTable\n      holders={holdersData || []}\n      isHoldersDataLoading={holdersLoading}\n      totalHolders={holdersPagination.total}\n      currentPage={holdersPagination.currentPage}\n      onPageChange={holdersPagination.setCurrentPage}\n      pageSize={holdersPagination.pageSize}\n    />\n  )\n\n  const tabs = [\n    { id: 'all', labelKey: 'token_page.all_tx' },\n    {\n      id: 'transfers',\n      labelKey: 'token_page.transfers_tx',\n      onTabClick: () =>\n        resetTablePagination(transfersPagination.setCurrentPage),\n    },\n    {\n      id: 'holders',\n      labelKey: 'token_page.holders_table',\n      onTabClick: () => resetTablePagination(holdersPagination.setCurrentPage),\n    },\n  ]\n\n  return (\n    <div className=\"token-transaction-table-container\">\n      <hr className=\"full-width-line\" />\n      <div className=\"tx-table-picker\">\n        <Tabs\n          tabs={tabs}\n          selected={tablePickerState}\n          onTabChange={(tabId) =>\n            setTablePickerState(tabId as 'all' | 'transfers' | 'holders')\n          }\n        />\n      </div>\n\n      {tablePickerState === 'all' && renderTransactionTable()}\n\n      {tablePickerState === 'transfers' && renderTransfersTable()}\n\n      {tablePickerState === 'holders' && renderHoldersTable()}\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/Token/MPT/api/holders.ts",
    "content": "import { getMPTHolders } from '../../../../rippled/lib/rippled'\nimport { convertScaledPrice } from '../../../shared/utils'\n\ninterface MPTHolderFromClio {\n  account: string\n  flags: number\n  mpt_amount: string\n  mptoken_index: string\n}\n\ninterface MPTHolder {\n  rank: number\n  account: string\n  balance: string\n  percent: number\n  value_usd: number | null\n}\nexport interface MPTHolderSummary {\n  holders: MPTHolder[]\n  totalHolders: number\n}\n\nexport async function fetchAllMPTHolders(\n  rippledSocket: any,\n  tokenId: string,\n  outstandingAmount: string,\n  assetScale: number,\n): Promise<MPTHolderSummary> {\n  const allHolders: MPTHolderFromClio[] = []\n  let marker: string | undefined\n\n  do {\n    // eslint-disable-next-line no-await-in-loop\n    const response = await getMPTHolders(\n      rippledSocket,\n      tokenId,\n      100, // Fetch 100 at a time for efficiency\n      marker || '',\n    )\n\n    if (response.mptokens) {\n      allHolders.push(...response.mptokens)\n    }\n\n    marker = response.marker\n  } while (marker)\n\n  const totalOutstanding = BigInt(outstandingAmount || '0')\n\n  // Filter out zero balances and sort by balance in descending order\n  const sortedHolders = allHolders\n    .filter((h) => BigInt(h.mpt_amount || 0) > 0n)\n    .sort((a, b) => {\n      const diff = BigInt(b.mpt_amount || 0) - BigInt(a.mpt_amount || 0)\n      if (diff > 0n) {\n        return 1\n      }\n\n      if (diff < 0n) {\n        return -1\n      }\n\n      return 0\n    })\n\n  // Format holders with rank and percentage\n  const holders: MPTHolder[] = sortedHolders.map(\n    (token: MPTHolderFromClio, index: number) => {\n      const balance = BigInt(token.mpt_amount || '0')\n      const percent =\n        totalOutstanding > 0n\n          ? Number((balance * 10000n) / totalOutstanding) / 100\n          : 0\n\n      return {\n        rank: index + 1,\n        account: token.account,\n        balance: convertScaledPrice(BigInt(token.mpt_amount || 0), assetScale),\n        percent,\n        value_usd: null, // MPT doesn't have USD value yet\n      }\n    },\n  )\n\n  return {\n    holders,\n    totalHolders: holders.length,\n  }\n}\n"
  },
  {
    "path": "src/containers/Token/MPT/index.tsx",
    "content": "import {\n  FC,\n  PropsWithChildren,\n  useContext,\n  useEffect,\n  useMemo,\n  useState,\n} from 'react'\nimport { Helmet } from 'react-helmet-async'\nimport { useQuery } from 'react-query'\nimport { useRouteParams } from '../../shared/routing'\nimport { MPT_ROUTE } from '../../App/routes'\nimport { Header } from './Header'\nimport { TablePicker } from './TablePicker'\nimport NoMatch from '../../NoMatch'\n\nimport './styles.scss'\nimport '../shared/styles.scss'\nimport { NOT_FOUND, BAD_REQUEST, shortenMPTID } from '../../shared/utils'\nimport { useAnalytics } from '../../shared/analytics'\nimport { ErrorMessages, FormattedMPTIssuance } from '../../shared/Interfaces'\nimport { Loader } from '../../shared/components/Loader'\nimport SocketContext from '../../shared/SocketContext'\nimport { getMPTIssuance } from '../../../rippled/lib/rippled'\nimport { formatMPTIssuance } from '../../../rippled/lib/utils'\nimport { fetchAllMPTHolders } from './api/holders'\nimport { paginationService as transfersPaginationService } from '../shared/services/transfersPagination'\nimport { useCursorPaginatedQuery } from '../../shared/hooks/useCursorPaginatedQuery'\nimport { PAGINATION_CONFIG, INITIAL_PAGE } from '../shared/constants'\n\nconst ERROR_MESSAGES: ErrorMessages = {\n  default: {\n    title: 'generic_error',\n    hints: ['not_your_fault'],\n  },\n  [NOT_FOUND]: {\n    title: 'assets.no_mpts_message',\n    hints: ['check_mpt_id'],\n  },\n  [BAD_REQUEST]: {\n    title: 'invalid_xrpl_address',\n    hints: ['check_mpt_id'],\n  },\n}\n\nconst getErrorMessage = (error: unknown) =>\n  ERROR_MESSAGES[error as string | number] || ERROR_MESSAGES.default\n\nconst Page: FC<PropsWithChildren<{ mptIssuanceId: string }>> = ({\n  mptIssuanceId,\n  children,\n}) => (\n  <div className=\"token-page\">\n    <Helmet title={`MPT ${shortenMPTID(mptIssuanceId)}`} />\n    {children}\n  </div>\n)\n\nexport const MPT = () => {\n  const { trackScreenLoaded, trackException } = useAnalytics()\n  const { id: mptIssuanceId = '' } = useRouteParams(MPT_ROUTE)\n  const [error, setError] = useState<number | null>(null)\n  const rippledSocket = useContext(SocketContext)\n\n  // Holders pagination state\n  const [holdersPage, setHoldersPage] = useState(INITIAL_PAGE)\n  const holdersPageSize = PAGINATION_CONFIG.HOLDERS_PAGE_SIZE\n\n  // Fetch MPT issuance data\n  const { data: mptokenIssuance, isFetching: mptLoading } =\n    useQuery<FormattedMPTIssuance>(\n      ['getMPTIssuance', mptIssuanceId],\n      async () => {\n        const info = await getMPTIssuance(rippledSocket, mptIssuanceId)\n        return formatMPTIssuance(info.node)\n      },\n      {\n        enabled: !!mptIssuanceId,\n        onError: (e: any) => {\n          trackException(\n            `mptIssuance ${mptIssuanceId} --- ${JSON.stringify(e)}`,\n          )\n          setError(e.code || NOT_FOUND)\n        },\n      },\n    )\n\n  // Fetch ALL holders data at once using mpt_holders Clio method\n  const { data: holdersData, isFetching: holdersLoading } = useQuery(\n    ['getMPTHolders', mptIssuanceId],\n    async () =>\n      fetchAllMPTHolders(\n        rippledSocket,\n        mptIssuanceId,\n        mptokenIssuance?.outstandingAmt || '0',\n        mptokenIssuance?.assetScale ?? 0,\n      ),\n    {\n      enabled: !!mptokenIssuance?.issuer,\n    },\n  )\n\n  // Client-side pagination: slice the holders array for the current page\n  const paginatedHolders = useMemo(() => {\n    if (!holdersData?.holders) {\n      return []\n    }\n\n    const start = (holdersPage - 1) * holdersPageSize\n    const end = start + holdersPageSize\n    return holdersData.holders.slice(start, end)\n  }, [holdersData?.holders, holdersPage, holdersPageSize])\n\n  // Transfers — using shared hook\n  const transfers = useCursorPaginatedQuery({\n    service: transfersPaginationService,\n    id: mptIssuanceId,\n    pageSize: PAGINATION_CONFIG.TRANSFERS_PAGE_SIZE,\n    enabled: !!mptIssuanceId,\n  })\n\n  // Track page view\n  useEffect(() => {\n    trackScreenLoaded({\n      mpt_issuance_id: mptIssuanceId,\n    })\n    return () => {\n      window.scrollTo(0, 0)\n    }\n  }, [mptIssuanceId, trackScreenLoaded])\n\n  const renderError = () => {\n    const message = getErrorMessage(error)\n    return (\n      <div className=\"token-page\">\n        <NoMatch title={message.title} hints={message.hints} />\n      </div>\n    )\n  }\n\n  if (error) {\n    return <Page mptIssuanceId={mptIssuanceId}>{renderError()}</Page>\n  }\n\n  return (\n    <Page mptIssuanceId={mptIssuanceId}>\n      {mptLoading ? (\n        <Loader />\n      ) : (\n        mptokenIssuance && (\n          <Header\n            mptIssuanceId={mptIssuanceId}\n            data={mptokenIssuance}\n            loading={mptLoading}\n            setError={setError}\n            holdersCount={holdersData?.totalHolders}\n            holdersLoading={holdersLoading}\n          />\n        )\n      )}\n\n      {mptIssuanceId && mptokenIssuance && (\n        <div className=\"section\">\n          <TablePicker\n            mptIssuanceId={mptIssuanceId}\n            issuer={mptokenIssuance.issuer}\n            assetScale={mptokenIssuance.assetScale}\n            holdersData={paginatedHolders}\n            holdersPagination={{\n              currentPage: holdersPage,\n              setCurrentPage: setHoldersPage,\n              pageSize: holdersPageSize,\n              total: holdersData?.totalHolders || 0,\n            }}\n            holdersLoading={holdersLoading}\n            transfersData={transfers.data?.items || []}\n            transfersPagination={{\n              currentPage: transfers.page,\n              setCurrentPage: transfers.setPage,\n              pageSize: PAGINATION_CONFIG.TRANSFERS_PAGE_SIZE,\n              total: transfers.data?.totalItems || 0,\n              hasMore: transfers.data?.hasMore || false,\n              hasPrevPage: transfers.page > 1,\n            }}\n            transfersSorting={{\n              sortField: transfers.sortField,\n              setSortField: transfers.setSortField,\n              sortOrder: transfers.sortOrder,\n              setSortOrder: transfers.setSortOrder,\n            }}\n            transfersLoading={transfers.isLoading}\n            onRefreshTransfers={transfers.refresh}\n          />\n        </div>\n      )}\n    </Page>\n  )\n}\n"
  },
  {
    "path": "src/containers/Token/MPT/styles.scss",
    "content": "@import '../shared/styles';\n@import '../../shared/css/data-tables-mobile';\n"
  },
  {
    "path": "src/containers/Token/MPT/test/Header/GeneralOverview.test.tsx",
    "content": "import { render } from '@testing-library/react'\nimport { I18nextProvider } from 'react-i18next'\nimport { BrowserRouter as Router } from 'react-router'\nimport i18n from '../../../../../i18n/testConfig'\nimport { GeneralOverview } from '../../Header/GeneralOverview'\n\nconst TEST_MPT_ID = '00000004A407AF5856CCF3C42619DAA925813FC955C72983'\nconst TEST_ISSUER = 'rTestIssuer123456789012345678901234'\n\ndescribe('GeneralOverview component', () => {\n  const renderComponent = (props: any = {}) =>\n    render(\n      <I18nextProvider i18n={i18n}>\n        <Router>\n          <GeneralOverview\n            issuer={props.issuer || TEST_ISSUER}\n            issuerName={props.issuerName}\n            transferFee={props.transferFee}\n            assetScale={props.assetScale}\n            mptIssuanceId={props.mptIssuanceId || TEST_MPT_ID}\n            showMptId={props.showMptId ?? false}\n            holdersCount={props.holdersCount}\n            holdersLoading={props.holdersLoading || false}\n          />\n        </Router>\n      </I18nextProvider>,\n    )\n\n  it('renders header box', () => {\n    const { container } = renderComponent()\n    expect(container.querySelectorAll('.header-box')).toHaveLength(1)\n    expect(container.querySelector('.header-box-title')).toHaveTextContent(\n      'token_page.general_overview',\n    )\n  })\n\n  it('displays issuer account', () => {\n    const { container } = renderComponent()\n    expect(container.querySelectorAll('.account-link')).toHaveLength(1)\n  })\n\n  it('displays issuer name when provided', () => {\n    const { container } = renderComponent({ issuerName: 'Test Issuer' })\n    expect(container).toHaveTextContent('Test Issuer')\n  })\n\n  it('displays transfer fee when provided', () => {\n    const { container } = renderComponent({ transferFee: 1000 })\n    // transferFee 1000 / 1000 = 1, formatted as percent = 1.000%\n    expect(container).toHaveTextContent('1.000%')\n  })\n\n  it('displays -- when no transfer fee', () => {\n    const { container } = renderComponent({ transferFee: undefined })\n    expect(container).toHaveTextContent('--')\n  })\n\n  it('displays asset scale', () => {\n    const { container } = renderComponent({ assetScale: 6 })\n    expect(container).toHaveTextContent('6')\n  })\n\n  it('displays 0 for undefined asset scale', () => {\n    const { container } = renderComponent({ assetScale: undefined })\n    expect(container).toHaveTextContent('0')\n  })\n\n  it('displays holders count', () => {\n    const { container } = renderComponent({ holdersCount: 1234 })\n    expect(container).toHaveTextContent('1,234')\n  })\n\n  it('shows loading spinner when holdersLoading', () => {\n    const { container } = renderComponent({ holdersLoading: true })\n    expect(container.querySelectorAll('.loading-spinner')).toHaveLength(1)\n  })\n\n  it('shows MPT issuance ID when showMptId is true', () => {\n    const { container } = renderComponent({ showMptId: true })\n    expect(container).toHaveTextContent('mpt_issuance_id')\n  })\n\n  it('hides MPT issuance ID when showMptId is false', () => {\n    const { container } = renderComponent({ showMptId: false })\n    expect(container).not.toHaveTextContent('mpt_issuance_id')\n  })\n})\n"
  },
  {
    "path": "src/containers/Token/MPT/test/Header/Header.test.tsx",
    "content": "import { render } from '@testing-library/react'\nimport { I18nextProvider } from 'react-i18next'\nimport { BrowserRouter as Router } from 'react-router'\nimport i18n from '../../../../../i18n/testConfig'\nimport { Header } from '../../Header'\n\nconst TEST_MPT_ID = '00000004A407AF5856CCF3C42619DAA925813FC955C72983'\n\nconst mockMPTData = {\n  issuer: 'rTestIssuer123456789012345678901234',\n  assetScale: 2,\n  maxAmt: '1000000',\n  outstandingAmt: '500000',\n  transferFee: 1000,\n  sequence: 1,\n  flags: ['lsfMPTCanTransfer', 'lsfMPTCanTrade'],\n  rawMPTMetadata: '{\"ticker\":\"TEST\",\"issuer_name\":\"Test Issuer\"}',\n  parsedMPTMetadata: {\n    ticker: 'TEST',\n    issuer_name: 'Test Issuer',\n    icon: 'https://example.com/icon.png',\n    uris: [\n      { uri: 'https://example.com', category: 'website', title: 'Website' },\n    ],\n  },\n  isMPTMetadataCompliant: true,\n}\n\nconst mockMPTDataNoMetadata = {\n  issuer: 'rTestIssuer123456789012345678901234',\n  assetScale: 0,\n  maxAmt: '1000000',\n  outstandingAmt: '500000',\n  transferFee: undefined,\n  sequence: 1,\n  flags: [],\n  rawMPTMetadata: undefined,\n  parsedMPTMetadata: undefined,\n  isMPTMetadataCompliant: false,\n}\n\ndescribe('MPT Header component', () => {\n  const renderComponent = (props: any = {}) =>\n    render(\n      <I18nextProvider i18n={i18n}>\n        <Router>\n          <Header\n            mptIssuanceId={TEST_MPT_ID}\n            data={props.data}\n            loading={props.loading || false}\n            setError={props.setError || jest.fn()}\n            holdersCount={props.holdersCount}\n            holdersLoading={props.holdersLoading || false}\n          />\n        </Router>\n      </I18nextProvider>,\n    )\n\n  it('renders loader when loading', () => {\n    const { container } = renderComponent({ loading: true })\n    expect(container.querySelectorAll('.loader')).toHaveLength(1)\n  })\n\n  it('returns null when no data and not loading', () => {\n    const { container } = renderComponent({ data: undefined, loading: false })\n    expect(container.querySelectorAll('.token-header')).toHaveLength(0)\n  })\n\n  it('renders header with MPT data', () => {\n    const { container } = renderComponent({ data: mockMPTData })\n    expect(container.querySelectorAll('.token-header.mpt')).toHaveLength(1)\n    expect(container.querySelectorAll('.token-indicator')).toHaveLength(1)\n    expect(container.querySelectorAll('.box-header')).toHaveLength(1)\n  })\n\n  it('displays ticker when available', () => {\n    const { container } = renderComponent({ data: mockMPTData })\n    expect(container).toHaveTextContent('TEST')\n  })\n\n  it('displays issuer name when available', () => {\n    const { container } = renderComponent({ data: mockMPTData })\n    expect(container).toHaveTextContent('Test Issuer')\n  })\n\n  it('displays shortened MPT ID when no ticker', () => {\n    const { container } = renderComponent({ data: mockMPTDataNoMetadata })\n    expect(container.querySelectorAll('.mpt-id')).toHaveLength(1)\n  })\n\n  it('shows metadata warning when not compliant', () => {\n    const { container } = renderComponent({ data: mockMPTDataNoMetadata })\n    expect(container.querySelectorAll('.metadata-warning')).toHaveLength(1)\n  })\n\n  it('does not show metadata warning when compliant', () => {\n    const { container } = renderComponent({ data: mockMPTData })\n    expect(container.querySelectorAll('.metadata-warning')).toHaveLength(0)\n  })\n\n  it('displays logo when available', () => {\n    const { container } = renderComponent({ data: mockMPTData })\n    const logo = container.querySelector('img.token-logo')\n    expect(logo).not.toBeNull()\n    expect(logo).toHaveAttribute('src', 'https://example.com/icon.png')\n  })\n\n  it('displays logo URL without protocol by prefixing https', () => {\n    const dataWithNoProtocolUrl = {\n      ...mockMPTData,\n      parsedMPTMetadata: {\n        ...mockMPTData.parsedMPTMetadata,\n        icon: 'example.com/logo.png',\n      },\n    }\n    const { container } = renderComponent({ data: dataWithNoProtocolUrl })\n    const logo = container.querySelector('img.token-logo')\n    expect(logo).not.toBeNull()\n    expect(logo).toHaveAttribute('src', 'https://example.com/logo.png')\n  })\n\n  it('displays default logo when no icon', () => {\n    const { container } = renderComponent({ data: mockMPTDataNoMetadata })\n    expect(\n      container.querySelectorAll('.token-logo.no-logo').length,\n    ).toBeGreaterThanOrEqual(1)\n  })\n\n  it('renders domain link when URIs available', () => {\n    const { container } = renderComponent({ data: mockMPTData })\n    expect(container.querySelectorAll('.domain-link-container')).toHaveLength(1)\n  })\n\n  it('calls setError for invalid MPT ID', () => {\n    const setError = jest.fn()\n    renderComponent({\n      data: mockMPTData,\n      setError,\n    })\n    // Valid ID, setError should not be called with BAD_REQUEST\n    // No setProps equivalent in RTL, just verify render doesn't throw\n  })\n\n  it('renders GeneralOverview component', () => {\n    const { container } = renderComponent({\n      data: mockMPTData,\n      holdersCount: 100,\n    })\n    expect(container.querySelectorAll('.header-box').length).toBeGreaterThan(0)\n  })\n\n  it('renders Settings component with flags', () => {\n    const { container } = renderComponent({ data: mockMPTData })\n    expect(container).toHaveTextContent('can_transfer')\n  })\n\n  it('renders Metadata component when metadata exists', () => {\n    const { container } = renderComponent({ data: mockMPTData })\n    expect(container.querySelectorAll('.metadata-box')).toHaveLength(1)\n  })\n})\n"
  },
  {
    "path": "src/containers/Token/MPT/test/Header/MarketData.test.tsx",
    "content": "import { render } from '@testing-library/react'\nimport { I18nextProvider } from 'react-i18next'\nimport i18n from '../../../../../i18n/testConfig'\nimport { MarketData } from '../../Header/MarketData'\n\ndescribe('MarketData component', () => {\n  const renderComponent = (props: any = {}) =>\n    render(\n      <I18nextProvider i18n={i18n}>\n        <MarketData\n          maxAmt={props.maxAmt}\n          outstandingAmt={props.outstandingAmt}\n          assetScale={props.assetScale}\n        />\n      </I18nextProvider>,\n    )\n\n  it('renders header box', () => {\n    const { container } = renderComponent()\n    expect(container.querySelectorAll('.header-box')).toHaveLength(1)\n    expect(container.querySelector('.header-box-title')).toHaveTextContent(\n      'token_page.market_data',\n    )\n  })\n\n  it('displays supply label', () => {\n    const { container } = renderComponent()\n    expect(container).toHaveTextContent('token_page.supply')\n  })\n\n  it('displays circulating supply label', () => {\n    const { container } = renderComponent()\n    expect(container).toHaveTextContent('token_page.circulating_supply')\n  })\n\n  it('displays formatted max amount with scale 0', () => {\n    const { container } = renderComponent({\n      maxAmt: '1000000',\n      assetScale: 0,\n    })\n    // parseAmount abbreviates large numbers\n    expect(container).toHaveTextContent('1.0M')\n  })\n\n  it('displays formatted max amount with scale 2', () => {\n    const { container } = renderComponent({\n      maxAmt: '100000000',\n      assetScale: 2,\n    })\n    // 100000000 with scale 2 = 1000000, formatted as 1.0M\n    expect(container).toHaveTextContent('1.0M')\n  })\n\n  it('displays formatted outstanding amount', () => {\n    const { container } = renderComponent({\n      outstandingAmt: '5000000',\n      assetScale: 0,\n    })\n    // parseAmount abbreviates large numbers\n    expect(container).toHaveTextContent('5.0M')\n  })\n\n  it('displays 0 for undefined amounts', () => {\n    const { container } = renderComponent({\n      maxAmt: undefined,\n      outstandingAmt: undefined,\n      assetScale: undefined,\n    })\n    expect(container).toHaveTextContent('0')\n  })\n\n  it('displays market cap placeholder', () => {\n    const { container } = renderComponent()\n    expect(container).toHaveTextContent('token_page.market_cap')\n    expect(container).toHaveTextContent('--')\n  })\n\n  it('displays volume 24h placeholder', () => {\n    const { container } = renderComponent()\n    expect(container).toHaveTextContent('token_page.volume_24h')\n  })\n\n  it('displays trades 24h placeholder', () => {\n    const { container } = renderComponent()\n    expect(container).toHaveTextContent('token_page.trades_24h')\n  })\n\n  it('displays AMM TVL placeholder', () => {\n    const { container } = renderComponent()\n    expect(container).toHaveTextContent('token_page.amm_tvl')\n  })\n})\n"
  },
  {
    "path": "src/containers/Token/MPT/test/Header/Metadata.test.tsx",
    "content": "import { render } from '@testing-library/react'\nimport { I18nextProvider } from 'react-i18next'\nimport i18n from '../../../../../i18n/testConfig'\nimport { Metadata } from '../../Header/Metadata'\n\ndescribe('Metadata component', () => {\n  const renderComponent = (props: any) =>\n    render(\n      <I18nextProvider i18n={i18n}>\n        <Metadata decodedMPTMetadata={props.decodedMPTMetadata} />\n      </I18nextProvider>,\n    )\n\n  it('renders header box with metadata title', () => {\n    const { container } = renderComponent({ decodedMPTMetadata: {} })\n    expect(container.querySelectorAll('.header-box.metadata-box')).toHaveLength(\n      1,\n    )\n    expect(container.querySelector('.header-box-title')).toHaveTextContent(\n      'metadata',\n    )\n  })\n\n  it('renders JSON view for object metadata', () => {\n    const metadata = {\n      ticker: 'TEST',\n      issuer_name: 'Test Issuer',\n      description: 'A test token',\n    }\n    const { container } = renderComponent({ decodedMPTMetadata: metadata })\n    expect(container.querySelectorAll('.metadata-json')).toHaveLength(1)\n    expect(container.querySelectorAll('.metadata-string')).toHaveLength(0)\n  })\n\n  it('renders string for string metadata', () => {\n    const metadata = 'This is raw metadata string'\n    const { container } = renderComponent({ decodedMPTMetadata: metadata })\n    expect(container.querySelectorAll('.metadata-string')).toHaveLength(1)\n    expect(container.querySelector('.metadata-string')).toHaveTextContent(\n      metadata,\n    )\n  })\n\n  it('handles empty object metadata', () => {\n    const { container } = renderComponent({ decodedMPTMetadata: {} })\n    expect(container.querySelectorAll('.metadata-json')).toHaveLength(1)\n  })\n\n  it('handles complex nested metadata', () => {\n    const metadata = {\n      ticker: 'TEST',\n      uris: [\n        { uri: 'https://example.com', category: 'website' },\n        { uri: 'https://docs.example.com', category: 'documentation' },\n      ],\n      nested: {\n        level1: {\n          level2: 'deep value',\n        },\n      },\n    }\n    const { container } = renderComponent({ decodedMPTMetadata: metadata })\n    expect(container.querySelectorAll('.metadata-json')).toHaveLength(1)\n  })\n})\n"
  },
  {
    "path": "src/containers/Token/MPT/test/Header/Settings.test.tsx",
    "content": "import { render } from '@testing-library/react'\nimport { I18nextProvider } from 'react-i18next'\nimport i18n from '../../../../../i18n/testConfig'\nimport { Settings } from '../../Header/Settings'\n\ndescribe('Settings component', () => {\n  const renderComponent = (props: any = {}) =>\n    render(\n      <I18nextProvider i18n={i18n}>\n        <Settings flags={props.flags} />\n      </I18nextProvider>,\n    )\n\n  it('renders header box with settings title', () => {\n    const { container } = renderComponent()\n    expect(container.querySelectorAll('.header-box.settings-box')).toHaveLength(\n      1,\n    )\n    expect(container.querySelector('.header-box-title')).toHaveTextContent(\n      'settings',\n    )\n  })\n\n  it('renders all 7 flag items', () => {\n    const { container } = renderComponent()\n    expect(container.querySelectorAll('.header-box-item')).toHaveLength(7)\n  })\n\n  it('shows locked flag as disabled by default', () => {\n    const { container } = renderComponent({ flags: [] })\n    expect(container).toHaveTextContent('locked')\n    expect(container).toHaveTextContent('disabled')\n  })\n\n  it('shows locked flag as enabled when present', () => {\n    const { container } = renderComponent({ flags: ['lsfMPTLocked'] })\n    const flagItems = container.querySelectorAll('.header-box-item')\n    const lockedItem = flagItems[0]\n    expect(lockedItem.querySelectorAll('.flag-status.enabled')).toHaveLength(1)\n  })\n\n  it('shows can_lock flag status', () => {\n    const { container } = renderComponent({ flags: ['lsfMPTCanLock'] })\n    expect(container).toHaveTextContent('can_lock')\n    expect(container.querySelectorAll('.flag-status.enabled')).toHaveLength(1)\n  })\n\n  it('shows require_auth flag status', () => {\n    const { container } = renderComponent({ flags: ['lsfMPTRequireAuth'] })\n    expect(container).toHaveTextContent('require_auth')\n    expect(container.querySelectorAll('.flag-status.enabled')).toHaveLength(1)\n  })\n\n  it('shows can_escrow flag status', () => {\n    const { container } = renderComponent({ flags: ['lsfMPTCanEscrow'] })\n    expect(container).toHaveTextContent('can_escrow')\n    expect(container.querySelectorAll('.flag-status.enabled')).toHaveLength(1)\n  })\n\n  it('shows can_trade flag status', () => {\n    const { container } = renderComponent({ flags: ['lsfMPTCanTrade'] })\n    expect(container).toHaveTextContent('can_trade')\n    expect(container.querySelectorAll('.flag-status.enabled')).toHaveLength(1)\n  })\n\n  it('shows can_transfer flag status', () => {\n    const { container } = renderComponent({ flags: ['lsfMPTCanTransfer'] })\n    expect(container).toHaveTextContent('can_transfer')\n    expect(container.querySelectorAll('.flag-status.enabled')).toHaveLength(1)\n  })\n\n  it('shows can_clawback flag status', () => {\n    const { container } = renderComponent({ flags: ['lsfMPTCanClawback'] })\n    expect(container).toHaveTextContent('can_clawback')\n    expect(container.querySelectorAll('.flag-status.enabled')).toHaveLength(1)\n  })\n\n  it('handles multiple flags enabled', () => {\n    const { container } = renderComponent({\n      flags: ['lsfMPTCanTransfer', 'lsfMPTCanTrade', 'lsfMPTCanLock'],\n    })\n    expect(container.querySelectorAll('.flag-status.enabled')).toHaveLength(3)\n    expect(container.querySelectorAll('.flag-status.disabled')).toHaveLength(4)\n  })\n\n  it('handles empty flags array', () => {\n    const { container } = renderComponent({ flags: [] })\n    expect(container.querySelectorAll('.flag-status.enabled')).toHaveLength(0)\n    expect(container.querySelectorAll('.flag-status.disabled')).toHaveLength(7)\n  })\n\n  it('handles undefined flags', () => {\n    const { container } = renderComponent({ flags: undefined })\n    expect(container.querySelectorAll('.flag-status.disabled')).toHaveLength(7)\n  })\n})\n"
  },
  {
    "path": "src/containers/Token/MPT/test/TablePicker/TablePicker.test.tsx",
    "content": "import { render } from '@testing-library/react'\nimport { I18nextProvider } from 'react-i18next'\nimport { BrowserRouter as Router } from 'react-router'\nimport { QueryClientProvider } from 'react-query'\nimport moxios from 'moxios'\nimport i18n from '../../../../../i18n/testConfig'\nimport { TablePicker } from '../../TablePicker'\nimport { testQueryClient } from '../../../../test/QueryClient'\n\nimport { getAccountTransactions } from '../../../../../rippled'\n\njest.mock('../../../../../rippled', () => ({\n  __esModule: true,\n  getAccountTransactions: jest.fn(),\n}))\n\nconst TEST_MPT_ID = '00000004A407AF5856CCF3C42619DAA925813FC955C72983'\nconst TEST_ISSUER = 'rTestIssuer123456789012345678901234'\n\nconst mockHolders = [\n  {\n    rank: 1,\n    account: 'rN7n7otQDd6FczFgLdSqtcsAUxDkw6fzRH',\n    balance: '250000',\n    percent: 25,\n    value_usd: null,\n  },\n]\n\nconst mockTransfers = [\n  {\n    hash: 'E3FE6EA3D48F0C2B639448020EA4F03D4F4F8FFDB243A852A0F59177921B4879',\n    ledger: 12345,\n    action: 'send',\n    timestamp: 1609459200,\n    from: 'rN7n7otQDd6FczFgLdSqtcsAUxDkw6fzRH',\n    to: 'rLNaPoKeeBjZe2qs6x52yVPZpZ8td4dc6w',\n    amount: {\n      currency: TEST_MPT_ID,\n      issuer: TEST_ISSUER,\n      value: '100',\n    },\n  },\n]\n\ndescribe('MPT TablePicker container', () => {\n  beforeEach(() => {\n    moxios.install()\n    jest.clearAllMocks()\n  })\n\n  afterEach(() => {\n    moxios.uninstall()\n  })\n\n  const renderComponent = (\n    getAccountTransactionsImpl = () => new Promise(() => {}),\n    overrides: any = {},\n  ) => {\n    ;(getAccountTransactions as jest.Mock).mockImplementation(\n      getAccountTransactionsImpl,\n    )\n    return render(\n      <QueryClientProvider client={testQueryClient}>\n        <I18nextProvider i18n={i18n}>\n          <Router>\n            <TablePicker\n              mptIssuanceId={TEST_MPT_ID}\n              issuer={TEST_ISSUER}\n              assetScale={overrides.assetScale ?? 2}\n              holdersData={overrides.holdersData}\n              holdersPagination={\n                overrides.holdersPagination || {\n                  currentPage: 1,\n                  setCurrentPage: jest.fn(),\n                  pageSize: 20,\n                  total: 0,\n                }\n              }\n              holdersLoading={overrides.holdersLoading || false}\n              transfersData={overrides.transfersData || []}\n              transfersPagination={\n                overrides.transfersPagination || {\n                  currentPage: 1,\n                  setCurrentPage: jest.fn(),\n                  pageSize: 10,\n                  total: 0,\n                  hasMore: false,\n                  hasPrevPage: false,\n                }\n              }\n              transfersSorting={\n                overrides.transfersSorting || {\n                  sortField: 'timestamp',\n                  setSortField: jest.fn(),\n                  sortOrder: 'desc',\n                  setSortOrder: jest.fn(),\n                }\n              }\n              transfersLoading={overrides.transfersLoading || false}\n              onRefreshTransfers={overrides.onRefreshTransfers}\n            />\n          </Router>\n        </I18nextProvider>\n      </QueryClientProvider>,\n    )\n  }\n\n  it('renders transaction table container', () => {\n    const { container } = renderComponent()\n    expect(\n      container.querySelectorAll('.token-transaction-table-container'),\n    ).toHaveLength(1)\n  })\n\n  it('renders loader when fetching data', () => {\n    const { container } = renderComponent()\n    expect(container.querySelectorAll('.loader')).toHaveLength(1)\n  })\n\n  it('renders with holders data', () => {\n    const setCurrentPage = jest.fn()\n    const { container } = renderComponent(() => new Promise(() => {}), {\n      holdersData: mockHolders,\n      holdersPagination: {\n        currentPage: 1,\n        setCurrentPage,\n        pageSize: 20,\n        total: 100,\n      },\n    })\n    expect(\n      container.querySelectorAll('.token-transaction-table-container'),\n    ).toHaveLength(1)\n  })\n\n  it('renders with transfers data', () => {\n    const setSortField = jest.fn()\n    const setSortOrder = jest.fn()\n    const { container } = renderComponent(() => new Promise(() => {}), {\n      transfersData: mockTransfers,\n      transfersPagination: {\n        currentPage: 1,\n        setCurrentPage: jest.fn(),\n        pageSize: 10,\n        total: 100,\n        hasMore: true,\n        hasPrevPage: false,\n      },\n      transfersSorting: {\n        sortField: 'timestamp',\n        setSortField,\n        sortOrder: 'desc',\n        setSortOrder,\n      },\n    })\n    expect(\n      container.querySelectorAll('.token-transaction-table-container'),\n    ).toHaveLength(1)\n  })\n\n  it('renders with loading states', () => {\n    const { container } = renderComponent(() => new Promise(() => {}), {\n      holdersLoading: true,\n      transfersLoading: true,\n    })\n    expect(\n      container.querySelectorAll('.token-transaction-table-container'),\n    ).toHaveLength(1)\n  })\n})\n"
  },
  {
    "path": "src/containers/Token/MPT/test/api/holders.test.ts",
    "content": "import { getMPTHolders } from '../../../../../rippled/lib/rippled'\nimport { fetchAllMPTHolders } from '../../api/holders'\n\njest.mock('../../../../../rippled/lib/rippled')\njest.mock('../../../../shared/utils', () => ({\n  convertScaledPrice: (value: bigint, scale: number) => {\n    const str = value.toString()\n    if (scale === 0) return str\n    const paddedStr = str.padStart(scale + 1, '0')\n    const intPart = paddedStr.slice(0, -scale) || '0'\n    const decPart = paddedStr.slice(-scale)\n    return `${intPart}.${decPart}`\n  },\n}))\n\nconst mockGetMPTHolders = getMPTHolders as jest.Mock\n\ndescribe('MPT Holders API', () => {\n  const mockSocket = {}\n  const tokenId = '00000004A407AF5856CCF3C42619DAA925813FC955C72983'\n\n  beforeEach(() => {\n    jest.clearAllMocks()\n  })\n\n  describe('fetchAllMPTHolders', () => {\n    it('should fetch and format holders correctly', async () => {\n      mockGetMPTHolders.mockResolvedValueOnce({\n        mptokens: [\n          {\n            account: 'rAccount1',\n            flags: 0,\n            mpt_amount: '5000000',\n            mptoken_index: 'index1',\n          },\n          {\n            account: 'rAccount2',\n            flags: 0,\n            mpt_amount: '3000000',\n            mptoken_index: 'index2',\n          },\n        ],\n        marker: undefined,\n      })\n\n      const result = await fetchAllMPTHolders(\n        mockSocket,\n        tokenId,\n        '10000000',\n        6,\n      )\n\n      expect(result.totalHolders).toBe(2)\n      expect(result.holders).toHaveLength(2)\n      expect(result.holders[0].rank).toBe(1)\n      expect(result.holders[0].account).toBe('rAccount1')\n      expect(result.holders[0].balance).toBe('5.000000')\n      expect(result.holders[0].percent).toBe(50)\n      expect(result.holders[1].rank).toBe(2)\n      expect(result.holders[1].account).toBe('rAccount2')\n      expect(result.holders[1].percent).toBe(30)\n    })\n\n    it('should handle pagination with marker', async () => {\n      mockGetMPTHolders\n        .mockResolvedValueOnce({\n          mptokens: [\n            {\n              account: 'rAccount1',\n              flags: 0,\n              mpt_amount: '1000',\n              mptoken_index: 'index1',\n            },\n          ],\n          marker: 'page2',\n        })\n        .mockResolvedValueOnce({\n          mptokens: [\n            {\n              account: 'rAccount2',\n              flags: 0,\n              mpt_amount: '2000',\n              mptoken_index: 'index2',\n            },\n          ],\n          marker: undefined,\n        })\n\n      const result = await fetchAllMPTHolders(mockSocket, tokenId, '3000', 0)\n\n      expect(mockGetMPTHolders).toHaveBeenCalledTimes(2)\n      expect(result.totalHolders).toBe(2)\n      // Sorted by balance descending\n      expect(result.holders[0].account).toBe('rAccount2')\n      expect(result.holders[1].account).toBe('rAccount1')\n    })\n\n    it('should filter out zero balance holders', async () => {\n      mockGetMPTHolders.mockResolvedValueOnce({\n        mptokens: [\n          {\n            account: 'rAccount1',\n            flags: 0,\n            mpt_amount: '1000',\n            mptoken_index: 'index1',\n          },\n          {\n            account: 'rAccount2',\n            flags: 0,\n            mpt_amount: '0',\n            mptoken_index: 'index2',\n          },\n        ],\n        marker: undefined,\n      })\n\n      const result = await fetchAllMPTHolders(mockSocket, tokenId, '1000', 0)\n\n      expect(result.totalHolders).toBe(1)\n      expect(result.holders[0].account).toBe('rAccount1')\n    })\n\n    it('should handle empty response', async () => {\n      mockGetMPTHolders.mockResolvedValueOnce({\n        mptokens: [],\n        marker: undefined,\n      })\n\n      const result = await fetchAllMPTHolders(mockSocket, tokenId, '0', 0)\n\n      expect(result.totalHolders).toBe(0)\n      expect(result.holders).toEqual([])\n    })\n\n    it('should handle zero outstanding amount', async () => {\n      mockGetMPTHolders.mockResolvedValueOnce({\n        mptokens: [\n          {\n            account: 'rAccount1',\n            flags: 0,\n            mpt_amount: '1000',\n            mptoken_index: 'index1',\n          },\n        ],\n        marker: undefined,\n      })\n\n      const result = await fetchAllMPTHolders(mockSocket, tokenId, '0', 0)\n\n      expect(result.holders[0].percent).toBe(0)\n    })\n  })\n})\n"
  },
  {
    "path": "src/containers/Token/MPT/test/index.test.tsx",
    "content": "import { MPT } from '../index'\n\njest.mock('../api/holders', () => ({\n  fetchAllMPTHolders: jest.fn(),\n}))\n\njest.mock('../../../../rippled/lib/rippled', () => ({\n  getMPTIssuance: jest.fn(),\n}))\n\njest.mock('../../shared/services/transfersPagination', () => ({\n  transfersPaginationService: {\n    getTransfersPage: jest.fn(),\n    clearCache: jest.fn(),\n  },\n}))\n\ndescribe('MPT container', () => {\n  it('exports MPT component', () => {\n    expect(MPT).toBeDefined()\n    expect(typeof MPT).toBe('function')\n  })\n\n  it('MPT component is a valid React component', () => {\n    expect(MPT.length >= 0).toBe(true)\n  })\n})\n"
  },
  {
    "path": "src/containers/Token/shared/api/tokenTx.ts",
    "content": "import axios from 'axios'\nimport logger from '../../../../rippled/lib/logger'\n\nconst log = logger({ name: 'tokenTx' })\n\nconst buildPaginationAndSortParams = (\n  searchAfter?: any,\n  direction?: string,\n  sortField?: string,\n  sortOrder?: string,\n): URLSearchParams => {\n  const params = new URLSearchParams()\n\n  // Add search_after (cursor) if provided\n  if (searchAfter) {\n    params.append('search_after', JSON.stringify(searchAfter))\n  }\n\n  // Add direction if provided (e.g., 'prev' for backwards pagination)\n  if (direction) {\n    params.append('direction', direction)\n  }\n\n  // Add sort parameters if provided\n  if (sortField) {\n    params.append('sort_field', sortField)\n  }\n\n  if (sortOrder) {\n    params.append('sort_order', sortOrder)\n  }\n\n  return params\n}\n\nexport async function getDexTrades(\n  tokenId: string,\n  size?: number,\n  searchAfter?: any,\n  direction?: string,\n  sortField?: string,\n  sortOrder?: string,\n): Promise<any> {\n  try {\n    log.info('Fetching dex trades data from LOS')\n    const params = new URLSearchParams({\n      token: tokenId,\n      size: (size ?? 10).toString(),\n    })\n    const paginationParams = buildPaginationAndSortParams(\n      searchAfter,\n      direction,\n      sortField,\n      sortOrder,\n    )\n    paginationParams.forEach((value, key) => params.append(key, value))\n\n    return axios\n      .get(`${process.env.VITE_LOS_URL}/dex-trades?${params.toString()}`)\n      .then((resp) => resp.data)\n  } catch (error) {\n    log.error(`Failed to fetch dex trades for ${tokenId}: ${error}`)\n    throw error\n  }\n}\n\nexport async function getTransfers(\n  tokenId: string,\n  size?: number,\n  searchAfter?: any,\n  direction?: string,\n  sortField?: string,\n  sortOrder?: string,\n): Promise<any> {\n  try {\n    log.info('Fetching transfers data from LOS')\n    const params = new URLSearchParams({\n      token: tokenId,\n      is_transfer: 'true',\n      size: (size ?? 10).toString(),\n    })\n    const paginationParams = buildPaginationAndSortParams(\n      searchAfter,\n      direction,\n      sortField,\n      sortOrder,\n    )\n    paginationParams.forEach((value, key) => params.append(key, value))\n\n    return axios\n      .get(`${process.env.VITE_LOS_URL}/v2/transactions?${params.toString()}`)\n      .then((resp) => resp.data)\n  } catch (error) {\n    log.error(`Failed to fetch transfers for ${tokenId}: ${error}`)\n    throw error\n  }\n}\n"
  },
  {
    "path": "src/containers/Token/shared/components/TransfersTable/TransfersTable.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { useEffect, useRef } from 'react'\nimport { Link } from 'react-router'\nimport { Account } from '../../../../shared/components/Account'\nimport { Loader } from '../../../../shared/components/Loader'\nimport { EmptyStateMessage } from '../../../../shared/components/EmptyStateMessage'\nimport ArrowIcon from '../../../../shared/images/down_arrow.svg'\nimport './styles.scss'\nimport '../../../../shared/css/data-tables-mobile.scss'\nimport { Pagination } from '../../../../shared/components/Pagination'\nimport { ResponsiveTimestamp } from '../../../../shared/components/ResponsiveTimestamp'\nimport { shortenAccount, shortenTxHash } from '../../../../shared/utils'\nimport { parseAmount } from '../../../../shared/NumberFormattingUtils'\nimport { useLanguage } from '../../../../shared/hooks'\n\nexport interface LOSTransfer {\n  hash: string\n  ledger: number\n  action: string\n  timestamp: number\n  from: string\n  to: string\n  amount: {\n    currency: string\n    issuer: string\n    value: string\n  }\n}\n\ninterface TransfersTableProps {\n  transactions: LOSTransfer[]\n  isTransfersLoading?: boolean\n  totalTransfers: number\n  currentPage: number\n  onPageChange: (page: number) => void\n  pageSize: number\n  hasMore?: boolean\n  hasPrevPage?: boolean\n  sortField?: string\n  setSortField?: (field: string) => void\n  sortOrder?: 'asc' | 'desc'\n  setSortOrder?: (order: 'asc' | 'desc') => void\n  onRefresh?: () => void\n}\n\nexport const TransfersTable = ({\n  transactions,\n  isTransfersLoading = false,\n  totalTransfers,\n  currentPage,\n  onPageChange,\n  pageSize,\n  hasMore = false,\n  hasPrevPage = false,\n  sortField,\n  setSortField,\n  sortOrder,\n  setSortOrder,\n  onRefresh,\n}: TransfersTableProps) => {\n  const { t } = useTranslation()\n  const language = useLanguage()\n  const tableRef = useRef<HTMLTableElement>(null)\n\n  // Scroll to top of table when page changes\n  useEffect(() => {\n    if (!isTransfersLoading) {\n      // Use double requestAnimationFrame to ensure scroll happens after DOM updates\n      requestAnimationFrame(() => {\n        requestAnimationFrame(() => {\n          const tableContainer = tableRef.current?.closest('.tokens-table')\n          if (tableContainer) {\n            const rect = tableContainer.getBoundingClientRect()\n            const scrollTop = window.scrollY + rect.top - 200 // Scroll higher to show tabs and table headers\n            window.scrollTo({ top: scrollTop, behavior: 'smooth' })\n          }\n        })\n      })\n    }\n  }, [currentPage, isTransfersLoading])\n\n  const handleTimestampSort = () => {\n    if (setSortField && setSortOrder) {\n      if (sortField === 'timestamp') {\n        // Toggle sort order\n        setSortOrder(sortOrder === 'asc' ? 'desc' : 'asc')\n      } else {\n        // Set to timestamp field with desc order by default\n        setSortField('timestamp')\n        setSortOrder('desc')\n      }\n    }\n  }\n\n  const renderTransaction = (tx: LOSTransfer) => {\n    // Safely handle missing fields\n    const fromAddress = tx.from || '--'\n    const toAddress = tx.to || '--'\n    const hasValidAmount = tx.amount && tx.amount.currency && tx.amount.issuer\n\n    return (\n      <tr key={`${tx.hash}-${tx.ledger}`}>\n        <td className=\"tx-hash\">\n          <Link to={`/transactions/${tx.hash}`}>{shortenTxHash(tx.hash)}</Link>\n        </td>\n\n        <td className=\"tx-ledger\">\n          <Link to={`/ledgers/${tx.ledger}`}>{tx.ledger}</Link>\n        </td>\n        <td className=\"tx-action\">\n          <div className=\"action-pill\">{tx.action}</div>\n        </td>\n        <td className=\"tx-timestamp\">\n          <ResponsiveTimestamp timestamp={tx.timestamp} lang={language} />\n        </td>\n        <td className=\"tx-from\">\n          <span className=\"text-truncate\">\n            {fromAddress !== '--' ? (\n              <Account\n                account={fromAddress}\n                displayText={shortenAccount(fromAddress)}\n              />\n            ) : (\n              '--'\n            )}\n          </span>\n        </td>\n        <td className=\"tx-to\">\n          <span className=\"text-truncate\">\n            {toAddress !== '--' ? (\n              <Account\n                account={toAddress}\n                displayText={shortenAccount(toAddress)}\n              />\n            ) : (\n              '--'\n            )}\n          </span>\n        </td>\n        <td className=\"tx-amount\">\n          {hasValidAmount ? parseAmount(tx.amount.value) : '--'}\n        </td>\n      </tr>\n    )\n  }\n\n  return (\n    <div className=\"tokens-table\">\n      {isTransfersLoading && <Loader />}\n\n      {!isTransfersLoading && transactions && transactions.length > 0 && (\n        <>\n          <div className=\"notice-with-controls\">\n            <div className=\"data-notice\">{t('data_available_from_notice')}</div>\n            <button\n              type=\"button\"\n              className=\"refresh-button\"\n              onClick={onRefresh}\n              title={t('refresh_data')}\n            >\n              ↻\n            </button>\n          </div>\n          <div className=\"table-wrap\">\n            <table className=\"basic\" ref={tableRef}>\n              <thead>\n                <tr>\n                  <th className=\"tx-hash\">{t('tx_hash')}</th>\n                  <th className=\"tx-ledger\">{t('ledger')}</th>\n                  <th className=\"tx-action\">{t('action')}</th>\n                  <th\n                    className=\"tx-timestamp\"\n                    onClick={handleTimestampSort}\n                    style={{ cursor: 'pointer' }}\n                  >\n                    <span className=\"sort-header\">\n                      {t('timestamp')}\n                      {sortField === 'timestamp' && (\n                        <ArrowIcon\n                          className={`arrow ${sortOrder === 'asc' ? 'asc' : 'desc'}`}\n                        />\n                      )}\n                    </span>\n                  </th>\n                  <th className=\"tx-from\">{t('from')}</th>\n                  <th className=\"tx-to\">{t('to')}</th>\n                  <th className=\"tx-amount\">{t('amount')}</th>\n                </tr>\n              </thead>\n              <tbody>{transactions.map(renderTransaction)}</tbody>\n            </table>\n          </div>\n          {(hasMore || hasPrevPage) && (\n            <Pagination\n              currentPage={currentPage}\n              onPageChange={onPageChange}\n              totalItems={totalTransfers}\n              pageSize={pageSize}\n              scrollToTop={null}\n              showLastPage={!hasMore}\n            />\n          )}\n        </>\n      )}\n\n      {!isTransfersLoading && (!transactions || transactions.length === 0) && (\n        <EmptyStateMessage message={t('token_page.transfers_no_transfers')} />\n      )}\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/Token/shared/components/TransfersTable/styles.scss",
    "content": "@use '../../../../shared/css/variables' as *;\n@use '../../../../shared/css/table';\n@use '../../../../shared/css/data-tables-notice';\n\n// =============================================================================\n// TRANSFERS TABLE - Component-specific styles\n// =============================================================================\n\n// Add spacing between action and timestamp columns\n.tx-action {\n  padding-right: 16px;\n\n  @include for-size(phone-only) {\n    padding-right: 12px;\n  }\n}\n\n// Scoped styles for transfers table to prevent conflicts with other tables\n.tokens-table {\n  table.basic {\n    // Fix column widths for transfers table with equal spacing\n    .tx-hash {\n      width: 130px;\n      min-width: 130px;\n    }\n\n    .tx-ledger {\n      width: 110px;\n      min-width: 110px;\n    }\n\n    .tx-action {\n      width: 110px;\n      min-width: 110px;\n    }\n\n    .tx-timestamp {\n      width: 160px;\n      min-width: 160px;\n    }\n\n    .tx-from,\n    .tx-to {\n      width: 130px;\n      min-width: 130px;\n    }\n\n    .tx-amount {\n      width: 130px;\n      min-width: 130px;\n    }\n  }\n}\n"
  },
  {
    "path": "src/containers/Token/shared/constants.ts",
    "content": "/**\n * Pagination configuration for Token page tables\n */\nexport const PAGINATION_CONFIG = {\n  HOLDERS_PAGE_SIZE: 20,\n  TRANSFERS_PAGE_SIZE: 10,\n  DEX_TRADES_PAGE_SIZE: 10,\n} as const\n\n/**\n * Initial pagination state\n */\nexport const INITIAL_PAGE = 1\n"
  },
  {
    "path": "src/containers/Token/shared/hooks/useAccountTransactions.ts",
    "content": "import { useContext, useEffect, useMemo, useState } from 'react'\nimport { useInfiniteQuery } from 'react-query'\n\nimport { useAnalytics } from '../../../shared/analytics'\nimport SocketContext from '../../../shared/SocketContext'\nimport { getAccountTransactions } from '../../../../rippled'\n\n/**\n * Maximum number of automatic page fetches when no transactions match the filter.\n * This prevents excessive API calls for accounts with many non-matching transactions.\n */\nconst MAX_AUTO_FETCH_ATTEMPTS = 10\n\n/**\n * Delay between automatic fetch attempts in milliseconds.\n */\nconst AUTO_FETCH_DELAY_MS = 200\n\ninterface UseAccountTransactionsOptions {\n  account: string\n  /** Token identifier: currency code for IOU, MPT issuance ID for MPT */\n  tokenId: string\n  limit?: number\n}\n\n/**\n * Hook to fetch paginated account transactions filtered by token.\n *\n * Transactions are filtered client-side after fetching from rippled.\n * If a fetched page contains no matching transactions but more pages exist,\n * automatically fetches additional pages (up to MAX_AUTO_FETCH_ATTEMPTS)\n * to find matching transactions.\n */\nexport function useAccountTransactions({\n  account,\n  tokenId,\n  limit,\n}: UseAccountTransactionsOptions) {\n  const { trackException } = useAnalytics()\n  const rippledSocket = useContext(SocketContext)\n\n  const {\n    data,\n    error,\n    isFetching: isLoading,\n    fetchNextPage,\n    hasNextPage,\n  } = useInfiniteQuery<any, Error>(\n    ['fetchTransactions', account, tokenId],\n    ({ pageParam = '' }) =>\n      getAccountTransactions(\n        account,\n        tokenId,\n        pageParam,\n        limit,\n        rippledSocket,\n      ).catch((errorResponse: Error) => {\n        const errorLocation = `transactions ${account}.${tokenId} at ${pageParam}`\n        trackException(`${errorLocation} --- ${JSON.stringify(errorResponse)}`)\n        throw new Error('get_account_transactions_failed')\n      }),\n    {\n      getNextPageParam: (lastPage) => lastPage.marker,\n    },\n  )\n\n  // Check if the last fetched page returned 0 matching transactions\n  const lastPageTransactionCount = useMemo(() => {\n    const pages = data?.pages\n    if (!pages || pages.length === 0) {\n      return 0\n    }\n\n    return pages[pages.length - 1]?.transactions?.length || 0\n  }, [data])\n\n  const lastPageWasEmpty = lastPageTransactionCount === 0\n  const canAutoFetch = hasNextPage === true && !isLoading\n  const [autoFetchAttempts, setAutoFetchAttempts] = useState(0)\n  const hasRemainingAttempts = autoFetchAttempts < MAX_AUTO_FETCH_ATTEMPTS\n  // Auto-fetch if the last page returned no matching transactions\n  const shouldAutoFetch =\n    lastPageWasEmpty && canAutoFetch && hasRemainingAttempts\n\n  useEffect(() => {\n    if (!shouldAutoFetch) {\n      return undefined\n    }\n\n    const timer = setTimeout(() => {\n      setAutoFetchAttempts((prev) => prev + 1)\n      fetchNextPage()\n    }, AUTO_FETCH_DELAY_MS)\n\n    return () => clearTimeout(timer)\n  }, [shouldAutoFetch, fetchNextPage])\n\n  // Keep loading true while auto-fetch is pending to prevent UI flickering\n  // between \"Load More\" button and loading spinner\n  const loading = isLoading || shouldAutoFetch\n\n  return {\n    data,\n    error,\n    loading,\n    fetchNextPage,\n    hasNextPage: hasNextPage ?? false,\n  }\n}\n"
  },
  {
    "path": "src/containers/Token/shared/hooks/usePaginationState.ts",
    "content": "import { useState } from 'react'\n\n/**\n * Pagination state for a single table\n */\nexport interface TablePaginationState {\n  currentPage: number\n  setCurrentPage: (page: number) => void\n  pageSize: number\n  total: number\n  hasMore?: boolean\n  hasPrevPage?: boolean\n}\n\n/**\n * Custom hook to manage pagination state for a table\n */\nexport const usePaginationState = (\n  pageSize: number,\n  total: number = 0,\n  hasMore: boolean | undefined = undefined,\n  hasPrevPage: boolean | undefined = undefined,\n): TablePaginationState => {\n  const [currentPage, setCurrentPage] = useState(1)\n\n  return {\n    currentPage,\n    setCurrentPage,\n    pageSize,\n    total,\n    hasMore,\n    hasPrevPage,\n  }\n}\n"
  },
  {
    "path": "src/containers/Token/shared/hooks/useSortingState.ts",
    "content": "import { useState } from 'react'\n\n/**\n * Sorting state for a single table\n */\nexport interface TableSortingState {\n  sortField?: string\n  setSortField?: (field: string) => void\n  sortOrder?: 'asc' | 'desc'\n  setSortOrder?: (order: 'asc' | 'desc') => void\n}\n\n/**\n * Custom hook to manage sorting state for a table\n */\nexport const useSortingState = (\n  initialSortField: string = 'timestamp',\n  initialSortOrder: 'asc' | 'desc' = 'desc',\n): TableSortingState => {\n  const [sortField, setSortField] = useState(initialSortField)\n  const [sortOrder, setSortOrder] = useState<'asc' | 'desc'>(initialSortOrder)\n\n  return {\n    sortField,\n    setSortField,\n    sortOrder,\n    setSortOrder,\n  }\n}\n"
  },
  {
    "path": "src/containers/Token/shared/services/transfersPagination.ts",
    "content": "import { getTransfers } from '../api/tokenTx'\nimport { LOSTransfer } from '../components/TransfersTable/TransfersTable'\nimport {\n  CursorPaginationService,\n  PaginationResult,\n} from '../../../shared/services/CursorPaginationService'\n\nexport interface TransfersPaginationResult {\n  transfers: LOSTransfer[]\n  totalTransfers: number\n  hasMore: boolean\n  isLoading: boolean\n}\n\nconst formatTransfer = (transaction: any): LOSTransfer => ({\n  hash: transaction.hash,\n  ledger: transaction.ledger_index,\n  action: transaction.type,\n  timestamp: transaction.timestamp,\n  from: transaction.account,\n  to: transaction.destination,\n  amount: transaction.amount,\n})\n\nexport const paginationService = new CursorPaginationService<LOSTransfer>({\n  fetchFn: getTransfers,\n  formatFn: formatTransfer,\n  batchSize: 200,\n  pageSize: 10,\n})\n\nfunction toResult(\n  result: PaginationResult<LOSTransfer>,\n): TransfersPaginationResult {\n  return {\n    transfers: result.items,\n    totalTransfers: result.totalItems,\n    hasMore: result.hasMore,\n    isLoading: result.isLoading,\n  }\n}\n\nexport const transfersPaginationService = {\n  async getTransfersPage(\n    tokenId: string,\n    page: number,\n    pageSize?: number,\n    sortField?: string,\n    sortOrder?: string,\n  ): Promise<TransfersPaginationResult> {\n    const result = await paginationService.getPage(\n      tokenId,\n      page,\n      pageSize,\n      sortField,\n      sortOrder,\n    )\n    return toResult(result)\n  },\n\n  clearCache(tokenId?: string, sortField?: string, sortOrder?: string): void {\n    paginationService.clearCache(tokenId, sortField, sortOrder)\n  },\n\n  getCachedTransfersCount(\n    tokenId: string,\n    sortField?: string,\n    sortOrder?: string,\n  ): number {\n    return paginationService.getCachedItemCount(tokenId, sortField, sortOrder)\n  },\n}\n"
  },
  {
    "path": "src/containers/Token/shared/styles.scss",
    "content": "@use '../../shared/css/variables' as *;\n\n// =============================================================================\n// TOKEN PAGE - Shared styles for IOU and MPT token pages\n// =============================================================================\n\n// Page container - used by both IOU and MPT token pages\n.token-page {\n  width: 100%;\n  padding: 0 16px;\n\n  @include for-size(tablet-portrait-up) {\n    padding: 0 24px;\n  }\n\n  @include for-size(desktop-up) {\n    padding: 0 32px;\n  }\n\n  @include for-size(big-desktop-up) {\n    padding: 0 48px;\n  }\n\n  .loader {\n    min-height: 100px;\n  }\n\n  .section {\n    margin-top: 24px;\n\n    @include for-size(tablet-portrait-up) {\n      margin-top: 32px;\n    }\n\n    @include for-size(desktop-up) {\n      margin-top: 40px;\n    }\n  }\n\n  // Issuer name styling (scoped here to avoid conflicts with /tokens list page)\n  .issuer-name {\n    margin: 0;\n    font-size: 24px;\n    font-style: normal;\n    line-height: 112.5%;\n    text-transform: lowercase;\n    @include bold;\n\n    @include for-size(tablet-portrait-up) {\n      font-size: 32px;\n    }\n\n    @include for-size(tablet-landscape-up) {\n      font-size: 42px;\n    }\n\n    &::first-letter {\n      text-transform: uppercase;\n    }\n  }\n}\n\n// =============================================================================\n// TOKEN HEADER - Shared header styles\n// =============================================================================\n\n// Base header wrapper\n.token-header {\n  margin-top: 40px;\n  margin-bottom: 16px;\n\n  @include for-size(tablet-portrait-up) {\n    margin-top: 60px;\n  }\n\n  @include for-size(desktop-up) {\n    margin-top: 80px;\n  }\n}\n\n// Token indicator and category pill\n.token-indicator {\n  display: flex;\n  flex-direction: row;\n  align-items: center;\n  margin-bottom: 12px;\n  gap: 12px;\n\n  .token-label {\n    color: $black-40;\n    font-size: 14px;\n    font-style: normal;\n    font-weight: 600;\n    line-height: 150%;\n    text-transform: uppercase;\n  }\n\n  .category-pill {\n    border-radius: 100px;\n\n    .category-text {\n      padding: 4px 12px;\n      color: $white;\n      font-size: 12px;\n      font-style: normal;\n      line-height: 150%;\n      text-transform: uppercase;\n      @include semibold;\n    }\n  }\n}\n\n// Box header layout\n.box-header {\n  display: flex;\n  flex-direction: column;\n  align-items: flex-start;\n  gap: 16px;\n  text-align: left;\n\n  @include for-size(tablet-portrait-up) {\n    flex-direction: row;\n    align-items: center;\n    justify-content: space-between;\n    gap: 16px;\n  }\n\n  @include for-size(desktop-up) {\n    gap: 24px;\n  }\n}\n\n// Token info group (logo + name/ticker + issuer)\n.token-info-group {\n  display: flex;\n  flex-direction: column;\n  align-items: flex-start;\n  gap: 8px;\n\n  @include for-size(tablet-portrait-up) {\n    flex-flow: row wrap;\n    align-items: center;\n    gap: 1px;\n  }\n\n  @include for-size(desktop-up) {\n    gap: 1px;\n  }\n\n  span {\n    margin: 0;\n    color: $white;\n    font-size: 24px;\n    @include bold;\n\n    @include for-size(tablet-portrait-up) {\n      font-size: 32px;\n    }\n\n    @include for-size(tablet-landscape-up) {\n      font-size: 42px;\n    }\n  }\n\n  img {\n    width: 24px;\n    height: 24px;\n    object-fit: contain;\n  }\n}\n\n// Token logo\n.token-logo {\n  width: 32px;\n  min-width: 32px;\n  height: 32px;\n  min-height: 32px;\n  border-radius: 32px;\n  margin-right: 8px;\n  margin-left: 0;\n\n  @include for-size(tablet-portrait-up) {\n    width: 40px;\n    min-width: 40px;\n    height: 40px;\n    min-height: 40px;\n    border-radius: 40px;\n    margin-right: 10px;\n  }\n\n  @include for-size(tablet-landscape-up) {\n    width: 48px;\n    min-width: 48px;\n    height: 48px;\n    min-height: 48px;\n    border-radius: 48px;\n  }\n\n  &.no-logo {\n    background-color: $black-50;\n  }\n}\n\n// Token issuer wrapper\n.token-issuer-wrap {\n  display: flex;\n  align-items: center;\n  margin-left: 2px;\n  font-size: 24px;\n  font-style: normal;\n  line-height: 112.5%;\n  @include bold;\n\n  @include for-size(tablet-portrait-up) {\n    margin-left: 3px;\n    font-size: 32px;\n  }\n\n  @include for-size(tablet-landscape-up) {\n    margin-left: 5px;\n    font-size: 42px;\n  }\n}\n\n// Box content area\n.box-content {\n  min-height: 100px;\n  padding-bottom: 20px;\n}\n\n// =============================================================================\n// HEADER BOXES - Info boxes in header area\n// =============================================================================\n\n.header-boxes {\n  display: flex;\n  width: 100%;\n  flex-direction: column;\n  margin-top: 32px;\n  gap: 24px;\n\n  @include for-size(tablet-landscape-up) {\n    flex-flow: row wrap;\n    justify-content: flex-start;\n    margin-top: 48px;\n    gap: 24px;\n  }\n\n  @include for-size(desktop-up) {\n    margin-top: 64px;\n    gap: 24px;\n  }\n}\n\n.header-box {\n  display: flex;\n  overflow: visible;\n  width: 100%;\n  min-height: 0;\n  flex-direction: column;\n  flex-shrink: 0;\n  align-items: flex-start;\n  gap: 8px;\n\n  @include for-size(tablet-landscape-up) {\n    width: calc(50% - 12px);\n    max-width: 382px;\n    flex: 0 0 calc(50% - 12px);\n  }\n\n  @include for-size(desktop-up) {\n    width: 382px;\n    max-width: 382px;\n    flex: 0 0 382px;\n  }\n}\n\n.header-box-title {\n  margin-bottom: 21px;\n  color: $white;\n  font-size: 20px;\n  line-height: 125%;\n  @include bold;\n}\n\n.header-box-contents {\n  width: 100%;\n  box-sizing: border-box;\n  padding: 16px;\n  border: 1px solid $black-70;\n  border-radius: 8px;\n}\n\n.header-box-item {\n  display: flex;\n  flex-direction: column;\n  margin-bottom: 12px;\n  gap: 4px;\n\n  &:last-child {\n    margin-bottom: 0;\n  }\n\n  @include for-size(tablet-portrait-up) {\n    flex-direction: row;\n    margin-bottom: 8px;\n    gap: 16px;\n  }\n\n  @include for-size(desktop-up) {\n    gap: 32px;\n  }\n\n  .item-name {\n    width: 100%;\n    color: $black-40;\n    font-size: 12px;\n    font-style: normal;\n    line-height: 150%;\n    text-transform: uppercase;\n    @include semibold;\n\n    @include for-size(tablet-portrait-up) {\n      width: 140px;\n      font-size: 13px;\n    }\n\n    @include for-size(desktop-up) {\n      width: 180px;\n      font-size: 14px;\n    }\n  }\n\n  .item-value {\n    width: 100%;\n    color: $white;\n    font-size: 14px;\n    font-style: normal;\n    line-height: 150%;\n    @include regular;\n\n    @include for-size(tablet-portrait-up) {\n      width: 120px;\n    }\n\n    @include for-size(desktop-up) {\n      width: 130px;\n    }\n  }\n\n  .account-link {\n    color: $green-30;\n    text-decoration: none;\n\n    &:hover {\n      color: $green-50;\n    }\n  }\n}\n\n// =============================================================================\n// LOADING SPINNER\n// =============================================================================\n\n@keyframes spin {\n  from {\n    transform: rotate(0deg);\n  }\n\n  to {\n    transform: rotate(360deg);\n  }\n}\n\n.loading-spinner {\n  display: inline-block;\n  width: 10px;\n  height: 10px;\n  border: 1px solid rgb(255 255 255 / 30%);\n  border-radius: 50%;\n  border-top-color: #fff;\n  animation: spin 1s ease-in-out infinite;\n}\n\n// =============================================================================\n// HEADER ACTIONS - Container for domain links\n// =============================================================================\n\n.header-actions {\n  display: flex;\n  flex-direction: column;\n  align-items: flex-start;\n  gap: 8px;\n\n  @include for-size(tablet-portrait-up) {\n    flex-direction: row;\n    align-items: center;\n    gap: 12px;\n  }\n}\n\n.domain-link-container {\n  position: relative;\n  display: flex;\n  width: fit-content;\n  align-items: center;\n  justify-content: space-between;\n  padding: 8px 12px;\n  border: 1px solid $green-30;\n  border-radius: 8px;\n  background: transparent;\n  color: $green-30;\n  font-size: 12px;\n  gap: 8px;\n  transition: all 0.2s ease;\n\n  @include for-size(tablet-portrait-up) {\n    padding: 8px 16px;\n    font-size: 14px;\n  }\n\n  &:hover {\n    border-color: $green-50;\n    background-color: rgba($green-30, 0.1);\n  }\n}\n\n.domain-link-icon {\n  width: 24px;\n  height: 24px;\n  flex-shrink: 0;\n  color: $green-30;\n}\n\n.domain-link {\n  display: flex;\n  align-items: center;\n  color: $green-30;\n  font-size: inherit;\n  gap: 4px;\n  text-decoration: none;\n  transition: color 0.2s ease;\n\n  &:hover {\n    color: $green-50;\n  }\n}\n\n// =============================================================================\n// TABLE PICKER - Tabs for switching between tables\n// =============================================================================\n\n.tx-table-picker {\n  display: flex;\n  flex-direction: row;\n  margin-bottom: 16px;\n  gap: 8px;\n  -webkit-overflow-scrolling: touch;\n  overflow-x: auto;\n\n  // Custom scrollbar styling for mobile\n  &::-webkit-scrollbar {\n    height: 4px;\n  }\n\n  &::-webkit-scrollbar-track {\n    background: transparent;\n  }\n\n  &::-webkit-scrollbar-thumb {\n    border-radius: 2px;\n    background: $black-60;\n  }\n\n  &::-webkit-scrollbar-thumb:hover {\n    background: $black-50;\n  }\n\n  // Hide scrollbar on mobile for cleaner look\n  @include for-size(phone-only) {\n    -ms-overflow-style: none;\n    scrollbar-width: none;\n\n    &::-webkit-scrollbar {\n      display: none;\n    }\n  }\n\n  @include for-size(tablet-portrait-up) {\n    margin-bottom: 20px;\n    gap: 12px;\n  }\n\n  @include for-size(desktop-up) {\n    margin-bottom: 24px;\n    gap: 16px;\n  }\n\n  // Override shared tabs styles for tx-table-picker\n  .tabs {\n    display: flex;\n    flex-direction: row;\n    border-top: none;\n    margin: 0;\n    font-size: 14px;\n    gap: inherit;\n\n    button,\n    a {\n      all: unset;\n      padding-top: 16px;\n      border: none;\n      border-top: 3px solid transparent;\n      margin-right: 8px;\n      background-color: none;\n      color: $black-40;\n      cursor: pointer;\n      font-size: 12px;\n      font-style: normal;\n      font-weight: 500;\n      line-height: 150%;\n      white-space: nowrap;\n      @include regular;\n\n      @include for-size(tablet-portrait-up) {\n        padding-top: 18px;\n        margin-right: 12px;\n        font-size: 13px;\n      }\n\n      @include for-size(desktop-up) {\n        padding-top: 21px;\n        margin-right: 16px;\n        font-size: 14px;\n      }\n\n      &.selected {\n        padding-top: 16px;\n        border-top: 3px solid $white;\n        color: $white;\n\n        @include for-size(tablet-portrait-up) {\n          padding-top: 18px;\n        }\n\n        @include for-size(desktop-up) {\n          padding-top: 21px;\n        }\n      }\n\n      &.selected,\n      &:hover {\n        color: $white;\n        @include regular;\n      }\n    }\n  }\n}\n\n.full-width-line {\n  width: 100%;\n  border: none;\n  border-top: 1px solid $black-70;\n  margin-bottom: 0;\n  color: $black-70;\n}\n\n// =============================================================================\n// ACTION PILL - Used in tables for action labels\n// =============================================================================\n\n.action-pill {\n  display: flex;\n  width: fit-content;\n  align-items: center;\n  justify-content: center;\n  padding: 3px 8px;\n  border: 1px solid $green-60;\n  border-radius: 100px;\n  background-color: $green-70;\n  color: $white;\n  font-size: 12px;\n  text-transform: uppercase;\n  white-space: nowrap;\n  @include semibold;\n}\n"
  },
  {
    "path": "src/containers/Token/shared/test/api/tokenTx.test.ts",
    "content": "import axios from 'axios'\nimport { getDexTrades, getTransfers } from '../../api/tokenTx'\n\njest.mock('axios')\n\ndescribe('Token Transactions API', () => {\n  const mockAxios = axios as jest.Mocked<typeof axios>\n\n  beforeAll(() => {\n    jest.spyOn(console, 'error').mockImplementation(() => {})\n  })\n\n  afterAll(() => {\n    jest.restoreAllMocks()\n  })\n\n  beforeEach(() => {\n    jest.clearAllMocks()\n  })\n\n  describe('getDexTrades', () => {\n    const mockDexTradesResponse = {\n      results: [\n        {\n          tx_hash: 'tx1',\n          timestamp: 1234567890,\n          from: 'rABC',\n          to: 'rDEF',\n          type: 'orderBook',\n          amount_in: { currency: 'USD', issuer: 'rIssuer', value: '100' },\n          amount_out: { currency: 'XRP', issuer: null, value: '50' },\n        },\n      ],\n      next_cursor: [1234567890, 'tx1'],\n    }\n\n    it('should fetch dex trades from /dex-trades endpoint with default parameters', async () => {\n      mockAxios.get.mockResolvedValueOnce({ data: mockDexTradesResponse })\n\n      const result = await getDexTrades('USD.rIssuer123')\n\n      expect(result).toEqual(mockDexTradesResponse)\n      expect(mockAxios.get).toHaveBeenCalledWith(\n        expect.stringContaining('/dex-trades?'),\n      )\n      expect(mockAxios.get).toHaveBeenCalledWith(\n        expect.stringContaining('token=USD.rIssuer123'),\n      )\n      expect(mockAxios.get).toHaveBeenCalledWith(\n        expect.stringContaining('size=10'),\n      )\n    })\n\n    it('should fetch dex trades with custom size', async () => {\n      mockAxios.get.mockResolvedValueOnce({ data: mockDexTradesResponse })\n\n      await getDexTrades('USD.rIssuer123', 50)\n\n      expect(mockAxios.get).toHaveBeenCalledWith(\n        expect.stringContaining('size=50'),\n      )\n    })\n\n    it('should include search_after parameter when provided', async () => {\n      mockAxios.get.mockResolvedValueOnce({ data: mockDexTradesResponse })\n\n      const searchAfter = ['value1', 'value2']\n      await getDexTrades('USD.rIssuer123', 10, searchAfter)\n\n      expect(mockAxios.get).toHaveBeenCalledWith(\n        expect.stringContaining('search_after='),\n      )\n    })\n\n    it('should include direction parameter when provided', async () => {\n      mockAxios.get.mockResolvedValueOnce({ data: mockDexTradesResponse })\n\n      await getDexTrades('USD.rIssuer123', 10, undefined, 'prev')\n\n      expect(mockAxios.get).toHaveBeenCalledWith(\n        expect.stringContaining('direction=prev'),\n      )\n    })\n\n    it('should include sort parameters when provided', async () => {\n      mockAxios.get.mockResolvedValueOnce({ data: mockDexTradesResponse })\n\n      await getDexTrades(\n        'USD.rIssuer123',\n        10,\n        undefined,\n        undefined,\n        'timestamp',\n        'desc',\n      )\n\n      expect(mockAxios.get).toHaveBeenCalledWith(\n        expect.stringContaining('sort_field=timestamp'),\n      )\n      expect(mockAxios.get).toHaveBeenCalledWith(\n        expect.stringContaining('sort_order=desc'),\n      )\n    })\n\n    it('should throw error on API failure', async () => {\n      const error = new Error('Network error')\n      mockAxios.get.mockRejectedValueOnce(error)\n\n      await expect(getDexTrades('USD.rIssuer123')).rejects.toThrow(\n        'Network error',\n      )\n    })\n\n    it('should handle empty results list', async () => {\n      const emptyResponse = {\n        results: [],\n        next_cursor: null,\n      }\n\n      mockAxios.get.mockResolvedValueOnce({ data: emptyResponse })\n\n      const result = await getDexTrades('USD.rIssuer123')\n\n      expect(result.results).toEqual([])\n    })\n  })\n\n  describe('getTransfers', () => {\n    const mockTransfersResponse = {\n      results: [\n        {\n          hash: 'tx1',\n          type: 'Payment',\n          timestamp: 1234567890,\n          account: 'rABC',\n          destination: 'rDEF',\n          amount: { currency: 'USD', issuer: 'rIssuer', value: '100' },\n          is_transfer: true,\n        },\n      ],\n      next_cursor: [1234567890, 'tx1'],\n    }\n\n    it('should fetch transfers from /v2/transactions endpoint with default parameters', async () => {\n      mockAxios.get.mockResolvedValueOnce({ data: mockTransfersResponse })\n\n      const result = await getTransfers('USD.rIssuer123')\n\n      expect(result).toEqual(mockTransfersResponse)\n      expect(mockAxios.get).toHaveBeenCalledWith(\n        expect.stringContaining('/v2/transactions?'),\n      )\n      expect(mockAxios.get).toHaveBeenCalledWith(\n        expect.stringContaining('token=USD.rIssuer123'),\n      )\n      expect(mockAxios.get).toHaveBeenCalledWith(\n        expect.stringContaining('is_transfer=true'),\n      )\n      expect(mockAxios.get).toHaveBeenCalledWith(\n        expect.stringContaining('size=10'),\n      )\n    })\n\n    it('should fetch transfers with custom size', async () => {\n      mockAxios.get.mockResolvedValueOnce({ data: mockTransfersResponse })\n\n      await getTransfers('USD.rIssuer123', 25)\n\n      expect(mockAxios.get).toHaveBeenCalledWith(\n        expect.stringContaining('size=25'),\n      )\n    })\n\n    it('should include all optional parameters', async () => {\n      mockAxios.get.mockResolvedValueOnce({ data: mockTransfersResponse })\n\n      const searchAfter = ['val1', 'val2']\n      await getTransfers('EUR.rEUR', 20, searchAfter, 'next', 'amount', 'asc')\n\n      expect(mockAxios.get).toHaveBeenCalledWith(\n        expect.stringContaining('token=EUR.rEUR'),\n      )\n      expect(mockAxios.get).toHaveBeenCalledWith(\n        expect.stringContaining('is_transfer=true'),\n      )\n      expect(mockAxios.get).toHaveBeenCalledWith(\n        expect.stringContaining('size=20'),\n      )\n      expect(mockAxios.get).toHaveBeenCalledWith(\n        expect.stringContaining('direction=next'),\n      )\n      expect(mockAxios.get).toHaveBeenCalledWith(\n        expect.stringContaining('sort_field=amount'),\n      )\n      expect(mockAxios.get).toHaveBeenCalledWith(\n        expect.stringContaining('sort_order=asc'),\n      )\n    })\n\n    it('should throw error on API failure', async () => {\n      const error = new Error('Network error')\n      mockAxios.get.mockRejectedValueOnce(error)\n\n      await expect(getTransfers('USD.rIssuer123')).rejects.toThrow(\n        'Network error',\n      )\n    })\n\n    it('should handle empty results list', async () => {\n      const emptyResponse = {\n        results: [],\n        next_cursor: null,\n      }\n\n      mockAxios.get.mockResolvedValueOnce({ data: emptyResponse })\n\n      const result = await getTransfers('USD.rIssuer123')\n\n      expect(result.results).toEqual([])\n    })\n\n    it('should handle timeout errors for dex trades', async () => {\n      const timeoutError = new Error('timeout of 5000ms exceeded')\n      mockAxios.get.mockRejectedValueOnce(timeoutError)\n\n      await expect(getDexTrades('USD.rIssuer123')).rejects.toThrow('timeout')\n    })\n\n    it('should handle timeout errors for transfers', async () => {\n      const timeoutError = new Error('timeout of 5000ms exceeded')\n      mockAxios.get.mockRejectedValueOnce(timeoutError)\n\n      await expect(getTransfers('USD.rIssuer123')).rejects.toThrow('timeout')\n    })\n\n    it('should handle server errors for dex trades', async () => {\n      const serverError = new Error('500 Internal Server Error')\n      mockAxios.get.mockRejectedValueOnce(serverError)\n\n      await expect(getDexTrades('USD.rIssuer123')).rejects.toThrow()\n    })\n\n    it('should handle server errors for transfers', async () => {\n      const serverError = new Error('500 Internal Server Error')\n      mockAxios.get.mockRejectedValueOnce(serverError)\n\n      await expect(getTransfers('USD.rIssuer123')).rejects.toThrow()\n    })\n\n    it('should handle large results lists', async () => {\n      const largeResponse = {\n        results: Array.from({ length: 1000 }, (_, i) => ({\n          hash: `tx${i}`,\n          type: 'Payment',\n          timestamp: 1234567890 + i,\n          account: 'rABC',\n          destination: 'rDEF',\n          amount: { currency: 'USD', issuer: 'rIssuer', value: '100' },\n          is_transfer: true,\n        })),\n        next_cursor: ['value1', 'value2'],\n      }\n\n      mockAxios.get.mockResolvedValueOnce({ data: largeResponse })\n\n      const result = await getTransfers('USD.rIssuer123')\n\n      expect(result.results.length).toBe(1000)\n    })\n\n    it('should handle all optional parameters together', async () => {\n      mockAxios.get.mockResolvedValueOnce({ data: mockTransfersResponse })\n\n      const searchAfter = ['val1', 'val2']\n      await getTransfers('EUR.rEUR', 50, searchAfter, 'prev', 'amount', 'asc')\n\n      expect(mockAxios.get).toHaveBeenCalledWith(\n        expect.stringContaining('token=EUR.rEUR'),\n      )\n      expect(mockAxios.get).toHaveBeenCalledWith(\n        expect.stringContaining('size=50'),\n      )\n      expect(mockAxios.get).toHaveBeenCalledWith(\n        expect.stringContaining('direction=prev'),\n      )\n      expect(mockAxios.get).toHaveBeenCalledWith(\n        expect.stringContaining('sort_field=amount'),\n      )\n      expect(mockAxios.get).toHaveBeenCalledWith(\n        expect.stringContaining('sort_order=asc'),\n      )\n    })\n\n    it('should handle null search_after parameter', async () => {\n      mockAxios.get.mockResolvedValueOnce({ data: mockTransfersResponse })\n\n      await getTransfers('USD.rIssuer123', 10, null)\n\n      expect(mockAxios.get).toHaveBeenCalled()\n    })\n\n    it('should handle undefined optional parameters', async () => {\n      mockAxios.get.mockResolvedValueOnce({ data: mockTransfersResponse })\n\n      await getTransfers(\n        'USD.rIssuer123',\n        10,\n        undefined,\n        undefined,\n        undefined,\n        undefined,\n      )\n\n      expect(mockAxios.get).toHaveBeenCalled()\n    })\n  })\n})\n"
  },
  {
    "path": "src/containers/Token/shared/test/components/ResponsiveTimestamp/ResponsiveTimestamp.test.tsx",
    "content": "import { render } from '@testing-library/react'\nimport { ResponsiveTimestamp } from '../../../../../shared/components/ResponsiveTimestamp/ResponsiveTimestamp'\n\ndescribe('ResponsiveTimestamp Component', () => {\n  it('should render without crashing', () => {\n    const { container } = render(\n      <ResponsiveTimestamp timestamp={0} lang=\"en-US\" />,\n    )\n    const desktopTimestamp = container.querySelector('.desktop-timestamp')\n    const mobileTimestamp = container.querySelector('.mobile-timestamp')\n\n    expect(desktopTimestamp).toBeInTheDocument()\n    expect(mobileTimestamp).toBeInTheDocument()\n    expect(desktopTimestamp?.textContent).toMatch(\n      /\\d{1,2}\\/\\d{1,2}\\/\\d{4}.*\\d{2}:\\d{2}:\\d{2}/,\n    )\n    expect(mobileTimestamp?.textContent).toMatch(\n      /\\d{1,2}\\/\\d{1,2}\\/\\d{4}.*\\d{2}:\\d{2}/,\n    )\n  })\n\n  it('should render both desktop and mobile formats', () => {\n    const { container } = render(\n      <ResponsiveTimestamp timestamp={0} lang=\"en-US\" />,\n    )\n    const desktopSpan = container.querySelector('.desktop-timestamp')\n    const mobileSpan = container.querySelector('.mobile-timestamp')\n\n    expect(desktopSpan).toBeInTheDocument()\n    expect(mobileSpan).toBeInTheDocument()\n  })\n\n  it('should display desktop format with seconds', () => {\n    const { container } = render(\n      <ResponsiveTimestamp timestamp={0} lang=\"en-US\" />,\n    )\n    const desktopSpan = container.querySelector('.desktop-timestamp')\n\n    // Desktop format should include seconds\n    expect(desktopSpan?.textContent).toMatch(/\\d{2}:\\d{2}:\\d{2}/)\n  })\n\n  it('should display mobile format without seconds', () => {\n    const { container } = render(\n      <ResponsiveTimestamp timestamp={0} lang=\"en-US\" />,\n    )\n    const mobileSpan = container.querySelector('.mobile-timestamp')\n\n    // Mobile format should not include seconds (24-hour format)\n    expect(mobileSpan?.textContent).toMatch(/\\d{2}:\\d{2}/)\n  })\n\n  it('should handle different timestamps', () => {\n    const { container: container1 } = render(\n      <ResponsiveTimestamp timestamp={86400} lang=\"en-US\" />,\n    )\n    const { container: container2 } = render(\n      <ResponsiveTimestamp timestamp={172800} lang=\"en-US\" />,\n    )\n\n    const desktop1 = container1.querySelector('.desktop-timestamp')?.textContent\n    const desktop2 = container2.querySelector('.desktop-timestamp')?.textContent\n\n    expect(desktop1).not.toBe(desktop2)\n  })\n\n  it('should support different languages', () => {\n    const { container: containerUS } = render(\n      <ResponsiveTimestamp timestamp={0} lang=\"en-US\" />,\n    )\n    const { container: containerDE } = render(\n      <ResponsiveTimestamp timestamp={0} lang=\"de-DE\" />,\n    )\n\n    const desktopUS =\n      containerUS.querySelector('.desktop-timestamp')?.textContent\n    const desktopDE =\n      containerDE.querySelector('.desktop-timestamp')?.textContent\n\n    // Different locales should produce different formatting\n    expect(desktopUS).toBeDefined()\n    expect(desktopDE).toBeDefined()\n  })\n\n  it('should render with responsive-timestamp class', () => {\n    const { container } = render(\n      <ResponsiveTimestamp timestamp={0} lang=\"en-US\" />,\n    )\n    const wrapper = container.querySelector('.responsive-timestamp')\n\n    expect(wrapper).toBeInTheDocument()\n  })\n\n  it('should handle large timestamps', () => {\n    const largeTimestamp = 1000000000 // Far in the future\n    const { container } = render(\n      <ResponsiveTimestamp timestamp={largeTimestamp} lang=\"en-US\" />,\n    )\n\n    const desktopSpan = container.querySelector('.desktop-timestamp')\n    expect(desktopSpan?.textContent).toBeDefined()\n  })\n\n  it('should format date with 2-digit month and day', () => {\n    const { container } = render(\n      <ResponsiveTimestamp timestamp={0} lang=\"en-US\" />,\n    )\n    const desktopSpan = container.querySelector('.desktop-timestamp')\n\n    // Should contain date in format with 2-digit month and day\n    expect(desktopSpan?.textContent).toMatch(/\\d{2}\\/\\d{2}\\/\\d{4}/)\n  })\n\n  it('should format time with 2-digit hours and minutes', () => {\n    const { container } = render(\n      <ResponsiveTimestamp timestamp={0} lang=\"en-US\" />,\n    )\n    const mobileSpan = container.querySelector('.mobile-timestamp')\n\n    // Should contain time in 24-hour format with 2-digit hours and minutes\n    expect(mobileSpan?.textContent).toMatch(/\\d{2}:\\d{2}/)\n  })\n\n  it('should handle en-GB locale', () => {\n    const { container } = render(\n      <ResponsiveTimestamp timestamp={0} lang=\"en-GB\" />,\n    )\n    const desktopSpan = container.querySelector('.desktop-timestamp')\n\n    expect(desktopSpan?.textContent).toBeDefined()\n  })\n\n  it('should handle fr-FR locale', () => {\n    const { container } = render(\n      <ResponsiveTimestamp timestamp={0} lang=\"fr-FR\" />,\n    )\n    const desktopSpan = container.querySelector('.desktop-timestamp')\n\n    expect(desktopSpan?.textContent).toBeDefined()\n  })\n\n  it('should render both spans with content', () => {\n    const { container } = render(\n      <ResponsiveTimestamp timestamp={0} lang=\"en-US\" />,\n    )\n    const desktopSpan = container.querySelector('.desktop-timestamp')\n    const mobileSpan = container.querySelector('.mobile-timestamp')\n\n    expect(desktopSpan?.textContent).toBeTruthy()\n    expect(mobileSpan?.textContent).toBeTruthy()\n  })\n})\n"
  },
  {
    "path": "src/containers/Token/shared/test/components/TransfersTable/TransfersTable.test.tsx",
    "content": "import { render, screen, fireEvent } from '@testing-library/react'\nimport { I18nextProvider } from 'react-i18next'\nimport { BrowserRouter as Router } from 'react-router'\nimport i18n from '../../../../../../i18n/testConfigEnglish'\nimport {\n  TransfersTable,\n  LOSTransfer,\n} from '../../../components/TransfersTable/TransfersTable'\n\njest.mock('../../../../../shared/components/Account', () => ({\n  Account: ({ displayText }: { displayText: string }) => (\n    <span data-testid=\"account\">{displayText}</span>\n  ),\n}))\n\njest.mock('../../../../../shared/utils', () => ({\n  shortenAccount: (account: string) =>\n    account.length > 12\n      ? `${account.slice(0, 7)}...${account.slice(-5)}`\n      : account,\n  shortenTxHash: (hash: string) =>\n    hash.length > 12 ? `${hash.slice(0, 6)}...${hash.slice(-6)}` : hash,\n}))\n\njest.mock('../../../../../shared/hooks', () => ({\n  useLanguage: () => 'en',\n}))\n\njest.mock('../../../../../shared/components/ResponsiveTimestamp', () => ({\n  ResponsiveTimestamp: ({ timestamp }: { timestamp: number }) => (\n    <div>{new Date(timestamp * 1000).toISOString()}</div>\n  ),\n}))\n\njest.mock('../../../../../shared/components/Pagination', () => ({\n  Pagination: ({\n    onPageChange,\n    totalItems,\n    pageSize = 15,\n  }: {\n    onPageChange: (page: number) => void\n    totalItems: number\n    pageSize?: number\n  }) => {\n    const totalPages = Math.max(1, Math.ceil(totalItems / pageSize))\n    if (totalPages <= 1) return null\n    return (\n      <div>\n        <button type=\"button\" onClick={() => onPageChange(2)}>\n          Next Page\n        </button>\n      </div>\n    )\n  },\n}))\n\njest.mock('../../../../../shared/components/Loader', () => ({\n  Loader: () => <div>Loading...</div>,\n}))\n\njest.mock('../../../../../shared/NumberFormattingUtils', () => ({\n  parseAmount: (amount: any) => String(amount),\n}))\n\nconst TestWrapper = ({ children }: { children: React.ReactNode }) => (\n  <I18nextProvider i18n={i18n}>\n    <Router>{children}</Router>\n  </I18nextProvider>\n)\n\nconst mockTransfers: LOSTransfer[] = [\n  {\n    hash: 'E3FE6EA3D48F0C2B639448020EA4F03D4F4F8FFDB243A852A0F59177921B4879',\n    ledger: 12345,\n    action: 'send',\n    timestamp: 1609459200,\n    from: 'rN7n7otQDd6FczFgLdSqtcsAUxDkw6fzRH',\n    to: 'rLNaPoKeeBjZe2qs6x52yVPZpZ8td4dc6w',\n    amount: {\n      currency: 'USD',\n      issuer: 'rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B',\n      value: '100',\n    },\n  },\n  {\n    hash: 'F4GF7FB4E49F1D3C740559131FB5G04E4G5G9GGEC354B963B1G60288C32C5980',\n    ledger: 12346,\n    action: 'receive',\n    timestamp: 1609545600,\n    from: 'rLNaPoKeeBjZe2qs6x52yVPZpZ8td4dc6w',\n    to: 'rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B',\n    amount: {\n      currency: 'EUR',\n      issuer: 'rN7n7otQDd6FczFgLdSqtcsAUxDkw6fzRH',\n      value: '200',\n    },\n  },\n]\n\ndescribe('TransfersTable Component', () => {\n  const mockOnPageChange = jest.fn()\n  const mockOnRefresh = jest.fn()\n\n  beforeEach(() => {\n    jest.clearAllMocks()\n  })\n\n  it('renders without crashing', () => {\n    render(\n      <TestWrapper>\n        <TransfersTable\n          transactions={mockTransfers}\n          totalTransfers={2}\n          currentPage={1}\n          onPageChange={mockOnPageChange}\n          pageSize={10}\n        />\n      </TestWrapper>,\n    )\n    // Verify tx hash is rendered (shortened to first 6 + last 6 chars with ... in between)\n    expect(screen.getByText('E3FE6E...1B4879')).toBeInTheDocument()\n  })\n\n  it('displays all transfers in the table', () => {\n    render(\n      <TestWrapper>\n        <TransfersTable\n          transactions={mockTransfers}\n          totalTransfers={2}\n          currentPage={1}\n          onPageChange={mockOnPageChange}\n          pageSize={10}\n        />\n      </TestWrapper>,\n    )\n    // Verify accounts are rendered (they are shortened to first 7 + last 5 chars with ... in between)\n    const accounts = screen.getAllByTestId('account')\n    expect(accounts.length).toBeGreaterThanOrEqual(2)\n    expect(accounts[0]).toHaveTextContent('rN7n7ot...6fzRH')\n    expect(accounts[1]).toHaveTextContent('rLNaPoK...4dc6w')\n  })\n\n  it('shows loading state when isTransfersLoading is true', () => {\n    render(\n      <TestWrapper>\n        <TransfersTable\n          transactions={[]}\n          isTransfersLoading\n          totalTransfers={0}\n          currentPage={1}\n          onPageChange={mockOnPageChange}\n          pageSize={10}\n        />\n      </TestWrapper>,\n    )\n    expect(screen.getByText('Loading...')).toBeInTheDocument()\n  })\n\n  it('shows no transfers message when empty and not loading', () => {\n    render(\n      <TestWrapper>\n        <TransfersTable\n          transactions={[]}\n          isTransfersLoading={false}\n          totalTransfers={0}\n          currentPage={1}\n          onPageChange={mockOnPageChange}\n          pageSize={10}\n        />\n      </TestWrapper>,\n    )\n    expect(screen.getByText(/no transfers/i)).toBeInTheDocument()\n    expect(screen.getByText('no_info.svg')).toBeInTheDocument()\n  })\n\n  it('calls onPageChange when pagination is triggered', () => {\n    render(\n      <TestWrapper>\n        <TransfersTable\n          transactions={mockTransfers}\n          totalTransfers={20}\n          currentPage={1}\n          onPageChange={mockOnPageChange}\n          pageSize={10}\n          hasMore\n        />\n      </TestWrapper>,\n    )\n    const nextButton = screen.getByText('Next Page')\n    fireEvent.click(nextButton)\n    expect(mockOnPageChange).toHaveBeenCalledWith(2)\n  })\n\n  it('displays action pill for each transfer', () => {\n    render(\n      <TestWrapper>\n        <TransfersTable\n          transactions={mockTransfers}\n          totalTransfers={2}\n          currentPage={1}\n          onPageChange={mockOnPageChange}\n          pageSize={10}\n        />\n      </TestWrapper>,\n    )\n    expect(screen.getByText('send')).toBeInTheDocument()\n    expect(screen.getByText('receive')).toBeInTheDocument()\n  })\n\n  it('renders table headers correctly', () => {\n    const { container } = render(\n      <TestWrapper>\n        <TransfersTable\n          transactions={mockTransfers}\n          totalTransfers={2}\n          currentPage={1}\n          onPageChange={mockOnPageChange}\n          pageSize={10}\n        />\n      </TestWrapper>,\n    )\n    const headers = container.querySelectorAll('thead th')\n    expect(headers.length).toBe(7)\n  })\n\n  it('displays refresh button when transfers exist', () => {\n    render(\n      <TestWrapper>\n        <TransfersTable\n          transactions={mockTransfers}\n          totalTransfers={2}\n          currentPage={1}\n          onPageChange={mockOnPageChange}\n          pageSize={10}\n          onRefresh={mockOnRefresh}\n        />\n      </TestWrapper>,\n    )\n    const refreshButton = screen.getByTitle(/refresh/i)\n    expect(refreshButton).toBeInTheDocument()\n  })\n\n  it('calls onRefresh when refresh button is clicked', () => {\n    render(\n      <TestWrapper>\n        <TransfersTable\n          transactions={mockTransfers}\n          totalTransfers={2}\n          currentPage={1}\n          onPageChange={mockOnPageChange}\n          pageSize={10}\n          onRefresh={mockOnRefresh}\n        />\n      </TestWrapper>,\n    )\n    const refreshButton = screen.getByTitle(/refresh/i)\n    fireEvent.click(refreshButton)\n    expect(mockOnRefresh).toHaveBeenCalled()\n  })\n\n  it('handles transfers with missing from address', () => {\n    const transferWithoutFrom: LOSTransfer[] = [\n      {\n        ...mockTransfers[0],\n        from: '',\n      },\n    ]\n    render(\n      <TestWrapper>\n        <TransfersTable\n          transactions={transferWithoutFrom}\n          totalTransfers={1}\n          currentPage={1}\n          onPageChange={mockOnPageChange}\n          pageSize={10}\n        />\n      </TestWrapper>,\n    )\n    expect(screen.getByText('--')).toBeInTheDocument()\n  })\n\n  it('handles transfers with missing to address', () => {\n    const transferWithoutTo: LOSTransfer[] = [\n      {\n        ...mockTransfers[0],\n        to: '',\n      },\n    ]\n    render(\n      <TestWrapper>\n        <TransfersTable\n          transactions={transferWithoutTo}\n          totalTransfers={1}\n          currentPage={1}\n          onPageChange={mockOnPageChange}\n          pageSize={10}\n        />\n      </TestWrapper>,\n    )\n    expect(screen.getByText('--')).toBeInTheDocument()\n  })\n\n  it('handles transfers with missing amount', () => {\n    const transferWithoutAmount: LOSTransfer[] = [\n      {\n        ...mockTransfers[0],\n        amount: {\n          currency: '',\n          issuer: '',\n          value: '',\n        },\n      },\n    ]\n    render(\n      <TestWrapper>\n        <TransfersTable\n          transactions={transferWithoutAmount}\n          totalTransfers={1}\n          currentPage={1}\n          onPageChange={mockOnPageChange}\n          pageSize={10}\n        />\n      </TestWrapper>,\n    )\n    expect(screen.getByText('--')).toBeInTheDocument()\n  })\n\n  it('displays pagination when hasMore is true', () => {\n    render(\n      <TestWrapper>\n        <TransfersTable\n          transactions={mockTransfers}\n          totalTransfers={20}\n          currentPage={1}\n          onPageChange={mockOnPageChange}\n          pageSize={10}\n          hasMore\n        />\n      </TestWrapper>,\n    )\n    expect(screen.getByText('Next Page')).toBeInTheDocument()\n  })\n\n  it('displays pagination when hasPrevPage is true', () => {\n    render(\n      <TestWrapper>\n        <TransfersTable\n          transactions={mockTransfers}\n          totalTransfers={20}\n          currentPage={2}\n          onPageChange={mockOnPageChange}\n          pageSize={10}\n          hasPrevPage\n        />\n      </TestWrapper>,\n    )\n    expect(screen.getByText('Next Page')).toBeInTheDocument()\n  })\n\n  it('renders correct number of rows', () => {\n    const { container } = render(\n      <TestWrapper>\n        <TransfersTable\n          transactions={mockTransfers}\n          totalTransfers={2}\n          currentPage={1}\n          onPageChange={mockOnPageChange}\n          pageSize={10}\n        />\n      </TestWrapper>,\n    )\n    const rows = container.querySelectorAll('tbody tr')\n    expect(rows.length).toBe(mockTransfers.length)\n  })\n\n  it('handles single transfer', () => {\n    const singleTransfer: LOSTransfer[] = [mockTransfers[0]]\n    render(\n      <TestWrapper>\n        <TransfersTable\n          transactions={singleTransfer}\n          totalTransfers={1}\n          currentPage={1}\n          onPageChange={mockOnPageChange}\n          pageSize={10}\n        />\n      </TestWrapper>,\n    )\n    // Verify accounts are rendered (shortened to first 7 + last 5 chars with ... in between)\n    const accounts = screen.getAllByTestId('account')\n    expect(accounts[0]).toHaveTextContent('rN7n7ot...6fzRH')\n    expect(accounts[1]).toHaveTextContent('rLNaPoK...4dc6w')\n  })\n\n  it('renders table with correct CSS classes', () => {\n    const { container } = render(\n      <TestWrapper>\n        <TransfersTable\n          transactions={mockTransfers}\n          totalTransfers={2}\n          currentPage={1}\n          onPageChange={mockOnPageChange}\n          pageSize={10}\n        />\n      </TestWrapper>,\n    )\n    expect(container.querySelector('.tokens-table')).toBeInTheDocument()\n    expect(container.querySelector('table.basic')).toBeInTheDocument()\n  })\n})\n"
  },
  {
    "path": "src/containers/Token/shared/test/constants.test.ts",
    "content": "import { PAGINATION_CONFIG, INITIAL_PAGE } from '../constants'\n\ndescribe('Token Constants', () => {\n  describe('PAGINATION_CONFIG', () => {\n    it('should have HOLDERS_PAGE_SIZE defined', () => {\n      expect(PAGINATION_CONFIG.HOLDERS_PAGE_SIZE).toBeDefined()\n    })\n\n    it('should have TRANSFERS_PAGE_SIZE defined', () => {\n      expect(PAGINATION_CONFIG.TRANSFERS_PAGE_SIZE).toBeDefined()\n    })\n\n    it('should have DEX_TRADES_PAGE_SIZE defined', () => {\n      expect(PAGINATION_CONFIG.DEX_TRADES_PAGE_SIZE).toBeDefined()\n    })\n\n    it('should have correct HOLDERS_PAGE_SIZE value', () => {\n      expect(PAGINATION_CONFIG.HOLDERS_PAGE_SIZE).toBe(20)\n    })\n\n    it('should have correct TRANSFERS_PAGE_SIZE value', () => {\n      expect(PAGINATION_CONFIG.TRANSFERS_PAGE_SIZE).toBe(10)\n    })\n\n    it('should have correct DEX_TRADES_PAGE_SIZE value', () => {\n      expect(PAGINATION_CONFIG.DEX_TRADES_PAGE_SIZE).toBe(10)\n    })\n\n    it('should have consistent values', () => {\n      // Verify the object exists and has the expected structure\n      expect(PAGINATION_CONFIG).toBeDefined()\n      expect(typeof PAGINATION_CONFIG.HOLDERS_PAGE_SIZE).toBe('number')\n      expect(typeof PAGINATION_CONFIG.TRANSFERS_PAGE_SIZE).toBe('number')\n      expect(typeof PAGINATION_CONFIG.DEX_TRADES_PAGE_SIZE).toBe('number')\n    })\n\n    it('should have all values as positive numbers', () => {\n      expect(PAGINATION_CONFIG.HOLDERS_PAGE_SIZE).toBeGreaterThan(0)\n      expect(PAGINATION_CONFIG.TRANSFERS_PAGE_SIZE).toBeGreaterThan(0)\n      expect(PAGINATION_CONFIG.DEX_TRADES_PAGE_SIZE).toBeGreaterThan(0)\n    })\n\n    it('should have all values as integers', () => {\n      expect(Number.isInteger(PAGINATION_CONFIG.HOLDERS_PAGE_SIZE)).toBe(true)\n      expect(Number.isInteger(PAGINATION_CONFIG.TRANSFERS_PAGE_SIZE)).toBe(true)\n      expect(Number.isInteger(PAGINATION_CONFIG.DEX_TRADES_PAGE_SIZE)).toBe(\n        true,\n      )\n    })\n\n    it('HOLDERS_PAGE_SIZE should be larger than TRANSFERS_PAGE_SIZE', () => {\n      expect(PAGINATION_CONFIG.HOLDERS_PAGE_SIZE).toBeGreaterThan(\n        PAGINATION_CONFIG.TRANSFERS_PAGE_SIZE,\n      )\n    })\n\n    it('TRANSFERS_PAGE_SIZE should equal DEX_TRADES_PAGE_SIZE', () => {\n      expect(PAGINATION_CONFIG.TRANSFERS_PAGE_SIZE).toBe(\n        PAGINATION_CONFIG.DEX_TRADES_PAGE_SIZE,\n      )\n    })\n  })\n\n  describe('INITIAL_PAGE', () => {\n    it('should be defined', () => {\n      expect(INITIAL_PAGE).toBeDefined()\n    })\n\n    it('should equal 1', () => {\n      expect(INITIAL_PAGE).toBe(1)\n    })\n\n    it('should be a positive number', () => {\n      expect(INITIAL_PAGE).toBeGreaterThan(0)\n    })\n\n    it('should be an integer', () => {\n      expect(Number.isInteger(INITIAL_PAGE)).toBe(true)\n    })\n\n    it('should be the first page', () => {\n      expect(INITIAL_PAGE).toBe(1)\n    })\n  })\n\n  describe('Constants consistency', () => {\n    it('should have consistent pagination config structure', () => {\n      const keys = Object.keys(PAGINATION_CONFIG)\n      expect(keys).toContain('HOLDERS_PAGE_SIZE')\n      expect(keys).toContain('TRANSFERS_PAGE_SIZE')\n      expect(keys).toContain('DEX_TRADES_PAGE_SIZE')\n    })\n\n    it('should have exactly 3 pagination config keys', () => {\n      const keys = Object.keys(PAGINATION_CONFIG)\n      expect(keys.length).toBe(3)\n    })\n\n    it('all pagination sizes should be reasonable values', () => {\n      expect(PAGINATION_CONFIG.HOLDERS_PAGE_SIZE).toBeLessThanOrEqual(100)\n      expect(PAGINATION_CONFIG.TRANSFERS_PAGE_SIZE).toBeLessThanOrEqual(100)\n      expect(PAGINATION_CONFIG.DEX_TRADES_PAGE_SIZE).toBeLessThanOrEqual(100)\n    })\n  })\n})\n"
  },
  {
    "path": "src/containers/Token/shared/test/hooks/useAccountTransactions.test.tsx",
    "content": "import { renderHook, waitFor } from '@testing-library/react'\nimport { QueryClient, QueryClientProvider } from 'react-query'\nimport { useAccountTransactions } from '../../hooks/useAccountTransactions'\nimport SocketContext from '../../../../shared/SocketContext'\nimport * as rippled from '../../../../../rippled'\n\njest.mock('../../../../../rippled')\njest.mock('../../../../shared/analytics', () => ({\n  useAnalytics: () => ({\n    trackException: jest.fn(),\n  }),\n}))\n\nconst mockedGetAccountTransactions = rippled.getAccountTransactions as jest.Mock\n\nconst createWrapper =\n  (socket: any = {}, queryClient = new QueryClient()) =>\n  ({ children }: { children: React.ReactNode }) => (\n    <SocketContext.Provider value={socket}>\n      <QueryClientProvider client={queryClient}>{children}</QueryClientProvider>\n    </SocketContext.Provider>\n  )\n\ndescribe('useAccountTransactions', () => {\n  beforeEach(() => {\n    jest.clearAllMocks()\n    jest.useFakeTimers()\n  })\n\n  afterEach(() => {\n    jest.useRealTimers()\n  })\n\n  it('fetches transactions successfully', async () => {\n    const mockTransactions = [\n      { hash: 'tx1', type: 'Payment' },\n      { hash: 'tx2', type: 'Payment' },\n    ]\n    mockedGetAccountTransactions.mockResolvedValue({\n      transactions: mockTransactions,\n      marker: undefined,\n    })\n\n    const queryClient = new QueryClient({\n      defaultOptions: { queries: { retry: false } },\n    })\n\n    const { result } = renderHook(\n      () =>\n        useAccountTransactions({\n          account: 'rAccount123',\n          tokenId: 'USD',\n        }),\n      { wrapper: createWrapper({}, queryClient) },\n    )\n\n    await waitFor(() => expect(result.current.loading).toBe(false))\n\n    expect(result.current.data?.pages[0].transactions).toEqual(mockTransactions)\n    expect(result.current.hasNextPage).toBe(false)\n    expect(result.current.error).toBeNull()\n  })\n\n  it('returns hasNextPage true when marker exists', async () => {\n    mockedGetAccountTransactions.mockResolvedValue({\n      transactions: [{ hash: 'tx1' }],\n      marker: 'next-page-marker',\n    })\n\n    const queryClient = new QueryClient({\n      defaultOptions: { queries: { retry: false } },\n    })\n\n    const { result } = renderHook(\n      () =>\n        useAccountTransactions({\n          account: 'rAccount123',\n          tokenId: 'USD',\n        }),\n      { wrapper: createWrapper({}, queryClient) },\n    )\n\n    await waitFor(() => expect(result.current.loading).toBe(false))\n\n    expect(result.current.hasNextPage).toBe(true)\n  })\n\n  it('handles fetch error', async () => {\n    mockedGetAccountTransactions.mockRejectedValue(new Error('Network error'))\n\n    const queryClient = new QueryClient({\n      defaultOptions: { queries: { retry: false } },\n    })\n\n    const { result } = renderHook(\n      () =>\n        useAccountTransactions({\n          account: 'rAccount123',\n          tokenId: 'USD',\n        }),\n      { wrapper: createWrapper({}, queryClient) },\n    )\n\n    await waitFor(() => expect(result.current.error).not.toBeNull())\n\n    expect(result.current.error?.message).toBe(\n      'get_account_transactions_failed',\n    )\n  })\n\n  it('auto-fetches next page when current page has no matching transactions', async () => {\n    // First page: no transactions, has marker\n    // Second page: has transactions\n    mockedGetAccountTransactions\n      .mockResolvedValueOnce({\n        transactions: [],\n        marker: 'page-2-marker',\n      })\n      .mockResolvedValueOnce({\n        transactions: [{ hash: 'tx1' }],\n        marker: undefined,\n      })\n\n    const queryClient = new QueryClient({\n      defaultOptions: { queries: { retry: false } },\n    })\n\n    const { result } = renderHook(\n      () =>\n        useAccountTransactions({\n          account: 'rAccount123',\n          tokenId: 'USD',\n        }),\n      { wrapper: createWrapper({}, queryClient) },\n    )\n\n    // Wait for first fetch\n    await waitFor(() =>\n      expect(mockedGetAccountTransactions).toHaveBeenCalledTimes(1),\n    )\n\n    // Advance timer to trigger auto-fetch\n    jest.advanceTimersByTime(200)\n\n    await waitFor(() =>\n      expect(mockedGetAccountTransactions).toHaveBeenCalledTimes(2),\n    )\n\n    // Verify data from both pages is available\n    await waitFor(() => expect(result.current.loading).toBe(false))\n    expect(result.current.data?.pages).toHaveLength(2)\n    expect(result.current.data?.pages[0].transactions).toEqual([])\n    expect(result.current.data?.pages[1].transactions).toEqual([\n      { hash: 'tx1' },\n    ])\n  })\n})\n"
  },
  {
    "path": "src/containers/Token/shared/test/hooks/usePaginationState.test.ts",
    "content": "import { renderHook, act } from '@testing-library/react'\nimport { usePaginationState } from '../../hooks/usePaginationState'\n\ndescribe('usePaginationState', () => {\n  it('initializes with default values', () => {\n    const { result } = renderHook(() => usePaginationState(10))\n\n    expect(result.current.currentPage).toBe(1)\n    expect(result.current.pageSize).toBe(10)\n    expect(result.current.total).toBe(0)\n    expect(result.current.hasMore).toBeUndefined()\n    expect(result.current.hasPrevPage).toBeUndefined()\n  })\n\n  it('initializes with provided pageSize', () => {\n    const { result } = renderHook(() => usePaginationState(20))\n\n    expect(result.current.pageSize).toBe(20)\n  })\n\n  it('initializes with provided total', () => {\n    const { result } = renderHook(() => usePaginationState(10, 100))\n\n    expect(result.current.total).toBe(100)\n  })\n\n  it('initializes with hasMore flag', () => {\n    const { result } = renderHook(() => usePaginationState(10, 100, true))\n\n    expect(result.current.hasMore).toBe(true)\n  })\n\n  it('initializes with hasPrevPage flag', () => {\n    const { result } = renderHook(() => usePaginationState(10, 100, true, true))\n\n    expect(result.current.hasPrevPage).toBe(true)\n  })\n\n  it('initializes with all parameters', () => {\n    const { result } = renderHook(() =>\n      usePaginationState(20, 200, true, false),\n    )\n\n    expect(result.current.pageSize).toBe(20)\n    expect(result.current.total).toBe(200)\n    expect(result.current.hasMore).toBe(true)\n    expect(result.current.hasPrevPage).toBe(false)\n  })\n\n  it('updates currentPage when setCurrentPage is called', () => {\n    const { result } = renderHook(() => usePaginationState(10))\n\n    act(() => {\n      result.current.setCurrentPage(2)\n    })\n\n    expect(result.current.currentPage).toBe(2)\n  })\n\n  it('updates currentPage to any valid number', () => {\n    const { result } = renderHook(() => usePaginationState(10))\n\n    act(() => {\n      result.current.setCurrentPage(5)\n    })\n\n    expect(result.current.currentPage).toBe(5)\n  })\n\n  it('handles multiple page updates', () => {\n    const { result } = renderHook(() => usePaginationState(10))\n\n    act(() => {\n      result.current.setCurrentPage(2)\n    })\n    expect(result.current.currentPage).toBe(2)\n\n    act(() => {\n      result.current.setCurrentPage(3)\n    })\n    expect(result.current.currentPage).toBe(3)\n\n    act(() => {\n      result.current.setCurrentPage(1)\n    })\n    expect(result.current.currentPage).toBe(1)\n  })\n\n  it('handles large page numbers', () => {\n    const { result } = renderHook(() => usePaginationState(10))\n\n    act(() => {\n      result.current.setCurrentPage(1000)\n    })\n\n    expect(result.current.currentPage).toBe(1000)\n  })\n\n  it('handles zero page number', () => {\n    const { result } = renderHook(() => usePaginationState(10))\n\n    act(() => {\n      result.current.setCurrentPage(0)\n    })\n\n    expect(result.current.currentPage).toBe(0)\n  })\n\n  it('handles negative page number', () => {\n    const { result } = renderHook(() => usePaginationState(10))\n\n    act(() => {\n      result.current.setCurrentPage(-1)\n    })\n\n    expect(result.current.currentPage).toBe(-1)\n  })\n\n  it('maintains pageSize across updates', () => {\n    const { result } = renderHook(() => usePaginationState(15, 150))\n\n    act(() => {\n      result.current.setCurrentPage(2)\n    })\n\n    expect(result.current.pageSize).toBe(15)\n  })\n\n  it('maintains total across updates', () => {\n    const { result } = renderHook(() => usePaginationState(10, 100))\n\n    act(() => {\n      result.current.setCurrentPage(2)\n    })\n\n    expect(result.current.total).toBe(100)\n  })\n\n  it('returns setCurrentPage function', () => {\n    const { result } = renderHook(() => usePaginationState(10))\n\n    expect(typeof result.current.setCurrentPage).toBe('function')\n  })\n\n  it('handles zero pageSize', () => {\n    const { result } = renderHook(() => usePaginationState(0))\n\n    expect(result.current.pageSize).toBe(0)\n  })\n\n  it('handles large pageSize', () => {\n    const { result } = renderHook(() => usePaginationState(1000))\n\n    expect(result.current.pageSize).toBe(1000)\n  })\n\n  it('handles zero total', () => {\n    const { result } = renderHook(() => usePaginationState(10, 0))\n\n    expect(result.current.total).toBe(0)\n  })\n\n  it('handles large total', () => {\n    const { result } = renderHook(() => usePaginationState(10, 1000000))\n\n    expect(result.current.total).toBe(1000000)\n  })\n\n  it('handles hasMore as false', () => {\n    const { result } = renderHook(() => usePaginationState(10, 100, false))\n\n    expect(result.current.hasMore).toBe(false)\n  })\n\n  it('handles hasPrevPage as false', () => {\n    const { result } = renderHook(() =>\n      usePaginationState(10, 100, true, false),\n    )\n\n    expect(result.current.hasPrevPage).toBe(false)\n  })\n\n  it('provides all required properties', () => {\n    const { result } = renderHook(() => usePaginationState(10, 100, true, true))\n\n    expect(result.current).toHaveProperty('currentPage')\n    expect(result.current).toHaveProperty('setCurrentPage')\n    expect(result.current).toHaveProperty('pageSize')\n    expect(result.current).toHaveProperty('total')\n    expect(result.current).toHaveProperty('hasMore')\n    expect(result.current).toHaveProperty('hasPrevPage')\n  })\n})\n"
  },
  {
    "path": "src/containers/Token/shared/test/hooks/useSortingState.test.ts",
    "content": "import { renderHook, act } from '@testing-library/react'\nimport { useSortingState } from '../../hooks/useSortingState'\n\ndescribe('useSortingState', () => {\n  it('initializes with default values', () => {\n    const { result } = renderHook(() => useSortingState())\n\n    expect(result.current.sortField).toBe('timestamp')\n    expect(result.current.sortOrder).toBe('desc')\n  })\n\n  it('initializes with custom sortField', () => {\n    const { result } = renderHook(() => useSortingState('name'))\n\n    expect(result.current.sortField).toBe('name')\n    expect(result.current.sortOrder).toBe('desc')\n  })\n\n  it('initializes with custom sortOrder', () => {\n    const { result } = renderHook(() => useSortingState('timestamp', 'asc'))\n\n    expect(result.current.sortField).toBe('timestamp')\n    expect(result.current.sortOrder).toBe('asc')\n  })\n\n  it('initializes with custom sortField and sortOrder', () => {\n    const { result } = renderHook(() => useSortingState('amount', 'asc'))\n\n    expect(result.current.sortField).toBe('amount')\n    expect(result.current.sortOrder).toBe('asc')\n  })\n\n  it('updates sortField when setSortField is called', () => {\n    const { result } = renderHook(() => useSortingState())\n\n    act(() => {\n      result.current.setSortField?.('name')\n    })\n\n    expect(result.current.sortField).toBe('name')\n  })\n\n  it('updates sortOrder when setSortOrder is called', () => {\n    const { result } = renderHook(() => useSortingState())\n\n    act(() => {\n      result.current.setSortOrder?.('asc')\n    })\n\n    expect(result.current.sortOrder).toBe('asc')\n  })\n\n  it('handles multiple sortField updates', () => {\n    const { result } = renderHook(() => useSortingState())\n\n    act(() => {\n      result.current.setSortField?.('name')\n    })\n    expect(result.current.sortField).toBe('name')\n\n    act(() => {\n      result.current.setSortField?.('amount')\n    })\n    expect(result.current.sortField).toBe('amount')\n\n    act(() => {\n      result.current.setSortField?.('timestamp')\n    })\n    expect(result.current.sortField).toBe('timestamp')\n  })\n\n  it('handles multiple sortOrder updates', () => {\n    const { result } = renderHook(() => useSortingState())\n\n    act(() => {\n      result.current.setSortOrder?.('asc')\n    })\n    expect(result.current.sortOrder).toBe('asc')\n\n    act(() => {\n      result.current.setSortOrder?.('desc')\n    })\n    expect(result.current.sortOrder).toBe('desc')\n\n    act(() => {\n      result.current.setSortOrder?.('asc')\n    })\n    expect(result.current.sortOrder).toBe('asc')\n  })\n\n  it('maintains sortField when updating sortOrder', () => {\n    const { result } = renderHook(() => useSortingState('name', 'desc'))\n\n    act(() => {\n      result.current.setSortOrder?.('asc')\n    })\n\n    expect(result.current.sortField).toBe('name')\n    expect(result.current.sortOrder).toBe('asc')\n  })\n\n  it('maintains sortOrder when updating sortField', () => {\n    const { result } = renderHook(() => useSortingState('timestamp', 'asc'))\n\n    act(() => {\n      result.current.setSortField?.('amount')\n    })\n\n    expect(result.current.sortField).toBe('amount')\n    expect(result.current.sortOrder).toBe('asc')\n  })\n\n  it('returns setSortField function', () => {\n    const { result } = renderHook(() => useSortingState())\n\n    expect(typeof result.current.setSortField).toBe('function')\n  })\n\n  it('returns setSortOrder function', () => {\n    const { result } = renderHook(() => useSortingState())\n\n    expect(typeof result.current.setSortOrder).toBe('function')\n  })\n\n  it('handles empty string sortField', () => {\n    const { result } = renderHook(() => useSortingState(''))\n\n    expect(result.current.sortField).toBe('')\n  })\n\n  it('handles special characters in sortField', () => {\n    const { result } = renderHook(() => useSortingState('field_name'))\n\n    expect(result.current.sortField).toBe('field_name')\n  })\n\n  it('handles numeric sortField names', () => {\n    const { result } = renderHook(() => useSortingState('field123'))\n\n    expect(result.current.sortField).toBe('field123')\n  })\n\n  it('provides all required properties', () => {\n    const { result } = renderHook(() => useSortingState())\n\n    expect(result.current).toHaveProperty('sortField')\n    expect(result.current).toHaveProperty('setSortField')\n    expect(result.current).toHaveProperty('sortOrder')\n    expect(result.current).toHaveProperty('setSortOrder')\n  })\n\n  it('handles updating both sortField and sortOrder', () => {\n    const { result } = renderHook(() => useSortingState('timestamp', 'desc'))\n\n    act(() => {\n      result.current.setSortField?.('amount')\n      result.current.setSortOrder?.('asc')\n    })\n\n    expect(result.current.sortField).toBe('amount')\n    expect(result.current.sortOrder).toBe('asc')\n  })\n\n  it('handles long sortField names', () => {\n    const longFieldName = 'very_long_field_name_with_many_characters'\n    const { result } = renderHook(() => useSortingState(longFieldName))\n\n    expect(result.current.sortField).toBe(longFieldName)\n  })\n\n  it('handles camelCase sortField names', () => {\n    const { result } = renderHook(() => useSortingState('sortByAmount'))\n\n    expect(result.current.sortField).toBe('sortByAmount')\n  })\n\n  it('handles snake_case sortField names', () => {\n    const { result } = renderHook(() => useSortingState('sort_by_amount'))\n\n    expect(result.current.sortField).toBe('sort_by_amount')\n  })\n\n  it('maintains state across multiple operations', () => {\n    const { result } = renderHook(() => useSortingState('name', 'asc'))\n\n    act(() => {\n      result.current.setSortField?.('amount')\n    })\n    expect(result.current.sortField).toBe('amount')\n    expect(result.current.sortOrder).toBe('asc')\n\n    act(() => {\n      result.current.setSortOrder?.('desc')\n    })\n    expect(result.current.sortField).toBe('amount')\n    expect(result.current.sortOrder).toBe('desc')\n\n    act(() => {\n      result.current.setSortField?.('timestamp')\n    })\n    expect(result.current.sortField).toBe('timestamp')\n    expect(result.current.sortOrder).toBe('desc')\n  })\n})\n"
  },
  {
    "path": "src/containers/Token/shared/test/services/transfersPagination.test.ts",
    "content": "import { transfersPaginationService } from '../../services/transfersPagination'\n\nimport { getTransfers } from '../../api/tokenTx'\n\njest.mock('../../api/tokenTx', () => ({\n  getTransfers: jest.fn(),\n}))\n\nconst mockGetTransfers = getTransfers as jest.Mock\n\ndescribe('TransfersPaginationService', () => {\n  beforeEach(() => {\n    jest.clearAllMocks()\n    transfersPaginationService.clearCache()\n  })\n\n  describe('getTransfersPage', () => {\n    it('returns empty transfers on first call with no data', async () => {\n      mockGetTransfers.mockResolvedValue({\n        results: [],\n        next_cursor: null,\n      })\n\n      const result = await transfersPaginationService.getTransfersPage(\n        'USD.rIssuer',\n        1,\n      )\n\n      expect(result.transfers).toEqual([])\n      expect(result.totalTransfers).toBe(0)\n      expect(result.hasMore).toBe(false)\n    })\n\n    it('fetches and returns transfers on first page', async () => {\n      const mockTransfers = [\n        {\n          hash: 'hash1',\n          ledger_index: 100,\n          timestamp: 1000,\n          type: 'Payment',\n          account: 'rFrom1',\n          destination: 'rTo1',\n          amount: { currency: 'USD', issuer: 'rIssuer', value: '100' },\n        },\n      ]\n\n      mockGetTransfers.mockResolvedValue({\n        results: mockTransfers,\n        next_cursor: 'cursor1',\n      })\n\n      const result = await transfersPaginationService.getTransfersPage(\n        'USD.rIssuer',\n        1,\n      )\n\n      expect(result.transfers.length).toBe(1)\n      expect(result.totalTransfers).toBe(1)\n      expect(result.hasMore).toBe(false)\n    })\n\n    it('uses default page size when not provided', async () => {\n      mockGetTransfers.mockResolvedValue({\n        results: [],\n        next_cursor: null,\n      })\n\n      await transfersPaginationService.getTransfersPage('USD.rIssuer', 1)\n\n      expect(mockGetTransfers).toHaveBeenCalledWith(\n        'USD.rIssuer',\n        200,\n        undefined,\n        'next',\n        undefined,\n        undefined,\n      )\n    })\n\n    it('uses custom page size when provided', async () => {\n      mockGetTransfers.mockResolvedValue({\n        results: [],\n        next_cursor: null,\n      })\n\n      await transfersPaginationService.getTransfersPage('USD.rIssuer', 1, 20)\n\n      expect(mockGetTransfers).toHaveBeenCalled()\n    })\n\n    it('handles multiple pages correctly', async () => {\n      const mockTransfers = Array.from({ length: 200 }, (_, i) => ({\n        hash: `hash${i}`,\n        ledger_index: 100 + i,\n        timestamp: 1000 + i,\n        type: 'Payment',\n        account: `rFrom${i}`,\n        destination: `rTo${i}`,\n        amount: { currency: 'USD', issuer: 'rIssuer', value: '100' },\n      }))\n\n      mockGetTransfers.mockResolvedValue({\n        results: mockTransfers,\n        next_cursor: 'cursor1',\n      })\n\n      const result1 = await transfersPaginationService.getTransfersPage(\n        'USD.rIssuer',\n        1,\n        10,\n      )\n\n      expect(result1.transfers.length).toBe(10)\n      expect(result1.hasMore).toBe(true)\n    })\n\n    it('caches transfers between calls', async () => {\n      const mockTransfers = [\n        {\n          hash: 'hash1',\n          ledger_index: 100,\n          timestamp: 1000,\n          type: 'Payment',\n          account: 'rFrom1',\n          destination: 'rTo1',\n          amount: { currency: 'USD', issuer: 'rIssuer', value: '100' },\n        },\n      ]\n\n      mockGetTransfers.mockResolvedValue({\n        results: mockTransfers,\n        next_cursor: null,\n      })\n\n      await transfersPaginationService.getTransfersPage('USD.rIssuer', 1)\n      const callCount1 = mockGetTransfers.mock.calls.length\n\n      await transfersPaginationService.getTransfersPage('USD.rIssuer', 1)\n      const callCount2 = mockGetTransfers.mock.calls.length\n\n      // Should not fetch again for same page\n      expect(callCount2).toBe(callCount1)\n    })\n\n    it('handles sorting parameters', async () => {\n      mockGetTransfers.mockResolvedValue({\n        results: [],\n        next_cursor: null,\n      })\n\n      await transfersPaginationService.getTransfersPage(\n        'USD.rIssuer',\n        1,\n        10,\n        'timestamp',\n        'asc',\n      )\n\n      expect(mockGetTransfers).toHaveBeenCalledWith(\n        'USD.rIssuer',\n        200,\n        undefined,\n        'next',\n        'timestamp',\n        'asc',\n      )\n    })\n\n    it('returns correct hasMore flag', async () => {\n      const mockTransfers = Array.from({ length: 200 }, (_, i) => ({\n        hash: `hash${i}`,\n        ledger_index: 100 + i,\n        timestamp: 1000 + i,\n        type: 'Payment',\n        account: `rFrom${i}`,\n        destination: `rTo${i}`,\n        amount: { currency: 'USD', issuer: 'rIssuer', value: '100' },\n      }))\n\n      mockGetTransfers.mockResolvedValue({\n        results: mockTransfers,\n        next_cursor: 'cursor1',\n      })\n\n      const result = await transfersPaginationService.getTransfersPage(\n        'USD.rIssuer',\n        1,\n        10,\n      )\n\n      expect(result.hasMore).toBe(true)\n    })\n  })\n\n  describe('clearCache', () => {\n    it('clears cache for specific tokenId', async () => {\n      mockGetTransfers.mockResolvedValue({\n        results: [],\n        next_cursor: null,\n      })\n\n      await transfersPaginationService.getTransfersPage('USD.rIssuer', 1)\n      transfersPaginationService.clearCache('USD.rIssuer')\n\n      const count1 = mockGetTransfers.mock.calls.length\n      await transfersPaginationService.getTransfersPage('USD.rIssuer', 1)\n      const count2 = mockGetTransfers.mock.calls.length\n\n      expect(count2).toBeGreaterThan(count1)\n    })\n\n    it('clears all caches when no parameters provided', async () => {\n      mockGetTransfers.mockResolvedValue({\n        results: [],\n        next_cursor: null,\n      })\n\n      await transfersPaginationService.getTransfersPage('USD.rIssuer', 1)\n      transfersPaginationService.clearCache()\n\n      const count1 = mockGetTransfers.mock.calls.length\n      await transfersPaginationService.getTransfersPage('USD.rIssuer', 1)\n      const count2 = mockGetTransfers.mock.calls.length\n\n      expect(count2).toBeGreaterThan(count1)\n    })\n  })\n\n  describe('getCachedTransfersCount', () => {\n    it('returns 0 for uncached tokenId', () => {\n      const count =\n        transfersPaginationService.getCachedTransfersCount('USD.rIssuer')\n      expect(count).toBe(0)\n    })\n\n    it('returns correct count after fetching', async () => {\n      const mockTransfers = Array.from({ length: 5 }, (_, i) => ({\n        hash: `hash${i}`,\n        ledger_index: 100 + i,\n        timestamp: 1000 + i,\n        type: 'Payment',\n        account: `rFrom${i}`,\n        destination: `rTo${i}`,\n        amount: { currency: 'USD', issuer: 'rIssuer', value: '100' },\n      }))\n\n      mockGetTransfers.mockResolvedValue({\n        results: mockTransfers,\n        next_cursor: null,\n      })\n\n      await transfersPaginationService.getTransfersPage('USD.rIssuer', 1)\n      const count =\n        transfersPaginationService.getCachedTransfersCount('USD.rIssuer')\n\n      expect(count).toBe(5)\n    })\n\n    it('returns correct count with sorting parameters', async () => {\n      const mockTransfers = Array.from({ length: 5 }, (_, i) => ({\n        hash: `hash${i}`,\n        ledger_index: 100 + i,\n        timestamp: 1000 + i,\n        type: 'Payment',\n        account: `rFrom${i}`,\n        destination: `rTo${i}`,\n        amount: { currency: 'USD', issuer: 'rIssuer', value: '100' },\n      }))\n\n      mockGetTransfers.mockResolvedValue({\n        results: mockTransfers,\n        next_cursor: null,\n      })\n\n      await transfersPaginationService.getTransfersPage(\n        'USD.rIssuer',\n        1,\n        10,\n        'timestamp',\n        'asc',\n      )\n      const count = transfersPaginationService.getCachedTransfersCount(\n        'USD.rIssuer',\n        'timestamp',\n        'asc',\n      )\n\n      expect(count).toBe(5)\n    })\n  })\n\n  describe('edge cases', () => {\n    it('handles invalid page size gracefully', async () => {\n      mockGetTransfers.mockResolvedValue({\n        results: [],\n        next_cursor: null,\n      })\n\n      const result = await transfersPaginationService.getTransfersPage(\n        'USD.rIssuer',\n        1,\n        0,\n      )\n\n      expect(result).toBeDefined()\n    })\n\n    it('handles negative page number', async () => {\n      mockGetTransfers.mockResolvedValue({\n        results: [],\n        next_cursor: null,\n      })\n\n      const result = await transfersPaginationService.getTransfersPage(\n        'USD.rIssuer',\n        -1,\n      )\n\n      expect(result).toBeDefined()\n    })\n\n    it('handles empty tokenId', async () => {\n      mockGetTransfers.mockResolvedValue({\n        results: [],\n        next_cursor: null,\n      })\n\n      const result = await transfersPaginationService.getTransfersPage('', 1)\n\n      expect(result).toBeDefined()\n    })\n\n    it('handles large page numbers', async () => {\n      mockGetTransfers.mockResolvedValue({\n        results: [],\n        next_cursor: null,\n      })\n\n      const result = await transfersPaginationService.getTransfersPage(\n        'USD.rIssuer',\n        1000,\n      )\n\n      expect(result).toBeDefined()\n    })\n  })\n})\n"
  },
  {
    "path": "src/containers/TokenNonMain/TokenHeader/index.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport './styles.scss'\nimport { localizeNumber, formatLargeNumber } from '../../shared/utils'\nimport Currency from '../../shared/components/Currency'\nimport { Account } from '../../shared/components/Account'\nimport DomainLink from '../../shared/components/DomainLink'\nimport { TokenTableRow } from '../../shared/components/TokenTableRow'\nimport { useLanguage } from '../../shared/hooks'\nimport { LEDGER_ROUTE, TRANSACTION_ROUTE } from '../../App/routes'\nimport { RouteLink } from '../../shared/routing'\nimport { TokenData } from '../../../rippled/token'\nimport { XRP_BASE } from '../../shared/transactionUtils'\n\nconst CURRENCY_OPTIONS = {\n  style: 'currency',\n  currency: 'XRP',\n  minimumFractionDigits: 2,\n  maximumFractionDigits: 6,\n}\n\ninterface TokenHeaderProps {\n  accountId: string\n  currency: string\n  data: TokenData\n}\n\nexport const TokenHeader = ({\n  accountId,\n  currency,\n  data,\n}: TokenHeaderProps) => {\n  const language = useLanguage()\n  const { t } = useTranslation()\n  const { domain, rate, emailHash, previousLedger, previousTxn } = data\n\n  const renderDetails = () => {\n    const prevTxn = previousTxn && previousTxn.replace(/(.{20})..+/, '$1...')\n    const abbrvEmail = emailHash && emailHash.replace(/(.{20})..+/, '$1...')\n    return (\n      <table className=\"token-table\">\n        <tbody>\n          {domain && (\n            <TokenTableRow\n              label={t('domain')}\n              value={<DomainLink domain={domain} />}\n            />\n          )}\n          {rate && <TokenTableRow label={t('fee_rate')} value={`${rate}%`} />}\n          {previousLedger && (\n            <TokenTableRow\n              label={t('last_ledger')}\n              value={\n                <RouteLink\n                  to={LEDGER_ROUTE}\n                  params={{ identifier: previousLedger }}\n                >\n                  {previousLedger}\n                </RouteLink>\n              }\n            />\n          )}\n          <TokenTableRow\n            label={t('last_affecting_transaction')}\n            value={\n              <RouteLink\n                to={TRANSACTION_ROUTE}\n                params={{ identifier: previousTxn }}\n              >\n                {prevTxn}\n              </RouteLink>\n            }\n          />\n          {emailHash && (\n            <TokenTableRow label={t('email_hash')} value={abbrvEmail} />\n          )}\n        </tbody>\n      </table>\n    )\n  }\n\n  const renderSettings = () => {\n    const { flags } = data\n\n    const rippling =\n      flags && flags.includes('lsfDefaultRipple') ? 'enabled' : 'disabled'\n    const depositAuth =\n      flags && flags.includes('lsfDepositAuth') ? 'enabled' : 'disabled'\n    const masterKey =\n      flags && flags.includes('lsfDisableMaster') ? 'disabled' : 'enabled'\n    const receivingXRP =\n      flags && flags.includes('lsfDisallowXRP') ? 'disabled' : 'enabled'\n    const frozen = flags && flags.includes('lsfGlobalFreeze') ? 'true' : 'false'\n    const noFreeze = flags && flags.includes('lsfNoFreeze') ? 'true' : 'false'\n    const requireAuth =\n      flags && flags.includes('lsfRequireAuth') ? 'true' : 'false'\n    const requireDestTag =\n      flags && flags.includes('lsfRequireDestTag') ? 'true' : 'false'\n    const clawback =\n      flags && flags.includes('lsfAllowTrustLineClawback') ? 'true' : 'false'\n\n    return (\n      <table className=\"token-table\">\n        <tbody>\n          <TokenTableRow label=\"Rippling\" value={rippling} />\n          <TokenTableRow label=\"Deposit Auth\" value={depositAuth} />\n          <TokenTableRow label=\"Master Key\" value={masterKey} />\n          <TokenTableRow label=\"Receiving XRP\" value={receivingXRP} />\n          <TokenTableRow label=\"Frozen\" value={frozen} />\n          <TokenTableRow label=\"No freeze\" value={noFreeze} />\n          <TokenTableRow label=\"Require Auth\" value={requireAuth} />\n          <TokenTableRow label=\"Require Dest Tag\" value={requireDestTag} />\n          <TokenTableRow label=\"Allow TrustLine Clawback\" value={clawback} />\n        </tbody>\n      </table>\n    )\n  }\n\n  const renderHeaderContent = () => {\n    const { balance, sequence, obligations, reserve } = data\n    const currencyBalance = localizeNumber(\n      parseInt(balance, 10) / XRP_BASE || 0.0,\n      language,\n      CURRENCY_OPTIONS,\n    )\n    const reserveBalance = localizeNumber(\n      reserve || 0.0,\n      language,\n      CURRENCY_OPTIONS,\n    )\n    const obligationsBalance = formatLargeNumber(\n      Number.parseFloat(obligations || '0'),\n    )\n\n    return (\n      <div className=\"section header-container\">\n        <div className=\"info-container\">\n          <div className=\"values\">\n            <div className=\"title\">{t('accounts.xrp_balance')}</div>\n            <div className=\"value\">{currencyBalance}</div>\n          </div>\n          <div className=\"values\">\n            <div className=\"title\">{t('reserve')}</div>\n            <div className=\"value\">{reserveBalance}</div>\n          </div>\n          <div className=\"values\">\n            <div className=\"title\">{t('sequence_number_short')}</div>\n            <div className=\"value\">{sequence}</div>\n          </div>\n          <div className=\"values\">\n            <div className=\"title\">{t('issuer_address')}</div>\n            <div className=\"value\">\n              <Account account={accountId} />\n            </div>\n          </div>\n          <div className=\"values\">\n            <div className=\"title\">{t('obligations')}</div>\n            <div className=\"value\">\n              {obligationsBalance.num}\n              {obligationsBalance.unit}\n            </div>\n          </div>\n        </div>\n        <div className=\"bottom-container\">\n          <div className=\"details\">\n            <h2>{t('details')}</h2>\n            {renderDetails()}\n          </div>\n          <div className=\"settings\">\n            <h2 className=\"title\">{t('settings')}</h2>\n            {renderSettings()}\n          </div>\n        </div>\n      </div>\n    )\n  }\n\n  return (\n    <div className=\"box token-header-non-main\">\n      <div className=\"section box-header\">\n        <h1>\n          <Currency currency={currency} />\n        </h1>\n        {emailHash && (\n          <img\n            alt={`${currency} logo`}\n            src={`https://www.gravatar.com/avatar/${emailHash.toLowerCase()}`}\n          />\n        )}\n      </div>\n      <div className=\"box-content\">{renderHeaderContent()}</div>\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/TokenNonMain/TokenHeader/styles.scss",
    "content": "@use '../../shared/css/variables' as *;\n@use '../../shared/css/table';\n\n.token-header-non-main {\n  .header-container {\n    .bottom-container {\n      display: flex;\n      flex-direction: column;\n      padding-top: 64px;\n\n      @include for-size(desktop-up) {\n        flex-direction: row;\n        padding-top: 80px;\n      }\n\n      .details {\n        width: 100%;\n        @include for-size(desktop-up) {\n          width: 490px;\n        }\n      }\n\n      .settings {\n        width: 100%;\n        @include for-size(desktop-up) {\n          width: 650px;\n        }\n      }\n    }\n\n    .info-container {\n      display: flex;\n      flex-direction: column;\n      justify-content: space-between;\n      margin-top: 68px;\n\n      @include for-size(desktop-up) {\n        flex-direction: row;\n        margin-top: 80px;\n      }\n\n      .values {\n        display: flex;\n        flex-direction: row;\n        justify-content: space-between;\n        margin-bottom: 18px;\n        color: $white;\n\n        @include for-size(desktop-up) {\n          flex-direction: column;\n          margin-bottom: 0px;\n        }\n\n        .title {\n          padding-bottom: 4px;\n          color: $black-40;\n          font-size: 14px;\n          text-transform: uppercase;\n          @include semibold;\n        }\n\n        .value {\n          color: $white;\n          font-size: 18px;\n          line-height: 22.5px;\n          text-decoration: none;\n          @include bold;\n        }\n      }\n    }\n  }\n\n  .token-header {\n    margin-bottom: 16px;\n\n    .box-header {\n      display: flex;\n      flex-direction: row;\n      align-items: center;\n      margin-top: 106px;\n      text-align: left;\n\n      span {\n        margin: 0px;\n        color: $white;\n        font-size: 32px;\n        @include bold;\n\n        @include for-size(tablet-landscape-up) {\n          font-size: 42px;\n        }\n      }\n\n      img {\n        width: 24px;\n        height: 24px;\n        margin-left: 16px;\n        object-fit: contain;\n      }\n    }\n\n    .box-content {\n      min-height: 100px;\n      padding-bottom: 20px;\n    }\n\n    .column {\n      display: inline-block;\n      width: 100%;\n      vertical-align: top;\n\n      @include for-size(desktop-up) {\n        width: 450px;\n\n        &.second {\n          width: calc(100% - 450px);\n          text-align: right;\n        }\n      }\n\n      .secondary {\n        padding: 0px 8px;\n        border-bottom: 1px solid $black-20;\n        margin-bottom: 20px;\n        color: $black-90;\n        font-size: 12px;\n        @include bold;\n\n        @include for-size(desktop-up) {\n          border: none;\n        }\n\n        .title {\n          color: $black-40;\n          font-size: 14px;\n          text-transform: uppercase;\n          @include medium;\n        }\n\n        .label {\n          color: $black-40;\n          text-transform: uppercase;\n          @include medium;\n        }\n\n        ul {\n          padding: 0px;\n          margin: 0px;\n          list-style: none;\n\n          li {\n            padding: 1px;\n            vertical-align: top;\n\n            a {\n              display: inline-block;\n              overflow: hidden;\n              color: inherit;\n              text-overflow: ellipsis;\n              text-transform: none;\n              vertical-align: middle;\n              white-space: nowrap;\n              @include medium;\n            }\n\n            b {\n              color: $white;\n              word-break: break-all;\n              @include bold;\n            }\n\n            &.flags {\n              color: $blue-purple-30;\n              font-style: italic;\n            }\n          }\n        }\n\n        &.x-address ul {\n          width: 100%;\n\n          li {\n            display: flex;\n            justify-content: space-between;\n\n            @media (width >= 450px) {\n              display: block;\n            }\n\n            .tag {\n              font-weight: 500;\n            }\n\n            .network {\n              font-weight: 500;\n            }\n\n            &.tag-info {\n              padding-top: 14px;\n              font-size: 14px;\n            }\n          }\n        }\n\n        &.signer-list ul {\n          width: 100%;\n\n          li {\n            display: flex;\n            justify-content: space-between;\n\n            @media (width >= 450px) {\n              display: block;\n            }\n\n            .account {\n              overflow: hidden;\n              width: 285px;\n              padding-right: 10px;\n              color: $white;\n              text-overflow: ellipsis;\n              white-space: nowrap;\n            }\n\n            .weight {\n              text-align: right;\n              white-space: nowrap;\n            }\n\n            &.quorum {\n              display: block;\n            }\n          }\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "src/containers/TokenNonMain/TokenHeader/test/actNotFound.json",
    "content": "{\n  \"account\": \"rDsbeomae4FXwgQTJp9Rs64Qg9vDiTCdBv\",\n  \"error\": \"actNotFound\",\n  \"error_code\": 19,\n  \"error_message\": \"Account not found.\",\n  \"ledger_hash\": \"97992DBB4ED350B572B39D0026604943ACC84A3E5967454147253CB317551891\",\n  \"ledger_index\": 68989958,\n  \"request\": {\n    \"account\": \"rDsbeomae4FXwgQTJp9Rs64Qg9vDiTCdBv\",\n    \"command\": \"account_info\",\n    \"ledger_index\": \"validated\",\n    \"queue\": false,\n    \"signer_lists\": false,\n    \"strict\": false\n  },\n  \"validated\": true\n}\n"
  },
  {
    "path": "src/containers/TokenNonMain/TokenHeader/test/rippledResponses.json",
    "content": "{\n  \"account_info\": {\n    \"result\": {\n      \"account_data\": {\n        \"Account\": \"rDsbeomae4FXwgQTJp9Rs64Qg9vDiTCdBv\",\n        \"Balance\": \"123456000\",\n        \"Flags\": 0,\n        \"LedgerEntryType\": \"AccountRoot\",\n        \"OwnerCount\": 0,\n        \"PreviousTxnID\": \"6B6F2CA1633A22247058E988372BA9EFFFC5BF10212230B67341CA32DC9D4A82\",\n        \"PreviousTxnLgrSeq\": 68990183,\n        \"Sequence\": 2148991,\n        \"index\": \"C3B625B296E95A21D7BBBB7E3D343AF423B463B87B5D56EE7F79C8E16A47A6F5\",\n        \"signer_lists\": []\n      },\n      \"ledger_hash\": \"43C4195B2C90423771E6C5DF4AED11BF3D77FFD1E8A153A489E5B00C96318FCA\",\n      \"ledger_index\": 68990183,\n      \"validated\": true\n    },\n    \"status\": \"success\",\n    \"type\": \"response\"\n  },\n  \"account_objects\": {\n    \"result\": {\n      \"account\": \"rDsbeomae4FXwgQTJp9Rs64Qg9vDiTCdBv\",\n      \"account_objects\": [],\n      \"ledger_current_index\": 24402380,\n      \"validated\": false\n    },\n    \"status\": \"success\",\n    \"type\": \"response\"\n  },\n  \"gateway_balances\": {\n    \"result\": {\n      \"account\": \"rDsbeomae4FXwgQTJp9Rs64Qg9vDiTCdBv\",\n      \"ledger_hash\": \"F4023C801B8B4D05F16EFE5D8C4C3C14D02354AABBB94151F581A6BF0E04C20B\",\n      \"ledger_index\": 24402706,\n      \"obligations\": {\n        \"ABC\": \"100\"\n      },\n      \"validated\": true\n    },\n    \"status\": \"success\",\n    \"type\": \"response\"\n  },\n  \"server_info\": {\n    \"result\": {\n      \"info\": {\n        \"validated_ledger\": {\n          \"age\": 1,\n          \"base_fee_xrp\": 0.00001,\n          \"hash\": \"EA01E248FCA5CFD33A3393DA5EBCCD9219BA8DB6AF6DC28A3B0A968604F46A76\",\n          \"reserve_base_xrp\": 10,\n          \"reserve_inc_xrp\": 2,\n          \"seq\": 24402729\n        },\n        \"validation_quorum\": 5\n      }\n    },\n    \"status\": \"success\",\n    \"type\": \"response\"\n  }\n}\n"
  },
  {
    "path": "src/containers/TokenNonMain/TokenTransactionTable/TokenTransactionTable.tsx",
    "content": "import { useContext } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { useInfiniteQuery } from 'react-query'\n\nimport { useAnalytics } from '../../shared/analytics'\nimport SocketContext from '../../shared/SocketContext'\nimport { TransactionTable } from '../../shared/components/TransactionTable/TransactionTable'\nimport { getAccountTransactions } from '../../../rippled'\n\nexport interface TokenTransactionsTableProps {\n  accountId: string\n  currency: string\n}\n\nexport const TokenTransactionTable = ({\n  accountId,\n  currency,\n}: TokenTransactionsTableProps) => {\n  const { trackException } = useAnalytics()\n  const rippledSocket = useContext(SocketContext)\n  const { t } = useTranslation()\n\n  const {\n    data,\n    error,\n    isFetching: loading,\n    fetchNextPage,\n    hasNextPage,\n  } = useInfiniteQuery<any, Error>(\n    ['fetchTransactions', accountId, currency],\n    ({ pageParam = '' }) =>\n      getAccountTransactions(\n        accountId,\n        currency,\n        pageParam,\n        undefined,\n        rippledSocket,\n      ).catch((errorResponse) => {\n        const errorLocation = `token transactions ${accountId}.${currency} at ${pageParam}`\n        trackException(`${errorLocation} --- ${JSON.stringify(errorResponse)}`)\n\n        throw new Error('get_account_transactions_failed')\n      }),\n    {\n      getNextPageParam: (lastPage) => lastPage.marker,\n    },\n  )\n\n  return (\n    <TransactionTable\n      transactions={data?.pages?.map((page: any) => page.transactions).flat()}\n      loading={loading}\n      emptyMessage={t(error?.message || ('' as any))}\n      onLoadMore={() => fetchNextPage()}\n      hasAdditionalResults={hasNextPage}\n    />\n  )\n}\n"
  },
  {
    "path": "src/containers/TokenNonMain/TokenTransactionTable/index.tsx",
    "content": "export * from './TokenTransactionTable'\n"
  },
  {
    "path": "src/containers/TokenNonMain/TokenTransactionTable/test/TokenTransactionTable.test.tsx",
    "content": "import { render, fireEvent, waitFor } from '@testing-library/react'\nimport { I18nextProvider } from 'react-i18next'\nimport { BrowserRouter as Router } from 'react-router'\nimport { QueryClientProvider } from 'react-query'\nimport i18n from '../../../../i18n/testConfig'\nimport { TokenTransactionTable } from '../index'\nimport TEST_TRANSACTIONS_DATA from '../../../Accounts/AccountTransactionTable/test/mockTransactions.json'\n\nimport { getAccountTransactions } from '../../../../rippled'\nimport { testQueryClient } from '../../../test/QueryClient'\nimport { flushPromises } from '../../../test/utils'\nimport Mock = jest.Mock\n\njest.mock('../../../../rippled', () => ({\n  __esModule: true,\n  getAccountTransactions: jest.fn(),\n}))\n\nconst TEST_ACCOUNT_ID = 'rTEST_ACCOUNT'\nconst TEST_CURRENCY = 'abc'\n\ndescribe('TokenTransactionsTable container', () => {\n  const renderTokenTransactionTable = (\n    getAccountTransactionsImpl = () => new Promise(() => {}),\n  ) => {\n    ;(getAccountTransactions as Mock).mockImplementation(\n      getAccountTransactionsImpl,\n    )\n    return render(\n      <QueryClientProvider client={testQueryClient}>\n        <I18nextProvider i18n={i18n}>\n          <Router>\n            <TokenTransactionTable\n              accountId={TEST_ACCOUNT_ID}\n              currency={TEST_CURRENCY}\n            />\n          </Router>\n        </I18nextProvider>\n      </QueryClientProvider>,\n    )\n  }\n\n  it('renders static parts', () => {\n    const { container } = renderTokenTransactionTable()\n    expect(container.querySelectorAll('.transaction-table').length).toBe(1)\n  })\n\n  it('renders loader when fetching data', () => {\n    const { container } = renderTokenTransactionTable()\n    expect(container.querySelectorAll('.loader').length).toBe(1)\n  })\n\n  it('renders dynamic content with transaction data', async () => {\n    const { container } = renderTokenTransactionTable(() =>\n      Promise.resolve(TEST_TRANSACTIONS_DATA),\n    )\n\n    await flushPromises()\n    await waitFor(() => {\n      expect(container.querySelector('.load-more-btn')).toBeInTheDocument()\n    })\n    expect(container.querySelector('.transaction-table')).toBeInTheDocument()\n    expect(\n      container.querySelectorAll('.transaction-li.transaction-li-header')\n        .length,\n    ).toBe(1)\n    expect(container.querySelectorAll('a').length).toBe(60)\n\n    fireEvent.click(container.querySelector('.load-more-btn')!)\n    expect(getAccountTransactions).toHaveBeenCalledWith(\n      TEST_ACCOUNT_ID,\n      TEST_CURRENCY,\n      '44922483.5',\n      undefined,\n      undefined,\n    )\n  })\n\n  it('renders error message when request fails', async () => {\n    const { container } = renderTokenTransactionTable(() => Promise.reject())\n\n    await flushPromises()\n    await waitFor(() => {\n      expect(\n        container.querySelector('.empty-transactions-message'),\n      ).toBeInTheDocument()\n    })\n\n    expect(container.querySelector('.load-more-btn')).not.toBeInTheDocument()\n    expect(container.querySelector('.transaction-table')).toBeInTheDocument()\n    expect(\n      container.querySelector('.empty-transactions-message'),\n    ).toHaveTextContent('get_account_transactions_failed')\n    expect(container.querySelectorAll('a').length).toBe(0)\n  })\n})\n"
  },
  {
    "path": "src/containers/TokenNonMain/TokenTransactionTable/test/successfulAccountTx.json",
    "content": "{\n  \"result\": {\n    \"account\": \"rDsbeomae4FXwgQTJp9Rs64Qg9vDiTCdBv\",\n    \"limit\": 0,\n    \"transactions\": [\n      {\n        \"meta\": {\n          \"AffectedNodes\": [\n            {\n              \"ModifiedNode\": {\n                \"FinalFields\": {\n                  \"Account\": \"rPPbi1iNXmvY9HmJ9sH9g4gxvgVEfN4NaZ\",\n                  \"Balance\": \"316010893320\",\n                  \"Flags\": 0,\n                  \"OwnerCount\": 0,\n                  \"Sequence\": 57083165\n                },\n                \"LedgerEntryType\": \"AccountRoot\",\n                \"LedgerIndex\": \"1991E4EF8C9693AFFC9E200D112DFAD12449444CD8685FF859199B63B7C22341\",\n                \"PreviousFields\": {\n                  \"Balance\": \"316014663320\",\n                  \"Sequence\": 57083164\n                },\n                \"PreviousTxnID\": \"ADD23A6189E86A345821A1FBC7A076A677E08947D9D09856E2BD2A8B5D2CF751\",\n                \"PreviousTxnLgrSeq\": 68995185\n              }\n            },\n            {\n              \"ModifiedNode\": {\n                \"FinalFields\": {\n                  \"Account\": \"rBWpYJhuJWBPAkzJ4kYQqHShSkkF3rgeD\",\n                  \"Balance\": \"23750000\",\n                  \"Flags\": 131072,\n                  \"OwnerCount\": 0,\n                  \"Sequence\": 199377\n                },\n                \"LedgerEntryType\": \"AccountRoot\",\n                \"LedgerIndex\": \"96F9BDDED4A0E0F33AD1B28CC202B0E8FA357F3FC8EB2F716FE25B49B9BBA7FA\",\n                \"PreviousFields\": {\n                  \"Balance\": \"20000000\"\n                },\n                \"PreviousTxnID\": \"3832CD380B8EF414B3504FC63B5B3A28EC24284183E8E759985A657710559847\",\n                \"PreviousTxnLgrSeq\": 68995265\n              }\n            }\n          ],\n          \"TransactionIndex\": 54,\n          \"TransactionResult\": \"tesSUCCESS\",\n          \"delivered_amount\": \"3750000\"\n        },\n        \"tx\": {\n          \"Account\": \"rPPbi1iNXmvY9HmJ9sH9g4gxvgVEfN4NaZ\",\n          \"Amount\": {\n            \"currency\": \"ABC\",\n            \"issuer\": \"garbage\",\n            \"value\": \"3.75\"\n          },\n          \"Destination\": \"rBWpYJhuJWBPAkzJ4kYQqHShSkkF3rgeD\",\n          \"DestinationTag\": 2471596944,\n          \"Fee\": \"20000\",\n          \"Flags\": 2147483648,\n          \"LastLedgerSequence\": 68995327,\n          \"Sequence\": 57083164,\n          \"SigningPubKey\": \"02CA41BA17A2CDE0E5B7BEA8FC97CA0E9A196DCD5F524E4CA44F1C38B610F4A054\",\n          \"TransactionType\": \"Payment\",\n          \"TxnSignature\": \"304402200478EDD72D70A452C72EEA4AA9F3A72E6E706A594A373C54AC31810B351ADC2502200E4F4D0960AE6AF7ED93878FD35582507ACAD38CF5509DFD2BE1C67CA3C93C46\",\n          \"date\": 695430982,\n          \"hash\": \"7D150D03E799748425B45B59CF2511ACA58795EEC393663702C302A57460C53D\",\n          \"inLedger\": 68995325,\n          \"ledger_index\": 68995325\n        },\n        \"validated\": true\n      }\n    ],\n    \"used_postgres\": true,\n    \"validated\": true\n  },\n  \"status\": \"success\",\n  \"type\": \"response\"\n}\n"
  },
  {
    "path": "src/containers/TokenNonMain/index.tsx",
    "content": "import { FC, PropsWithChildren, useContext, useEffect } from 'react'\nimport { useTranslation } from 'react-i18next'\n\nimport { Helmet } from 'react-helmet-async'\nimport { useQuery } from 'react-query'\nimport { TokenHeader } from './TokenHeader'\nimport { TokenTransactionTable } from './TokenTransactionTable'\nimport NoMatch from '../NoMatch'\n\nimport './styles.scss'\nimport { NOT_FOUND, BAD_REQUEST } from '../shared/utils'\nimport { useAnalytics } from '../shared/analytics'\nimport { ErrorMessages } from '../shared/Interfaces'\nimport { TOKEN_ROUTE } from '../App/routes'\nimport { useRouteParams } from '../shared/routing'\nimport SocketContext from '../shared/SocketContext'\nimport { Loader } from '../shared/components/Loader'\nimport getToken from '../../rippled/token'\n\nconst ERROR_MESSAGES: ErrorMessages = {\n  default: {\n    title: 'generic_error',\n    hints: ['not_your_fault'],\n  },\n  [NOT_FOUND]: {\n    title: 'account_not_found',\n    hints: ['check_account_id'],\n  },\n  [BAD_REQUEST]: {\n    title: 'invalid_xrpl_address',\n    hints: ['check_account_id'],\n  },\n}\n\nconst getErrorMessage = (error) =>\n  ERROR_MESSAGES[error] || ERROR_MESSAGES.default\n\nconst Page: FC<PropsWithChildren<{ accountId: string }>> = ({\n  accountId,\n  children,\n}) => (\n  <div className=\"token-page-non-main\">\n    <Helmet title={`${accountId.substring(0, 12)}...`} />\n    {children}\n  </div>\n)\n\nexport const TokenNonMain = () => {\n  const rippledSocket = useContext(SocketContext)\n  const { trackScreenLoaded } = useAnalytics()\n  const { token = '' } = useRouteParams(TOKEN_ROUTE)\n  const [currency, accountId] = token.split('.')\n  const { t } = useTranslation()\n  const {\n    data: tokenData,\n    error: tokenDataError,\n    isLoading: isTokenDataLoading,\n  } = useQuery({\n    queryKey: ['token', currency, accountId],\n    queryFn: () => getToken(currency, accountId, rippledSocket),\n  })\n\n  useEffect(() => {\n    trackScreenLoaded({\n      issuer: accountId,\n      currency_code: currency,\n    })\n\n    return () => {\n      window.scrollTo(0, 0)\n    }\n  }, [accountId, currency, trackScreenLoaded])\n\n  const renderError = () => {\n    const message = getErrorMessage(tokenDataError)\n    return <NoMatch title={message.title} hints={message.hints} />\n  }\n\n  if (tokenDataError) {\n    return <Page accountId={accountId}>{renderError()}</Page>\n  }\n\n  return (\n    <Page accountId={accountId}>\n      {isTokenDataLoading ? (\n        <Loader />\n      ) : (\n        tokenData && (\n          <TokenHeader\n            accountId={accountId}\n            currency={currency}\n            data={tokenData}\n          />\n        )\n      )}\n      {accountId && tokenData && (\n        <div className=\"section\">\n          <h2>{t('token_transactions')}</h2>\n          <TokenTransactionTable accountId={accountId} currency={currency} />\n        </div>\n      )}\n      {!accountId && (\n        <div style={{ textAlign: 'center', fontSize: '14px' }}>\n          <h2>Enter an account ID in the search box</h2>\n        </div>\n      )}\n    </Page>\n  )\n}\n"
  },
  {
    "path": "src/containers/TokenNonMain/styles.scss",
    "content": "@use '../shared/css/variables';\n\n.token-page-non-main {\n  width: 100%;\n\n  .loader {\n    min-height: 100px;\n  }\n}\n"
  },
  {
    "path": "src/containers/TokenNonMain/test/index.test.tsx",
    "content": "import { render, waitFor } from '@testing-library/react'\nimport { Route } from 'react-router'\nimport i18n from '../../../i18n/testConfig'\nimport { TokenNonMain } from '../index'\nimport { flushPromises, QuickHarness } from '../../test/utils'\nimport { TOKEN_ROUTE } from '../../App/routes'\nimport mockAccount from '../../Accounts/test/mockAccountState.json'\nimport Mock = jest.Mock\nimport getToken from '../../../rippled/token'\n\njest.mock('../../../rippled/token', () => ({\n  __esModule: true,\n  default: jest.fn(),\n}))\n\ndescribe('Token container', () => {\n  const TEST_ACCOUNT_ID = 'rTEST_ACCOUNT'\n\n  const renderTokenNonMain = (getAccountImpl = () => new Promise(() => {})) => {\n    ;(getToken as Mock).mockImplementation(getAccountImpl)\n    return render(\n      <QuickHarness\n        i18n={i18n}\n        initialEntries={[`/token/USD.${TEST_ACCOUNT_ID}`]}\n      >\n        <Route path={TOKEN_ROUTE.path} element={<TokenNonMain />} />\n      </QuickHarness>,\n    )\n  }\n\n  beforeEach(() => {\n    jest.resetModules()\n  })\n\n  it('renders without crashing', () => {\n    renderTokenNonMain()\n  })\n\n  it('renders static parts', async () => {\n    const { container } = renderTokenNonMain(() => Promise.resolve(mockAccount))\n    await flushPromises()\n    await waitFor(() => {\n      // TokenHeader renders with class 'token-header-non-main'\n      expect(container.querySelectorAll('.token-header-non-main').length).toBe(\n        1,\n      )\n    })\n    // TokenTransactionTable renders with class 'transaction-table'\n    expect(container.querySelectorAll('.transaction-table').length).toBe(1)\n  })\n})\n"
  },
  {
    "path": "src/containers/Tokens/TokensTable.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { FC } from 'react'\nimport { Loader } from '../shared/components/Loader'\nimport Currency from '../shared/components/Currency'\nimport { LOSToken } from '../shared/losTypes'\nimport { Account } from '../shared/components/Account'\nimport UpIcon from '../shared/images/ic_up.svg'\nimport DownIcon from '../shared/images/ic_down.svg'\nimport SortTableColumn from '../shared/components/SortColumn'\nimport { RouteLink } from '../shared/routing'\nimport { TOKEN_ROUTE } from '../App/routes'\nimport { shortenAccount } from '../shared/utils'\nimport {\n  parseCurrencyAmount,\n  parsePercent,\n  parseIntegerAmount,\n  parsePrice,\n} from '../shared/NumberFormattingUtils'\n\ntype SortOrder = 'asc' | 'desc'\n\ninterface TokensTableProps {\n  tokens: LOSToken[]\n  sortField: string\n  sortOrder: SortOrder\n  setSortField: (field: string) => void\n  setSortOrder: (order: SortOrder) => void\n  setPage: (page: number) => void\n}\n\nconst DEFAULT_EMPTY_VALUE = '--'\n\nconst TokenLogo: FC<{ icon: string | undefined }> = ({ icon }) =>\n  icon ? (\n    <object data={icon} className=\"icon\">\n      <div className=\"icon\" />\n    </object>\n  ) : (\n    <div className=\"icon no-logo\" />\n  )\n\nconst PriceChange: FC<{ percent: number }> = ({ percent }) => (\n  <div className={`percent ${percent > 0 ? 'increase' : 'decrease'}`}>\n    <div className=\"amount\">\n      {percent > 0\n        ? parsePercent(percent)\n        : parsePercent(percent).replace('-', '')}\n    </div>\n    {percent > 0 ? (\n      <UpIcon className=\"arrow\" />\n    ) : (\n      <DownIcon className=\"arrow\" />\n    )}\n  </div>\n)\n\nexport const TokensTable = ({\n  tokens,\n  sortField,\n  setSortField,\n  sortOrder,\n  setSortOrder,\n  setPage,\n}: TokensTableProps) => {\n  const { t } = useTranslation()\n\n  const renderIssuer = (token: LOSToken) => (\n    <div className=\"issuer-content\">\n      {token.issuer_name && (\n        <span className=\"issuer-name\">{token.issuer_name} (</span>\n      )}\n      <Account\n        account={token.issuer_account}\n        displayText={shortenAccount(token.issuer_account)}\n      />\n      {token.issuer_name && <span>)</span>}\n    </div>\n  )\n\n  const renderToken = (token: LOSToken) => (\n    <tr key={`${token.currency}.${token.issuer_account}`}>\n      <td className=\"count\">{token.index}</td>\n      <td className=\"name\">\n        <TokenLogo icon={token.icon} />\n        <RouteLink\n          to={TOKEN_ROUTE}\n          params={{ token: `${token.currency}.${token.issuer_account}` }}\n          className=\"text-truncate\"\n        >\n          <Currency currency={token.currency} />\n        </RouteLink>\n      </td>\n      <td className=\"issuer text-truncate\">{renderIssuer(token)}</td>\n      <td className=\"price\">\n        {token.price_usd && Number(token.price_usd) !== 0\n          ? parsePrice(token.price_usd)\n          : DEFAULT_EMPTY_VALUE}\n      </td>\n\n      <td className=\"24h\">\n        {token.price_change ? (\n          <PriceChange percent={token.price_change} />\n        ) : (\n          DEFAULT_EMPTY_VALUE\n        )}\n      </td>\n      <td className=\"volume\">\n        {token.daily_volume_usd && Number(token.daily_volume_usd) !== 0\n          ? parseCurrencyAmount(token.daily_volume_usd)\n          : DEFAULT_EMPTY_VALUE}\n      </td>\n      <td className=\"trades\">\n        {token.daily_trades && Number(token.daily_trades) !== 0\n          ? parseIntegerAmount(token.daily_trades)\n          : DEFAULT_EMPTY_VALUE}\n      </td>\n      <td className=\"holders\">\n        {token.holders && Number(token.holders) !== 0\n          ? parseIntegerAmount(token.holders)\n          : DEFAULT_EMPTY_VALUE}\n      </td>\n      <td className=\"tvl\">\n        {token.tvl_usd && Number(token.tvl_usd) !== 0\n          ? parseCurrencyAmount(token.tvl_usd)\n          : DEFAULT_EMPTY_VALUE}\n      </td>\n      <td className=\"market-cap\">\n        {token.market_cap_usd && Number(token.market_cap_usd) !== 0\n          ? parseCurrencyAmount(token.market_cap_usd)\n          : DEFAULT_EMPTY_VALUE}\n      </td>\n    </tr>\n  )\n\n  return tokens.length > 0 ? (\n    <div className=\"tokens-table\">\n      <div className=\"table-wrap\">\n        <table className=\"basic\">\n          <thead>\n            <tr>\n              <th className=\"count\">#</th>\n              <th className=\"name-col\">{t('name')}</th>\n              <th className=\"issuer\">{t('issuer')}</th>\n              <SortTableColumn\n                field=\"price\"\n                label={t('price')}\n                sortField={sortField}\n                setSortField={setSortField}\n                sortOrder={sortOrder}\n                setSortOrder={setSortOrder}\n                setPage={setPage}\n              />\n              <SortTableColumn\n                field=\"24h\"\n                label={t('24H')}\n                sortField={sortField}\n                setSortField={setSortField}\n                sortOrder={sortOrder}\n                setSortOrder={setSortOrder}\n                setPage={setPage}\n                tooltip\n              />\n              <SortTableColumn\n                field=\"volume\"\n                label={t('volume')}\n                sortField={sortField}\n                setSortField={setSortField}\n                sortOrder={sortOrder}\n                setSortOrder={setSortOrder}\n                setPage={setPage}\n                tooltip\n              />\n              <SortTableColumn\n                field=\"trades\"\n                label={t('trades')}\n                sortField={sortField}\n                setSortField={setSortField}\n                sortOrder={sortOrder}\n                setSortOrder={setSortOrder}\n                setPage={setPage}\n                tooltip\n              />\n              <SortTableColumn\n                field=\"holders\"\n                label={t('holders')}\n                sortField={sortField}\n                setSortField={setSortField}\n                sortOrder={sortOrder}\n                setSortOrder={setSortOrder}\n                setPage={setPage}\n              />\n              <SortTableColumn\n                field=\"tvl\"\n                label={t('tvl')}\n                sortField={sortField}\n                setSortField={setSortField}\n                sortOrder={sortOrder}\n                setSortOrder={setSortOrder}\n                setPage={setPage}\n                tooltip\n              />\n              <SortTableColumn\n                field=\"market_cap\"\n                label={t('market_cap')}\n                sortField={sortField}\n                setSortField={setSortField}\n                sortOrder={sortOrder}\n                setSortOrder={setSortOrder}\n                setPage={setPage}\n                tooltip\n              />\n            </tr>\n          </thead>\n          <tbody>{tokens.map(renderToken)}</tbody>\n        </table>\n      </div>\n    </div>\n  ) : (\n    <Loader />\n  )\n}\n"
  },
  {
    "path": "src/containers/Tokens/index.tsx",
    "content": "import axios from 'axios'\nimport { useQuery } from 'react-query'\nimport { FC, useCallback, useMemo, useState, useEffect } from 'react'\nimport { Trans, useTranslation } from 'react-i18next'\nimport { Link } from 'react-router'\nimport Log from '../shared/log'\nimport { TokensTable } from './TokensTable'\nimport { parseCurrencyAmount } from '../shared/NumberFormattingUtils'\nimport './tokens.scss'\nimport { Pagination } from '../shared/components/Pagination'\nimport { Loader } from '../shared/components/Loader'\nimport { LOSToken } from '../shared/losTypes'\nimport { Tooltip, useTooltip } from '../shared/components/Tooltip'\nimport HoverIcon from '../shared/images/hover.svg'\nimport { useAnalytics } from '../shared/analytics'\n\ninterface FilterProps {\n  categories: CategoryKey[]\n  filterField: string\n  setFilterField: (field: string) => void\n  setPage: (page: number) => void\n}\n\ninterface TokensData {\n  tokens: LOSToken[]\n  metrics: {\n    count: number\n    market_cap: string\n    volume_24h: string\n    stablecoin: string\n  }\n}\n\ntype CategoryKey = 'stablecoin' | 'wrapped'\n\nconst TOOLTIP_Y_OFFSET = 80\n\nconst PAGE_SIZE = 15\nconst Filter: FC<FilterProps> = ({\n  categories,\n  filterField,\n  setFilterField,\n  setPage,\n}) => {\n  const { t } = useTranslation()\n\n  const handleClick = (cat) => {\n    if (filterField === cat) {\n      setFilterField('')\n    } else {\n      setFilterField(cat)\n    }\n    setPage(1)\n  }\n\n  return (\n    <div className=\"filter\">\n      <div className=\"filter-icon\" />\n      {categories.map((cat) => (\n        <button\n          key={cat}\n          className={`filter-field ${cat === filterField ? 'selected' : ''}`}\n          onClick={() => handleClick(cat)}\n          type=\"button\"\n        >\n          <div className={`item-icon icon-${cat}`} />\n          <div className=\"filter-label\">{t(cat)}</div>\n        </button>\n      ))}\n    </div>\n  )\n}\n\nexport const Tokens = () => {\n  const [sortField, setSortField] = useState('market_cap')\n  const [sortOrder, setSortOrder] = useState<'asc' | 'desc'>('desc')\n  const [filterField, setFilterField] = useState('')\n  const [page, setPage] = useState(1)\n  const { tooltip, showTooltip, hideTooltip } = useTooltip()\n\n  const { t } = useTranslation()\n  const { trackScreenLoaded, trackException } = useAnalytics()\n\n  // Track page load\n  useEffect(() => {\n    trackScreenLoaded()\n  }, [trackScreenLoaded])\n\n  const filterCategories: CategoryKey[] = ['stablecoin', 'wrapped']\n\n  const { data: tokensData } = useQuery<TokensData>(\n    ['fetchTokens'],\n    () => fetchTokens(),\n    {\n      refetchInterval: 60 * 1000,\n      onError: (error) => {\n        Log.error(error)\n        trackException(`tokens fetch --- ${JSON.stringify(error)}`)\n      },\n    },\n  )\n\n  const filteredTokens = useMemo(() => {\n    if (!tokensData || !tokensData.tokens) return []\n\n    if (filterField === '') {\n      return tokensData.tokens\n    }\n\n    return tokensData.tokens.filter(\n      (token) =>\n        token.asset_class === filterField ||\n        token.asset_subclass === filterField,\n    )\n  }, [tokensData, filterField])\n\n  const renderTextTooltip = (key: string) => (\n    <HoverIcon\n      className=\"hover\"\n      onMouseOver={(e) => {\n        const rect = e.currentTarget.getBoundingClientRect()\n        showTooltip('text', e, t(`${key}_description`, { defaultValue: '' }), {\n          x: rect.left + rect.width / 2,\n          y: rect.top - TOOLTIP_Y_OFFSET,\n        })\n      }}\n      onMouseLeave={() => hideTooltip()}\n    />\n  )\n\n  const getSortValue = (token, field) => {\n    switch (field) {\n      case 'price':\n        return Number(token.price ?? 0)\n      case 'holders':\n        return Number(token.holders) ?? 0\n      case 'market_cap':\n        return Number(token.market_cap_usd ?? 0)\n      case '24h':\n        return token.price_change ?? 0\n      case 'volume':\n        return Number(token.daily_volume ?? 0)\n      case 'trades':\n        return Number(token.daily_trades) ?? 0\n      case 'tvl':\n        return token.tvl_xrp ?? 0\n      default:\n        return 0\n    }\n  }\n\n  const sortTokens = useCallback(\n    (tokens: LOSToken[]) =>\n      [...tokens].sort((a, b) => {\n        const aVal = getSortValue(a, sortField)\n        const bVal = getSortValue(b, sortField)\n        if (aVal < bVal) return sortOrder === 'asc' ? -1 : 1\n        if (aVal > bVal) return sortOrder === 'asc' ? 1 : -1\n        return 0\n      }),\n    [sortField, sortOrder],\n  )\n\n  const sortedTokens = useMemo(\n    () => sortTokens(filteredTokens),\n    [filteredTokens, sortTokens],\n  )\n\n  const fetchTokens = () =>\n    axios.get('/api/v1/tokens').then((response) => ({\n      tokens: response.data.tokens,\n      metrics: response.data.metrics,\n    }))\n  const start = (page - 1) * PAGE_SIZE\n\n  const pagedTokens = sortedTokens\n    .slice(start, start + PAGE_SIZE)\n    .map((token, idx) => ({\n      ...token,\n      index: start + idx + 1,\n    }))\n\n  return (\n    <div className=\"tokens-page\">\n      <Tooltip tooltip={tooltip} />\n      <div className=\"type\">{t('tokens')}</div>\n      {tokensData?.metrics && (\n        <div className=\"metrics-wrapper\">\n          <div className=\"metric\">\n            <div className=\"title\">{t('no_of_tokens')}</div>\n            <div className=\"val\">{tokensData.metrics.count}</div>\n          </div>\n          <div className=\"metric\">\n            <div className=\"title\">\n              <span>{t('market_cap')}</span>\n              {renderTextTooltip('market_cap_metric')}\n            </div>\n            <div className=\"val\">\n              {parseCurrencyAmount(tokensData.metrics.market_cap)}\n            </div>\n          </div>\n          <div className=\"metric\">\n            <div className=\"title\">\n              <span>{t('volume_24h_total')}</span>\n              {renderTextTooltip('volume_24h_total')}\n            </div>\n            <div className=\"val\">\n              {parseCurrencyAmount(tokensData.metrics.volume_24h)}\n            </div>\n          </div>\n          <div className=\"metric\">\n            <div className=\"title\">\n              <span>{t('stablecoin')}</span>\n              {renderTextTooltip('stablecoin')}\n            </div>\n            <div className=\"val\">\n              {parseCurrencyAmount(tokensData.metrics.stablecoin)}\n            </div>\n          </div>\n        </div>\n      )}\n      {pagedTokens.length > 0 ? (\n        <>\n          <Filter\n            categories={filterCategories}\n            filterField={filterField}\n            setFilterField={setFilterField}\n            setPage={setPage}\n          />\n          <TokensTable\n            tokens={pagedTokens}\n            sortField={sortField}\n            setSortField={setSortField}\n            sortOrder={sortOrder}\n            setSortOrder={setSortOrder}\n            setPage={setPage}\n          />\n          <div className=\"footnote\">\n            <Trans\n              i18nKey=\"tokens_footnote\"\n              components={{\n                Link: (\n                  <Link to=\"https://xrplmeta.org\">{` ${t('xrplmeta_guidelines')}`}</Link>\n                ),\n              }}\n            />\n          </div>\n          <Pagination\n            totalItems={sortedTokens.length}\n            currentPage={page}\n            onPageChange={setPage}\n          />\n        </>\n      ) : (\n        <Loader />\n      )}\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/Tokens/test/index.test.tsx",
    "content": "import { render, waitFor } from '@testing-library/react'\nimport moxios from 'moxios'\nimport { Route } from 'react-router'\nimport i18n from '../../../i18n/testConfigEnglish'\nimport { Tokens } from '..'\nimport NetworkContext from '../../shared/NetworkContext'\nimport { flushPromises, QuickHarness } from '../../test/utils'\nimport tokensData from './mock_data/tokens.json'\nimport { TOKENS_ROUTE } from '../../App/routes'\n\njest.mock('usehooks-ts', () => ({\n  useWindowSize: () => ({\n    width: 375,\n    height: 600,\n  }),\n}))\n\ndescribe('Tokens Page container', () => {\n  const renderTokens = () =>\n    render(\n      <NetworkContext.Provider value=\"main\">\n        <QuickHarness i18n={i18n} initialEntries={['/tokens']}>\n          <Route path={TOKENS_ROUTE.path} element={<Tokens />} />\n        </QuickHarness>\n      </NetworkContext.Provider>,\n    )\n\n  const oldEnvs = process.env\n\n  beforeEach(() => {\n    moxios.install()\n    process.env = { ...oldEnvs, VITE_ENVIRONMENT: 'mainnet' }\n  })\n\n  afterEach(() => {\n    moxios.uninstall()\n    process.env = oldEnvs\n  })\n\n  it('renders without crashing', () => {\n    renderTokens()\n  })\n\n  it('renders all parts', async () => {\n    moxios.stubRequest('/api/v1/tokens', {\n      status: 200,\n      response: tokensData,\n    })\n    const { container } = renderTokens()\n    await flushPromises()\n    await waitFor(() => {\n      expect(container.querySelectorAll('.tokens-page').length).toBe(1)\n      expect(container.querySelectorAll('.metric').length).toBe(4)\n    })\n\n    // Metrics\n    const metrics = container.querySelectorAll('.metric')\n\n    expect(metrics[0].querySelector('.title')?.textContent).toContain(\n      '# of Tokens',\n    )\n    expect(metrics[0].querySelector('.val')?.textContent).toContain('2')\n\n    expect(metrics[1].querySelector('.title')?.textContent).toContain(\n      'Market Cap',\n    )\n    expect(metrics[1].querySelector('.val')?.textContent).toContain('$152.1M')\n\n    expect(metrics[2].querySelector('.title')?.textContent).toContain(\n      'DEX Traded Volume (24H)',\n    )\n    expect(metrics[2].querySelector('.val')?.textContent).toContain('$1.0M')\n\n    expect(metrics[3].querySelector('.title')?.textContent).toContain(\n      'Stablecoin',\n    )\n    expect(metrics[3].querySelector('.val')?.textContent).toContain('$25.9M')\n\n    // Filter\n    const filters = container.querySelectorAll('.filter-field')\n\n    expect(filters.length).toBe(2)\n\n    expect(filters[0].querySelector('.filter-label')?.textContent).toContain(\n      'Stablecoin',\n    )\n\n    expect(filters[1].querySelector('.filter-label')?.textContent).toContain(\n      'Wrapped',\n    )\n\n    // Tokens Table\n    expect(container.querySelectorAll('.tokens-table').length).toBe(1)\n\n    // Table Headers\n    expect(container.querySelector('th.count')?.textContent).toContain('#')\n    expect(container.querySelector('th.name-col')?.textContent).toContain(\n      'name',\n    )\n    expect(container.querySelector('th.issuer')?.textContent).toContain(\n      'Issuer',\n    )\n    expect(container.querySelector('th.price')?.textContent).toContain('Price')\n    expect(container.querySelector('th.volume')?.textContent).toContain(\n      'Volume',\n    )\n    expect(container.querySelector('th.trades')?.textContent).toContain(\n      'Trades',\n    )\n    expect(container.querySelector('th.holders')?.textContent).toContain(\n      'Holders',\n    )\n    expect(container.querySelector('th.tvl')?.textContent).toContain('TVL')\n    expect(container.querySelector('th.market_cap')?.textContent).toContain(\n      'Market Cap',\n    )\n\n    // Table Rows\n    // find all table rows excluding header\n    const rows = Array.from(container.querySelectorAll('tr')).filter(\n      (row) => !row.querySelector('th'),\n    )\n    expect(rows).toHaveLength(2)\n\n    const firstRow = rows[0]\n    expect(firstRow.querySelector('td.count')?.textContent).toContain('1')\n    expect(firstRow.querySelector('td.name')?.textContent).toContain('SOLO')\n    expect(firstRow.querySelector('td.issuer')?.textContent).toContain(\n      'Sologenic',\n    )\n    expect(firstRow.querySelector('td.price')?.textContent).toContain('$0.2')\n    expect(firstRow.querySelector('td.volume')?.textContent).toContain(\n      '$138.7K',\n    )\n    expect(firstRow.querySelector('td.trades')?.textContent).toContain('1,847')\n    expect(firstRow.querySelector('td.holders')?.textContent).toContain(\n      '218.1K',\n    )\n    expect(firstRow.querySelector('td.tvl')?.textContent).toContain('$1.1M')\n    expect(firstRow.querySelector('td.market-cap')?.textContent).toContain(\n      '$91.2M',\n    )\n  })\n})\n"
  },
  {
    "path": "src/containers/Tokens/test/mock_data/tokens.json",
    "content": "{\n  \"tokens\": [\n    {\n      \"price_change\": 0.746248798476897,\n      \"issuer_name\": \"Sologenic\",\n      \"currency\": \"534F4C4F00000000000000000000000000000000\",\n      \"daily_trades\": \"1847\",\n      \"market_cap_usd\": \"91217077.26694413936\",\n      \"icon\": \"https://s1.xrplmeta.org/icon/C40439709A.png\",\n      \"ttl\": 1759942477,\n      \"social_links\": [],\n      \"name\": \"SOLO\",\n      \"tvl_xrp\": 373092.61469,\n      \"issuer_account\": \"rsoLo2S1kiGeCcn6hCUXVrCpGMWLrRrLZz\",\n      \"market_cap\": \"31869122.528839\",\n      \"holders\": 218050,\n      \"circ_supply\": \"398767902.72876\",\n      \"price_usd\": \"0.22874729044826992085\",\n      \"issuer_domain\": \"sologenic.com\",\n      \"daily_volume\": \"48471.8879079974\",\n      \"trustlines\": 284089,\n      \"supply\": \"398767902.72876\",\n      \"trust_level\": 3,\n      \"price\": \"0.0799189762033477\",\n      \"daily_volume_usd\": \"138738.17644578647818\",\n      \"tvl_usd\": \"1067880.6054703056\"\n    },\n    {\n      \"issuer_name\": \"Ripple\",\n      \"currency\": \"524C555344000000000000000000000000000000\",\n      \"market_cap_usd\": \"91154997.79932249888\",\n      \"icon\": \"https://s1.xrplmeta.org/icon/5CEA036903.png\",\n      \"asset_class\": \"rwa\",\n      \"ttl\": 1759942477,\n      \"social_links\": [],\n      \"name\": \"Ripple USD\",\n      \"market_cap\": \"31847433.408562\",\n      \"holders\": 35893,\n      \"circ_supply\": \"61205633.288940\",\n      \"daily_volume\": \"815899.306129985\",\n      \"asset_subclass\": \"stablecoin\",\n      \"daily_volume_usd\": \"2335299.6299774882664\",\n      \"price_change\": 1.82092029404823,\n      \"daily_trades\": \"10544\",\n      \"tvl_xrp\": 1358331.016864,\n      \"issuer_account\": \"rMxCKbEDwqr76QuheSUMdEGf4B9xJ8m5De\",\n      \"price_usd\": \"0.9994448205797025864\",\n      \"issuer_domain\": \"https://ripple.com/\",\n      \"trustlines\": 70617,\n      \"supply\": \"91205633.2899401\",\n      \"trust_level\": 3,\n      \"price\": \"0.349182745185485\",\n      \"tvl_usd\": \"3887869.36970881536\"\n    }\n  ],\n  \"metrics\": {\n    \"count\": 2,\n    \"market_cap\": \"152070284.207342\",\n    \"volume_24h\": \"1043225.609494\",\n    \"rwa\": \"25958016.241591\",\n    \"stablecoin\": \"25927913.484817\"\n  }\n}\n"
  },
  {
    "path": "src/containers/Tokens/tokens.scss",
    "content": "@use '../shared/css/variables' as *;\n@use '../shared/css/table';\n\n.tokens-page {\n  overflow: visible;\n  width: 100%;\n  max-width: 1500px;\n  min-height: 150px;\n  margin: auto;\n  margin-top: 40px;\n\n  .text-truncate {\n    @extend %truncate;\n  }\n\n  .metrics-wrapper {\n    padding: 16px 16px 4px;\n    border: 1px solid $black-60;\n    margin-right: 24px;\n    margin-bottom: 40px;\n    margin-left: 24px;\n    background-color: $black-80;\n    font-size: 12px;\n\n    .metric {\n      display: flex;\n      align-items: center;\n      justify-content: space-between;\n      margin-bottom: 12px;\n      background-color: $black-80;\n      gap: 6px;\n      white-space: nowrap;\n\n      .title {\n        display: flex;\n        align-items: center;\n        color: $black-40;\n        gap: 8px;\n        line-height: 150%;\n        text-transform: uppercase;\n        white-space: nowrap;\n        @include bold;\n      }\n\n      .val {\n        @include bold;\n      }\n    }\n  }\n\n  .type {\n    display: inline-block;\n    margin-bottom: 80px;\n    margin-left: 24px;\n    color: $white;\n    font-size: 32px;\n\n    @include bold;\n  }\n\n  .count {\n    position: sticky;\n  }\n\n  .name {\n    position: sticky;\n    display: inline-flex;\n    max-width: 120px;\n    align-items: center;\n    gap: 4px;\n    @include for-size(desktop-up) {\n      gap: 8px;\n    }\n\n    .icon {\n      width: 18px;\n      height: 18px;\n      flex-shrink: 0;\n\n      @include for-size(desktop-up) {\n        width: 24px;\n        height: 24px;\n      }\n    }\n  }\n\n  .issuer {\n    max-width: 140px;\n    @include for-size(tablet-landscape-up) {\n      max-width: 200px;\n    }\n    @include for-size(desktop-up) {\n      max-width: 240px;\n    }\n  }\n\n  .issuer-content {\n    display: flex;\n    overflow: hidden;\n    width: 100%;\n    min-width: 0;\n    align-items: center;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n\n    .issuer-name {\n      overflow: hidden;\n      max-width: 60%;\n      flex-shrink: 0;\n      text-overflow: ellipsis;\n    }\n\n    .account {\n      overflow: hidden;\n      min-width: 0;\n      flex-shrink: 1;\n      text-overflow: ellipsis;\n    }\n  }\n\n  .percent {\n    display: inline-flex;\n    align-items: center;\n    gap: 8px;\n\n    .arrow {\n      width: 10px;\n      height: 10px;\n    }\n\n    &.increase {\n      color: $green-50;\n    }\n\n    &.decrease {\n      color: $orange-50;\n    }\n  }\n\n  .filter {\n    display: flex;\n    flex-wrap: wrap;\n    align-items: center;\n    margin-bottom: 40px;\n    margin-left: 24px;\n    gap: 12px;\n\n    .filter-icon {\n      width: 24px;\n      height: 24px;\n      flex-shrink: 0;\n      background-image: url('../shared/images/group.svg');\n    }\n\n    .filter-field {\n      display: flex;\n      flex: 0 0 auto;\n      align-items: center;\n      padding: 6px 12px;\n      border: 1px solid $black-50;\n      border-radius: $border-radius;\n      background-color: $black;\n      color: $white;\n      cursor: pointer;\n      font-size: 12px;\n      gap: 8px;\n      text-transform: capitalize;\n      @include medium;\n\n      .item-icon {\n        width: 20px;\n        height: 20px;\n        background-size: contain;\n      }\n\n      &:hover {\n        background-color: $black-70;\n      }\n\n      &.selected {\n        background-color: $white;\n        color: $black;\n\n        :hover {\n          color: $black;\n        }\n\n        .item-icon {\n          filter: invert(1);\n        }\n      }\n    }\n\n    .icon-stablecoin {\n      background: url('../shared/images/stablecoin.svg');\n    }\n\n    .icon-rwa {\n      background: url('../shared/images/rwa.svg');\n    }\n\n    .icon-wrapped {\n      background: url('../shared/images/wrapped.svg');\n    }\n\n    .icon-memes {\n      background: url('../shared/images/memes.svg');\n    }\n  }\n\n  .footnote {\n    @include footnote;\n\n    a::after {\n      content: none !important;\n    }\n  }\n\n  @include for-size(tablet-landscape-up) {\n    padding-right: 24px;\n    padding-left: 24px;\n\n    .metrics-wrapper {\n      display: flex;\n      flex-wrap: wrap;\n      padding: 0;\n      border: none;\n      margin-right: 0;\n      margin-left: 0;\n      background-color: transparent;\n      gap: 32px;\n\n      .metric {\n        display: block !important;\n        flex-direction: column;\n        padding: 14px 20px;\n        border-radius: $border-radius;\n        margin-bottom: 0;\n        @include semibold;\n      }\n    }\n\n    table.basic {\n      font-size: 14px;\n    }\n\n    .type {\n      margin-left: 0;\n    }\n\n    .filter {\n      margin-left: 0;\n    }\n  }\n\n  @include for-size(desktop-up) {\n    padding-right: 150px;\n    padding-left: 150px;\n    margin: auto;\n    margin-top: 100px;\n\n    .metrics-wrapper {\n      font-size: 16px;\n    }\n\n    .filter {\n      .filter-field {\n        padding: 8px 16px;\n        font-size: 16px;\n      }\n    }\n\n    .type {\n      margin-left: auto;\n      font-size: 42px;\n    }\n  }\n}\n"
  },
  {
    "path": "src/containers/Transactions/DetailTab/Description.tsx",
    "content": "import { useTranslation, Trans } from 'react-i18next'\nimport { FC } from 'react'\nimport { Sequence } from '../../shared/components/Sequence'\nimport { transactionTypes } from '../../shared/components/Transaction'\nimport { Account } from '../../shared/components/Account'\n\nexport const TransactionDescription: FC<{ data: any }> = ({ data }) => {\n  const { t } = useTranslation()\n\n  if (!data || !data.tx) {\n    return null\n  }\n\n  // Locate the component description section of the detail tab that is unique per TransactionType.\n  const DescriptionComponent =\n    transactionTypes[data.tx.TransactionType]?.Description\n\n  return (\n    <div className=\"detail-section\">\n      <div className=\"title\">{t('description')}</div>\n      <div>\n        {t('transaction_sequence')}{' '}\n        <b>\n          <Sequence\n            sequence={data.tx.Sequence}\n            ticketSequence={data.tx.TicketSequence}\n            account={data.tx.Account}\n            isHook={!!data.tx.EmitDetails}\n            addContextHelp\n          />\n        </b>\n      </div>\n      {data.tx.Delegate && (\n        <div data-testid=\"delegate\">\n          <Trans\n            i18nKey=\"tx_delegated_to\"\n            components={{ Account: <Account account={data.tx.Delegate} /> }}\n          />\n        </div>\n      )}\n      {DescriptionComponent && <DescriptionComponent data={data} />}\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/Transactions/DetailTab/HookDetails.tsx",
    "content": "import { FC } from 'react'\nimport { Trans, useTranslation } from 'react-i18next'\nimport { convertHexToString } from '../../../rippled/lib/utils'\nimport { Account } from '../../shared/components/Account'\nimport { RouteLink } from '../../shared/routing'\nimport { TRANSACTION_ROUTE } from '../../App/routes'\n\nconst renderHookParameterName = (name: string) => {\n  // Example:\n  // 4556520100000000000000000000000000000000000000000000000000000002 -> EVR 2\n  const split = name.split('0000').filter((d) => d !== '')\n  if (split.length === 2) {\n    return `${convertHexToString(split[0])}${Number(split[1])}`\n  }\n  return name\n}\n\nconst EmitDetails: FC<{ emitDetails: any }> = ({ emitDetails }) => {\n  const { t } = useTranslation()\n  return (\n    <div className=\"detail-subsection\" data-testid=\"emit-details\">\n      <div className=\"detail-subtitle\">{t('emit_details')}</div>\n      <li className=\"detail-line\">\n        <Trans\n          i18nKey=\"emit_generation\"\n          values={{ emit: emitDetails.EmitGeneration }}\n        />\n      </li>\n      <li className=\"detail-line\">\n        <Trans\n          i18nKey=\"emit_hook_hash\"\n          values={{ hash: emitDetails.EmitHookHash }}\n        />\n      </li>\n      <li className=\"detail-line\">\n        <Trans\n          i18nKey=\"emit_parent\"\n          values={{\n            hash: `${emitDetails.EmitParentTxnID.substring(20)}...`,\n          }}\n        >\n          <RouteLink\n            className=\"hash\"\n            to={TRANSACTION_ROUTE}\n            params={{ identifier: emitDetails.EmitParentTxnID }}\n          />\n        </Trans>\n      </li>\n      {emitDetails.EmitCallback && (\n        <li className=\"detail-line\">\n          <Trans\n            i18nKey=\"emit_callback\"\n            values={{ callback: emitDetails.EmitCallback }}\n          >\n            <Account account={emitDetails.EmitCallback} />\n          </Trans>\n        </li>\n      )}\n    </div>\n  )\n}\n\nconst HookParameter: FC<{ HookParameter: any }> = ({\n  HookParameter: param,\n}) => (\n  <li key={param.HookParameterName}>\n    {renderHookParameterName(param.HookParameterName)}\n    {': '}\n    {param.HookParameterValue.length <= 32\n      ? convertHexToString(param.HookParameterValue)\n      : param.HookParameterValue}\n  </li>\n)\n\nconst HookExecution: FC<{ HookExecution: any }> = ({ HookExecution: exec }) => (\n  <li key={`hook_exec_${exec.HookHash}_${exec.HookExecutionIndex}`}>\n    <span className=\"detail-line\">\n      <Trans i18nKey=\"hook_exec_hash\" values={{ hash: exec.HookHash }} />\n    </span>\n    <ul className=\"detail-line\">\n      <Trans\n        i18nKey=\"hook_exec_account\"\n        values={{\n          account: exec.HookAccount,\n        }}\n      >\n        <Account account={exec.HookAccount} />\n      </Trans>\n    </ul>\n    <ul className=\"detail-line\">\n      <Trans\n        i18nKey=\"hook_exec_return\"\n        values={{\n          code: `0x${exec.HookReturnCode}`,\n          string: convertHexToString(exec.HookReturnString),\n        }}\n      />\n    </ul>\n    <ul className=\"detail-line\">\n      <Trans\n        i18nKey=\"hook_exec_emit_count\"\n        values={{\n          count: exec.HookEmitCount,\n        }}\n      />\n    </ul>\n  </li>\n)\n\nexport const HookDetails: FC<{ data: { tx: any; meta: any } }> = ({ data }) => {\n  const { tx, meta } = data\n  const { t } = useTranslation()\n\n  if (!tx.EmitDetails && !tx.HookParameters && !meta.HookExecutions) return null\n\n  return (\n    <div className=\"detail-section\" data-testid=\"hooks\">\n      <div className=\"title\">{t('hooks')}</div>\n      {tx.EmitDetails && <EmitDetails emitDetails={tx.EmitDetails} />}\n      {tx.HookParameters && (\n        <div className=\"detail-subsection\" data-testid=\"hook-params\">\n          <div className=\"detail-subtitle\">{t('hook_parameters')}</div>\n          {tx.HookParameters.map(HookParameter)}\n        </div>\n      )}\n      {meta.HookExecutions && (\n        <div className=\"detail-subsection\" data-testid=\"hook-executions\">\n          <div className=\"detail-subtitle\">{t('hook_executions')}</div>\n          {meta.HookExecutions.map(HookExecution)}\n        </div>\n      )}\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/Transactions/DetailTab/Meta/AccountRoot.tsx",
    "content": "import { Trans } from 'react-i18next'\nimport { CURRENCY_OPTIONS, XRP_BASE } from '../../../shared/transactionUtils'\nimport { localizeNumber } from '../../../shared/utils'\nimport { Account } from '../../../shared/components/Account'\nimport type { MetaRenderFunction } from './types'\n\nconst render: MetaRenderFunction = (t, language, action, node, index) => {\n  const fields = node.FinalFields || node.NewFields || { Balance: 0 }\n  const prev = node.PreviousFields || { Balance: 0 }\n  const change = (fields.Balance - prev.Balance) / XRP_BASE\n  const numberOption = { ...CURRENCY_OPTIONS, currency: 'XRP' }\n  const prevBalance = localizeNumber(\n    prev.Balance / XRP_BASE,\n    language,\n    numberOption,\n  )\n  const finalBalance = localizeNumber(\n    fields.Balance / XRP_BASE,\n    language,\n    numberOption,\n  )\n\n  const renderLine2 = () => {\n    if (change > 0) {\n      return (\n        <ul key={`account_balance_increased_${index}`} className=\"meta-line\">\n          <li>\n            <Trans i18nKey=\"account_balance_increased\">\n              Balance increased by\n              <b>\n                {localizeNumber(change, language, numberOption)}\n                <small>XRP</small>\n              </b>\n              from\n              <b>\n                {prevBalance}\n                <small>XRP</small>\n              </b>\n              to\n              <b>\n                {finalBalance}\n                <small>XRP</small>\n              </b>\n            </Trans>\n          </li>\n        </ul>\n      )\n    }\n    if (change < 0) {\n      return (\n        <ul key={`account_balance_reduced_${index}`} className=\"meta-line\">\n          <li>\n            <Trans i18nKey=\"account_balance_decreased\">\n              Balance decreased by\n              <b>\n                {localizeNumber(change, language, numberOption)}\n                <small>XRP</small>\n              </b>\n              from\n              <b>\n                {prevBalance}\n                <small>XRP</small>\n              </b>\n              to\n              <b>\n                {finalBalance}\n                <small>XRP</small>\n              </b>\n            </Trans>\n          </li>\n        </ul>\n      )\n    }\n\n    return null\n  }\n\n  const renderLine1 = () =>\n    fields && fields.Account ? (\n      <>\n        {t('owned_account_root', { action })}{' '}\n        <Account account={fields.Account} />\n      </>\n    ) : (\n      t('unowned_account_root', { action })\n    )\n\n  return (\n    <li key={`account_root_${index}`} className=\"meta-line\">\n      {renderLine1()}\n      {renderLine2()}\n    </li>\n  )\n}\n\nexport default render\n"
  },
  {
    "path": "src/containers/Transactions/DetailTab/Meta/DirectoryNode.tsx",
    "content": "import { Account } from '../../../shared/components/Account'\nimport type { DirectoryNodeRenderFunction } from './types'\n\nconst render: DirectoryNodeRenderFunction = (t, action, node, index) => {\n  const fields = node.FinalFields || node.NewFields\n  return (\n    <li key={`directory_${index}`} className=\"meta-line\">\n      {t(\n        fields.Owner\n          ? 'transaction_owned_directory'\n          : 'transaction_unowned_directory',\n        {\n          action,\n        },\n      )}\n      {fields.Owner && (\n        <span>\n          {' '}\n          <Account account={fields.Owner} />\n        </span>\n      )}\n      {fields.DomainID && (\n        <span>\n          {t('pertaining_to_the_Permissioned_Domain')}: {fields.DomainID}\n        </span>\n      )}\n    </li>\n  )\n}\n\nexport default render\n"
  },
  {
    "path": "src/containers/Transactions/DetailTab/Meta/MPToken.tsx",
    "content": "import { Trans } from 'react-i18next'\nimport { Account } from '../../../shared/components/Account'\nimport { computeMPTokenBalanceChange } from '../../../shared/utils'\nimport type { MetaRenderFunction } from './types'\n\nconst render: MetaRenderFunction = (_t, _language, action, node, index) => {\n  const { previousBalance, finalBalance, account, change } =\n    computeMPTokenBalanceChange(node)\n  const previousBalanceStr = previousBalance.toString(10)\n  const finalBalanceStr = finalBalance.toString(10)\n  const changeStr = change.toString(10)\n\n  const line1 = (\n    <Trans i18nKey=\"transaction_mptoken_line_one\">\n      It {action} an MPToken node of\n      <Account account={account} />\n    </Trans>\n  )\n\n  const line2 =\n    change !== BigInt(0) ? (\n      <ul key={`balance_${index}`} className=\"meta-line\">\n        <li>\n          <Trans i18nKey=\"transaction_balance_line_two\">\n            Balance changed by\n            <b>{changeStr}</b>\n            from\n            <b>{previousBalanceStr}</b>\n            to\n            <b>{finalBalanceStr}</b>\n          </Trans>\n        </li>\n      </ul>\n    ) : null\n\n  return (\n    <li key={`mptoken_${action}_${index}`} className=\"meta-line\">\n      {line1}\n      {line2}\n    </li>\n  )\n}\n\nexport default render\n"
  },
  {
    "path": "src/containers/Transactions/DetailTab/Meta/MPTokenIssuance.tsx",
    "content": "import { Trans } from 'react-i18next'\nimport { Account } from '../../../shared/components/Account'\nimport { computeMPTIssuanceBalanceChange } from '../../../shared/utils'\nimport type { MetaRenderFunction } from './types'\n\nconst render: MetaRenderFunction = (_t, _language, action, node, index) => {\n  const { previousBalance, finalBalance, account, change } =\n    computeMPTIssuanceBalanceChange(node)\n  const previousBalanceStr = previousBalance.toString(10)\n  const finalBalanceStr = finalBalance.toString(10)\n  const changeStr = change.toString(10)\n\n  const line1 = (\n    <Trans i18nKey=\"transaction_mpt_issuance_line_one\">\n      It {action} an MPTokenIssuance node of\n      <Account account={account} />\n    </Trans>\n  )\n\n  const line2 =\n    change !== BigInt(0) ? (\n      <ul key={`balance_${index}`} className=\"meta-line\">\n        <li>\n          <Trans i18nKey=\"transaction_outstanding_balance_line_two\">\n            Outstanding balance changed by\n            <b>{changeStr}</b>\n            from\n            <b>{previousBalanceStr}</b>\n            to\n            <b>{finalBalanceStr}</b>\n          </Trans>\n        </li>\n      </ul>\n    ) : null\n\n  return (\n    <li key={`mpt_issuance_${action}_${index}`} className=\"meta-line\">\n      {line1}\n      {line2}\n    </li>\n  )\n}\n\nexport default render\n"
  },
  {
    "path": "src/containers/Transactions/DetailTab/Meta/Offer.tsx",
    "content": "import { Fragment } from 'react'\nimport { Trans } from 'react-i18next'\nimport {\n  CURRENCY_ORDER,\n  CURRENCY_OPTIONS,\n  XRP_BASE,\n} from '../../../shared/transactionUtils'\nimport { localizeNumber } from '../../../shared/utils'\nimport { Account } from '../../../shared/components/Account'\nimport Currency from '../../../shared/components/Currency'\nimport type { MetaRenderFunctionWithTx, MetaNode } from './types'\n\nconst normalize = (value: number | string, currency: string): string =>\n  currency === 'XRP' ? (Number(value) / XRP_BASE).toString() : String(value)\n\nconst renderChanges = (\n  _t: any,\n  language: string,\n  node: MetaNode,\n  index: number,\n) => {\n  const meta: JSX.Element[] = []\n  const final = node.FinalFields\n  const prev = node?.PreviousFields\n  const paysCurrency = final.TakerPays.currency || 'XRP'\n  const getsCurrency = final.TakerGets.currency || 'XRP'\n  const finalPays = final.TakerPays.value || final.TakerPays\n  const finalGets = final.TakerGets.value || final.TakerGets\n  const prevPays = prev?.TakerPays?.value || prev?.TakerPays\n  const prevGets = prev?.TakerGets?.value || prev?.TakerGets\n  const changePays = normalize(prevPays - finalPays, paysCurrency)\n  const changeGets = normalize(prevGets - finalGets, getsCurrency)\n\n  if (prevPays && finalPays) {\n    const options = { ...CURRENCY_OPTIONS, currency: paysCurrency }\n    meta.push(\n      <li key={`taker_pays_decreased_${index}`} className=\"meta-line\">\n        <span className=\"field\">TakerPays </span>\n        <b>\n          <Currency\n            currency={paysCurrency}\n            issuer={final.TakerPays.issuer}\n            displaySymbol={false}\n          />\n        </b>{' '}\n        <Trans i18nKey=\"decreased_from_to\">\n          decreased by\n          <b>\n            {\n              {\n                change: localizeNumber(changePays, language, options),\n              } as any\n            }\n          </b>\n          from\n          <b>\n            {\n              {\n                previous: localizeNumber(\n                  normalize(prevPays, paysCurrency),\n                  language,\n                  options,\n                ),\n              } as any\n            }\n          </b>\n          to\n          <b>\n            {\n              {\n                final: localizeNumber(\n                  normalize(finalPays, paysCurrency),\n                  language,\n                  options,\n                ),\n              } as any\n            }\n          </b>\n        </Trans>\n      </li>,\n    )\n  }\n  if (prevGets && finalGets) {\n    const options = { ...CURRENCY_OPTIONS, currency: getsCurrency }\n    meta.push(\n      <li key={`taker_gets_decreased_${index}`} className=\"meta-line\">\n        <span className=\"field\">TakerGets </span>\n        <b>\n          <Currency\n            currency={getsCurrency}\n            issuer={final.TakerGets.issuer}\n            displaySymbol={false}\n          />\n        </b>{' '}\n        <Trans i18nKey=\"decreased_from_to\">\n          decreased by\n          <b>\n            {\n              {\n                change: localizeNumber(changeGets, language, options),\n              } as any\n            }\n          </b>\n          from\n          <b>\n            {\n              {\n                previous: localizeNumber(\n                  normalize(prevGets, getsCurrency),\n                  language,\n                  options,\n                ),\n              } as any\n            }\n          </b>\n          to\n          <b>\n            {\n              {\n                final: localizeNumber(\n                  normalize(finalGets, getsCurrency),\n                  language,\n                  options,\n                ),\n              } as any\n            }\n          </b>\n        </Trans>\n      </li>,\n    )\n  }\n\n  return <Fragment key={`renderOfferChangesMeta_${index}`}>{meta}</Fragment>\n}\n\nconst render: MetaRenderFunctionWithTx = (\n  t,\n  language,\n  action,\n  node,\n  index,\n  tx,\n) => {\n  const lines: JSX.Element[] = []\n  const fields = node.FinalFields || node.NewFields\n  const paysCurrency = fields.TakerPays.currency || 'XRP'\n  const getsCurrency = fields.TakerGets.currency || 'XRP'\n  const takerPaysValue = normalize(\n    fields.TakerPays.value || fields.TakerPays,\n    paysCurrency,\n  )\n  const invert =\n    CURRENCY_ORDER.indexOf(getsCurrency) > CURRENCY_ORDER.indexOf(paysCurrency)\n\n  if (\n    action === 'created' &&\n    tx.TransactionType === 'OfferCreate' &&\n    tx.Account === fields.Account &&\n    tx.Sequence === fields.Sequence &&\n    tx.OfferSequence\n  ) {\n    lines.push(\n      <li key={`offer_replaces_${index}`} className=\"meta-line\">\n        {t('offer_replaces')}\n        <b> {tx.OfferSequence}</b>\n      </li>,\n    )\n  } else if (action === 'modified') {\n    lines.push(\n      <li key={`offer_partially_filled_${index}`} className=\"meta-line\">\n        {t('offer_partially_filled')}\n      </li>,\n    )\n    lines.push(renderChanges(t, language, node, index))\n  } else if (action === 'deleted' && takerPaysValue === '0') {\n    lines.push(\n      <li key={`offer_filled_${index}`} className=\"meta-line\">\n        {t('offer_filled')}\n      </li>,\n    )\n    lines.push(renderChanges(t, language, node, index))\n  } else if (action === 'deleted' && tx.TransactionType === 'OfferCancel') {\n    lines.push(\n      <li key={`offer_cancelled_${index}`} className=\"meta-line\">\n        {t('offer_cancelled')}\n      </li>,\n    )\n  } else if (\n    action === 'deleted' &&\n    tx.TransactionType === 'OfferCreate' &&\n    tx.Account === fields.Account &&\n    tx.OfferSequence === fields.Sequence\n  ) {\n    lines.push(\n      <li key={`offer_replaced_${index}`} className=\"meta-line\">\n        {t('offer_replaced')}\n        <b> {tx.Sequence}</b>\n      </li>,\n    )\n  } else if (action === 'deleted') {\n    lines.push(\n      <li key={`offer_lack_of_funds_${index}`} className=\"meta-line\">\n        {t('offer_lack_of_funds')}\n      </li>,\n    )\n    lines.push(renderChanges(t, language, node, index))\n  }\n\n  return (\n    <li key={`offer_node_meta_${index}`} className=\"meta-line\">\n      <Trans\n        i18nKey=\"offer_node_meta\"\n        values={{ action, sequence: fields.Sequence }}\n        components={{\n          Currency: (\n            <Currency\n              currency={(invert ? getsCurrency : paysCurrency) || 'XRP'}\n              issuer={invert ? tx.TakerGets?.issuer : tx.TakerPays?.issuer}\n              displaySymbol={false}\n              shortenIssuer\n            />\n          ),\n          Currency2: (\n            <Currency\n              currency={(invert ? paysCurrency : getsCurrency) || 'XRP'}\n              issuer={invert ? tx.TakerPays?.issuer : tx.TakerGets?.issuer}\n              displaySymbol={false}\n              shortenIssuer\n            />\n          ),\n          Account: <Account account={fields.Account} />,\n        }}\n      />\n      <ul>{lines}</ul>\n    </li>\n  )\n}\n\nexport default render\n"
  },
  {
    "path": "src/containers/Transactions/DetailTab/Meta/PayChannel.tsx",
    "content": "import { Trans } from 'react-i18next'\nimport { CURRENCY_OPTIONS } from '../../../shared/transactionUtils'\nimport { localizeNumber } from '../../../shared/utils'\nimport { Account } from '../../../shared/components/Account'\nimport type { MetaRenderFunction } from './types'\n\nconst MILLION = 1000000\n\nconst render: MetaRenderFunction = (_t, language, action, node, index) => {\n  const fields = node.FinalFields || node.NewFields\n  const prev = node.PreviousFields\n  const numberOption = { ...CURRENCY_OPTIONS, currency: 'XRP' }\n  const prevBalance = prev && prev.Balance ? prev.Balance : null\n  const prevAmount = prev && prev.Amount ? prev.Amount : null\n\n  const line1 = (\n    <Trans i18nKey=\"paychannel_node_line1\">\n      It {action} a PayChannel node from\n      <Account account={fields.Account} />\n      to\n      <Account account={fields.Destination} />\n    </Trans>\n  )\n\n  const line2 = prevBalance ? (\n    <li>\n      <Trans i18nKey=\"paychannel_balance_changed\">\n        Balance changed by\n        <b>\n          {localizeNumber(\n            (fields.Balance - prevBalance) / MILLION,\n            language,\n            numberOption,\n          )}\n          <small>XRP</small>\n        </b>\n        from\n        <b>\n          {localizeNumber(prevBalance / MILLION, language, numberOption)}\n          <small>XRP</small>\n        </b>\n        to\n        <b>\n          {localizeNumber(fields.Balance / MILLION, language, numberOption)}\n          <small>XRP</small>\n        </b>\n      </Trans>\n    </li>\n  ) : null\n\n  const line3 = prevAmount ? (\n    <li>\n      <Trans i18nKey=\"paychannel_amount_changed\">\n        Amount changed by\n        <b>\n          {localizeNumber(\n            (fields.Amount - prevAmount) / MILLION,\n            language,\n            numberOption,\n          )}\n          <small>XRP</small>\n        </b>\n        from\n        <b>\n          {localizeNumber(prevAmount / MILLION, language, numberOption)}\n          <small>XRP</small>\n        </b>\n        to\n        <b>\n          {localizeNumber(fields.Amount / MILLION, language, numberOption)}\n          <small>XRP</small>\n        </b>\n      </Trans>\n    </li>\n  ) : null\n\n  return (\n    <li key={`paychannel_${action}_${index}`} className=\"meta-line\">\n      {line1}\n      {line2 || line3 ? (\n        <ul>\n          {line2}\n          {line3}\n        </ul>\n      ) : null}\n    </li>\n  )\n}\n\nexport default render\n"
  },
  {
    "path": "src/containers/Transactions/DetailTab/Meta/RippleState.tsx",
    "content": "import { Trans } from 'react-i18next'\nimport { Account } from '../../../shared/components/Account'\nimport {\n  localizeNumber,\n  computeRippleStateBalanceChange,\n} from '../../../shared/utils'\nimport Currency from '../../../shared/components/Currency'\nimport type { MetaRenderFunction } from './types'\n\nconst render: MetaRenderFunction = (_t, language, action, node, index) => {\n  const {\n    change,\n    numberOption,\n    previousBalance,\n    finalBalance,\n    currency,\n    account,\n    counterAccount,\n  } = computeRippleStateBalanceChange(node)\n\n  const line1 = (\n    <Trans i18nKey=\"transaction_balance_line_one\">\n      It {action} a{' '}\n      <b>\n        <Currency currency={currency} />\n      </b>\n      RippleState node between\n      <Account account={account} />\n      and\n      <Account account={counterAccount} />\n    </Trans>\n  )\n\n  const line2 = change ? (\n    <ul key={`balance_${index}`} className=\"meta-line\">\n      <li>\n        <Trans i18nKey=\"transaction_balance_line_two\">\n          Balance changed by\n          <b>{localizeNumber(change, language, numberOption)}</b>\n          from\n          <b>{localizeNumber(previousBalance, language, numberOption)}</b>\n          to\n          <b>{localizeNumber(finalBalance, language, numberOption)}</b>\n        </Trans>\n      </li>\n    </ul>\n  ) : null\n\n  return (\n    <li key={`ripple_state_${action}_${index}`} className=\"meta-line\">\n      {line1}\n      {line2}\n    </li>\n  )\n}\n\nexport default render\n"
  },
  {
    "path": "src/containers/Transactions/DetailTab/Meta/index.tsx",
    "content": "import { FC } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { TFunction } from 'i18next'\nimport renderAccountRoot from './AccountRoot'\nimport renderDirectoryNode from './DirectoryNode'\nimport renderOffer from './Offer'\nimport renderRippleState from './RippleState'\nimport renderPayChannel from './PayChannel'\nimport renderMPToken from './MPToken'\nimport renderMPTokenIssuance from './MPTokenIssuance'\nimport { groupAffectedNodes } from '../../../shared/transactionUtils'\nimport { useLanguage } from '../../../shared/hooks'\n\nconst renderDefault = (\n  t: TFunction<'translations', undefined>,\n  action: string,\n  node: any,\n  index: number,\n) => (\n  <li key={`${node.LedgerEntryType}_${index}`} className=\"meta-line\">\n    {t('node_meta_type', { action })} <b>{node.LedgerEntryType}</b>\n  </li>\n)\n\nexport const TransactionMeta: FC<{ data: any }> = ({ data }) => {\n  const language = useLanguage()\n  const { t } = useTranslation()\n\n  const renderNodesMeta = (action: string, list: any[], tx: any) => {\n    const meta = list.map((node, index) => {\n      switch (node.LedgerEntryType) {\n        case 'AccountRoot':\n          return renderAccountRoot(t, language, action, node, index)\n        case 'DirectoryNode':\n          return renderDirectoryNode(t, action, node, index)\n        case 'Offer':\n          return renderOffer(t, language, action, node, index, tx)\n        case 'RippleState':\n          return renderRippleState(t, language, action, node, index)\n        case 'PayChannel':\n          return renderPayChannel(t, language, action, node, index)\n        case 'MPTokenIssuance':\n          return renderMPTokenIssuance(t, language, action, node, index)\n        case 'MPToken':\n          return renderMPToken(t, language, action, node, index)\n        default:\n          return renderDefault(t, action, node, index)\n      }\n    })\n\n    return (\n      meta.length !== 0 && (\n        <div className=\"detail-subsection\">\n          <div className=\"detail-subtitle\">{t('nodes_type', { action })}</div>\n          <ul>{meta}</ul>\n        </div>\n      )\n    )\n  }\n\n  const affectedNodes = groupAffectedNodes(data)\n\n  return (\n    <div className=\"detail-section\">\n      <div className=\"title\">{t('meta')}</div>\n      <div>\n        {t('number_of_affected_node', {\n          count: data.meta.AffectedNodes.length,\n        })}\n      </div>\n      {renderNodesMeta('created', affectedNodes.created, data.tx)}\n      {renderNodesMeta('modified', affectedNodes.modified, data.tx)}\n      {renderNodesMeta('deleted', affectedNodes.deleted, data.tx)}\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/Transactions/DetailTab/Meta/types.ts",
    "content": "// Union type for all possible node types - using any to handle the different field structures\nexport type MetaNode = any\n\n// Render function signatures for Meta components\nexport type MetaRenderFunction = (\n  t: any,\n  language: string,\n  action: string,\n  node: MetaNode,\n  index: number,\n) => JSX.Element\n\nexport type MetaRenderFunctionWithTx = (\n  t: any,\n  language: string,\n  action: string,\n  node: MetaNode,\n  index: number,\n  tx: any,\n) => JSX.Element\n\nexport type DirectoryNodeRenderFunction = (\n  t: any,\n  action: string,\n  node: MetaNode,\n  index: number,\n) => JSX.Element\n"
  },
  {
    "path": "src/containers/Transactions/DetailTab/detailTab.scss",
    "content": "@use '../../shared/css/variables' as *;\n\n.detail-body {\n  margin-top: 20px;\n  color: $black-40;\n  font-size: 12px;\n  letter-spacing: 0px;\n\n  .detail-section {\n    padding: 5px 15px;\n    border-bottom: 1px solid $black-70;\n    margin: 0px 0px 30px;\n\n    &:last-child {\n      border: none;\n    }\n\n    li {\n      overflow-wrap: break-word;\n    }\n\n    @include for-size(tablet-landscape-up) {\n      width: 552px;\n    }\n    @include for-size(desktop-up) {\n      width: 772px;\n    }\n    @include for-size(big-desktop-up) {\n      width: 882px;\n    }\n\n    b {\n      color: $black-30;\n      @include medium;\n\n      small {\n        margin-left: 5px;\n      }\n    }\n\n    ul {\n      padding: 0px 30px;\n      margin: 0px;\n\n      li {\n        ul {\n          list-style: square;\n        }\n\n        li {\n          margin: 0px;\n          font-size: 14px;\n        }\n      }\n    }\n\n    .flags {\n      font-style: italic;\n    }\n\n    .title {\n      margin-bottom: 4px;\n      color: $white;\n      font-size: 16px;\n      text-transform: capitalize;\n      @include bold;\n\n      span {\n        margin-left: 8px;\n        font-size: 10px;\n        line-height: 18px;\n      }\n    }\n\n    .detail-subtitle {\n      margin-top: 16px;\n      margin-bottom: 2px;\n      color: $black-40;\n      font-size: 14px;\n      text-transform: uppercase;\n      @include medium;\n    }\n\n    .ledger {\n      @include medium;\n    }\n\n    .tx-result.fail {\n      color: $orange-40;\n    }\n\n    .time {\n      color: $blue-purple-30;\n    }\n\n    .hash {\n      @include medium;\n    }\n\n    .condition,\n    .fulfillment,\n    .channel,\n    .regular-key,\n    .email,\n    .message-key {\n      color: $blue-purple-30;\n      font-size: 13px;\n      word-break: break-all;\n    }\n\n    .domain {\n      color: $blue-purple-30;\n    }\n\n    .flag {\n      color: $blue-purple-30;\n      font-style: italic;\n    }\n\n    .account {\n      font-size: 11px;\n      @include bold;\n    }\n\n    .signers {\n      margin: 5px 0px;\n      list-style: decimal;\n\n      li {\n        margin: 2px;\n\n        .label {\n          font-size: 12px;\n          text-transform: uppercase;\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "src/containers/Transactions/DetailTab/index.tsx",
    "content": "import { FC } from 'react'\nimport { Trans, useTranslation } from 'react-i18next'\nimport { TransactionMeta } from './Meta'\nimport { TransactionDescription } from './Description'\nimport { Account } from '../../shared/components/Account'\nimport { localizeDate, localizeNumber } from '../../shared/utils'\nimport {\n  DATE_OPTIONS,\n  CURRENCY_OPTIONS,\n  SUCCESSFUL_TRANSACTION,\n  XRP_BASE,\n  buildFlags,\n  buildMemos,\n} from '../../shared/transactionUtils'\nimport './detailTab.scss'\nimport { useLanguage } from '../../shared/hooks'\nimport { HookDetails } from './HookDetails'\nimport { RouteLink } from '../../shared/routing'\nimport { LEDGER_ROUTE } from '../../App/routes'\n\nexport const DetailTab: FC<{ data: any }> = ({ data }) => {\n  const { t } = useTranslation()\n  const language = useLanguage()\n\n  const renderStatus = () => {\n    const { TransactionResult } = data.meta\n    const time = localizeDate(new Date(data.date), language, DATE_OPTIONS)\n    let line1\n\n    if (TransactionResult === SUCCESSFUL_TRANSACTION) {\n      line1 = t('successful_transaction')\n    } else {\n      line1 = (\n        <Trans i18nKey=\"fail_transaction\" values={{ code: TransactionResult }}>\n          <span className=\"tx-result fail\" />\n        </Trans>\n      )\n    }\n\n    return (\n      <div className=\"detail-section\" data-testid=\"status\">\n        <div className=\"title\">{t('status')}</div>\n        {line1}\n        {t('transaction_validated')}\n        <RouteLink\n          className=\"ledger\"\n          to={LEDGER_ROUTE}\n          params={{ identifier: data.ledger_index }}\n        >\n          {data.ledger_index}\n        </RouteLink>\n        {t('on')}\n        <span className=\"time\">{`${time} ${DATE_OPTIONS.timeZone}`}</span>\n      </div>\n    )\n  }\n\n  const renderMemos = () => {\n    const memos = buildMemos(data)\n    return memos.length ? (\n      <div className=\"detail-section\">\n        <div className=\"title\">\n          {t('memos')}\n          <span>({t('decoded_hex')})</span>\n        </div>\n        {memos.map((memo) => (\n          <div key={memo}>{memo}</div>\n        ))}\n      </div>\n    ) : null\n  }\n\n  const renderFee = () => {\n    const numberOptions = { ...CURRENCY_OPTIONS, currency: 'XRP' }\n    const totalCost = data.tx.Fee\n      ? localizeNumber(\n          Number.parseFloat(data.tx.Fee) / XRP_BASE,\n          language,\n          numberOptions,\n        )\n      : null\n    return (\n      totalCost && (\n        <div className=\"detail-section\">\n          <div className=\"title transaction-cost\">{t('transaction_cost')}</div>\n          <div>\n            {t('transaction_consumed_fee')}\n            <b>\n              <span> {totalCost}</span>\n              <small>XRP</small>\n            </b>\n          </div>\n        </div>\n      )\n    )\n  }\n\n  const renderFlags = () => {\n    const flags = buildFlags(data)\n    return flags.length ? (\n      <div className=\"detail-section\">\n        <div className=\"title\">{t('flags')}</div>\n        <div className=\"flags\">\n          {flags.map((flag) => (\n            <div key={flag}>{flag}</div>\n          ))}\n        </div>\n      </div>\n    ) : null\n  }\n\n  const renderSigners = () =>\n    data.tx.Signers ? (\n      <div className=\"detail-section\">\n        <div className=\"title\">{t('signers')}</div>\n        <ul className=\"signers\">\n          {data.tx.Signers.map((d) => (\n            <li key={d.Signer.Account}>\n              <Account account={d.Signer.Account} />\n            </li>\n          ))}\n        </ul>\n      </div>\n    ) : null\n\n  return (\n    <div className=\"detail-body\">\n      {renderStatus()}\n      <TransactionDescription data={data} />\n      {renderSigners()}\n      <HookDetails data={data} />\n      {renderFlags()}\n      {renderFee()}\n      {renderMemos()}\n      <TransactionMeta data={data} />\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/Transactions/Simple/index.tsx",
    "content": "import { FC } from 'react'\nimport { ErrorBoundary } from 'react-error-boundary'\nimport { useTranslation } from 'react-i18next'\nimport { transactionTypes } from '../../shared/components/Transaction'\nimport { DefaultSimple } from '../../shared/components/Transaction/DefaultSimple'\n\nexport const Simple: FC<{\n  data: any\n  type: string\n}> = ({ data, type }) => {\n  // Locate the component for the left side of the simple tab that is unique per TransactionType.\n  const { t } = useTranslation()\n  const SimpleComponent = transactionTypes[type]?.Simple\n  if (SimpleComponent) {\n    return (\n      <ErrorBoundary\n        fallback={\n          <div className=\"error\">\n            <div>{t('component_error')}</div>\n            <div>{t('try_detailed_raw')}</div>\n          </div>\n        }\n      >\n        <SimpleComponent data={data} />\n      </ErrorBoundary>\n    )\n  }\n  return <DefaultSimple data={data} />\n}\n"
  },
  {
    "path": "src/containers/Transactions/SimpleTab.tsx",
    "content": "import { FC } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { localizeDate, localizeNumber, BREAKPOINTS } from '../shared/utils'\nimport { Account } from '../shared/components/Account'\nimport { Sequence } from '../shared/components/Sequence'\nimport { Simple } from './Simple'\n\nimport { useLanguage } from '../shared/hooks'\nimport { RouteLink } from '../shared/routing'\nimport { CURRENCY_OPTIONS, XRP_BASE } from '../shared/transactionUtils'\nimport { SimpleRow } from '../shared/components/Transaction/SimpleRow'\nimport '../shared/css/simpleTab.scss'\nimport './simpleTab.scss'\nimport { LEDGER_ROUTE } from '../App/routes'\n\nconst TIME_ZONE = 'UTC'\nconst DATE_OPTIONS = {\n  hour: 'numeric',\n  minute: 'numeric',\n  second: 'numeric',\n  year: 'numeric',\n  month: 'numeric',\n  day: 'numeric',\n  hour12: true,\n  timeZone: TIME_ZONE,\n}\n\nexport const SimpleTab: FC<{ data: any; width: number }> = ({\n  data,\n  width,\n}) => {\n  const { t } = useTranslation()\n  const language = useLanguage()\n\n  const renderRowIndex = (\n    time,\n    ledgerIndex,\n    fee,\n    account,\n    delegate,\n    sequence,\n    ticketSequence,\n    isHook,\n  ) => (\n    <>\n      <SimpleRow\n        label={t('formatted_date', { timeZone: TIME_ZONE })}\n        data-testid=\"tx-date\"\n      >\n        {time}\n      </SimpleRow>\n      <SimpleRow label={t('ledger_index')} data-testid=\"ledger-index\">\n        <RouteLink to={LEDGER_ROUTE} params={{ identifier: ledgerIndex }}>\n          {ledgerIndex}\n        </RouteLink>\n      </SimpleRow>\n      {account && (\n        <SimpleRow label={t('account')} data-testid=\"account\">\n          <Account account={account} />\n        </SimpleRow>\n      )}\n      {delegate && (\n        <SimpleRow label={t('delegate')} data-testid=\"delegate\">\n          <Account account={delegate} />\n        </SimpleRow>\n      )}\n      <SimpleRow label={t('sequence_number')} data-testid=\"sequence\">\n        <Sequence\n          sequence={sequence}\n          ticketSequence={ticketSequence}\n          account={account}\n          isHook={isHook}\n        />\n      </SimpleRow>\n      <SimpleRow label={t('transaction_cost')} data-testid=\"tx-cost\">\n        {fee}\n      </SimpleRow>\n    </>\n  )\n\n  const { processed } = data\n  const numberOptions = { ...CURRENCY_OPTIONS, currency: 'XRP' }\n  const time = localizeDate(new Date(processed.date), language, DATE_OPTIONS)\n  const ledgerIndex = processed.ledger_index\n  const fee = processed.tx.Fee\n    ? localizeNumber(\n        Number.parseFloat(processed.tx.Fee) / XRP_BASE,\n        language,\n        numberOptions,\n      )\n    : 0\n\n  const rowIndex = renderRowIndex(\n    time,\n    ledgerIndex,\n    fee,\n    processed.tx.Account,\n    processed.tx.Delegate,\n    processed.tx.Sequence,\n    processed.tx.TicketSequence,\n    !!processed.tx.EmitDetails,\n  )\n\n  return (\n    <div className=\"simple-body simple-body-tx\">\n      <div className=\"rows\">\n        <Simple type={processed.tx.TransactionType} data={data.summary} />\n        {width < BREAKPOINTS.landscape && rowIndex}\n      </div>\n      {width >= BREAKPOINTS.landscape && (\n        <div className=\"index\">{rowIndex}</div>\n      )}\n      <div className=\"clear\" />\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/Transactions/index.tsx",
    "content": "import { useContext, useEffect } from 'react'\nimport { Helmet } from 'react-helmet-async'\nimport { useTranslation } from 'react-i18next'\nimport { useQuery } from 'react-query'\nimport { useWindowSize } from 'usehooks-ts'\nimport NoMatch from '../NoMatch'\nimport { Loader } from '../shared/components/Loader'\nimport { Tabs } from '../shared/components/Tabs'\nimport {\n  NOT_FOUND,\n  BAD_REQUEST,\n  HASH256_REGEX,\n  CTID_REGEX,\n} from '../shared/utils'\nimport { SimpleTab } from './SimpleTab'\nimport { DetailTab } from './DetailTab'\nimport './transaction.scss'\nimport { AnalyticsFields, useAnalytics } from '../shared/analytics'\nimport SocketContext from '../shared/SocketContext'\nimport { TxStatus } from '../shared/components/TxStatus'\nimport { getAction, getCategory } from '../shared/components/Transaction'\nimport { buildPath, useRouteParams } from '../shared/routing'\nimport { SUCCESSFUL_TRANSACTION } from '../shared/transactionUtils'\nimport { getTransaction } from '../../rippled'\nimport { TRANSACTION_ROUTE } from '../App/routes'\nimport { JsonView } from '../shared/components/JsonView'\n\nconst WRONG_NETWORK = 406\n\nconst ERROR_MESSAGES: Record<string, { title: string; hints: string[] }> = {}\nERROR_MESSAGES[NOT_FOUND] = {\n  title: 'transaction_not_found',\n  hints: ['server_ledgers_hint', 'check_transaction_hash'],\n}\nERROR_MESSAGES[BAD_REQUEST] = {\n  title: 'invalid_transaction_hash',\n  hints: ['check_transaction_hash'],\n}\nERROR_MESSAGES[WRONG_NETWORK] = {\n  title: 'wrong_network',\n  hints: ['check_transaction_hash'],\n}\nERROR_MESSAGES.default = {\n  title: 'generic_error',\n  hints: ['not_your_fault'],\n}\n\nconst getErrorMessage = (error) =>\n  ERROR_MESSAGES[error] || ERROR_MESSAGES.default\n\nexport const Transaction = () => {\n  const { identifier = '', tab = 'simple' } = useRouteParams(TRANSACTION_ROUTE)\n  const { t } = useTranslation()\n  const rippledSocket = useContext(SocketContext)\n  const { trackException, trackScreenLoaded } = useAnalytics()\n  const { isLoading, data, error, isError } = useQuery(\n    ['transaction', identifier],\n    () => {\n      if (identifier === '') {\n        return undefined\n      }\n      if (HASH256_REGEX.test(identifier) || CTID_REGEX.test(identifier)) {\n        return getTransaction(identifier, rippledSocket).catch(\n          (transactionRequestError) => {\n            const status = transactionRequestError.code\n            trackException(\n              `transaction ${identifier} --- ${JSON.stringify(\n                transactionRequestError.message,\n              )}`,\n            )\n\n            return Promise.reject(status)\n          },\n        )\n      }\n\n      return Promise.reject(BAD_REQUEST)\n    },\n  )\n  const { width } = useWindowSize()\n\n  useEffect(() => {\n    if (!data?.processed) return\n\n    const type = data?.processed.tx.TransactionType\n    const status = data?.processed.meta.TransactionResult\n\n    const transactionProperties: AnalyticsFields = {\n      transaction_action: getAction(type),\n      transaction_category: getCategory(type),\n      transaction_type: type,\n    }\n\n    if (status !== SUCCESSFUL_TRANSACTION) {\n      transactionProperties.tec_code = status\n    }\n\n    trackScreenLoaded(transactionProperties)\n  }, [identifier, data?.processed, tab, trackScreenLoaded])\n\n  function renderSummary() {\n    const type = data?.processed.tx.TransactionType\n    return (\n      <div className=\"summary\">\n        <div className=\"type\">{type}</div>\n        <TxStatus status={data?.processed.meta.TransactionResult} />\n        <div className=\"txid\" title={data?.processed.hash}>\n          <div className=\"title\">{t('hash')}: </div>\n          {data?.processed.hash}\n        </div>\n        {data?.processed.tx.ctid && (\n          <div className=\"txid\" title={data.processed.tx.ctid}>\n            <div className=\"title\">CTID: </div>\n            {data.processed.tx.ctid}\n          </div>\n        )}\n      </div>\n    )\n  }\n\n  function renderTabs() {\n    const tabs = ['simple', 'detailed', 'raw']\n    const mainPath = buildPath(TRANSACTION_ROUTE, { identifier })\n    return <Tabs tabs={tabs} selected={tab} path={mainPath} />\n  }\n\n  function renderTransaction() {\n    if (!data) return undefined\n\n    let body\n\n    switch (tab) {\n      case 'detailed':\n        body = <DetailTab data={data.processed} />\n        break\n      case 'raw':\n        body = <JsonView data={data.raw} showExpandButton showBackground />\n        break\n      default:\n        body = <SimpleTab data={data} width={width} />\n        break\n    }\n    return (\n      <>\n        {renderSummary()}\n        {renderTabs()}\n        <div className=\"tab-body\">{body}</div>\n      </>\n    )\n  }\n\n  let body\n\n  if (isError) {\n    const message = getErrorMessage(error)\n    body = <NoMatch title={message.title} hints={message.hints} />\n  } else if (data?.processed && data?.processed.hash) {\n    body = renderTransaction()\n  } else if (!identifier) {\n    body = (\n      <NoMatch\n        title=\"transaction_empty_title\"\n        hints={['transaction_empty_hint']}\n        isError={false}\n      />\n    )\n  }\n  return (\n    <div className=\"transaction\">\n      <Helmet\n        title={`${t('transaction_short')} ${identifier.substring(0, 8)}...`}\n      />\n      {isLoading && <Loader />}\n      {body}\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/Transactions/simpleTab.scss",
    "content": "@use '../shared/css/variables' as *;\n\n$subdued-color: $black-40;\n\n.simple-body-tx {\n  .rows {\n    padding-top: 0px;\n\n    .groups-title {\n      display: block;\n      flex-direction: row;\n      color: $black-40;\n      font-size: 14px;\n      font-weight: 600;\n      text-transform: uppercase;\n    }\n\n    .partial-row {\n      display: flex;\n      overflow: hidden;\n      flex-grow: 1;\n      flex-wrap: wrap;\n      padding-top: 20px;\n      padding-left: 5px;\n      color: $red-dark;\n      float: right;\n      font-size: 14px;\n      font-style: italic;\n      text-align: right;\n      vertical-align: middle;\n      @include regular;\n    }\n\n    .row {\n      .value {\n        text-align: right;\n\n        .grant {\n          .account {\n            padding-bottom: 8px;\n            font-size: 11px;\n            text-align: right;\n            @include medium;\n          }\n        }\n\n        .amount {\n          text-align: right;\n\n          .amount-localized {\n            display: block;\n          }\n\n          .one-line {\n            display: flex;\n          }\n\n          .currency {\n            display: block;\n          }\n\n          .currency,\n          .one-line {\n            margin: -1px 0px -16px;\n            color: $subdued-color;\n            font-size: 11px;\n            text-align: right;\n            @include medium;\n\n            .account {\n              font-size: inherit;\n              line-height: inherit;\n              vertical-align: bottom;\n            }\n          }\n\n          &.list {\n            margin-bottom: 12px;\n\n            .one-line {\n              justify-content: flex-end;\n              margin: -1px 0px 0px;\n            }\n          }\n        }\n\n        ul {\n          padding: 0;\n          margin: 0;\n          list-style: none;\n        }\n\n        &.flex-column {\n          display: flex;\n          flex-direction: column;\n        }\n\n        &.partial,\n        &.closed,\n        &.unset {\n          color: $red-dark;\n          font-size: 14px;\n          font-style: italic;\n          @include regular;\n        }\n\n        &.flag {\n          color: $blue-purple-30;\n          font-size: 14px;\n          font-style: italic;\n          @include regular;\n        }\n\n        &.condition,\n        &.fulfillment,\n        &.tx,\n        &.channel {\n          width: calc(100% - 120px);\n          color: $subdued-color;\n          font-size: 14px;\n          white-space: normal;\n          word-break: break-all;\n          @include regular;\n        }\n      }\n\n      &:first-child {\n        padding-top: 40px;\n      }\n    }\n\n    .error {\n      padding: 50px;\n      color: $orange-40;\n      font-size: 14px;\n      text-align: center;\n\n      .type {\n        margin: 0 5px;\n        @include bold;\n      }\n    }\n\n    .group {\n      margin: 16px 0 16px -16px;\n      background: rgba($black-80, 0.7);\n      gap: 15px;\n\n      &:first-child {\n        margin-top: 0px;\n      }\n\n      &:last-child {\n        margin-bottom: 0px;\n      }\n\n      .group-title {\n        display: block;\n        flex-direction: row;\n        padding: 16px 0 0 16px;\n        color: $black-40;\n        font-size: 14px;\n        font-weight: 600;\n        text-transform: uppercase;\n      }\n\n      .row {\n        padding: 16px 28px 12px 16px;\n\n        &:last-child {\n          padding-bottom: 16px;\n          border: none;\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "src/containers/Transactions/test/Description.test.tsx",
    "content": "import { render } from '@testing-library/react'\nimport { BrowserRouter as Router } from 'react-router'\nimport { I18nextProvider } from 'react-i18next'\nimport { QueryClientProvider } from 'react-query'\nimport i18n from '../../../i18n/testConfigEnglish'\nimport { TransactionDescription } from '../DetailTab/Description'\nimport Transaction from './mock_data/Transaction.json'\nimport OfferCreateTicket from './mock_data/OfferCreateTicket.json'\nimport EmittedPayment from './mock_data/EmittedPayment.json'\nimport DelegatePayment from './mock_data/DelegatePayment.json'\nimport { queryClient } from '../../shared/QueryClient'\n\ndescribe('Description container', () => {\n  const renderDescription = (data = {}) =>\n    render(\n      <Router>\n        <QueryClientProvider client={queryClient}>\n          <I18nextProvider i18n={i18n}>\n            <TransactionDescription data={data} />\n          </I18nextProvider>\n        </QueryClientProvider>\n      </Router>,\n    )\n\n  it('renders without crashing', () => {\n    renderDescription()\n  })\n\n  it('renders transaction', () => {\n    renderDescription(Transaction)\n  })\n\n  it('renders sequence number with ticket', () => {\n    const { container } = renderDescription(OfferCreateTicket)\n    expect(\n      container.querySelector('[data-testid=\"sequence\"]'),\n    ).toHaveTextContent('79469284 (a Ticket was used for this Transaction)')\n  })\n\n  it('renders sequence number with hook', () => {\n    const { container } = renderDescription(EmittedPayment)\n    expect(\n      container.querySelector('[data-testid=\"sequence\"]'),\n    ).toHaveTextContent('0 (this Transaction was emitted by a Hook)')\n  })\n\n  it('renders delegate', () => {\n    const { container } = renderDescription(DelegatePayment)\n    expect(\n      container.querySelector('[data-testid=\"delegate\"]'),\n    ).toHaveTextContent(\n      'The transaction is delegated to rNRfqQc9b9ehXJJYVR6NqPPwrS26tWeB6N',\n    )\n  })\n})\n"
  },
  {
    "path": "src/containers/Transactions/test/DetailTab.test.tsx",
    "content": "import { render, screen } from '@testing-library/react'\nimport { BrowserRouter as Router } from 'react-router'\nimport { I18nextProvider } from 'react-i18next'\nimport { QueryClientProvider } from 'react-query'\nimport Transaction from './mock_data/EscrowCreate.json'\nimport FailedTransaction from '../../shared/components/Transaction/SignerListSet/test/mock_data/SignerListSet.json'\nimport HookPayment from './mock_data/HookPayment.json'\nimport EmittedPayment from './mock_data/EmittedPayment.json'\nimport TrustSet from './mock_data/TrustSet.json'\nimport { DetailTab } from '../DetailTab'\nimport i18n from '../../../i18n/testConfigEnglish'\nimport { convertHexToString } from '../../../rippled/lib/utils'\nimport { queryClient } from '../../shared/QueryClient'\n\ndescribe('DetailTab container', () => {\n  const renderDetailTab = (transaction: any = Transaction) =>\n    render(\n      <Router>\n        <QueryClientProvider client={queryClient}>\n          <I18nextProvider i18n={i18n}>\n            <DetailTab data={transaction} />\n          </I18nextProvider>\n        </QueryClientProvider>\n      </Router>,\n    )\n\n  it('renders without crashing', () => {\n    renderDetailTab()\n  })\n\n  it('renders all parts', () => {\n    const { container } = renderDetailTab()\n    expect(container.querySelector('.detail-body')).toBeInTheDocument()\n    expect(screen.getByText('Status')).toBeInTheDocument()\n    expect(screen.getByText('Description')).toBeInTheDocument()\n    expect(screen.getByText('Memos')).toBeInTheDocument()\n    expect(screen.getByText('Transaction Cost')).toBeInTheDocument()\n    expect(screen.getByText('Flags')).toBeInTheDocument()\n    expect(screen.getByText('Meta')).toBeInTheDocument()\n  })\n\n  it('renders failed transaction', () => {\n    const { container } = renderDetailTab(FailedTransaction)\n    expect(\n      container.querySelector('.detail-section[data-testid=\"status\"]'),\n    ).toHaveTextContent(\n      'This transaction failed with a status code of tecINSUFFICIENT_RESERVE, and validated in ledger 37375929 on',\n    )\n    expect(\n      container.querySelector('.detail-section[data-testid=\"status\"] .fail'),\n    ).toHaveTextContent('tecINSUFFICIENT_RESERVE')\n  })\n\n  it('renders hooks section', () => {\n    const { container } = renderDetailTab(HookPayment)\n    const hooksSection = container.querySelector(\n      '.detail-section[data-testid=\"hooks\"]',\n    )\n    expect(hooksSection).toBeInTheDocument()\n\n    expect(\n      hooksSection?.querySelector(\n        '.detail-subsection[data-testid=\"emit-details\"]',\n      ),\n    ).not.toBeInTheDocument()\n\n    const paramWrapper = hooksSection?.querySelector(\n      '.detail-subsection[data-testid=\"hook-params\"]',\n    )\n    expect(paramWrapper).toBeInTheDocument()\n    const paramItems = paramWrapper?.querySelectorAll('li')\n    expect(paramItems).toHaveLength(2)\n    expect(paramItems?.[0]).toHaveTextContent('EVR\\x012: evnHostUpdateReg')\n    expect(paramItems?.[1]).toHaveTextContent(\n      'EVR\\x013: 0000000000000000000000000000000000000000000000000000000000000000000000350C00EE110000506A05000500000000000000000000000000000000000000000000000000000000000000000000060300000000000000000000000000000000000000000000000000000000000000000000000000000000',\n    )\n\n    const execWrapper = hooksSection?.querySelector(\n      '.detail-subsection[data-testid=\"hook-executions\"]',\n    )\n    expect(execWrapper).toBeInTheDocument()\n    expect(execWrapper?.querySelectorAll('li')).toHaveLength(1)\n    const detailLines = execWrapper?.querySelectorAll('.detail-line')\n    expect(detailLines).toHaveLength(4)\n    expect(detailLines?.[0]).toHaveTextContent(\n      'It triggered the hook BF8F18C5D5E9F8281BA5489076BE10EC095C80E9CE003BB2D6957DD81D025C02',\n    )\n    expect(detailLines?.[1]).toHaveTextContent(\n      'On the account rQUhXd7sopuga3taru3jfvc1BgVbscrb1X',\n    )\n    expect(detailLines?.[1]?.querySelector('a')).toBeInTheDocument()\n    expect(detailLines?.[2]).toHaveTextContent(\n      `Returned the code 0x1f6 with string \"${convertHexToString(\n        '2E2F7372632F72656769737472792E6300',\n      )}\"`,\n    )\n    expect(detailLines?.[3]).toHaveTextContent('Emitted 0 transactions')\n  })\n\n  it('renders hooks section for emitted tx', () => {\n    const { container } = renderDetailTab(EmittedPayment)\n    const hooksSection = container.querySelector(\n      '.detail-section[data-testid=\"hooks\"]',\n    )\n    expect(hooksSection).toBeInTheDocument()\n\n    const emitWrapper = hooksSection?.querySelector(\n      '.detail-subsection[data-testid=\"emit-details\"]',\n    )\n    expect(emitWrapper).toBeInTheDocument()\n    const emitLines = emitWrapper?.querySelectorAll('.detail-line')\n    expect(emitLines).toHaveLength(4)\n    expect(emitLines?.[0]).toHaveTextContent(\n      'Number 1 in the line of generated transactions',\n    )\n    expect(emitLines?.[1]).toHaveTextContent(\n      'Emitted by the hook A9B5411F4A4368008B4736EEE47A34B0EFCBE74016B9B94CC6208FBC0BF5C0C2',\n    )\n    expect(emitLines?.[2]).toHaveTextContent(\n      'Emitted by a hook triggered by D6DB0B8D9C864FB7B46A154BC57C7D17D9BD59C80FFD...',\n    )\n    expect(emitLines?.[2]?.querySelector('a')).toBeInTheDocument()\n    expect(emitLines?.[3]).toHaveTextContent(\n      'The emit callback is rMPwD1b8dJUaqZHaBgEvFx4ENhtpPVvDsv',\n    )\n    expect(emitLines?.[3]?.querySelector('a')).toBeInTheDocument()\n\n    expect(\n      hooksSection?.querySelector(\n        '.detail-subsection[data-testid=\"hook-params\"]',\n      ),\n    ).not.toBeInTheDocument()\n\n    const execWrapper = hooksSection?.querySelector(\n      '.detail-subsection[data-testid=\"hook-executions\"]',\n    )\n    expect(execWrapper).toBeInTheDocument()\n    expect(execWrapper?.querySelectorAll('li')).toHaveLength(1)\n    const detailLines = execWrapper?.querySelectorAll('.detail-line')\n    expect(detailLines).toHaveLength(4)\n    expect(detailLines?.[0]).toHaveTextContent(\n      'It triggered the hook A9B5411F4A4368008B4736EEE47A34B0EFCBE74016B9B94CC6208FBC0BF5C0C2',\n    )\n    expect(detailLines?.[1]).toHaveTextContent(\n      'On the account rMPwD1b8dJUaqZHaBgEvFx4ENhtpPVvDsv',\n    )\n    expect(detailLines?.[1]?.querySelector('a')).toBeInTheDocument()\n    expect(detailLines?.[2]).toHaveTextContent(\n      `Returned the code 0x8000000000000001 with string \"\"`,\n    )\n    expect(detailLines?.[3]).toHaveTextContent('Emitted 0 transactions')\n  })\n\n  it('renders flags', () => {\n    const { container } = renderDetailTab(TrustSet)\n    const expectedFlags = new Set([\n      'tfFullyCanonicalSig',\n      'tfSetDeepFreeze',\n      'tfSetFreeze',\n      'tfSetAuth',\n    ])\n\n    expect(screen.getByText('Flags')).toBeInTheDocument()\n\n    const flagsContainer = container.querySelector('.detail-section .flags')\n    expect(flagsContainer?.children).toHaveLength(expectedFlags.size)\n\n    const renderedFlags = Array.from(flagsContainer?.children || []).map(\n      (node) => node.textContent,\n    )\n\n    expect(new Set(renderedFlags)).toEqual(expectedFlags)\n  })\n})\n"
  },
  {
    "path": "src/containers/Transactions/test/Meta.test.tsx",
    "content": "import { render } from '@testing-library/react'\nimport { BrowserRouter as Router } from 'react-router'\nimport { I18nextProvider } from 'react-i18next'\nimport i18n from '../../../i18n/testConfig'\nimport Transaction from './mock_data/Transaction.json'\nimport OfferCancel from '../../shared/components/Transaction/OfferCancel/test/mock_data/OfferCancel.json'\nimport OfferCreateWithMissingPreviousFields from '../../shared/components/Transaction/OfferCreate/test/mock_data/OfferCreateWithMissingPreviousFields.json'\nimport PaymentChannelClaim from '../../shared/components/Transaction/PaymentChannelClaim/test/mock_data/PaymentChannelClaim.json'\nimport DirectMPTPayment from './mock_data/DirectMPTPayment.json'\nimport { TransactionMeta } from '../DetailTab/Meta'\nimport OfferCreateWithPermissionedDomainID from '../../shared/components/Transaction/OfferCreate/test/mock_data/OfferCreateWithPermissionedDomainID.json'\n\ndescribe('TransactionMeta container', () => {\n  const renderMeta = (data: any = Transaction) =>\n    render(\n      <Router>\n        <I18nextProvider i18n={i18n}>\n          <TransactionMeta data={data} />\n        </I18nextProvider>\n      </Router>,\n    )\n\n  it('renders without crashing', () => {\n    renderMeta()\n  })\n\n  it('renders Meta', () => {\n    const { container } = renderMeta()\n    expect(container.querySelectorAll('.title').length).toBe(1)\n    expect(container.querySelectorAll('.detail-subsection').length).toBe(1)\n    expect(container.textContent).toContain('number_of_affected_node')\n    expect(container.querySelector('.detail-subtitle')).toHaveTextContent(\n      'nodes_type',\n    )\n    expect(container.querySelectorAll('li').length).toBe(23)\n\n    const listItems = container.querySelectorAll('li')\n\n    // Check first list item contains expected content (AccountRoot)\n    expect(listItems[0]).toHaveTextContent('owned_account_root')\n    expect(listItems[0]).toHaveTextContent('rUmustd4TbkjaEuS7S1damozpBEREgRz9z')\n    expect(listItems[0]).toHaveTextContent('Balance decreased by')\n\n    // Check balance change content\n    expect(listItems[1]).toHaveTextContent('Balance decreased by')\n\n    // Check second account root\n    expect(listItems[2]).toHaveTextContent('owned_account_root')\n    expect(listItems[2]).toHaveTextContent('rPt8rwFrsucmjdKfjwRHGz9iZGxxN2cLYh')\n\n    // Check balance decrease\n    expect(listItems[3]).toHaveTextContent('Balance decreased by')\n\n    // Check third account root with balance increase\n    expect(listItems[4]).toHaveTextContent('owned_account_root')\n    expect(listItems[4]).toHaveTextContent('rEGoBvzusE2MkDn3yrgZc817XiwRofqoJq')\n    expect(listItems[4]).toHaveTextContent('Balance increased by')\n\n    expect(listItems[5]).toHaveTextContent('Balance increased by')\n\n    // Check directory node\n    expect(listItems[6]).toHaveTextContent('transaction_owned_directory')\n    expect(listItems[6]).toHaveTextContent('rETx8GBiH6fxhTcfHM9fGeyShqxozyD3xe')\n\n    // Check first offer modification\n    expect(listItems[7]).toHaveTextContent('offer_node_meta')\n\n    expect(listItems[8]).toHaveTextContent('offer_partially_filled')\n\n    expect(listItems[9]).toHaveTextContent('TakerPays')\n    expect(listItems[9]).toHaveTextContent('XRP')\n\n    expect(listItems[10]).toHaveTextContent('TakerGets')\n    expect(listItems[10]).toHaveTextContent('CNY')\n    expect(listItems[10]).toHaveTextContent(\n      'rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y',\n    )\n\n    // Check second offer modification\n    expect(listItems[11]).toHaveTextContent('offer_node_meta')\n\n    expect(listItems[12]).toHaveTextContent('offer_partially_filled')\n\n    expect(listItems[13]).toHaveTextContent('TakerPays')\n    expect(listItems[13]).toHaveTextContent('CNY')\n\n    expect(listItems[14]).toHaveTextContent('TakerGets')\n    expect(listItems[14]).toHaveTextContent('XRP')\n\n    // Check ripplestate nodes\n    expect(listItems[15]).toHaveTextContent('CNY')\n    expect(listItems[15]).toHaveTextContent('RippleState')\n    expect(listItems[15]).toHaveTextContent(\n      'rUmustd4TbkjaEuS7S1damozpBEREgRz9z',\n    )\n\n    expect(listItems[16]).toHaveTextContent('Balance changed by')\n\n    expect(listItems[17]).toHaveTextContent('CNY')\n    expect(listItems[17]).toHaveTextContent('RippleState')\n\n    expect(listItems[18]).toHaveTextContent('Balance changed by')\n\n    expect(listItems[19]).toHaveTextContent('CNY')\n    expect(listItems[19]).toHaveTextContent('RippleState')\n\n    expect(listItems[20]).toHaveTextContent('Balance changed by')\n\n    expect(listItems[21]).toHaveTextContent('CNY')\n    expect(listItems[21]).toHaveTextContent('RippleState')\n\n    expect(listItems[22]).toHaveTextContent('Balance changed by')\n  })\n\n  it('renders OfferCancel Meta', () => {\n    const { container } = renderMeta(OfferCancel)\n    expect(container.querySelectorAll('.title').length).toBe(1)\n    expect(container.querySelectorAll('.detail-subsection').length).toBe(2)\n    expect(container.textContent).toContain('number_of_affected_node')\n    expect(container.querySelector('.detail-subtitle')).toHaveTextContent(\n      'nodes_type',\n    )\n    expect(container.querySelectorAll('li').length).toBe(6)\n  })\n\n  it('renders OfferCreate Meta with missing PreviousFields', () => {\n    const { container } = renderMeta(OfferCreateWithMissingPreviousFields)\n    expect(container.querySelectorAll('.title').length).toBe(1)\n    expect(container.querySelectorAll('.detail-subsection').length).toBe(2)\n    expect(container.textContent).toContain('number_of_affected_node')\n    expect(container.querySelector('.detail-subtitle')).toHaveTextContent(\n      'nodes_type',\n    )\n    expect(container.querySelectorAll('li').length).toBe(5291)\n  })\n\n  it('renders PayChannel Meta', () => {\n    const { container } = renderMeta(PaymentChannelClaim)\n    expect(container.querySelectorAll('.title').length).toBe(1)\n    expect(container.querySelectorAll('.detail-subsection').length).toBe(1)\n    expect(container.textContent).toContain('number_of_affected_node')\n    expect(container.querySelector('.detail-subtitle')).toHaveTextContent(\n      'nodes_type',\n    )\n    expect(container.querySelectorAll('li').length).toBe(4)\n  })\n\n  it('renders MPT Payment Meta', () => {\n    const { container } = renderMeta(DirectMPTPayment)\n\n    expect(container.querySelectorAll('.title').length).toBe(1)\n    expect(container.querySelectorAll('.detail-subsection').length).toBe(1)\n    expect(container.textContent).toContain('number_of_affected_node')\n    expect(container.querySelector('.detail-subtitle')).toHaveTextContent(\n      'nodes_type',\n    )\n    const listItems = container.querySelectorAll('li')\n    expect(listItems.length).toBe(6)\n\n    // Check MPToken node modification\n    expect(listItems[2]).toHaveTextContent('MPToken')\n    expect(listItems[2]).toHaveTextContent('rnNkvddM96FE2QsaFztLAn5xicjq5d6d8d')\n    expect(listItems[2]).toHaveTextContent('Balance changed by')\n\n    expect(listItems[3]).toHaveTextContent('Balance changed by')\n    expect(listItems[3]).toHaveTextContent('100')\n\n    // Check MPTokenIssuance node modification\n    expect(listItems[4]).toHaveTextContent('MPTokenIssuance')\n    expect(listItems[4]).toHaveTextContent('rwREfyDU1SbcjN3xXZDbm8uNJV77T2ruKw')\n    expect(listItems[4]).toHaveTextContent('Outstanding balance changed by')\n\n    expect(listItems[5]).toHaveTextContent('Outstanding balance changed by')\n    expect(listItems[5]).toHaveTextContent('100')\n  })\n\n  it(`renders OfferCreate Meta with a Permissioned Domain ID`, () => {\n    const { container } = renderMeta(OfferCreateWithPermissionedDomainID)\n    expect(container.innerHTML).toContain(\n      'Domain: 4A4879496CFF23CA32242D50DA04DDB41F4561167276A62AF21899F83DF28812',\n    )\n  })\n})\n"
  },
  {
    "path": "src/containers/Transactions/test/SimpleTab.test.tsx",
    "content": "import { render, cleanup } from '@testing-library/react'\nimport { I18nextProvider } from 'react-i18next'\nimport { BrowserRouter as Router } from 'react-router'\n\nimport { QueryClientProvider } from 'react-query'\nimport EnableAmendment from './mock_data/EnableAmendment.json'\nimport Payment from '../../shared/components/Transaction/Payment/test/mock_data/Payment.json'\nimport DelegatePayment from './mock_data/DelegatePayment.json'\nimport { SimpleTab } from '../SimpleTab'\nimport summarize from '../../../rippled/lib/txSummary'\nimport i18n from '../../../i18n/testConfig'\nimport { expectSimpleRowText } from '../../shared/components/Transaction/test'\nimport SocketContext from '../../shared/SocketContext'\nimport MockWsClient from '../../test/mockWsClient'\nimport { queryClient } from '../../shared/QueryClient'\n\ndescribe('SimpleTab container', () => {\n  let client\n  const renderSimpleTab = (tx: any, width = 1200) =>\n    render(\n      <Router>\n        <QueryClientProvider client={queryClient}>\n          <I18nextProvider i18n={i18n}>\n            <SocketContext.Provider value={client}>\n              <SimpleTab\n                data={{ processed: tx, summary: summarize(tx, true).details }}\n                width={width}\n              />\n            </SocketContext.Provider>\n          </I18nextProvider>\n        </QueryClientProvider>\n      </Router>,\n    )\n\n  beforeEach(() => {\n    client = new MockWsClient()\n  })\n\n  afterEach(() => {\n    client.close()\n    cleanup()\n  })\n\n  it('renders EnableAmendment without crashing', () => {\n    renderSimpleTab(EnableAmendment)\n  })\n\n  it('renders simple tab information', () => {\n    const { container } = renderSimpleTab(Payment)\n    expect(container.querySelectorAll('.simple-body').length).toBe(1)\n    expect(container.querySelectorAll('a').length).toBe(3)\n    expectSimpleRowText(container, 'tx-date', '3/23/2018, 1:34:51 PM')\n    expectSimpleRowText(container, 'ledger-index', '37432866')\n    expectSimpleRowText(\n      container,\n      'account',\n      'rNQEMJA4PsoSrZRn9J6RajAYhcDzzhf8ok',\n    )\n    expectSimpleRowText(container, 'sequence', '31030')\n    expectSimpleRowText(container, 'tx-cost', '\\uE9000.15')\n  })\n\n  it('renders simple tab information with delegate', () => {\n    const { container } = renderSimpleTab(DelegatePayment)\n    expect(container.querySelectorAll('.simple-body').length).toBe(1)\n    expect(container.querySelectorAll('a').length).toBe(4)\n    expectSimpleRowText(container, 'tx-date', '5/20/2025, 6:23:20 PM')\n    expectSimpleRowText(container, 'ledger-index', '2947137')\n    expectSimpleRowText(\n      container,\n      'account',\n      'rfFLs8ZknoJKHCw7MtJKcs8GL81dqoDGRz',\n    )\n    expectSimpleRowText(\n      container,\n      'delegate',\n      'rNRfqQc9b9ehXJJYVR6NqPPwrS26tWeB6N',\n    )\n    expectSimpleRowText(container, 'sequence', '2947132')\n    expectSimpleRowText(container, 'tx-cost', '\\uE9000.000001')\n  })\n})\n"
  },
  {
    "path": "src/containers/Transactions/test/Transaction.test.tsx",
    "content": "import { render, waitFor } from '@testing-library/react'\nimport { Route } from 'react-router'\nimport mockTransaction from './mock_data/Transaction.json'\nimport mockTransactionSummary from './mock_data/TransactionSummary.json'\nimport i18n from '../../../i18n/testConfig'\nimport { Transaction } from '../index'\nimport { getTransaction } from '../../../rippled'\nimport { Error as RippledError } from '../../../rippled/lib/utils'\nimport { QuickHarness } from '../../test/utils'\nimport Mock = jest.Mock\n\njest.mock('../../../rippled', () => {\n  const originalModule = jest.requireActual('../../../rippled')\n\n  return {\n    __esModule: true,\n    ...originalModule,\n    getTransaction: jest.fn(),\n  }\n})\n\nconst mockedGetTransaction: Mock = getTransaction as Mock\n\ndescribe('Transaction container', () => {\n  const renderTransaction = (\n    hash = '50BB0CC6EFC4F5EF9954E654D3230D4480DC83907A843C736B28420C7F02F774',\n    tab = 'simple',\n  ) =>\n    render(\n      <QuickHarness\n        i18n={i18n}\n        initialEntries={[`/transactions/${hash}/${tab}`]}\n      >\n        <Route\n          path=\"/transactions/:identifier?/:tab?\"\n          element={<Transaction />}\n        />\n      </QuickHarness>,\n    )\n  afterEach(() => {\n    mockedGetTransaction.mockReset()\n  })\n\n  it('renders without crashing', () => {\n    renderTransaction()\n  })\n\n  it('renders loading', () => {\n    const { container } = renderTransaction()\n    expect(container.querySelectorAll('.loader').length).toBe(1)\n  })\n\n  it('renders 404 page on no match', async () => {\n    mockedGetTransaction.mockImplementation(() =>\n      Promise.reject(new RippledError('transaction not found', 404)),\n    )\n\n    const { container } = renderTransaction()\n    await waitFor(() => {\n      expect(container.querySelector('.no-match .title')).toHaveTextContent(\n        'transaction_not_found',\n      )\n    })\n    const hints = container.querySelectorAll('.no-match .hint')\n    expect(hints[0]).toHaveTextContent('server_ledgers_hint')\n    expect(hints[1]).toHaveTextContent('check_transaction_hash')\n  })\n\n  it('renders invalid hash page', async () => {\n    const { container } = renderTransaction('aaaa')\n    await waitFor(() => {\n      expect(container.querySelector('.no-match .title')).toHaveTextContent(\n        'invalid_transaction_hash',\n      )\n    })\n    expect(container.querySelector('.no-match .hint')).toHaveTextContent(\n      'check_transaction_hash',\n    )\n  })\n\n  it('renders error page', async () => {\n    mockedGetTransaction.mockImplementation(() =>\n      Promise.reject(new RippledError('transaction not validated', 500)),\n    )\n    const { container } = renderTransaction()\n    await waitFor(() => {\n      expect(container.querySelector('.no-match .title')).toHaveTextContent(\n        'generic_error',\n      )\n    })\n    expect(container.querySelector('.no-match .hint')).toHaveTextContent(\n      'not_your_fault',\n    )\n  })\n\n  describe('with results', () => {\n    beforeEach(async () => {\n      const transaction = {\n        processed: mockTransaction,\n        summary: mockTransactionSummary,\n      }\n\n      mockedGetTransaction.mockImplementation(() =>\n        Promise.resolve(transaction),\n      )\n    })\n\n    it('renders summary section', async () => {\n      const { container } = renderTransaction(mockTransaction.hash)\n      await waitFor(() => {\n        expect(container.querySelectorAll('.transaction').length).toBe(1)\n        expect(container.querySelector('.summary')).toBeInTheDocument()\n      })\n\n      const summary = container.querySelector('.summary')\n      expect(summary?.querySelector('.type')).toHaveTextContent('OfferCreate')\n\n      const txids = container.querySelectorAll('.txid')\n      expect(txids.length).toBe(2)\n      expect(txids[0]).toHaveTextContent(`hash: ${mockTransaction.hash}`)\n      expect(txids[1]).toHaveTextContent(`CTID: ${mockTransaction.tx.ctid}`)\n      // TxStatus component renders success class for tesSUCCESS\n      expect(summary?.querySelector('.tx-status.success')).toBeInTheDocument()\n      expect(container.querySelectorAll('.tabs').length).toBe(1)\n      const tabs = container.querySelectorAll('a.tab')\n      expect(tabs.length).toBe(3)\n      expect(tabs[0].getAttribute('title')).toBe('simple')\n      expect(tabs[1].getAttribute('title')).toBe('detailed')\n      expect(tabs[2].getAttribute('title')).toBe('raw')\n      expect(container.querySelector('a.tab.selected')).toHaveTextContent(\n        'simple',\n      )\n    })\n\n    it('renders detailed tab', async () => {\n      const { container } = renderTransaction(mockTransaction.hash, 'detailed')\n      await waitFor(() => {\n        expect(container.querySelector('a.tab.selected')).toHaveTextContent(\n          'detailed',\n        )\n      })\n      expect(container.querySelectorAll('.detail-body').length).toBe(1)\n    })\n\n    it('renders raw tab', async () => {\n      const { container } = renderTransaction(mockTransaction.hash, 'raw')\n      await waitFor(() => {\n        expect(container.querySelector('a.tab.selected')).toHaveTextContent(\n          'raw',\n        )\n      })\n      expect(container.querySelectorAll('.json-view').length).toBe(1)\n    })\n  })\n})\n"
  },
  {
    "path": "src/containers/Transactions/test/mock_data/DelegatePayment.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rfFLs8ZknoJKHCw7MtJKcs8GL81dqoDGRz\",\n    \"Amount\": \"1000000\",\n    \"Delegate\": \"rNRfqQc9b9ehXJJYVR6NqPPwrS26tWeB6N\",\n    \"DeliverMax\": \"1000000\",\n    \"Destination\": \"rsyK6CetAoRxXotHbYpp32oQQgD4JmvfBQ\",\n    \"Fee\": \"1\",\n    \"Flags\": 0,\n    \"LastLedgerSequence\": 2947155,\n    \"Sequence\": 2947132,\n    \"SigningPubKey\": \"EDDC6A30775BE8B5E6E1007508ADE0DE00183D0BE41E5ED5331AAC4ED06849C640\",\n    \"TransactionType\": \"Payment\",\n    \"TxnSignature\": \"873B4198D657B6F079A0D4E728EEF65A51AF2C0A85243085895728D2B2A8E8075C063A38B99FB3E207996648E99367E07B244D71C054A000B0FA7B563477AB00\",\n    \"ctid\": \"C02CF84100000002\",\n    \"date\": 1747765400000,\n    \"hash\": \"undefined\",\n    \"inLedger\": \"undefined\",\n    \"ledger_index\": \"undefined\",\n    \"meta\": \"undefined\",\n    \"validated\": \"undefined\",\n    \"metaData\": \"undefined\",\n    \"status\": \"undefined\"\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rfFLs8ZknoJKHCw7MtJKcs8GL81dqoDGRz\",\n            \"Balance\": \"98999999\",\n            \"Flags\": 0,\n            \"OwnerCount\": 1,\n            \"Sequence\": 2947133\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"186BA30C233AEABA324162B0F0C67EFE31CDED0EBDA824E1F55A2D3AB19FC461\",\n          \"PreviousFields\": {\n            \"Balance\": \"99999999\",\n            \"Sequence\": 2947132\n          },\n          \"PreviousTxnID\": \"0E48E0E9F68F4DE642B439EFCF0A2BF4C2F79B528483CE1B7DCF20F531E613E8\",\n          \"PreviousTxnLgrSeq\": 2947135\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rsyK6CetAoRxXotHbYpp32oQQgD4JmvfBQ\",\n            \"Balance\": \"101000000\",\n            \"Flags\": 0,\n            \"OwnerCount\": 0,\n            \"Sequence\": 2947133\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"4649A0C0B4A7055A102576A7933F7F22FC0AEE780B18E4C729F6F4B43D24090B\",\n          \"PreviousFields\": {\n            \"Balance\": \"100000000\"\n          },\n          \"PreviousTxnID\": \"E9E99D8A1FFAD0C2B7EC3FA47B616999DD59A7334E49BCAAB9456253B40BBE31\",\n          \"PreviousTxnLgrSeq\": 2947133\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rNRfqQc9b9ehXJJYVR6NqPPwrS26tWeB6N\",\n            \"Balance\": \"99999999\",\n            \"Flags\": 0,\n            \"OwnerCount\": 0,\n            \"Sequence\": 2947132\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"FD174E3F989ADEC2194A51FADFB257F22475CCB2150E64F5FBCF4DD9F759C38C\",\n          \"PreviousFields\": {\n            \"Balance\": \"100000000\"\n          },\n          \"PreviousTxnID\": \"5206FDB8E9A289228C744B70123BA8285E3F698E2DF72EB666B5C242A1C89857\",\n          \"PreviousTxnLgrSeq\": 2947132\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tesSUCCESS\",\n    \"delivered_amount\": \"1000000\"\n  },\n  \"hash\": \"F8628ACECCA5E03E80F8BAA0BE6DAFCDBF025C91C7713B1B093AF663E992444C\",\n  \"ledger_index\": 2947137,\n  \"date\": 1747765400000\n}\n"
  },
  {
    "path": "src/containers/Transactions/test/mock_data/DirectMPTPayment.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rwREfyDU1SbcjN3xXZDbm8uNJV77T2ruKw\",\n    \"Amount\": {\n      \"mpt_issuance_id\": \"0000301C674EE6ECD0374A628E2C442EF8E3BBBEE8C58CF3\",\n      \"value\": \"100\"\n    },\n    \"DeliverMax\": {\n      \"mpt_issuance_id\": \"0000301C674EE6ECD0374A628E2C442EF8E3BBBEE8C58CF3\",\n      \"value\": \"100\"\n    },\n    \"Destination\": \"rnNkvddM96FE2QsaFztLAn5xicjq5d6d8d\",\n    \"Fee\": \"10\",\n    \"Flags\": 2147483648,\n    \"Sequence\": 12317,\n    \"SigningPubKey\": \"ED1E43F90700506F98E45CC8E77563ACB8FF0338739229AC98F0E1AEB409E786F9\",\n    \"TransactionType\": \"Payment\",\n    \"TxnSignature\": \"9949EF3E718A6776586A1DD91256C4055E761CBF1CE7A351912C08FE1BB415F6638FA096CAAE88D30B32E684448CDC52DEB022A7E3576AFA0C6E5ABB7BE2FE02\",\n    \"ctid\": \"C000302000000000\",\n    \"date\": 1712087804000,\n    \"hash\": \"undefined\",\n    \"inLedger\": \"undefined\",\n    \"ledger_index\": \"undefined\",\n    \"meta\": \"undefined\",\n    \"validated\": \"undefined\",\n    \"metaData\": \"undefined\",\n    \"status\": \"undefined\"\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rwREfyDU1SbcjN3xXZDbm8uNJV77T2ruKw\",\n            \"Balance\": \"99999980\",\n            \"Flags\": 0,\n            \"OwnerCount\": 1,\n            \"Sequence\": 12318\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"80909CC95DCD7E5E08631635C559E218D42C49721A1285192885B46E4737CF60\",\n          \"PreviousFields\": {\n            \"Balance\": \"99999990\",\n            \"Sequence\": 12317\n          },\n          \"PreviousTxnID\": \"C9D0965E7A13F54186B6501D08ED54D74AA946A856D96BF7AAE18EA5FD5E93C2\",\n          \"PreviousTxnLgrSeq\": 12318\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rnNkvddM96FE2QsaFztLAn5xicjq5d6d8d\",\n            \"Flags\": 0,\n            \"MPTAmount\": \"100\",\n            \"MPTokenIssuanceID\": \"0000301C674EE6ECD0374A628E2C442EF8E3BBBEE8C58CF3\",\n            \"OwnerNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"MPToken\",\n          \"LedgerIndex\": \"9B2E5EA9ACF16B591B941CAE5323EBED55E42495B16C92DC9FBEC0997E8E6804\",\n          \"PreviousFields\": {},\n          \"PreviousTxnID\": \"4C41449D0C083746CC93DDA78F00E97AB8B857188E805F39C1A250F8C9467982\",\n          \"PreviousTxnLgrSeq\": 12319\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 64,\n            \"Issuer\": \"rwREfyDU1SbcjN3xXZDbm8uNJV77T2ruKw\",\n            \"OutstandingAmount\": \"100\",\n            \"OwnerNode\": \"0\",\n            \"Sequence\": 12316\n          },\n          \"LedgerEntryType\": \"MPTokenIssuance\",\n          \"LedgerIndex\": \"C38E54FD2C98FE848FE31CDA95F6F990A9A8715987171DA342A3296B7A9123B6\",\n          \"PreviousFields\": {\n            \"OutstandingAmount\": \"0\"\n          },\n          \"PreviousTxnID\": \"C9D0965E7A13F54186B6501D08ED54D74AA946A856D96BF7AAE18EA5FD5E93C2\",\n          \"PreviousTxnLgrSeq\": 12318\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tesSUCCESS\",\n    \"delivered_amount\": {\n      \"mpt_issuance_id\": \"0000301C674EE6ECD0374A628E2C442EF8E3BBBEE8C58CF3\",\n      \"value\": \"100\"\n    }\n  },\n  \"hash\": \"5E74603F7C2E11030E644E681508FD1F24CAEB4CC0CE1F35A6230689D9694E85\",\n  \"ledger_index\": 12320,\n  \"date\": 1712087804000\n}\n"
  },
  {
    "path": "src/containers/Transactions/test/mock_data/EmittedPayment.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rMPwD1b8dJUaqZHaBgEvFx4ENhtpPVvDsv\",\n    \"Amount\": \"999999\",\n    \"Destination\": \"rfCarbonVNTuXckX6x2qTMFmFSnm6dEWGX\",\n    \"DestinationTag\": 0,\n    \"EmitDetails\": {\n      \"EmitBurden\": \"1\",\n      \"EmitCallback\": \"rMPwD1b8dJUaqZHaBgEvFx4ENhtpPVvDsv\",\n      \"EmitGeneration\": 1,\n      \"EmitHookHash\": \"A9B5411F4A4368008B4736EEE47A34B0EFCBE74016B9B94CC6208FBC0BF5C0C2\",\n      \"EmitNonce\": \"74AEA17E77DCE55FD7E37098B3B96DFFD9E3A3CAD03823D723590D7F2813AC85\",\n      \"EmitParentTxnID\": \"1D2E4D286D7EF7D13BD3D6DB0B8D9C864FB7B46A154BC57C7D17D9BD59C80FFD\"\n    },\n    \"Fee\": \"31\",\n    \"FirstLedgerSequence\": 4309433,\n    \"Flags\": 2147483648,\n    \"LastLedgerSequence\": 4309437,\n    \"Sequence\": 0,\n    \"SigningPubKey\": \"000000000000000000000000000000000000000000000000000000000000000000\",\n    \"SourceTag\": 0,\n    \"TransactionType\": \"Payment\",\n    \"ctid\": \"C041C1B90001535A\",\n    \"date\": 1687874661000\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"EmittedTxn\": {\n              \"Account\": \"rMPwD1b8dJUaqZHaBgEvFx4ENhtpPVvDsv\",\n              \"Amount\": \"999999\",\n              \"Destination\": \"rfCarbonVNTuXckX6x2qTMFmFSnm6dEWGX\",\n              \"DestinationTag\": 0,\n              \"EmitDetails\": {\n                \"EmitBurden\": \"1\",\n                \"EmitCallback\": \"rMPwD1b8dJUaqZHaBgEvFx4ENhtpPVvDsv\",\n                \"EmitGeneration\": 1,\n                \"EmitHookHash\": \"A9B5411F4A4368008B4736EEE47A34B0EFCBE74016B9B94CC6208FBC0BF5C0C2\",\n                \"EmitNonce\": \"74AEA17E77DCE55FD7E37098B3B96DFFD9E3A3CAD03823D723590D7F2813AC85\",\n                \"EmitParentTxnID\": \"1D2E4D286D7EF7D13BD3D6DB0B8D9C864FB7B46A154BC57C7D17D9BD59C80FFD\"\n              },\n              \"Fee\": \"31\",\n              \"FirstLedgerSequence\": 4309433,\n              \"Flags\": 2147483648,\n              \"LastLedgerSequence\": 4309437,\n              \"Sequence\": 0,\n              \"SigningPubKey\": \"000000000000000000000000000000000000000000000000000000000000000000\",\n              \"SourceTag\": 0,\n              \"TransactionType\": \"Payment\"\n            },\n            \"Flags\": 0,\n            \"OwnerNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"EmittedTxn\",\n          \"LedgerIndex\": \"30B66645E9A4DBD71BDE0EC2DCE2A0A8D89BB4A6885EBB83666EBF5A0FBE26D3\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 4,\n            \"RootIndex\": \"B4DE823055D00BC12CD78FE1AAF74EE6062195B2629F49A25915A39C64BE1900\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"B4DE823055D00BC12CD78FE1AAF74EE6062195B2629F49A25915A39C64BE1900\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rMPwD1b8dJUaqZHaBgEvFx4ENhtpPVvDsv\",\n            \"Balance\": \"9396541450\",\n            \"Flags\": 0,\n            \"OwnerCount\": 1,\n            \"Sequence\": 4280223\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"FDD5F4ABDFBF8EEE583BCAF910E66A6862941BE5E644E4DEA4BFB9362B8CCADF\",\n          \"PreviousFields\": {\n            \"Balance\": \"9396541481\"\n          }\n        }\n      }\n    ],\n    \"HookExecutions\": [\n      {\n        \"HookExecution\": {\n          \"HookAccount\": \"rMPwD1b8dJUaqZHaBgEvFx4ENhtpPVvDsv\",\n          \"HookEmitCount\": 0,\n          \"HookExecutionIndex\": 0,\n          \"HookHash\": \"A9B5411F4A4368008B4736EEE47A34B0EFCBE74016B9B94CC6208FBC0BF5C0C2\",\n          \"HookInstructionCount\": \"25\",\n          \"HookResult\": 2,\n          \"HookReturnCode\": \"8000000000000001\",\n          \"HookReturnString\": \"\",\n          \"HookStateChangeCount\": 0\n        }\n      }\n    ],\n    \"TransactionIndex\": 1,\n    \"TransactionResult\": \"tecNO_DST_INSUF_XRP\"\n  },\n  \"hash\": \"0B5F24CD8DCA13ABA7FD1B340AF489E7FC45201B6908ED38FFA561660BBBB567\",\n  \"ledger_index\": 4309433,\n  \"date\": 1687874661000\n}\n"
  },
  {
    "path": "src/containers/Transactions/test/mock_data/EnableAmendment.json",
    "content": "{\n  \"hash\": \"A5E2FF0168752EBA1363C4BB63FE67BB8FDAB32F36C4E508864B3E3D8DAF79AC\",\n  \"ledger_index\": 37421057,\n  \"date\": \"2018-03-23T01:42:41+00:00\",\n  \"tx\": {\n    \"TransactionType\": \"EnableAmendment\",\n    \"Flags\": 65536,\n    \"Sequence\": 0,\n    \"LedgerSequence\": 37421057,\n    \"Amendment\": \"F64E1EABBE79D55B3BB82020516CEC2C582A98A6BFE20FBE9BB6A0D233418064\",\n    \"Fee\": \"0\",\n    \"SigningPubKey\": \"\",\n    \"Account\": \"rrrrrrrrrrrrrrrrrrrrrhoLvTp\"\n  },\n  \"meta\": {\n    \"TransactionIndex\": 7,\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"LedgerEntryType\": \"Amendments\",\n          \"LedgerIndex\": \"7DB0788C020F02780A673DC74757F23823FA3014C1866E72CC4CD8B226CD6EF4\",\n          \"PreviousFields\": {\n            \"Majorities\": [\n              {\n                \"Majority\": {\n                  \"CloseTime\": 575084560,\n                  \"Amendment\": \"67A34F2CF55BFC0F93AACD5B281413176FEE195269FA6D95219A2DF738671172\"\n                }\n              }\n            ]\n          },\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Majorities\": [\n              {\n                \"Majority\": {\n                  \"CloseTime\": 575084560,\n                  \"Amendment\": \"67A34F2CF55BFC0F93AACD5B281413176FEE195269FA6D95219A2DF738671172\"\n                }\n              },\n              {\n                \"Majority\": {\n                  \"CloseTime\": 575084560,\n                  \"Amendment\": \"F64E1EABBE79D55B3BB82020516CEC2C582A98A6BFE20FBE9BB6A0D233418064\"\n                }\n              }\n            ],\n            \"Amendments\": [\n              \"42426C4D4F1009EE67080A9B7965B44656D7714D104A72F9B4369F97ABF044EE\",\n              \"4C97EBA926031A7CF7D7B36FDE3ED66DDA5421192D63DE53FFB46E43B9DC8373\",\n              \"6781F8368C4771B83E8B821D88F580202BCB4228075297B19E4FDC5233F1EFDC\",\n              \"740352F2412A9909880C23A559FCECEDA3BE2126FED62FC7660D628A06927F11\",\n              \"1562511F573A19AE9BD103B5D6B9E01B3B46805AEC5D3C4805C902B514399146\",\n              \"532651B4FD58DF8922A49BA101AB3E996E5BFBF95A913B3E392504863E63B164\",\n              \"08DE7D96082187F6E6578530258C77FAABABE4C20474BDB82F04B021F1A68647\",\n              \"E2E6F2866106419B88C50045ACE96368558C345566AC8F2BDF5A5B5587F0E6FA\",\n              \"07D43DCE529B15A10827E5E04943B496762F9A88E3268269D69C44BE49E21104\",\n              \"42EEA5E28A97824821D4EF97081FE36A54E9593C6E4F20CBAE098C69D2E072DC\",\n              \"DC9CA96AEA1DCF83E527D1AFC916EFAF5D27388ECA4060A88817C1238CAEE0BF\",\n              \"1D3463A5891F9E589C5AE839FFAC4A917CE96197098A1EF22304E1BC5B98A454\",\n              \"6C92211186613F9647A89DFFBAB8F94C99D4C7E956D495270789128569177DA1\",\n              \"CC5ABAE4F3EC92E94A59B1908C2BE82D2228B6485C00AFF8F22DF930D89C194E\",\n              \"B9E739B8296B4A1BB29BE990B17D66E21B62A300A909F25AC55C22D6C72E1F9D\",\n              \"B4D44CC3111ADD964E846FC57760C8B50FFCD5A82C86A72756F6B058DDDF96AD\"\n            ]\n          }\n        }\n      }\n    ],\n    \"TransactionResult\": \"tesSUCCESS\"\n  }\n}\n"
  },
  {
    "path": "src/containers/Transactions/test/mock_data/EscrowCreate.json",
    "content": "{\n  \"hash\": \"27D43BD746193512ABD670DBE9C646F341BDCEDB0741CF862F64190E2851CAD1\",\n  \"ledger_index\": 37471281,\n  \"date\": \"2018-03-25T04:10:21+00:00\",\n  \"tx\": {\n    \"TransactionType\": \"EscrowCreate\",\n    \"Flags\": 2147483648,\n    \"Sequence\": 104,\n    \"FinishAfter\": 636368460,\n    \"CancelAfter\": 636368060,\n    \"Amount\": \"997500000\",\n    \"Fee\": \"10\",\n    \"SigningPubKey\": \"02D4BAE5988733A2BEA96021337CA85F0056D9AA47BCF0E16E0E527A0A28DB100D\",\n    \"TxnSignature\": \"30440220286F11B955EF4CA3A033503DC2C8E42F259A6A3A196E362453EFBB04F8ABF62902204998A8A74EDB142456E673345AB7ABB7A36506D6C8E5694B5D707108991C32C4\",\n    \"Condition\": \"A0258020886F982742772F414243855DC13B348FC78FB3D5119412C8A6480114E36A4451810120\",\n    \"Account\": \"rLbgNAngLq3HABBXK4uPGCHrqeZwgaYi8q\",\n    \"Destination\": \"rLbgNAngLq3HABBXK4uPGCHrqeZwgaYi7q\",\n    \"Memos\": [\n      {\n        \"Memo\": {\n          \"MemoType\": \"687474703A2F2F6578616D706C652E636F6D2F6D656D6F2F67656E65726963\",\n          \"MemoData\": \"\"\n        }\n      }\n    ]\n  },\n  \"meta\": {\n    \"TransactionIndex\": 7,\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"190D286E5687F825EA226482C56EB967011B258AB1F5B8F5028534E5030CA6B8\",\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"RootIndex\": \"190D286E5687F825EA226482C56EB967011B258AB1F5B8F5028534E5030CA6B8\",\n            \"Owner\": \"rLbgNAngLq3HABBXK4uPGCHrqeZwgaYi8q\"\n          }\n        }\n      },\n      {\n        \"CreatedNode\": {\n          \"LedgerEntryType\": \"Escrow\",\n          \"LedgerIndex\": \"949D6E2DC8878166D6043348067D4672340C9710E950286E89D8385081B64C72\",\n          \"NewFields\": {\n            \"FinishAfter\": 636368460,\n            \"Amount\": \"997500000\",\n            \"Condition\": \"A0258020886F982742772F414243855DC13B348FC78FB3D5119412C8A6480114E36A4451810120\",\n            \"Account\": \"rLbgNAngLq3HABBXK4uPGCHrqeZwgaYi8q\",\n            \"Destination\": \"rLbgNAngLq3HABBXK4uPGCHrqeZwgaYi8q\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"PreviousTxnLgrSeq\": 37471281,\n          \"PreviousTxnID\": \"81D8CE5B4489301E2906632250D05B429F1849CC69F14F205C23C0E142C12B33\",\n          \"LedgerIndex\": \"BEAB548BF4AA0ED98E8DD381D566A56C35C20B49A4E9B1A10A7F334B0B50CB4C\",\n          \"PreviousFields\": {\n            \"Sequence\": 104,\n            \"OwnerCount\": 25,\n            \"Balance\": \"8132542897\"\n          },\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Sequence\": 105,\n            \"OwnerCount\": 26,\n            \"Balance\": \"7135042887\",\n            \"Account\": \"rLbgNAngLq3HABBXK4uPGCHrqeZwgaYi8q\"\n          }\n        }\n      }\n    ],\n    \"TransactionResult\": \"tesSUCCESS\"\n  }\n}\n"
  },
  {
    "path": "src/containers/Transactions/test/mock_data/HookPayment.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rKrSVLgaKQANTSEv1bY4cT4PVThCzFXpX6\",\n    \"Amount\": \"1\",\n    \"Destination\": \"rQUhXd7sopuga3taru3jfvc1BgVbscrb1X\",\n    \"Fee\": \"11872\",\n    \"Flags\": 0,\n    \"HookParameters\": [\n      {\n        \"HookParameter\": {\n          \"HookParameterName\": \"4556520100000000000000000000000000000000000000000000000000000002\",\n          \"HookParameterValue\": \"65766E486F7374557064617465526567\"\n        }\n      },\n      {\n        \"HookParameter\": {\n          \"HookParameterName\": \"4556520100000000000000000000000000000000000000000000000000000003\",\n          \"HookParameterValue\": \"0000000000000000000000000000000000000000000000000000000000000000000000350C00EE110000506A05000500000000000000000000000000000000000000000000000000000000000000000000060300000000000000000000000000000000000000000000000000000000000000000000000000000000\"\n        }\n      }\n    ],\n    \"LastLedgerSequence\": 4291160,\n    \"Memos\": [],\n    \"NetworkID\": 21338,\n    \"Sequence\": 3006427,\n    \"SigningPubKey\": \"0309EAAD262DD00DFD62583BDBBE2CC1C599A6C4BD9D1009AACE65DF36D77FD3B5\",\n    \"TransactionType\": \"Payment\",\n    \"TxnSignature\": \"3044022053983031B2425E6D9B594749CC3216DE3FA7A417D996F479E5ABD5A36C67D915022004773723B770E6ADCCFFC4DCCBC95CC81EEBE7C43B6B2CA98DABAB852491E229\",\n    \"ctid\": \"C0417A510000535A\",\n    \"date\": 1687819140000\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rQUhXd7sopuga3taru3jfvc1BgVbscrb1X\",\n            \"Balance\": \"28842707832\",\n            \"Flags\": 0,\n            \"OwnerCount\": 132,\n            \"Sequence\": 1784915\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"345E63077F8C9DF1D60DD91A6C7651A47A09388A58FF3FBAAFEA85E190C3BFE6\",\n          \"PreviousFields\": {\n            \"Balance\": \"28842707831\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rKrSVLgaKQANTSEv1bY4cT4PVThCzFXpX6\",\n            \"Balance\": \"9837494804\",\n            \"Domain\": \"656E312E65326368617274732E636F6D\",\n            \"Flags\": 8388608,\n            \"MessageKey\": \"0309EAAD262DD00DFD62583BDBBE2CC1C599A6C4BD9D1009AACE65DF36D77FD3B5\",\n            \"OwnerCount\": 4,\n            \"Sequence\": 3006428\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"42378CC3CFC4C4D7B995B21A223DC67F9821869D5DA81FA2254351E8AA0C3C93\",\n          \"PreviousFields\": {\n            \"Balance\": \"9837506677\",\n            \"Sequence\": 3006427\n          }\n        }\n      }\n    ],\n    \"HookExecutions\": [\n      {\n        \"HookExecution\": {\n          \"HookAccount\": \"rQUhXd7sopuga3taru3jfvc1BgVbscrb1X\",\n          \"HookEmitCount\": 0,\n          \"HookExecutionIndex\": 0,\n          \"HookHash\": \"BF8F18C5D5E9F8281BA5489076BE10EC095C80E9CE003BB2D6957DD81D025C02\",\n          \"HookInstructionCount\": \"5f3\",\n          \"HookResult\": 3,\n          \"HookReturnCode\": \"1f6\",\n          \"HookReturnString\": \"2E2F7372632F72656769737472792E6300\",\n          \"HookStateChangeCount\": 12\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tesSUCCESS\",\n    \"delivered_amount\": \"1\"\n  },\n  \"hash\": \"4708F405B482296B86B7B89C97838DBEEB7F388919AAAF563F9D4B4231DF48FD\",\n  \"ledger_index\": 4291153,\n  \"date\": 1687819140000\n}\n"
  },
  {
    "path": "src/containers/Transactions/test/mock_data/OfferCreateTicket.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rf4VZ6LYKnPY1uaEiZF8qzD8vrW91vvjbb\",\n    \"Fee\": \"10\",\n    \"Flags\": 65536,\n    \"LastLedgerSequence\": 80986097,\n    \"Sequence\": 0,\n    \"SigningPubKey\": \"EDD17BABBBECFEFE3FCC777113E2A3B9F12F3747B92E6E822E04FE0F2EAFDCF83C\",\n    \"TakerGets\": {\n      \"currency\": \"EUR\",\n      \"issuer\": \"rhub8VRN55s94qWKDv6jmDy1pUykJzF3wq\",\n      \"value\": \"1362.49752\"\n    },\n    \"TakerPays\": {\n      \"currency\": \"GBP\",\n      \"issuer\": \"r4GN9eEoz9K4BhMQXe4H1eYNtvtkwGdt8g\",\n      \"value\": \"1168.4025\"\n    },\n    \"TicketSequence\": 79469284,\n    \"TransactionType\": \"OfferCreate\",\n    \"TxnSignature\": \"337F766904250BD32A46EE74C7A6624F108769BAD04EDBB818C22B007D994700B90E043017EBB3582922676B62E65299214DB79AC563AD292EC97B08A357A509\",\n    \"date\": 1688757492000\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"32fc\",\n            \"Owner\": \"rf4VZ6LYKnPY1uaEiZF8qzD8vrW91vvjbb\",\n            \"RootIndex\": \"031ACE475F9337139A17B266C859DC92F26154380AF93F77C72036BAAA3A9999\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"4FB37C0D16E9CAF664BD74FFCBCE65F06F9B1BE048011A9251ED5AC7B255C228\"\n        }\n      },\n      {\n        \"CreatedNode\": {\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"677F2CF01C84ED748C2A0B146D740B716E8777E327835F1D5173BC1F28BF6704\",\n          \"NewFields\": {\n            \"Account\": \"rf4VZ6LYKnPY1uaEiZF8qzD8vrW91vvjbb\",\n            \"BookDirectory\": \"BEED7204994F6D7E6967B2BFAA27880866F54F6F30BBA3B2541E7752CC657FC6\",\n            \"Flags\": 65536,\n            \"OwnerNode\": \"32fd\",\n            \"Sequence\": 79469284,\n            \"TakerGets\": {\n              \"currency\": \"EUR\",\n              \"issuer\": \"rhub8VRN55s94qWKDv6jmDy1pUykJzF3wq\",\n              \"value\": \"1362.49752\"\n            },\n            \"TakerPays\": {\n              \"currency\": \"GBP\",\n              \"issuer\": \"r4GN9eEoz9K4BhMQXe4H1eYNtvtkwGdt8g\",\n              \"value\": \"1168.4025\"\n            }\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"32f7\",\n            \"IndexPrevious\": \"32f3\",\n            \"Owner\": \"rf4VZ6LYKnPY1uaEiZF8qzD8vrW91vvjbb\",\n            \"RootIndex\": \"031ACE475F9337139A17B266C859DC92F26154380AF93F77C72036BAAA3A9999\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"7632CE5B80F3C7E1D636BE4ACEEFACAA5D654A3A7AC553E0F069BC90A79A8EED\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rf4VZ6LYKnPY1uaEiZF8qzD8vrW91vvjbb\",\n            \"Flags\": 0,\n            \"OwnerNode\": \"32f6\",\n            \"PreviousTxnID\": \"1EE9C1A86FE001213E77CD9514594969C9B72660F021E6CA356ACE964081EC5E\",\n            \"PreviousTxnLgrSeq\": 80985444,\n            \"TicketSequence\": 79469284\n          },\n          \"LedgerEntryType\": \"Ticket\",\n          \"LedgerIndex\": \"945B6605EE9AC922C81C3FCCDFB5B995FAC97923CEF190E4176B93553A00C542\"\n        }\n      },\n      {\n        \"CreatedNode\": {\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BEED7204994F6D7E6967B2BFAA27880866F54F6F30BBA3B2541E7752CC657FC6\",\n          \"NewFields\": {\n            \"ExchangeRate\": \"541e7752cc657fc6\",\n            \"RootIndex\": \"BEED7204994F6D7E6967B2BFAA27880866F54F6F30BBA3B2541E7752CC657FC6\",\n            \"TakerGetsCurrency\": \"0000000000000000000000004555520000000000\",\n            \"TakerGetsIssuer\": \"2ADB0B3959D60A6E6991F729E1918B7163925230\",\n            \"TakerPaysCurrency\": \"0000000000000000000000004742500000000000\",\n            \"TakerPaysIssuer\": \"E93BDB6C7098EF415FEA6C4B7A7A76BF9289118B\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rf4VZ6LYKnPY1uaEiZF8qzD8vrW91vvjbb\",\n            \"Balance\": \"389253477\",\n            \"Flags\": 0,\n            \"OwnerCount\": 157,\n            \"Sequence\": 79469653,\n            \"TicketCount\": 134\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"E306A63B590C825C6278CC92A7D29E4030BA9DE4DE748CD9F9891F01B7045943\",\n          \"PreviousFields\": {\n            \"Balance\": \"389253487\",\n            \"TicketCount\": 135\n          },\n          \"PreviousTxnID\": \"E32F95AABE7A3147952386495EA30075B99244BC7F69643E7D4268D43CDBCE3A\",\n          \"PreviousTxnLgrSeq\": 80986079\n        }\n      }\n    ],\n    \"TransactionIndex\": 22,\n    \"TransactionResult\": \"tesSUCCESS\"\n  },\n  \"hash\": \"BD19F7D08D7470E15B3F7329421B20B7511E9FDB2C9EB8C0E1F11540EAC76070\",\n  \"ledger_index\": 80986080,\n  \"date\": 1688757492000\n}\n"
  },
  {
    "path": "src/containers/Transactions/test/mock_data/Transaction.json",
    "content": "{\n  \"hash\": \"50BB0CC6EFC4F5EF9954E654D3230D4480DC83907A843C736B28420C7F02F774\",\n  \"ledger_index\": 37262431,\n  \"date\": \"2018-03-16T08:11:00+00:00\",\n  \"tx\": {\n    \"TransactionType\": \"OfferCreate\",\n    \"Flags\": 2147483648,\n    \"Sequence\": 386316,\n    \"TakerPays\": {\n      \"value\": \"19909.5799999996\",\n      \"currency\": \"CNY\",\n      \"issuer\": \"rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y\"\n    },\n    \"TakerGets\": {\n      \"value\": \"20000\",\n      \"currency\": \"CNY\",\n      \"issuer\": \"razqQKzJRdB4UxFPWf5NEpEG3WMkmwgcXA\"\n    },\n    \"Fee\": \"12\",\n    \"SigningPubKey\": \"03854A934352E510CB095FB37F38FFF962B8A2AAAB2A594CBEC7A91A1AF5B3F29A\",\n    \"TxnSignature\": \"304402205D1FFE09B3FE73ACE89C15C8649F717D1B69FF9A298B4F0B4ADAAFF80DE1348A0220251D87705A5AC1DAACCB9A89EE74F9CEF75FD36D7789406BF6032A4FEC69EE84\",\n    \"Account\": \"rPt8rwFrsucmjdKfjwRHGz9iZGxxN2cLYh\",\n    \"ctid\": \"C238945F00340000\"\n  },\n  \"meta\": {\n    \"TransactionIndex\": 52,\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"9EB6E13F11FCE5465E064E874C7713CB8D5D5E6BD198443C49E1B14DE444E4CF\",\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"000000000000049E\",\n            \"RootIndex\": \"8D47835C2516C1F8F28A43C140356DA142DEB58CA29EF27212ECE6DCFC4472C7\",\n            \"Owner\": \"rETx8GBiH6fxhTcfHM9fGeyShqxozyD3xe\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"LedgerEntryType\": \"RippleState\",\n          \"PreviousTxnLgrSeq\": 37262431,\n          \"PreviousTxnID\": \"B4023B851C768A48DCBE3AB788BBBBA2B0AF8CF8344CF44BA2D9662F055C8AFD\",\n          \"LedgerIndex\": \"20232CB217A011249CF4BEA427DA0C2AD91E5DABE3998640029A116435162BE4\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"value\": \"-187682.1955779691\",\n              \"currency\": \"CNY\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\"\n            }\n          },\n          \"FinalFields\": {\n            \"Flags\": 2228224,\n            \"LowNode\": \"00000000000003BA\",\n            \"HighNode\": \"0000000000000000\",\n            \"Balance\": {\n              \"value\": \"-187907.6485143064\",\n              \"currency\": \"CNY\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\"\n            },\n            \"LowLimit\": {\n              \"value\": \"0\",\n              \"currency\": \"CNY\",\n              \"issuer\": \"razqQKzJRdB4UxFPWf5NEpEG3WMkmwgcXA\"\n            },\n            \"HighLimit\": {\n              \"value\": \"1000000000\",\n              \"currency\": \"CNY\",\n              \"issuer\": \"rUmustd4TbkjaEuS7S1damozpBEREgRz9z\"\n            }\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"PreviousTxnLgrSeq\": 37262431,\n          \"PreviousTxnID\": \"B4023B851C768A48DCBE3AB788BBBBA2B0AF8CF8344CF44BA2D9662F055C8AFD\",\n          \"LedgerIndex\": \"28751EC2E5DCEC6D94CCE16CCDF85F37A696CF79B15A56AA75308AEB4714C00E\",\n          \"PreviousFields\": { \"Balance\": \"2910704988\" },\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Sequence\": 5805,\n            \"OwnerCount\": 8,\n            \"Balance\": \"2860380672\",\n            \"Account\": \"rUmustd4TbkjaEuS7S1damozpBEREgRz9z\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"PreviousTxnLgrSeq\": 37262431,\n          \"PreviousTxnID\": \"6C3319FE469E81951A989F16756AD3CA9EBAF8115153BF4F6BFE8407862B45B6\",\n          \"LedgerIndex\": \"2927E76DE56E6C05C1041AD6E3542C795AB0304974F8C5E50D1705E0600099ED\",\n          \"PreviousFields\": { \"Sequence\": 386316, \"Balance\": \"98595124\" },\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Sequence\": 386317,\n            \"OwnerCount\": 10,\n            \"Balance\": \"98595112\",\n            \"Account\": \"rPt8rwFrsucmjdKfjwRHGz9iZGxxN2cLYh\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"LedgerEntryType\": \"RippleState\",\n          \"PreviousTxnLgrSeq\": 37260031,\n          \"PreviousTxnID\": \"615AED9D4AD767439A9DAED3DF5E48DA36C3FD33BD90528EB997027DEAF1E224\",\n          \"LedgerIndex\": \"3DECAAB10E7761678F54C4148584D5A44214BE9BB641A7A7091321109DDE94A6\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"value\": \"-68093.01974026792\",\n              \"currency\": \"CNY\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\"\n            }\n          },\n          \"FinalFields\": {\n            \"Flags\": 2228224,\n            \"LowNode\": \"000000000000029A\",\n            \"HighNode\": \"0000000000000000\",\n            \"Balance\": {\n              \"value\": \"-68317.73385056693\",\n              \"currency\": \"CNY\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\"\n            },\n            \"LowLimit\": {\n              \"value\": \"0\",\n              \"currency\": \"CNY\",\n              \"issuer\": \"rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y\"\n            },\n            \"HighLimit\": {\n              \"value\": \"1000000000\",\n              \"currency\": \"CNY\",\n              \"issuer\": \"rPt8rwFrsucmjdKfjwRHGz9iZGxxN2cLYh\"\n            }\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"LedgerEntryType\": \"Offer\",\n          \"PreviousTxnLgrSeq\": 37262431,\n          \"PreviousTxnID\": \"6D8782864959A135083A29FE1FE9936466F9DA5CB3ACE2879CB091555808C5F7\",\n          \"LedgerIndex\": \"44464A364AE80AAF800F3D7FA13E014B3015432EF329EF985D780BDE58DDBA3F\",\n          \"PreviousFields\": {\n            \"TakerPays\": \"470318230\",\n            \"TakerGets\": {\n              \"value\": \"2100.120796711\",\n              \"currency\": \"CNY\",\n              \"issuer\": \"rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y\"\n            }\n          },\n          \"FinalFields\": {\n            \"Flags\": 65536,\n            \"Sequence\": 1181517,\n            \"BookNode\": \"0000000000000000\",\n            \"OwnerNode\": \"0000000000000000\",\n            \"BookDirectory\": \"49789A0B460DC77A2CED9349C432AEA97352345BA3C7313A5A07F4CBFD1CB76A\",\n            \"TakerPays\": \"419993914\",\n            \"TakerGets\": {\n              \"value\": \"1875.406686411988\",\n              \"currency\": \"CNY\",\n              \"issuer\": \"rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y\"\n            },\n            \"Account\": \"rEGoBvzusE2MkDn3yrgZc817XiwRofqoJq\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"PreviousTxnLgrSeq\": 37262431,\n          \"PreviousTxnID\": \"6D8782864959A135083A29FE1FE9936466F9DA5CB3ACE2879CB091555808C5F7\",\n          \"LedgerIndex\": \"4D74E3C137F888F228BCBC8B9B7BC25765968B673728613C5B7C8BA7652FAD19\",\n          \"PreviousFields\": { \"Balance\": \"5703912258\" },\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Sequence\": 1181518,\n            \"OwnerCount\": 6,\n            \"Balance\": \"5754236574\",\n            \"Account\": \"rEGoBvzusE2MkDn3yrgZc817XiwRofqoJq\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"LedgerEntryType\": \"RippleState\",\n          \"PreviousTxnLgrSeq\": 37262362,\n          \"PreviousTxnID\": \"A4DFF09046A6ADA470DDC4B6CD6865F474112916A1BB0F23E3F076AF7C1D7139\",\n          \"LedgerIndex\": \"7036BC235F325305866B61CFF2EFD869CD1E2DEB5C5EAB78D22CAE7D1E06DA01\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"value\": \"9605.02284129326\",\n              \"currency\": \"CNY\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\"\n            }\n          },\n          \"FinalFields\": {\n            \"Flags\": 1114112,\n            \"LowNode\": \"0000000000000000\",\n            \"HighNode\": \"00000000000003C5\",\n            \"Balance\": {\n              \"value\": \"9380.308730994248\",\n              \"currency\": \"CNY\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\"\n            },\n            \"LowLimit\": {\n              \"value\": \"1000000000\",\n              \"currency\": \"CNY\",\n              \"issuer\": \"rEGoBvzusE2MkDn3yrgZc817XiwRofqoJq\"\n            },\n            \"HighLimit\": {\n              \"value\": \"0\",\n              \"currency\": \"CNY\",\n              \"issuer\": \"rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y\"\n            }\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"LedgerEntryType\": \"Offer\",\n          \"PreviousTxnLgrSeq\": 37262431,\n          \"PreviousTxnID\": \"B4023B851C768A48DCBE3AB788BBBBA2B0AF8CF8344CF44BA2D9662F055C8AFD\",\n          \"LedgerIndex\": \"858BD76155EF19E066B106835EEC9E5BAFD747DCD6830BBE0392B083A8A8048B\",\n          \"PreviousFields\": {\n            \"TakerPays\": {\n              \"value\": \"12589.58241408\",\n              \"currency\": \"CNY\",\n              \"issuer\": \"razqQKzJRdB4UxFPWf5NEpEG3WMkmwgcXA\"\n            },\n            \"TakerGets\": \"2810174646\"\n          },\n          \"FinalFields\": {\n            \"Flags\": 131072,\n            \"Sequence\": 5804,\n            \"BookNode\": \"0000000000000000\",\n            \"OwnerNode\": \"0000000000000000\",\n            \"BookDirectory\": \"7254404DF6B7FBFFEF34DC38867A7E7DE610B513997B78804F0FEA8948980000\",\n            \"TakerPays\": {\n              \"value\": \"12364.12947774268\",\n              \"currency\": \"CNY\",\n              \"issuer\": \"razqQKzJRdB4UxFPWf5NEpEG3WMkmwgcXA\"\n            },\n            \"TakerGets\": \"2759850330\",\n            \"Account\": \"rUmustd4TbkjaEuS7S1damozpBEREgRz9z\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"LedgerEntryType\": \"RippleState\",\n          \"PreviousTxnLgrSeq\": 37260031,\n          \"PreviousTxnID\": \"615AED9D4AD767439A9DAED3DF5E48DA36C3FD33BD90528EB997027DEAF1E224\",\n          \"LedgerIndex\": \"989C5E28598302B1357F9F6EDB43F8D755AAB2AE9EF738882A0192721BC92779\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"value\": \"-225.90384221\",\n              \"currency\": \"CNY\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\"\n            }\n          },\n          \"FinalFields\": {\n            \"Flags\": 2228224,\n            \"LowNode\": \"0000000000000432\",\n            \"HighNode\": \"0000000000000000\",\n            \"Balance\": {\n              \"value\": \"0\",\n              \"currency\": \"CNY\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\"\n            },\n            \"LowLimit\": {\n              \"value\": \"0\",\n              \"currency\": \"CNY\",\n              \"issuer\": \"razqQKzJRdB4UxFPWf5NEpEG3WMkmwgcXA\"\n            },\n            \"HighLimit\": {\n              \"value\": \"1000000000\",\n              \"currency\": \"CNY\",\n              \"issuer\": \"rPt8rwFrsucmjdKfjwRHGz9iZGxxN2cLYh\"\n            }\n          }\n        }\n      }\n    ],\n    \"TransactionResult\": \"tesSUCCESS\"\n  }\n}\n"
  },
  {
    "path": "src/containers/Transactions/test/mock_data/TransactionSummary.json",
    "content": "{\n  \"instructions\": {\n    \"gets\": {\n      \"currency\": \"CNY\",\n      \"issuer\": \"razqQKzJRdB4UxFPWf5NEpEG3WMkmwgcXA\",\n      \"amount\": 20000\n    },\n    \"pays\": {\n      \"currency\": \"CNY\",\n      \"issuer\": \"rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y\",\n      \"amount\": 19909.5799999996\n    },\n    \"firstCurrency\": {\n      \"currency\": \"CNY\",\n      \"issuer\": \"rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y\"\n    },\n    \"secondCurrency\": {\n      \"currency\": \"CNY\",\n      \"issuer\": \"razqQKzJRdB4UxFPWf5NEpEG3WMkmwgcXA\"\n    }\n  }\n}\n"
  },
  {
    "path": "src/containers/Transactions/test/mock_data/TrustSet.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rLwNAmcqi7ipSZ5cUc6zXZMjwEddr2yc8x\",\n    \"Fee\": \"10\",\n    \"Flags\": 2152792064,\n    \"LimitAmount\": {\n      \"currency\": \"EQT\",\n      \"issuer\": \"rBeb4FLPG4XUwxdnnEztTLK6Zd9mxhDQ6E\",\n      \"value\": \"0\"\n    },\n    \"Sequence\": 9198426,\n    \"SigningPubKey\": \"025CE5B77DBE302A3CF37D23DD2478A5F36349108BB4652422D858DAFE72284282\",\n    \"SourceTag\": 608402356,\n    \"TransactionType\": \"TrustSet\",\n    \"TxnSignature\": \"30440220537A17DA2BD39101DE1978067CA17469E40D898ED7D2E360B8865A784F4E0B9602205A4BE189A12DA11C8D2F452FBF0CE1EBC6EC6FE44EAD0E198C66B8B1DF04ACB1\",\n    \"ctid\": \"C08C5FEE00010001\",\n    \"date\": 1753466092000,\n    \"hash\": \"F7F89216FDB0135847BB4966607ACCABF7555302DC8143D2E1C71FEA9249AF3E\",\n    \"inLedger\": 9199598,\n    \"ledger_index\": 9199598,\n    \"meta\": {\n      \"AffectedNodes\": [\n        {\n          \"ModifiedNode\": {\n            \"FinalFields\": {\n              \"Balance\": {\n                \"currency\": \"EQT\",\n                \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n                \"value\": \"1\"\n              },\n              \"Flags\": 77266944,\n              \"HighLimit\": {\n                \"currency\": \"EQT\",\n                \"issuer\": \"rLwNAmcqi7ipSZ5cUc6zXZMjwEddr2yc8x\",\n                \"value\": \"0\"\n              },\n              \"HighNode\": \"0\",\n              \"LowLimit\": {\n                \"currency\": \"EQT\",\n                \"issuer\": \"rBeb4FLPG4XUwxdnnEztTLK6Zd9mxhDQ6E\",\n                \"value\": \"100000\"\n              },\n              \"LowNode\": \"0\"\n            },\n            \"LedgerEntryType\": \"RippleState\",\n            \"LedgerIndex\": \"66C42DF2F527BA73BE6AD7E20A5BBC81A39A0A9DD9AE21FE7E3FC6EDA8593E88\",\n            \"PreviousFields\": {\n              \"Flags\": 1638400\n            },\n            \"PreviousTxnID\": \"0CEFFA595E230BED9BD23E0A32B594DB0781AE5C4315FC8BA673B278001F0163\",\n            \"PreviousTxnLgrSeq\": 9199409\n          }\n        },\n        {\n          \"ModifiedNode\": {\n            \"FinalFields\": {\n              \"Account\": \"rLwNAmcqi7ipSZ5cUc6zXZMjwEddr2yc8x\",\n              \"Balance\": \"21999940\",\n              \"Flags\": 2156134400,\n              \"OwnerCount\": 2,\n              \"Sequence\": 9198427\n            },\n            \"LedgerEntryType\": \"AccountRoot\",\n            \"LedgerIndex\": \"C1C8011AE06D1DD364D7091702BAE8DAF921235FD7E462DAAF00F59D9353E580\",\n            \"PreviousFields\": {\n              \"Balance\": \"21999950\",\n              \"OwnerCount\": 1,\n              \"Sequence\": 9198426\n            },\n            \"PreviousTxnID\": \"7A85D2343EB6A7C8D10088351B59210213A0616B353CA841B4806A7024CED8B7\",\n            \"PreviousTxnLgrSeq\": 9199406\n          }\n        }\n      ],\n      \"TransactionIndex\": 1,\n      \"TransactionResult\": \"tesSUCCESS\"\n    },\n    \"validated\": true\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"EQT\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"1\"\n            },\n            \"Flags\": 77266944,\n            \"HighLimit\": {\n              \"currency\": \"EQT\",\n              \"issuer\": \"rLwNAmcqi7ipSZ5cUc6zXZMjwEddr2yc8x\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"EQT\",\n              \"issuer\": \"rBeb4FLPG4XUwxdnnEztTLK6Zd9mxhDQ6E\",\n              \"value\": \"100000\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"66C42DF2F527BA73BE6AD7E20A5BBC81A39A0A9DD9AE21FE7E3FC6EDA8593E88\",\n          \"PreviousFields\": {\n            \"Flags\": 1638400\n          },\n          \"PreviousTxnID\": \"0CEFFA595E230BED9BD23E0A32B594DB0781AE5C4315FC8BA673B278001F0163\",\n          \"PreviousTxnLgrSeq\": 9199409\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rLwNAmcqi7ipSZ5cUc6zXZMjwEddr2yc8x\",\n            \"Balance\": \"21999940\",\n            \"Flags\": 2156134400,\n            \"OwnerCount\": 2,\n            \"Sequence\": 9198427\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"C1C8011AE06D1DD364D7091702BAE8DAF921235FD7E462DAAF00F59D9353E580\",\n          \"PreviousFields\": {\n            \"Balance\": \"21999950\",\n            \"OwnerCount\": 1,\n            \"Sequence\": 9198426\n          },\n          \"PreviousTxnID\": \"7A85D2343EB6A7C8D10088351B59210213A0616B353CA841B4806A7024CED8B7\",\n          \"PreviousTxnLgrSeq\": 9199406\n        }\n      }\n    ],\n    \"TransactionIndex\": 1,\n    \"TransactionResult\": \"tesSUCCESS\"\n  },\n  \"hash\": \"F7F89216FDB0135847BB4966607ACCABF7555302DC8143D2E1C71FEA9249AF3E\",\n  \"ledger_index\": 9199598,\n  \"date\": 1753466092000\n}\n"
  },
  {
    "path": "src/containers/Transactions/test/mock_data/rippledOfferCreate.json",
    "content": "{\n  \"result\": {\n    \"Account\": \"rPt8rwFrsucmjdKfjwRHGz9iZGxxN2cLYh\",\n    \"Fee\": \"12\",\n    \"Flags\": 2147483648,\n    \"Sequence\": 386316,\n    \"SigningPubKey\": \"03854A934352E510CB095FB37F38FFF962B8A2AAAB2A594CBEC7A91A1AF5B3F29A\",\n    \"TakerGets\": {\n      \"currency\": \"CNY\",\n      \"issuer\": \"razqQKzJRdB4UxFPWf5NEpEG3WMkmwgcXA\",\n      \"value\": \"20000\"\n    },\n    \"TakerPays\": {\n      \"currency\": \"CNY\",\n      \"issuer\": \"rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y\",\n      \"value\": \"19909.5799999996\"\n    },\n    \"TransactionType\": \"OfferCreate\",\n    \"TxnSignature\": \"304402205D1FFE09B3FE73ACE89C15C8649F717D1B69FF9A298B4F0B4ADAAFF80DE1348A0220251D87705A5AC1DAACCB9A89EE74F9CEF75FD36D7789406BF6032A4FEC69EE84\",\n    \"date\": 574503060,\n    \"hash\": \"50BB0CC6EFC4F5EF9954E654D3230D4480DC83907A843C736B28420C7F02F774\",\n    \"inLedger\": 37262431,\n    \"ledger_index\": 37262431,\n    \"meta\": {\n      \"AffectedNodes\": [\n        {\n          \"ModifiedNode\": {\n            \"FinalFields\": {\n              \"Balance\": {\n                \"currency\": \"CNY\",\n                \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n                \"value\": \"-187907.6485143064\"\n              },\n              \"Flags\": 2228224,\n              \"HighLimit\": {\n                \"currency\": \"CNY\",\n                \"issuer\": \"rUmustd4TbkjaEuS7S1damozpBEREgRz9z\",\n                \"value\": \"1000000000\"\n              },\n              \"HighNode\": \"0\",\n              \"LowLimit\": {\n                \"currency\": \"CNY\",\n                \"issuer\": \"razqQKzJRdB4UxFPWf5NEpEG3WMkmwgcXA\",\n                \"value\": \"0\"\n              },\n              \"LowNode\": \"3ba\"\n            },\n            \"LedgerEntryType\": \"RippleState\",\n            \"LedgerIndex\": \"20232CB217A011249CF4BEA427DA0C2AD91E5DABE3998640029A116435162BE4\",\n            \"PreviousFields\": {\n              \"Balance\": {\n                \"currency\": \"CNY\",\n                \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n                \"value\": \"-187682.1955779691\"\n              }\n            },\n            \"PreviousTxnID\": \"B4023B851C768A48DCBE3AB788BBBBA2B0AF8CF8344CF44BA2D9662F055C8AFD\",\n            \"PreviousTxnLgrSeq\": 37262431\n          }\n        },\n        {\n          \"ModifiedNode\": {\n            \"FinalFields\": {\n              \"Account\": \"rUmustd4TbkjaEuS7S1damozpBEREgRz9z\",\n              \"Balance\": \"2860380672\",\n              \"Flags\": 0,\n              \"OwnerCount\": 8,\n              \"Sequence\": 5805\n            },\n            \"LedgerEntryType\": \"AccountRoot\",\n            \"LedgerIndex\": \"28751EC2E5DCEC6D94CCE16CCDF85F37A696CF79B15A56AA75308AEB4714C00E\",\n            \"PreviousFields\": {\n              \"Balance\": \"2910704988\"\n            },\n            \"PreviousTxnID\": \"B4023B851C768A48DCBE3AB788BBBBA2B0AF8CF8344CF44BA2D9662F055C8AFD\",\n            \"PreviousTxnLgrSeq\": 37262431\n          }\n        },\n        {\n          \"ModifiedNode\": {\n            \"FinalFields\": {\n              \"Account\": \"rPt8rwFrsucmjdKfjwRHGz9iZGxxN2cLYh\",\n              \"Balance\": \"98595112\",\n              \"Flags\": 0,\n              \"OwnerCount\": 10,\n              \"Sequence\": 386317\n            },\n            \"LedgerEntryType\": \"AccountRoot\",\n            \"LedgerIndex\": \"2927E76DE56E6C05C1041AD6E3542C795AB0304974F8C5E50D1705E0600099ED\",\n            \"PreviousFields\": {\n              \"Balance\": \"98595124\",\n              \"Sequence\": 386316\n            },\n            \"PreviousTxnID\": \"6C3319FE469E81951A989F16756AD3CA9EBAF8115153BF4F6BFE8407862B45B6\",\n            \"PreviousTxnLgrSeq\": 37262431\n          }\n        },\n        {\n          \"ModifiedNode\": {\n            \"FinalFields\": {\n              \"Balance\": {\n                \"currency\": \"CNY\",\n                \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n                \"value\": \"-68317.73385056693\"\n              },\n              \"Flags\": 2228224,\n              \"HighLimit\": {\n                \"currency\": \"CNY\",\n                \"issuer\": \"rPt8rwFrsucmjdKfjwRHGz9iZGxxN2cLYh\",\n                \"value\": \"1000000000\"\n              },\n              \"HighNode\": \"0\",\n              \"LowLimit\": {\n                \"currency\": \"CNY\",\n                \"issuer\": \"rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y\",\n                \"value\": \"0\"\n              },\n              \"LowNode\": \"29a\"\n            },\n            \"LedgerEntryType\": \"RippleState\",\n            \"LedgerIndex\": \"3DECAAB10E7761678F54C4148584D5A44214BE9BB641A7A7091321109DDE94A6\",\n            \"PreviousFields\": {\n              \"Balance\": {\n                \"currency\": \"CNY\",\n                \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n                \"value\": \"-68093.01974026792\"\n              }\n            },\n            \"PreviousTxnID\": \"615AED9D4AD767439A9DAED3DF5E48DA36C3FD33BD90528EB997027DEAF1E224\",\n            \"PreviousTxnLgrSeq\": 37260031\n          }\n        },\n        {\n          \"ModifiedNode\": {\n            \"FinalFields\": {\n              \"Account\": \"rEGoBvzusE2MkDn3yrgZc817XiwRofqoJq\",\n              \"BookDirectory\": \"49789A0B460DC77A2CED9349C432AEA97352345BA3C7313A5A07F4CBFD1CB76A\",\n              \"BookNode\": \"0\",\n              \"Flags\": 65536,\n              \"OwnerNode\": \"0\",\n              \"Sequence\": 1181517,\n              \"TakerGets\": {\n                \"currency\": \"CNY\",\n                \"issuer\": \"rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y\",\n                \"value\": \"1875.406686411988\"\n              },\n              \"TakerPays\": \"419993914\"\n            },\n            \"LedgerEntryType\": \"Offer\",\n            \"LedgerIndex\": \"44464A364AE80AAF800F3D7FA13E014B3015432EF329EF985D780BDE58DDBA3F\",\n            \"PreviousFields\": {\n              \"TakerGets\": {\n                \"currency\": \"CNY\",\n                \"issuer\": \"rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y\",\n                \"value\": \"2100.120796711\"\n              },\n              \"TakerPays\": \"470318230\"\n            },\n            \"PreviousTxnID\": \"6D8782864959A135083A29FE1FE9936466F9DA5CB3ACE2879CB091555808C5F7\",\n            \"PreviousTxnLgrSeq\": 37262431\n          }\n        },\n        {\n          \"ModifiedNode\": {\n            \"FinalFields\": {\n              \"Account\": \"rEGoBvzusE2MkDn3yrgZc817XiwRofqoJq\",\n              \"Balance\": \"5754236574\",\n              \"Flags\": 0,\n              \"OwnerCount\": 6,\n              \"Sequence\": 1181518\n            },\n            \"LedgerEntryType\": \"AccountRoot\",\n            \"LedgerIndex\": \"4D74E3C137F888F228BCBC8B9B7BC25765968B673728613C5B7C8BA7652FAD19\",\n            \"PreviousFields\": {\n              \"Balance\": \"5703912258\"\n            },\n            \"PreviousTxnID\": \"6D8782864959A135083A29FE1FE9936466F9DA5CB3ACE2879CB091555808C5F7\",\n            \"PreviousTxnLgrSeq\": 37262431\n          }\n        },\n        {\n          \"ModifiedNode\": {\n            \"FinalFields\": {\n              \"Balance\": {\n                \"currency\": \"CNY\",\n                \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n                \"value\": \"9380.308730994248\"\n              },\n              \"Flags\": 1114112,\n              \"HighLimit\": {\n                \"currency\": \"CNY\",\n                \"issuer\": \"rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y\",\n                \"value\": \"0\"\n              },\n              \"HighNode\": \"3c5\",\n              \"LowLimit\": {\n                \"currency\": \"CNY\",\n                \"issuer\": \"rEGoBvzusE2MkDn3yrgZc817XiwRofqoJq\",\n                \"value\": \"1000000000\"\n              },\n              \"LowNode\": \"0\"\n            },\n            \"LedgerEntryType\": \"RippleState\",\n            \"LedgerIndex\": \"7036BC235F325305866B61CFF2EFD869CD1E2DEB5C5EAB78D22CAE7D1E06DA01\",\n            \"PreviousFields\": {\n              \"Balance\": {\n                \"currency\": \"CNY\",\n                \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n                \"value\": \"9605.02284129326\"\n              }\n            },\n            \"PreviousTxnID\": \"A4DFF09046A6ADA470DDC4B6CD6865F474112916A1BB0F23E3F076AF7C1D7139\",\n            \"PreviousTxnLgrSeq\": 37262362\n          }\n        },\n        {\n          \"ModifiedNode\": {\n            \"FinalFields\": {\n              \"Account\": \"rUmustd4TbkjaEuS7S1damozpBEREgRz9z\",\n              \"BookDirectory\": \"7254404DF6B7FBFFEF34DC38867A7E7DE610B513997B78804F0FEA8948980000\",\n              \"BookNode\": \"0\",\n              \"Flags\": 131072,\n              \"OwnerNode\": \"0\",\n              \"Sequence\": 5804,\n              \"TakerGets\": \"2759850330\",\n              \"TakerPays\": {\n                \"currency\": \"CNY\",\n                \"issuer\": \"razqQKzJRdB4UxFPWf5NEpEG3WMkmwgcXA\",\n                \"value\": \"12364.12947774268\"\n              }\n            },\n            \"LedgerEntryType\": \"Offer\",\n            \"LedgerIndex\": \"858BD76155EF19E066B106835EEC9E5BAFD747DCD6830BBE0392B083A8A8048B\",\n            \"PreviousFields\": {\n              \"TakerGets\": \"2810174646\",\n              \"TakerPays\": {\n                \"currency\": \"CNY\",\n                \"issuer\": \"razqQKzJRdB4UxFPWf5NEpEG3WMkmwgcXA\",\n                \"value\": \"12589.58241408\"\n              }\n            },\n            \"PreviousTxnID\": \"B4023B851C768A48DCBE3AB788BBBBA2B0AF8CF8344CF44BA2D9662F055C8AFD\",\n            \"PreviousTxnLgrSeq\": 37262431\n          }\n        },\n        {\n          \"ModifiedNode\": {\n            \"FinalFields\": {\n              \"Balance\": {\n                \"currency\": \"CNY\",\n                \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n                \"value\": \"0\"\n              },\n              \"Flags\": 2228224,\n              \"HighLimit\": {\n                \"currency\": \"CNY\",\n                \"issuer\": \"rPt8rwFrsucmjdKfjwRHGz9iZGxxN2cLYh\",\n                \"value\": \"1000000000\"\n              },\n              \"HighNode\": \"0\",\n              \"LowLimit\": {\n                \"currency\": \"CNY\",\n                \"issuer\": \"razqQKzJRdB4UxFPWf5NEpEG3WMkmwgcXA\",\n                \"value\": \"0\"\n              },\n              \"LowNode\": \"432\"\n            },\n            \"LedgerEntryType\": \"RippleState\",\n            \"LedgerIndex\": \"989C5E28598302B1357F9F6EDB43F8D755AAB2AE9EF738882A0192721BC92779\",\n            \"PreviousFields\": {\n              \"Balance\": {\n                \"currency\": \"CNY\",\n                \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n                \"value\": \"-225.90384221\"\n              }\n            },\n            \"PreviousTxnID\": \"615AED9D4AD767439A9DAED3DF5E48DA36C3FD33BD90528EB997027DEAF1E224\",\n            \"PreviousTxnLgrSeq\": 37260031\n          }\n        }\n      ],\n      \"TransactionIndex\": 52,\n      \"TransactionResult\": \"tesSUCCESS\"\n    },\n    \"validated\": true\n  },\n  \"status\": \"success\",\n  \"type\": \"response\"\n}\n"
  },
  {
    "path": "src/containers/Transactions/transaction.scss",
    "content": "@use '../shared/css/variables' as *;\n\n.transaction {\n  position: relative;\n  max-width: 912px;\n  min-height: 600px;\n\n  @include for-size(tablet-landscape-up) {\n    width: 584px;\n    margin: 0 auto;\n  }\n\n  @include for-size(desktop-up) {\n    width: 820px;\n  }\n\n  @include for-size(big-desktop-up) {\n    width: 912px;\n  }\n\n  .loader {\n    position: absolute;\n    z-index: 1;\n    top: 0px;\n  }\n\n  .summary {\n    padding: 0 16px 87px 0;\n\n    .type {\n      display: inline-block;\n      margin-bottom: 24px;\n      color: $white;\n      font-size: 42px;\n      @include bold;\n    }\n\n    .txid {\n      .title {\n        @include semibold;\n      }\n\n      display: flex;\n      overflow: hidden;\n      margin-top: 8px;\n      color: $black-40;\n      font-size: 12px;\n      letter-spacing: 0px;\n      line-height: 20px;\n      text-overflow: ellipsis;\n      text-transform: uppercase;\n      white-space: nowrap;\n      @include medium;\n    }\n\n    .tx-status {\n      margin-left: 15px;\n    }\n  }\n}\n"
  },
  {
    "path": "src/containers/Validators/HistoryTab.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { Loader } from '../shared/components/Loader'\nimport { localizeDate } from '../shared/utils'\nimport { useLanguage } from '../shared/hooks'\nimport './historyTab.scss'\nimport { ValidatorReport } from '../shared/vhsTypes'\n\nconst DEFAULT_HISTORY_TIMEZONE = 'UTC'\n\nconst ReportRow = ({ report }: { report: ValidatorReport }) => {\n  const language = useLanguage()\n  return (\n    <tr key={report.date}>\n      <td className=\"col-date\">\n        <div className=\"full-date\">\n          {localizeDate(new Date(report.date), language, {\n            dateStyle: 'full',\n            timeZone: DEFAULT_HISTORY_TIMEZONE,\n          })}\n        </div>\n        <div className=\"abbrev-date\">\n          {localizeDate(new Date(report.date), language, {\n            year: 'numeric',\n            month: 'numeric',\n            day: 'numeric',\n            timeZone: DEFAULT_HISTORY_TIMEZONE,\n          })}\n        </div>\n      </td>\n      <td className=\"col-chain\">{report.chain}</td>\n      <td\n        className={`col-score ${\n          parseFloat(report.score) < 1 ? 'td-missed' : ''\n        }`}\n      >\n        {report.score}\n        {report.incomplete && <span>*</span>}\n      </td>\n      <td className=\"col-total\">{report.total}</td>\n      <td\n        className={`col-missed ${\n          parseFloat(report.missed) > 0 ? 'td-missed' : ''\n        }`}\n      >\n        {report.missed}\n      </td>\n    </tr>\n  )\n}\n\nexport interface HistoryTabProps {\n  reports?: ValidatorReport[]\n}\n\nexport const HistoryTab = ({ reports }: HistoryTabProps) => {\n  const { t } = useTranslation()\n\n  return (\n    <table className=\"history-table basic\">\n      <thead>\n        <tr>\n          <th className=\"col-date\">{t('validator_history.date')}</th>\n          <th className=\"col-chain\">{t('validator_history.chain')}</th>\n          <th className=\"col-score\">{t('validator_history.score')}</th>\n          <th className=\"col-total\">{t('total')}</th>\n          <th className=\"col-missed\">{t('validator_history.missed')}</th>\n        </tr>\n      </thead>\n      <tbody>\n        {reports ? (\n          reports.map((report) => (\n            <ReportRow report={report} key={report.date} />\n          ))\n        ) : (\n          <tr>\n            <td colSpan={5}>\n              <Loader />\n            </td>\n          </tr>\n        )}\n      </tbody>\n    </table>\n  )\n}\n"
  },
  {
    "path": "src/containers/Validators/Simple/index.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { SimpleRow } from '../../shared/components/Transaction/SimpleRow'\nimport { ValidatorScore, ValidatorSupplemented } from '../../shared/vhsTypes'\nimport { RouteLink } from '../../shared/routing'\nimport { LEDGER_ROUTE } from '../../App/routes'\n\nexport interface SimpleProps {\n  data: ValidatorSupplemented\n}\n\nconst Simple = ({ data }: SimpleProps) => {\n  const { t } = useTranslation()\n\n  const renderAgreement = (\n    className: string,\n    d: ValidatorScore | null,\n    label: string,\n  ) =>\n    d ? (\n      <div className=\"row\" data-testid={`score-${className}`}>\n        <div className=\"label\">{label}</div>\n        <div\n          className={`value ${className} score`}\n          title={t('missed_validations', { count: d.missed })}\n        >\n          {Number.parseFloat(d.score).toFixed(5)}\n          {d.incomplete && <span title={t('incomplete')}>*</span>}\n        </div>\n      </div>\n    ) : (\n      <div />\n    )\n\n  return (\n    <>\n      <SimpleRow label={t('domain')}>{data.domain || 'Unknown'}</SimpleRow>\n      <SimpleRow label={t('rippled_version')} data-testid=\"version\">\n        {data.server_version}\n      </SimpleRow>\n      <div className=\"row\">\n        <div className=\"label\">Master Key</div>\n        <div className=\"value\">{data.master_key || 'Unknown'}</div>\n      </div>\n      <div className=\"row\">\n        <div className=\"label\">Signing Key</div>\n        <div className=\"value\">{data.signing_key || 'Unknown'}</div>\n      </div>\n      {data.current_index && (\n        <SimpleRow label={t('ledger')}>\n          <RouteLink\n            to={LEDGER_ROUTE}\n            params={{ identifier: data.current_index }}\n          >\n            {data?.ledger_hash || 'Unknown'}\n          </RouteLink>\n        </SimpleRow>\n      )}\n      {renderAgreement('h1', data.agreement_1h, 'Agreement (1 hour)')}\n      {renderAgreement('h24', data.agreement_24h, 'Agreement (24 hours)')}\n      {renderAgreement('d30', data.agreement_30day, 'Agreement (30 days)')}\n    </>\n  )\n}\n\nexport default Simple\n"
  },
  {
    "path": "src/containers/Validators/SimpleTab.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { FC } from 'react'\nimport { RouteLink } from '../shared/routing'\nimport { localizeDate, BREAKPOINTS } from '../shared/utils'\nimport Simple from './Simple'\nimport '../shared/css/simpleTab.scss'\nimport './simpleTab.scss'\nimport successIcon from '../shared/images/success.png'\nimport { SimpleRow } from '../shared/components/Transaction/SimpleRow'\nimport { useLanguage } from '../shared/hooks'\nimport { ValidatorSupplemented } from '../shared/vhsTypes'\nimport { LEDGER_ROUTE } from '../App/routes'\n\nconst TIME_ZONE = 'UTC'\nconst DATE_OPTIONS = {\n  hour: 'numeric',\n  minute: 'numeric',\n  second: 'numeric',\n  year: 'numeric',\n  month: 'numeric',\n  day: 'numeric',\n  hour12: true,\n  timeZone: TIME_ZONE,\n}\n\nexport const SimpleTab: FC<{\n  data: ValidatorSupplemented\n  width: number\n}> = ({ data, width }) => {\n  const language = useLanguage()\n  const { t } = useTranslation()\n\n  const renderRowIndex = ({\n    last_ledger_time: lastLedgerTime,\n    current_index: ledgerIndex,\n    unl,\n  }: ValidatorSupplemented) => {\n    const unlRow = unl && (\n      <SimpleRow label=\"UNL\" className=\"unl yes\">\n        <img src={successIcon} alt={unl.toString()} /> {unl}\n      </SimpleRow>\n    )\n    return (\n      <>\n        {lastLedgerTime && (\n          <SimpleRow\n            label={`Last Ledger ${t('formatted_date', {\n              timeZone: TIME_ZONE,\n            })}`}\n            data-testid=\"ledger-time\"\n          >\n            {localizeDate(new Date(lastLedgerTime), language, DATE_OPTIONS)}\n          </SimpleRow>\n        )}\n        {ledgerIndex && (\n          <SimpleRow\n            label={`Last ${t('ledger_index')}`}\n            data-testid=\"ledger-index\"\n          >\n            <RouteLink to={LEDGER_ROUTE} params={{ identifier: ledgerIndex }}>\n              {ledgerIndex}\n            </RouteLink>\n          </SimpleRow>\n        )}\n        {unlRow}\n      </>\n    )\n  }\n\n  const rowIndex = renderRowIndex(data)\n\n  return (\n    <div className=\"simple-body simple-body-validator\">\n      <div className=\"rows\">\n        <Simple data={data} />\n        {width < BREAKPOINTS.landscape && rowIndex}\n      </div>\n      {width >= BREAKPOINTS.landscape && (\n        <div className=\"index\">{rowIndex}</div>\n      )}\n      <div className=\"clear\" />\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/Validators/VotingTab.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { FC } from 'react'\nimport axios from 'axios'\nimport { useQuery } from 'react-query'\n\nimport { ValidatorSupplemented } from '../shared/vhsTypes'\nimport { SimpleRow } from '../shared/components/Transaction/SimpleRow'\nimport {\n  FETCH_INTERVAL_ERROR_MILLIS,\n  FETCH_INTERVAL_VHS_MILLIS,\n  SERVER_ERROR,\n  renderXRP,\n} from '../shared/utils'\nimport { useAnalytics } from '../shared/analytics'\nimport { XRP_BASE } from '../shared/transactionUtils'\n\nimport './votingTab.scss'\nimport { RouteLink } from '../shared/routing'\nimport { AMENDMENT_ROUTE } from '../App/routes'\nimport { Loader } from '../shared/components/Loader'\n\nexport const VotingTab: FC<{\n  validatorData: ValidatorSupplemented\n  network: string | undefined\n}> = ({ validatorData, network }) => {\n  const { t } = useTranslation()\n  const { trackException } = useAnalytics()\n\n  const votedAmendments = new Set(\n    validatorData.amendments\n      ? validatorData.amendments.map((amendment) => amendment.id)\n      : [],\n  )\n  const { data, isLoading } = useQuery<Array<{ id: string; name: string }>>(\n    ['fetchNetworkVotingData', network],\n    async () => fetchNetworkVote(network),\n    {\n      refetchInterval: (returnedData, _) =>\n        returnedData == null\n          ? FETCH_INTERVAL_ERROR_MILLIS\n          : FETCH_INTERVAL_VHS_MILLIS,\n      refetchOnMount: true,\n      enabled: !!network,\n    },\n  )\n\n  function fetchNetworkVote(networkID: string | undefined) {\n    const url = `${process.env.VITE_DATA_URL}/amendments/vote/${networkID}`\n    return axios\n      .get(url)\n      .then((resp) => resp.data.amendments)\n      .then((amendments) =>\n        amendments.filter((amendment) => amendment.voted !== undefined),\n      )\n      .catch((axiosError) => {\n        const status =\n          axiosError.response && axiosError.response.status\n            ? axiosError.response.status\n            : SERVER_ERROR\n        trackException(`${url} --- ${JSON.stringify(axiosError)}`)\n        return Promise.reject(status)\n      })\n  }\n\n  const renderAmendment = (id: string, name: string, voted: boolean) => (\n    <div className=\"rows\">\n      <SimpleRow label={t('amendment_name')} className=\"amendment-name\">\n        <RouteLink to={AMENDMENT_ROUTE} params={{ identifier: id }}>\n          {name}\n        </RouteLink>\n      </SimpleRow>\n      <SimpleRow label={t('amendment_id')} className=\"text-truncate\">\n        {id}\n      </SimpleRow>\n      {voted ? (\n        <SimpleRow label={t('vote')} className=\"badge yea\">\n          Yea\n        </SimpleRow>\n      ) : (\n        <SimpleRow label={t('vote')} className=\"badge nay\">\n          Nay\n        </SimpleRow>\n      )}\n    </div>\n  )\n\n  return (\n    <div className=\"voting\">\n      <div className=\"metrics metrics-voting\">\n        <div className=\"cell\">\n          <div className=\"label\">{t('base_fee')}</div>\n          <div>{renderXRP(validatorData.base_fee / XRP_BASE)}</div>\n        </div>\n        <div className=\"cell\">\n          <div className=\"label\">{t('account_reserve')}</div>\n          <div>{renderXRP(validatorData.reserve_base / XRP_BASE)}</div>\n        </div>\n        <div className=\"cell\">\n          <div className=\"label\">{t('object_reserve')}</div>\n          <div>{renderXRP(validatorData.reserve_inc / XRP_BASE)}</div>\n        </div>\n      </div>\n      <div className=\"amendment-label\">{t('amendments')}</div>\n      <div className=\"voting-amendment\">\n        {isLoading && <Loader />}\n        {data !== undefined && data.length > 0\n          ? data.map((amendment) => {\n              const voted = votedAmendments.has(amendment.id)\n              return renderAmendment(amendment.id, amendment.name, voted)\n            })\n          : !isLoading && (\n              <div className=\"no-match no-match-amendments\">\n                <div className=\"hint\">{t('no_amendment_in_voting')}</div>\n              </div>\n            )}\n      </div>\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/Validators/historyTab.scss",
    "content": "@use '../shared/css/variables' as *;\n\n.history-table {\n  // Col overall styling\n  .col-date,\n  .col-chain,\n  .col-score,\n  .col-missed,\n  .col-total {\n    @extend %truncate;\n  }\n\n  .col-date {\n    width: 90px;\n    @include for-size(tablet-landscape-up) {\n      width: 200px;\n    }\n    @include for-size(desktop-up) {\n      width: 300px;\n    }\n    @include for-size(big-desktop-up) {\n      width: 390px;\n    }\n\n    .abbrev-date {\n      @include for-size(tablet-landscape-up) {\n        display: none;\n      }\n    }\n\n    .full-date {\n      display: none;\n      @include for-size(tablet-landscape-up) {\n        display: table-cell;\n      }\n    }\n  }\n\n  .col-chain {\n    width: 55px;\n    @include for-size(tablet-landscape-up) {\n      width: 70px;\n    }\n    @include for-size(desktop-up) {\n      width: 100px;\n    }\n    @include for-size(big-desktop-up) {\n      width: 200px;\n    }\n  }\n\n  .col-score {\n    width: 55px;\n    @include for-size(tablet-landscape-up) {\n      width: 70px;\n    }\n    @include for-size(desktop-up) {\n      width: 100px;\n    }\n    @include for-size(big-desktop-up) {\n      width: 150px;\n    }\n  }\n\n  .col-total {\n    width: 55px;\n    @include for-size(tablet-landscape-up) {\n      width: 70px;\n    }\n    @include for-size(desktop-up) {\n      width: 100px;\n    }\n    @include for-size(big-desktop-up) {\n      width: 165px;\n    }\n  }\n\n  .col-missed {\n    width: 55px;\n    @include for-size(tablet-landscape-up) {\n      width: 70px;\n    }\n    @include for-size(desktop-up) {\n      width: 100px;\n    }\n    @include for-size(big-desktop-up) {\n      width: 165px;\n    }\n  }\n\n  .td-missed {\n    color: $orange-50;\n  }\n}\n"
  },
  {
    "path": "src/containers/Validators/index.tsx",
    "content": "import { useContext, useEffect } from 'react'\nimport axios from 'axios'\nimport { useTranslation } from 'react-i18next'\nimport { useQuery } from 'react-query'\nimport { useWindowSize } from 'usehooks-ts'\nimport { Helmet } from 'react-helmet-async'\nimport NoMatch from '../NoMatch'\nimport { Loader } from '../shared/components/Loader'\nimport { Tabs } from '../shared/components/Tabs'\nimport { useAnalytics } from '../shared/analytics'\nimport {\n  FETCH_INTERVAL_ERROR_MILLIS,\n  FETCH_INTERVAL_VHS_MILLIS,\n  NOT_FOUND,\n  SERVER_ERROR,\n} from '../shared/utils'\nimport { getLedger } from '../../rippled'\nimport { SimpleTab } from './SimpleTab'\nimport { HistoryTab } from './HistoryTab'\nimport './validator.scss'\nimport SocketContext from '../shared/SocketContext'\nimport { ValidatorReport, ValidatorSupplemented } from '../shared/vhsTypes'\nimport NetworkContext from '../shared/NetworkContext'\nimport { VALIDATOR_ROUTE } from '../App/routes'\nimport { buildPath, useRouteParams } from '../shared/routing'\nimport { VotingTab } from './VotingTab'\nimport logger from '../../rippled/lib/logger'\n\nconst log = logger({ name: 'validator' })\n\nconst ERROR_MESSAGES = {\n  [NOT_FOUND]: {\n    title: 'validator_not_found',\n    hints: ['check_validator_key'],\n  },\n  default: {\n    title: 'generic_error',\n    hints: ['not_your_fault'],\n  },\n}\n\nconst getErrorMessage = (error: keyof typeof ERROR_MESSAGES | null) =>\n  (error && ERROR_MESSAGES[error]) || ERROR_MESSAGES.default\n\nexport const Validator = () => {\n  const rippledSocket = useContext(SocketContext)\n  const network = useContext(NetworkContext)\n  const { identifier = '', tab = 'details' } = useRouteParams(VALIDATOR_ROUTE)\n  const { width } = useWindowSize()\n  const { trackException, trackScreenLoaded } = useAnalytics()\n  const { t } = useTranslation()\n\n  const {\n    data,\n    error,\n    isFetching: dataIsLoading,\n  } = useQuery<ValidatorSupplemented, keyof typeof ERROR_MESSAGES | null>(\n    ['fetchValidatorData', identifier],\n    async () => fetchValidatorData(),\n    {\n      refetchInterval: (returnedData, _) =>\n        returnedData == null\n          ? FETCH_INTERVAL_ERROR_MILLIS\n          : FETCH_INTERVAL_VHS_MILLIS,\n      refetchOnMount: true,\n      enabled: !!network,\n    },\n  )\n\n  const { data: reports, isFetching: reportIsLoading } = useQuery(\n    ['fetchValidatorReport', identifier],\n    async () => fetchValidatorReport(),\n    {\n      refetchInterval: FETCH_INTERVAL_VHS_MILLIS,\n      refetchOnMount: true,\n    },\n  )\n\n  useEffect(() => {\n    trackScreenLoaded({ validator: identifier })\n  }, [identifier, tab, trackScreenLoaded])\n\n  function fetchValidatorReport(): Promise<ValidatorReport[]> {\n    return axios\n      .get(`${process.env.VITE_DATA_URL}/validator/${identifier}/reports`)\n      .then((resp) => resp.data.reports)\n      .then((vhsReports: ValidatorReport[]) => {\n        const sortedValidatorReports = vhsReports.sort((a, b) =>\n          a.date > b.date ? -1 : 1,\n        )\n        return sortedValidatorReports\n      })\n  }\n\n  function fetchValidatorData() {\n    const url = `${process.env.VITE_DATA_URL}/validator/${identifier}`\n    return axios\n      .get(url)\n      .then((resp) => resp.data)\n      .then((response) => {\n        if (response.ledger_hash == null) {\n          return getLedger(response.current_index, rippledSocket)\n            .then((ledgerData) => ({\n              ...response,\n              ledger_hash: ledgerData.ledger_hash,\n              last_ledger_time: ledgerData.close_time,\n            }))\n            .catch((ledgerError) => {\n              // Log the error and return response without ledger data\n              log.error(`Error fetching ledger data: ${ledgerError.message}`)\n              return response\n            })\n        }\n        return response\n      })\n      .catch((axiosError) => {\n        const status =\n          axiosError.response && axiosError.response.status\n            ? axiosError.response.status\n            : SERVER_ERROR\n        trackException(`${url} --- ${JSON.stringify(axiosError)}`)\n        return Promise.reject(status)\n      })\n  }\n\n  function renderPageTitle() {\n    if (!data) {\n      return undefined\n    }\n\n    let short = ''\n    if (data.domain) {\n      short = data.domain\n    } else if (data.master_key) {\n      short = `${data.master_key.substring(0, 8)}...`\n    } else if (data.signing_key) {\n      short = `${data.signing_key.substring(0, 8)}...`\n    }\n\n    return <Helmet title={`${t('validator')} ${short}`} />\n  }\n\n  function renderSummary() {\n    let name = 'Unknown Validator'\n    if (data?.domain) {\n      name = `Validator / Domain: ${data.domain}`\n    } else if (data?.master_key) {\n      name = `Validator / Public Key: ${data.master_key.substring(0, 8)}...`\n    } else if (data?.signing_key) {\n      name = `Validator / Ephemeral Key: ${data.signing_key.substring(0, 8)}...`\n    }\n\n    let subtitle = 'UNKNOWN KEY'\n    if (data?.master_key) {\n      subtitle = `MASTER KEY: ${data.master_key}`\n    } else if (data?.signing_key) {\n      subtitle = `SIGNING KEY: ${data.signing_key}`\n    }\n\n    return (\n      <div className=\"summary\">\n        <div className=\"type\">{name}</div>\n        <div className=\"hash\" title={subtitle}>\n          {subtitle}\n        </div>\n      </div>\n    )\n  }\n\n  function renderTabs() {\n    const tabs = ['details', 'history', 'voting']\n    const mainPath = buildPath(VALIDATOR_ROUTE, { identifier })\n    return <Tabs tabs={tabs} selected={tab} path={mainPath} />\n  }\n\n  function renderValidator() {\n    let body\n\n    switch (tab) {\n      case 'history':\n        body = <HistoryTab reports={reports ?? []} />\n        break\n      case 'voting':\n        body = data && <VotingTab validatorData={data} network={network} />\n        break\n      default:\n        body = data && <SimpleTab data={data} width={width} />\n        break\n    }\n\n    return (\n      <>\n        {renderPageTitle()}\n        {renderSummary()}\n        {renderTabs()}\n        <div className=\"tab-body\">{body}</div>\n      </>\n    )\n  }\n\n  const isLoading = dataIsLoading || reportIsLoading\n  let body\n\n  if (error) {\n    const message = getErrorMessage(error)\n    body = <NoMatch title={message.title} hints={message.hints} />\n  } else if (data?.master_key || data?.signing_key) {\n    body = renderValidator()\n  } else if (!isLoading) {\n    body = (\n      <div style={{ textAlign: 'center', fontSize: '14px' }}>\n        <h2>Could not load validator</h2>\n      </div>\n    )\n  }\n\n  return (\n    <div className=\"validator\">\n      {renderPageTitle()}\n      {isLoading && <Loader />}\n      {body}\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/Validators/simpleTab.scss",
    "content": "@use '../shared/css/variables' as *;\n\n.simple-body-validator {\n  .row {\n    .unl {\n      img {\n        height: 16px;\n        padding-top: 2px;\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "src/containers/Validators/test/HistoryTab.test.tsx",
    "content": "import { render } from '@testing-library/react'\nimport { I18nextProvider } from 'react-i18next'\nimport { HistoryTab } from '../HistoryTab'\nimport history from './mock_data/history.json'\nimport i18n from '../../../i18n/testConfig'\nimport { ValidatorReport } from '../../shared/vhsTypes'\n\ndescribe(`HistoryTab:`, () => {\n  const renderHistoryTab = (reports?: ValidatorReport[]) =>\n    render(\n      <I18nextProvider i18n={i18n}>\n        <HistoryTab reports={reports} />\n      </I18nextProvider>,\n    )\n\n  it('should render reports', () => {\n    const { container } = renderHistoryTab(history)\n    const rows = container.querySelectorAll('tbody tr')\n    expect(rows).toHaveLength(8)\n\n    const rowWithMisses = rows[3]\n    expect(\n      rowWithMisses.querySelector('.col-date .full-date'),\n    ).toHaveTextContent('Sunday, August 28, 2022')\n    expect(\n      rowWithMisses.querySelector('.col-date .abbrev-date'),\n    ).toHaveTextContent('8/28/2022')\n\n    // Check less than 1 score\n    expect(rowWithMisses.querySelector('.col-score')).toHaveClass('td-missed')\n    expect(rowWithMisses.querySelector('.col-score')).toHaveTextContent(\n      '0.99829',\n    )\n    expect(rowWithMisses.querySelector('.col-missed')).toHaveClass('td-missed')\n    expect(rowWithMisses.querySelector('.col-missed')).toHaveTextContent('37')\n\n    // Check incomplete output\n    expect(rows[7].querySelector('.col-score')).toHaveTextContent('0.99995*')\n  })\n\n  it('should render loader', () => {\n    const { container } = renderHistoryTab()\n    expect(container.querySelectorAll('tbody tr')).toHaveLength(1)\n    expect(container.querySelector('.loader')).toBeInTheDocument()\n  })\n})\n"
  },
  {
    "path": "src/containers/Validators/test/SimpleTab.test.tsx",
    "content": "import { render } from '@testing-library/react'\nimport { I18nextProvider } from 'react-i18next'\nimport { BrowserRouter as Router } from 'react-router'\nimport { SimpleTab } from '../SimpleTab'\nimport {\n  expectSimpleRowLabel,\n  expectSimpleRowText,\n} from '../../shared/components/Transaction/test'\nimport i18n from '../../../i18n/testConfigEnglish'\nimport validator from './mock_data/validator.json'\n\ndescribe('SimpleTab container', () => {\n  const renderSimpleTab = (width = 1200) =>\n    render(\n      <I18nextProvider i18n={i18n}>\n        <Router>\n          <SimpleTab data={validator} width={width} />\n        </Router>\n      </I18nextProvider>,\n    )\n\n  it('renders simple tab information', () => {\n    const { container } = renderSimpleTab()\n    expect(container.querySelectorAll('.simple-body').length).toBe(1)\n    expect(container.querySelectorAll('a').length).toBe(2)\n    expectSimpleRowText(container, 'version', '1.9.4')\n    expectSimpleRowLabel(\n      container,\n      'ledger-time',\n      'Last Ledger Date/Time (UTC)',\n    )\n    expectSimpleRowText(container, 'ledger-time', '5/28/2020, 9:21:19 AM')\n    expectSimpleRowLabel(container, 'ledger-index', 'Last Ledger Index')\n    expectSimpleRowText(container, 'ledger-index', '55764842')\n    expectSimpleRowLabel(container, '.unl', 'UNL')\n    expectSimpleRowText(container, '.unl', 'vl.ripple.com')\n    expectSimpleRowLabel(container, 'score-h1', 'Agreement (1 hour)')\n    expectSimpleRowText(container, 'score-h1', '1.00000')\n    expectSimpleRowLabel(container, 'score-h24', 'Agreement (24 hours)')\n    expectSimpleRowText(container, 'score-h24', '1.00000*')\n    expectSimpleRowLabel(container, 'score-d30', 'Agreement (30 days)')\n    expectSimpleRowText(container, 'score-d30', '0.99844*')\n  })\n\n  it('renders index row instead of index cart in width smaller than 900', () => {\n    const { container } = renderSimpleTab(800)\n    expect(container.querySelectorAll('.simple-body').length).toBe(1)\n    expect(container.querySelectorAll('.index').length).toBe(0)\n  })\n})\n"
  },
  {
    "path": "src/containers/Validators/test/Validator.test.js",
    "content": "import { render, waitFor } from '@testing-library/react'\nimport moxios from 'moxios'\nimport { Route } from 'react-router'\nimport { BAD_REQUEST } from '../../shared/utils'\nimport { Validator } from '../index'\nimport { getLedger } from '../../../rippled'\nimport NetworkContext from '../../shared/NetworkContext'\nimport testConfigEnglish from '../../../i18n/testConfigEnglish'\nimport { QuickHarness, flushPromises } from '../../test/utils'\nimport { VALIDATOR_ROUTE } from '../../App/routes'\n\nglobal.location = '/validators/aaaa'\n\nconst MOCK_IDENTIFIER = 'mock-validator-hash'\n\njest.mock('../../../rippled', () => ({\n  __esModule: true,\n  getLedger: jest.fn(),\n}))\n\ndescribe('Validator container', () => {\n  const renderValidator = (props = {}) => {\n    const defaultGetLedgerImpl = () =>\n      new Promise(\n        () => {},\n        () => {},\n      )\n    getLedger.mockImplementation(props.getLedgerImpl || defaultGetLedgerImpl)\n\n    return render(\n      <NetworkContext.Provider value={props.network || 'main'}>\n        <QuickHarness\n          i18n={testConfigEnglish}\n          initialEntries={[`/validators/${MOCK_IDENTIFIER}`]}\n        >\n          <Route path={VALIDATOR_ROUTE.path} element={<Validator />} />\n        </QuickHarness>\n      </NetworkContext.Provider>,\n    )\n  }\n\n  beforeEach(async () => {\n    moxios.install()\n  })\n\n  afterEach(() => {\n    moxios.uninstall()\n  })\n\n  it('renders without crashing', () => {\n    const { container } = renderValidator()\n    expect(container.querySelector('.validator')).toBeInTheDocument()\n  })\n\n  it('renders loading', () => {\n    const { container } = renderValidator()\n    expect(container.querySelector('.loader')).toBeInTheDocument()\n  })\n\n  it('sets title to domain', async () => {\n    moxios.stubRequest(\n      `${process.env.VITE_DATA_URL}/validator/${MOCK_IDENTIFIER}`,\n      {\n        status: 200,\n        response: {\n          domain: 'example.com',\n          ledger_hash: 'sample-ledger-hash',\n          master_key: 'foo',\n        },\n      },\n    )\n    renderValidator()\n    await flushPromises()\n    await flushPromises()\n    expect(document.title).toBe('Validator example.com')\n  })\n\n  it('sets title to master_key', async () => {\n    moxios.stubRequest(\n      `${process.env.VITE_DATA_URL}/validator/${MOCK_IDENTIFIER}`,\n      {\n        status: 200,\n        response: {\n          master_key: 'foo',\n          ledger_hash: 'sample-ledger-hash',\n        },\n      },\n    )\n    renderValidator()\n    await flushPromises()\n    await flushPromises()\n    expect(document.title).toBe('Validator foo...')\n  })\n\n  it('sets title to signing_key', async () => {\n    moxios.stubRequest(\n      `${process.env.VITE_DATA_URL}/validator/${MOCK_IDENTIFIER}`,\n      {\n        status: 200,\n        response: {\n          signing_key: 'bar',\n          ledger_hash: 'sample-ledger-hash',\n        },\n      },\n    )\n    renderValidator()\n    await flushPromises()\n    await flushPromises()\n    expect(document.title).toBe('Validator bar...')\n  })\n\n  it('fetches ledger hash if not provided', async () => {\n    moxios.stubRequest(\n      `${process.env.VITE_DATA_URL}/validator/${MOCK_IDENTIFIER}`,\n      {\n        status: 200,\n        response: {\n          master_key: 'foo',\n          domain: 'test.example.com',\n          current_index: '12345',\n        },\n      },\n    )\n    const ledger = {\n      status: 200,\n      response: {\n        ledger_hash: 'sample-ledger-hash',\n        last_ledger_time: 123456789,\n      },\n    }\n    renderValidator({\n      getLedgerImpl: () => Promise.resolve(ledger),\n    })\n    await flushPromises()\n    await flushPromises()\n    expect(getLedger).toHaveBeenCalledTimes(1)\n    expect(getLedger).toHaveBeenCalledWith('12345', undefined)\n    expect(document.title).toBe('Validator test.example.com')\n  })\n\n  it('renders 404 page on no match', async () => {\n    moxios.stubRequest(\n      `${process.env.VITE_DATA_URL}/validator/${MOCK_IDENTIFIER}`,\n      {\n        status: BAD_REQUEST,\n        response: { error: 'something went wrong' },\n      },\n    )\n    const { container } = renderValidator()\n    await flushPromises()\n    await flushPromises()\n    await waitFor(() => {\n      expect(container.querySelector('.no-match')).toBeInTheDocument()\n    })\n  })\n\n  it('displays all details except last ledger date/time on ledger 404 error', async () => {\n    moxios.stubRequest(\n      `${process.env.VITE_DATA_URL}/validator/${MOCK_IDENTIFIER}`,\n      {\n        status: 200,\n        response: {\n          master_key: 'foo',\n          domain: 'test.example.com',\n          current_index: '12345',\n        },\n      },\n    )\n\n    const notFoundError = new Error('Ledger not found')\n    notFoundError.response = { status: 404 }\n\n    const { container } = renderValidator({\n      getLedgerImpl: () => Promise.reject(notFoundError),\n    })\n\n    await flushPromises()\n    await flushPromises()\n\n    expect(getLedger).toHaveBeenCalledWith('12345', undefined)\n    expect(document.title).toBe('Validator test.example.com')\n    // test ledger-time isn't updated\n    expect(\n      container.querySelector('[data-testid=\"ledger-time\"]'),\n    ).not.toBeInTheDocument()\n    // test ledger-index stays the same\n    const lastLedgerIndex = container.querySelector(\n      '[data-testid=\"ledger-index\"]',\n    )\n    expect(lastLedgerIndex).toBeInTheDocument()\n    expect(lastLedgerIndex.querySelector('.value')).toHaveTextContent('12345')\n  })\n})\n"
  },
  {
    "path": "src/containers/Validators/test/VotingTab.test.tsx",
    "content": "import { render, waitFor } from '@testing-library/react'\nimport moxios from 'moxios'\nimport { Route } from 'react-router'\nimport i18n from '../../../i18n/testConfigEnglish'\nimport { VotingTab } from '../VotingTab'\nimport { QuickHarness } from '../../test/utils'\nimport validator from './mock_data/validator.json'\nimport amendments from './mock_data/amendments.json'\nimport NetworkContext from '../../shared/NetworkContext'\nimport { VALIDATOR_ROUTE } from '../../App/routes'\nimport { buildPath } from '../../shared/routing'\n\njest.mock('usehooks-ts', () => ({\n  useWindowSize: () => ({\n    width: 375,\n    height: 600,\n  }),\n}))\n\ndescribe('VotingTab container', () => {\n  const path = buildPath(VALIDATOR_ROUTE, {\n    identifier: validator.signing_key,\n    tab: 'voting',\n  })\n  const renderVotingTab = () =>\n    render(\n      <NetworkContext.Provider value=\"main\">\n        <QuickHarness i18n={i18n} initialEntries={[path]}>\n          <Route\n            path={path}\n            element={<VotingTab validatorData={validator} network=\"main\" />}\n          />\n        </QuickHarness>\n      </NetworkContext.Provider>,\n    )\n\n  const oldEnvs = process.env\n\n  beforeEach(() => {\n    moxios.install()\n    process.env = { ...oldEnvs, VITE_ENVIRONMENT: 'mainnet' }\n  })\n\n  afterEach(() => {\n    moxios.uninstall()\n    process.env = oldEnvs\n  })\n\n  it('renders without crashing', () => {\n    renderVotingTab()\n  })\n\n  it('renders voting tab information', async () => {\n    moxios.stubRequest(`${process.env.VITE_DATA_URL}/amendments/vote/main`, {\n      status: 200,\n      response: amendments,\n    })\n\n    const { container } = renderVotingTab()\n\n    await waitFor(() => {\n      expect(container.querySelectorAll('.metrics .cell').length).toBe(3)\n      expect(container.querySelectorAll('.voting-amendment .rows').length).toBe(\n        2,\n      )\n    })\n\n    // Render fees voting correctly\n    const cells = container.querySelectorAll('.metrics .cell')\n    expect(cells[0].innerHTML).toContain('0.00001')\n    expect(cells[1].innerHTML).toContain('10.00')\n    expect(cells[2].innerHTML).toContain('2.00')\n\n    // Render amendments correctly\n    expect(container.querySelectorAll('.amendment-label').length).toBe(1)\n    const rows = container.querySelectorAll('.voting-amendment .rows')\n    expect(rows[0].innerHTML).toContain('AMM')\n    expect(rows[0].innerHTML).toContain('Nay')\n    expect(rows[1].innerHTML).toContain('Clawback')\n    expect(rows[1].innerHTML).toContain('Yea')\n  })\n})\n"
  },
  {
    "path": "src/containers/Validators/test/mock_data/amendments.json",
    "content": "{\n  \"amendments\": [\n    {\n      \"id\": \"2E2FB9CF8A44EB80F4694D38AADAE9B8B7ADAFD2F092E10068E61C98C4F092B0\",\n      \"ledger_index\": 81986305,\n      \"tx_hash\": \"EFE82B7155CE5B766AF343D98DAE6662C2713C99E760D610370D02338881B2F3\",\n      \"date\": \"2023-08-21T05:59:11.000Z\",\n      \"name\": \"fixUniversalNumber\",\n      \"rippled_version\": \"1.10.0\",\n      \"deprecated\": false\n    },\n    {\n      \"id\": \"75A7E01C505DD5A179DFE3E000A9B6F1EDDEB55A12F95579A23E15B15DC8BE5A\",\n      \"ledger_index\": 81986305,\n      \"tx_hash\": \"65B8A4068B20696A866A07E5668B2AEB0451564E13B79421356FB962EC9A536B\",\n      \"date\": \"2023-08-21T05:59:11.000Z\",\n      \"name\": \"ImmediateOfferKilled\",\n      \"rippled_version\": \"1.10.0\",\n      \"deprecated\": false\n    },\n    {\n      \"id\": \"8CC0774A3BF66D1D22E76BBDA8E8A232E6B6313834301B3B23E8601196AE6455\",\n      \"name\": \"AMM\",\n      \"rippled_version\": \"1.12.0\",\n      \"deprecated\": false,\n      \"voted\": {\n        \"count\": 6,\n        \"validators\": [\n          {\n            \"signing_key\": \"n9L7m2qvpDm4Jc7vBpW2gb5TJEbj1UNDxWyiYX91c2wBCWHknnA5\",\n            \"ledger_index\": \"82658047\"\n          },\n          {\n            \"signing_key\": \"n9JiUqAXcHFzNFtdJ9uYeNZsdJTs1LGf4zr98bN7mWHxdtDpijAB\",\n            \"ledger_index\": \"82658047\"\n          },\n          {\n            \"signing_key\": \"n94NK1FSM9d6wkMsUhzPVPPGPzNxcEJNV5LguNoFRAa7V2o4Vmpf\",\n            \"ledger_index\": \"82658047\"\n          },\n          {\n            \"signing_key\": \"n9L8gNy4bXu8P8hR4wCPFvpomr6rtTRMUT5nX8jiYUVZD1oQ1dx5\",\n            \"ledger_index\": \"82658047\"\n          },\n          {\n            \"signing_key\": \"n9LkKWDtnHvmauvBXC3xqaG2G8QMcFAAvRFbJLT5maBv7SwQnd9p\",\n            \"ledger_index\": \"82658047\"\n          },\n          {\n            \"signing_key\": \"n9MxDjQMr1DkzW3Z5X1guKJq4QNDEeYFPgqGgHfpzerGbHWGZvj4\",\n            \"ledger_index\": \"82658047\"\n          }\n        ]\n      }\n    },\n    {\n      \"id\": \"56B241D7A43D40354D02A9DC4C8DF5C7A1F930D92A9035C4E12291B3CA3E1C2B\",\n      \"name\": \"Clawback\",\n      \"rippled_version\": \"1.12.0\",\n      \"deprecated\": false,\n      \"voted\": {\n        \"count\": 15,\n        \"validators\": [\n          {\n            \"signing_key\": \"n9KNmrXo9gK3ucZy8KHKFM113ENGv6uyukS6Bb7TtuvEx98SdwMS\",\n            \"ledger_index\": \"82658047\"\n          },\n          {\n            \"signing_key\": \"n94aSAP9QcYtmKxgCTxcv3xeD2cB6tuwH3mNDQzrjAQ5DTu7SfZi\",\n            \"ledger_index\": \"82658047\"\n          },\n          {\n            \"signing_key\": \"n9LHt3x8EhVWatBKuEWYNBas1jxiAdsxtP5QtohtcPZgRUan4Jgi\",\n            \"ledger_index\": \"82658047\"\n          },\n          {\n            \"signing_key\": \"n9L7m2qvpDm4Jc7vBpW2gb5TJEbj1UNDxWyiYX91c2wBCWHknnA5\",\n            \"ledger_index\": \"82658047\"\n          },\n          {\n            \"signing_key\": \"n9Kto4YT6BqYbz5CYDqU8pqmw7k1dZD9eUrTt3CppAh5Vo2HmUct\",\n            \"ledger_index\": \"82658047\"\n          },\n          {\n            \"signing_key\": \"n9LoWo183FhqjMznQ6aLNhWZ1gJvQdrnFq2QQn7wPgeZtvuPm68j\",\n            \"ledger_index\": \"82658047\"\n          },\n          {\n            \"signing_key\": \"n94a894ARPe5RdcaRgdMBB9gG9ukS5mqsd7q2oNmC1NKqtZqEJnb\",\n            \"ledger_index\": \"82658047\"\n          },\n          {\n            \"signing_key\": \"n9JiUqAXcHFzNFtdJ9uYeNZsdJTs1LGf4zr98bN7mWHxdtDpijAB\",\n            \"ledger_index\": \"82658047\"\n          },\n          {\n            \"signing_key\": \"n94NK1FSM9d6wkMsUhzPVPPGPzNxcEJNV5LguNoFRAa7V2o4Vmpf\",\n            \"ledger_index\": \"82658047\"\n          },\n          {\n            \"signing_key\": \"n9L8gNy4bXu8P8hR4wCPFvpomr6rtTRMUT5nX8jiYUVZD1oQ1dx5\",\n            \"ledger_index\": \"82658047\"\n          },\n          {\n            \"signing_key\": \"n9LkKWDtnHvmauvBXC3xqaG2G8QMcFAAvRFbJLT5maBv7SwQnd9p\",\n            \"ledger_index\": \"82658047\"\n          },\n          {\n            \"signing_key\": \"n9MxDjQMr1DkzW3Z5X1guKJq4QNDEeYFPgqGgHfpzerGbHWGZvj4\",\n            \"ledger_index\": \"82658047\"\n          },\n          {\n            \"signing_key\": \"n9KaxgJv69FucW5kkiaMhCqS6sAR1wUVxpZaZmLGVXxAcAse9YhR\",\n            \"ledger_index\": \"82658047\"\n          },\n          {\n            \"signing_key\": \"n94rGrfuwvYTS1HEeWboW2nGvAQgVDpiD8id2pLWSHFVggBRpQRE\",\n            \"ledger_index\": \"82658047\"\n          },\n          {\n            \"signing_key\": \"n9M2UqXLK25h9YEQTskmCXbWPGhQmB1pFVqeXia38UwLaL838VbG\",\n            \"ledger_index\": \"82658047\"\n          }\n        ]\n      }\n    }\n  ]\n}\n"
  },
  {
    "path": "src/containers/Validators/test/mock_data/history.json",
    "content": "[\n  {\n    \"validation_public_key\": \"nHUFE9prPXPrHcG3SkwP1UzAQbSphqyQkQK9ATXLZsfkezhhda3p\",\n    \"date\": \"2022-08-31T23:00:00.000Z\",\n    \"chain\": \"main\",\n    \"score\": \"1.00000\",\n    \"total\": \"21654\",\n    \"missed\": \"0\",\n    \"incomplete\": false\n  },\n  {\n    \"validation_public_key\": \"nHUFE9prPXPrHcG3SkwP1UzAQbSphqyQkQK9ATXLZsfkezhhda3p\",\n    \"date\": \"2022-08-30T23:00:00.000Z\",\n    \"chain\": \"main\",\n    \"score\": \"1.00000\",\n    \"total\": \"21705\",\n    \"missed\": \"0\",\n    \"incomplete\": false\n  },\n  {\n    \"validation_public_key\": \"nHUFE9prPXPrHcG3SkwP1UzAQbSphqyQkQK9ATXLZsfkezhhda3p\",\n    \"date\": \"2022-08-29T23:00:00.000Z\",\n    \"chain\": \"main\",\n    \"score\": \"1.00000\",\n    \"total\": \"21610\",\n    \"missed\": \"0\",\n    \"incomplete\": false\n  },\n  {\n    \"validation_public_key\": \"nHUFE9prPXPrHcG3SkwP1UzAQbSphqyQkQK9ATXLZsfkezhhda3p\",\n    \"date\": \"2022-08-28T23:00:00.000Z\",\n    \"chain\": \"main\",\n    \"score\": \"0.99829\",\n    \"total\": \"21579\",\n    \"missed\": \"37\",\n    \"incomplete\": false\n  },\n  {\n    \"validation_public_key\": \"nHUFE9prPXPrHcG3SkwP1UzAQbSphqyQkQK9ATXLZsfkezhhda3p\",\n    \"date\": \"2022-08-27T23:00:00.000Z\",\n    \"chain\": \"main\",\n    \"score\": \"1.00000\",\n    \"total\": \"21602\",\n    \"missed\": \"0\",\n    \"incomplete\": false\n  },\n  {\n    \"validation_public_key\": \"nHUFE9prPXPrHcG3SkwP1UzAQbSphqyQkQK9ATXLZsfkezhhda3p\",\n    \"date\": \"2022-08-26T23:00:00.000Z\",\n    \"chain\": \"main\",\n    \"score\": \"1.00000\",\n    \"total\": \"21473\",\n    \"missed\": \"0\",\n    \"incomplete\": false\n  },\n  {\n    \"validation_public_key\": \"nHUFE9prPXPrHcG3SkwP1UzAQbSphqyQkQK9ATXLZsfkezhhda3p\",\n    \"date\": \"2022-08-25T23:00:00.000Z\",\n    \"chain\": \"main\",\n    \"score\": \"1.00000\",\n    \"total\": \"21642\",\n    \"missed\": \"0\",\n    \"incomplete\": false\n  },\n  {\n    \"validation_public_key\": \"nHUFE9prPXPrHcG3SkwP1UzAQbSphqyQkQK9ATXLZsfkezhhda3p\",\n    \"date\": \"2022-08-24T23:00:00.000Z\",\n    \"chain\": \"main\",\n    \"score\": \"0.99995\",\n    \"total\": \"21672\",\n    \"missed\": \"1\",\n    \"incomplete\": true\n  }\n]\n"
  },
  {
    "path": "src/containers/Validators/test/mock_data/validator.json",
    "content": "{\n  \"master_key\": \"nHUvzia57LRXr9zqnYpyFUFeKvis2tqn4DkXBVGSppt5M4nNq43C\",\n  \"signing_key\": \"n9KNmrXo9gK3ucZy8KHKFM113ENGv6uyukS6Bb7TtuvEx98SdwMS\",\n  \"validation_public_key\": \"nHUvzia57LRXr9zqnYpyFUFeKvis2tqn4DkXBVGSppt5M4nNq43C\",\n  \"ledger_hash\": \"D498209A1B1BBACB9D7C8419F9A4136E7F7748E66B7936D2F92249A2C1AFBCB9\",\n  \"current_index\": 55764842,\n  \"partial\": false,\n  \"chain\": \"main\",\n  \"unl\": \"vl.ripple.com\",\n  \"last_ledger_time\": \"2020-05-28T09:21:19.000Z\",\n  \"server_version\": \"1.9.4\",\n  \"agreement_1h\": {\n    \"score\": \"1.00000\",\n    \"missed\": 0,\n    \"incomplete\": false,\n    \"total\": 917\n  },\n  \"agreement_24h\": {\n    \"score\": \"1.00000\",\n    \"missed\": 0,\n    \"incomplete\": true,\n    \"total\": 22184\n  },\n  \"agreement_30day\": {\n    \"score\": \"0.99844\",\n    \"missed\": 1046,\n    \"total\": 672351,\n    \"incomplete\": true\n  },\n  \"domain\": \"digifin.uk\",\n  \"base_fee\": 10,\n  \"reserve_base\": 10000000,\n  \"reserve_inc\": 2000000,\n  \"amendments\": [\n    {\n      \"id\": \"56B241D7A43D40354D02A9DC4C8DF5C7A1F930D92A9035C4E12291B3CA3E1C2B\",\n      \"name\": \"Clawback\"\n    }\n  ]\n}\n"
  },
  {
    "path": "src/containers/Validators/types.ts",
    "content": "export interface ValidatorReport {\n  chain: string\n  date: string\n  incomplete: boolean\n  missed: string\n  score: string\n  total: string\n  // eslint-disable-next-line camelcase -- mimicking rippled\n  validation_public_key: string\n}\n"
  },
  {
    "path": "src/containers/Validators/validator.scss",
    "content": "@use '../shared/css/variables' as *;\n\n.validator {\n  position: relative;\n  min-height: 600px;\n\n  @include for-size(tablet-landscape-up) {\n    width: 552px;\n    margin: auto;\n  }\n  @include for-size(desktop-up) {\n    width: 772px;\n  }\n  @include for-size(big-desktop-up) {\n    width: 1140px;\n  }\n\n  .loader {\n    position: absolute;\n    z-index: 1;\n    top: 0;\n  }\n\n  .summary {\n    width: calc(100% - 32px);\n    padding: 30px 16px 20px;\n\n    .type {\n      display: inline-block;\n      margin-bottom: 24px;\n      color: $white;\n      font-size: 32px;\n      @include bold;\n    }\n\n    .label {\n      margin-top: 16px;\n      margin-bottom: 4px;\n      color: $black-80;\n      font-size: 24px;\n      line-height: 32px;\n      @include bold;\n\n      @include for-size(tablet-landscape-up) {\n        font-size: 32px;\n        line-height: 40px;\n      }\n      @include for-size(desktop-up) {\n        font-size: 40px;\n        line-height: 48px;\n      }\n      @include for-size(big-desktop-up) {\n        font-size: 40px;\n        line-height: 48px;\n      }\n    }\n\n    .hash {\n      overflow: hidden;\n      padding-bottom: 87px;\n      color: $black-40;\n      font-size: 12px;\n      letter-spacing: 0px;\n      line-height: 20px;\n      text-overflow: ellipsis;\n      white-space: nowrap;\n      @include medium;\n    }\n\n    .status {\n      display: inline-block;\n      padding: 0px 15px 5px;\n      font-size: 10px;\n      line-height: 18px;\n      text-transform: uppercase;\n      vertical-align: middle;\n      @include bold;\n\n      @include for-size(tablet-landscape-up) {\n        font-size: 12px;\n        line-height: 20px;\n      }\n      @include for-size(desktop-up) {\n        font-size: 12px;\n        line-height: 20px;\n      }\n      @include for-size(big-desktop-up) {\n        font-size: 12px;\n        line-height: 20px;\n      }\n\n      &.success {\n        color: $green;\n      }\n\n      &.fail {\n        color: $orange-40;\n\n        span {\n          text-transform: none;\n        }\n      }\n\n      img {\n        position: relative;\n        top: 4px;\n        width: 16px;\n        height: 16px;\n        margin-right: 4px;\n      }\n    }\n  }\n\n  .tab-body {\n    margin: 0px auto;\n  }\n}\n"
  },
  {
    "path": "src/containers/Validators/votingTab.scss",
    "content": "@use '../shared/css/variables' as *;\n\n.voting {\n  margin-left: 24px;\n\n  .metrics {\n    &.metrics-voting {\n      width: auto;\n      padding-left: 0;\n      text-align: left;\n\n      .cell {\n        display: flex;\n        justify-content: space-between;\n        margin: 0 !important;\n        text-align: left;\n\n        @include for-size(tablet-landscape-up) {\n          display: inline-block;\n        }\n      }\n    }\n  }\n\n  .amendment-label {\n    margin-top: 48px;\n    font-size: 24px;\n    font-weight: 700;\n  }\n\n  .voting-amendment {\n    font-size: 14px;\n\n    .rows {\n      margin-top: 32px;\n      background-color: $black-80;\n    }\n\n    .row {\n      display: flex;\n      flex-flow: row wrap;\n      justify-content: space-between;\n      padding: 16px;\n      border-bottom: 1px solid $black-70;\n    }\n\n    .label {\n      margin: 0;\n      font-weight: 100;\n      text-transform: capitalize;\n    }\n\n    .text-truncate {\n      @extend %truncate;\n    }\n  }\n\n  .badge {\n    color: $black-100;\n    text-transform: uppercase;\n\n    &.yea {\n      background-color: $green-60;\n    }\n\n    &.nay {\n      background-color: $black-30;\n    }\n  }\n\n  .no-match {\n    &.no-match-amendments {\n      margin: 32px 0;\n    }\n  }\n}\n"
  },
  {
    "path": "src/containers/Vault/CurrencyToggle.tsx",
    "content": "import { ReactNode } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { useTooltip } from '../shared/components/Tooltip'\nimport './styles.scss'\nimport HoverIcon from '../shared/images/hover.svg'\n\nconst USD = 'USD'\n\ninterface Props {\n  nativeCurrencyDisplay?: ReactNode // Optional JSX for button display (defaults to nativeCurrency)\n  selected: string // The currently selected currency (nativeCurrency or \"USD\")\n  onToggle: (currency: string) => void\n  usdDisabled?: boolean // Disable USD option when no price is available\n  usdLoading?: boolean // Show loading state while fetching price\n}\n\nexport const CurrencyToggle = ({\n  nativeCurrencyDisplay,\n  selected,\n  onToggle,\n  usdDisabled = false,\n  usdLoading = false,\n}: Props) => {\n  const { t } = useTranslation()\n  const { showTooltip, hideTooltip } = useTooltip()\n\n  const renderTextTooltip = (key: string) => (\n    <HoverIcon\n      className=\"hover\"\n      onMouseOver={(e) => {\n        const rect = e.currentTarget.getBoundingClientRect()\n        showTooltip('text', e, t(`${key}_description`, { defaultValue: '' }), {\n          x: rect.left + rect.width / 2,\n          y: rect.top - 70,\n        })\n      }}\n      onMouseLeave={() => hideTooltip()}\n    />\n  )\n\n  const handleUsdClick = () => {\n    if (!usdDisabled && !usdLoading) {\n      onToggle(USD)\n    }\n  }\n\n  // Native is selected when selected is not USD (handles empty initial state)\n  const isNativeSelected = selected !== USD\n\n  return (\n    <div className=\"currency-toggle-wrapper\">\n      <div className=\"currency-toggle\">\n        <button\n          type=\"button\"\n          className={`toggle-option ${isNativeSelected ? 'active' : ''} ${usdDisabled || usdLoading ? 'disabled' : ''}`}\n          onClick={() => onToggle('')}\n        >\n          {nativeCurrencyDisplay}\n        </button>\n        <span className=\"toggle-option-wrapper\">\n          <button\n            type=\"button\"\n            className={`toggle-option ${!isNativeSelected ? 'active' : ''} ${usdDisabled || usdLoading ? 'disabled' : ''}`}\n            onClick={handleUsdClick}\n            disabled={usdDisabled || usdLoading}\n          >\n            {usdLoading ? '...' : USD}\n          </button>\n          {usdLoading && renderTextTooltip('currency_toggle_loading')}\n          {!usdLoading &&\n            usdDisabled &&\n            renderTextTooltip('currency_toggle_unavailable')}\n        </span>\n      </div>\n      {/* Only show tooltip if USD currency conversion data is available */}\n      {!usdLoading && !usdDisabled && renderTextTooltip('currency_toggle')}\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/Vault/VaultDepositors/api/depositors.ts",
    "content": "import { getMPTHolders } from '../../../../rippled/lib/rippled'\nimport { XRPLHolder } from '../../../shared/components/HoldersTable/HoldersTable'\n\ninterface VaultHolderFromClio {\n  account: string\n  mpt_amount: string\n}\n\nexport interface VaultDepositorSummary {\n  depositors: XRPLHolder[]\n  totalDepositors: number\n}\n\n/**\n * Fetches all vault depositors and calculates their share values.\n *\n * @param rippledSocket - The rippled socket connection\n * @param shareMptId - The MPT ID for vault shares\n * @param totalSupply - Total supply of vault shares\n * @param assetsTotal - Total assets in the vault\n * @param tokenToUsdRate - Exchange rate from token to USD\n * @returns Summary with all depositors and total count\n */\nexport async function fetchAllVaultDepositors(\n  rippledSocket: any,\n  shareMptId: string,\n  totalSupply: string | undefined,\n  assetsTotal: string | undefined,\n  tokenToUsdRate: number,\n): Promise<VaultDepositorSummary> {\n  const allHolders: VaultHolderFromClio[] = []\n  let marker: string | undefined\n\n  do {\n    // eslint-disable-next-line no-await-in-loop\n    const response = await getMPTHolders(\n      rippledSocket,\n      shareMptId,\n      100, // Fetch 100 at a time for efficiency\n      marker || '',\n    )\n\n    if (response.mpt_holders) {\n      allHolders.push(...response.mpt_holders)\n    }\n\n    marker = response.marker\n  } while (marker)\n\n  const totalSupplyNum = totalSupply ? Number(totalSupply) : 0\n  const assetsTotalNum = assetsTotal ? Number(assetsTotal) : 0\n\n  // Filter out zero balances and sort by amount in descending order\n  const sortedHolders = allHolders\n    .filter((h) => Number(h.mpt_amount || 0) > 0)\n    .sort((a, b) => Number(b.mpt_amount || 0) - Number(a.mpt_amount || 0))\n\n  // Calculate USD value for a holder's share\n  const calculateValueUsd = (holderAmount: string): number | null => {\n    const amount = Number(holderAmount)\n    if (!totalSupplyNum || !assetsTotalNum) return null\n\n    // Proportional value: (holder tokens / total supply) * total assets\n    const value = (amount / totalSupplyNum) * assetsTotalNum\n\n    // Convert to USD\n    if (tokenToUsdRate > 0) {\n      return value * tokenToUsdRate\n    }\n    return null\n  }\n\n  // Format depositors with rank and percentage\n  const depositors: XRPLHolder[] = sortedHolders.map(\n    (holder: VaultHolderFromClio, index: number) => {\n      const amount = Number(holder.mpt_amount || '0')\n      const percent = totalSupplyNum > 0 ? (amount / totalSupplyNum) * 100 : 0\n\n      return {\n        rank: index + 1,\n        account: holder.account,\n        balance: holder.mpt_amount,\n        percent,\n        value_usd: calculateValueUsd(holder.mpt_amount),\n      }\n    },\n  )\n\n  return {\n    depositors,\n    totalDepositors: depositors.length,\n  }\n}\n"
  },
  {
    "path": "src/containers/Vault/VaultDepositors/index.tsx",
    "content": "import { useContext, useMemo, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { useQuery } from 'react-query'\nimport SocketContext from '../../shared/SocketContext'\nimport { useAnalytics } from '../../shared/analytics'\nimport { Loader } from '../../shared/components/Loader'\nimport { HoldersTable } from '../../shared/components/HoldersTable/HoldersTable'\nimport { useTokenToUSDRate } from '../../shared/hooks/useTokenToUSDRate'\nimport { fetchAllVaultDepositors } from './api/depositors'\nimport './styles.scss'\n\ninterface AssetInfo {\n  currency: string\n  issuer?: string\n  mpt_issuance_id?: string\n}\n\ninterface Props {\n  shareMptId: string\n  totalSupply: string | undefined\n  assetsTotal: string | undefined\n  asset?: AssetInfo\n}\n\nconst PAGE_SIZE = 10\n\nexport const VaultDepositors = ({\n  shareMptId,\n  totalSupply,\n  assetsTotal,\n  asset,\n}: Props) => {\n  const { t } = useTranslation()\n  const { trackException } = useAnalytics()\n  const rippledSocket = useContext(SocketContext)\n  const [currentPage, setCurrentPage] = useState(1)\n\n  const { rate: tokenToUsdRate } = useTokenToUSDRate(asset)\n\n  const {\n    data,\n    isFetching: loading,\n    error,\n  } = useQuery(\n    [\n      'getVaultDepositors',\n      shareMptId,\n      totalSupply,\n      assetsTotal,\n      tokenToUsdRate,\n    ],\n    async () =>\n      fetchAllVaultDepositors(\n        rippledSocket,\n        shareMptId,\n        totalSupply,\n        assetsTotal,\n        tokenToUsdRate,\n      ),\n    {\n      enabled: !!shareMptId,\n      onError: (e: any) => {\n        trackException(\n          `Error fetching Vault depositors ${shareMptId} --- ${JSON.stringify(e)}`,\n        )\n      },\n    },\n  )\n\n  // Client-side pagination\n  const paginatedDepositors = useMemo(() => {\n    if (!data?.depositors) {\n      return []\n    }\n\n    const start = (currentPage - 1) * PAGE_SIZE\n    const end = start + PAGE_SIZE\n    return data.depositors.slice(start, end)\n  }, [data?.depositors, currentPage])\n\n  if (error) {\n    return (\n      <div className=\"vault-depositors-section\">\n        <h2 className=\"vault-depositors-title\">{t('depositors')}</h2>\n        <div className=\"vault-depositors-divider\" />\n        <div className=\"depositors-error-message\">\n          {t('depositors_fetch_error')}\n        </div>\n      </div>\n    )\n  }\n\n  if (loading && !data) {\n    return (\n      <div className=\"vault-depositors-section\">\n        <h2 className=\"vault-depositors-title\">{t('depositors')}</h2>\n        <div className=\"vault-depositors-divider\" />\n        <Loader />\n      </div>\n    )\n  }\n\n  if (!data || data.depositors.length === 0) {\n    return (\n      <div className=\"vault-depositors-section\">\n        <h2 className=\"vault-depositors-title\">{t('depositors')}</h2>\n        <div className=\"vault-depositors-divider\" />\n        <div className=\"no-depositors-message\">\n          {t('no_depositors_message')}\n        </div>\n      </div>\n    )\n  }\n\n  // TODO: Test the visual appearance of this table after Clio API mpt_holders is implemented\n  return (\n    <div className=\"vault-depositors-section\">\n      <h2 className=\"vault-depositors-title\">{t('depositors')}</h2>\n      <div className=\"vault-depositors-divider\" />\n      <HoldersTable\n        holders={paginatedDepositors}\n        isHoldersDataLoading={loading}\n        totalHolders={data.totalDepositors}\n        currentPage={currentPage}\n        onPageChange={setCurrentPage}\n        pageSize={PAGE_SIZE}\n      />\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/Vault/VaultDepositors/styles.scss",
    "content": "@use '../../shared/css/variables' as *;\n\n.vault-depositors-section {\n  width: 100%;\n  padding: 0 24px;\n  margin-top: 48px;\n\n  @include for-size(desktop-up) {\n    padding: 0 64px;\n  }\n\n  .vault-depositors-title {\n    margin: 0 0 16px;\n    color: $white;\n    font-size: 24px;\n    @include bold;\n  }\n\n  .vault-depositors-divider {\n    background: $black-70;\n  }\n\n  .no-depositors-message {\n    padding: 32px;\n    color: $black-40;\n    text-align: center;\n  }\n\n  .depositors-error-message {\n    padding: 32px;\n    color: #ff6b6b;\n    text-align: center;\n  }\n}\n\n.depositor-table {\n  width: 100%;\n  border-collapse: collapse;\n\n  thead {\n    tr {\n      border-bottom: 1px solid $black-70;\n    }\n\n    th {\n      padding: 16px 12px;\n      color: $black-40;\n      font-size: 12px;\n      font-weight: normal;\n      letter-spacing: 0.5px;\n      text-align: left;\n      text-transform: uppercase;\n\n      &:first-child {\n        padding-left: 0;\n      }\n\n      &:last-child {\n        padding-right: 0;\n      }\n    }\n  }\n\n  tbody {\n    tr {\n      border-bottom: 1px solid $black-80;\n\n      &:hover {\n        background: rgba($white, 0.02);\n      }\n    }\n\n    td {\n      padding: 16px 12px;\n      color: $white;\n      font-size: 14px;\n\n      &:first-child {\n        padding-left: 0;\n      }\n\n      &:last-child {\n        padding-right: 0;\n      }\n    }\n  }\n\n  .rank-cell {\n    width: 80px;\n    color: $black-40;\n  }\n\n  .account-cell {\n    min-width: 150px;\n\n    a {\n      color: $green;\n      text-decoration: none;\n\n      &:hover {\n        text-decoration: underline;\n      }\n    }\n  }\n\n  .tokens-cell {\n    min-width: 120px;\n  }\n\n  .percent-cell {\n    min-width: 100px;\n  }\n\n  .value-cell {\n    min-width: 100px;\n  }\n}\n\n.pagination {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  padding: 16px 0;\n  margin-top: 24px;\n  gap: 16px;\n\n  .pagination-btn {\n    padding: 8px 16px;\n    border: 1px solid $black-60;\n    border-radius: 4px;\n    background: transparent;\n    color: $white;\n    cursor: pointer;\n    font-size: 14px;\n    transition: all 0.2s;\n\n    &:disabled {\n      cursor: not-allowed;\n      opacity: 0.3;\n    }\n\n    &:hover:not(:disabled) {\n      border-color: $green;\n      color: $green;\n    }\n  }\n\n  .pagination-info {\n    color: $white;\n    font-size: 14px;\n  }\n}\n"
  },
  {
    "path": "src/containers/Vault/VaultDepositors/test/VaultDepositors.test.tsx",
    "content": "import React from 'react'\nimport { render, screen, fireEvent, waitFor } from '@testing-library/react'\nimport { I18nextProvider } from 'react-i18next'\nimport { BrowserRouter as Router } from 'react-router'\nimport { QueryClientProvider, QueryClient } from 'react-query'\nimport i18n from '../../../../i18n/testConfigEnglish'\nimport SocketContext from '../../../shared/SocketContext'\nimport { VaultDepositors } from '../index'\nimport { fetchAllVaultDepositors } from '../api/depositors'\nimport Mock = jest.Mock\n\njest.mock('../api/depositors', () => ({\n  fetchAllVaultDepositors: jest.fn(),\n}))\n\njest.mock('../../../shared/analytics', () => ({\n  useAnalytics: () => ({ trackException: jest.fn() }),\n}))\n\njest.mock('../../../shared/hooks/useTokenToUSDRate', () => ({\n  useTokenToUSDRate: () => ({ rate: 1.5, isAvailable: true, isLoading: false }),\n}))\n\nconst mockedFetchAllDepositors = fetchAllVaultDepositors as Mock\nconst mockSocket = {} as any\n\nconst createQueryClient = () =>\n  new QueryClient({\n    defaultOptions: { queries: { retry: false, staleTime: 0, cacheTime: 0 } },\n  })\n\nconst TestWrapper =\n  (queryClient: QueryClient) =>\n  ({ children }: { children: React.ReactNode }) => (\n    <I18nextProvider i18n={i18n}>\n      <Router>\n        <SocketContext.Provider value={mockSocket}>\n          <QueryClientProvider client={queryClient}>\n            {children}\n          </QueryClientProvider>\n        </SocketContext.Provider>\n      </Router>\n    </I18nextProvider>\n  )\n\nconst shareMptId = 'TEST_MPT_ID'\nconst totalSupply = '1000000'\nconst assetsTotal = '500000'\nconst asset = { currency: 'XRP' }\n\n// Generate mock depositors for pagination testing (PAGE_SIZE = 10)\nconst createMockDepositors = (count: number) =>\n  Array.from({ length: count }, (_, i) => ({\n    rank: i + 1,\n    account: `rAccount${i + 1}`,\n    balance: `${(100 - i) * 1000}`,\n    percent: (100 - i) / 10,\n    value_usd: (100 - i) * 100,\n  }))\n\ndescribe('VaultDepositors', () => {\n  beforeEach(() => {\n    jest.clearAllMocks()\n  })\n\n  it('renders loading state', () => {\n    mockedFetchAllDepositors.mockReturnValue(new Promise(() => {}))\n    render(\n      <VaultDepositors\n        shareMptId={shareMptId}\n        totalSupply={totalSupply}\n        assetsTotal={assetsTotal}\n        asset={asset}\n      />,\n      { wrapper: TestWrapper(createQueryClient()) },\n    )\n\n    expect(screen.getByText('Depositors')).toBeInTheDocument()\n    expect(screen.getByAltText('Loading')).toBeInTheDocument()\n  })\n\n  it('renders error state', async () => {\n    mockedFetchAllDepositors.mockRejectedValue(new Error('API Error'))\n    render(\n      <VaultDepositors\n        shareMptId={shareMptId}\n        totalSupply={totalSupply}\n        assetsTotal={assetsTotal}\n        asset={asset}\n      />,\n      { wrapper: TestWrapper(createQueryClient()) },\n    )\n\n    await waitFor(() => {\n      expect(\n        screen.getByText(/Unable to fetch depositors information/i),\n      ).toBeInTheDocument()\n    })\n  })\n\n  it('renders empty state when no depositors', async () => {\n    mockedFetchAllDepositors.mockResolvedValue({\n      depositors: [],\n      totalDepositors: 0,\n    })\n    render(\n      <VaultDepositors\n        shareMptId={shareMptId}\n        totalSupply={totalSupply}\n        assetsTotal={assetsTotal}\n        asset={asset}\n      />,\n      { wrapper: TestWrapper(createQueryClient()) },\n    )\n\n    await waitFor(() => {\n      expect(screen.getByText(/No depositors found/i)).toBeInTheDocument()\n    })\n  })\n\n  it('renders depositors table with data', async () => {\n    mockedFetchAllDepositors.mockResolvedValue({\n      depositors: createMockDepositors(5),\n      totalDepositors: 5,\n    })\n    render(\n      <VaultDepositors\n        shareMptId={shareMptId}\n        totalSupply={totalSupply}\n        assetsTotal={assetsTotal}\n        asset={asset}\n      />,\n      { wrapper: TestWrapper(createQueryClient()) },\n    )\n\n    await waitFor(() => {\n      expect(screen.getByText('rAccount1')).toBeInTheDocument()\n      expect(screen.getByText('rAccount5')).toBeInTheDocument()\n    })\n  })\n\n  it('handles pagination when more than 10 depositors', async () => {\n    // 15 depositors = 2 pages (10 + 5)\n    mockedFetchAllDepositors.mockResolvedValue({\n      depositors: createMockDepositors(15),\n      totalDepositors: 15,\n    })\n    render(\n      <VaultDepositors\n        shareMptId={shareMptId}\n        totalSupply={totalSupply}\n        assetsTotal={assetsTotal}\n        asset={asset}\n      />,\n      { wrapper: TestWrapper(createQueryClient()) },\n    )\n\n    // Page 1: first 10 depositors\n    await waitFor(() => {\n      for (let i = 1; i <= 10; i += 1) {\n        expect(screen.getByText(`rAccount${i}`)).toBeInTheDocument()\n      }\n    })\n    expect(screen.queryByText('rAccount11')).not.toBeInTheDocument()\n\n    // Click page 2\n    const page2Button = screen.getByRole('button', { name: '2' })\n    fireEvent.click(page2Button)\n\n    // Page 2: depositors 11-15\n    await waitFor(() => {\n      expect(screen.getByText('rAccount11')).toBeInTheDocument()\n      expect(screen.getByText('rAccount15')).toBeInTheDocument()\n    })\n  })\n\n  it('disables query when shareMptId is empty', () => {\n    render(\n      <VaultDepositors\n        shareMptId=\"\"\n        totalSupply={totalSupply}\n        assetsTotal={assetsTotal}\n        asset={asset}\n      />,\n      { wrapper: TestWrapper(createQueryClient()) },\n    )\n\n    expect(mockedFetchAllDepositors).not.toHaveBeenCalled()\n  })\n})\n"
  },
  {
    "path": "src/containers/Vault/VaultHeader/index.tsx",
    "content": "import { useContext } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { useQuery } from 'react-query'\nimport { TokenTableRow } from '../../shared/components/TokenTableRow'\nimport { Account } from '../../shared/components/Account'\nimport { CopyableText } from '../../shared/components/CopyableText/CopyableText'\nimport { useTokenToUSDRate } from '../../shared/hooks/useTokenToUSDRate'\nimport { RouteLink } from '../../shared/routing'\nimport { MPT_ROUTE } from '../../App/routes'\nimport SocketContext from '../../shared/SocketContext'\nimport { getMPTIssuance } from '../../../rippled/lib/rippled'\nimport { parseVaultWebsite } from '../utils'\nimport {\n  shortenVaultID,\n  shortenAccount,\n  getCurrencySymbol,\n  isCurrencyExoticSymbol,\n} from '../../shared/utils'\nimport './styles.scss'\nimport { useAnalytics } from '../../shared/analytics'\nimport { parseAmount } from '../../shared/NumberFormattingUtils'\nimport { convertHexToString } from '../../../rippled/lib/utils'\nimport { Metadata } from '../../Token/MPT/Header/Metadata'\nimport Currency from '../../shared/components/Currency'\nimport { parseMPTokenMetadata } from '../../shared/mptUtils'\n\ninterface VaultData {\n  Owner?: string\n  Asset?: {\n    currency?: string\n    issuer?: string\n    mpt_issuance_id?: string\n  }\n  AssetsTotal?: string\n  AssetsAvailable?: string\n  AssetsMaximum?: string\n  MPTIssuanceID?: string\n  Flags?: number\n  LossUnrealized?: string\n  PseudoAccount?: string\n  WithdrawalPolicy?: number\n  Data?: string\n  ShareMPTID?: string\n}\n\ninterface Props {\n  data: VaultData\n  vaultId: string\n  displayCurrency: string\n}\n\n// Vault flags from XLS-65d spec\nconst VAULT_FLAGS = {\n  lsfVaultPrivate: 0x00010000,\n}\n\n// Withdrawal policy values from XLS-65d spec\nconst WITHDRAWAL_POLICIES: { [key: number]: string } = {\n  1: 'first_come_first_served',\n}\n\nexport const VaultHeader = ({ data, vaultId, displayCurrency }: Props) => {\n  const { t } = useTranslation()\n  const { trackException } = useAnalytics()\n  const rippledSocket = useContext(SocketContext)\n  const { rate: tokenToUsdRate } = useTokenToUSDRate(\n    data.Asset?.currency\n      ? { currency: data.Asset.currency, issuer: data.Asset.issuer }\n      : undefined,\n  )\n\n  const {\n    Owner: owner,\n    Asset: asset,\n    AssetsTotal: assetsTotal,\n    AssetsAvailable: assetsAvailable,\n    AssetsMaximum: assetsMaximum,\n    Flags: flags,\n    LossUnrealized: lossUnrealized,\n    WithdrawalPolicy: withdrawalPolicy,\n    Data: vaultDataRaw,\n    ShareMPTID: vaultShareMptId,\n  } = data\n\n  // Converts amount to USD if displayCurrency is 'USD', otherwise returns as-is\n  const convertToDisplayCurrency = (\n    amount: string | undefined,\n  ): string | undefined => {\n    if (!amount || displayCurrency !== 'USD') return amount\n\n    const numAmount = Number(amount)\n    if (Number.isNaN(numAmount)) return amount\n\n    return tokenToUsdRate > 0 ? String(numAmount * tokenToUsdRate) : undefined\n  }\n\n  const { data: vaultAssetMptIssuanceData } = useQuery(\n    ['getVaultAssetMPTIssuance', asset?.mpt_issuance_id],\n    async () => {\n      if (!asset?.mpt_issuance_id) return null\n      const resp = await getMPTIssuance(rippledSocket, asset?.mpt_issuance_id)\n      return resp?.node\n    },\n    {\n      enabled: !!asset?.mpt_issuance_id,\n      onError: (e: any) => {\n        trackException(\n          `Error fetching MPT Issuance data for the Vault Asset MPT ID ${asset?.mpt_issuance_id} --- ${JSON.stringify(e)}`,\n        )\n      },\n    },\n  )\n\n  const parsedAssetMptMetadata = parseMPTokenMetadata(\n    vaultAssetMptIssuanceData?.MPTokenMetadata,\n  )\n  const mptTicker = parsedAssetMptMetadata?.ticker as string | undefined\n\n  // Returns 'USD' when showing USD values, otherwise the vault's asset currency\n  const getDisplayCurrencyLabel = (): string =>\n    displayCurrency === 'USD'\n      ? 'USD'\n      : getCurrencySymbol(\n          asset?.currency ?? mptTicker ?? asset?.mpt_issuance_id,\n        )\n\n  // Fetch MPTokenIssuance to get the DomainID (vault credential)\n  const { data: mptIssuanceData } = useQuery(\n    ['getVaultShareMPTIssuance', vaultShareMptId],\n    async () => {\n      if (!vaultShareMptId) return null\n      const resp = await getMPTIssuance(rippledSocket, vaultShareMptId)\n      return resp?.node\n    },\n    {\n      enabled: !!vaultShareMptId,\n      onError: (e: any) => {\n        trackException(\n          `Error fetching MPT Issuance data for MPT ID ${vaultShareMptId} --- ${JSON.stringify(e)}`,\n        )\n      },\n    },\n  )\n\n  const vaultCredential = mptIssuanceData?.DomainID\n\n  const isPrivate =\n    flags !== undefined && (flags & VAULT_FLAGS.lsfVaultPrivate) !== 0\n\n  const decodedData = convertHexToString(vaultDataRaw)\n  const vaultWebsite = parseVaultWebsite(vaultDataRaw)\n\n  const getWithdrawalPolicyText = () => {\n    if (withdrawalPolicy === undefined) return '-'\n    const policyKey = WITHDRAWAL_POLICIES[withdrawalPolicy]\n    if (!policyKey) return String(withdrawalPolicy)\n    // Use type assertion for dynamic translation keys\n    return t(policyKey as 'first_come_first_served')\n  }\n\n  const renderMPTSharesLink = () => {\n    if (!vaultShareMptId) return '-'\n    return (\n      <RouteLink\n        className=\"currency\"\n        data-testid=\"currency\"\n        to={MPT_ROUTE}\n        params={{ id: vaultShareMptId }}\n      >\n        {vaultShareMptId}\n      </RouteLink>\n    )\n  }\n\n  return (\n    <div className=\"vault-section\">\n      <h2 className=\"vault-section-title\">{t('vault')}</h2>\n      <div className=\"vault-section-divider\" />\n      <div className=\"vault-details-container\">\n        <div className=\"details-column\">\n          <table className=\"token-table\">\n            <tbody>\n              <TokenTableRow\n                label={t('vault_id')}\n                value={\n                  <CopyableText\n                    text={vaultId}\n                    displayText={`${shortenVaultID(vaultId)}`}\n                    showCopyIcon\n                  />\n                }\n              />\n              {owner && (\n                <TokenTableRow\n                  label={t('owner')}\n                  value={\n                    <Account\n                      account={owner}\n                      displayText={`${shortenAccount(owner)}`}\n                    />\n                  }\n                />\n              )}\n              <TokenTableRow\n                label={t('private_vault')}\n                value={\n                  <div className=\"private-vault-toggle\">\n                    <span\n                      className={`toggle-pill ${isPrivate ? 'active' : ''}`}\n                    >\n                      {t('yes')}\n                    </span>\n                    <span\n                      className={`toggle-pill ${!isPrivate ? 'active' : ''}`}\n                    >\n                      {t('no')}\n                    </span>\n                  </div>\n                }\n              />\n              {vaultCredential && (\n                <TokenTableRow\n                  label={t('perm_domain_id')}\n                  value={vaultCredential}\n                />\n              )}\n              {vaultWebsite && (\n                <TokenTableRow\n                  label={t('website')}\n                  value={\n                    <a\n                      href={\n                        vaultWebsite.startsWith('http')\n                          ? vaultWebsite\n                          : `https://${vaultWebsite}`\n                      }\n                      target=\"_blank\"\n                      rel=\"noopener noreferrer\"\n                    >\n                      {vaultWebsite}\n                    </a>\n                  }\n                />\n              )}\n              <TokenTableRow\n                label={t('data')}\n                value={\n                  <Metadata\n                    decodedMPTMetadata={(() => {\n                      if (!decodedData) return '-'\n                      try {\n                        return JSON.parse(decodedData)\n                      } catch {\n                        return decodedData\n                      }\n                    })()}\n                    displayMetadataTitle={false}\n                  />\n                }\n              />\n              <TokenTableRow\n                label={t('withdrawal_policy')}\n                value={getWithdrawalPolicyText()}\n              />\n            </tbody>\n          </table>\n        </div>\n        <div className=\"details-column\">\n          <table className=\"token-table\">\n            <tbody>\n              <TokenTableRow\n                label={t('asset')}\n                value={\n                  isCurrencyExoticSymbol(asset?.currency) ? (\n                    getCurrencySymbol(asset?.currency)\n                  ) : (\n                    <Currency\n                      currency={\n                        asset?.currency ??\n                        mptTicker ??\n                        asset?.mpt_issuance_id ??\n                        'Unknown Currency Error'\n                      }\n                      link\n                      issuer={asset?.issuer}\n                      isMPT={asset?.mpt_issuance_id !== undefined}\n                      shortenIssuer\n                      hideIssuer\n                    />\n                  )\n                }\n              />\n              <TokenTableRow\n                label={t('total_value_locked')}\n                value={(() => {\n                  const convertedAmount = convertToDisplayCurrency(assetsTotal)\n                  if (\n                    convertedAmount === undefined &&\n                    displayCurrency === 'USD'\n                  ) {\n                    return '--'\n                  }\n                  const amount = convertedAmount ?? assetsTotal\n                  if (amount === undefined) return '--'\n                  if (\n                    ['0', '0.00', '0.0000'].includes(\n                      parseAmount(amount ?? '0', 2),\n                    )\n                  )\n                    return '--'\n                  // Note: As per the NumberFormat policy, prices in the range of [10_000, 1M] do not display decimal values\n                  // Very large prices (greater than 1M must have two decimal places)\n                  const displayedCurrency: string = getDisplayCurrencyLabel()\n                  if (Number(amount) < 1000000 && Number(amount) >= 10000) {\n                    if (\n                      isCurrencyExoticSymbol(asset?.currency) &&\n                      displayedCurrency !== 'USD'\n                    )\n                      return `${getCurrencySymbol(asset?.currency)} ${parseAmount(amount, 0)}`\n                    // All USD denominated amounts are prefixed by `$` symbol\n                    return `${displayedCurrency === 'USD' ? '$' : ''}${parseAmount(amount, 0)} ${displayedCurrency}`\n                  }\n\n                  if (\n                    isCurrencyExoticSymbol(asset?.currency) &&\n                    displayedCurrency !== 'USD'\n                  )\n                    return `${getCurrencySymbol(asset?.currency)} ${parseAmount(amount, 2)}`\n                  return `${displayedCurrency === 'USD' ? '$' : ''}${parseAmount(amount, 2)} ${displayedCurrency}`\n                })()}\n              />\n              <TokenTableRow\n                label={t('max_total_supply')}\n                value={(() => {\n                  if (assetsMaximum === undefined) return t('no_limit')\n\n                  const parsedAmt = parseAmount(assetsMaximum, 2)\n                  if (['0', '0.00', '0.0000'].includes(parsedAmt)) return '--'\n\n                  const displayedCurrency: string = getDisplayCurrencyLabel()\n                  if (\n                    isCurrencyExoticSymbol(asset?.currency) &&\n                    displayedCurrency !== 'USD'\n                  )\n                    return `${getCurrencySymbol(asset?.currency)} ${parsedAmt}`\n                  return `${displayedCurrency === 'USD' ? '$' : ''}${parsedAmt} ${displayedCurrency}`\n                })()}\n              />\n              <TokenTableRow\n                label={t('shares')}\n                value={renderMPTSharesLink()}\n              />\n              <TokenTableRow\n                label={t('available_to_borrow')}\n                value={(() => {\n                  const parsedAmt = parseAmount(assetsAvailable ?? '0', 2)\n                  if (['0', '0.00', '0.0000'].includes(parsedAmt)) return '--'\n\n                  const displayedCurrency: string = getDisplayCurrencyLabel()\n                  if (\n                    isCurrencyExoticSymbol(asset?.currency) &&\n                    displayedCurrency !== 'USD'\n                  )\n                    return `${getCurrencySymbol(asset?.currency)} ${parsedAmt}`\n                  return `${displayedCurrency === 'USD' ? '$' : ''}${parsedAmt} ${displayedCurrency}`\n                })()}\n              />\n              <TokenTableRow\n                label={t('unrealized_loss')}\n                value={(() => {\n                  const parsedAmt = parseAmount(lossUnrealized ?? '0', 2)\n                  if (['0', '0.00', '0.0000'].includes(parsedAmt)) return '--'\n\n                  const displayedCurrency: string = getDisplayCurrencyLabel()\n                  if (\n                    isCurrencyExoticSymbol(asset?.currency) &&\n                    displayedCurrency !== 'USD'\n                  )\n                    return `${getCurrencySymbol(asset?.currency)} ${parsedAmt}`\n                  return `${displayedCurrency === 'USD' ? '$' : ''}${parsedAmt} ${displayedCurrency}`\n                })()}\n              />\n            </tbody>\n          </table>\n        </div>\n      </div>\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/Vault/VaultHeader/styles.scss",
    "content": "@use '../../shared/css/variables' as *;\n@use '../../shared/css/table';\n\n.vault-section {\n  width: 100%;\n  padding: 0 24px;\n\n  @include for-size(desktop-up) {\n    padding: 0 64px;\n  }\n\n  .vault-section-title {\n    margin: 0 0 16px;\n    color: $white;\n    font-size: 24px;\n    @include bold;\n  }\n\n  .vault-section-divider {\n    margin-bottom: 24px;\n    background: $black-70;\n  }\n}\n\n.vault-details-container {\n  display: flex;\n  flex-direction: column;\n  gap: 24px;\n\n  @include for-size(desktop-up) {\n    flex-direction: row;\n    gap: 80px;\n  }\n\n  .details-column {\n    min-width: 0;\n    flex: 1;\n\n    .token-table {\n      margin-top: 0;\n    }\n  }\n}\n\n// Override the MPT-page Metadata styles to fit inside a table row\n.vault-details-container .header-box.metadata-box {\n  width: 100%;\n  max-width: 100%;\n  flex: initial;\n  gap: 0;\n\n  // Strip the outer wrapper — the JsonView container provides its own box\n  .header-box-contents {\n    padding: 0;\n    border: none;\n  }\n\n  .metadata-json {\n    overflow: visible;\n    max-height: none;\n  }\n\n  .json-view-container {\n    padding: 12px;\n    border-radius: 6px;\n  }\n\n  .json-view {\n    margin-bottom: 0;\n\n    @include for-size(phone-only) {\n      padding-top: 0;\n    }\n  }\n\n  // Hide the Expand button — vault data is small enough to show fully\n  .json-view-controls {\n    display: none;\n  }\n\n  .metadata-string {\n    padding: 0;\n    font-size: 13px;\n  }\n}\n\n.private-vault-toggle {\n  display: inline-flex;\n  gap: 8px;\n\n  .toggle-pill {\n    padding: 4px 16px;\n    border: 1px solid $black-50;\n    border-radius: 16px;\n    color: $black-50;\n    font-size: 12px;\n    text-transform: uppercase;\n    @include medium;\n\n    &.active {\n      border-color: $green;\n      background: $green;\n      color: $black;\n    }\n  }\n}\n"
  },
  {
    "path": "src/containers/Vault/VaultHeader/test/VaultHeader.test.tsx",
    "content": "/**\n * VaultHeader Component Unit Tests\n *\n * This test suite validates the VaultHeader component which displays\n * vault information including owner, assets, privacy settings, and\n * various financial metrics.\n *\n * Key concepts tested:\n * - Vault privacy flag (lsfVaultPrivate: 0x00010000)\n * - Asset types: XRP, IOU tokens, and MPTs (Multi-Purpose Tokens)\n * - Compact number formatting (K for thousands, M for millions)\n * - Hex-encoded Data field decoding\n * - Withdrawal policies from XLS-65d spec\n * - Vault credentials (DomainID from MPTokenIssuance)\n */\n\nimport { render, screen, waitFor, cleanup } from '@testing-library/react'\nimport { I18nextProvider } from 'react-i18next'\nimport { BrowserRouter as Router } from 'react-router'\nimport { QueryClientProvider } from 'react-query'\nimport i18n from '../../../../i18n/testConfigEnglish'\nimport SocketContext from '../../../shared/SocketContext'\nimport { VaultHeader } from '../index'\nimport { queryClient } from '../../../shared/QueryClient'\nimport { getMPTIssuance } from '../../../../rippled/lib/rippled'\nimport Mock = jest.Mock\n\n// Mock the rippled library to control API responses\njest.mock('../../../../rippled/lib/rippled')\n\n// Mock the XRP to USD rate hook\nconst mockXRPToUSDRate = jest.fn()\njest.mock('../../../shared/hooks/useXRPToUSDRate', () => ({\n  useXRPToUSDRate: () => mockXRPToUSDRate(),\n}))\n\n// Mock the token to USD rate hook\nconst mockTokenToUSDRate = jest.fn()\njest.mock('../../../shared/hooks/useTokenToUSDRate', () => ({\n  useTokenToUSDRate: (token: any) => {\n    const result = mockTokenToUSDRate(token)\n    // Return object structure if mockTokenToUSDRate returns a number\n    if (typeof result === 'number') {\n      return { rate: result, isAvailable: result > 0, isLoading: false }\n    }\n    // Otherwise return the result as-is (for custom mock implementations)\n    return result\n  },\n}))\n\nconst mockedGetMPTIssuance = getMPTIssuance as Mock\n\n// Mock socket client - represents the WebSocket connection to rippled\nconst mockSocket = {} as any\n\n/**\n * TestWrapper Component\n *\n * Provides all necessary context providers for the VaultHeader component:\n * - I18nextProvider: Internationalization for translated text\n * - Router: React Router for link components\n * - SocketContext: WebSocket connection for rippled queries\n * - QueryClientProvider: React Query for data fetching/caching\n */\nconst TestWrapper = ({ children }: { children: React.ReactNode }) => (\n  <I18nextProvider i18n={i18n}>\n    <Router>\n      <SocketContext.Provider value={mockSocket}>\n        <QueryClientProvider client={queryClient}>\n          {children}\n        </QueryClientProvider>\n      </SocketContext.Provider>\n    </Router>\n  </I18nextProvider>\n)\n\ndescribe('VaultHeader Component', () => {\n  // Reset mocks and clear query cache before each test\n  // This ensures tests are isolated and don't affect each other\n  beforeEach(() => {\n    jest.clearAllMocks()\n    queryClient.clear()\n    cleanup()\n\n    // Default mock: no MPT issuance data (vault credential)\n    mockedGetMPTIssuance.mockResolvedValue({ node: null })\n\n    // Default mock: XRP to USD rate of 2.0 for predictable conversion tests\n    mockXRPToUSDRate.mockReturnValue(2.0)\n\n    // Default mock: Token to USD rate based on asset type\n    // XRP: 2.0 (same as XRP to USD rate)\n    // RLUSD: 1.0 (stablecoin pegged 1:1 to USD)\n    // Other: 0 (no conversion available)\n    mockTokenToUSDRate.mockImplementation((token: any) => {\n      if (!token) return 0\n      if (token.currency === 'XRP') return 2.0\n      if (token.currency === 'RLUSD') return 1.0\n      return 0\n    })\n  })\n\n  /**\n   * =========================================\n   * SECTION 1: Basic Rendering Tests\n   * =========================================\n   * These tests verify the component renders correctly with minimal data\n   */\n  describe('Basic Rendering', () => {\n    it('renders the vault section title', () => {\n      // Minimal vault data required for rendering\n      const vaultData = {\n        Owner: 'rTestOwner123',\n        Asset: { currency: 'XRP' },\n      }\n\n      render(\n        <TestWrapper>\n          <VaultHeader\n            data={vaultData}\n            vaultId=\"ABC123DEF456\"\n            displayCurrency=\"XRP\"\n          />\n        </TestWrapper>,\n      )\n\n      // The component should display \"Vault\" as the section title\n      const title = screen.getByText('Vault')\n      expect(title.tagName).toBe('H2')\n      expect(title).toHaveClass('vault-section-title')\n    })\n\n    it('renders the vault details container', () => {\n      const vaultData = {\n        Owner: 'rTestOwner123',\n        Asset: { currency: 'XRP' },\n      }\n\n      const { container } = render(\n        <TestWrapper>\n          <VaultHeader\n            data={vaultData}\n            vaultId=\"ABC123DEF456\"\n            displayCurrency=\"XRP\"\n          />\n        </TestWrapper>,\n      )\n\n      // Verify the main container structure exists\n      expect(container.querySelector('.vault-section')).toBeInTheDocument()\n      expect(\n        container.querySelector('.vault-details-container'),\n      ).toBeInTheDocument()\n    })\n\n    it('displays the vault ID with truncation', () => {\n      const vaultId = 'ABC123DEF456GHI789JKL012'\n      const vaultData = {\n        Owner: 'rTestOwner123',\n        Asset: { currency: 'XRP' },\n      }\n\n      render(\n        <TestWrapper>\n          <VaultHeader\n            data={vaultData}\n            vaultId={vaultId}\n            displayCurrency=\"XRP\"\n          />\n        </TestWrapper>,\n      )\n\n      // Vault ID should be truncated for display: first 8 chars + \"...\" + last 6 chars\n      // This makes long IDs more readable while still being identifiable\n      const vaultIdLabel = screen.getByText('Vault ID')\n      expect(vaultIdLabel).toBeInTheDocument()\n\n      // Verify the truncated format: ABC123DE...KL012 (8 chars + ... + 6 chars)\n      const expectedTruncated = `${vaultId.substring(0, 8)}...${vaultId.substring(vaultId.length - 6)}`\n      expect(screen.getByText(expectedTruncated)).toBeInTheDocument()\n    })\n\n    it('displays the owner as a clickable account link', () => {\n      const owner = 'rOwnerAccount123456'\n      const vaultData = {\n        Owner: owner,\n        Asset: { currency: 'XRP' },\n      }\n\n      render(\n        <TestWrapper>\n          <VaultHeader\n            data={vaultData}\n            vaultId=\"ABC123\"\n            displayCurrency=\"XRP\"\n          />\n        </TestWrapper>,\n      )\n\n      // Owner label should be present\n      expect(screen.getByText('Owner')).toBeInTheDocument()\n\n      // Owner value should display the exact account address as link text\n      // The Account component displays the full address for short accounts\n      const ownerLink = screen.getByRole('link', {\n        name: `${owner.slice(0, 7)}...${owner.slice(-5)}`,\n      })\n      expect(ownerLink.getAttribute('href')).toBe(`/accounts/${owner}`)\n    })\n  })\n\n  /**\n   * =========================================\n   * SECTION 2: Private Vault Flag Tests\n   * =========================================\n   * Vaults can be public or private, controlled by the lsfVaultPrivate flag (0x00010000)\n   * The UI displays this as YES/NO pill buttons\n   */\n  describe('Private Vault Flag', () => {\n    it('displays YES as active when vault is private (flag = 0x00010000)', () => {\n      // lsfVaultPrivate flag is bit 16 (0x00010000) from XLS-65d spec\n      const vaultData = {\n        Owner: 'rTestOwner',\n        Asset: { currency: 'XRP' },\n        Flags: 0x00010000, // Private vault\n      }\n\n      const { container } = render(\n        <TestWrapper>\n          <VaultHeader\n            data={vaultData}\n            vaultId=\"ABC123\"\n            displayCurrency=\"XRP\"\n          />\n        </TestWrapper>,\n      )\n\n      // Verify the \"Private Vault\" label exists\n      expect(screen.getByText('Private Vault')).toBeInTheDocument()\n\n      // Find the toggle pills\n      const togglePills = container.querySelectorAll('.toggle-pill')\n      expect(togglePills.length).toBe(2)\n\n      // YES pill should be active for private vault, with exact text\n      const yesPill = togglePills[0]\n      const noPill = togglePills[1]\n      expect(yesPill.textContent).toBe('Yes')\n      expect(noPill.textContent).toBe('No')\n      expect(yesPill).toHaveClass('active')\n      expect(noPill).not.toHaveClass('active')\n    })\n\n    it('displays NO as active when vault is public (flag = 0)', () => {\n      const vaultData = {\n        Owner: 'rTestOwner',\n        Asset: { currency: 'XRP' },\n        Flags: 0, // Public vault (no flags set)\n      }\n\n      const { container } = render(\n        <TestWrapper>\n          <VaultHeader\n            data={vaultData}\n            vaultId=\"ABC123\"\n            displayCurrency=\"XRP\"\n          />\n        </TestWrapper>,\n      )\n\n      const togglePills = container.querySelectorAll('.toggle-pill')\n\n      // NO pill should be active for public vault\n      const yesPill = togglePills[0]\n      const noPill = togglePills[1]\n      expect(yesPill).not.toHaveClass('active')\n      expect(noPill).toHaveClass('active')\n    })\n\n    it('displays NO as active when Flags is undefined', () => {\n      // When Flags field is missing, vault is treated as public\n      const vaultData = {\n        Owner: 'rTestOwner',\n        Asset: { currency: 'XRP' },\n        // Flags is intentionally omitted\n      }\n\n      const { container } = render(\n        <TestWrapper>\n          <VaultHeader\n            data={vaultData}\n            vaultId=\"ABC123\"\n            displayCurrency=\"XRP\"\n          />\n        </TestWrapper>,\n      )\n\n      const togglePills = container.querySelectorAll('.toggle-pill')\n      const noPill = togglePills[1]\n      expect(noPill).toHaveClass('active')\n    })\n\n    it('correctly identifies private flag when combined with other flags', () => {\n      // Flags can have multiple bits set; we need bitwise AND to check lsfVaultPrivate\n      const vaultData = {\n        Owner: 'rTestOwner',\n        Asset: { currency: 'XRP' },\n        Flags: 0x00010001, // Private flag (0x00010000) + another flag (0x00000001)\n      }\n\n      const { container } = render(\n        <TestWrapper>\n          <VaultHeader\n            data={vaultData}\n            vaultId=\"ABC123\"\n            displayCurrency=\"XRP\"\n          />\n        </TestWrapper>,\n      )\n\n      const togglePills = container.querySelectorAll('.toggle-pill')\n      const yesPill = togglePills[0]\n      expect(yesPill).toHaveClass('active')\n    })\n  })\n\n  /**\n   * =========================================\n   * SECTION 3: Asset Type Display Tests\n   * =========================================\n   * Vaults can hold different asset types:\n   * - XRP (native currency)\n   * - IOU tokens (issued currencies like RLUSD)\n   * - MPTs (Multi-Purpose Tokens identified by mpt_issuance_id)\n   */\n  describe('Asset Type Display', () => {\n    it('displays XRP for native currency vaults', () => {\n      const vaultData = {\n        Owner: 'rTestOwner',\n        Asset: { currency: 'XRP' },\n      }\n\n      render(\n        <TestWrapper>\n          <VaultHeader\n            data={vaultData}\n            vaultId=\"ABC123\"\n            displayCurrency=\"XRP\"\n          />\n        </TestWrapper>,\n      )\n\n      // Verify exact label and value\n      expect(screen.getByText('Asset')).toBeInTheDocument()\n      expect(screen.getByText('\\uE900')).toBeInTheDocument()\n    })\n\n    it('displays currency code for IOU token vaults', () => {\n      // IOU tokens have a currency code and issuer\n      const vaultData = {\n        Owner: 'rTestOwner',\n        Asset: {\n          currency: 'USD',\n          issuer: 'rIssuerAccount123',\n        },\n      }\n\n      render(\n        <TestWrapper>\n          <VaultHeader\n            data={vaultData}\n            vaultId=\"ABC123\"\n            displayCurrency=\"XRP\"\n          />\n        </TestWrapper>,\n      )\n\n      // Verify the exact currency code is displayed and issuer is hidden\n      const currencyEl = screen.getByTestId('currency')\n      expect(currencyEl).toHaveTextContent('USD')\n      expect(currencyEl).not.toHaveTextContent('rIssuerAccount123')\n    })\n\n    it('displays truncated MPT ID as a link for MPT vaults', () => {\n      // MPTs are identified by a hex ID and should link to the MPT details page\n      const mptId = '00001234ABCD5678EF90ABCDEF1234567890ABCDEF'\n      const vaultData = {\n        Owner: 'rTestOwner',\n        Asset: {\n          mpt_issuance_id: mptId,\n        },\n      }\n\n      render(\n        <TestWrapper>\n          <VaultHeader\n            data={vaultData}\n            vaultId=\"ABC123\"\n            displayCurrency=\"XRP\"\n          />\n        </TestWrapper>,\n      )\n\n      // Should be a link to the MPT page with exact truncated text\n      const mptLink = screen.getByRole('link', { name: `${mptId}` })\n      expect(mptLink.getAttribute('href')).toBe(`/mpt/${mptId}`)\n    })\n\n    it('displays dash when asset is undefined', () => {\n      const vaultData = {\n        Owner: 'rTestOwner',\n        // Asset is intentionally omitted\n      }\n\n      render(\n        <TestWrapper>\n          <VaultHeader\n            data={vaultData}\n            vaultId=\"ABC123\"\n            displayCurrency=\"XRP\"\n          />\n        </TestWrapper>,\n      )\n\n      // Should display \"-\" as fallback\n      const assetRow = screen.getByText('Asset').closest('tr')\n      expect(assetRow).toHaveTextContent('AssetUnknown Currency Error')\n    })\n  })\n\n  /**\n   * =========================================\n   * SECTION 4: Compact Number Formatting Tests\n   * =========================================\n   * Large numbers are formatted with K (thousands) and M (millions) suffixes\n   * for better readability. Examples:\n   * - 1,500,000 -> \"1.5M\"\n   * - 250,000 -> \"250K\"\n   * - 500 -> \"500\"\n   */\n  describe('Compact Number Formatting', () => {\n    it('formats millions with M suffix', () => {\n      const vaultData = {\n        Owner: 'rTestOwner',\n        Asset: { currency: 'XRP' },\n        AssetsTotal: '12500000', // 12.5 million\n        AssetsAvailable: '5000000', // 5 million\n      }\n\n      render(\n        <TestWrapper>\n          <VaultHeader\n            data={vaultData}\n            vaultId=\"ABC123\"\n            displayCurrency=\"XRP\"\n          />\n        </TestWrapper>,\n      )\n\n      // Numbers >= 1,000,000 should display with M suffix\n      // Verify exact formatted values: 12,500,000 -> \"12.5M XRP\", 5,000,000 -> \"5M XRP\"\n      expect(screen.getByText('\\uE900 12.50M')).toBeInTheDocument()\n      expect(screen.getByText('\\uE900 5.00M')).toBeInTheDocument()\n    })\n\n    it('formats thousands with K suffix', () => {\n      const vaultData = {\n        Owner: 'rTestOwner',\n        Asset: { currency: 'XRP' },\n        AssetsAvailable: '250000', // 250 thousand\n        LossUnrealized: '75000', // 75 thousand\n      }\n\n      render(\n        <TestWrapper>\n          <VaultHeader\n            data={vaultData}\n            vaultId=\"ABC123\"\n            displayCurrency=\"XRP\"\n          />\n        </TestWrapper>,\n      )\n\n      // Numbers >= 1,000 but < 1,000,000 should display with K suffix\n      // Verify exact formatted values: 250,000 -> \"250K XRP\", 75,000 -> \"75K XRP\"\n      expect(screen.getByText('\\uE900 250.00K')).toBeInTheDocument()\n      expect(screen.getByText('\\uE900 75.00K')).toBeInTheDocument()\n    })\n\n    it('displays small numbers without suffix', () => {\n      const vaultData = {\n        Owner: 'rTestOwner',\n        Asset: { currency: 'XRP' },\n        AssetsAvailable: '500', // Less than 1000\n      }\n\n      render(\n        <TestWrapper>\n          <VaultHeader\n            data={vaultData}\n            vaultId=\"ABC123\"\n            displayCurrency=\"XRP\"\n          />\n        </TestWrapper>,\n      )\n\n      // Numbers < 1,000 should display as-is without K/M suffix\n      // Verify exact formatted value: 500 -> \"500 XRP\"\n      expect(screen.getByText('\\uE900 500.00')).toBeInTheDocument()\n    })\n\n    it('includes currency code in formatted amounts', () => {\n      const vaultData = {\n        Owner: 'rTestOwner',\n        Asset: { currency: 'RLUSD' },\n        AssetsAvailable: '1000000',\n      }\n\n      render(\n        <TestWrapper>\n          <VaultHeader\n            data={vaultData}\n            vaultId=\"ABC123\"\n            displayCurrency=\"XRP\"\n          />\n        </TestWrapper>,\n      )\n\n      // Amount should include the currency code\n      // Verify exact formatted value: 1,000,000 RLUSD -> \"1M RLUSD\"\n      expect(screen.getByText('1.00M RLUSD')).toBeInTheDocument()\n    })\n\n    it('displays dash for undefined amounts', () => {\n      const vaultData = {\n        Owner: 'rTestOwner',\n        Asset: { currency: 'XRP' },\n        // AssetsAvailable is intentionally omitted\n      }\n\n      render(\n        <TestWrapper>\n          <VaultHeader\n            data={vaultData}\n            vaultId=\"ABC123\"\n            displayCurrency=\"XRP\"\n          />\n        </TestWrapper>,\n      )\n\n      // Undefined amounts should display as \"0\"\n      const availableRow = screen.getByText('Available to Borrow').closest('tr')\n      expect(availableRow).toHaveTextContent('Available to Borrow--')\n    })\n  })\n\n  /**\n   * =========================================\n   * SECTION 5: Data Field Decoding Tests\n   * =========================================\n   * The vault's Data field can contain hex-encoded UTF-8 text\n   * (e.g., vault name or description). The component should\n   * decode and display it properly.\n   */\n  describe('Data Field Decoding', () => {\n    it('decodes hex-encoded Data field to UTF-8', () => {\n      // \"Hello Vault\" encoded as hex: 48656c6c6f205661756c74\n      const originalText = 'Hello Vault'\n      const hexData = '48656c6c6f205661756c74' // Buffer.from('Hello Vault').toString('hex')\n      const vaultData = {\n        Owner: 'rTestOwner',\n        Asset: { currency: 'XRP' },\n        Data: hexData,\n      }\n\n      render(\n        <TestWrapper>\n          <VaultHeader\n            data={vaultData}\n            vaultId=\"ABC123\"\n            displayCurrency=\"XRP\"\n          />\n        </TestWrapper>,\n      )\n\n      // The decoded text should be displayed with exact match\n      expect(screen.getByText(originalText)).toBeInTheDocument()\n    })\n\n    it('displays raw Data if not valid hex', () => {\n      // Data that is not valid hex should be displayed as-is\n      const rawData = 'NotHexData!'\n      const vaultData = {\n        Owner: 'rTestOwner',\n        Asset: { currency: 'XRP' },\n        Data: rawData,\n      }\n\n      expect(() =>\n        render(\n          <TestWrapper>\n            <VaultHeader\n              data={vaultData}\n              vaultId=\"ABC123\"\n              displayCurrency=\"XRP\"\n            />\n          </TestWrapper>,\n        ),\n      ).toThrow('Invalid hex string')\n    })\n\n    it('displays dash when Data is undefined', () => {\n      const vaultData = {\n        Owner: 'rTestOwner',\n        Asset: { currency: 'XRP' },\n        // Data is intentionally omitted\n      }\n\n      render(\n        <TestWrapper>\n          <VaultHeader\n            data={vaultData}\n            vaultId=\"ABC123\"\n            displayCurrency=\"XRP\"\n          />\n        </TestWrapper>,\n      )\n\n      const dataRow = screen.getByText('Data').closest('tr')\n      expect(dataRow).toHaveTextContent('-')\n    })\n  })\n\n  /**\n   * =========================================\n   * SECTION 5b: Website Display Tests\n   * =========================================\n   * The vault's Data field can contain JSON with a \"w\" (website) field.\n   * When present, the website should be displayed as a clickable link.\n   */\n  describe('Website Display', () => {\n    it('displays website link when Data contains valid JSON with \"w\" key', () => {\n      // {\"n\":\"Test Vault\",\"w\":\"example.com\"} encoded as hex\n      const jsonData = JSON.stringify({ n: 'Test Vault', w: 'example.com' })\n      const hexData = Buffer.from(jsonData).toString('hex')\n      const vaultData = {\n        Owner: 'rTestOwner',\n        Asset: { currency: 'XRP' },\n        Data: hexData,\n      }\n\n      render(\n        <TestWrapper>\n          <VaultHeader\n            data={vaultData}\n            vaultId=\"ABC123\"\n            displayCurrency=\"XRP\"\n          />\n        </TestWrapper>,\n      )\n\n      // Website label and link should be displayed\n      expect(screen.getByText('Website')).toBeInTheDocument()\n      const websiteLink = screen.getByRole('link', { name: 'example.com' })\n      expect(websiteLink).toHaveAttribute('href', 'https://example.com')\n      expect(websiteLink).toHaveAttribute('target', '_blank')\n    })\n\n    it('does not display website row when Data is valid JSON but missing \"w\" key', () => {\n      // {\"n\":\"Test Vault\"} encoded as hex (no website field)\n      const jsonData = JSON.stringify({ n: 'Test Vault' })\n      const hexData = Buffer.from(jsonData).toString('hex')\n      const vaultData = {\n        Owner: 'rTestOwner',\n        Asset: { currency: 'XRP' },\n        Data: hexData,\n      }\n\n      render(\n        <TestWrapper>\n          <VaultHeader\n            data={vaultData}\n            vaultId=\"ABC123\"\n            displayCurrency=\"XRP\"\n          />\n        </TestWrapper>,\n      )\n\n      // Website row should not be present\n      expect(screen.queryByText('Website')).not.toBeInTheDocument()\n    })\n\n    it('does not display website row when Data is not valid JSON', () => {\n      // \"Hello Vault\" encoded as hex (plain text, not JSON)\n      const hexData = Buffer.from('Hello Vault').toString('hex')\n      const vaultData = {\n        Owner: 'rTestOwner',\n        Asset: { currency: 'XRP' },\n        Data: hexData,\n      }\n\n      render(\n        <TestWrapper>\n          <VaultHeader\n            data={vaultData}\n            vaultId=\"ABC123\"\n            displayCurrency=\"XRP\"\n          />\n        </TestWrapper>,\n      )\n\n      // Website row should not be present\n      expect(screen.queryByText('Website')).not.toBeInTheDocument()\n    })\n  })\n\n  /**\n   * =========================================\n   * SECTION 6: Withdrawal Policy Tests\n   * =========================================\n   * Withdrawal policies define how depositors can withdraw funds.\n   * Currently supported: 1 = \"First Come, First Served\" (from XLS-65d spec)\n   */\n  describe('Withdrawal Policy Display', () => {\n    it('displays \"First Come First Served\" for policy 1', () => {\n      const vaultData = {\n        Owner: 'rTestOwner',\n        Asset: { currency: 'XRP' },\n        WithdrawalPolicy: 1,\n      }\n\n      render(\n        <TestWrapper>\n          <VaultHeader\n            data={vaultData}\n            vaultId=\"ABC123\"\n            displayCurrency=\"XRP\"\n          />\n        </TestWrapper>,\n      )\n\n      expect(screen.getByText('Withdrawal Policy')).toBeInTheDocument()\n      expect(screen.getByText('First Come First Served')).toBeInTheDocument()\n    })\n\n    it('displays numeric value for unknown policy codes', () => {\n      // Unknown policy codes should display the raw number\n      const vaultData = {\n        Owner: 'rTestOwner',\n        Asset: { currency: 'XRP' },\n        WithdrawalPolicy: 99, // Unknown policy\n      }\n\n      render(\n        <TestWrapper>\n          <VaultHeader\n            data={vaultData}\n            vaultId=\"ABC123\"\n            displayCurrency=\"XRP\"\n          />\n        </TestWrapper>,\n      )\n\n      const policyRow = screen.getByText('Withdrawal Policy').closest('tr')\n      expect(policyRow).toHaveTextContent('99')\n    })\n\n    it('displays dash when WithdrawalPolicy is undefined', () => {\n      const vaultData = {\n        Owner: 'rTestOwner',\n        Asset: { currency: 'XRP' },\n        // WithdrawalPolicy is intentionally omitted\n      }\n\n      render(\n        <TestWrapper>\n          <VaultHeader\n            data={vaultData}\n            vaultId=\"ABC123\"\n            displayCurrency=\"XRP\"\n          />\n        </TestWrapper>,\n      )\n\n      const policyRow = screen.getByText('Withdrawal Policy').closest('tr')\n      expect(policyRow).toHaveTextContent('-')\n    })\n  })\n\n  /**\n   * =========================================\n   * SECTION 7: Vault Credential (DomainID) Tests\n   * =========================================\n   * Private vaults may have a credential (DomainID) fetched from\n   * the MPTokenIssuance ledger object associated with ShareMPTID.\n   * This requires an async query to the ledger.\n   */\n  describe('Vault Credential Display', () => {\n    it('displays vault credential when DomainID is present', async () => {\n      const domainId = 'credential123abc'\n      mockedGetMPTIssuance.mockResolvedValue({\n        node: { DomainID: domainId },\n      })\n\n      const vaultData = {\n        Account: 'rTestAccount',\n        Asset: { currency: 'XRP' },\n        ShareMPTID: 'shareMptId123',\n      }\n\n      render(\n        <TestWrapper>\n          <VaultHeader\n            data={vaultData}\n            vaultId=\"ABC123\"\n            displayCurrency=\"XRP\"\n          />\n        </TestWrapper>,\n      )\n\n      // Wait for async query to complete and verify exact DomainID value\n      await waitFor(() => {\n        expect(screen.getByText('Permissioned Domain ID')).toBeInTheDocument()\n        expect(screen.getByText(domainId)).toBeInTheDocument()\n      })\n    })\n\n    it('does not display credential row when DomainID is absent', async () => {\n      mockedGetMPTIssuance.mockResolvedValue({\n        node: {}, // No DomainID\n      })\n\n      const vaultData = {\n        Owner: 'rTestOwner',\n        Asset: { currency: 'XRP' },\n        ShareMPTID: 'shareMptId123',\n      }\n\n      render(\n        <TestWrapper>\n          <VaultHeader\n            data={vaultData}\n            vaultId=\"ABC123\"\n            displayCurrency=\"XRP\"\n          />\n        </TestWrapper>,\n      )\n\n      // The credential row should not appear\n      await waitFor(() => {\n        expect(\n          screen.queryByText('Permissioned Domain ID'),\n        ).not.toBeInTheDocument()\n      })\n    })\n\n    it('does not fetch credential when ShareMPTID is missing', () => {\n      const vaultData = {\n        Owner: 'rTestOwner',\n        Asset: { currency: 'XRP' },\n        // ShareMPTID is intentionally omitted\n      }\n\n      render(\n        <TestWrapper>\n          <VaultHeader\n            data={vaultData}\n            vaultId=\"ABC123\"\n            displayCurrency=\"XRP\"\n          />\n        </TestWrapper>,\n      )\n\n      // getMPTIssuance should not be called without ShareMPTID\n      expect(mockedGetMPTIssuance).not.toHaveBeenCalled()\n    })\n  })\n\n  /**\n   * =========================================\n   * SECTION 7b: MPT Asset Ticker from Metadata Tests\n   * =========================================\n   * When the vault asset is an MPT, the component fetches the MPTokenIssuance\n   * to extract XLS-89 metadata. If a ticker is present, it should be displayed\n   * instead of the raw MPT ID.\n   */\n  describe('MPT Asset Ticker from Metadata', () => {\n    it('displays ticker from MPT metadata instead of MPT ID', async () => {\n      const mptId = '00001234ABCD5678EF90ABCDEF1234567890ABCDEF'\n      const mptMetadata = { ticker: 'VTKN', name: 'Vault Token' }\n      const mptMetadataHex = Buffer.from(JSON.stringify(mptMetadata))\n        .toString('hex')\n        .toUpperCase()\n\n      mockedGetMPTIssuance.mockResolvedValue({\n        node: { MPTokenMetadata: mptMetadataHex },\n      })\n\n      const vaultData = {\n        Owner: 'rTestOwner',\n        Asset: { mpt_issuance_id: mptId },\n      }\n\n      render(\n        <TestWrapper>\n          <VaultHeader\n            data={vaultData}\n            vaultId=\"ABC123\"\n            displayCurrency=\"XRP\"\n          />\n        </TestWrapper>,\n      )\n\n      // After metadata loads, ticker \"VTKN\" should appear in the Asset row\n      await waitFor(() => {\n        const assetRow = screen.getByText('Asset').closest('tr')\n        expect(assetRow).toHaveTextContent('VTKN')\n      })\n    })\n\n    it('displays ticker from compact metadata form', async () => {\n      const mptId = '00001234ABCD5678EF90ABCDEF1234567890ABCDEF'\n      // Compact form uses \"t\" for ticker\n      const mptMetadata = { t: 'USD', n: 'US Dollar Token' }\n      const mptMetadataHex = Buffer.from(JSON.stringify(mptMetadata))\n        .toString('hex')\n        .toUpperCase()\n\n      mockedGetMPTIssuance.mockResolvedValue({\n        node: { MPTokenMetadata: mptMetadataHex },\n      })\n\n      const vaultData = {\n        Owner: 'rTestOwner',\n        Asset: { mpt_issuance_id: mptId },\n      }\n\n      render(\n        <TestWrapper>\n          <VaultHeader\n            data={vaultData}\n            vaultId=\"ABC123\"\n            displayCurrency=\"XRP\"\n          />\n        </TestWrapper>,\n      )\n\n      await waitFor(() => {\n        const assetRow = screen.getByText('Asset').closest('tr')\n        expect(assetRow).toHaveTextContent('USD')\n      })\n    })\n\n    it('falls back to MPT ID when metadata has no ticker', async () => {\n      const mptId = '00001234ABCD5678EF90ABCDEF1234567890ABCDEF'\n      // Metadata without ticker field\n      const mptMetadata = { name: 'Some Token' }\n      const mptMetadataHex = Buffer.from(JSON.stringify(mptMetadata))\n        .toString('hex')\n        .toUpperCase()\n\n      mockedGetMPTIssuance.mockResolvedValue({\n        node: { MPTokenMetadata: mptMetadataHex },\n      })\n\n      const vaultData = {\n        Owner: 'rTestOwner',\n        Asset: { mpt_issuance_id: mptId },\n      }\n\n      render(\n        <TestWrapper>\n          <VaultHeader\n            data={vaultData}\n            vaultId=\"ABC123\"\n            displayCurrency=\"XRP\"\n          />\n        </TestWrapper>,\n      )\n\n      // Should fall back to showing the MPT ID\n      await waitFor(() => {\n        const mptLink = screen.getByRole('link', { name: `${mptId}` })\n        expect(mptLink).toBeInTheDocument()\n      })\n    })\n\n    it('falls back to MPT ID when no MPTokenMetadata field exists', async () => {\n      const mptId = '00001234ABCD5678EF90ABCDEF1234567890ABCDEF'\n\n      mockedGetMPTIssuance.mockResolvedValue({\n        node: {}, // No MPTokenMetadata\n      })\n\n      const vaultData = {\n        Owner: 'rTestOwner',\n        Asset: { mpt_issuance_id: mptId },\n      }\n\n      render(\n        <TestWrapper>\n          <VaultHeader\n            data={vaultData}\n            vaultId=\"ABC123\"\n            displayCurrency=\"XRP\"\n          />\n        </TestWrapper>,\n      )\n\n      await waitFor(() => {\n        const mptLink = screen.getByRole('link', { name: `${mptId}` })\n        expect(mptLink).toBeInTheDocument()\n      })\n    })\n\n    it('uses ticker in currency label for amount displays', async () => {\n      const mptId = '00001234ABCD5678EF90ABCDEF1234567890ABCDEF'\n      const mptMetadata = {\n        ticker: 'VTKN',\n        name: 'Vault Token',\n        asset_class: 'defi',\n        issuer_name: 'Test Issuer',\n      }\n      const mptMetadataHex = Buffer.from(JSON.stringify(mptMetadata))\n        .toString('hex')\n        .toUpperCase()\n\n      mockedGetMPTIssuance.mockResolvedValue({\n        node: { MPTokenMetadata: mptMetadataHex },\n      })\n\n      const vaultData = {\n        Owner: 'rTestOwner',\n        Asset: { mpt_issuance_id: mptId },\n        AssetsAvailable: '5000',\n      }\n\n      render(\n        <TestWrapper>\n          <VaultHeader\n            data={vaultData}\n            vaultId=\"ABC123\"\n            displayCurrency=\"XRP\"\n          />\n        </TestWrapper>,\n      )\n\n      // The ticker should appear as the currency label in amount fields\n      await waitFor(() => {\n        expect(screen.getByText('5,000.00 VTKN')).toBeInTheDocument()\n      })\n    })\n  })\n\n  /**\n   * =========================================\n   * SECTION 8: Shares (MPT) Link Tests\n   * =========================================\n   * Vault shares are represented as MPTs. The ShareMPTID should\n   * link to the MPT details page with a truncated display.\n   */\n  describe('Shares Link Display', () => {\n    it('displays truncated ShareMPTID as a link', () => {\n      const shareMptId = 'SHARE1234567890ABCDEF1234567890ABCDEF12'\n      const vaultData = {\n        Owner: 'rTestOwner',\n        Asset: { currency: 'XRP' },\n        ShareMPTID: shareMptId,\n      }\n\n      render(\n        <TestWrapper>\n          <VaultHeader\n            data={vaultData}\n            vaultId=\"ABC123\"\n            displayCurrency=\"XRP\"\n          />\n        </TestWrapper>,\n      )\n\n      // Verify link is present and href is correct\n      const sharesLink = screen.getByRole('link', {\n        name: shareMptId,\n      })\n      expect(sharesLink.getAttribute('href')).toBe(`/mpt/${shareMptId}`)\n    })\n\n    it('displays dash when ShareMPTID is missing', () => {\n      const vaultData = {\n        Owner: 'rTestOwner',\n        Asset: { currency: 'XRP' },\n        // ShareMPTID is intentionally omitted\n      }\n\n      render(\n        <TestWrapper>\n          <VaultHeader\n            data={vaultData}\n            vaultId=\"ABC123\"\n            displayCurrency=\"XRP\"\n          />\n        </TestWrapper>,\n      )\n\n      const sharesRow = screen.getByText('Shares').closest('tr')\n      expect(sharesRow).toHaveTextContent('-')\n    })\n  })\n\n  /**\n   * =========================================\n   * SECTION 9: Maximum Assets / No Limit Tests\n   * =========================================\n   * Vaults can have a maximum asset cap or be unlimited.\n   * When AssetsMaximum is not set, \"No limit\" should be displayed.\n   */\n  describe('Maximum Assets Display', () => {\n    it('displays formatted amount when AssetsMaximum is set', () => {\n      const vaultData = {\n        Owner: 'rTestOwner',\n        Asset: { currency: 'XRP' },\n        AssetsMaximum: '10000000', // 10 million\n      }\n\n      render(\n        <TestWrapper>\n          <VaultHeader\n            data={vaultData}\n            vaultId=\"ABC123\"\n            displayCurrency=\"XRP\"\n          />\n        </TestWrapper>,\n      )\n\n      expect(screen.getByText('Max Total Supply')).toBeInTheDocument()\n      expect(screen.getByText(/\\uE900 10.00M/)).toBeInTheDocument()\n    })\n\n    it('displays \"No Limit\" when AssetsMaximum is not set', () => {\n      const vaultData = {\n        Owner: 'rTestOwner',\n        Asset: { currency: 'XRP' },\n        // AssetsMaximum is intentionally omitted\n      }\n\n      render(\n        <TestWrapper>\n          <VaultHeader\n            data={vaultData}\n            vaultId=\"ABC123\"\n            displayCurrency=\"XRP\"\n          />\n        </TestWrapper>,\n      )\n\n      expect(screen.getByText('No Limit')).toBeInTheDocument()\n    })\n  })\n\n  /**\n   * =========================================\n   * SECTION 10: Total Value Locked (TVL) Tests\n   * =========================================\n   * TVL is only displayed for supported currencies (XRP, RLUSD).\n   * For other currencies, it shows \"--\" as the value may not\n   * be reliably calculable.\n   */\n  describe('Total Value Locked Display', () => {\n    it('displays TVL for XRP vaults', () => {\n      const vaultData = {\n        Owner: 'rTestOwner',\n        Asset: { currency: 'XRP' },\n        AssetsTotal: '5000000',\n      }\n\n      render(\n        <TestWrapper>\n          <VaultHeader\n            data={vaultData}\n            vaultId=\"ABC123\"\n            displayCurrency=\"XRP\"\n          />\n        </TestWrapper>,\n      )\n\n      expect(screen.getByText('Total Value Locked (TVL)')).toBeInTheDocument()\n      // Verify exact TVL value: 5,000,000 -> \"5M XRP\"\n      expect(screen.getByText('\\uE900 5.00M')).toBeInTheDocument()\n    })\n\n    it('displays TVL for RLUSD vaults', () => {\n      const vaultData = {\n        Owner: 'rTestOwner',\n        Asset: { currency: 'RLUSD' },\n        AssetsTotal: '2500000',\n      }\n\n      render(\n        <TestWrapper>\n          <VaultHeader\n            data={vaultData}\n            vaultId=\"ABC123\"\n            displayCurrency=\"XRP\"\n          />\n        </TestWrapper>,\n      )\n\n      // Verify exact TVL value: 2,500,000 -> \"2.50M RLUSD\"\n      expect(screen.getByText('2.50M RLUSD')).toBeInTheDocument()\n    })\n\n    it('displays TVL in native currency for unsupported currencies', () => {\n      // TVL is shown in native currency even for arbitrary currencies\n      // when displayCurrency is 'native' (native mode)\n      const vaultData = {\n        Owner: 'rTestOwner',\n        Asset: { currency: 'UNKNOWN' },\n        AssetsTotal: '1000000',\n      }\n\n      render(\n        <TestWrapper>\n          <VaultHeader\n            data={vaultData}\n            vaultId=\"ABC123\"\n            displayCurrency=\"XRP\"\n          />\n        </TestWrapper>,\n      )\n\n      // In native mode, TVL is shown in the asset's currency\n      expect(screen.getByText('1.00M UNKNOWN')).toBeInTheDocument()\n    })\n  })\n\n  /**\n   * =========================================\n   * SECTION 11: Edge Cases and Error Handling\n   * =========================================\n   * Tests for unusual inputs and boundary conditions\n   */\n  describe('Edge Cases', () => {\n    it('handles empty vault data gracefully', () => {\n      const vaultData = {}\n\n      render(\n        <TestWrapper>\n          <VaultHeader\n            data={vaultData}\n            vaultId=\"ABC123\"\n            displayCurrency=\"XRP\"\n          />\n        </TestWrapper>,\n      )\n\n      // Component should render without crashing\n      expect(screen.getByText('Vault')).toBeInTheDocument()\n    })\n\n    it('handles very long vault IDs', () => {\n      const longVaultId = 'A'.repeat(100)\n      const vaultData = {\n        Owner: 'rTestOwner',\n        Asset: { currency: 'XRP' },\n      }\n\n      render(\n        <TestWrapper>\n          <VaultHeader\n            data={vaultData}\n            vaultId={longVaultId}\n            displayCurrency=\"XRP\"\n          />\n        </TestWrapper>,\n      )\n\n      // Should truncate without errors\n      expect(screen.getByText('Vault ID')).toBeInTheDocument()\n    })\n  })\n\n  /**\n   * =========================================\n   * SECTION 12: Currency Toggle Conversion Tests\n   * =========================================\n   * Tests that verify TVL conversion between native currency and USD\n   * when the user toggles the currency display option.\n   *\n   * Conversion rules:\n   * - XRP: Multiply by XRP/USD exchange rate\n   * - RLUSD: 1:1 with USD (stablecoin)\n   * - Other currencies: Show \"--\" (no conversion available)\n   */\n  describe('Currency Toggle Conversion', () => {\n    it('converts XRP TVL to USD using exchange rate when displayCurrency is \"usd\"', () => {\n      // Mock XRP/USD rate of 2.5\n      mockXRPToUSDRate.mockReturnValue(2.5)\n      mockTokenToUSDRate.mockImplementation((token: any) => {\n        if (token?.currency === 'XRP') return 2.5\n        return 0\n      })\n\n      const vaultData = {\n        Owner: 'rTestOwner',\n        Asset: { currency: 'XRP' },\n        AssetsTotal: '1000000', // 1 million XRP\n      }\n\n      render(\n        <TestWrapper>\n          <VaultHeader\n            data={vaultData}\n            vaultId=\"ABC123\"\n            displayCurrency=\"USD\"\n          />\n        </TestWrapper>,\n      )\n\n      // 1,000,000 XRP * 2.5 = 2,500,000 USD = \"2.50M USD\"\n      // formatAmount joins [prefix, formattedNum, currency] with spaces\n      expect(screen.getByText('$2.50M USD')).toBeInTheDocument()\n    })\n\n    it('displays RLUSD TVL as USD with 1:1 conversion when displayCurrency is \"usd\"', () => {\n      const vaultData = {\n        Owner: 'rTestOwner',\n        Asset: { currency: 'RLUSD' },\n        AssetsTotal: '5000000', // 5 million RLUSD\n      }\n\n      render(\n        <TestWrapper>\n          <VaultHeader\n            data={vaultData}\n            vaultId=\"ABC123\"\n            displayCurrency=\"USD\"\n          />\n        </TestWrapper>,\n      )\n\n      // RLUSD is a stablecoin pegged 1:1 to USD\n      // 5,000,000 RLUSD = \"5.00M USD\"\n      expect(screen.getByText('$5.00M USD')).toBeInTheDocument()\n    })\n\n    it('convert native currency EUR into USD displayed currency', () => {\n      const vaultData = {\n        Owner: 'rTestOwner',\n        Asset: { currency: 'EUR', issuer: 'rIssuerAccount123' },\n        AssetsTotal: '1000000', // 1 million EUR\n      }\n\n      mockTokenToUSDRate.mockImplementation((token: any) => {\n        if (token?.currency === 'EUR') return 2\n        return 0\n      })\n\n      render(\n        <TestWrapper>\n          <VaultHeader\n            data={vaultData}\n            vaultId=\"ABC123\"\n            displayCurrency=\"USD\"\n          />\n        </TestWrapper>,\n      )\n\n      const tvlRow = screen.getByText('Total Value Locked (TVL)').closest('tr')\n      expect(tvlRow).toHaveTextContent('Total Value Locked (TVL)$2.00M USD')\n    })\n  })\n})\n"
  },
  {
    "path": "src/containers/Vault/VaultLoans/BrokerDetails.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { CopyableText } from '../../shared/components/CopyableText/CopyableText'\nimport { useTokenToUSDRate } from '../../shared/hooks/useTokenToUSDRate'\nimport { formatRate, LSF_LOAN_DEFAULT } from './utils'\nimport { BrokerLoansTable } from './BrokerLoansTable'\nimport WarningIcon from '../../shared/images/warning.svg'\nimport { parseAmount } from '../../shared/NumberFormattingUtils'\nimport {\n  shortenMPTID,\n  getCurrencySymbol,\n  isCurrencyExoticSymbol,\n} from '../../shared/utils'\n\n// TODO: Use types from xrpl.js instead of hand-writing it.\ninterface LoanBrokerData {\n  index: string\n  Account: string\n  Data?: string\n  ManagementFeeRate?: number\n  CoverAvailable?: string\n  CoverRateMinimum?: number\n  CoverRateLiquidation?: number\n  DebtTotal?: string\n  DebtMaximum?: string\n}\n\ninterface AssetInfo {\n  currency: string\n  issuer?: string\n  mpt_issuance_id?: string\n}\n\ninterface Props {\n  broker: LoanBrokerData\n  displayCurrency: string\n  asset?: AssetInfo\n  loans?: any[]\n  mptTicker?: string\n}\n\nexport const BrokerDetails = ({\n  broker,\n  displayCurrency,\n  asset,\n  loans,\n  mptTicker,\n}: Props) => {\n  const { t } = useTranslation()\n  const { rate: tokenToUsdRate } = useTokenToUSDRate(asset)\n\n  // Convert amount to display currency (USD or native)\n  const convertToDisplayCurrency = (\n    amount: string | undefined,\n  ): string | undefined => {\n    if (!amount || displayCurrency !== 'USD') return amount\n    const numAmount = Number(amount)\n    if (Number.isNaN(numAmount)) return amount\n    return tokenToUsdRate > 0 ? String(numAmount * tokenToUsdRate) : undefined\n  }\n\n  // Check if any loan has the default flag\n  const hasDefaultedLoan = loans?.some(\n    // eslint-disable-next-line no-bitwise -- required to check the status of the loan\n    (loan: any) =>\n      loan.TotalValueOutstanding > 0 && (loan.Flags ?? 0) & LSF_LOAN_DEFAULT,\n  )\n\n  const formatBrokerAmount = (\n    amount: string | undefined,\n    inputAsset: AssetInfo | undefined,\n  ): string => {\n    const convertedAmount = convertToDisplayCurrency(amount)\n    if (convertedAmount === undefined && displayCurrency === 'USD') {\n      return '--'\n    }\n\n    const finalDisplayAmount = convertedAmount ?? amount\n    if (finalDisplayAmount !== undefined) {\n      if (displayCurrency === 'USD') {\n        return `$${parseAmount(finalDisplayAmount, 2)} USD`\n      }\n      if (\n        inputAsset?.currency &&\n        isCurrencyExoticSymbol(inputAsset?.currency)\n      ) {\n        return `${getCurrencySymbol(inputAsset?.currency)} ${parseAmount(finalDisplayAmount, 2)}`\n      }\n      return (\n        `${parseAmount(finalDisplayAmount, 2)}` +\n        ` ${\n          inputAsset?.currency ??\n          mptTicker ??\n          `${shortenMPTID(inputAsset?.mpt_issuance_id)}`\n        }`\n      )\n    }\n    return '--'\n  }\n\n  return (\n    <div className=\"broker-details-card\">\n      <div className=\"broker-top-row\">\n        <div className=\"broker-id-section\">\n          <span className=\"broker-id-label\">{t('loan_broker_id')}</span>\n          <div className=\"broker-id-value\">\n            <CopyableText\n              text={broker.index}\n              displayText={broker.index}\n              showCopyIcon\n            />\n          </div>\n        </div>\n        <div className=\"broker-debt-section\">\n          <div className=\"debt-metric\">\n            <span className=\"metric-label\">{t('total_debt')}</span>\n            <span className=\"metric-value\">\n              {formatBrokerAmount(broker.DebtTotal, asset)}\n            </span>\n          </div>\n          <div className=\"debt-metric\">\n            <span className=\"metric-label\">{t('maximum_debt')}</span>\n            <span className=\"metric-value\">\n              {formatBrokerAmount(broker.DebtMaximum, asset)}\n            </span>\n          </div>\n        </div>\n      </div>\n\n      <div className=\"broker-metrics\">\n        <div className=\"metric\">\n          <span className=\"metric-label\">{t('management_fee')}</span>\n          <span className=\"metric-value\">\n            {formatRate(broker.ManagementFeeRate)}\n          </span>\n        </div>\n        <div className=\"metric\">\n          <span className=\"metric-label\">{t('first_loss_capital')}</span>\n          <span className=\"metric-value\">\n            {formatBrokerAmount(broker.CoverAvailable, asset)}\n          </span>\n        </div>\n        <div className=\"metric\">\n          <span className=\"metric-label\">{t('cover_rate_minimum')}</span>\n          <span className=\"metric-value\">\n            {formatRate(broker.CoverRateMinimum)}\n          </span>\n        </div>\n        <div className=\"metric\">\n          <span className=\"metric-label\">{t('cover_rate_liquidation')}</span>\n          <span className=\"metric-value\">\n            {formatRate(broker.CoverRateLiquidation)}\n          </span>\n        </div>\n      </div>\n\n      <BrokerLoansTable\n        loans={loans}\n        currency={\n          getCurrencySymbol(asset?.currency) ??\n          mptTicker ??\n          shortenMPTID(asset?.mpt_issuance_id)\n        }\n        displayCurrency={displayCurrency}\n        asset={asset}\n        isCurrencySpecialSymbol={\n          asset?.currency !== undefined &&\n          isCurrencyExoticSymbol(asset?.currency)\n        }\n      />\n\n      {hasDefaultedLoan && (\n        <div className=\"broker-default-banner\">\n          <WarningIcon className=\"warning-icon\" />\n          <span>{t('loan_default_detected')}</span>\n        </div>\n      )}\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/Vault/VaultLoans/BrokerLoansTable.tsx",
    "content": "import { useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { LoanRow, LoanData } from './LoanRow'\nimport { LSF_LOAN_DEFAULT, LSF_LOAN_IMPAIRED } from './utils'\nimport { Pagination } from '../../shared/components/Pagination/Pagination'\nimport FilterIcon from '../../shared/images/filter.svg'\n\nconst ITEMS_PER_PAGE = 10\n\ntype LoanFilter = 'all' | 'default' | 'impaired'\n\ninterface AssetInfo {\n  currency: string\n  issuer?: string\n  mpt_issuance_id?: string\n}\n\ninterface Props {\n  loans: LoanData[] | undefined\n  currency: string\n  displayCurrency: string\n  asset?: AssetInfo\n  isCurrencySpecialSymbol?: boolean\n}\n\nexport const BrokerLoansTable = ({\n  loans,\n  currency,\n  displayCurrency,\n  asset,\n  isCurrencySpecialSymbol = false,\n}: Props) => {\n  const { t } = useTranslation()\n  const [currentPage, setCurrentPage] = useState(1)\n  const [filter, setFilter] = useState<LoanFilter>('all')\n  const effectiveDisplayCurrency = displayCurrency || currency\n\n  if (!loans || loans.length === 0) {\n    return (\n      <div className=\"broker-loans-empty\">\n        <p>{t('no_loans_message')}</p>\n      </div>\n    )\n  }\n\n  // Filter loans based on selected filter\n  const filteredLoans = loans.filter((loan) => {\n    if (filter === 'all') return true\n    if (filter === 'default') {\n      // eslint-disable-next-line no-bitwise\n      return (\n        Number(loan.TotalValueOutstanding) > 0 &&\n        (loan.Flags ?? 0) & LSF_LOAN_DEFAULT\n      )\n    }\n    if (filter === 'impaired') {\n      // eslint-disable-next-line no-bitwise\n      return (\n        Number(loan.TotalValueOutstanding) > 0 &&\n        (loan.Flags ?? 0) & LSF_LOAN_IMPAIRED\n      )\n    }\n    return true\n  })\n\n  // Handle filter change and reset pagination\n  const handleFilterChange = (newFilter: LoanFilter) => {\n    setFilter(newFilter)\n    setCurrentPage(1)\n  }\n\n  // Pagination logic\n  const startIndex = (currentPage - 1) * ITEMS_PER_PAGE\n  const endIndex = startIndex + ITEMS_PER_PAGE\n  const paginatedLoans = filteredLoans.slice(startIndex, endIndex)\n\n  return (\n    <div className=\"broker-loans-table\">\n      <div className=\"loans-filter-bar\">\n        <div className=\"filter-buttons\">\n          <button\n            type=\"button\"\n            className={`filter-btn ${filter === 'all' ? 'active' : ''}`}\n            onClick={() => handleFilterChange('all')}\n          >\n            {t('all_loans')}\n          </button>\n          <button\n            type=\"button\"\n            className={`filter-btn ${filter === 'default' ? 'active' : ''}`}\n            onClick={() => handleFilterChange('default')}\n          >\n            {t('loan_status_default')}\n          </button>\n          <button\n            type=\"button\"\n            className={`filter-btn ${filter === 'impaired' ? 'active' : ''}`}\n            onClick={() => handleFilterChange('impaired')}\n          >\n            {t('loan_status_impaired')}\n          </button>\n          <div className=\"filter-indicator\">\n            <FilterIcon className=\"filter-icon\" />\n          </div>\n        </div>\n      </div>\n\n      <div className=\"loans-table-header\">\n        <div className=\"header-cell loan-id\">{t('loan_id')}</div>\n        <div className=\"header-cell borrower\">{t('borrower')}</div>\n        <div className=\"header-cell amount-requested\">\n          {t('amount_requested')}\n        </div>\n        <div className=\"header-cell interest-rate\">{t('interest_rate')}</div>\n        <div className=\"header-cell outstanding-balance\">\n          {t('outstanding_balance')}\n        </div>\n        <div className=\"header-cell status\">{t('status')}</div>\n      </div>\n\n      <div className=\"loans-table-body\">\n        {paginatedLoans.map((loan) => (\n          <LoanRow\n            key={loan.index}\n            loan={loan}\n            currency={currency}\n            displayCurrency={effectiveDisplayCurrency}\n            asset={asset}\n            isCurrencySpecialSymbol={isCurrencySpecialSymbol}\n          />\n        ))}\n      </div>\n\n      <Pagination\n        totalItems={filteredLoans.length}\n        currentPage={currentPage}\n        onPageChange={setCurrentPage}\n        pageSize={ITEMS_PER_PAGE}\n        scrollToTop={null}\n        className=\"loans-pagination\"\n      />\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/Vault/VaultLoans/BrokerTabs.tsx",
    "content": "interface LoanBrokerData {\n  index: string\n  Data?: string\n}\n\ninterface Props {\n  brokers: LoanBrokerData[]\n  selectedIndex: number\n  onSelect: (index: number) => void\n  loanCountMap: Record<string, number>\n}\n\nexport const BrokerTabs = ({\n  brokers,\n  selectedIndex,\n  onSelect,\n  loanCountMap,\n}: Props) => (\n  <div className=\"broker-tabs\">\n    {brokers.map((broker, index) => {\n      const name = `Broker ${index + 1}`\n      const loanCount = loanCountMap[broker.index] ?? 0\n      const isSelected = index === selectedIndex\n      return (\n        <button\n          key={broker.index}\n          type=\"button\"\n          className={`broker-tab ${isSelected ? 'selected' : ''}`}\n          onClick={() => onSelect(index)}\n        >\n          {name} ({loanCount})\n        </button>\n      )\n    })}\n  </div>\n)\n"
  },
  {
    "path": "src/containers/Vault/VaultLoans/LoanRow.tsx",
    "content": "import { useContext, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { useQuery } from 'react-query'\nimport { Account } from '../../shared/components/Account'\nimport SocketContext from '../../shared/SocketContext'\nimport { useLanguage } from '../../shared/hooks'\nimport { useTokenToUSDRate } from '../../shared/hooks/useTokenToUSDRate'\nimport { parseAmount } from '../../shared/NumberFormattingUtils'\nimport { getLedgerEntry } from '../../../rippled/lib/rippled'\nimport {\n  formatRate,\n  formatPaymentInterval,\n  formatLoanStatus,\n  formatRippleDate,\n  truncateId,\n} from './utils'\nimport ExpandIcon from '../../shared/images/down_arrow.svg'\nimport { getCurrencySymbol } from '../../shared/utils'\n\nexport interface LoanData {\n  index: string\n  Borrower: string\n  LoanBrokerID: string\n  TotalValueOutstanding: string\n  InterestRate: number\n  LateInterestRate: number\n  CloseInterestRate: number\n  LoanOriginationFee: string\n  LoanServiceFee: string\n  LatePaymentFee: string\n  ClosePaymentFee: string\n  OverpaymentFee: number\n  PaymentInterval: number\n  PaymentRemaining: number\n  GracePeriod: number\n  StartDate: number\n  NextPaymentDueDate: number\n  Flags: number\n  PaymentTotal?: number\n  PreviousTxnLgrSeq?: number\n  PrincipalOutstanding?: string\n}\n\ninterface AssetInfo {\n  currency: string\n  issuer?: string\n  mpt_issuance_id?: string\n}\n\ninterface Props {\n  loan: LoanData\n  currency: string\n  displayCurrency: string\n  asset?: AssetInfo\n  isCurrencySpecialSymbol?: boolean\n}\n\nexport const LoanRow = ({\n  loan,\n  currency,\n  displayCurrency,\n  asset,\n  isCurrencySpecialSymbol = false,\n}: Props) => {\n  const { t } = useTranslation()\n  const language = useLanguage()\n  const rippledSocket = useContext(SocketContext)\n  const { rate: tokenToUsdRate } = useTokenToUSDRate(asset)\n  const [expanded, setExpanded] = useState(false)\n\n  const { data: originalPrincipal, isLoading: isPrincipalLoading } = useQuery(\n    ['originalPrincipal', loan.index],\n    async () => {\n      if (!loan.PreviousTxnLgrSeq) return loan.PrincipalOutstanding ?? null\n\n      let lastSuccessful: any = null\n      let currentSeq = loan.PreviousTxnLgrSeq\n      const MAX_ITERATIONS = 100\n\n      for (let i = 0; i < MAX_ITERATIONS; i += 1) {\n        try {\n          // eslint-disable-next-line no-await-in-loop\n          const resp = await getLedgerEntry(\n            rippledSocket,\n            { index: loan.index },\n            currentSeq - 1,\n          )\n          lastSuccessful = resp.node\n          if (currentSeq === resp.node.PreviousTxnLgrSeq) break\n          currentSeq = resp.node.PreviousTxnLgrSeq\n        } catch {\n          // entryNotFound means we've gone past creation — last success is the creation state\n          break\n        }\n      }\n\n      return (\n        lastSuccessful?.PrincipalOutstanding ??\n        loan.PrincipalOutstanding ??\n        null\n      )\n    },\n    {\n      staleTime: Infinity,\n      enabled: !!rippledSocket,\n    },\n  )\n\n  const { status, colorClass } = formatLoanStatus(\n    loan.Flags,\n    loan.TotalValueOutstanding ?? 0,\n  )\n\n  const formatAmount = (amount: string | number): string => {\n    const num = typeof amount === 'string' ? Number(amount) : amount\n    if (Number.isNaN(num)) return String(amount)\n\n    // Convert to USD if needed\n    let displayNum = num\n    if (displayCurrency === 'USD' && tokenToUsdRate > 0) {\n      displayNum = num * tokenToUsdRate\n    } else if (displayCurrency === 'USD' && tokenToUsdRate === 0) {\n      return '--'\n    }\n\n    const prefix = displayCurrency === 'USD' ? '$' : ''\n    if (isCurrencySpecialSymbol && displayCurrency !== 'USD')\n      return `${getCurrencySymbol(currency)} ${parseAmount(displayNum, 1, language)}`\n    return `${prefix}${parseAmount(displayNum, 1, language)} ${displayCurrency}`\n  }\n\n  const formatFee = (fee: string | number): string => {\n    // this method is used with fields which have a soeDEFAULT configuration. If they are not specified, display 0.\n    if (!fee) return '0'\n    const num = typeof fee === 'string' ? Number(fee) : fee\n    if (Number.isNaN(num)) return String(fee)\n    if (num === 0) return '0'\n\n    // Convert to USD if needed\n    let displayNum = num\n    if (displayCurrency === 'USD' && tokenToUsdRate > 0) {\n      displayNum = num * tokenToUsdRate\n    } else if (displayCurrency === 'USD' && tokenToUsdRate === 0) {\n      return '--'\n    }\n\n    const prefix = displayCurrency === 'USD' ? '$' : ''\n    if (isCurrencySpecialSymbol)\n      return `${getCurrencySymbol(currency)} ${parseAmount(displayNum, 1, language)}`\n    return `${prefix}${parseAmount(displayNum, 1, language)} ${displayCurrency}`\n  }\n\n  const formatGracePeriod = (seconds: number): string => {\n    const days = Math.round(seconds / 86400)\n    return `${days} Days`\n  }\n\n  return (\n    <div className={`loan-row ${expanded ? 'expanded' : ''}`}>\n      <button\n        type=\"button\"\n        className=\"loan-row-main\"\n        onClick={() => setExpanded(!expanded)}\n        aria-expanded={expanded}\n      >\n        <div className=\"loan-cell loan-id\">\n          <ExpandIcon className={`expand-icon ${expanded ? 'rotated' : ''}`} />\n          <span className=\"loan-id-text\">{truncateId(loan.index)}</span>\n        </div>\n        <div className=\"loan-cell borrower\">\n          <Account\n            account={loan.Borrower}\n            displayText={truncateId(loan.Borrower, 7, 4)}\n          />\n        </div>\n        <div className=\"loan-cell amount-requested\">\n          {isPrincipalLoading\n            ? '--'\n            : formatAmount(originalPrincipal ?? loan.PrincipalOutstanding ?? 0)}\n        </div>\n        <div className=\"loan-cell interest-rate\">\n          {formatRate(loan.InterestRate)}\n        </div>\n        <div className=\"loan-cell outstanding-balance\">\n          {formatAmount(loan.TotalValueOutstanding ?? 0)}\n        </div>\n        <div className={`loan-cell status ${colorClass}`}>\n          <span className=\"status-dot\" />\n          {t(status)}\n        </div>\n      </button>\n\n      {expanded && (\n        <div className=\"loan-row-details\">\n          <div className=\"details-row\">\n            <div className=\"detail-item\">\n              <span className=\"detail-label\">{t('next_due_date')}</span>\n              <span className=\"detail-value\">\n                {formatRippleDate(loan.NextPaymentDueDate, language)}\n              </span>\n            </div>\n            <div className=\"detail-item\">\n              <span className=\"detail-label\">{t('origination_date')}</span>\n              <span className=\"detail-value\">\n                {formatRippleDate(loan.StartDate, language)}\n              </span>\n            </div>\n            <div className=\"detail-item\">\n              <span className=\"detail-label\">{t('frequency')}</span>\n              <span className=\"detail-value\">\n                {formatPaymentInterval(loan.PaymentInterval)}\n              </span>\n            </div>\n            <div className=\"detail-item\">\n              <span className=\"detail-label\">{t('installments')}</span>\n              <span className=\"detail-value\">{loan.PaymentRemaining}</span>\n            </div>\n            <div className=\"detail-item\">\n              <span className=\"detail-label\">{t('grace_period')}</span>\n              <span className=\"detail-value\">\n                {formatGracePeriod(loan.GracePeriod)}\n              </span>\n            </div>\n          </div>\n          <div className=\"details-row\">\n            <div className=\"detail-item\">\n              <span className=\"detail-label\">{t('loan_origination_fee')}</span>\n              <span className=\"detail-value\">\n                {formatFee(loan.LoanOriginationFee)}\n              </span>\n            </div>\n            <div className=\"detail-item\">\n              <span className=\"detail-label\">{t('loan_service_fee')}</span>\n              <span className=\"detail-value\">\n                {formatFee(loan.LoanServiceFee)}\n              </span>\n            </div>\n            <div className=\"detail-item\">\n              <span className=\"detail-label\">{t('late_interest_rate')}</span>\n              <span className=\"detail-value\">\n                {formatRate(loan.LateInterestRate)}\n              </span>\n            </div>\n            <div className=\"detail-item\">\n              <span className=\"detail-label\">{t('late_payment_fee')}</span>\n              <span className=\"detail-value\">\n                {formatFee(loan.LatePaymentFee)}\n              </span>\n            </div>\n            <div className=\"detail-item\">\n              <span className=\"detail-label\">{t('prepayment_fee')}</span>\n              <span className=\"detail-value\">\n                {formatFee(loan.OverpaymentFee)}\n              </span>\n            </div>\n          </div>\n          <div className=\"details-row\">\n            <div className=\"detail-item\">\n              <span className=\"detail-label\">{t('full_payment_fee')}</span>\n              <span className=\"detail-value\">\n                {formatFee(loan.ClosePaymentFee)}\n              </span>\n            </div>\n          </div>\n        </div>\n      )}\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/Vault/VaultLoans/index.tsx",
    "content": "import { useContext, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { useQuery, useQueries } from 'react-query'\nimport SocketContext from '../../shared/SocketContext'\nimport { getAccountObjects } from '../../../rippled/lib/rippled'\nimport { useAnalytics } from '../../shared/analytics'\nimport { Loader } from '../../shared/components/Loader'\nimport { BrokerTabs } from './BrokerTabs'\nimport { BrokerDetails } from './BrokerDetails'\nimport './styles.scss'\n\ninterface LoanBrokerData {\n  index: string\n  LedgerEntryType: string\n  Account: string\n  Owner: string\n  VaultID: string\n  Data?: string\n  ManagementFeeRate?: number\n  CoverAvailable?: string\n  CoverRateMinimum?: number\n  CoverRateLiquidation?: number\n  DebtTotal?: string\n  DebtMaximum?: string\n  OwnerCount?: number\n}\n\ninterface AssetInfo {\n  currency: string\n  issuer?: string\n  mpt_issuance_id?: string\n}\n\ninterface Props {\n  vaultId: string\n  vaultPseudoAccount: string\n  displayCurrency: string\n  asset?: AssetInfo\n  mptTicker?: string\n}\n\nexport const VaultLoans = ({\n  vaultId,\n  vaultPseudoAccount,\n  displayCurrency,\n  asset,\n  mptTicker,\n}: Props) => {\n  const { t } = useTranslation()\n  const { trackException } = useAnalytics()\n  const rippledSocket = useContext(SocketContext)\n  const [selectedBrokerIndex, setSelectedBrokerIndex] = useState(0)\n\n  const { data: loanBrokers, isFetching: loading } = useQuery<\n    LoanBrokerData[] | undefined\n  >(\n    ['getVaultLoanBrokers', vaultPseudoAccount],\n    async () => {\n      const allBrokers: LoanBrokerData[] = []\n      let marker: string | undefined\n\n      do {\n        // eslint-disable-next-line no-await-in-loop\n        const resp = await getAccountObjects(\n          rippledSocket,\n          vaultPseudoAccount,\n          'loan_broker',\n          marker,\n        )\n\n        if (!resp?.account_objects) {\n          break\n        }\n\n        const vaultBrokers = resp.account_objects.filter(\n          (obj: LoanBrokerData) => obj.VaultID === vaultId,\n        )\n        allBrokers.push(...vaultBrokers)\n        marker = resp.marker\n      } while (marker)\n\n      return allBrokers\n    },\n    {\n      enabled: !!vaultPseudoAccount,\n      onError: (e: any) => {\n        trackException(\n          `Error fetching Loan Brokers for account ${vaultPseudoAccount} --- ${JSON.stringify(e)}`,\n        )\n      },\n    },\n  )\n\n  // Fetch loans for each broker - must be called before any early returns\n  // This data is shared with BrokerDetails to avoid duplicate API calls\n  // Paginates through all results using marker\n  const brokerLoansQueries = useQueries(\n    (loanBrokers ?? []).map((broker) => ({\n      queryKey: ['getBrokerLoans', broker.Account, broker.index],\n      queryFn: async () => {\n        const allLoans: any[] = []\n        let marker: string | undefined\n\n        do {\n          // eslint-disable-next-line no-await-in-loop\n          const resp = await getAccountObjects(\n            rippledSocket,\n            broker.Account,\n            'loan',\n            marker,\n          )\n\n          if (!resp?.account_objects) {\n            break\n          }\n\n          const brokerLoans = resp.account_objects.filter(\n            (obj: any) => obj.LoanBrokerID === broker.index,\n          )\n          allLoans.push(...brokerLoans)\n          marker = resp.marker\n        } while (marker)\n\n        return { brokerId: broker.index, loans: allLoans }\n      },\n      enabled: !!broker.Account && !!broker.index,\n    })),\n  )\n\n  // Build maps of broker ID to loans and loan counts\n  const brokerLoansMap: Record<string, any[]> = {}\n  const loanCountMap: Record<string, number> = {}\n  brokerLoansQueries.forEach((query) => {\n    if (query.data) {\n      brokerLoansMap[query.data.brokerId] = query.data.loans\n      loanCountMap[query.data.brokerId] = query.data.loans.length\n    }\n  })\n\n  if (loading) {\n    return (\n      <div className=\"vault-loans-section\">\n        <h2 className=\"vault-loans-title\">{t('loans')}</h2>\n        <div className=\"vault-loans-divider\" />\n        <Loader />\n      </div>\n    )\n  }\n\n  if (!loanBrokers || loanBrokers.length === 0) {\n    return (\n      <div className=\"vault-loans-section\">\n        <h2 className=\"vault-loans-title\">{t('loans')}</h2>\n        <div className=\"vault-loans-divider\" />\n        <div className=\"no-loan-brokers-message\">\n          {t('no_loan_brokers_message')}\n        </div>\n      </div>\n    )\n  }\n\n  loanBrokers.sort(\n    (a: LoanBrokerData, b: LoanBrokerData) =>\n      loanCountMap[b.index] - loanCountMap[a.index],\n  )\n\n  const selectedBroker = loanBrokers[selectedBrokerIndex]\n\n  return (\n    <div className=\"vault-loans-section\">\n      <h2 className=\"vault-loans-title\">{t('loans')}</h2>\n      <div className=\"vault-loans-divider\" />\n      <BrokerTabs\n        brokers={loanBrokers}\n        selectedIndex={selectedBrokerIndex}\n        onSelect={setSelectedBrokerIndex}\n        loanCountMap={loanCountMap}\n      />\n      {selectedBroker && (\n        <BrokerDetails\n          broker={selectedBroker}\n          displayCurrency={displayCurrency}\n          asset={asset}\n          loans={brokerLoansMap[selectedBroker.index]}\n          mptTicker={mptTicker}\n        />\n      )}\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/Vault/VaultLoans/styles.scss",
    "content": "@use '../../shared/css/variables' as *;\n\n.vault-loans-section {\n  width: 100%;\n  padding: 0 24px;\n  margin-top: 48px;\n\n  @include for-size(desktop-up) {\n    padding: 0 64px;\n  }\n\n  .vault-loans-title {\n    margin: 0 0 16px;\n    color: $white;\n    font-size: 24px;\n    @include bold;\n  }\n\n  .vault-loans-divider {\n    margin-bottom: 24px;\n    background: $black-70;\n  }\n}\n\n.broker-tabs {\n  display: flex;\n  flex-wrap: wrap;\n  margin-bottom: 24px;\n  gap: 12px;\n\n  .broker-tab {\n    padding: 10px 20px;\n    border: 1px solid $black-60;\n    border-radius: 24px;\n    background: transparent;\n    color: $white;\n    cursor: pointer;\n    font-size: 14px;\n    transition:\n      background-color 0.2s,\n      border-color 0.2s;\n\n    &:hover {\n      border-color: $black-40;\n    }\n\n    &.selected {\n      border-color: $green;\n      background: $green;\n      color: $black;\n      @include bold;\n    }\n  }\n}\n\n.broker-details-card {\n  padding: 24px;\n  border-radius: 8px;\n  background: $black-80;\n\n  .broker-header {\n    margin-bottom: 24px;\n\n    .broker-label {\n      display: block;\n      margin-bottom: 4px;\n      color: $black-40;\n      font-size: 12px;\n      letter-spacing: 0.5px;\n      text-transform: uppercase;\n    }\n\n    .broker-name {\n      margin: 0;\n      color: $white;\n      font-size: 20px;\n      @include bold;\n    }\n  }\n\n  .broker-metrics {\n    display: grid;\n    gap: 24px;\n    grid-template-columns: repeat(2, 1fr);\n\n    @include for-size(desktop-up) {\n      grid-template-columns: repeat(4, 1fr);\n    }\n\n    .metric {\n      .metric-label {\n        display: block;\n        margin-bottom: 8px;\n        color: $black-40;\n        font-size: 12px;\n        letter-spacing: 0.5px;\n        text-transform: uppercase;\n      }\n\n      .metric-value {\n        color: $white;\n        font-size: 16px;\n      }\n    }\n  }\n\n  .broker-top-row {\n    display: grid;\n    padding-bottom: 24px;\n    border-bottom: 1px solid $black-70;\n    margin-bottom: 24px;\n    gap: 24px;\n    grid-template-columns: 1fr;\n\n    @include for-size(desktop-up) {\n      grid-template-columns: repeat(4, 1fr);\n    }\n\n    .broker-id-section {\n      @include for-size(desktop-up) {\n        grid-column: span 2;\n      }\n\n      .broker-id-label {\n        display: block;\n        margin-bottom: 8px;\n        color: $black-40;\n        font-size: 12px;\n        letter-spacing: 0.5px;\n        text-transform: uppercase;\n      }\n\n      .broker-id-value {\n        display: flex;\n        align-items: center;\n        color: $white;\n        font-size: 16px;\n        gap: 8px;\n        word-break: break-all;\n      }\n    }\n\n    .broker-debt-section {\n      display: contents;\n\n      .debt-metric {\n        .metric-label {\n          display: block;\n          margin-bottom: 8px;\n          color: $black-40;\n          font-size: 12px;\n          letter-spacing: 0.5px;\n          text-transform: uppercase;\n        }\n\n        .metric-value {\n          color: $white;\n          font-size: 16px;\n        }\n      }\n    }\n  }\n\n  // Default loan warning banner\n  .broker-default-banner {\n    display: flex;\n    align-items: center;\n    padding: 16px 20px;\n    border-radius: 8px;\n    margin-top: 24px;\n    background: rgb(139 69 19 / 60%);\n    gap: 12px;\n\n    .warning-icon {\n      width: 20px;\n      height: 20px;\n      flex-shrink: 0;\n      color: #ffd700;\n    }\n\n    span {\n      color: $white;\n      font-size: 14px;\n    }\n  }\n}\n\n// Broker Loans Table Styles\n.broker-loans-table {\n  padding-top: 24px;\n  border-top: 1px solid $black-70;\n  margin-top: 32px;\n  overflow-x: auto;\n}\n\n// Loans Filter Bar\n.loans-filter-bar {\n  display: flex;\n  align-items: center;\n  justify-content: flex-end;\n  margin-bottom: 16px;\n  gap: 12px;\n\n  .filter-buttons {\n    display: flex;\n    gap: 8px;\n\n    .filter-btn {\n      padding: 6px 16px;\n      border: 1px solid $black-60;\n      border-radius: 16px;\n      background: transparent;\n      color: $white;\n      cursor: pointer;\n      font-size: 13px;\n      transition:\n        background-color 0.2s,\n        border-color 0.2s;\n\n      &:hover {\n        border-color: $black-40;\n      }\n\n      &.active {\n        border-color: $green;\n        background: $green;\n        color: $black;\n        @include bold;\n      }\n    }\n\n    .filter-indicator {\n      display: flex;\n      align-items: center;\n\n      .filter-icon {\n        width: 16px;\n        height: 16px;\n        fill: $black-40;\n      }\n    }\n  }\n}\n\n.broker-loans-loading,\n.broker-loans-empty,\n.no-loan-brokers-message {\n  padding: 32px;\n  color: $black-40;\n  text-align: center;\n}\n\n.loans-table-header {\n  display: grid;\n  min-width: 750px;\n  padding: 16px 8px;\n  border-bottom: 1px solid $black-70;\n  gap: 16px;\n  grid-template-columns: 1.5fr 1.2fr 1.5fr 1fr 1.5fr 0.8fr;\n\n  .header-cell {\n    color: $black-40;\n    font-size: 14px;\n    letter-spacing: 0.5px;\n    text-transform: uppercase;\n  }\n}\n\n.loans-table-body {\n  .loan-row {\n    border-bottom: 1px solid $black-70;\n\n    &:last-child {\n      border-bottom: none;\n    }\n\n    &.expanded {\n      background: rgba($black-70, 0.3);\n    }\n  }\n}\n\n.loan-row-main {\n  display: grid;\n  width: 100%;\n  min-width: 750px;\n  padding: 16px 8px;\n  border: none;\n  background: transparent;\n  cursor: pointer;\n  gap: 16px;\n  grid-template-columns: 1.5fr 1.2fr 1.5fr 1fr 1.5fr 0.8fr;\n  text-align: left;\n  transition: background-color 0.2s;\n\n  &:hover {\n    background: rgba($black-70, 0.5);\n  }\n\n  .loan-cell {\n    display: flex;\n    align-items: center;\n    color: $white;\n    font-size: 14px;\n\n    &.loan-id {\n      gap: 8px;\n\n      .expand-icon {\n        width: 12px;\n        height: 12px;\n        fill: $black-40;\n        transition: transform 0.2s;\n\n        &.rotated {\n          transform: rotate(180deg);\n        }\n      }\n\n      .loan-id-text {\n        color: $white;\n      }\n    }\n\n    &.borrower {\n      .account {\n        color: $green;\n        text-decoration: none;\n\n        &:hover {\n          text-decoration: underline;\n        }\n      }\n    }\n\n    &.status {\n      gap: 8px;\n\n      .status-dot {\n        width: 8px;\n        height: 8px;\n        border-radius: 50%;\n      }\n\n      &.status-current {\n        color: $green;\n\n        .status-dot {\n          background: $green;\n        }\n      }\n\n      &.status-default {\n        color: #ff6b6b;\n\n        .status-dot {\n          background: #ff6b6b;\n        }\n      }\n\n      &.status-impaired {\n        color: #ffa500;\n\n        .status-dot {\n          background: #ffa500;\n        }\n      }\n\n      &.status-paid-off {\n        color: $black-40;\n\n        .status-dot {\n          background: $black-40;\n        }\n      }\n    }\n  }\n}\n\n.loan-row-details {\n  padding: 16px 32px 24px;\n  background: rgba($black-70, 0.5);\n\n  .details-row {\n    display: grid;\n    margin-bottom: 16px;\n    gap: 16px 24px;\n    grid-template-columns: repeat(2, 1fr);\n\n    @include for-size(desktop-up) {\n      grid-template-columns: repeat(5, 1fr);\n    }\n\n    &:last-child {\n      margin-bottom: 0;\n    }\n  }\n\n  .detail-item {\n    .detail-label {\n      display: block;\n      margin-bottom: 4px;\n      color: $black-40;\n      font-size: 11px;\n      letter-spacing: 0.5px;\n      text-transform: uppercase;\n    }\n\n    .detail-value {\n      color: $white;\n      font-size: 14px;\n    }\n  }\n}\n\n// Pagination Styles\n.loans-pagination {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  padding: 24px 0;\n  gap: 4px;\n\n  .pagination-btn {\n    min-width: 32px;\n    height: 32px;\n    padding: 0 8px;\n    border: 1px solid $black-60;\n    border-radius: 4px;\n    background: transparent;\n    color: $white;\n    cursor: pointer;\n    font-size: 14px;\n    transition:\n      background-color 0.2s,\n      border-color 0.2s;\n\n    &:disabled {\n      cursor: not-allowed;\n      opacity: 0.5;\n    }\n\n    &:hover:not(:disabled) {\n      border-color: $black-40;\n      background: $black-70;\n    }\n\n    &.active {\n      border-color: $green;\n      background: $green;\n      color: $black;\n      @include bold;\n    }\n\n    &.prev,\n    &.next,\n    &.last {\n      font-weight: bold;\n    }\n  }\n\n  .pagination-ellipsis {\n    padding: 0 8px;\n    color: $black-40;\n  }\n}\n"
  },
  {
    "path": "src/containers/Vault/VaultLoans/test/BrokerLoansTable.test.tsx",
    "content": "/**\n * BrokerLoansTable Component Unit Tests\n *\n * This test suite validates the BrokerLoansTable component which displays\n * a filterable, paginated table of loans for a loan broker.\n *\n * Key concepts tested:\n * - Empty state when no loans exist\n * - Filter functionality (All Loans, Default, Impaired)\n * - Table header rendering\n * - Pagination controls and navigation\n * - Filter + pagination interaction (page reset on filter change)\n * - Loan row rendering\n */\n\nimport { render, screen, fireEvent, waitFor } from '@testing-library/react'\nimport { I18nextProvider } from 'react-i18next'\nimport { BrowserRouter as Router } from 'react-router'\nimport { QueryClientProvider, QueryClient } from 'react-query'\nimport i18n from '../../../../i18n/testConfigEnglish'\nimport SocketContext from '../../../shared/SocketContext'\nimport { BrokerLoansTable } from '../BrokerLoansTable'\nimport { LoanData } from '../LoanRow'\nimport { getLedgerEntry } from '../../../../rippled/lib/rippled'\nimport { LSF_LOAN_DEFAULT, LSF_LOAN_IMPAIRED } from '../utils'\nimport { isCurrencyExoticSymbol } from '../../../shared/utils'\nimport Mock = jest.Mock\n\njest.mock('../../../../rippled/lib/rippled', () => ({\n  getLedgerEntry: jest.fn(),\n}))\n\njest.mock('../../../shared/hooks/useTokenToUSDRate', () => ({\n  useTokenToUSDRate: () => ({ rate: 1.5, isAvailable: true, isLoading: false }),\n}))\n\nconst mockedGetLedgerEntry = getLedgerEntry as Mock\nconst mockSocket = {} as any\n\n// Default test props\nconst defaultDisplayCurrency = 'XRP'\nconst defaultAsset = { currency: 'XRP' }\n\n/**\n * Creates a fresh QueryClient for each test\n */\nconst createTestQueryClient = () =>\n  new QueryClient({\n    defaultOptions: {\n      queries: {\n        retry: false,\n        staleTime: 0,\n        cacheTime: 0,\n      },\n    },\n  })\n\n/**\n * TestWrapper Component\n *\n * BrokerLoansTable needs:\n * - I18nextProvider: For translated text (filter buttons, headers, empty message)\n * - Router: For Account links in LoanRow\n * - QueryClientProvider: For useTokenToUSDRate hook in LoanRow\n */\nconst TestWrapper = ({ children }: { children: React.ReactNode }) => {\n  const queryClient = createTestQueryClient()\n  return (\n    <I18nextProvider i18n={i18n}>\n      <QueryClientProvider client={queryClient}>\n        <Router>{children}</Router>\n      </QueryClientProvider>\n    </I18nextProvider>\n  )\n}\n\n/**\n * SocketTestWrapper Component\n *\n * Like TestWrapper but includes SocketContext.Provider so that the\n * originalPrincipal useQuery (enabled: !!rippledSocket) actually fires.\n */\nconst SocketTestWrapper = ({ children }: { children: React.ReactNode }) => {\n  const queryClient = createTestQueryClient()\n  return (\n    <I18nextProvider i18n={i18n}>\n      <QueryClientProvider client={queryClient}>\n        <SocketContext.Provider value={mockSocket}>\n          <Router>{children}</Router>\n        </SocketContext.Provider>\n      </QueryClientProvider>\n    </I18nextProvider>\n  )\n}\n\n/**\n * Mock loan data generator\n *\n * Creates a loan object with all required fields.\n * The Flags field can be set to simulate Default or Impaired status.\n */\nconst createMockLoan = (overrides: Partial<LoanData> = {}): LoanData => ({\n  index: `LOAN_${Math.random().toString(36).substring(7).toUpperCase()}`,\n  Borrower: `rBorrower${Math.random().toString(36).substring(7)}`,\n  LoanBrokerID: 'BROKER_123',\n  PrincipalOutstanding: '10000',\n  TotalValueOutstanding: '10500',\n  InterestRate: 500,\n  LateInterestRate: 1000,\n  CloseInterestRate: 0,\n  LoanOriginationFee: '100',\n  LoanServiceFee: '50',\n  LatePaymentFee: '25',\n  ClosePaymentFee: '200',\n  OverpaymentFee: 100,\n  PaymentInterval: 2592000,\n  PaymentRemaining: 12,\n  GracePeriod: 432000,\n  StartDate: 750000000,\n  NextPaymentDueDate: 752592000,\n  Flags: 0,\n  ...overrides,\n})\n\n/**\n * Helper to generate multiple loans\n */\nconst createMockLoans = (\n  count: number,\n  overrides: Partial<LoanData> = {},\n): LoanData[] =>\n  Array.from({ length: count }, (_, i) =>\n    createMockLoan({ index: `LOAN_${i + 1}`, ...overrides }),\n  )\n\ndescribe('BrokerLoansTable Component', () => {\n  /**\n   * =========================================\n   * SECTION 1: Empty State Tests\n   * =========================================\n   * When no loans exist, display an appropriate message.\n   */\n  describe('Empty State', () => {\n    it('displays empty message when loans array is empty', () => {\n      render(\n        <TestWrapper>\n          <BrokerLoansTable\n            loans={[]}\n            currency=\"XRP\"\n            displayCurrency={defaultDisplayCurrency}\n            asset={defaultAsset}\n          />\n        </TestWrapper>,\n      )\n\n      expect(\n        screen.getByText('No loans found for this broker.'),\n      ).toBeInTheDocument()\n    })\n\n    it('displays empty message when loans is undefined', () => {\n      render(\n        <TestWrapper>\n          <BrokerLoansTable\n            loans={undefined}\n            currency=\"XRP\"\n            displayCurrency={defaultDisplayCurrency}\n            asset={defaultAsset}\n          />\n        </TestWrapper>,\n      )\n\n      expect(\n        screen.getByText('No loans found for this broker.'),\n      ).toBeInTheDocument()\n    })\n\n    it('does not render filter bar when no loans exist', () => {\n      const { container } = render(\n        <TestWrapper>\n          <BrokerLoansTable\n            loans={[]}\n            currency=\"XRP\"\n            displayCurrency={defaultDisplayCurrency}\n            asset={defaultAsset}\n          />\n        </TestWrapper>,\n      )\n\n      expect(\n        container.querySelector('.loans-filter-bar'),\n      ).not.toBeInTheDocument()\n    })\n\n    it('does not render pagination when no loans exist', () => {\n      const { container } = render(\n        <TestWrapper>\n          <BrokerLoansTable\n            loans={[]}\n            currency=\"XRP\"\n            displayCurrency={defaultDisplayCurrency}\n            asset={defaultAsset}\n          />\n        </TestWrapper>,\n      )\n\n      expect(\n        container.querySelector('.loans-pagination'),\n      ).not.toBeInTheDocument()\n    })\n  })\n\n  /**\n   * =========================================\n   * SECTION 2: Table Header Tests\n   * =========================================\n   * Verify all column headers are rendered correctly.\n   */\n  describe('Table Headers', () => {\n    it('renders all column headers', () => {\n      const loans = [createMockLoan()]\n\n      render(\n        <TestWrapper>\n          <BrokerLoansTable\n            loans={loans}\n            currency=\"XRP\"\n            displayCurrency={defaultDisplayCurrency}\n            asset={defaultAsset}\n          />\n        </TestWrapper>,\n      )\n\n      expect(screen.getByText('Loan ID')).toBeInTheDocument()\n      expect(screen.getByText('Borrower')).toBeInTheDocument()\n      expect(screen.getByText('Amount Requested')).toBeInTheDocument()\n      expect(screen.getByText('Interest Rate')).toBeInTheDocument()\n      expect(screen.getByText('Outstanding Balance')).toBeInTheDocument()\n      expect(screen.getByText('Status')).toBeInTheDocument()\n    })\n  })\n\n  /**\n   * =========================================\n   * SECTION 3: Filter Bar Tests\n   * =========================================\n   * Test the filter buttons and their functionality.\n   */\n  describe('Filter Bar', () => {\n    it('renders all filter buttons', () => {\n      const loans = [createMockLoan()]\n\n      render(\n        <TestWrapper>\n          <BrokerLoansTable\n            loans={loans}\n            currency=\"XRP\"\n            displayCurrency={defaultDisplayCurrency}\n            asset={defaultAsset}\n          />\n        </TestWrapper>,\n      )\n\n      expect(screen.getByText('All Loans')).toBeInTheDocument()\n      expect(screen.getByText('Default')).toBeInTheDocument()\n      expect(screen.getByText('Impaired')).toBeInTheDocument()\n    })\n\n    it('All Loans filter is active by default', () => {\n      const loans = [createMockLoan()]\n\n      render(\n        <TestWrapper>\n          <BrokerLoansTable\n            loans={loans}\n            currency=\"XRP\"\n            displayCurrency={defaultDisplayCurrency}\n            asset={defaultAsset}\n          />\n        </TestWrapper>,\n      )\n\n      const allLoansBtn = screen.getByText('All Loans')\n      expect(allLoansBtn).toHaveClass('active')\n\n      // Other filters should not be active\n      const defaultBtn = screen.getByText('Default')\n      const impairedBtn = screen.getByText('Impaired')\n      expect(defaultBtn).not.toHaveClass('active')\n      expect(impairedBtn).not.toHaveClass('active')\n    })\n\n    it('clicking filter button changes active state', () => {\n      const loans = [createMockLoan()]\n\n      render(\n        <TestWrapper>\n          <BrokerLoansTable\n            loans={loans}\n            currency=\"XRP\"\n            displayCurrency={defaultDisplayCurrency}\n            asset={defaultAsset}\n          />\n        </TestWrapper>,\n      )\n\n      const defaultBtn = screen.getByText('Default')\n      fireEvent.click(defaultBtn)\n\n      // Default should now be active\n      expect(defaultBtn).toHaveClass('active')\n      // All Loans should no longer be active\n      expect(screen.getByText('All Loans')).not.toHaveClass('active')\n    })\n\n    it('renders filter icon', () => {\n      const loans = [createMockLoan()]\n\n      const { container } = render(\n        <TestWrapper>\n          <BrokerLoansTable\n            loans={loans}\n            currency=\"XRP\"\n            displayCurrency={defaultDisplayCurrency}\n            asset={defaultAsset}\n          />\n        </TestWrapper>,\n      )\n\n      expect(container.querySelector('.filter-icon')).toBeInTheDocument()\n    })\n  })\n\n  /**\n   * =========================================\n   * SECTION 4: Filter Functionality Tests\n   * =========================================\n   * Verify that filters correctly show/hide loans based on status.\n   */\n  describe('Filter Functionality', () => {\n    it('All Loans filter shows all loans', () => {\n      const loans = [\n        createMockLoan({ index: 'LOAN_CURRENT', Flags: 0 }),\n        createMockLoan({ index: 'LOAN_DEFAULT', Flags: LSF_LOAN_DEFAULT }),\n        createMockLoan({ index: 'LOAN_IMPAIRED', Flags: LSF_LOAN_IMPAIRED }),\n      ]\n\n      const { container } = render(\n        <TestWrapper>\n          <BrokerLoansTable\n            loans={loans}\n            currency=\"XRP\"\n            displayCurrency={defaultDisplayCurrency}\n            asset={defaultAsset}\n          />\n        </TestWrapper>,\n      )\n\n      // All 3 loans should be displayed\n      const rows = container.querySelectorAll('.loan-row')\n      expect(rows.length).toBe(3)\n    })\n\n    it('Default filter shows only defaulted loans', () => {\n      const loans = [\n        createMockLoan({ index: 'LOAN_CURRENT', Flags: 0 }),\n        createMockLoan({ index: 'LOAN_DEFAULT_1', Flags: LSF_LOAN_DEFAULT }),\n        createMockLoan({ index: 'LOAN_DEFAULT_2', Flags: LSF_LOAN_DEFAULT }),\n        createMockLoan({ index: 'LOAN_IMPAIRED', Flags: LSF_LOAN_IMPAIRED }),\n      ]\n\n      const { container } = render(\n        <TestWrapper>\n          <BrokerLoansTable\n            loans={loans}\n            currency=\"XRP\"\n            displayCurrency={defaultDisplayCurrency}\n            asset={defaultAsset}\n          />\n        </TestWrapper>,\n      )\n\n      // Click Default filter button (in the filter-buttons container)\n      const filterButtons = container.querySelector('.filter-buttons')\n      const defaultBtn = filterButtons?.querySelector(\n        '.filter-btn:nth-child(2)',\n      )\n      fireEvent.click(defaultBtn!)\n\n      // Only 2 defaulted loans should be displayed\n      const rows = container.querySelectorAll('.loan-row')\n      expect(rows.length).toBe(2)\n    })\n\n    it('Impaired filter shows only impaired loans', () => {\n      const loans = [\n        createMockLoan({ index: 'LOAN_CURRENT', Flags: 0 }),\n        createMockLoan({ index: 'LOAN_DEFAULT', Flags: LSF_LOAN_DEFAULT }),\n        createMockLoan({ index: 'LOAN_IMPAIRED_1', Flags: LSF_LOAN_IMPAIRED }),\n        createMockLoan({ index: 'LOAN_IMPAIRED_2', Flags: LSF_LOAN_IMPAIRED }),\n      ]\n\n      const { container } = render(\n        <TestWrapper>\n          <BrokerLoansTable\n            loans={loans}\n            currency=\"XRP\"\n            displayCurrency={defaultDisplayCurrency}\n            asset={defaultAsset}\n          />\n        </TestWrapper>,\n      )\n\n      // Click Impaired filter button (3rd button in filter-buttons)\n      const filterButtons = container.querySelector('.filter-buttons')\n      const impairedBtn = filterButtons?.querySelector(\n        '.filter-btn:nth-child(3)',\n      )\n      fireEvent.click(impairedBtn!)\n\n      // Only 2 impaired loans should be displayed\n      const rows = container.querySelectorAll('.loan-row')\n      expect(rows.length).toBe(2)\n    })\n\n    it('shows empty state when filter has no matching loans', () => {\n      // All loans are current (no flags)\n      const loans = [\n        createMockLoan({ index: 'LOAN_1', Flags: 0 }),\n        createMockLoan({ index: 'LOAN_2', Flags: 0 }),\n      ]\n\n      const { container } = render(\n        <TestWrapper>\n          <BrokerLoansTable\n            loans={loans}\n            currency=\"XRP\"\n            displayCurrency={defaultDisplayCurrency}\n            asset={defaultAsset}\n          />\n        </TestWrapper>,\n      )\n\n      // Click Default filter button - no loans match\n      const filterButtons = container.querySelector('.filter-buttons')\n      const defaultBtn = filterButtons?.querySelector(\n        '.filter-btn:nth-child(2)',\n      )\n      fireEvent.click(defaultBtn!)\n\n      // No loan rows should be displayed\n      const rows = container.querySelectorAll('.loan-row')\n      expect(rows.length).toBe(0)\n    })\n\n    it('switching back to All Loans shows all loans again', () => {\n      const loans = [\n        createMockLoan({ index: 'LOAN_1', Flags: 0 }),\n        createMockLoan({ index: 'LOAN_2', Flags: LSF_LOAN_DEFAULT }),\n      ]\n\n      const { container } = render(\n        <TestWrapper>\n          <BrokerLoansTable\n            loans={loans}\n            currency=\"XRP\"\n            displayCurrency={defaultDisplayCurrency}\n            asset={defaultAsset}\n          />\n        </TestWrapper>,\n      )\n\n      const filterButtons = container.querySelector('.filter-buttons')\n      const defaultBtn = filterButtons?.querySelector(\n        '.filter-btn:nth-child(2)',\n      )\n      const allLoansBtn = filterButtons?.querySelector(\n        '.filter-btn:nth-child(1)',\n      )\n\n      // Apply Default filter\n      fireEvent.click(defaultBtn!)\n      expect(container.querySelectorAll('.loan-row').length).toBe(1)\n\n      // Switch back to All Loans\n      fireEvent.click(allLoansBtn!)\n      expect(container.querySelectorAll('.loan-row').length).toBe(2)\n    })\n  })\n\n  /**\n   * =========================================\n   * SECTION 5: Pagination Display Tests\n   * =========================================\n   * Test pagination controls visibility and state.\n   */\n  describe('Pagination Display', () => {\n    it('does not show pagination when loans fit on one page', () => {\n      // ITEMS_PER_PAGE is 10, so 5 loans should not need pagination\n      const loans = createMockLoans(5)\n\n      const { container } = render(\n        <TestWrapper>\n          <BrokerLoansTable\n            loans={loans}\n            currency=\"XRP\"\n            displayCurrency={defaultDisplayCurrency}\n            asset={defaultAsset}\n          />\n        </TestWrapper>,\n      )\n\n      expect(\n        container.querySelector('.loans-pagination'),\n      ).not.toBeInTheDocument()\n    })\n\n    it('shows pagination when loans exceed one page', () => {\n      // More than 10 loans requires pagination\n      const loans = createMockLoans(15)\n\n      const { container } = render(\n        <TestWrapper>\n          <BrokerLoansTable\n            loans={loans}\n            currency=\"XRP\"\n            displayCurrency={defaultDisplayCurrency}\n            asset={defaultAsset}\n          />\n        </TestWrapper>,\n      )\n\n      expect(container.querySelector('.loans-pagination')).toBeInTheDocument()\n    })\n\n    it('displays correct page numbers for small number of pages', () => {\n      // 25 loans = 3 pages (at 10 per page)\n      const loans = createMockLoans(25)\n\n      render(\n        <TestWrapper>\n          <BrokerLoansTable\n            loans={loans}\n            currency=\"XRP\"\n            displayCurrency={defaultDisplayCurrency}\n            asset={defaultAsset}\n          />\n        </TestWrapper>,\n      )\n\n      // Should show pages 1, 2, 3\n      expect(screen.getByRole('button', { name: '1' })).toBeInTheDocument()\n      expect(screen.getByRole('button', { name: '2' })).toBeInTheDocument()\n      expect(screen.getByRole('button', { name: '3' })).toBeInTheDocument()\n    })\n\n    it('first page is active by default', () => {\n      const loans = createMockLoans(25)\n\n      render(\n        <TestWrapper>\n          <BrokerLoansTable\n            loans={loans}\n            currency=\"XRP\"\n            displayCurrency={defaultDisplayCurrency}\n            asset={defaultAsset}\n          />\n        </TestWrapper>,\n      )\n\n      const page1Btn = screen.getByRole('button', { name: '1' })\n      expect(page1Btn).toHaveClass('active')\n    })\n\n    it('Previous button is disabled on first page', () => {\n      const loans = createMockLoans(25)\n\n      const { container } = render(\n        <TestWrapper>\n          <BrokerLoansTable\n            loans={loans}\n            currency=\"XRP\"\n            displayCurrency={defaultDisplayCurrency}\n            asset={defaultAsset}\n          />\n        </TestWrapper>,\n      )\n\n      // The Pagination component has prev buttons as the first two .page-btn elements\n      const pageButtons = container.querySelectorAll('.page-btn')\n      const prevBtn = pageButtons[1] // Second button is single prev (first is double prev)\n      expect(prevBtn).toBeDisabled()\n    })\n\n    it('Next button is enabled on first page when more pages exist', () => {\n      const loans = createMockLoans(25)\n\n      const { container } = render(\n        <TestWrapper>\n          <BrokerLoansTable\n            loans={loans}\n            currency=\"XRP\"\n            displayCurrency={defaultDisplayCurrency}\n            asset={defaultAsset}\n          />\n        </TestWrapper>,\n      )\n\n      // The Pagination component has next buttons as the last two .page-btn elements\n      const pageButtons = container.querySelectorAll('.page-btn')\n      const nextBtn = pageButtons[2] // Third button is single next\n      expect(nextBtn).not.toBeDisabled()\n    })\n  })\n\n  /**\n   * =========================================\n   * SECTION 6: Pagination Navigation Tests\n   * =========================================\n   * Test clicking pagination controls to navigate between pages.\n   */\n  describe('Pagination Navigation', () => {\n    it('clicking Next navigates to next page', () => {\n      const loans = createMockLoans(25)\n\n      const { container } = render(\n        <TestWrapper>\n          <BrokerLoansTable\n            loans={loans}\n            currency=\"XRP\"\n            displayCurrency={defaultDisplayCurrency}\n            asset={defaultAsset}\n          />\n        </TestWrapper>,\n      )\n\n      // Click Next (third .page-btn)\n      const pageButtons = container.querySelectorAll('.page-btn')\n      fireEvent.click(pageButtons[2])\n\n      // Page 2 should now be active\n      const page2Btn = screen.getByRole('button', { name: '2' })\n      expect(page2Btn).toHaveClass('active')\n    })\n\n    it('clicking Previous navigates to previous page', () => {\n      const loans = createMockLoans(25)\n\n      const { container } = render(\n        <TestWrapper>\n          <BrokerLoansTable\n            loans={loans}\n            currency=\"XRP\"\n            displayCurrency={defaultDisplayCurrency}\n            asset={defaultAsset}\n          />\n        </TestWrapper>,\n      )\n\n      // Go to page 2 first (click Next - third .page-btn)\n      let pageButtons = container.querySelectorAll('.page-btn')\n      fireEvent.click(pageButtons[2])\n\n      // Click Previous (second .page-btn)\n      pageButtons = container.querySelectorAll('.page-btn')\n      fireEvent.click(pageButtons[1])\n\n      // Page 1 should be active again\n      const page1Btn = screen.getByRole('button', { name: '1' })\n      expect(page1Btn).toHaveClass('active')\n    })\n\n    it('clicking Last navigates to last page', () => {\n      // 25 loans = 3 pages\n      const loans = createMockLoans(25)\n\n      const { container } = render(\n        <TestWrapper>\n          <BrokerLoansTable\n            loans={loans}\n            currency=\"XRP\"\n            displayCurrency={defaultDisplayCurrency}\n            asset={defaultAsset}\n          />\n        </TestWrapper>,\n      )\n\n      // Click Last (fourth .page-btn - double arrow next)\n      const pageButtons = container.querySelectorAll('.page-btn')\n      fireEvent.click(pageButtons[3])\n\n      // Page 3 should be active\n      const page3Btn = screen.getByRole('button', { name: '3' })\n      expect(page3Btn).toHaveClass('active')\n    })\n\n    it('clicking page number navigates directly to that page', () => {\n      const loans = createMockLoans(25)\n\n      render(\n        <TestWrapper>\n          <BrokerLoansTable\n            loans={loans}\n            currency=\"XRP\"\n            displayCurrency={defaultDisplayCurrency}\n            asset={defaultAsset}\n          />\n        </TestWrapper>,\n      )\n\n      // Click page 3 directly\n      fireEvent.click(screen.getByRole('button', { name: '3' }))\n\n      const page3Btn = screen.getByRole('button', { name: '3' })\n      expect(page3Btn).toHaveClass('active')\n    })\n\n    it('Next button is disabled on last page', () => {\n      const loans = createMockLoans(25)\n\n      const { container } = render(\n        <TestWrapper>\n          <BrokerLoansTable\n            loans={loans}\n            currency=\"XRP\"\n            displayCurrency={defaultDisplayCurrency}\n            asset={defaultAsset}\n          />\n        </TestWrapper>,\n      )\n\n      // Go to last page (click Last - fourth .page-btn)\n      let pageButtons = container.querySelectorAll('.page-btn')\n      fireEvent.click(pageButtons[3])\n\n      // Next should be disabled (third .page-btn)\n      pageButtons = container.querySelectorAll('.page-btn')\n      expect(pageButtons[2]).toBeDisabled()\n    })\n\n    it('Last button is disabled on last page', () => {\n      const loans = createMockLoans(25)\n\n      const { container } = render(\n        <TestWrapper>\n          <BrokerLoansTable\n            loans={loans}\n            currency=\"XRP\"\n            displayCurrency={defaultDisplayCurrency}\n            asset={defaultAsset}\n          />\n        </TestWrapper>,\n      )\n\n      // Go to last page (click Last - fourth .page-btn)\n      let pageButtons = container.querySelectorAll('.page-btn')\n      fireEvent.click(pageButtons[3])\n\n      // Last should be disabled (fourth .page-btn)\n      pageButtons = container.querySelectorAll('.page-btn')\n      expect(pageButtons[3]).toBeDisabled()\n    })\n  })\n\n  /**\n   * =========================================\n   * SECTION 7: Pagination with Ellipsis Tests\n   * =========================================\n   * When there are many pages, ellipsis (...) should appear.\n   */\n  describe('Pagination with Ellipsis', () => {\n    it('shows ellipsis for many pages', () => {\n      // 100 loans = 10 pages, should show ellipsis\n      const loans = createMockLoans(100)\n\n      const { container } = render(\n        <TestWrapper>\n          <BrokerLoansTable\n            loans={loans}\n            currency=\"XRP\"\n            displayCurrency={defaultDisplayCurrency}\n            asset={defaultAsset}\n          />\n        </TestWrapper>,\n      )\n\n      // Should have ellipsis element (Pagination component uses .page-ellipsis)\n      const ellipsis = container.querySelectorAll('.page-ellipsis')\n      expect(ellipsis.length).toBeGreaterThan(0)\n    })\n\n    it('always shows first and last page numbers', () => {\n      // 100 loans = 10 pages\n      const loans = createMockLoans(100)\n\n      render(\n        <TestWrapper>\n          <BrokerLoansTable\n            loans={loans}\n            currency=\"XRP\"\n            displayCurrency={defaultDisplayCurrency}\n            asset={defaultAsset}\n          />\n        </TestWrapper>,\n      )\n\n      // First page (1) should always be visible\n      expect(screen.getByRole('button', { name: '1' })).toBeInTheDocument()\n      // Last page (10) should always be visible\n      expect(screen.getByRole('button', { name: '10' })).toBeInTheDocument()\n    })\n  })\n\n  /**\n   * =========================================\n   * SECTION 8: Filter + Pagination Interaction\n   * =========================================\n   * Changing filter should reset pagination to page 1.\n   */\n  describe('Filter and Pagination Interaction', () => {\n    it('resets to page 1 when filter changes', () => {\n      // Create 15 current loans and 15 defaulted loans\n      // This ensures pagination exists for both All Loans (30 = 3 pages) and Default (15 = 2 pages)\n      const currentLoans = createMockLoans(15, { Flags: 0 })\n      const defaultedLoans = createMockLoans(15, { Flags: LSF_LOAN_DEFAULT })\n      const loans = [...currentLoans, ...defaultedLoans]\n\n      const { container } = render(\n        <TestWrapper>\n          <BrokerLoansTable\n            loans={loans}\n            currency=\"XRP\"\n            displayCurrency={defaultDisplayCurrency}\n            asset={defaultAsset}\n          />\n        </TestWrapper>,\n      )\n\n      // Navigate to page 2 (click Next - third .page-btn)\n      const pageButtons = container.querySelectorAll('.page-btn')\n      fireEvent.click(pageButtons[2])\n      expect(screen.getByRole('button', { name: '2' })).toHaveClass('active')\n\n      // Change filter to Default using specific selector\n      const filterButtons = container.querySelector('.filter-buttons')\n      const defaultBtn = filterButtons?.querySelector(\n        '.filter-btn:nth-child(2)',\n      )\n      fireEvent.click(defaultBtn!)\n\n      // Should be back on page 1 (filter reset pagination)\n      expect(screen.getByRole('button', { name: '1' })).toHaveClass('active')\n    })\n\n    it('pagination updates based on filtered loan count', () => {\n      // 25 loans total, but only 5 are defaulted\n      const currentLoans = createMockLoans(20, { Flags: 0 })\n      const defaultedLoans = createMockLoans(5, { Flags: LSF_LOAN_DEFAULT })\n      const loans = [...currentLoans, ...defaultedLoans]\n\n      const { container } = render(\n        <TestWrapper>\n          <BrokerLoansTable\n            loans={loans}\n            currency=\"XRP\"\n            displayCurrency={defaultDisplayCurrency}\n            asset={defaultAsset}\n          />\n        </TestWrapper>,\n      )\n\n      // With all loans, should have 3 pages (25 loans / 10 per page)\n      expect(screen.getByRole('button', { name: '3' })).toBeInTheDocument()\n\n      // Filter to Default only (5 loans = 1 page)\n      fireEvent.click(screen.getByText('Default'))\n\n      // Pagination should disappear (only 5 loans fit on one page)\n      expect(\n        container.querySelector('.loans-pagination'),\n      ).not.toBeInTheDocument()\n    })\n  })\n\n  /**\n   * =========================================\n   * SECTION 9: Items Per Page Tests\n   * =========================================\n   * Verify correct number of items displayed per page.\n   */\n  describe('Items Per Page', () => {\n    it('displays maximum 10 loans per page', () => {\n      const loans = createMockLoans(25)\n\n      const { container } = render(\n        <TestWrapper>\n          <BrokerLoansTable\n            loans={loans}\n            currency=\"XRP\"\n            displayCurrency={defaultDisplayCurrency}\n            asset={defaultAsset}\n          />\n        </TestWrapper>,\n      )\n\n      // First page should show 10 loans\n      const rows = container.querySelectorAll('.loan-row')\n      expect(rows.length).toBe(10)\n    })\n\n    it('displays remaining loans on last page', () => {\n      // 25 loans: page 1 = 10, page 2 = 10, page 3 = 5\n      const loans = createMockLoans(25)\n\n      const { container } = render(\n        <TestWrapper>\n          <BrokerLoansTable\n            loans={loans}\n            currency=\"XRP\"\n            displayCurrency={defaultDisplayCurrency}\n            asset={defaultAsset}\n          />\n        </TestWrapper>,\n      )\n\n      // Go to last page (click Last - fourth .page-btn)\n      const pageButtons = container.querySelectorAll('.page-btn')\n      fireEvent.click(pageButtons[3])\n\n      // Should show 5 loans on page 3\n      const rows = container.querySelectorAll('.loan-row')\n      expect(rows.length).toBe(5)\n    })\n  })\n\n  /**\n   * =========================================\n   * SECTION 10: Currency Prop Tests\n   * =========================================\n   * Verify currency is passed through to LoanRow.\n   */\n  describe('Currency Prop tests', () => {\n    it('renders correctly with non-XRP/non-USD currency', () => {\n      // Test with EUR - an arbitrary IOU currency that is neither XRP nor RLUSD\n      // This ensures the component handles any currency type correctly\n      const loans = [\n        createMockLoan({\n          index: 'LOAN_EUR_1',\n          PrincipalOutstanding: '5000',\n          TotalValueOutstanding: '5250',\n        }),\n      ]\n\n      const { container } = render(\n        <TestWrapper>\n          <BrokerLoansTable\n            loans={loans}\n            currency=\"EUR\"\n            displayCurrency=\"EUR\"\n            asset={{ currency: 'EUR', issuer: 'rTestIssuer' }}\n          />\n        </TestWrapper>,\n      )\n\n      // Table should render with loan row\n      expect(container.querySelector('.loan-row')).toBeInTheDocument()\n\n      // Verify the amount-requested and outstanding-balance cells display EUR values\n      const loanRow = container.querySelector('.loan-row')!\n      const amountRequested = loanRow.querySelector('.amount-requested')\n      const outstandingBalance = loanRow.querySelector('.outstanding-balance')\n      expect(amountRequested).toHaveTextContent('5,000.00 EUR')\n      expect(outstandingBalance).toHaveTextContent('5,250.00 EUR')\n    })\n\n    it(`Render the BrokerLoans table with BTC exotic currency`, () => {\n      const loans = [\n        createMockLoan({\n          index: 'LOAN_BTC_1',\n          PrincipalOutstanding: '5000',\n          TotalValueOutstanding: '5250',\n        }),\n      ]\n\n      const btcAsset = { currency: 'BTC', issuer: 'rTestIssuer' }\n\n      const { container } = render(\n        <TestWrapper>\n          <BrokerLoansTable\n            loans={loans}\n            currency={btcAsset.currency}\n            displayCurrency={btcAsset.currency}\n            asset={btcAsset}\n            isCurrencySpecialSymbol={isCurrencyExoticSymbol(btcAsset.currency)}\n          />\n        </TestWrapper>,\n      )\n\n      // Table should render with loan row\n      expect(container.querySelector('.loan-row')).toBeInTheDocument()\n\n      // Currency should appear in the amount columns\n      const elementsWithCurrency = screen.getAllByText(/\\u20BF 5,250.00/)\n      expect(elementsWithCurrency.length).toBeGreaterThan(0)\n\n      // Verify XRP and USD do not appear - ensures EUR is used throughout\n      expect(screen.queryByText(/XRP/)).not.toBeInTheDocument()\n      expect(screen.queryByText(/USD/)).not.toBeInTheDocument()\n    })\n\n    it(`display a BTC-denominated Loan in USD currency`, () => {\n      const loans = [\n        createMockLoan({\n          index: 'LOAN_BTC_1',\n          PrincipalOutstanding: '5000',\n          TotalValueOutstanding: '5250',\n        }),\n      ]\n\n      const btcAsset = { currency: 'BTC', issuer: 'rTestIssuer' }\n\n      const { container } = render(\n        <TestWrapper>\n          <BrokerLoansTable\n            loans={loans}\n            currency={btcAsset.currency}\n            displayCurrency=\"USD\"\n            asset={btcAsset}\n            isCurrencySpecialSymbol={isCurrencyExoticSymbol(btcAsset.currency)}\n          />\n        </TestWrapper>,\n      )\n\n      // Table should render with loan row\n      expect(container.querySelector('.loan-row')).toBeInTheDocument()\n      const loanRow = container.querySelector('.loan-row')!\n      const amountRequested = loanRow.querySelector('.amount-requested')\n      const outstandingBalance = loanRow.querySelector('.outstanding-balance')\n      expect(amountRequested).toHaveTextContent('$7,500.00 USD')\n      expect(outstandingBalance).toHaveTextContent('$7,875.00 USD')\n    })\n\n    it('display a XRP-denominated Loan in XRP currency', () => {\n      const loans = [createMockLoan()]\n\n      // This should not throw - currency defaults to XRP because XRP is the asset of the Vault.\n      const { container } = render(\n        <TestWrapper>\n          <BrokerLoansTable\n            loans={loans}\n            currency={defaultAsset.currency}\n            displayCurrency={defaultDisplayCurrency}\n            asset={defaultAsset}\n            isCurrencySpecialSymbol={isCurrencyExoticSymbol(\n              defaultAsset.currency,\n            )}\n          />\n        </TestWrapper>,\n      )\n\n      // Verify the amount-requested and outstanding-balance cells display values\n      const loanRow = container.querySelector('.loan-row')!\n      const amountRequested = loanRow.querySelector('.amount-requested')\n      const outstandingBalance = loanRow.querySelector('.outstanding-balance')\n      expect(amountRequested).toHaveTextContent('\\uE900 10.0K')\n      expect(outstandingBalance).toHaveTextContent('\\uE900 10.5K')\n    })\n\n    it(`display a XRP-denominated Loan in USD currency`, () => {\n      const loans = [createMockLoan()]\n\n      // This should not throw - currency defaults to XRP because XRP is the asset of the Vault.\n      const { container } = render(\n        <TestWrapper>\n          <BrokerLoansTable\n            loans={loans}\n            currency={defaultAsset.currency}\n            displayCurrency=\"USD\"\n            asset={defaultAsset}\n            isCurrencySpecialSymbol={isCurrencyExoticSymbol(\n              defaultAsset.currency,\n            )}\n          />\n        </TestWrapper>,\n      )\n\n      // Verify the amount-requested and outstanding-balance cells display values\n      const loanRow = container.querySelector('.loan-row')!\n      const amountRequested = loanRow.querySelector('.amount-requested')\n      const outstandingBalance = loanRow.querySelector('.outstanding-balance')\n      expect(amountRequested).toHaveTextContent('$15.0K USD')\n      expect(outstandingBalance).toHaveTextContent('$15.8K USD')\n    })\n  })\n\n  /**\n   * =========================================\n   * SECTION 11: Original Principal Traversal Tests\n   * =========================================\n   * Test the ledger history traversal that fetches the original loan principal.\n   * These tests use SocketTestWrapper to enable the useQuery that calls getLedgerEntry.\n   */\n  describe('Original Principal Traversal', () => {\n    beforeEach(() => {\n      mockedGetLedgerEntry.mockReset()\n    })\n\n    it('traverses multiple ledger entries to find original principal', async () => {\n      const loans = [\n        createMockLoan({\n          index: 'LOAN_TRAVERSAL',\n          PreviousTxnLgrSeq: 300,\n          PrincipalOutstanding: '8000',\n          TotalValueOutstanding: '8500',\n        }),\n      ]\n\n      mockedGetLedgerEntry\n        .mockResolvedValueOnce({\n          node: { PreviousTxnLgrSeq: 200, PrincipalOutstanding: '9000' },\n        })\n        .mockResolvedValueOnce({\n          node: { PreviousTxnLgrSeq: 100, PrincipalOutstanding: '10000' },\n        })\n        .mockRejectedValueOnce(new Error('ledger entry not found'))\n\n      const { container } = render(\n        <SocketTestWrapper>\n          <BrokerLoansTable\n            loans={loans}\n            currency=\"EUR\"\n            displayCurrency=\"EUR\"\n            asset={{ currency: 'EUR', issuer: 'rTestIssuer' }}\n          />\n        </SocketTestWrapper>,\n      )\n\n      await waitFor(() => {\n        const loanRow = container.querySelector('.loan-row')!\n        const amountRequested = loanRow.querySelector('.amount-requested')\n        expect(amountRequested).toHaveTextContent('10.0K EUR')\n      })\n\n      const loanRow = container.querySelector('.loan-row')!\n      const outstandingBalance = loanRow.querySelector('.outstanding-balance')\n      expect(outstandingBalance).toHaveTextContent('8,500.00 EUR')\n    })\n\n    it('falls back to PrincipalOutstanding when first fetch throws (loan created one tx ago)', async () => {\n      const loans = [\n        createMockLoan({\n          index: 'LOAN_SINGLE_STEP',\n          PreviousTxnLgrSeq: 150,\n          PrincipalOutstanding: '9500',\n          TotalValueOutstanding: '9800',\n        }),\n      ]\n\n      mockedGetLedgerEntry.mockRejectedValueOnce(\n        new Error('ledger entry not found'),\n      )\n\n      const { container } = render(\n        <SocketTestWrapper>\n          <BrokerLoansTable\n            loans={loans}\n            currency=\"EUR\"\n            displayCurrency=\"EUR\"\n            asset={{ currency: 'EUR', issuer: 'rTestIssuer' }}\n          />\n        </SocketTestWrapper>,\n      )\n\n      await waitFor(() => {\n        const loanRow = container.querySelector('.loan-row')!\n        const amountRequested = loanRow.querySelector('.amount-requested')\n        expect(amountRequested).toHaveTextContent('9,500.00 EUR')\n      })\n    })\n\n    it('uses PrincipalOutstanding directly when no PreviousTxnLgrSeq exists', async () => {\n      const loans = [\n        createMockLoan({\n          index: 'LOAN_NO_PREV',\n          PrincipalOutstanding: '10000',\n          TotalValueOutstanding: '10500',\n        }),\n      ]\n\n      const { container } = render(\n        <SocketTestWrapper>\n          <BrokerLoansTable\n            loans={loans}\n            currency=\"EUR\"\n            displayCurrency=\"EUR\"\n            asset={{ currency: 'EUR', issuer: 'rTestIssuer' }}\n          />\n        </SocketTestWrapper>,\n      )\n\n      await waitFor(() => {\n        const loanRow = container.querySelector('.loan-row')!\n        const amountRequested = loanRow.querySelector('.amount-requested')\n        expect(amountRequested).toHaveTextContent('10.0K EUR')\n      })\n\n      expect(mockedGetLedgerEntry).not.toHaveBeenCalled()\n    })\n\n    it('falls back to PrincipalOutstanding on generic error', async () => {\n      const loans = [\n        createMockLoan({\n          index: 'LOAN_ERROR',\n          PreviousTxnLgrSeq: 300,\n          PrincipalOutstanding: '8000',\n          TotalValueOutstanding: '8500',\n        }),\n      ]\n\n      mockedGetLedgerEntry.mockRejectedValue(new Error('network error'))\n\n      const { container } = render(\n        <SocketTestWrapper>\n          <BrokerLoansTable\n            loans={loans}\n            currency=\"EUR\"\n            displayCurrency=\"EUR\"\n            asset={{ currency: 'EUR', issuer: 'rTestIssuer' }}\n          />\n        </SocketTestWrapper>,\n      )\n\n      await waitFor(() => {\n        const loanRow = container.querySelector('.loan-row')!\n        const amountRequested = loanRow.querySelector('.amount-requested')\n        expect(amountRequested).toHaveTextContent('8,000.00 EUR')\n      })\n    })\n\n    it('stops traversal when PreviousTxnLgrSeq does not change (prevents infinite loop)', async () => {\n      const loans = [\n        createMockLoan({\n          index: 'LOAN_SAME_SEQ',\n          PreviousTxnLgrSeq: 200,\n          PrincipalOutstanding: '8000',\n          TotalValueOutstanding: '8500',\n        }),\n      ]\n\n      // Returns the same PreviousTxnLgrSeq — the guard should break the loop\n      mockedGetLedgerEntry.mockResolvedValue({\n        node: { PreviousTxnLgrSeq: 200, PrincipalOutstanding: '9000' },\n      })\n\n      const { container } = render(\n        <SocketTestWrapper>\n          <BrokerLoansTable\n            loans={loans}\n            currency=\"EUR\"\n            displayCurrency=\"EUR\"\n            asset={{ currency: 'EUR', issuer: 'rTestIssuer' }}\n          />\n        </SocketTestWrapper>,\n      )\n\n      await waitFor(() => {\n        const loanRow = container.querySelector('.loan-row')!\n        const amountRequested = loanRow.querySelector('.amount-requested')\n        expect(amountRequested).toHaveTextContent('9,000.00 EUR')\n      })\n\n      expect(mockedGetLedgerEntry).toHaveBeenCalledTimes(1)\n    })\n\n    it('shows loading state while traversal is in progress', () => {\n      const loans = [\n        createMockLoan({\n          index: 'LOAN_LOADING',\n          PreviousTxnLgrSeq: 300,\n          PrincipalOutstanding: '8000',\n          TotalValueOutstanding: '8500',\n        }),\n      ]\n\n      // Never-resolving promise to keep the query in loading state\n      mockedGetLedgerEntry.mockReturnValue(new Promise(() => {}))\n\n      const { container } = render(\n        <SocketTestWrapper>\n          <BrokerLoansTable\n            loans={loans}\n            currency=\"EUR\"\n            displayCurrency=\"EUR\"\n            asset={{ currency: 'EUR', issuer: 'rTestIssuer' }}\n          />\n        </SocketTestWrapper>,\n      )\n\n      const loanRow = container.querySelector('.loan-row')!\n      const amountRequested = loanRow.querySelector('.amount-requested')\n      expect(amountRequested).toHaveTextContent('--')\n    })\n  })\n\n  /**\n   * =========================================\n   * SECTION 12: Currency Display Regression Tests\n   * =========================================\n   * Guard against empty displayCurrency reaching LoanRow, which causes\n   * amounts to render without a currency label (e.g., \"5,000.00 \" with\n   * trailing space). This was triggered by MPT token vaults where\n   * CurrencyToggle passes '' on native currency click.\n   */\n  describe('Currency Display Regression', () => {\n    const MPT_ID = '00000001A407AF5856CEFF0100000000000000000000000000000000'\n    const SHORTENED_MPT = '00000001A4...0000000000'\n\n    it('empty displayCurrency produces amounts with trailing space and no currency label', () => {\n      const loans = [\n        createMockLoan({\n          index: 'LOAN_EMPTY_DC',\n          PrincipalOutstanding: '5000',\n          TotalValueOutstanding: '5250',\n        }),\n      ]\n\n      const { container } = render(\n        <TestWrapper>\n          <BrokerLoansTable\n            loans={loans}\n            currency=\"EUR\"\n            displayCurrency=\"\"\n            asset={{ currency: 'EUR', issuer: 'rTestIssuer' }}\n          />\n        </TestWrapper>,\n      )\n\n      const loanRow = container.querySelector('.loan-row')!\n      const amountRequested = loanRow.querySelector('.amount-requested')\n      const outstandingBalance = loanRow.querySelector('.outstanding-balance')\n\n      expect(amountRequested?.textContent).toBe('5,000.00 EUR')\n      expect(outstandingBalance?.textContent).toBe('5,250.00 EUR')\n    })\n\n    it('MPT token displays amounts with shortened MPTID suffix', () => {\n      const loans = [\n        createMockLoan({\n          index: 'LOAN_MPT_NATIVE',\n          PrincipalOutstanding: '5000',\n          TotalValueOutstanding: '5250',\n        }),\n      ]\n\n      const { container } = render(\n        <TestWrapper>\n          <BrokerLoansTable\n            loans={loans}\n            currency={SHORTENED_MPT}\n            displayCurrency={SHORTENED_MPT}\n            asset={{\n              currency: undefined as any,\n              mpt_issuance_id: MPT_ID,\n            }}\n          />\n        </TestWrapper>,\n      )\n\n      const loanRow = container.querySelector('.loan-row')!\n      const amountRequested = loanRow.querySelector('.amount-requested')\n      const outstandingBalance = loanRow.querySelector('.outstanding-balance')\n\n      expect(amountRequested).toHaveTextContent(`5,000.00 ${SHORTENED_MPT}`)\n      expect(outstandingBalance).toHaveTextContent(`5,250.00 ${SHORTENED_MPT}`)\n    })\n  })\n\n  /**\n   * =========================================\n   * SECTION 13: MPT Ticker Display in LoanRow\n   * =========================================\n   * When the vault asset is an MPT with XLS-89 metadata containing a ticker,\n   * the ticker should be used as the currency label in loan amounts instead\n   * of the shortened MPT ID.\n   */\n  describe('MPT Ticker Display in LoanRow', () => {\n    const MPT_ID = '00000001A407AF5856CEFF0100000000000000000000000000000000'\n    const MPT_TICKER = 'VTKN'\n\n    it('displays MPT ticker in amount columns instead of shortened MPT ID', () => {\n      const loans = [\n        createMockLoan({\n          index: 'LOAN_MPT_TICKER',\n          PrincipalOutstanding: '5000',\n          TotalValueOutstanding: '5250',\n        }),\n      ]\n\n      const { container } = render(\n        <TestWrapper>\n          <BrokerLoansTable\n            loans={loans}\n            currency={MPT_TICKER}\n            displayCurrency={MPT_TICKER}\n            asset={{\n              currency: undefined as any,\n              mpt_issuance_id: MPT_ID,\n            }}\n          />\n        </TestWrapper>,\n      )\n\n      const loanRow = container.querySelector('.loan-row')!\n      const amountRequested = loanRow.querySelector('.amount-requested')\n      const outstandingBalance = loanRow.querySelector('.outstanding-balance')\n\n      expect(amountRequested).toHaveTextContent('5,000.00 VTKN')\n      expect(amountRequested).not.toHaveTextContent('00000001A4')\n      expect(outstandingBalance).toHaveTextContent('5,250.00 VTKN')\n      expect(outstandingBalance).not.toHaveTextContent('00000001A4')\n    })\n\n    it('displays ticker in expanded loan detail fees', async () => {\n      const loans = [\n        createMockLoan({\n          index: 'LOAN_MPT_FEES',\n          LoanOriginationFee: '100',\n          LoanServiceFee: '50',\n        }),\n      ]\n\n      const { container } = render(\n        <SocketTestWrapper>\n          <BrokerLoansTable\n            loans={loans}\n            currency={MPT_TICKER}\n            displayCurrency={MPT_TICKER}\n            asset={{\n              currency: undefined as any,\n              mpt_issuance_id: MPT_ID,\n            }}\n          />\n        </SocketTestWrapper>,\n      )\n\n      // Expand the loan row\n      const loanButton = container.querySelector('.loan-row-main')!\n      fireEvent.click(loanButton)\n\n      await waitFor(() => {\n        const details = container.querySelector('.loan-row-details')\n        expect(details).toBeInTheDocument()\n\n        // Fee values should use the ticker\n        const originationFee = screen\n          .getByText('Loan Origination Fee')\n          .closest('.detail-item')\n        expect(\n          originationFee?.querySelector('.detail-value'),\n        ).toHaveTextContent('100.00 VTKN')\n\n        const serviceFee = screen\n          .getByText('Loan Service Fee')\n          .closest('.detail-item')\n        expect(serviceFee?.querySelector('.detail-value')).toHaveTextContent(\n          '50.00 VTKN',\n        )\n      })\n    })\n  })\n})\n"
  },
  {
    "path": "src/containers/Vault/VaultLoans/test/VaultLoans.test.tsx",
    "content": "/**\n * VaultLoans Component Unit Tests\n *\n * This test suite validates the VaultLoans component which displays\n * loan brokers and their associated loans for a vault.\n *\n * Key concepts tested:\n * - Basic rendering (section title, divider)\n * - Loading state with Loader component\n * - Empty state when no loan brokers exist\n * - Broker tabs display with loan counts\n * - Broker selection and tab switching\n * - Error handling and analytics tracking\n */\n\nimport { render, screen, waitFor, fireEvent } from '@testing-library/react'\nimport { I18nextProvider } from 'react-i18next'\nimport { BrowserRouter as Router } from 'react-router'\nimport { QueryClientProvider, QueryClient } from 'react-query'\nimport i18n from '../../../../i18n/testConfigEnglish'\nimport SocketContext from '../../../shared/SocketContext'\nimport { VaultLoans } from '../index'\nimport { getAccountObjects } from '../../../../rippled/lib/rippled'\nimport Mock = jest.Mock\n\n// Default test props\nconst defaultDisplayCurrency = 'XRP'\nconst defaultAsset = { currency: 'XRP' }\n\n// Mock the rippled library to control API responses\njest.mock('../../../../rippled/lib/rippled', () => ({\n  getAccountObjects: jest.fn(),\n}))\n\n// Mock the analytics hook for error tracking\nconst mockTrackException = jest.fn()\njest.mock('../../../shared/analytics', () => ({\n  useAnalytics: () => ({\n    trackException: mockTrackException,\n  }),\n}))\n\n// Mock the token to USD rate hook\nconst mockTokenToUSDRate = jest.fn()\njest.mock('../../../shared/hooks/useTokenToUSDRate', () => ({\n  useTokenToUSDRate: (token: any) => {\n    const result = mockTokenToUSDRate(token)\n    if (typeof result === 'number') {\n      return { rate: result, isAvailable: result > 0, isLoading: false }\n    }\n    return result\n  },\n}))\n\nconst mockedGetAccountObjects = getAccountObjects as Mock\n\n// Mock socket client - represents the WebSocket connection to rippled\nconst mockSocket = {} as any\n\n/**\n * Creates a fresh QueryClient for each test\n * Disables retries and caching to make tests predictable\n */\nconst createTestQueryClient = () =>\n  new QueryClient({\n    defaultOptions: {\n      queries: {\n        retry: false,\n        staleTime: 0,\n        cacheTime: 0,\n      },\n    },\n  })\n\n/**\n * TestWrapper Component\n *\n * Provides all necessary context providers for the VaultLoans component:\n * - I18nextProvider: Internationalization for translated text\n * - Router: React Router for Account link components\n * - SocketContext: WebSocket connection for rippled queries\n * - QueryClientProvider: React Query for data fetching/caching\n */\nconst createTestWrapper =\n  (queryClient: QueryClient) =>\n  ({ children }: { children: React.ReactNode }) => (\n    <I18nextProvider i18n={i18n}>\n      <Router>\n        <SocketContext.Provider value={mockSocket}>\n          <QueryClientProvider client={queryClient}>\n            {children}\n          </QueryClientProvider>\n        </SocketContext.Provider>\n      </Router>\n    </I18nextProvider>\n  )\n\n/**\n * Mock loan broker data generator\n *\n * Creates a loan broker object matching the LoanBrokerData interface.\n * Loan brokers are entities authorized to create loans from a vault.\n */\nconst createMockBroker = (overrides: any = {}) => ({\n  index: `BROKER_${Math.random().toString(36).substring(7).toUpperCase()}`,\n  LedgerEntryType: 'LoanBroker',\n  Account: `rBrokerAccount${Math.random().toString(36).substring(7)}`,\n  Owner: 'rOwnerAccount123',\n  VaultID: 'TEST_VAULT_ID_123',\n  ManagementFeeRate: 500, // 0.05% in 1/10th basis points\n  CoverAvailable: '100000',\n  CoverRateMinimum: 1000,\n  CoverRateLiquidation: 500,\n  DebtTotal: '50000',\n  DebtMaximum: '1000000',\n  ...overrides,\n})\n\n/**\n * Mock loan data generator\n *\n * Creates a loan object matching the LoanData interface.\n * Each loan is associated with a borrower and a loan broker.\n */\nconst createMockLoan = (overrides: any = {}) => ({\n  index: `LOAN_${Math.random().toString(36).substring(7).toUpperCase()}`,\n  LedgerEntryType: 'Loan',\n  Borrower: `rBorrower${Math.random().toString(36).substring(7)}`,\n  LoanBrokerID: 'BROKER_123',\n  PrincipalOutstanding: '10000',\n  TotalValueOutstanding: '10500',\n  InterestRate: 500,\n  LateInterestRate: 1000,\n  CloseInterestRate: 0,\n  LoanOriginationFee: '100',\n  LoanServiceFee: '50',\n  LatePaymentFee: '25',\n  ClosePaymentFee: '200',\n  OverpaymentFee: 100,\n  PaymentInterval: 2592000, // ~30 days (monthly)\n  PaymentRemaining: 12,\n  GracePeriod: 432000, // 5 days\n  StartDate: 750000000,\n  NextPaymentDueDate: 752592000,\n  Flags: 0,\n  ...overrides,\n})\n\ndescribe('VaultLoans Component', () => {\n  let queryClient: QueryClient\n\n  beforeEach(() => {\n    jest.clearAllMocks()\n    queryClient = createTestQueryClient()\n\n    // Default mock: XRP = 1.5, RLUSD = 1.0, others = 0 (no conversion)\n    mockTokenToUSDRate.mockImplementation((token: any) => {\n      if (!token) return 0\n      if (token.currency === 'XRP') return 1.5\n      if (token.currency === 'RLUSD') return 1.0\n      return 0\n    })\n  })\n\n  afterEach(() => {\n    queryClient.clear()\n  })\n\n  /**\n   * =========================================\n   * SECTION 1: Basic Rendering Tests\n   * =========================================\n   * These tests verify the component renders correctly with its\n   * structural elements: title and divider.\n   */\n  describe('Basic Rendering', () => {\n    it('renders the loans section title', async () => {\n      // Setup: Return empty brokers list\n      mockedGetAccountObjects.mockResolvedValue({\n        account_objects: [],\n      })\n\n      const TestWrapper = createTestWrapper(queryClient)\n      render(\n        <TestWrapper>\n          <VaultLoans\n            vaultId=\"TEST_VAULT_ID\"\n            vaultPseudoAccount=\"rTestPseudoAccount\"\n            displayCurrency={defaultDisplayCurrency}\n            asset={defaultAsset}\n          />\n        </TestWrapper>,\n      )\n\n      // The component should display \"Loans\" as the section title\n      await waitFor(() => {\n        const title = screen.getByText('Loans')\n        expect(title.tagName).toBe('H2')\n        expect(title).toHaveClass('vault-loans-title')\n      })\n    })\n\n    it('renders the divider element', async () => {\n      mockedGetAccountObjects.mockResolvedValue({\n        account_objects: [],\n      })\n\n      const TestWrapper = createTestWrapper(queryClient)\n      const { container } = render(\n        <TestWrapper>\n          <VaultLoans\n            vaultId=\"TEST_VAULT_ID\"\n            vaultPseudoAccount=\"rTestPseudoAccount\"\n            displayCurrency={defaultDisplayCurrency}\n            asset={defaultAsset}\n          />\n        </TestWrapper>,\n      )\n\n      await waitFor(() => {\n        expect(\n          container.querySelector('.vault-loans-divider'),\n        ).toBeInTheDocument()\n      })\n    })\n\n    it('renders correctly with non-XRP/non-RLUSD asset currency', async () => {\n      // Test with EUR - a currency that is neither XRP nor RLUSD\n      // This ensures the component handles arbitrary IOU currencies\n      const broker = createMockBroker({\n        index: 'BROKER_EUR',\n        VaultID: 'TEST_VAULT_ID',\n        DebtTotal: '25000',\n        DebtMaximum: '500000',\n      })\n\n      mockedGetAccountObjects\n        .mockResolvedValueOnce({ account_objects: [broker] })\n        .mockResolvedValue({ account_objects: [] })\n\n      const TestWrapper = createTestWrapper(queryClient)\n      render(\n        <TestWrapper>\n          <VaultLoans\n            vaultId=\"TEST_VAULT_ID\"\n            vaultPseudoAccount=\"rTestPseudoAccount\"\n            displayCurrency={defaultDisplayCurrency}\n            asset={{ currency: 'EUR', issuer: 'rTestIssuer' }}\n          />\n        </TestWrapper>,\n      )\n\n      await waitFor(() => {\n        // Component should render with EUR currency in debt amounts\n        const totalDebtMetric = screen\n          .getByText('Total Debt')\n          .closest('.debt-metric')\n        expect(\n          totalDebtMetric?.querySelector('.metric-value'),\n        ).toHaveTextContent('25.00K EUR')\n        const maxDebtMetric = screen\n          .getByText('Maximum Debt')\n          .closest('.debt-metric')\n        expect(maxDebtMetric?.querySelector('.metric-value')).toHaveTextContent(\n          '500.00K EUR',\n        )\n      })\n    })\n  })\n\n  /**\n   * =========================================\n   * SECTION 2: Loading State Tests\n   * =========================================\n   * When fetching loan brokers, a Loader should be displayed.\n   */\n  describe('Loading State', () => {\n    it('displays loader while fetching loan brokers', async () => {\n      // Create a pending promise to keep loading state\n      let resolvePromise: (value: any) => void\n      const pendingPromise = new Promise((resolve) => {\n        resolvePromise = resolve\n      })\n      mockedGetAccountObjects.mockReturnValue(pendingPromise)\n\n      const TestWrapper = createTestWrapper(queryClient)\n      const { container } = render(\n        <TestWrapper>\n          <VaultLoans\n            vaultId=\"TEST_VAULT_ID\"\n            vaultPseudoAccount=\"rTestPseudoAccount\"\n            displayCurrency={defaultDisplayCurrency}\n            asset={defaultAsset}\n          />\n        </TestWrapper>,\n      )\n\n      // Loader should be visible while fetching\n      expect(container.querySelector('.loader')).toBeInTheDocument()\n\n      // Clean up\n      resolvePromise!({ account_objects: [] })\n    })\n\n    it('hides loader after loan brokers are loaded', async () => {\n      mockedGetAccountObjects.mockResolvedValue({\n        account_objects: [createMockBroker({ VaultID: 'TEST_VAULT_ID' })],\n      })\n\n      const TestWrapper = createTestWrapper(queryClient)\n      const { container } = render(\n        <TestWrapper>\n          <VaultLoans\n            vaultId=\"TEST_VAULT_ID\"\n            vaultPseudoAccount=\"rTestPseudoAccount\"\n            displayCurrency={defaultDisplayCurrency}\n            asset={defaultAsset}\n          />\n        </TestWrapper>,\n      )\n\n      await waitFor(() => {\n        expect(container.querySelector('.loader')).not.toBeInTheDocument()\n      })\n    })\n  })\n\n  /**\n   * =========================================\n   * SECTION 3: Empty State Tests\n   * =========================================\n   * When no loan brokers exist for a vault, display appropriate message.\n   */\n  describe('Empty State', () => {\n    it('displays empty message when no loan brokers exist', async () => {\n      mockedGetAccountObjects.mockResolvedValue({\n        account_objects: [],\n      })\n\n      const TestWrapper = createTestWrapper(queryClient)\n      render(\n        <TestWrapper>\n          <VaultLoans\n            vaultId=\"TEST_VAULT_ID\"\n            vaultPseudoAccount=\"rTestPseudoAccount\"\n            displayCurrency={defaultDisplayCurrency}\n            asset={defaultAsset}\n          />\n        </TestWrapper>,\n      )\n\n      await waitFor(() => {\n        expect(\n          screen.getByText('No loan brokers have been set up for this vault.'),\n        ).toBeInTheDocument()\n      })\n    })\n\n    it('displays empty message when brokers exist but none match vaultId', async () => {\n      // Return brokers that don't match the requested vaultId\n      mockedGetAccountObjects.mockResolvedValue({\n        account_objects: [createMockBroker({ VaultID: 'DIFFERENT_VAULT_ID' })],\n      })\n\n      const TestWrapper = createTestWrapper(queryClient)\n      render(\n        <TestWrapper>\n          <VaultLoans\n            vaultId=\"TEST_VAULT_ID\"\n            vaultPseudoAccount=\"rTestPseudoAccount\"\n            displayCurrency={defaultDisplayCurrency}\n            asset={defaultAsset}\n          />\n        </TestWrapper>,\n      )\n\n      // Should show empty message since no brokers match the vault ID\n      await waitFor(() => {\n        expect(\n          screen.getByText('No loan brokers have been set up for this vault.'),\n        ).toBeInTheDocument()\n      })\n    })\n  })\n\n  /**\n   * =========================================\n   * SECTION 4: Broker Tabs Display Tests\n   * =========================================\n   * When loan brokers exist, tabs should be displayed for selection.\n   */\n  describe('Broker Tabs Display', () => {\n    it('renders broker tabs when brokers exist', async () => {\n      const broker1 = createMockBroker({\n        index: 'BROKER_001',\n        VaultID: 'TEST_VAULT_ID',\n        Account: 'rBrokerAccount1',\n      })\n      const broker2 = createMockBroker({\n        index: 'BROKER_002',\n        VaultID: 'TEST_VAULT_ID',\n        Account: 'rBrokerAccount2',\n      })\n\n      // First call returns brokers, subsequent calls return empty loans\n      mockedGetAccountObjects\n        .mockResolvedValueOnce({ account_objects: [broker1, broker2] })\n        .mockResolvedValue({ account_objects: [] })\n\n      const TestWrapper = createTestWrapper(queryClient)\n      const { container } = render(\n        <TestWrapper>\n          <VaultLoans\n            vaultId=\"TEST_VAULT_ID\"\n            vaultPseudoAccount=\"rTestPseudoAccount\"\n            displayCurrency={defaultDisplayCurrency}\n            asset={defaultAsset}\n          />\n        </TestWrapper>,\n      )\n\n      await waitFor(() => {\n        // Should render broker tabs container\n        expect(container.querySelector('.broker-tabs')).toBeInTheDocument()\n        // Should render two tab buttons\n        const tabs = container.querySelectorAll('.broker-tab')\n        expect(tabs.length).toBe(2)\n      })\n    })\n\n    it('displays broker numbers in tabs (Broker 1, Broker 2, etc.)', async () => {\n      const broker1 = createMockBroker({\n        index: 'BROKER_001',\n        VaultID: 'TEST_VAULT_ID',\n      })\n      const broker2 = createMockBroker({\n        index: 'BROKER_002',\n        VaultID: 'TEST_VAULT_ID',\n      })\n\n      mockedGetAccountObjects\n        .mockResolvedValueOnce({ account_objects: [broker1, broker2] })\n        .mockResolvedValue({ account_objects: [] })\n\n      const TestWrapper = createTestWrapper(queryClient)\n      render(\n        <TestWrapper>\n          <VaultLoans\n            vaultId=\"TEST_VAULT_ID\"\n            vaultPseudoAccount=\"rTestPseudoAccount\"\n            displayCurrency={defaultDisplayCurrency}\n            asset={defaultAsset}\n          />\n        </TestWrapper>,\n      )\n\n      await waitFor(() => {\n        // Tabs show \"Broker N (count)\" format\n        expect(screen.getByText(/Broker 1/)).toBeInTheDocument()\n        expect(screen.getByText(/Broker 2/)).toBeInTheDocument()\n      })\n    })\n\n    it('first broker tab is selected by default', async () => {\n      const broker = createMockBroker({\n        index: 'BROKER_001',\n        VaultID: 'TEST_VAULT_ID',\n      })\n\n      mockedGetAccountObjects\n        .mockResolvedValueOnce({ account_objects: [broker] })\n        .mockResolvedValue({ account_objects: [] })\n\n      const TestWrapper = createTestWrapper(queryClient)\n      const { container } = render(\n        <TestWrapper>\n          <VaultLoans\n            vaultId=\"TEST_VAULT_ID\"\n            vaultPseudoAccount=\"rTestPseudoAccount\"\n            displayCurrency={defaultDisplayCurrency}\n            asset={defaultAsset}\n          />\n        </TestWrapper>,\n      )\n\n      await waitFor(() => {\n        const selectedTab = container.querySelector('.broker-tab.selected')\n        expect(selectedTab).toBeInTheDocument()\n        expect(selectedTab).toHaveTextContent('Broker 1')\n      })\n    })\n\n    it('displays broker tabs in descending order of loan count', async () => {\n      // Create brokers - broker1 has fewer loans, broker2 has more loans\n      const broker1 = createMockBroker({\n        index: 'BROKER_FEW_LOANS',\n        VaultID: 'TEST_VAULT_ID',\n        Account: 'rBrokerAccount1',\n      })\n      const broker2 = createMockBroker({\n        index: 'BROKER_MANY_LOANS',\n        VaultID: 'TEST_VAULT_ID',\n        Account: 'rBrokerAccount2',\n      })\n      const broker3 = createMockBroker({\n        index: 'BROKER_TOO_MANY_LOANS',\n        VaultID: 'TEST_VAULT_ID',\n        Account: 'rBrokerAccount3',\n      })\n\n      // Create loans - broker1 has 1 loan, broker2 has 5 loans\n      const broker1Loans = [\n        createMockLoan({ LoanBrokerID: 'BROKER_FEW_LOANS' }),\n      ]\n      const broker2Loans = [\n        createMockLoan({ LoanBrokerID: 'BROKER_MANY_LOANS' }),\n        createMockLoan({ LoanBrokerID: 'BROKER_MANY_LOANS' }),\n        createMockLoan({ LoanBrokerID: 'BROKER_MANY_LOANS' }),\n        createMockLoan({ LoanBrokerID: 'BROKER_MANY_LOANS' }),\n        createMockLoan({ LoanBrokerID: 'BROKER_MANY_LOANS' }),\n      ]\n      const broker3Loans = [\n        createMockLoan({ LoanBrokerID: 'BROKER_TOO_MANY_LOANS' }),\n        createMockLoan({ LoanBrokerID: 'BROKER_TOO_MANY_LOANS' }),\n        createMockLoan({ LoanBrokerID: 'BROKER_TOO_MANY_LOANS' }),\n        createMockLoan({ LoanBrokerID: 'BROKER_TOO_MANY_LOANS' }),\n        createMockLoan({ LoanBrokerID: 'BROKER_TOO_MANY_LOANS' }),\n        createMockLoan({ LoanBrokerID: 'BROKER_TOO_MANY_LOANS' }),\n        createMockLoan({ LoanBrokerID: 'BROKER_TOO_MANY_LOANS' }),\n        createMockLoan({ LoanBrokerID: 'BROKER_TOO_MANY_LOANS' }),\n        createMockLoan({ LoanBrokerID: 'BROKER_TOO_MANY_LOANS' }),\n        createMockLoan({ LoanBrokerID: 'BROKER_TOO_MANY_LOANS' }),\n      ]\n\n      // Mock returns brokers in order [broker1, broker2] (broker1 first)\n      // But after sorting by loan count, broker2 should appear first\n      mockedGetAccountObjects\n        .mockResolvedValueOnce({ account_objects: [broker1, broker2, broker3] }) // brokers\n        .mockResolvedValueOnce({ account_objects: broker1Loans }) // loans for broker1\n        .mockResolvedValueOnce({ account_objects: broker2Loans }) // loans for broker2\n        .mockResolvedValueOnce({ account_objects: broker3Loans }) // loans for broker2\n\n      const TestWrapper = createTestWrapper(queryClient)\n      const { container } = render(\n        <TestWrapper>\n          <VaultLoans\n            vaultId=\"TEST_VAULT_ID\"\n            vaultPseudoAccount=\"rTestPseudoAccount\"\n            displayCurrency={defaultDisplayCurrency}\n            asset={defaultAsset}\n          />\n        </TestWrapper>,\n      )\n\n      await waitFor(() => {\n        const tabs = container.querySelectorAll('.broker-tab')\n        expect(tabs.length).toBe(3)\n\n        // First tab should be broker with 10 loans (sorted descending by loan count)\n        expect(tabs[0]).toHaveTextContent('Broker 1 (10)')\n        // Second tab should be broker with 5 loans\n        expect(tabs[1]).toHaveTextContent('Broker 2 (5)')\n        // Second tab should be broker with 1 loan\n        expect(tabs[2]).toHaveTextContent('Broker 3 (1)')\n      })\n    })\n  })\n\n  /**\n   * =========================================\n   * SECTION 5: Broker Tab Selection Tests\n   * =========================================\n   * Users should be able to switch between broker tabs.\n   */\n  describe('Broker Tab Selection', () => {\n    it('switches to selected broker when tab is clicked', async () => {\n      const broker1 = createMockBroker({\n        index: 'BROKER_001',\n        VaultID: 'TEST_VAULT_ID',\n        Account: 'rBrokerAccount1',\n      })\n      const broker2 = createMockBroker({\n        index: 'BROKER_002',\n        VaultID: 'TEST_VAULT_ID',\n        Account: 'rBrokerAccount2',\n      })\n\n      mockedGetAccountObjects\n        .mockResolvedValueOnce({ account_objects: [broker1, broker2] })\n        .mockResolvedValue({ account_objects: [] })\n\n      const TestWrapper = createTestWrapper(queryClient)\n      const { container } = render(\n        <TestWrapper>\n          <VaultLoans\n            vaultId=\"TEST_VAULT_ID\"\n            vaultPseudoAccount=\"rTestPseudoAccount\"\n            displayCurrency={defaultDisplayCurrency}\n            asset={defaultAsset}\n          />\n        </TestWrapper>,\n      )\n\n      await waitFor(() => {\n        expect(screen.getByText(/Broker 2/)).toBeInTheDocument()\n      })\n\n      // Click on Broker 2 tab\n      fireEvent.click(screen.getByText(/Broker 2/))\n\n      // Broker 2 tab should now be selected\n      await waitFor(() => {\n        const selectedTab = container.querySelector('.broker-tab.selected')\n        expect(selectedTab).toHaveTextContent('Broker 2')\n      })\n    })\n  })\n\n  /**\n   * =========================================\n   * SECTION 6: Loan Count Display Tests\n   * =========================================\n   * Each broker tab should show the count of loans.\n   */\n  describe('Loan Count Display', () => {\n    it('displays loan count in broker tabs', async () => {\n      const brokerId = 'BROKER_WITH_LOANS'\n      const broker = createMockBroker({\n        index: brokerId,\n        VaultID: 'TEST_VAULT_ID',\n        Account: 'rBrokerAccount1',\n      })\n\n      // Create loans associated with this broker\n      const loans = [\n        createMockLoan({ LoanBrokerID: brokerId }),\n        createMockLoan({ LoanBrokerID: brokerId }),\n        createMockLoan({ LoanBrokerID: brokerId }),\n      ]\n\n      // First call: get brokers, Second call: get loan count, Third call: get loans for display\n      mockedGetAccountObjects\n        .mockResolvedValueOnce({ account_objects: [broker] }) // brokers\n        .mockResolvedValueOnce({ account_objects: loans }) // loan count query\n        .mockResolvedValueOnce({ account_objects: loans }) // loans for BrokerDetails\n\n      const TestWrapper = createTestWrapper(queryClient)\n      render(\n        <TestWrapper>\n          <VaultLoans\n            vaultId=\"TEST_VAULT_ID\"\n            vaultPseudoAccount=\"rTestPseudoAccount\"\n            displayCurrency={defaultDisplayCurrency}\n            asset={defaultAsset}\n          />\n        </TestWrapper>,\n      )\n\n      // Tab should show \"Broker 1 (3)\" format\n      await waitFor(() => {\n        expect(screen.getByText(/Broker 1 \\(3\\)/)).toBeInTheDocument()\n      })\n    })\n\n    it('shows zero count when broker has no loans', async () => {\n      const broker = createMockBroker({\n        index: 'BROKER_NO_LOANS',\n        VaultID: 'TEST_VAULT_ID',\n        Account: 'rBrokerAccount1',\n      })\n\n      mockedGetAccountObjects\n        .mockResolvedValueOnce({ account_objects: [broker] })\n        .mockResolvedValue({ account_objects: [] }) // No loans\n\n      const TestWrapper = createTestWrapper(queryClient)\n      render(\n        <TestWrapper>\n          <VaultLoans\n            vaultId=\"TEST_VAULT_ID\"\n            vaultPseudoAccount=\"rTestPseudoAccount\"\n            displayCurrency={defaultDisplayCurrency}\n            asset={defaultAsset}\n          />\n        </TestWrapper>,\n      )\n\n      // Tab should show \"Broker 1 (0)\"\n      await waitFor(() => {\n        expect(screen.getByText(/Broker 1 \\(0\\)/)).toBeInTheDocument()\n      })\n    })\n  })\n\n  /**\n   * =========================================\n   * SECTION 7.1: BrokerDetails Display Tests\n   * =========================================\n   * When a broker is selected, its details should be displayed.\n   */\n  describe('BrokerDetails Display', () => {\n    it('displays broker details card when broker is selected', async () => {\n      const broker = createMockBroker({\n        index: 'BROKER_123',\n        VaultID: 'TEST_VAULT_ID',\n      })\n\n      mockedGetAccountObjects\n        .mockResolvedValueOnce({ account_objects: [broker] })\n        .mockResolvedValue({ account_objects: [] })\n\n      const TestWrapper = createTestWrapper(queryClient)\n      const { container } = render(\n        <TestWrapper>\n          <VaultLoans\n            vaultId=\"TEST_VAULT_ID\"\n            vaultPseudoAccount=\"rTestPseudoAccount\"\n            displayCurrency={defaultDisplayCurrency}\n            asset={defaultAsset}\n          />\n        </TestWrapper>,\n      )\n\n      await waitFor(() => {\n        expect(\n          container.querySelector('.broker-details-card'),\n        ).toBeInTheDocument()\n      })\n    })\n\n    it('displays broker ID in details', async () => {\n      const brokerId = 'BROKER_ID_DISPLAY_TEST'\n      const broker = createMockBroker({\n        index: brokerId,\n        VaultID: 'TEST_VAULT_ID',\n      })\n\n      mockedGetAccountObjects\n        .mockResolvedValueOnce({ account_objects: [broker] })\n        .mockResolvedValue({ account_objects: [] })\n\n      const TestWrapper = createTestWrapper(queryClient)\n      render(\n        <TestWrapper>\n          <VaultLoans\n            vaultId=\"TEST_VAULT_ID\"\n            vaultPseudoAccount=\"rTestPseudoAccount\"\n            displayCurrency={defaultDisplayCurrency}\n            asset={defaultAsset}\n          />\n        </TestWrapper>,\n      )\n\n      await waitFor(() => {\n        expect(screen.getByText('Loan Broker ID')).toBeInTheDocument()\n        expect(screen.getByText(brokerId)).toBeInTheDocument()\n      })\n    })\n\n    it('displays total debt and maximum debt metrics', async () => {\n      const broker = createMockBroker({\n        index: 'BROKER_123',\n        VaultID: 'TEST_VAULT_ID',\n        DebtTotal: '50000',\n        DebtMaximum: '1000000',\n      })\n\n      mockedGetAccountObjects\n        .mockResolvedValueOnce({ account_objects: [broker] })\n        .mockResolvedValue({ account_objects: [] })\n\n      const TestWrapper = createTestWrapper(queryClient)\n      render(\n        <TestWrapper>\n          <VaultLoans\n            vaultId=\"TEST_VAULT_ID\"\n            vaultPseudoAccount=\"rTestPseudoAccount\"\n            displayCurrency={defaultDisplayCurrency}\n            asset={defaultAsset}\n          />\n        </TestWrapper>,\n      )\n\n      await waitFor(() => {\n        // Amounts are formatted with compact notation (50.00K, 1.00M)\n        const totalDebtMetric = screen\n          .getByText('Total Debt')\n          .closest('.debt-metric')\n        expect(\n          totalDebtMetric?.querySelector('.metric-value'),\n        ).toHaveTextContent('\\uE900 50.00K')\n        const maxDebtMetric = screen\n          .getByText('Maximum Debt')\n          .closest('.debt-metric')\n        expect(maxDebtMetric?.querySelector('.metric-value')).toHaveTextContent(\n          '\\uE900 1.00M',\n        )\n      })\n    })\n\n    it(`display BrokerDetails card: XRP-denominated Loan in USD Currency`, async () => {\n      const broker = createMockBroker({\n        index: 'BROKER_123',\n        VaultID: 'TEST_VAULT_ID',\n        DebtTotal: '50000',\n        DebtMaximum: '1000000',\n      })\n\n      mockedGetAccountObjects\n        .mockResolvedValueOnce({ account_objects: [broker] })\n        .mockResolvedValue({ account_objects: [] })\n\n      const TestWrapper = createTestWrapper(queryClient)\n      render(\n        <TestWrapper>\n          <VaultLoans\n            vaultId=\"TEST_VAULT_ID\"\n            vaultPseudoAccount=\"rTestPseudoAccount\"\n            displayCurrency=\"USD\"\n            asset={defaultAsset}\n          />\n        </TestWrapper>,\n      )\n\n      await waitFor(() => {\n        // Amounts are formatted with compact notation (50.00K, 1.00M)\n        const totalDebtMetric = screen\n          .getByText('Total Debt')\n          .closest('.debt-metric')\n        expect(\n          totalDebtMetric?.querySelector('.metric-value'),\n        ).toHaveTextContent('$75.00K USD')\n        const maxDebtMetric = screen\n          .getByText('Maximum Debt')\n          .closest('.debt-metric')\n        expect(maxDebtMetric?.querySelector('.metric-value')).toHaveTextContent(\n          '$1.50M USD',\n        )\n      })\n    })\n    it(`display BrokerDetails card: IOU-denominated Loan in USD Currency`, async () => {\n      const broker = createMockBroker({\n        index: 'BROKER_123',\n        VaultID: 'TEST_VAULT_ID',\n        DebtTotal: '50000',\n        DebtMaximum: '1000000',\n      })\n\n      mockedGetAccountObjects\n        .mockResolvedValueOnce({ account_objects: [broker] })\n        .mockResolvedValue({ account_objects: [] })\n\n      const TestWrapper = createTestWrapper(queryClient)\n      render(\n        <TestWrapper>\n          <VaultLoans\n            vaultId=\"TEST_VAULT_ID\"\n            vaultPseudoAccount=\"rTestPseudoAccount\"\n            displayCurrency=\"USD\"\n            asset={{ currency: 'AUD' }}\n          />\n        </TestWrapper>,\n      )\n\n      await waitFor(() => {\n        // Note: This test validates the case where USD conversion is not available\n        const totalDebtMetric = screen\n          .getByText('Total Debt')\n          .closest('.debt-metric')\n        expect(\n          totalDebtMetric?.querySelector('.metric-value'),\n        ).toHaveTextContent('--')\n        const maxDebtMetric = screen\n          .getByText('Maximum Debt')\n          .closest('.debt-metric')\n        expect(maxDebtMetric?.querySelector('.metric-value')).toHaveTextContent(\n          '--',\n        )\n      })\n    })\n\n    it(`display BrokerDetails card: <Exotic Currency> BTC-denominated Loan in USD Currency`, async () => {\n      // Mock BTC to USD rate so conversion is available\n      mockTokenToUSDRate.mockImplementation((token: any) => {\n        if (!token) return 0\n        if (token.currency === 'BTC') return 1.5\n        return 0\n      })\n\n      const broker = createMockBroker({\n        index: 'BROKER_123',\n        VaultID: 'TEST_VAULT_ID',\n        DebtTotal: '50000',\n        DebtMaximum: '1000000',\n      })\n\n      mockedGetAccountObjects\n        .mockResolvedValueOnce({ account_objects: [broker] })\n        .mockResolvedValue({ account_objects: [] })\n\n      const TestWrapper = createTestWrapper(queryClient)\n      render(\n        <TestWrapper>\n          <VaultLoans\n            vaultId=\"TEST_VAULT_ID\"\n            vaultPseudoAccount=\"rTestPseudoAccount\"\n            displayCurrency=\"USD\"\n            asset={{ currency: 'BTC' }}\n          />\n        </TestWrapper>,\n      )\n\n      await waitFor(() => {\n        // BTC 50,000 * 1.5 = 75,000 USD, BTC 1,000,000 * 1.5 = 1,500,000 USD\n        const totalDebtMetric = screen\n          .getByText('Total Debt')\n          .closest('.debt-metric')\n        expect(\n          totalDebtMetric?.querySelector('.metric-value'),\n        ).toHaveTextContent('$75.00K USD')\n        const maxDebtMetric = screen\n          .getByText('Maximum Debt')\n          .closest('.debt-metric')\n        expect(maxDebtMetric?.querySelector('.metric-value')).toHaveTextContent(\n          '$1.50M USD',\n        )\n      })\n    })\n  })\n\n  /**\n   * =========================================\n   * SECTION 7.2: BrokerDetails Display Tests with Exotic Vault asset-type\n   * =========================================\n   * When a broker is selected, its details should be displayed.\n   */\n  describe('BrokerDetails Display with BTC Exotic Currency Symbol', () => {\n    it('displays total debt and maximum debt metrics with BTC Exotic Currency Symbol', async () => {\n      const broker = createMockBroker({\n        index: 'BROKER_123',\n        VaultID: 'TEST_VAULT_ID',\n        DebtTotal: '50000',\n        DebtMaximum: '1000000',\n      })\n\n      mockedGetAccountObjects\n        .mockResolvedValueOnce({ account_objects: [broker] })\n        .mockResolvedValue({ account_objects: [] })\n\n      const TestWrapper = createTestWrapper(queryClient)\n      render(\n        <TestWrapper>\n          <VaultLoans\n            vaultId=\"TEST_VAULT_ID\"\n            vaultPseudoAccount=\"rTestPseudoAccount\"\n            displayCurrency=\"BTC\"\n            asset={{ currency: 'BTC' }}\n          />\n        </TestWrapper>,\n      )\n\n      await waitFor(() => {\n        // Amounts are formatted with compact notation (50.00K, 1.00M)\n        const totalDebtMetric = screen\n          .getByText('Total Debt')\n          .closest('.debt-metric')\n        expect(\n          totalDebtMetric?.querySelector('.metric-value'),\n        ).toHaveTextContent('\\u20BF 50.00K')\n        const maxDebtMetric = screen\n          .getByText('Maximum Debt')\n          .closest('.debt-metric')\n        expect(maxDebtMetric?.querySelector('.metric-value')).toHaveTextContent(\n          '\\u20BF 1.00M',\n        )\n      })\n    })\n\n    it('displays total debt and maximum debt metrics with ETH Exotic Currency Symbol', async () => {\n      const broker = createMockBroker({\n        index: 'BROKER_123',\n        VaultID: 'TEST_VAULT_ID',\n        DebtTotal: '50000',\n        DebtMaximum: '1000000',\n      })\n\n      mockedGetAccountObjects\n        .mockResolvedValueOnce({ account_objects: [broker] })\n        .mockResolvedValue({ account_objects: [] })\n\n      const TestWrapper = createTestWrapper(queryClient)\n      render(\n        <TestWrapper>\n          <VaultLoans\n            vaultId=\"TEST_VAULT_ID\"\n            vaultPseudoAccount=\"rTestPseudoAccount\"\n            displayCurrency=\"ETH\"\n            asset={{ currency: 'ETH' }}\n          />\n        </TestWrapper>,\n      )\n\n      await waitFor(() => {\n        // Amounts are formatted with compact notation (50.00K, 1.00M)\n        const totalDebtMetric = screen\n          .getByText('Total Debt')\n          .closest('.debt-metric')\n        expect(\n          totalDebtMetric?.querySelector('.metric-value'),\n        ).toHaveTextContent('\\uE902 50.00K')\n        const maxDebtMetric = screen\n          .getByText('Maximum Debt')\n          .closest('.debt-metric')\n        expect(maxDebtMetric?.querySelector('.metric-value')).toHaveTextContent(\n          '\\uE902 1.00M',\n        )\n      })\n    })\n  })\n\n  /**\n   * =========================================\n   * SECTION 7.3: BrokerDetails Display with MPT Ticker\n   * =========================================\n   * When the vault asset is an MPT with XLS-89 metadata containing a ticker,\n   * the ticker should be used as the currency label instead of the shortened MPT ID.\n   */\n  describe('BrokerDetails Display with MPT Ticker', () => {\n    const mptIssuanceId = '000086F070A052C270F902E0AD5B795B2DC3C9F4B113E86EF'\n\n    it('displays MPT ticker in debt amounts instead of shortened MPT ID', async () => {\n      const broker = createMockBroker({\n        index: 'BROKER_MPT',\n        VaultID: 'TEST_VAULT_ID',\n        DebtTotal: '50000',\n        DebtMaximum: '1000000',\n      })\n\n      mockedGetAccountObjects\n        .mockResolvedValueOnce({ account_objects: [broker] })\n        .mockResolvedValue({ account_objects: [] })\n\n      const TestWrapper = createTestWrapper(queryClient)\n      render(\n        <TestWrapper>\n          <VaultLoans\n            vaultId=\"TEST_VAULT_ID\"\n            vaultPseudoAccount=\"rTestPseudoAccount\"\n            displayCurrency=\"VTKN\"\n            asset={{ mpt_issuance_id: mptIssuanceId } as any}\n            mptTicker=\"VTKN\"\n          />\n        </TestWrapper>,\n      )\n\n      await waitFor(() => {\n        const totalDebtMetric = screen\n          .getByText('Total Debt')\n          .closest('.debt-metric')\n        const totalDebtValue =\n          totalDebtMetric?.querySelector('.metric-value')?.textContent\n        expect(totalDebtValue).toContain('50.00K VTKN')\n        expect(totalDebtValue).not.toContain('000086F0')\n\n        const maxDebtMetric = screen\n          .getByText('Maximum Debt')\n          .closest('.debt-metric')\n        const maxDebtValue =\n          maxDebtMetric?.querySelector('.metric-value')?.textContent\n        expect(maxDebtValue).toContain('1.00M VTKN')\n        expect(maxDebtValue).not.toContain('000086F0')\n      })\n    })\n\n    it('falls back to shortened MPT ID when ticker is not provided', async () => {\n      const broker = createMockBroker({\n        index: 'BROKER_MPT_3',\n        VaultID: 'TEST_VAULT_ID',\n        DebtTotal: '500',\n      })\n\n      mockedGetAccountObjects\n        .mockResolvedValueOnce({ account_objects: [broker] })\n        .mockResolvedValue({ account_objects: [] })\n\n      const TestWrapper = createTestWrapper(queryClient)\n      render(\n        <TestWrapper>\n          <VaultLoans\n            vaultId=\"TEST_VAULT_ID\"\n            vaultPseudoAccount=\"rTestPseudoAccount\"\n            displayCurrency={mptIssuanceId}\n            asset={{ mpt_issuance_id: mptIssuanceId } as any}\n          />\n        </TestWrapper>,\n      )\n\n      await waitFor(() => {\n        const totalDebtMetric = screen\n          .getByText('Total Debt')\n          .closest('.debt-metric')\n        const metricValue =\n          totalDebtMetric?.querySelector('.metric-value')?.textContent\n\n        // Should contain the shortened MPT ID since no ticker is provided\n        expect(metricValue).toContain('000086F0')\n      })\n    })\n\n    it('displays MPT ticker in first loss capital metric', async () => {\n      const broker = createMockBroker({\n        index: 'BROKER_MPT_4',\n        VaultID: 'TEST_VAULT_ID',\n        CoverAvailable: '25000',\n      })\n\n      mockedGetAccountObjects\n        .mockResolvedValueOnce({ account_objects: [broker] })\n        .mockResolvedValue({ account_objects: [] })\n\n      const TestWrapper = createTestWrapper(queryClient)\n      render(\n        <TestWrapper>\n          <VaultLoans\n            vaultId=\"TEST_VAULT_ID\"\n            vaultPseudoAccount=\"rTestPseudoAccount\"\n            displayCurrency=\"VTKN\"\n            asset={{ mpt_issuance_id: mptIssuanceId } as any}\n            mptTicker=\"VTKN\"\n          />\n        </TestWrapper>,\n      )\n\n      await waitFor(() => {\n        const flcMetric = screen\n          .getByText('first-loss capital')\n          .closest('.metric')\n        expect(flcMetric?.querySelector('.metric-value')).toHaveTextContent(\n          '25.00K VTKN',\n        )\n      })\n    })\n  })\n\n  /**\n   * =========================================\n   * SECTION 8: Error Handling Tests\n   * =========================================\n   * When API calls fail, errors should be tracked.\n   */\n  describe('Error Handling', () => {\n    it('tracks exception when loan broker fetch fails', async () => {\n      const errorResponse = {\n        code: 'NETWORK_ERROR',\n        message: 'Connection failed',\n      }\n      mockedGetAccountObjects.mockRejectedValue(errorResponse)\n\n      const TestWrapper = createTestWrapper(queryClient)\n      render(\n        <TestWrapper>\n          <VaultLoans\n            vaultId=\"TEST_VAULT_ID\"\n            vaultPseudoAccount=\"rTestPseudoAccount\"\n            displayCurrency={defaultDisplayCurrency}\n            asset={defaultAsset}\n          />\n        </TestWrapper>,\n      )\n\n      await waitFor(() => {\n        expect(mockTrackException).toHaveBeenCalledWith(\n          expect.stringContaining(\n            'Error fetching Loan Brokers for account rTestPseudoAccount',\n          ),\n        )\n      })\n    })\n  })\n\n  /**\n   * =========================================\n   * SECTION 9: Query Behavior Tests\n   * =========================================\n   * Tests for the query configuration and behavior.\n   */\n  describe('Query Behavior', () => {\n    it('does not fetch when vaultPseudoAccount is empty', () => {\n      const TestWrapper = createTestWrapper(queryClient)\n      render(\n        <TestWrapper>\n          <VaultLoans\n            vaultId=\"TEST_VAULT_ID\"\n            vaultPseudoAccount=\"\"\n            displayCurrency={defaultDisplayCurrency}\n            asset={defaultAsset}\n          />\n        </TestWrapper>,\n      )\n\n      // Query should not be enabled when vaultPseudoAccount is empty\n      expect(mockedGetAccountObjects).not.toHaveBeenCalled()\n    })\n\n    it('fetches loan brokers with correct account type filter', async () => {\n      mockedGetAccountObjects.mockResolvedValue({\n        account_objects: [],\n      })\n\n      const testAccount = 'rTestPseudoAccount123'\n      const TestWrapper = createTestWrapper(queryClient)\n      render(\n        <TestWrapper>\n          <VaultLoans\n            vaultId=\"TEST_VAULT_ID\"\n            vaultPseudoAccount={testAccount}\n            displayCurrency={defaultDisplayCurrency}\n            asset={defaultAsset}\n          />\n        </TestWrapper>,\n      )\n\n      await waitFor(() => {\n        expect(mockedGetAccountObjects).toHaveBeenCalledWith(\n          mockSocket,\n          testAccount,\n          'loan_broker',\n          undefined,\n        )\n      })\n    })\n\n    it('filters brokers by matching vaultId', async () => {\n      const matchingBroker = createMockBroker({\n        index: 'MATCHING_BROKER',\n        VaultID: 'TARGET_VAULT_ID',\n      })\n      const nonMatchingBroker = createMockBroker({\n        index: 'NON_MATCHING_BROKER',\n        VaultID: 'OTHER_VAULT_ID',\n      })\n\n      mockedGetAccountObjects\n        .mockResolvedValueOnce({\n          account_objects: [matchingBroker, nonMatchingBroker],\n        })\n        .mockResolvedValue({ account_objects: [] })\n\n      const TestWrapper = createTestWrapper(queryClient)\n      const { container } = render(\n        <TestWrapper>\n          <VaultLoans\n            vaultId=\"TARGET_VAULT_ID\"\n            vaultPseudoAccount=\"rTestPseudoAccount\"\n            displayCurrency={defaultDisplayCurrency}\n            asset={defaultAsset}\n          />\n        </TestWrapper>,\n      )\n\n      await waitFor(() => {\n        // Only one broker tab should be shown (the matching one)\n        const tabs = container.querySelectorAll('.broker-tab')\n        expect(tabs.length).toBe(1)\n      })\n    })\n  })\n})\n"
  },
  {
    "path": "src/containers/Vault/VaultLoans/test/utils.test.ts",
    "content": "/**\n * VaultLoans Utility Functions Unit Tests\n *\n * This test suite validates the utility functions used across the VaultLoans\n * component for formatting rates, dates, loan status, and IDs.\n *\n * Key functions tested:\n * - formatRate: Converts 1/10th basis points to percentage strings\n * - formatPaymentInterval: Converts seconds to human-readable frequency\n * - formatLoanStatus: Determines loan status from flags and balance\n * - formatRippleDate: Converts Ripple epoch timestamps to date strings\n * - truncateId: Shortens long IDs for display\n * - LSF_LOAN_DEFAULT, LSF_LOAN_IMPAIRED: Flag constants\n */\n\nimport {\n  formatRate,\n  formatPaymentInterval,\n  formatLoanStatus,\n  truncateId,\n  LSF_LOAN_DEFAULT,\n  LSF_LOAN_IMPAIRED,\n} from '../utils'\n\ndescribe('VaultLoans Utils', () => {\n  /**\n   * =========================================\n   * SECTION 1: formatRate Tests\n   * =========================================\n   * formatRate converts values from 1/10th basis points to percentage strings.\n   * 1 basis point = 0.01%, so 1/10th basis point = 0.001%\n   *\n   * The formula is: percentage = rate / 1000\n   * Example: 500 (1/10th bps) → 500/1000 = 0.5 → \"0.500%\"\n   */\n  describe('formatRate', () => {\n    it('converts 1/10th basis points to percentage', () => {\n      // 500 / 1000 = 0.5%\n      expect(formatRate(500)).toBe('0.50%')\n    })\n\n    it('handles zero rate', () => {\n      expect(formatRate(0)).toBe('0.00%')\n    })\n\n    it('handles small rates (less than 1 basis point)', () => {\n      // 1 / 1000 = 0.001%\n      expect(formatRate(1)).toBe('0.00%')\n    })\n\n    it('handles large rates', () => {\n      // 10000 / 1000 = 10%\n      expect(formatRate(10000)).toBe('10.00%')\n    })\n\n    it('returns default value for undefined rate', () => {\n      // Default ManagementFeeRate, CoverRateMinimum, etc. is 0 or `--`\n      expect(formatRate(undefined)).toBe('--')\n    })\n\n    it('formats with exactly 3 decimal places', () => {\n      // Ensures consistent formatting regardless of value\n      expect(formatRate(1000)).toBe('1.00%')\n      expect(formatRate(1500)).toBe('1.50%')\n      expect(formatRate(1234)).toBe('1.23%')\n    })\n  })\n\n  /**\n   * =========================================\n   * SECTION 2: formatPaymentInterval Tests\n   * =========================================\n   * formatPaymentInterval converts seconds to human-readable frequency.\n   * Common intervals:\n   * - Daily: 86,400 seconds (1 day)\n   * - Weekly: 604,800 seconds (7 days)\n   * - Bi-Weekly: ~1,209,600 seconds (14 days)\n   * - Monthly: ~2,592,000 seconds (30 days)\n   * - Quarterly: ~7,776,000 seconds (90 days)\n   * - Yearly: ~31,536,000 seconds (365 days)\n   */\n  describe('formatPaymentInterval', () => {\n    it('identifies daily interval', () => {\n      const oneDay = 86400\n      expect(formatPaymentInterval(oneDay)).toBe('Daily')\n    })\n\n    it('identifies weekly interval', () => {\n      const sevenDays = 604800\n      expect(formatPaymentInterval(sevenDays)).toBe('Weekly')\n    })\n\n    it('identifies bi-weekly interval', () => {\n      const fourteenDays = 1209600\n      expect(formatPaymentInterval(fourteenDays)).toBe('Bi-Weekly')\n    })\n\n    it('identifies monthly interval (30 days)', () => {\n      const thirtyDays = 2592000\n      expect(formatPaymentInterval(thirtyDays)).toBe('Monthly')\n    })\n\n    it('identifies monthly interval with slight variance (28-31 days)', () => {\n      // Real months vary from 28-31 days\n      expect(formatPaymentInterval(28 * 86400)).toBe('Monthly')\n      expect(formatPaymentInterval(31 * 86400)).toBe('Monthly')\n    })\n\n    it('identifies quarterly interval', () => {\n      const ninetyDays = 7776000\n      expect(formatPaymentInterval(ninetyDays)).toBe('Quarterly')\n    })\n\n    it('identifies yearly interval', () => {\n      const threeHundredSixtyFiveDays = 31536000\n      expect(formatPaymentInterval(threeHundredSixtyFiveDays)).toBe('Yearly')\n    })\n\n    it('shows days for non-standard intervals', () => {\n      // 45 days doesn't match any standard interval\n      const fortyFiveDays = 45 * 86400\n      expect(formatPaymentInterval(fortyFiveDays)).toBe('45 Days')\n    })\n  })\n\n  /**\n   * =========================================\n   * SECTION 3: formatLoanStatus Tests\n   * =========================================\n   * formatLoanStatus determines loan status based on:\n   * 1. Flags (LSF_LOAN_DEFAULT, LSF_LOAN_IMPAIRED)\n   * 2. Outstanding balance (0 = paid off)\n   *\n   * Priority order:\n   * 1. Paid Off (balance = 0)\n   * 2. Default (LSF_LOAN_DEFAULT flag set)\n   * 3. Impaired (LSF_LOAN_IMPAIRED flag set)\n   * 4. Current (no flags, has balance)\n   */\n  describe('formatLoanStatus', () => {\n    it('returns paid_off status when balance is zero', () => {\n      const result = formatLoanStatus(0, 0)\n      expect(result.status).toBe('loan_status_paid_off')\n      expect(result.colorClass).toBe('status-paid-off')\n    })\n\n    it('returns paid_off status when balance is \"0\" string', () => {\n      const result = formatLoanStatus(0, '0')\n      expect(result.status).toBe('loan_status_paid_off')\n    })\n\n    it('returns default status when LSF_LOAN_DEFAULT flag is set', () => {\n      const result = formatLoanStatus(LSF_LOAN_DEFAULT, 1000)\n      expect(result.status).toBe('loan_status_default')\n      expect(result.colorClass).toBe('status-default')\n    })\n\n    it('returns impaired status when LSF_LOAN_IMPAIRED flag is set', () => {\n      const result = formatLoanStatus(LSF_LOAN_IMPAIRED, 1000)\n      expect(result.status).toBe('loan_status_impaired')\n      expect(result.colorClass).toBe('status-impaired')\n    })\n\n    it('returns current status for active loan with no flags', () => {\n      const result = formatLoanStatus(0, 1000)\n      expect(result.status).toBe('loan_status_current')\n      expect(result.colorClass).toBe('status-current')\n    })\n\n    it('paid_off takes priority over default flag', () => {\n      // Even if default flag is set, zero balance means paid off\n      const result = formatLoanStatus(LSF_LOAN_DEFAULT, 0)\n      expect(result.status).toBe('loan_status_paid_off')\n    })\n\n    it('default takes priority over impaired flag', () => {\n      // If both flags are set, default takes precedence\n      const bothFlags = LSF_LOAN_DEFAULT | LSF_LOAN_IMPAIRED\n      const result = formatLoanStatus(bothFlags, 1000)\n      expect(result.status).toBe('loan_status_default')\n    })\n\n    it('handles string balance values', () => {\n      const result = formatLoanStatus(0, '5000')\n      expect(result.status).toBe('loan_status_current')\n    })\n  })\n\n  /**\n   * =========================================\n   * SECTION 4: truncateId Tests\n   * =========================================\n   * truncateId shortens long IDs for display by showing\n   * the first N chars, \"...\", and the last M chars.\n   *\n   * Default: first 7 chars + \"...\" + last 5 chars\n   */\n  describe('truncateId', () => {\n    it('truncates long IDs with default parameters', () => {\n      const longId = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ123456'\n      // Default: first 7 + \"...\" + last 5\n      expect(truncateId(longId)).toBe('ABCDEFG...23456')\n    })\n\n    it('returns original ID if already short enough', () => {\n      const shortId = 'ABC123'\n      expect(truncateId(shortId)).toBe('ABC123')\n    })\n\n    it('uses custom start and end character counts', () => {\n      const id = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'\n      // First 4 + \"...\" + last 4\n      expect(truncateId(id, 4, 4)).toBe('ABCD...WXYZ')\n    })\n\n    it('handles empty string', () => {\n      expect(truncateId('')).toBe('')\n    })\n\n    it('handles undefined/null gracefully', () => {\n      expect(truncateId(undefined as any)).toBe(undefined)\n    })\n\n    it('does not truncate if ID length equals threshold', () => {\n      // Threshold is startChars + endChars + 3 (for \"...\")\n      // Default: 7 + 5 + 3 = 15\n      const exactId = 'ABCDEFGHIJKLMNO' // 15 chars\n      expect(truncateId(exactId)).toBe(exactId)\n    })\n  })\n\n  /**\n   * =========================================\n   * SECTION 5: Flag Constants Tests\n   * =========================================\n   * Verify the loan flag constants match the XLS-66 spec.\n   */\n  describe('Flag Constants', () => {\n    it('LSF_LOAN_DEFAULT has correct value', () => {\n      // From XLS-66 spec: 0x00010000 = 65536\n      expect(LSF_LOAN_DEFAULT).toBe(0x00010000)\n      expect(LSF_LOAN_DEFAULT).toBe(65536)\n    })\n\n    it('LSF_LOAN_IMPAIRED has correct value', () => {\n      // From XLS-66 spec: 0x00020000 = 131072\n      expect(LSF_LOAN_IMPAIRED).toBe(0x00020000)\n      expect(LSF_LOAN_IMPAIRED).toBe(131072)\n    })\n\n    it('flags are distinct (no overlap)', () => {\n      // Bitwise AND should be 0 for distinct flags\n      expect(LSF_LOAN_DEFAULT & LSF_LOAN_IMPAIRED).toBe(0)\n    })\n\n    it('flags can be combined with bitwise OR', () => {\n      const combined = LSF_LOAN_DEFAULT | LSF_LOAN_IMPAIRED\n      // Combined should have both bits set\n      expect(combined & LSF_LOAN_DEFAULT).toBeTruthy()\n      expect(combined & LSF_LOAN_IMPAIRED).toBeTruthy()\n    })\n  })\n})\n"
  },
  {
    "path": "src/containers/Vault/VaultLoans/utils.ts",
    "content": "import { convertRippleDate } from '../../../rippled/lib/convertRippleDate'\n\n// 1/10th basis point = 0.001%\nconst ONE_TENTH_BASIS_POINT = 1000\n\n// Loan flag constants from XLS-66 spec\nexport const LSF_LOAN_DEFAULT = 0x00010000\nexport const LSF_LOAN_IMPAIRED = 0x00020000\n\n/**\n * Format a rate value from 1/10th basis points to percentage string\n * e.g., 50 (1/10th bps) -> \"0.05%\"\n */\nexport const formatRate = (rate: number | undefined): string => {\n  // the default value for ManagementFeeRate, CoverRateLiquidation and CoverRateMinimum is 0, displayed as `--`\n  if (rate === undefined) return '--'\n\n  // Convert from 1/10th basis points to percentage\n  // 1 basis point = 0.01%, 1/10th basis point = 0.001%\n  const percentage = rate / ONE_TENTH_BASIS_POINT\n\n  // The field must be able to display up to 2 decimal places\n  return `${percentage.toFixed(2)}%`\n}\n\n/**\n * Convert payment interval in seconds to human-readable frequency\n * Common intervals: Monthly (~30 days), Weekly (7 days), Daily (1 day)\n */\nexport const formatPaymentInterval = (seconds: number): string => {\n  const SECONDS_PER_DAY = 86400\n  const days = Math.round(seconds / SECONDS_PER_DAY)\n\n  if (days >= 28 && days <= 31) return 'Monthly'\n  if (days >= 13 && days <= 15) return 'Bi-Weekly'\n  if (days >= 6 && days <= 8) return 'Weekly'\n  if (days === 1) return 'Daily'\n  if (days >= 89 && days <= 92) return 'Quarterly'\n  if (days >= 364 && days <= 366) return 'Yearly'\n\n  return `${days} Days`\n}\n\n/**\n * Valid translation keys for loan status\n */\nexport type LoanStatusKey =\n  | 'loan_status_paid_off'\n  | 'loan_status_default'\n  | 'loan_status_impaired'\n  | 'loan_status_current'\n\n/**\n * Determine loan status based on flags and outstanding balance\n * Returns status key for translation and color class\n */\nexport const formatLoanStatus = (\n  flags: number,\n  totalLoanValueOutstanding: string | number,\n): { status: LoanStatusKey; colorClass: string } => {\n  const outstanding =\n    typeof totalLoanValueOutstanding === 'string'\n      ? Number(totalLoanValueOutstanding)\n      : totalLoanValueOutstanding\n\n  // Check if loan is paid off (no outstanding balance)\n  if (outstanding === 0) {\n    return { status: 'loan_status_paid_off', colorClass: 'status-paid-off' }\n  }\n\n  // Check if loan is defaulted\n  // eslint-disable-next-line no-bitwise\n  if (flags & LSF_LOAN_DEFAULT) {\n    return { status: 'loan_status_default', colorClass: 'status-default' }\n  }\n\n  // Check if loan is impaired\n  // eslint-disable-next-line no-bitwise\n  if (flags & LSF_LOAN_IMPAIRED) {\n    return { status: 'loan_status_impaired', colorClass: 'status-impaired' }\n  }\n\n  // Otherwise loan is current\n  return { status: 'loan_status_current', colorClass: 'status-current' }\n}\n\n/**\n * Format a Ripple epoch timestamp to a readable date string\n */\nexport const formatRippleDate = (\n  timestamp: number,\n  language: string = 'en-US',\n): string => {\n  if (!timestamp) return '-'\n\n  const jsTimestamp = convertRippleDate(timestamp)\n  const date = new Date(jsTimestamp)\n\n  return date.toLocaleDateString(language, {\n    year: 'numeric',\n    month: 'short',\n    day: '2-digit',\n  })\n}\n\n/**\n * Truncate a string (like loan ID or address) to show start and end\n * e.g., \"4F5E6D7...890AB\"\n */\nexport const truncateId = (\n  id: string,\n  startChars = 7,\n  endChars = 5,\n): string => {\n  if (!id || id.length <= startChars + endChars + 3) return id\n  return `${id.slice(0, startChars)}...${id.slice(-endChars)}`\n}\n"
  },
  {
    "path": "src/containers/Vault/VaultTransactions/index.tsx",
    "content": "import { useContext } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { useInfiniteQuery } from 'react-query'\nimport SocketContext from '../../shared/SocketContext'\nimport { getAccountTransactions } from '../../../rippled'\nimport { TransactionTable } from '../../shared/components/TransactionTable/TransactionTable'\nimport { useAnalytics } from '../../shared/analytics'\nimport './styles.scss'\n\ninterface Props {\n  accountId: string\n}\n\nexport const VaultTransactions = ({ accountId }: Props) => {\n  const { t } = useTranslation()\n  const { trackException } = useAnalytics()\n  const rippledSocket = useContext(SocketContext)\n\n  const {\n    data,\n    error,\n    isFetching: loading,\n    fetchNextPage,\n    hasNextPage,\n  } = useInfiniteQuery<any, Error>(\n    ['fetchVaultTransactions', accountId],\n    ({ pageParam = '' }) =>\n      getAccountTransactions(\n        accountId,\n        undefined,\n        pageParam,\n        undefined,\n        rippledSocket,\n      ).catch((errorResponse) => {\n        const errorLocation = `vault transactions ${accountId} at ${pageParam}`\n        trackException(`${errorLocation} --- ${JSON.stringify(errorResponse)}`)\n        throw new Error('get_vault_transactions_failed')\n      }),\n    {\n      getNextPageParam: (lastPage) => lastPage.marker,\n      enabled: !!accountId,\n    },\n  )\n\n  const transactions =\n    data?.pages?.reduce(\n      (allTransactions: any[], page: any) =>\n        page.transactions\n          ? allTransactions.concat(page.transactions)\n          : allTransactions,\n      [],\n    ) || []\n\n  return (\n    <div className=\"vault-transactions-section\">\n      <h2 className=\"vault-transactions-title\">{t('transactions')}</h2>\n      <div className=\"vault-transactions-divider\" />\n      <TransactionTable\n        transactions={transactions}\n        loading={loading}\n        emptyMessage={error?.message ? t(error.message as any) : undefined}\n        onLoadMore={() => fetchNextPage()}\n        hasAdditionalResults={hasNextPage}\n        hasHashColumn\n      />\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/Vault/VaultTransactions/styles.scss",
    "content": "@use '../../shared/css/variables' as *;\n\n.vault-transactions-section {\n  width: 100%;\n  padding: 0 24px;\n  margin-top: 48px;\n\n  @include for-size(desktop-up) {\n    padding: 0 64px;\n  }\n\n  .vault-transactions-title {\n    margin: 0 0 16px;\n    color: $white;\n    font-size: 24px;\n    @include bold;\n  }\n\n  .vault-transactions-divider {\n    background: $black-70;\n  }\n\n  .transaction-table {\n    overflow-x: auto;\n  }\n}\n"
  },
  {
    "path": "src/containers/Vault/VaultTransactions/test/VaultTransactions.test.tsx",
    "content": "/**\n * VaultTransactions Component Unit Tests\n *\n * This test suite validates the VaultTransactions component which displays\n * a paginated list of transactions for a vault's pseudo account.\n *\n * Key concepts tested:\n * - Basic rendering (section title, table headers)\n * - Loading state with Loader component\n * - Empty state when no transactions exist\n * - Transaction list display with proper columns\n * - Error handling and error message display\n * - Pagination via \"Load More\" button\n * - Infinite query behavior for fetching transaction pages\n */\n\nimport { render, screen, waitFor, fireEvent } from '@testing-library/react'\nimport { I18nextProvider } from 'react-i18next'\nimport { BrowserRouter as Router } from 'react-router'\nimport { QueryClientProvider, QueryClient } from 'react-query'\nimport i18n from '../../../../i18n/testConfigEnglish'\nimport SocketContext from '../../../shared/SocketContext'\nimport { VaultTransactions } from '../index'\nimport { getAccountTransactions } from '../../../../rippled'\nimport Mock = jest.Mock\n\n// Mock the rippled library to control API responses\njest.mock('../../../../rippled', () => ({\n  getAccountTransactions: jest.fn(),\n}))\n\n// Mock the analytics hook (used by LoadMoreButton and VaultTransactions)\nconst mockTrackException = jest.fn()\nconst mockTrack = jest.fn()\njest.mock('../../../shared/analytics', () => ({\n  useAnalytics: () => ({\n    trackException: mockTrackException,\n    track: mockTrack,\n  }),\n}))\n\nconst mockedGetAccountTransactions = getAccountTransactions as Mock\n\n// Mock socket client - represents the WebSocket connection to rippled\nconst mockSocket = {} as any\n\n/**\n * Creates a fresh QueryClient for each test\n *\n * We disable retries and set stale time to 0 to make tests predictable.\n * Each test gets its own QueryClient to prevent state leakage between tests.\n */\nconst createTestQueryClient = () =>\n  new QueryClient({\n    defaultOptions: {\n      queries: {\n        retry: false,\n        staleTime: 0,\n        cacheTime: 0,\n      },\n    },\n  })\n\n/**\n * TestWrapper Component\n *\n * Provides all necessary context providers for the VaultTransactions component:\n * - I18nextProvider: Internationalization for translated text\n * - Router: React Router for link components (transaction links)\n * - SocketContext: WebSocket connection for rippled queries\n * - QueryClientProvider: React Query for data fetching/caching\n */\nconst createTestWrapper =\n  (queryClient: QueryClient) =>\n  ({ children }: { children: React.ReactNode }) => (\n    <I18nextProvider i18n={i18n}>\n      <Router>\n        <SocketContext.Provider value={mockSocket}>\n          <QueryClientProvider client={queryClient}>\n            {children}\n          </QueryClientProvider>\n        </SocketContext.Provider>\n      </Router>\n    </I18nextProvider>\n  )\n\n/**\n * Mock transaction data generator\n *\n * Creates realistic transaction objects with all fields needed by TransactionTableRow.\n * Each transaction includes: hash, type, account, result, date.\n *\n * Note: We intentionally omit 'details' to avoid triggering nested TableDetail\n * components which may have complex dependencies (like Account component).\n */\nconst createMockTransaction = (overrides: any = {}) => ({\n  hash: `HASH${Math.random().toString(36).substring(7).toUpperCase()}`,\n  type: 'Payment',\n  account: 'rTestAccount123',\n  result: 'tesSUCCESS',\n  date: '2024-01-15T10:30:00Z',\n  ...overrides,\n})\n\ndescribe('VaultTransactions Component', () => {\n  let queryClient: QueryClient\n\n  // Create fresh QueryClient and reset mocks before each test\n  beforeEach(() => {\n    jest.clearAllMocks()\n    queryClient = createTestQueryClient()\n  })\n\n  // Clean up after each test\n  afterEach(() => {\n    queryClient.clear()\n  })\n\n  /**\n   * =========================================\n   * SECTION 1: Basic Rendering Tests\n   * =========================================\n   * These tests verify the component renders correctly with its\n   * structural elements: title, divider, and table headers.\n   */\n  describe('Basic Rendering', () => {\n    it('renders the transactions section title', async () => {\n      // Setup: Return empty transactions to focus on structure\n      mockedGetAccountTransactions.mockResolvedValue({\n        transactions: [],\n        marker: undefined,\n      })\n\n      const TestWrapper = createTestWrapper(queryClient)\n      render(\n        <TestWrapper>\n          <VaultTransactions accountId=\"rTestAccount\" />\n        </TestWrapper>,\n      )\n\n      // The component should display \"Transactions\" as the section title\n      await waitFor(() => {\n        const title = screen.getByText('Transactions')\n        expect(title.tagName).toBe('H2')\n        expect(title).toHaveClass('vault-transactions-title')\n      })\n    })\n\n    it('renders the divider element', async () => {\n      mockedGetAccountTransactions.mockResolvedValue({\n        transactions: [],\n        marker: undefined,\n      })\n\n      const TestWrapper = createTestWrapper(queryClient)\n      const { container } = render(\n        <TestWrapper>\n          <VaultTransactions accountId=\"rTestAccount\" />\n        </TestWrapper>,\n      )\n\n      // Verify the divider element exists for visual separation\n      await waitFor(() => {\n        expect(\n          container.querySelector('.vault-transactions-divider'),\n        ).toBeInTheDocument()\n      })\n    })\n\n    it('renders table headers with hash column', async () => {\n      // VaultTransactions passes hasHashColumn as true\n      mockedGetAccountTransactions.mockResolvedValue({\n        transactions: [],\n        marker: undefined,\n      })\n\n      const TestWrapper = createTestWrapper(queryClient)\n      render(\n        <TestWrapper>\n          <VaultTransactions accountId=\"rTestAccount\" />\n        </TestWrapper>,\n      )\n\n      // Verify all expected column headers are present\n      // The TransactionTable renders these headers when hasHashColumn/hasAmountColumn are true\n      await waitFor(() => {\n        expect(screen.getByText('Tx Hash')).toBeInTheDocument()\n        expect(screen.getByText('Account')).toBeInTheDocument()\n        expect(screen.getByText('Transaction Type')).toBeInTheDocument()\n        expect(screen.getByText('Status')).toBeInTheDocument()\n        expect(screen.getByText('Date/time (UTC)')).toBeInTheDocument()\n      })\n    })\n  })\n\n  /**\n   * =========================================\n   * SECTION 2: Loading State Tests\n   * =========================================\n   * When fetching transactions, a Loader should be displayed.\n   * This provides visual feedback to users during data retrieval.\n   */\n  describe('Loading State', () => {\n    it('displays loader while fetching transactions', async () => {\n      // Setup: Create a promise that won't resolve immediately to keep loading state\n      let resolvePromise: (value: any) => void\n      const pendingPromise = new Promise((resolve) => {\n        resolvePromise = resolve\n      })\n      mockedGetAccountTransactions.mockReturnValue(pendingPromise)\n\n      const TestWrapper = createTestWrapper(queryClient)\n      const { container } = render(\n        <TestWrapper>\n          <VaultTransactions accountId=\"rTestAccount\" />\n        </TestWrapper>,\n      )\n\n      // The Loader component should be visible during fetch\n      expect(container.querySelector('.loader')).toBeInTheDocument()\n\n      // Clean up: resolve the promise\n      resolvePromise!({ transactions: [], marker: undefined })\n    })\n\n    it('hides loader after transactions are loaded', async () => {\n      mockedGetAccountTransactions.mockResolvedValue({\n        transactions: [createMockTransaction()],\n        marker: undefined,\n      })\n\n      const TestWrapper = createTestWrapper(queryClient)\n      const { container } = render(\n        <TestWrapper>\n          <VaultTransactions accountId=\"rTestAccount\" />\n        </TestWrapper>,\n      )\n\n      // Wait for loading to complete\n      await waitFor(() => {\n        expect(container.querySelector('.loader')).not.toBeInTheDocument()\n      })\n    })\n  })\n\n  /**\n   * =========================================\n   * SECTION 3: Empty State Tests\n   * =========================================\n   * When no transactions exist for an account, the component should\n   * display an appropriate empty state message.\n   */\n  describe('Empty State', () => {\n    it('displays empty message when no transactions exist', async () => {\n      mockedGetAccountTransactions.mockResolvedValue({\n        transactions: [],\n        marker: undefined,\n      })\n\n      const TestWrapper = createTestWrapper(queryClient)\n      render(\n        <TestWrapper>\n          <VaultTransactions accountId=\"rTestAccount\" />\n        </TestWrapper>,\n      )\n\n      // The TransactionTable shows a default empty message\n      await waitFor(() => {\n        expect(screen.getByText('No transactions found.')).toBeInTheDocument()\n      })\n    })\n\n    it('does not show Load More button when there are no transactions', async () => {\n      mockedGetAccountTransactions.mockResolvedValue({\n        transactions: [],\n        marker: undefined,\n      })\n\n      const TestWrapper = createTestWrapper(queryClient)\n      render(\n        <TestWrapper>\n          <VaultTransactions accountId=\"rTestAccount\" />\n        </TestWrapper>,\n      )\n\n      await waitFor(() => {\n        expect(screen.queryByText('Load more...')).not.toBeInTheDocument()\n      })\n    })\n  })\n\n  /**\n   * =========================================\n   * SECTION 4: Transaction Display Tests\n   * =========================================\n   * These tests verify that transactions are rendered correctly\n   * with all their details: hash, account, type, amount, status, date.\n   */\n  describe('Transaction Display', () => {\n    it('renders transaction rows for each transaction', async () => {\n      const transactions = [\n        createMockTransaction({ hash: 'HASH001ABC' }),\n        createMockTransaction({ hash: 'HASH002DEF' }),\n        createMockTransaction({ hash: 'HASH003GHI' }),\n      ]\n\n      mockedGetAccountTransactions.mockResolvedValue({\n        transactions,\n        marker: undefined,\n      })\n\n      const TestWrapper = createTestWrapper(queryClient)\n      const { container } = render(\n        <TestWrapper>\n          <VaultTransactions accountId=\"rTestAccount\" />\n        </TestWrapper>,\n      )\n\n      // Each transaction should render as a list item\n      await waitFor(() => {\n        // transaction-li class is used for each row (excluding header)\n        const transactionRows = container.querySelectorAll(\n          '.transaction-li:not(.transaction-li-header)',\n        )\n        expect(transactionRows.length).toBe(3)\n      })\n    })\n\n    it('displays transaction hash in shortened format', async () => {\n      // Transaction hashes are typically 64 characters; UI shortens them for readability\n      const fullHash =\n        'ABC123DEF456789012345678901234567890123456789012345678901234'\n      const transactions = [createMockTransaction({ hash: fullHash })]\n\n      mockedGetAccountTransactions.mockResolvedValue({\n        transactions,\n        marker: undefined,\n      })\n\n      const TestWrapper = createTestWrapper(queryClient)\n      render(\n        <TestWrapper>\n          <VaultTransactions accountId=\"rTestAccount\" />\n        </TestWrapper>,\n      )\n\n      // The hash should be shortened (first 6 chars + ... + last 6 chars pattern)\n      await waitFor(() => {\n        // shortenTxHash function shortens to \"ABC123...1234\" format\n        const hashElement = screen.getByText(/ABC123...901234/)\n        expect(hashElement).toBeInTheDocument()\n      })\n    })\n\n    it('shows success status for successful transactions', async () => {\n      const transactions = [createMockTransaction({ result: 'tesSUCCESS' })]\n\n      mockedGetAccountTransactions.mockResolvedValue({\n        transactions,\n        marker: undefined,\n      })\n\n      const TestWrapper = createTestWrapper(queryClient)\n      const { container } = render(\n        <TestWrapper>\n          <VaultTransactions accountId=\"rTestAccount\" />\n        </TestWrapper>,\n      )\n\n      // Successful transactions have 'success' class\n      await waitFor(() => {\n        const successRow = container.querySelector('.transaction-li.success')\n        expect(successRow).toBeInTheDocument()\n      })\n    })\n\n    it('shows fail status for failed transactions', async () => {\n      // Non-tesSUCCESS results are considered failures\n      const transactions = [createMockTransaction({ result: 'tecNO_DST' })]\n\n      mockedGetAccountTransactions.mockResolvedValue({\n        transactions,\n        marker: undefined,\n      })\n\n      const TestWrapper = createTestWrapper(queryClient)\n      const { container } = render(\n        <TestWrapper>\n          <VaultTransactions accountId=\"rTestAccount\" />\n        </TestWrapper>,\n      )\n\n      // Failed transactions have 'fail' class\n      await waitFor(() => {\n        const failRow = container.querySelector('.transaction-li.fail')\n        expect(failRow).toBeInTheDocument()\n      })\n    })\n\n    it('displays different transaction types correctly', async () => {\n      // Vault transactions can include various types: deposits, withdrawals, loans, etc.\n      const transactions = [\n        createMockTransaction({ type: 'VaultDeposit', hash: 'HASH_DEPOSIT' }),\n        createMockTransaction({ type: 'VaultWithdraw', hash: 'HASH_WITHDRAW' }),\n        createMockTransaction({ type: 'VaultClawback', hash: 'HASH_CLAWBACK' }),\n      ]\n\n      mockedGetAccountTransactions.mockResolvedValue({\n        transactions,\n        marker: undefined,\n      })\n\n      const TestWrapper = createTestWrapper(queryClient)\n      render(\n        <TestWrapper>\n          <VaultTransactions accountId=\"rTestAccount\" />\n        </TestWrapper>,\n      )\n\n      await waitFor(() => {\n        expect(screen.getByText('Vault Deposit')).toBeInTheDocument()\n        expect(screen.getByText('Vault Withdraw')).toBeInTheDocument()\n        expect(screen.getByText('Vault Clawback')).toBeInTheDocument()\n      })\n    })\n  })\n\n  /**\n   * =========================================\n   * SECTION 5: Error Handling Tests\n   * =========================================\n   * When API calls fail, the component should display appropriate\n   * error messages to inform the user of the issue.\n   */\n  describe('Error Handling', () => {\n    it('displays error message when transaction fetch fails', async () => {\n      // Simulate API error\n      mockedGetAccountTransactions.mockRejectedValue(\n        new Error('get_vault_transactions_failed'),\n      )\n\n      const TestWrapper = createTestWrapper(queryClient)\n      render(\n        <TestWrapper>\n          <VaultTransactions accountId=\"rTestAccount\" />\n        </TestWrapper>,\n      )\n\n      // The error message is displayed via TransactionTable's emptyMessage\n      await waitFor(() => {\n        expect(\n          screen.getByText('Unable to load vault transactions at this time.'),\n        ).toBeInTheDocument()\n      })\n    })\n\n    it('does not display loader when error occurs', async () => {\n      mockedGetAccountTransactions.mockRejectedValue(\n        new Error('get_vault_transactions_failed'),\n      )\n\n      const TestWrapper = createTestWrapper(queryClient)\n      const { container } = render(\n        <TestWrapper>\n          <VaultTransactions accountId=\"rTestAccount\" />\n        </TestWrapper>,\n      )\n\n      await waitFor(() => {\n        expect(container.querySelector('.loader')).not.toBeInTheDocument()\n      })\n    })\n  })\n\n  /**\n   * =========================================\n   * SECTION 6: Pagination Tests\n   * =========================================\n   * The component uses infinite query for pagination. When more\n   * transactions are available, a \"Load More\" button appears.\n   */\n  describe('Pagination', () => {\n    it('displays Load More button when more results are available', async () => {\n      // When API returns a marker, it indicates more results exist\n      mockedGetAccountTransactions.mockResolvedValue({\n        transactions: [createMockTransaction()],\n        marker: 'next_page_marker', // Presence of marker means more pages\n      })\n\n      const TestWrapper = createTestWrapper(queryClient)\n      render(\n        <TestWrapper>\n          <VaultTransactions accountId=\"rTestAccount\" />\n        </TestWrapper>,\n      )\n\n      await waitFor(() => {\n        expect(screen.getByText('Load more...')).toBeInTheDocument()\n      })\n    })\n\n    it('does not display Load More button when no more results', async () => {\n      // No marker means this is the last page\n      mockedGetAccountTransactions.mockResolvedValue({\n        transactions: [createMockTransaction()],\n        marker: undefined,\n      })\n\n      const TestWrapper = createTestWrapper(queryClient)\n      render(\n        <TestWrapper>\n          <VaultTransactions accountId=\"rTestAccount\" />\n        </TestWrapper>,\n      )\n\n      await waitFor(() => {\n        expect(screen.queryByText('Load more...')).not.toBeInTheDocument()\n      })\n    })\n\n    it('fetches next page when Load More is clicked', async () => {\n      // First page response with marker indicating more pages\n      const firstPageTransactions = [\n        createMockTransaction({ hash: 'FIRST_PAGE_HASH' }),\n      ]\n      const secondPageTransactions = [\n        createMockTransaction({ hash: 'SECOND_PAGE_HASH' }),\n      ]\n\n      mockedGetAccountTransactions\n        .mockResolvedValueOnce({\n          transactions: firstPageTransactions,\n          marker: 'page_2_marker',\n        })\n        .mockResolvedValueOnce({\n          transactions: secondPageTransactions,\n          marker: undefined, // No more pages\n        })\n\n      const TestWrapper = createTestWrapper(queryClient)\n      render(\n        <TestWrapper>\n          <VaultTransactions accountId=\"rTestAccount\" />\n        </TestWrapper>,\n      )\n\n      // Wait for first page to load\n      await waitFor(() => {\n        expect(screen.getByText('Load more...')).toBeInTheDocument()\n      })\n\n      // Click Load More\n      fireEvent.click(screen.getByText('Load more...'))\n\n      // Verify second page was requested\n      await waitFor(() => {\n        expect(mockedGetAccountTransactions).toHaveBeenCalledTimes(2)\n      })\n    })\n\n    it('accumulates transactions from multiple pages', async () => {\n      const firstPageTransactions = [\n        createMockTransaction({ hash: 'PAGE1_HASH1', account: 'rAccount1' }),\n        createMockTransaction({ hash: 'PAGE1_HASH2', account: 'rAccount2' }),\n      ]\n      const secondPageTransactions = [\n        createMockTransaction({ hash: 'PAGE2_HASH1', account: 'rAccount3' }),\n      ]\n\n      mockedGetAccountTransactions\n        .mockResolvedValueOnce({\n          transactions: firstPageTransactions,\n          marker: 'page_2_marker',\n        })\n        .mockResolvedValueOnce({\n          transactions: secondPageTransactions,\n          marker: undefined,\n        })\n\n      const TestWrapper = createTestWrapper(queryClient)\n      const { container } = render(\n        <TestWrapper>\n          <VaultTransactions accountId=\"rTestAccount\" />\n        </TestWrapper>,\n      )\n\n      // Wait for first page\n      await waitFor(() => {\n        expect(screen.getByText('Load more...')).toBeInTheDocument()\n      })\n\n      // Click Load More to fetch second page\n      fireEvent.click(screen.getByText('Load more...'))\n\n      // After loading both pages, all 3 transactions should be displayed\n      await waitFor(() => {\n        const transactionRows = container.querySelectorAll(\n          '.transaction-li:not(.transaction-li-header)',\n        )\n        expect(transactionRows.length).toBe(3)\n      })\n    })\n\n    it('hides Load More button after all pages are loaded', async () => {\n      mockedGetAccountTransactions\n        .mockResolvedValueOnce({\n          transactions: [createMockTransaction()],\n          marker: 'page_2_marker',\n        })\n        .mockResolvedValueOnce({\n          transactions: [createMockTransaction()],\n          marker: undefined, // Last page\n        })\n\n      const TestWrapper = createTestWrapper(queryClient)\n      render(\n        <TestWrapper>\n          <VaultTransactions accountId=\"rTestAccount\" />\n        </TestWrapper>,\n      )\n\n      await waitFor(() => {\n        expect(screen.getByText('Load more...')).toBeInTheDocument()\n      })\n\n      fireEvent.click(screen.getByText('Load more...'))\n\n      // After loading last page, Load More should disappear\n      await waitFor(() => {\n        expect(screen.queryByText('Load more...')).not.toBeInTheDocument()\n      })\n    })\n  })\n\n  /**\n   * =========================================\n   * SECTION 7: Query Behavior Tests\n   * =========================================\n   * Tests for the useInfiniteQuery behavior and its configuration.\n   */\n  describe('Query Behavior', () => {\n    it('does not fetch when accountId is empty', () => {\n      const TestWrapper = createTestWrapper(queryClient)\n      render(\n        <TestWrapper>\n          <VaultTransactions accountId=\"\" />\n        </TestWrapper>,\n      )\n\n      // Query should not be enabled when accountId is empty\n      expect(mockedGetAccountTransactions).not.toHaveBeenCalled()\n    })\n\n    it('fetches transactions with correct accountId', async () => {\n      const testAccountId = 'rVaultPseudoAccount456'\n      mockedGetAccountTransactions.mockResolvedValue({\n        transactions: [],\n        marker: undefined,\n      })\n\n      const TestWrapper = createTestWrapper(queryClient)\n      render(\n        <TestWrapper>\n          <VaultTransactions accountId={testAccountId} />\n        </TestWrapper>,\n      )\n\n      await waitFor(() => {\n        expect(mockedGetAccountTransactions).toHaveBeenCalledWith(\n          testAccountId,\n          undefined, // currency\n          '', // marker (empty for first page)\n          undefined, // limit\n          mockSocket, // rippledSocket\n        )\n      })\n    })\n\n    it('passes marker to subsequent page requests', async () => {\n      const pageMarker = 'test_marker_12345'\n      mockedGetAccountTransactions\n        .mockResolvedValueOnce({\n          transactions: [createMockTransaction()],\n          marker: pageMarker,\n        })\n        .mockResolvedValueOnce({\n          transactions: [],\n          marker: undefined,\n        })\n\n      const TestWrapper = createTestWrapper(queryClient)\n      render(\n        <TestWrapper>\n          <VaultTransactions accountId=\"rTestAccount\" />\n        </TestWrapper>,\n      )\n\n      await waitFor(() => {\n        expect(screen.getByText('Load more...')).toBeInTheDocument()\n      })\n\n      fireEvent.click(screen.getByText('Load more...'))\n\n      // Second call should include the marker from first response\n      await waitFor(() => {\n        expect(mockedGetAccountTransactions).toHaveBeenNthCalledWith(\n          2,\n          'rTestAccount',\n          undefined,\n          pageMarker, // marker from previous response\n          undefined,\n          mockSocket,\n        )\n      })\n    })\n  })\n\n  /**\n   * =========================================\n   * SECTION 8: Edge Cases\n   * =========================================\n   * Tests for unusual inputs and boundary conditions.\n   */\n  describe('Edge Cases', () => {\n    it('handles transactions with missing details gracefully', async () => {\n      // Some transactions might not have details or amount\n      const transactionWithoutDetails = {\n        hash: 'HASH_NO_DETAILS',\n        type: 'AccountSet',\n        account: 'rTestAccount',\n        result: 'tesSUCCESS',\n        date: '2024-01-15T10:30:00Z',\n        // No details field\n      }\n\n      mockedGetAccountTransactions.mockResolvedValue({\n        transactions: [transactionWithoutDetails],\n        marker: undefined,\n      })\n\n      const TestWrapper = createTestWrapper(queryClient)\n      const { container } = render(\n        <TestWrapper>\n          <VaultTransactions accountId=\"rTestAccount\" />\n        </TestWrapper>,\n      )\n\n      // Component should render without crashing\n      await waitFor(() => {\n        const transactionRows = container.querySelectorAll(\n          '.transaction-li:not(.transaction-li-header)',\n        )\n        expect(transactionRows.length).toBe(1)\n      })\n    })\n\n    it('handles API returning null transactions array', async () => {\n      mockedGetAccountTransactions.mockResolvedValue({\n        transactions: null,\n        marker: undefined,\n      })\n\n      const TestWrapper = createTestWrapper(queryClient)\n      render(\n        <TestWrapper>\n          <VaultTransactions accountId=\"rTestAccount\" />\n        </TestWrapper>,\n      )\n\n      // Should show empty message, not crash\n      await waitFor(() => {\n        expect(screen.getByText('No transactions found.')).toBeInTheDocument()\n      })\n    })\n\n    it('handles very long account IDs', async () => {\n      const longAccountId = `r${'A'.repeat(50)}`\n      mockedGetAccountTransactions.mockResolvedValue({\n        transactions: [],\n        marker: undefined,\n      })\n\n      const TestWrapper = createTestWrapper(queryClient)\n      render(\n        <TestWrapper>\n          <VaultTransactions accountId={longAccountId} />\n        </TestWrapper>,\n      )\n\n      await waitFor(() => {\n        expect(mockedGetAccountTransactions).toHaveBeenCalledWith(\n          longAccountId,\n          undefined,\n          '',\n          undefined,\n          mockSocket,\n        )\n      })\n    })\n  })\n})\n"
  },
  {
    "path": "src/containers/Vault/index.tsx",
    "content": "import { FC, PropsWithChildren, useContext, useEffect, useState } from 'react'\nimport { useParams } from 'react-router'\nimport { Helmet } from 'react-helmet-async'\nimport { useQuery } from 'react-query'\nimport { useTranslation } from 'react-i18next'\nimport NoMatch from '../NoMatch'\nimport { VaultHeader } from './VaultHeader'\nimport { VaultTransactions } from './VaultTransactions'\nimport { VaultLoans } from './VaultLoans'\nimport { CurrencyToggle } from './CurrencyToggle'\nimport { Loader } from '../shared/components/Loader'\nimport { CopyableText } from '../shared/components/CopyableText/CopyableText'\nimport { Tooltip, useTooltip } from '../shared/components/Tooltip'\nimport SocketContext from '../shared/SocketContext'\nimport { getVault, getMPTIssuance } from '../../rippled/lib/rippled'\nimport { useAnalytics } from '../shared/analytics'\nimport { useTokenToUSDRate } from '../shared/hooks/useTokenToUSDRate'\nimport { parseMPTokenMetadata } from '../shared/mptUtils'\nimport {\n  NOT_FOUND,\n  BAD_REQUEST,\n  shortenVaultID,\n  getCurrencySymbol,\n  shortenMPTID,\n} from '../shared/utils'\nimport { ErrorMessage } from '../shared/Interfaces'\nimport { parseVaultName, renderAssetCurrency } from './utils'\nimport './styles.scss'\n\nconst ERROR_MESSAGES: { [code: number]: ErrorMessage } = {\n  [NOT_FOUND]: {\n    title: 'vault_not_found',\n    hints: ['check_vault_id'],\n  },\n  [BAD_REQUEST]: {\n    title: 'invalid_vault_id',\n    hints: ['check_vault_id'],\n  },\n}\n\nconst DEFAULT_ERROR: ErrorMessage = {\n  title: 'get_vault_failed',\n  hints: ['not_your_fault'],\n}\n\nconst getErrorMessage = (error: number | null) =>\n  error ? (ERROR_MESSAGES[error] ?? DEFAULT_ERROR) : DEFAULT_ERROR\n\nconst Page: FC<PropsWithChildren<{ vaultId: string }>> = ({\n  vaultId,\n  children,\n}) => (\n  <div className=\"vault-page section\">\n    <Helmet title={`Vault ${shortenVaultID(vaultId)}`} />\n    {children}\n  </div>\n)\n\nexport const Vault = () => {\n  const { t } = useTranslation()\n  const { trackScreenLoaded, trackException } = useAnalytics()\n  const { id: vaultId = '' } = useParams<{ id: string }>()\n  const [error, setError] = useState<number | null>(null)\n  const [displayCurrency, setDisplayCurrency] = useState<string>('')\n  const rippledSocket = useContext(SocketContext)\n  const { tooltip } = useTooltip()\n\n  const { data: vaultData, isFetching: loading } = useQuery(\n    ['getVault', vaultId],\n    async () => getVault(rippledSocket, vaultId),\n    {\n      enabled: !!vaultId,\n      onError: (e: any) => {\n        trackException(\n          `Error fetching Vault data for vault ID ${vaultId} --- ${JSON.stringify(e)}`,\n        )\n        setError(e.code)\n      },\n    },\n  )\n\n  // Check if USD conversion is available for this token\n  // Must be called before any early returns to satisfy React hooks rules\n  const { isAvailable: usdAvailable, isLoading: usdLoading } =\n    useTokenToUSDRate(vaultData?.Asset)\n\n  // Fetch MPT issuance data to extract ticker from metadata\n  const mptIssuanceId = vaultData?.Asset?.mpt_issuance_id\n  const { data: assetMptIssuanceData } = useQuery(\n    ['getVaultAssetMPTIssuance', mptIssuanceId],\n    async () => {\n      if (!mptIssuanceId) return null\n      const resp = await getMPTIssuance(rippledSocket, mptIssuanceId)\n      return resp?.node\n    },\n    {\n      enabled: !!mptIssuanceId,\n      onError: (e: any) => {\n        trackException(\n          `Error fetching MPT Issuance data for vault asset MPT ID ${mptIssuanceId} --- ${JSON.stringify(e)}`,\n        )\n      },\n    },\n  )\n\n  const mptTicker = parseMPTokenMetadata(assetMptIssuanceData?.MPTokenMetadata)\n    ?.ticker as string | undefined\n\n  // Compute native currency label from vault asset\n  const nativeCurrency =\n    getCurrencySymbol(vaultData?.Asset?.currency) ??\n    mptTicker ??\n    shortenMPTID(vaultData?.Asset?.mpt_issuance_id) ??\n    ''\n\n  useEffect(() => {\n    trackScreenLoaded({\n      vault_id: vaultId,\n    })\n    return () => {\n      window.scrollTo(0, 0)\n    }\n  }, [vaultId, trackScreenLoaded])\n\n  // Set displayCurrency to native currency once vault data loads,\n  // and update it when the MPIssuance ticker resolves (unless user has toggled to USD)\n  useEffect(() => {\n    if (nativeCurrency && (!displayCurrency || displayCurrency !== 'USD')) {\n      setDisplayCurrency(nativeCurrency)\n    }\n  }, [nativeCurrency]) // eslint-disable-line react-hooks/exhaustive-deps\n\n  const renderError = () => {\n    const message = getErrorMessage(error)\n    return (\n      <div className=\"vault-page section\">\n        <NoMatch title={message.title} hints={message.hints} />\n      </div>\n    )\n  }\n\n  if (error) {\n    return <Page vaultId={vaultId}>{renderError()}</Page>\n  }\n\n  // Get the Vault's (Pseudo)Account ID for transactions\n  const transactionAccountId = vaultData?.Account\n\n  return (\n    <Page vaultId={vaultId}>\n      {vaultId && loading && <Loader />}\n      {vaultId && !loading && vaultData && (\n        <>\n          <div className=\"vault-title-section\">\n            <div className=\"vault-title-left\">\n              <h1 className=\"vault-title\">\n                {parseVaultName(vaultData.Data) || t('single_asset_vault')}\n              </h1>\n              <div className=\"vault-title-id\">\n                <span className=\"vault-title-id-label\">{t('vault_id')}:</span>\n                <CopyableText\n                  text={vaultId}\n                  displayText={vaultId}\n                  showCopyIcon\n                />\n              </div>\n            </div>\n            <CurrencyToggle\n              nativeCurrencyDisplay={renderAssetCurrency(\n                vaultData?.Asset,\n                mptTicker,\n              )}\n              selected={displayCurrency}\n              onToggle={(val) => setDisplayCurrency(val || nativeCurrency)}\n              usdDisabled={!usdAvailable}\n              usdLoading={usdLoading}\n            />\n          </div>\n          <VaultHeader\n            data={vaultData}\n            vaultId={vaultId}\n            displayCurrency={displayCurrency || nativeCurrency}\n          />\n          {transactionAccountId && (\n            <VaultLoans\n              vaultId={vaultId}\n              vaultPseudoAccount={transactionAccountId}\n              displayCurrency={displayCurrency || nativeCurrency}\n              asset={vaultData.Asset}\n              mptTicker={mptTicker}\n            />\n          )}\n          {/* TODO: Include the VaultDepositors component here once Clio APIs are available */}\n          {transactionAccountId && (\n            <VaultTransactions accountId={transactionAccountId} />\n          )}\n        </>\n      )}\n      <Tooltip tooltip={tooltip} />\n    </Page>\n  )\n}\n\nexport default Vault\n"
  },
  {
    "path": "src/containers/Vault/styles.scss",
    "content": "@use '../shared/css/variables' as *;\n\n.vault-page {\n  width: 100%;\n  margin-top: 100px;\n\n  .loader {\n    min-height: 100px;\n  }\n}\n\n.vault-warning {\n  font-size: 14px;\n  text-align: center;\n}\n\n.vault-title-section {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: flex-start;\n  justify-content: space-between;\n  padding: 0 24px;\n  margin-bottom: 32px;\n  gap: 16px;\n\n  @include for-size(desktop-up) {\n    flex-wrap: nowrap;\n    padding: 0 64px;\n  }\n\n  .vault-title-left {\n    flex: 1;\n  }\n\n  .vault-title {\n    margin: 0 0 16px;\n    color: $white;\n    font-size: 36px;\n    @include bold;\n\n    @include for-size(desktop-up) {\n      font-size: 48px;\n    }\n  }\n\n  .vault-title-id {\n    display: flex;\n    align-items: center;\n    color: $white;\n    font-size: 14px;\n    gap: 8px;\n\n    .vault-title-id-label {\n      color: $black-40;\n      font-size: 12px;\n      letter-spacing: 0.5px;\n      text-transform: uppercase;\n    }\n  }\n}\n\n.currency-toggle-wrapper {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n}\n\n.currency-toggle {\n  display: flex;\n  align-items: center;\n  padding: 4px;\n  border: 1px solid $black-40;\n  border-radius: 6px;\n  background: transparent;\n\n  .toggle-option {\n    border: none;\n    border-radius: 4px;\n    background: transparent;\n    color: $black-40;\n    cursor: pointer;\n    font-size: 14px;\n    transition: all 0.2s ease;\n    @include medium;\n\n    &:hover:not(.disabled) {\n      color: $white;\n    }\n\n    &.active {\n      background: transparent;\n      color: $green;\n    }\n\n    &.disabled {\n      cursor: not-allowed;\n      opacity: 0.4;\n\n      &:hover {\n        color: $black-40;\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "src/containers/Vault/test/CurrencyToggle.test.tsx",
    "content": "/**\n * CurrencyToggle Component Unit Tests\n *\n * This test suite validates the CurrencyToggle component which allows users\n * to switch between viewing values in the vault's native currency or USD.\n *\n * Key concepts tested:\n * - Basic rendering (native currency button, USD button, help icon)\n * - Toggle functionality (clicking buttons triggers onToggle callback)\n * - Active state styling (selected currency shows active class)\n * - USD button disabled state (when conversion rate is unavailable)\n * - USD button loading state (while fetching conversion rate)\n * - Tooltip behavior (help icon, disabled/loading tooltips)\n */\n\nimport { render, screen, fireEvent } from '@testing-library/react'\nimport { I18nextProvider } from 'react-i18next'\nimport i18n from '../../../i18n/testConfigEnglish'\nimport { CurrencyToggle } from '../CurrencyToggle'\n\n// Mock the useTooltip hook\nconst mockShowTooltip = jest.fn()\nconst mockHideTooltip = jest.fn()\njest.mock('../../shared/components/Tooltip', () => ({\n  useTooltip: () => ({\n    showTooltip: mockShowTooltip,\n    hideTooltip: mockHideTooltip,\n  }),\n}))\n\n/**\n * TestWrapper Component\n *\n * Provides I18nextProvider for translated text in the component.\n */\nconst TestWrapper = ({ children }: { children: React.ReactNode }) => (\n  <I18nextProvider i18n={i18n}>{children}</I18nextProvider>\n)\n\ndescribe('CurrencyToggle Component', () => {\n  // Reset mocks before each test\n  beforeEach(() => {\n    jest.clearAllMocks()\n  })\n\n  /**\n   * =========================================\n   * SECTION 1: Basic Rendering Tests\n   * =========================================\n   * Verify the component renders all expected elements.\n   */\n  describe('Basic Rendering', () => {\n    it('renders native currency and USD button', () => {\n      const onToggle = jest.fn()\n\n      render(\n        <TestWrapper>\n          <CurrencyToggle\n            nativeCurrencyDisplay={<span>ABC</span>}\n            selected=\"ABC\"\n            onToggle={onToggle}\n          />\n        </TestWrapper>,\n      )\n\n      expect(screen.getByText('ABC')).toBeInTheDocument()\n      expect(screen.getByText('USD')).toBeInTheDocument()\n    })\n\n    it('renders help icon', () => {\n      const onToggle = jest.fn()\n\n      const { container } = render(\n        <TestWrapper>\n          <CurrencyToggle\n            nativeCurrencyDisplay={<span>XRP</span>}\n            selected=\"XRP\"\n            onToggle={onToggle}\n          />\n        </TestWrapper>,\n      )\n\n      expect(\n        container.querySelector('.currency-toggle-wrapper > .hover'),\n      ).toBeInTheDocument()\n    })\n  })\n\n  /**\n   * =========================================\n   * SECTION 2: Active State Tests\n   * =========================================\n   * Verify correct styling when each currency is selected.\n   */\n  describe('Active State', () => {\n    it('shows native currency button as active when selected is not USD', () => {\n      const onToggle = jest.fn()\n\n      render(\n        <TestWrapper>\n          <CurrencyToggle\n            nativeCurrencyDisplay={<span>XRP</span>}\n            selected=\"XRP\"\n            onToggle={onToggle}\n          />\n        </TestWrapper>,\n      )\n\n      const nativeButton = screen.getByText('XRP').closest('button')\n      expect(nativeButton).toHaveClass('active')\n    })\n\n    it('shows USD button as active when selected is \"USD\"', () => {\n      const onToggle = jest.fn()\n\n      render(\n        <TestWrapper>\n          <CurrencyToggle\n            nativeCurrencyDisplay={<span>XRP</span>}\n            selected=\"USD\"\n            onToggle={onToggle}\n          />\n        </TestWrapper>,\n      )\n\n      const usdButton = screen.getByText('USD')\n      expect(usdButton).toHaveClass('active')\n    })\n\n    it('native currency button is not active when USD is selected', () => {\n      const onToggle = jest.fn()\n\n      render(\n        <TestWrapper>\n          <CurrencyToggle\n            nativeCurrencyDisplay={<span>XRP</span>}\n            selected=\"USD\"\n            onToggle={onToggle}\n          />\n        </TestWrapper>,\n      )\n\n      const nativeButton = screen.getByText('XRP').closest('button')\n      expect(nativeButton).not.toHaveClass('active')\n    })\n\n    it('USD button is not active when native currency is selected', () => {\n      const onToggle = jest.fn()\n\n      render(\n        <TestWrapper>\n          <CurrencyToggle\n            nativeCurrencyDisplay={<span>XRP</span>}\n            selected=\"XRP\"\n            onToggle={onToggle}\n          />\n        </TestWrapper>,\n      )\n\n      const usdButton = screen.getByText('USD')\n      expect(usdButton).not.toHaveClass('active')\n    })\n  })\n\n  /**\n   * =========================================\n   * SECTION 3: Toggle Functionality Tests\n   * =========================================\n   * Verify clicking buttons triggers the onToggle callback correctly.\n   */\n  describe('Toggle Functionality', () => {\n    it('calls onToggle with empty string when native currency button is clicked', () => {\n      const onToggle = jest.fn()\n\n      render(\n        <TestWrapper>\n          <CurrencyToggle\n            nativeCurrencyDisplay={<span>XRP</span>}\n            selected=\"XRP\"\n            onToggle={onToggle}\n          />\n        </TestWrapper>,\n      )\n\n      fireEvent.click(screen.getByText('XRP'))\n      // Empty string indicates native currency\n      expect(onToggle).toHaveBeenCalledWith('')\n    })\n\n    it('calls onToggle with \"USD\" when USD button is clicked', () => {\n      const onToggle = jest.fn()\n\n      render(\n        <TestWrapper>\n          <CurrencyToggle\n            nativeCurrencyDisplay={<span>XRP</span>}\n            selected=\"XRP\"\n            onToggle={onToggle}\n          />\n        </TestWrapper>,\n      )\n\n      fireEvent.click(screen.getByText('USD'))\n      expect(onToggle).toHaveBeenCalledWith('USD')\n    })\n\n    it('allows clicking native currency button even when already selected', () => {\n      const onToggle = jest.fn()\n\n      render(\n        <TestWrapper>\n          <CurrencyToggle\n            nativeCurrencyDisplay={<span>XRP</span>}\n            selected=\"XRP\"\n            onToggle={onToggle}\n          />\n        </TestWrapper>,\n      )\n\n      fireEvent.click(screen.getByText('XRP'))\n      // Empty string indicates native currency\n      expect(onToggle).toHaveBeenCalledWith('')\n    })\n  })\n\n  /**\n   * =========================================\n   * SECTION 4: USD Disabled State Tests\n   * =========================================\n   * When USD conversion rate is unavailable, the USD button should be disabled.\n   */\n  describe('USD Disabled State (Rate Unavailable)', () => {\n    it('disables USD button when usdDisabled is true', () => {\n      const onToggle = jest.fn()\n\n      render(\n        <TestWrapper>\n          <CurrencyToggle\n            nativeCurrencyDisplay={<span>XRP</span>}\n            selected=\"XRP\"\n            onToggle={onToggle}\n            usdDisabled\n          />\n        </TestWrapper>,\n      )\n\n      const usdButton = screen.getByText('USD')\n      expect(usdButton).toBeDisabled()\n    })\n\n    it('adds disabled class when usdDisabled is true', () => {\n      const onToggle = jest.fn()\n\n      render(\n        <TestWrapper>\n          <CurrencyToggle\n            nativeCurrencyDisplay={<span>XRP</span>}\n            selected=\"XRP\"\n            onToggle={onToggle}\n            usdDisabled\n          />\n        </TestWrapper>,\n      )\n\n      const usdButton = screen.getByText('USD')\n      expect(usdButton).toHaveClass('disabled')\n    })\n\n    it('does not call onToggle when disabled USD button is clicked', () => {\n      const onToggle = jest.fn()\n\n      render(\n        <TestWrapper>\n          <CurrencyToggle\n            nativeCurrencyDisplay={<span>XRP</span>}\n            selected=\"XRP\"\n            onToggle={onToggle}\n            usdDisabled\n          />\n        </TestWrapper>,\n      )\n\n      fireEvent.click(screen.getByText('USD'))\n      expect(onToggle).not.toHaveBeenCalled()\n    })\n\n    it('native currency button still works when USD is disabled', () => {\n      const onToggle = jest.fn()\n\n      render(\n        <TestWrapper>\n          <CurrencyToggle\n            nativeCurrencyDisplay={<span>XRP</span>}\n            selected=\"USD\"\n            onToggle={onToggle}\n            usdDisabled\n          />\n        </TestWrapper>,\n      )\n\n      fireEvent.click(screen.getByText('XRP'))\n      // Empty string indicates switching back to native currency\n      expect(onToggle).toHaveBeenCalledWith('')\n    })\n\n    it('shows unavailable tooltip on hover when USD is disabled', () => {\n      const onToggle = jest.fn()\n\n      const { container } = render(\n        <TestWrapper>\n          <CurrencyToggle\n            nativeCurrencyDisplay={<span>XRP</span>}\n            selected=\"XRP\"\n            onToggle={onToggle}\n            usdDisabled\n          />\n        </TestWrapper>,\n      )\n\n      const hoverIcon = container.querySelector(\n        '.toggle-option-wrapper .hover',\n      )!\n      fireEvent.mouseOver(hoverIcon)\n\n      expect(mockShowTooltip).toHaveBeenCalledWith(\n        'text',\n        expect.any(Object),\n        'USD conversion not available for this token',\n        expect.objectContaining({\n          x: expect.any(Number),\n          y: expect.any(Number),\n        }),\n      )\n    })\n\n    it('hides tooltip on mouse leave', () => {\n      const onToggle = jest.fn()\n\n      const { container } = render(\n        <TestWrapper>\n          <CurrencyToggle\n            nativeCurrencyDisplay={<span>XRP</span>}\n            selected=\"XRP\"\n            onToggle={onToggle}\n            usdDisabled\n          />\n        </TestWrapper>,\n      )\n\n      const hoverIcon = container.querySelector(\n        '.toggle-option-wrapper .hover',\n      )!\n      fireEvent.mouseOver(hoverIcon)\n      fireEvent.mouseLeave(hoverIcon)\n\n      expect(mockHideTooltip).toHaveBeenCalled()\n    })\n  })\n\n  /**\n   * =========================================\n   * SECTION 5: USD Loading State Tests\n   * =========================================\n   * While fetching conversion rate, show loading state.\n   */\n  describe('USD Loading State', () => {\n    it('shows \"...\" instead of \"USD\" when loading', () => {\n      const onToggle = jest.fn()\n\n      render(\n        <TestWrapper>\n          <CurrencyToggle\n            nativeCurrencyDisplay={<span>XRP</span>}\n            selected=\"XRP\"\n            onToggle={onToggle}\n            usdLoading\n          />\n        </TestWrapper>,\n      )\n\n      expect(screen.getByText('...')).toBeInTheDocument()\n      expect(screen.queryByText('USD')).not.toBeInTheDocument()\n    })\n\n    it('disables USD button when loading', () => {\n      const onToggle = jest.fn()\n\n      render(\n        <TestWrapper>\n          <CurrencyToggle\n            nativeCurrencyDisplay={<span>XRP</span>}\n            selected=\"XRP\"\n            onToggle={onToggle}\n            usdLoading\n          />\n        </TestWrapper>,\n      )\n\n      const loadingButton = screen.getByText('...')\n      expect(loadingButton).toBeDisabled()\n    })\n\n    it('adds disabled class when loading', () => {\n      const onToggle = jest.fn()\n\n      render(\n        <TestWrapper>\n          <CurrencyToggle\n            nativeCurrencyDisplay={<span>XRP</span>}\n            selected=\"XRP\"\n            onToggle={onToggle}\n            usdLoading\n          />\n        </TestWrapper>,\n      )\n\n      const loadingButton = screen.getByText('...')\n      expect(loadingButton).toHaveClass('disabled')\n    })\n\n    it('does not call onToggle when loading USD button is clicked', () => {\n      const onToggle = jest.fn()\n\n      render(\n        <TestWrapper>\n          <CurrencyToggle\n            nativeCurrencyDisplay={<span>XRP</span>}\n            selected=\"XRP\"\n            onToggle={onToggle}\n            usdLoading\n          />\n        </TestWrapper>,\n      )\n\n      fireEvent.click(screen.getByText('...'))\n      expect(onToggle).not.toHaveBeenCalled()\n    })\n\n    it('shows loading tooltip on hover when loading', () => {\n      const onToggle = jest.fn()\n\n      const { container } = render(\n        <TestWrapper>\n          <CurrencyToggle\n            nativeCurrencyDisplay={<span>XRP</span>}\n            selected=\"XRP\"\n            onToggle={onToggle}\n            usdLoading\n          />\n        </TestWrapper>,\n      )\n\n      const hoverIcon = container.querySelector(\n        '.toggle-option-wrapper .hover',\n      )!\n      fireEvent.mouseOver(hoverIcon)\n\n      expect(mockShowTooltip).toHaveBeenCalledWith(\n        'text',\n        expect.any(Object),\n        'Loading USD conversion rate...',\n        expect.objectContaining({\n          x: expect.any(Number),\n          y: expect.any(Number),\n        }),\n      )\n    })\n  })\n\n  /**\n   * =========================================\n   * SECTION 6: Help Icon Tooltip Tests\n   * =========================================\n   * Verify the help icon shows tooltip on hover.\n   */\n  describe('Help Icon Tooltip', () => {\n    it('shows help tooltip on hover', () => {\n      const onToggle = jest.fn()\n\n      const { container } = render(\n        <TestWrapper>\n          <CurrencyToggle\n            nativeCurrencyDisplay={<span>EUR</span>}\n            selected=\"EUR\"\n            onToggle={onToggle}\n          />\n        </TestWrapper>,\n      )\n\n      const helpIcon = container.querySelector(\n        '.currency-toggle-wrapper > .hover',\n      )!\n      fireEvent.mouseOver(helpIcon)\n\n      expect(mockShowTooltip).toHaveBeenCalledWith(\n        'text',\n        expect.any(Object),\n        'Toggle to view values in native-currency or USD',\n        expect.objectContaining({\n          x: expect.any(Number),\n          y: expect.any(Number),\n        }),\n      )\n    })\n\n    it('hides help tooltip on mouse leave', () => {\n      const onToggle = jest.fn()\n\n      const { container } = render(\n        <TestWrapper>\n          <CurrencyToggle\n            nativeCurrencyDisplay={<span>XRP</span>}\n            selected=\"XRP\"\n            onToggle={onToggle}\n          />\n        </TestWrapper>,\n      )\n\n      const helpIcon = container.querySelector(\n        '.currency-toggle-wrapper > .hover',\n      )!\n      fireEvent.mouseOver(helpIcon)\n      fireEvent.mouseLeave(helpIcon)\n\n      expect(mockHideTooltip).toHaveBeenCalled()\n    })\n  })\n\n  /**\n   * =========================================\n   * SECTION 7: Enabled USD State Tests\n   * =========================================\n   * When USD conversion is available and not loading.\n   */\n  describe('USD Enabled State (Rate Available)', () => {\n    it('USD button is enabled by default (no usdDisabled or usdLoading)', () => {\n      const onToggle = jest.fn()\n\n      render(\n        <TestWrapper>\n          <CurrencyToggle\n            nativeCurrencyDisplay={<span>XRP</span>}\n            selected=\"XRP\"\n            onToggle={onToggle}\n          />\n        </TestWrapper>,\n      )\n\n      const usdButton = screen.getByText('USD')\n      expect(usdButton).not.toBeDisabled()\n      expect(usdButton).not.toHaveClass('disabled')\n    })\n\n    it('USD button is enabled when usdDisabled is explicitly false', () => {\n      const onToggle = jest.fn()\n\n      render(\n        <TestWrapper>\n          <CurrencyToggle\n            nativeCurrencyDisplay={<span>XRP</span>}\n            selected=\"XRP\"\n            onToggle={onToggle}\n            usdDisabled={false}\n          />\n        </TestWrapper>,\n      )\n\n      const usdButton = screen.getByText('USD')\n      expect(usdButton).not.toBeDisabled()\n    })\n\n    it('does not show tooltip on hover when USD is enabled', () => {\n      const onToggle = jest.fn()\n\n      render(\n        <TestWrapper>\n          <CurrencyToggle\n            nativeCurrencyDisplay={<span>XRP</span>}\n            selected=\"XRP\"\n            onToggle={onToggle}\n          />\n        </TestWrapper>,\n      )\n\n      const usdButton = screen.getByText('USD')\n      // Mouse events are on the wrapper span\n      const wrapper = usdButton.parentElement!\n      fireEvent.mouseEnter(wrapper)\n\n      // showTooltip should not be called because getUsdTooltip returns ''\n      expect(mockShowTooltip).not.toHaveBeenCalled()\n    })\n\n    it('calls onToggle when enabled USD button is clicked', () => {\n      const onToggle = jest.fn()\n\n      render(\n        <TestWrapper>\n          <CurrencyToggle\n            nativeCurrencyDisplay={<span>XRP</span>}\n            selected=\"XRP\"\n            onToggle={onToggle}\n            usdDisabled={false}\n            usdLoading={false}\n          />\n        </TestWrapper>,\n      )\n\n      fireEvent.click(screen.getByText('USD'))\n      expect(onToggle).toHaveBeenCalledWith('USD')\n    })\n  })\n\n  /**\n   * =========================================\n   * SECTION 8: JSX Display Prop Tests\n   * =========================================\n   * Test the nativeCurrencyDisplay prop for custom JSX rendering.\n   */\n  describe('JSX Display Prop (nativeCurrencyDisplay)', () => {\n    it('renders nativeCurrencyDisplay when provided', () => {\n      const onToggle = jest.fn()\n\n      render(\n        <TestWrapper>\n          <CurrencyToggle\n            nativeCurrencyDisplay={\n              <span data-testid=\"custom-display\">Custom-XRP</span>\n            }\n            selected=\"Custom-XRP\"\n            onToggle={onToggle}\n          />\n        </TestWrapper>,\n      )\n\n      expect(screen.getByTestId('custom-display')).toBeInTheDocument()\n      expect(screen.getByText('Custom-XRP')).toBeInTheDocument()\n    })\n\n    it('calls onToggle with empty string when JSX display is clicked', () => {\n      const onToggle = jest.fn()\n\n      render(\n        <TestWrapper>\n          <CurrencyToggle\n            nativeCurrencyDisplay={<span>ABC123...</span>}\n            selected=\"ABC123\"\n            onToggle={onToggle}\n          />\n        </TestWrapper>,\n      )\n\n      // Click the native currency button (which shows the JSX display)\n      fireEvent.click(screen.getByText('ABC123...'))\n      // Empty string indicates switching to native currency\n      expect(onToggle).toHaveBeenCalledWith('')\n    })\n  })\n\n  /**\n   * =========================================\n   * SECTION 9: MPT Ticker Display Tests\n   * =========================================\n   * When an MPT asset has XLS-89 metadata with a ticker symbol,\n   * the toggle should display the ticker (e.g., \"VTKN\") instead\n   * of the truncated MPT ID (e.g., \"000086F0...234DE\").\n   */\n  describe('MPT Ticker Display', () => {\n    it('displays MPT ticker symbol when available', () => {\n      const onToggle = jest.fn()\n\n      render(\n        <TestWrapper>\n          <CurrencyToggle\n            nativeCurrencyDisplay={<span>VTKN</span>}\n            selected=\"VTKN\"\n            onToggle={onToggle}\n          />\n        </TestWrapper>,\n      )\n\n      // Ticker should appear as the native currency button text\n      expect(screen.getByText('VTKN')).toBeInTheDocument()\n      // Should NOT show an MPT ID format\n      expect(screen.queryByText(/MPT \\(/)).not.toBeInTheDocument()\n    })\n\n    it('shows MPT ticker as active when selected', () => {\n      const onToggle = jest.fn()\n\n      render(\n        <TestWrapper>\n          <CurrencyToggle\n            nativeCurrencyDisplay={<span>VTKN</span>}\n            selected=\"VTKN\"\n            onToggle={onToggle}\n          />\n        </TestWrapper>,\n      )\n\n      const tickerButton = screen.getByText('VTKN').closest('button')\n      expect(tickerButton).toHaveClass('active')\n    })\n\n    it('calls onToggle with empty string when MPT ticker button is clicked', () => {\n      const onToggle = jest.fn()\n\n      render(\n        <TestWrapper>\n          <CurrencyToggle\n            nativeCurrencyDisplay={<span>VTKN</span>}\n            selected=\"USD\"\n            onToggle={onToggle}\n          />\n        </TestWrapper>,\n      )\n\n      fireEvent.click(screen.getByText('VTKN'))\n      expect(onToggle).toHaveBeenCalledWith('')\n    })\n\n    it('falls back to truncated MPT ID when ticker is not available', () => {\n      const onToggle = jest.fn()\n\n      render(\n        <TestWrapper>\n          <CurrencyToggle\n            nativeCurrencyDisplay={<span>000086F0...234DE</span>}\n            selected=\"\"\n            onToggle={onToggle}\n          />\n        </TestWrapper>,\n      )\n\n      expect(screen.getByText('000086F0...234DE')).toBeInTheDocument()\n    })\n\n    it('toggles between MPT ticker and USD correctly', () => {\n      const selections: string[] = []\n      const onToggle = (currency: string) => {\n        selections.push(currency)\n      }\n\n      const { rerender } = render(\n        <TestWrapper>\n          <CurrencyToggle\n            nativeCurrencyDisplay={<span>VTKN</span>}\n            selected=\"VTKN\"\n            onToggle={onToggle}\n          />\n        </TestWrapper>,\n      )\n\n      // Click USD\n      fireEvent.click(screen.getByText('USD'))\n      expect(selections).toEqual(['USD'])\n\n      // Rerender with USD selected\n      rerender(\n        <TestWrapper>\n          <CurrencyToggle\n            nativeCurrencyDisplay={<span>VTKN</span>}\n            selected=\"USD\"\n            onToggle={onToggle}\n          />\n        </TestWrapper>,\n      )\n\n      // Click ticker to switch back\n      fireEvent.click(screen.getByText('VTKN'))\n      expect(selections).toEqual(['USD', ''])\n    })\n  })\n\n  /**\n   * =========================================\n   * SECTION 10: Edge Cases\n   * =========================================\n   * Test edge cases and unusual inputs.\n   */\n  describe('Edge Cases', () => {\n    it('maintains correct state after multiple toggles', () => {\n      const selections: string[] = []\n      const onToggle = (currency: string) => {\n        selections.push(currency)\n      }\n\n      const { rerender } = render(\n        <TestWrapper>\n          <CurrencyToggle\n            nativeCurrencyDisplay={<span>XRP</span>}\n            selected=\"XRP\"\n            onToggle={onToggle}\n          />\n        </TestWrapper>,\n      )\n\n      // Click USD\n      fireEvent.click(screen.getByText('USD'))\n      expect(selections).toContain('USD')\n\n      // Rerender with USD selected\n      rerender(\n        <TestWrapper>\n          <CurrencyToggle\n            nativeCurrencyDisplay={<span>XRP</span>}\n            selected=\"USD\"\n            onToggle={onToggle}\n          />\n        </TestWrapper>,\n      )\n\n      // Click native currency button - passes empty string to switch to native\n      fireEvent.click(screen.getByText('XRP'))\n      expect(selections).toContain('')\n\n      // Both clicks resulted in expected callbacks\n      expect(selections).toEqual(['USD', ''])\n    })\n  })\n})\n"
  },
  {
    "path": "src/containers/Vault/test/Vault.test.tsx",
    "content": "/**\n * Vault Component Unit Tests\n *\n * This test suite validates the top-level Vault page component.\n * Tests focus on page-level behavior NOT covered by child component tests:\n *\n * - Page structure and Helmet title\n * - Loading state\n * - Error handling (NOT_FOUND, BAD_REQUEST, generic errors)\n * - No vault ID warning state\n * - Title section (decoded name vs \"Yield Pool\" fallback)\n * - Conditional rendering of child components\n * - Analytics tracking (trackScreenLoaded)\n * - Asset currency display logic\n *\n * Child components (VaultHeader, VaultLoans, VaultTransactions, VaultDepositors)\n * are mocked to avoid redundant testing - they have their own test suites.\n */\n\nimport { render, screen, waitFor } from '@testing-library/react'\nimport { I18nextProvider } from 'react-i18next'\nimport { MemoryRouter, Route, Routes } from 'react-router'\nimport { QueryClientProvider, QueryClient } from 'react-query'\nimport { HelmetProvider } from 'react-helmet-async'\nimport i18n from '../../../i18n/testConfigEnglish'\nimport SocketContext from '../../shared/SocketContext'\nimport { Vault } from '../index'\nimport { getVault } from '../../../rippled/lib/rippled'\nimport Mock = jest.Mock\n\n// Mock the rippled API\njest.mock('../../../rippled/lib/rippled', () => ({\n  getVault: jest.fn(),\n  getMPTIssuance: jest.fn(),\n}))\n\n// Mock analytics\nconst mockTrackScreenLoaded = jest.fn()\nconst mockTrackException = jest.fn()\njest.mock('../../shared/analytics', () => ({\n  useAnalytics: () => ({\n    trackScreenLoaded: mockTrackScreenLoaded,\n    trackException: mockTrackException,\n  }),\n}))\n\n// Mock NoMatch component to avoid its socket dependencies\njest.mock('../../NoMatch', () => ({\n  __esModule: true,\n  default: ({ title, hints }: { title: string; hints?: string[] }) => (\n    <div data-testid=\"no-match\">\n      <div data-testid=\"no-match-title\">{title}</div>\n      {hints?.map((hint) => (\n        <div data-testid=\"no-match-hint\">{hint}</div>\n      ))}\n    </div>\n  ),\n}))\n\n// Mock useTokenToUSDRate hook\njest.mock('../../shared/hooks/useTokenToUSDRate', () => ({\n  useTokenToUSDRate: () => ({ rate: 2.0, isAvailable: true, isLoading: false }),\n}))\n\n// Mock child components to avoid testing their internals\njest.mock('../VaultHeader', () => ({\n  VaultHeader: ({ vaultId }: { vaultId: string }) => (\n    <div data-testid=\"vault-header\">VaultHeader: {vaultId}</div>\n  ),\n}))\n\njest.mock('../VaultLoans', () => ({\n  VaultLoans: ({ vaultId, vaultPseudoAccount, asset }: any) => {\n    // Mock mirrors VaultLoans currency derivation logic\n    const NON_STANDARD_CODE_LENGTH = 40\n    const LP_TOKEN_IDENTIFIER = '03'\n    const hexToString = (hex: string) => {\n      let s = ''\n      for (let i = 0; i < hex.length; i += 2) {\n        const code = parseInt(hex.substring(i, i + 2), 16)\n        if (!isNaN(code) && code !== 0) s += String.fromCharCode(code)\n      }\n      return s\n    }\n    let currency = ''\n    if (asset?.currency) {\n      if (\n        asset.currency.length === NON_STANDARD_CODE_LENGTH &&\n        asset.currency.substring(0, 2) !== LP_TOKEN_IDENTIFIER\n      ) {\n        currency = hexToString(asset.currency)\n      } else {\n        currency = asset.currency\n      }\n    } else if (asset?.mpt_issuance_id) {\n      currency = 'MPT'\n    }\n    return (\n      <div data-testid=\"vault-loans\">\n        VaultLoans: {vaultId} | {vaultPseudoAccount} | {currency}\n      </div>\n    )\n  },\n}))\n\njest.mock('../VaultTransactions', () => ({\n  VaultTransactions: ({ accountId }: { accountId: string }) => (\n    <div data-testid=\"vault-transactions\">VaultTransactions: {accountId}</div>\n  ),\n}))\n\njest.mock('../VaultDepositors', () => ({\n  VaultDepositors: ({ shareMptId }: { shareMptId: string }) => (\n    <div data-testid=\"vault-depositors\">VaultDepositors: {shareMptId}</div>\n  ),\n}))\n\nconst mockedGetVault = getVault as Mock\nconst mockSocket = {\n  getState: jest.fn().mockReturnValue('connected'),\n} as any\n\nconst createTestQueryClient = () =>\n  new QueryClient({\n    defaultOptions: {\n      queries: {\n        retry: false,\n        staleTime: 0,\n        cacheTime: 0,\n      },\n    },\n  })\n\n/**\n * TestWrapper with route parameter support\n *\n * Uses MemoryRouter to simulate URL with vault ID parameter.\n * HelmetProvider is needed for the Helmet component.\n */\nconst createTestWrapper = (queryClient: QueryClient, vaultId: string = '') => {\n  const initialEntries = vaultId ? [`/vault/${vaultId}`] : ['/vault/']\n\n  return ({ children }: { children: React.ReactNode }) => (\n    <HelmetProvider>\n      <I18nextProvider i18n={i18n}>\n        <MemoryRouter initialEntries={initialEntries}>\n          <SocketContext.Provider value={mockSocket}>\n            <QueryClientProvider client={queryClient}>\n              <Routes>\n                <Route path=\"/vault/:id?\" element={children} />\n              </Routes>\n            </QueryClientProvider>\n          </SocketContext.Provider>\n        </MemoryRouter>\n      </I18nextProvider>\n    </HelmetProvider>\n  )\n}\n\n/**\n * Mock vault data generator\n *\n * Note: The Vault ledger object uses `Account` for the pseudo-account ID\n * (not `PseudoAccount`). This matches the XRPL Vault ledger entry structure.\n */\nconst createMockVaultData = (overrides: any = {}) => ({\n  Owner: 'rOwnerAccount123',\n  Account: 'rPseudoAccount456', // Vault's pseudo-account\n  Asset: { currency: 'XRP' },\n  AssetsTotal: '1000000',\n  AssetsAvailable: '500000',\n  ShareMPTID: 'SHARE_MPT_ID_123',\n  ShareTotal: '100000',\n  Data: '48656c6c6f205661756c74', // \"Hello Vault\" in hex\n  ...overrides,\n})\n\ndescribe('Vault Component', () => {\n  let queryClient: QueryClient\n\n  beforeEach(() => {\n    jest.clearAllMocks()\n    queryClient = createTestQueryClient()\n  })\n\n  afterEach(() => {\n    queryClient.clear()\n  })\n\n  /**\n   * =========================================\n   * SECTION 1: Page Structure Tests\n   * =========================================\n   */\n  describe('Page Structure', () => {\n    it('renders vault-page container', async () => {\n      mockedGetVault.mockResolvedValue(createMockVaultData())\n\n      const TestWrapper = createTestWrapper(queryClient, 'TEST_VAULT_ID')\n      const { container } = render(\n        <TestWrapper>\n          <Vault />\n        </TestWrapper>,\n      )\n\n      await waitFor(() => {\n        expect(container.querySelector('.vault-page')).toBeInTheDocument()\n      })\n    })\n\n    it('applies section class for max-width constraints', async () => {\n      mockedGetVault.mockResolvedValue(createMockVaultData())\n\n      const TestWrapper = createTestWrapper(queryClient, 'TEST_VAULT_ID')\n      const { container } = render(\n        <TestWrapper>\n          <Vault />\n        </TestWrapper>,\n      )\n\n      await waitFor(() => {\n        const vaultPage = container.querySelector('.vault-page')\n        expect(vaultPage).toBeInTheDocument()\n        expect(vaultPage).toHaveClass('section')\n      })\n    })\n  })\n\n  /**\n   * =========================================\n   * SECTION 2: No Vault ID State Tests\n   * =========================================\n   */\n  describe('No Vault ID State', () => {\n    it('does not fetch vault data when no ID provided', () => {\n      const TestWrapper = createTestWrapper(queryClient, '')\n      render(\n        <TestWrapper>\n          <Vault />\n        </TestWrapper>,\n      )\n\n      expect(mockedGetVault).not.toHaveBeenCalled()\n    })\n  })\n\n  /**\n   * =========================================\n   * SECTION 3: Loading State Tests\n   * =========================================\n   */\n  describe('Loading State', () => {\n    it('displays loader while fetching vault data', async () => {\n      let resolvePromise: (value: any) => void\n      const pendingPromise = new Promise((resolve) => {\n        resolvePromise = resolve\n      })\n      mockedGetVault.mockReturnValue(pendingPromise)\n\n      const TestWrapper = createTestWrapper(queryClient, 'TEST_VAULT_ID')\n      const { container } = render(\n        <TestWrapper>\n          <Vault />\n        </TestWrapper>,\n      )\n\n      expect(container.querySelector('.loader')).toBeInTheDocument()\n\n      // Clean up\n      resolvePromise!(createMockVaultData())\n    })\n\n    it('hides loader after data loads', async () => {\n      mockedGetVault.mockResolvedValue(createMockVaultData())\n\n      const TestWrapper = createTestWrapper(queryClient, 'TEST_VAULT_ID')\n      const { container } = render(\n        <TestWrapper>\n          <Vault />\n        </TestWrapper>,\n      )\n\n      await waitFor(() => {\n        expect(container.querySelector('.loader')).not.toBeInTheDocument()\n      })\n    })\n  })\n\n  /**\n   * =========================================\n   * SECTION 4: Error Handling Tests\n   * =========================================\n   */\n  describe('Error Handling', () => {\n    it('displays NOT_FOUND error message', async () => {\n      mockedGetVault.mockRejectedValue({ code: 404 })\n\n      const TestWrapper = createTestWrapper(queryClient, 'INVALID_VAULT')\n      render(\n        <TestWrapper>\n          <Vault />\n        </TestWrapper>,\n      )\n\n      await waitFor(() => {\n        // NoMatch component is rendered with vault_not_found title\n        expect(screen.getByTestId('no-match')).toBeInTheDocument()\n        expect(screen.getByTestId('no-match-title')).toHaveTextContent(\n          'vault_not_found',\n        )\n      })\n    })\n\n    it('displays BAD_REQUEST error message', async () => {\n      mockedGetVault.mockRejectedValue({ code: 400 })\n\n      const TestWrapper = createTestWrapper(queryClient, 'MALFORMED_ID')\n      render(\n        <TestWrapper>\n          <Vault />\n        </TestWrapper>,\n      )\n\n      await waitFor(() => {\n        expect(screen.getByTestId('no-match')).toBeInTheDocument()\n        expect(screen.getByTestId('no-match-title')).toHaveTextContent(\n          'invalid_vault_id',\n        )\n      })\n    })\n\n    it('displays invalid vault ID message for non-hex vault IDs', async () => {\n      // Simulates error from rippled when vault ID is not a valid hex string (e.g., \"1234\")\n      mockedGetVault.mockRejectedValue({\n        code: 400,\n        message: 'Invalid vault ID format',\n      })\n\n      const TestWrapper = createTestWrapper(queryClient, '1234')\n      render(\n        <TestWrapper>\n          <Vault />\n        </TestWrapper>,\n      )\n\n      await waitFor(() => {\n        expect(screen.getByTestId('no-match')).toBeInTheDocument()\n        expect(screen.getByTestId('no-match-title')).toHaveTextContent(\n          'invalid_vault_id',\n        )\n      })\n    })\n\n    it('tracks exception when fetch fails', async () => {\n      const errorResponse = { code: 500, message: 'Server error' }\n      mockedGetVault.mockRejectedValue(errorResponse)\n\n      const TestWrapper = createTestWrapper(queryClient, 'TEST_VAULT_ID')\n      render(\n        <TestWrapper>\n          <Vault />\n        </TestWrapper>,\n      )\n\n      await waitFor(() => {\n        expect(mockTrackException).toHaveBeenCalledWith(\n          expect.stringContaining(\n            'Error fetching Vault data for vault ID TEST_VAULT_ID',\n          ),\n        )\n      })\n    })\n\n    it('displays user-friendly error message for generic errors', async () => {\n      // Generic server error (not 404 or 400)\n      mockedGetVault.mockRejectedValue({ code: 500, message: 'Internal error' })\n\n      const TestWrapper = createTestWrapper(queryClient, 'TEST_VAULT_ID')\n      render(\n        <TestWrapper>\n          <Vault />\n        </TestWrapper>,\n      )\n\n      await waitFor(() => {\n        expect(screen.getByTestId('no-match')).toBeInTheDocument()\n        // Should show user-friendly message instead of generic \"Something bad happened\"\n        expect(screen.getByTestId('no-match-title')).toHaveTextContent(\n          'get_vault_failed',\n        )\n      })\n    })\n  })\n\n  /**\n   * =========================================\n   * SECTION 5: Title Section Tests\n   * =========================================\n   */\n  describe('Title Section', () => {\n    it('displays decoded vault name from Data field', async () => {\n      // {\"n\":\"Hello Vault\"} encoded as hex (JSON convention for vault name)\n      const vaultData = createMockVaultData({\n        Data: '7b226e223a2248656c6c6f205661756c74227d',\n      })\n      mockedGetVault.mockResolvedValue(vaultData)\n\n      const TestWrapper = createTestWrapper(queryClient, 'TEST_VAULT_ID')\n      render(\n        <TestWrapper>\n          <Vault />\n        </TestWrapper>,\n      )\n\n      await waitFor(() => {\n        expect(screen.getByText('Hello Vault')).toBeInTheDocument()\n      })\n    })\n\n    it('displays \"Yield Pool\" fallback when no Data field', async () => {\n      const vaultData = createMockVaultData({ Data: undefined })\n      mockedGetVault.mockResolvedValue(vaultData)\n\n      const TestWrapper = createTestWrapper(queryClient, 'TEST_VAULT_ID')\n      render(\n        <TestWrapper>\n          <Vault />\n        </TestWrapper>,\n      )\n\n      await waitFor(() => {\n        expect(screen.getByText('Single Asset Vault')).toBeInTheDocument()\n      })\n    })\n\n    it('displays vault ID with copy functionality', async () => {\n      const testVaultId = 'VAULT_ID_12345'\n      mockedGetVault.mockResolvedValue(createMockVaultData())\n\n      const TestWrapper = createTestWrapper(queryClient, testVaultId)\n      const { container } = render(\n        <TestWrapper>\n          <Vault />\n        </TestWrapper>,\n      )\n\n      await waitFor(() => {\n        expect(screen.getByText('Vault ID:')).toBeInTheDocument()\n        expect(screen.getByText(testVaultId)).toBeInTheDocument()\n\n        // Verify CopyableText component is rendered with copy icon\n        const copyableWrapper = container.querySelector(\n          '.copyable-text-with-icon',\n        )\n        expect(copyableWrapper).toBeInTheDocument()\n\n        // Verify copy button exists with accessible label\n        const copyButton = screen.getByRole('button', {\n          name: 'Click to copy',\n        })\n        expect(copyButton).toBeInTheDocument()\n      })\n    })\n  })\n\n  /**\n   * =========================================\n   * SECTION 6: Child Component Rendering Tests\n   * =========================================\n   * Tests that child components receive correct props\n   * and are conditionally rendered based on data.\n   */\n  describe('Child Component Rendering', () => {\n    it('renders VaultHeader when vault data exists', async () => {\n      mockedGetVault.mockResolvedValue(createMockVaultData())\n\n      const TestWrapper = createTestWrapper(queryClient, 'TEST_VAULT_ID')\n      render(\n        <TestWrapper>\n          <Vault />\n        </TestWrapper>,\n      )\n\n      await waitFor(() => {\n        expect(screen.getByTestId('vault-header')).toBeInTheDocument()\n      })\n    })\n\n    it('renders VaultLoans with Account when available', async () => {\n      const vaultData = createMockVaultData({\n        Account: 'rPseudoAccount123',\n        Owner: 'rOwner456',\n      })\n      mockedGetVault.mockResolvedValue(vaultData)\n\n      const TestWrapper = createTestWrapper(queryClient, 'TEST_VAULT_ID')\n      render(\n        <TestWrapper>\n          <Vault />\n        </TestWrapper>,\n      )\n\n      await waitFor(() => {\n        const loansComponent = screen.getByTestId('vault-loans')\n        expect(loansComponent).toBeInTheDocument()\n        // Should use Account (pseudo-account)\n        expect(loansComponent).toHaveTextContent('rPseudoAccount123')\n      })\n    })\n\n    it('does not render VaultLoans when no account ID available', async () => {\n      const vaultData = createMockVaultData({\n        Account: undefined,\n        Owner: undefined,\n      })\n      mockedGetVault.mockResolvedValue(vaultData)\n\n      const TestWrapper = createTestWrapper(queryClient, 'TEST_VAULT_ID')\n      render(\n        <TestWrapper>\n          <Vault />\n        </TestWrapper>,\n      )\n\n      await waitFor(() => {\n        expect(screen.getByTestId('vault-header')).toBeInTheDocument()\n      })\n\n      expect(screen.queryByTestId('vault-loans')).not.toBeInTheDocument()\n    })\n\n    // TODO: Uncomment this when VaultDepositors made available\n    // it('renders VaultDepositors when ShareMPTID exists', async () => {\n    //   const vaultData = createMockVaultData({\n    //     ShareMPTID: 'SHARE_MPT_123',\n    //   })\n    //   mockedGetVault.mockResolvedValue(vaultData)\n\n    //   const TestWrapper = createTestWrapper(queryClient, 'TEST_VAULT_ID')\n    //   render(\n    //     <TestWrapper>\n    //       <Vault />\n    //     </TestWrapper>,\n    //   )\n\n    //   await waitFor(() => {\n    //     const depositorsComponent = screen.getByTestId('vault-depositors')\n    //     expect(depositorsComponent).toBeInTheDocument()\n    //     expect(depositorsComponent).toHaveTextContent('SHARE_MPT_123')\n    //   })\n    // })\n\n    it('does not render VaultDepositors when ShareMPTID missing', async () => {\n      const vaultData = createMockVaultData({\n        ShareMPTID: undefined,\n      })\n      mockedGetVault.mockResolvedValue(vaultData)\n\n      const TestWrapper = createTestWrapper(queryClient, 'TEST_VAULT_ID')\n      render(\n        <TestWrapper>\n          <Vault />\n        </TestWrapper>,\n      )\n\n      await waitFor(() => {\n        expect(screen.getByTestId('vault-header')).toBeInTheDocument()\n      })\n\n      expect(screen.queryByTestId('vault-depositors')).not.toBeInTheDocument()\n    })\n\n    it('renders VaultTransactions when account ID exists', async () => {\n      const vaultData = createMockVaultData({\n        Account: 'rPseudoAccount123',\n      })\n      mockedGetVault.mockResolvedValue(vaultData)\n\n      const TestWrapper = createTestWrapper(queryClient, 'TEST_VAULT_ID')\n      render(\n        <TestWrapper>\n          <Vault />\n        </TestWrapper>,\n      )\n\n      await waitFor(() => {\n        const transactionsComponent = screen.getByTestId('vault-transactions')\n        expect(transactionsComponent).toBeInTheDocument()\n        expect(transactionsComponent).toHaveTextContent('rPseudoAccount123')\n      })\n    })\n\n    it('renders all child components when vault data has required fields', async () => {\n      // Default mock data includes: PseudoAccount, ShareMPTID, Asset - all required for full rendering\n      mockedGetVault.mockResolvedValue(createMockVaultData())\n\n      const TestWrapper = createTestWrapper(queryClient, 'TEST_VAULT_ID')\n      render(\n        <TestWrapper>\n          <Vault />\n        </TestWrapper>,\n      )\n\n      // Wait for vault data to load and all components to render\n      await waitFor(() => {\n        // VaultHeader always renders when vault data exists\n        expect(screen.getByTestId('vault-header')).toBeInTheDocument()\n      })\n\n      // VaultLoans renders when PseudoAccount exists\n      expect(screen.getByTestId('vault-loans')).toBeInTheDocument()\n\n      // TODO: Uncomment this when VaultDepositors made available\n      // // VaultDepositors renders when ShareMPTID exists\n      // expect(screen.getByTestId('vault-depositors')).toBeInTheDocument()\n\n      // VaultTransactions renders when PseudoAccount exists\n      expect(screen.getByTestId('vault-transactions')).toBeInTheDocument()\n    })\n  })\n\n  /**\n   * =========================================\n   * SECTION 7: Asset Currency Display Tests\n   * =========================================\n   */\n  describe('Asset Currency Display', () => {\n    it('passes XRP as currency for XRP vaults', async () => {\n      // Standard 3-char currency codes are stored as-is (not hex-encoded)\n      const vaultData = createMockVaultData({\n        Asset: { currency: 'XRP' },\n      })\n      mockedGetVault.mockResolvedValue(vaultData)\n\n      const TestWrapper = createTestWrapper(queryClient, 'TEST_VAULT_ID')\n      render(\n        <TestWrapper>\n          <Vault />\n        </TestWrapper>,\n      )\n\n      await waitFor(() => {\n        const loansComponent = screen.getByTestId('vault-loans')\n        expect(loansComponent).toHaveTextContent('XRP')\n      })\n    })\n\n    it('passes currency code for IOU vaults', async () => {\n      // Standard 3-char currency codes are stored as-is (not hex-encoded)\n      const vaultData = createMockVaultData({\n        Asset: { currency: 'USD', issuer: 'rIssuer123' },\n      })\n      mockedGetVault.mockResolvedValue(vaultData)\n\n      const TestWrapper = createTestWrapper(queryClient, 'TEST_VAULT_ID')\n      render(\n        <TestWrapper>\n          <Vault />\n        </TestWrapper>,\n      )\n\n      await waitFor(() => {\n        const loansComponent = screen.getByTestId('vault-loans')\n        expect(loansComponent).toHaveTextContent('USD')\n      })\n    })\n\n    it('passes MPT identifier for MPT vaults', async () => {\n      // VaultLoans now derives currency internally and shows \"MPT\" for all MPT assets\n      const vaultData = createMockVaultData({\n        Asset: { mpt_issuance_id: 'MPT_ISSUANCE_ID_LONG_STRING_123456' },\n      })\n      mockedGetVault.mockResolvedValue(vaultData)\n\n      const TestWrapper = createTestWrapper(queryClient, 'TEST_VAULT_ID')\n      render(\n        <TestWrapper>\n          <Vault />\n        </TestWrapper>,\n      )\n\n      await waitFor(() => {\n        const loansComponent = screen.getByTestId('vault-loans')\n        expect(loansComponent).toHaveTextContent('MPT')\n      })\n    })\n\n    it('decodes hex-encoded IOU currency code', async () => {\n      // \"RLUSD\" encoded as hex (52=R, 4C=L, 55=U, 53=S, 44=D)\n      const vaultData = createMockVaultData({\n        Asset: {\n          currency: '524C555344000000000000000000000000000000',\n          issuer: 'rIssuer123',\n        },\n      })\n      mockedGetVault.mockResolvedValue(vaultData)\n\n      const TestWrapper = createTestWrapper(queryClient, 'TEST_VAULT_ID')\n      render(\n        <TestWrapper>\n          <Vault />\n        </TestWrapper>,\n      )\n\n      await waitFor(() => {\n        const loansComponent = screen.getByTestId('vault-loans')\n        expect(loansComponent).toHaveTextContent('RLUSD')\n      })\n    })\n\n    it('displays MPT identifier for MPT assets', async () => {\n      // VaultLoans now derives currency internally and shows \"MPT\" for MPT assets\n      // (MPT ticker lookup is only done for CurrencyToggle display, not for amount formatting)\n      const mptIssuanceId = '00000C4F23D0CC3B3D973CDC631050101ABCD1234'\n      const vaultData = createMockVaultData({\n        Asset: { mpt_issuance_id: mptIssuanceId },\n      })\n      mockedGetVault.mockResolvedValue(vaultData)\n\n      const TestWrapper = createTestWrapper(queryClient, 'TEST_VAULT_ID')\n      render(\n        <TestWrapper>\n          <Vault />\n        </TestWrapper>,\n      )\n\n      await waitFor(() => {\n        const loansComponent = screen.getByTestId('vault-loans')\n        expect(loansComponent).toHaveTextContent('MPT')\n      })\n    })\n  })\n\n  /**\n   * =========================================\n   * SECTION 8: Analytics Tracking Tests\n   * =========================================\n   */\n  describe('Analytics Tracking', () => {\n    it('tracks screen loaded on mount', async () => {\n      mockedGetVault.mockResolvedValue(createMockVaultData())\n\n      const TestWrapper = createTestWrapper(queryClient, 'TEST_VAULT_ID')\n      render(\n        <TestWrapper>\n          <Vault />\n        </TestWrapper>,\n      )\n\n      await waitFor(() => {\n        expect(mockTrackScreenLoaded).toHaveBeenCalledWith({\n          vault_id: 'TEST_VAULT_ID',\n        })\n      })\n    })\n\n    it('tracks screen loaded with empty vault ID', () => {\n      const TestWrapper = createTestWrapper(queryClient, '')\n      render(\n        <TestWrapper>\n          <Vault />\n        </TestWrapper>,\n      )\n\n      expect(mockTrackScreenLoaded).toHaveBeenCalledWith({\n        vault_id: '',\n      })\n    })\n  })\n})\n"
  },
  {
    "path": "src/containers/Vault/test/utils.test.ts",
    "content": "import { parseVaultWebsite } from '../utils'\n\ndescribe('parseVaultWebsite', () => {\n  it('returns website when Data contains valid JSON with \"w\" key', () => {\n    // {\"n\":\"Test Vault\",\"w\":\"example.com\"} encoded as hex\n    const hexData = Buffer.from(\n      JSON.stringify({ n: 'Test Vault', w: 'example.com' }),\n    ).toString('hex')\n\n    expect(parseVaultWebsite(hexData)).toBe('example.com')\n  })\n\n  it('returns undefined when Data contains valid JSON but missing \"w\" key', () => {\n    // {\"n\":\"Test Vault\"} encoded as hex (no website field)\n    const hexData = Buffer.from(JSON.stringify({ n: 'Test Vault' })).toString(\n      'hex',\n    )\n\n    expect(parseVaultWebsite(hexData)).toBeUndefined()\n  })\n\n  it('returns undefined when Data is not valid JSON', () => {\n    // \"Hello World\" encoded as hex (plain text, not JSON)\n    const hexData = Buffer.from('Hello World').toString('hex')\n\n    expect(parseVaultWebsite(hexData)).toBeUndefined()\n  })\n})\n"
  },
  {
    "path": "src/containers/Vault/utils.tsx",
    "content": "import { ReactNode } from 'react'\nimport { convertHexToString } from '../../rippled/lib/utils'\nimport Currency from '../shared/components/Currency'\n\n/**\n * Vault Data JSON Convention\n * Field names are short to fit within 256-byte limit:\n * - n: Human-readable name of the Vault\n * - w: Website associated with the Vault operator\n */\ninterface VaultDataJson {\n  n?: string // name\n  w?: string // website\n}\n\n/**\n * Parse the vault data JSON from the Data field.\n * Returns the parsed object if valid JSON, otherwise undefined.\n */\nconst parseVaultDataJson = (\n  data: string | undefined,\n): VaultDataJson | undefined => {\n  const decoded = convertHexToString(data)\n  if (!decoded) return undefined\n\n  try {\n    const parsed: VaultDataJson = JSON.parse(decoded)\n    if (parsed && typeof parsed === 'object') {\n      return parsed\n    }\n  } catch {\n    // Not valid JSON, return undefined\n  }\n\n  return undefined\n}\n\n/**\n * Parse the vault name from the Data field if it follows the JSON convention.\n * Returns the name (n field) if the data is valid JSON with a name field,\n * otherwise returns undefined.\n */\nexport const parseVaultName = (\n  data: string | undefined,\n): string | undefined => {\n  if (!data) return undefined\n\n  const parsed = parseVaultDataJson(data)\n  if (parsed && typeof parsed.n === 'string' && parsed.n.trim()) {\n    return parsed.n.trim()\n  }\n  return undefined\n}\n\n/**\n * Parse the vault website from the Data field if it follows the JSON convention.\n * Returns the website (w field) if the data is valid JSON with a website field,\n * otherwise returns undefined.\n */\nexport const parseVaultWebsite = (\n  data: string | undefined,\n): string | undefined => {\n  const parsed = parseVaultDataJson(data)\n  if (parsed && typeof parsed.w === 'string' && parsed.w.trim()) {\n    return parsed.w.trim()\n  }\n  return undefined\n}\n\n// Render Currency component for display in toggle button\n// When mptTicker is provided, display it directly instead of the MPT ID\nexport const renderAssetCurrency = (\n  asset: {\n    currency: string\n    issuer?: string\n    mpt_issuance_id?: string\n  },\n  mptTicker?: string,\n): ReactNode => {\n  // const asset = vaultData?.Asset\n  if (!asset) return null\n\n  if (asset.mpt_issuance_id) {\n    if (mptTicker) {\n      return <span>{mptTicker}</span>\n    }\n    return (\n      <Currency\n        currency={asset.mpt_issuance_id}\n        isMPT\n        link={false}\n        shortenMPTIssuanceID\n      />\n    )\n  }\n\n  if (asset.currency) {\n    return (\n      <Currency\n        currency={asset.currency}\n        issuer={asset.issuer}\n        link={false}\n        hideIssuer\n      />\n    )\n  }\n\n  return null\n}\n"
  },
  {
    "path": "src/containers/Vaults/VaultsTable.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { RouteLink } from '../shared/routing'\nimport { TOKEN_ROUTE } from '../App/routes'\nimport type { VaultData } from './types'\nimport {\n  parseCurrencyAmount,\n  parsePercent,\n} from '../shared/NumberFormattingUtils'\nimport { shortenAccount } from '../shared/utils'\nimport ExternalLink from '../shared/images/external_link.svg'\nimport SortTableColumn from '../shared/components/SortColumn'\n\ntype SortOrder = 'asc' | 'desc'\n\ninterface VaultsTableProps {\n  vaults: (VaultData & { index: number })[]\n  sortField: string\n  sortOrder: SortOrder\n  setSortField: (field: string) => void\n  setSortOrder: (order: SortOrder) => void\n  setPage: (page: number) => void\n  xrpToUSDRate: number\n  assetPrices: Record<string, number>\n}\n\nconst DEFAULT_EMPTY_VALUE = '--'\n\nconst shortenVaultIdShort = (id: string): string =>\n  id.length > 10 ? `${id.slice(0, 5)}...${id.slice(-3)}` : id\n\nconst formatAssetDisplay = (vault: VaultData): string => {\n  if (vault.asset_currency === 'XRP') return 'XRP'\n  const issuerDisplay = vault.asset_issuer_name\n    ? vault.asset_issuer_name\n    : shortenAccount(vault.asset_issuer)\n  return `${vault.asset_currency} (${issuerDisplay})`\n}\n\nconst toUsd = (\n  vault: VaultData,\n  amount: number,\n  xrpToUSDRate: number,\n  assetPrices: Record<string, number>,\n): number => {\n  if (vault.asset_currency === 'XRP') {\n    return amount * xrpToUSDRate\n  }\n  // Look up the asset's XRP price from xrplmeta, then convert to USD\n  const key = `${vault.asset_currency}.${vault.asset_issuer}`\n  const xrpPrice = assetPrices[key]\n  if (xrpPrice) {\n    return amount * xrpPrice * xrpToUSDRate\n  }\n  return amount\n}\n\nexport const VaultsTable = ({\n  vaults,\n  sortField,\n  setSortField,\n  sortOrder,\n  setSortOrder,\n  setPage,\n  xrpToUSDRate,\n  assetPrices,\n}: VaultsTableProps) => {\n  const { t } = useTranslation()\n\n  const renderVaultRow = (vault: VaultData & { index: number }) => (\n    <tr key={vault.vault_id}>\n      <td className=\"rank\">{vault.index}</td>\n      <td className=\"vault-id\">\n        <a\n          href={`/vault/${vault.vault_id}`}\n          className=\"green-link vault-id-long\"\n        >\n          {shortenAccount(vault.vault_id)}\n        </a>\n        <a\n          href={`/vault/${vault.vault_id}`}\n          className=\"green-link vault-id-short\"\n        >\n          {shortenVaultIdShort(vault.vault_id)}\n        </a>\n      </td>\n      <td className=\"name text-truncate\">\n        {vault.name || DEFAULT_EMPTY_VALUE}\n      </td>\n      <td className=\"asset\">\n        {vault.asset_currency !== 'XRP' && vault.asset_issuer ? (\n          <RouteLink\n            to={TOKEN_ROUTE}\n            params={{\n              token: `${vault.asset_currency}.${vault.asset_issuer}`,\n            }}\n            className=\"green-link\"\n          >\n            {formatAssetDisplay(vault)}\n          </RouteLink>\n        ) : (\n          <span>{formatAssetDisplay(vault)}</span>\n        )}\n      </td>\n      <td className=\"tvl right\">\n        {vault.tvl_usd\n          ? parseCurrencyAmount(\n              toUsd(vault, vault.tvl_usd, xrpToUSDRate, assetPrices),\n            )\n          : DEFAULT_EMPTY_VALUE}\n      </td>\n      <td className=\"outstanding-loans right\">\n        {vault.outstanding_loans_usd != null\n          ? parseCurrencyAmount(\n              toUsd(\n                vault,\n                vault.outstanding_loans_usd,\n                xrpToUSDRate,\n                assetPrices,\n              ),\n            )\n          : DEFAULT_EMPTY_VALUE}\n      </td>\n      <td className=\"utilization right\">\n        {vault.utilization_ratio != null\n          ? parsePercent(vault.utilization_ratio * 100)\n          : DEFAULT_EMPTY_VALUE}\n      </td>\n      <td className=\"interest-rate right\">\n        {vault.avg_interest_rate != null\n          ? parsePercent(vault.avg_interest_rate)\n          : DEFAULT_EMPTY_VALUE}\n      </td>\n      <td className=\"website\">\n        {vault.website ? (\n          <a\n            href={\n              vault.website.match(/^https?:\\/\\//)\n                ? vault.website\n                : `https://${vault.website}`\n            }\n            target=\"_blank\"\n            rel=\"noopener noreferrer\"\n            className=\"website-link\"\n          >\n            <ExternalLink className=\"external-link-icon\" />\n          </a>\n        ) : (\n          DEFAULT_EMPTY_VALUE\n        )}\n      </td>\n    </tr>\n  )\n\n  return (\n    <div className=\"vaults-table\">\n      <div className=\"table-wrap\">\n        <table className=\"basic\">\n          <thead>\n            <tr>\n              <th className=\"rank\">#</th>\n              <th className=\"vault-id\">{t('vaults_table_vault_id')}</th>\n              <th className=\"name-col\">{t('name')}</th>\n              <th className=\"asset\">{t('vaults_table_asset')}</th>\n              <SortTableColumn\n                field=\"tvl-usd\"\n                label={t('vaults_table_tvl')}\n                sortField={sortField}\n                sortOrder={sortOrder}\n                setSortField={setSortField}\n                setSortOrder={setSortOrder}\n                setPage={setPage}\n                alwaysShowArrow\n              />\n              <SortTableColumn\n                field=\"outstanding-loans-usd\"\n                label={t('vaults_table_outstanding_loans')}\n                sortField={sortField}\n                sortOrder={sortOrder}\n                setSortField={setSortField}\n                setSortOrder={setSortOrder}\n                setPage={setPage}\n                alwaysShowArrow\n              />\n              <SortTableColumn\n                field=\"utilization-ratio\"\n                label={t('vaults_table_utilization_ratio')}\n                sortField={sortField}\n                sortOrder={sortOrder}\n                setSortField={setSortField}\n                setSortOrder={setSortOrder}\n                setPage={setPage}\n                alwaysShowArrow\n              />\n              <SortTableColumn\n                field=\"avg-interest-rate\"\n                label={t('vaults_table_avg_interest_rate')}\n                sortField={sortField}\n                sortOrder={sortOrder}\n                setSortField={setSortField}\n                setSortOrder={setSortOrder}\n                setPage={setPage}\n                alwaysShowArrow\n              />\n              <th className=\"website\">{t('vaults_table_website')}</th>\n            </tr>\n          </thead>\n          <tbody>\n            {vaults.length > 0 ? (\n              vaults.map(renderVaultRow)\n            ) : (\n              <tr>\n                <td colSpan={9} className=\"empty-message\">\n                  {t('vaults_no_results')}\n                </td>\n              </tr>\n            )}\n          </tbody>\n        </table>\n      </div>\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/Vaults/api.ts",
    "content": "import axios from 'axios'\nimport type {\n  VaultData,\n  VaultsMetrics,\n  VaultsListResponse,\n  AssetPricesResponse,\n} from './types'\n\n// Maps frontend sort field names to API sort_by param values\nconst SORT_FIELD_MAP: Record<string, string> = {\n  'tvl-usd': 'assets_total',\n  'outstanding-loans-usd': 'outstanding_loans',\n  'avg-interest-rate': 'average_interest_rate',\n  'utilization-ratio': 'utilization_ratio',\n}\n\n// Maps frontend filter keys to API asset_type param values\nconst ASSET_TYPE_MAP: Record<string, string> = {\n  '': 'all',\n  xrp: 'xrp',\n  stablecoin: 'stablecoins',\n}\n\n// Maps raw API vault object to frontend VaultData shape\nconst mapVault = (raw: any): VaultData => ({\n  vault_id: raw.vault_id,\n  name: raw.name,\n  asset_currency: raw.asset_currency,\n  asset_issuer: raw.asset_issuer,\n  asset_issuer_name: raw.asset_issuer_name,\n  tvl_usd: raw.assets_total,\n  outstanding_loans_usd: raw.outstanding_loans,\n  utilization_ratio: raw.utilization_ratio,\n  avg_interest_rate: raw.average_interest_rate,\n  website: raw.website,\n  asset_category: raw.asset_category,\n})\n\nexport const fetchVaultsList = (params: {\n  page: number\n  size: number\n  sortField: string\n  sortOrder: 'asc' | 'desc'\n  assetType: string\n  searchQuery: string\n}): Promise<VaultsListResponse> => {\n  const queryParams = new URLSearchParams({\n    page: params.page.toString(),\n    size: params.size.toString(),\n    sort_order: params.sortOrder,\n  })\n\n  const apiSortBy = SORT_FIELD_MAP[params.sortField]\n  if (apiSortBy) {\n    queryParams.set('sort_by', apiSortBy)\n  }\n\n  const apiAssetType = ASSET_TYPE_MAP[params.assetType] ?? 'all'\n  if (apiAssetType !== 'all') {\n    queryParams.set('asset_type', apiAssetType)\n  }\n\n  if (params.searchQuery.trim()) {\n    queryParams.set('name_like', params.searchQuery.trim())\n  }\n\n  return axios.get(`/api/v1/vaults?${queryParams.toString()}`).then((resp) => {\n    const { data } = resp\n    return {\n      ...data,\n      results: (data.results || []).map(mapVault),\n    }\n  })\n}\n\nexport const fetchVaultsAggregateStats = (): Promise<VaultsMetrics> =>\n  axios.get('/api/v1/vaults/aggregate-statistics').then((resp) => resp.data)\n\nexport const fetchVaultAssetPrices = (): Promise<AssetPricesResponse> =>\n  axios.get('/api/v1/vaults/asset-prices').then((resp) => resp.data)\n"
  },
  {
    "path": "src/containers/Vaults/index.tsx",
    "content": "import { useEffect, useRef, useState } from 'react'\nimport { Trans, useTranslation } from 'react-i18next'\nimport { Helmet } from 'react-helmet-async'\nimport { useQuery } from 'react-query'\nimport Log from '../shared/log'\nimport { VaultsTable } from './VaultsTable'\nimport { parseCurrencyAmount } from '../shared/NumberFormattingUtils'\nimport './vaults.scss'\nimport { Pagination } from '../shared/components/Pagination'\nimport { Loader } from '../shared/components/Loader'\nimport { Tooltip, useTooltip } from '../shared/components/Tooltip'\nimport HoverIcon from '../shared/images/hover.svg'\nimport { useAnalytics } from '../shared/analytics'\nimport { useXRPToUSDRate } from '../shared/hooks/useXRPToUSDRate'\nimport type { VaultData } from './types'\nimport {\n  fetchVaultsList,\n  fetchVaultsAggregateStats,\n  fetchVaultAssetPrices,\n} from './api'\n\nexport type { VaultData }\n\ntype FilterCategory = '' | 'xrp' | 'stablecoin'\n\nconst TOOLTIP_Y_OFFSET = 80\nconst PAGE_SIZE = 20\nconst SEARCH_DEBOUNCE_MS = 400\nconst PRICE_REFETCH_INTERVAL = 5 * 60 * 1000 // 5 minutes\n\nexport const Vaults = () => {\n  const [sortField, setSortField] = useState('tvl-usd')\n  const [sortOrder, setSortOrder] = useState<'asc' | 'desc'>('desc')\n  const [filterField, setFilterField] = useState<FilterCategory>('')\n  const [searchQuery, setSearchQuery] = useState('')\n  const [debouncedSearch, setDebouncedSearch] = useState('')\n  const [page, setPage] = useState(1)\n  const { tooltip, showTooltip, hideTooltip } = useTooltip()\n\n  const { t } = useTranslation()\n  const { trackScreenLoaded, trackException } = useAnalytics()\n  const xrpToUSDRate = useXRPToUSDRate()\n\n  const searchTimerRef = useRef<ReturnType<typeof setTimeout>>()\n\n  useEffect(() => {\n    trackScreenLoaded()\n  }, [trackScreenLoaded])\n\n  // Fetch aggregate stats once on mount\n  const { data: metrics } = useQuery(\n    ['vaultsAggregateStats'],\n    fetchVaultsAggregateStats,\n    {\n      onError: (error) => {\n        Log.error(error)\n        trackException(`vaults stats fetch --- ${JSON.stringify(error)}`)\n      },\n    },\n  )\n\n  // Fetch and periodically refresh asset prices from xrplmeta\n  const { data: assetPricesData } = useQuery(\n    ['vaultAssetPrices'],\n    fetchVaultAssetPrices,\n    {\n      refetchInterval: PRICE_REFETCH_INTERVAL,\n      onError: (error) => Log.error(error),\n    },\n  )\n  const assetPrices = assetPricesData?.prices ?? {}\n\n  // Fetch vaults list whenever params change\n  const {\n    data: vaultsResponse,\n    isLoading: tableLoading,\n    refetch: refetchVaults,\n  } = useQuery(\n    ['vaultsList', page, sortField, sortOrder, filterField, debouncedSearch],\n    () =>\n      fetchVaultsList({\n        page,\n        size: PAGE_SIZE,\n        sortField,\n        sortOrder,\n        assetType: filterField,\n        searchQuery: debouncedSearch,\n      }),\n    {\n      keepPreviousData: true,\n      onError: (error) => {\n        Log.error(error)\n        trackException(`vaults list fetch --- ${JSON.stringify(error)}`)\n      },\n    },\n  )\n\n  // Debounce search input\n  useEffect(() => {\n    if (searchTimerRef.current) {\n      clearTimeout(searchTimerRef.current)\n    }\n    searchTimerRef.current = setTimeout(() => {\n      setDebouncedSearch(searchQuery)\n      setPage(1)\n    }, SEARCH_DEBOUNCE_MS)\n\n    return () => {\n      if (searchTimerRef.current) {\n        clearTimeout(searchTimerRef.current)\n      }\n    }\n  }, [searchQuery])\n\n  const renderTextTooltip = (key: string) => (\n    <HoverIcon\n      className=\"hover\"\n      onMouseOver={(e) => {\n        const rect = e.currentTarget.getBoundingClientRect()\n        showTooltip('text', e, t(`${key}_description`, { defaultValue: '' }), {\n          x: rect.left + rect.width / 2,\n          y: rect.top - TOOLTIP_Y_OFFSET,\n        })\n      }}\n      onMouseLeave={() => hideTooltip()}\n    />\n  )\n\n  const vaults = (vaultsResponse?.results ?? []).map((vault, idx) => ({\n    ...vault,\n    index: (page - 1) * PAGE_SIZE + idx + 1,\n  }))\n\n  const totalItems = vaultsResponse?.total ?? 0\n\n  const filterCategories: {\n    key: FilterCategory\n    label: string\n  }[] = [\n    { key: '', label: t('vaults_filter_all_assets') },\n    { key: 'xrp', label: 'XRP' },\n    {\n      key: 'stablecoin',\n      label: t('vaults_filter_stablecoins'),\n    },\n  ]\n\n  const handleFilterClick = (cat: FilterCategory) => {\n    setFilterField(cat === filterField ? '' : cat)\n    setPage(1)\n  }\n\n  const handleSortFieldChange = (field: string) => {\n    setSortField(field)\n    setPage(1)\n  }\n\n  const handleSortOrderChange = (order: 'asc' | 'desc') => {\n    setSortOrder(order)\n    setPage(1)\n  }\n\n  if (!metrics && !vaultsResponse) {\n    return (\n      <div className=\"vaults-page\">\n        <Helmet title={t('vaults')} />\n        <div className=\"type\">{t('vaults')}</div>\n        <Loader />\n      </div>\n    )\n  }\n\n  return (\n    <div className=\"vaults-page\">\n      <Helmet title={t('vaults')} />\n      <Tooltip tooltip={tooltip} />\n      <div className=\"type\">{t('vaults')}</div>\n      {metrics && (\n        <div className=\"metrics-wrapper\">\n          <div className=\"metric\">\n            <div className=\"title\">\n              <span>{t('vaults_tvl')}</span>\n              {renderTextTooltip('vaults_tvl')}\n            </div>\n            <div className=\"val\">\n              {parseCurrencyAmount(metrics.tvl_total * xrpToUSDRate)}\n            </div>\n          </div>\n          <div className=\"metric\">\n            <div className=\"title\">\n              <span>{t('vaults_outstanding_loans')}</span>\n              {renderTextTooltip('vaults_outstanding_loans')}\n            </div>\n            <div className=\"val\">\n              {parseCurrencyAmount(metrics.debt_total * xrpToUSDRate)}\n            </div>\n          </div>\n          <div className=\"metric\">\n            <div className=\"title\">\n              <span>{t('vaults_loans_originated')}</span>\n              {renderTextTooltip('vaults_loans_originated')}\n            </div>\n            <div className=\"val\">\n              {parseCurrencyAmount(metrics.loans_originated * xrpToUSDRate)}\n            </div>\n          </div>\n          <div className=\"metric\">\n            <div className=\"title\">\n              <span>{t('vaults_avg_interest_rate')}</span>\n              {renderTextTooltip('vaults_avg_interest_rate')}\n            </div>\n            <div className=\"val\">{metrics.avg_interest_rate.toFixed(2)}%</div>\n          </div>\n          <div className=\"metric\">\n            <div className=\"title\">\n              <span>{t('vaults_num_vaults')}</span>\n              {renderTextTooltip('vaults_num_vaults')}\n            </div>\n            <div className=\"val\">{metrics.active_vaults.toLocaleString()}</div>\n          </div>\n          <div className=\"metric\">\n            <div className=\"title\">\n              <span>{t('vaults_utilization_ratio')}</span>\n              {renderTextTooltip('vaults_utilization_ratio')}\n            </div>\n            <div className=\"val\">\n              {(metrics.utilization_ratio * 100).toFixed(1)}%\n            </div>\n          </div>\n        </div>\n      )}\n      <div className=\"vaults-controls\">\n        <div className=\"filter\">\n          <div className=\"filter-icon\" />\n          {filterCategories.map((cat) => (\n            <button\n              key={cat.key}\n              className={`filter-field ${cat.key === filterField ? 'selected' : ''}`}\n              onClick={() => handleFilterClick(cat.key)}\n              type=\"button\"\n            >\n              <div className=\"filter-label\">{cat.label}</div>\n            </button>\n          ))}\n        </div>\n        <div className=\"controls-right\">\n          <button\n            type=\"button\"\n            className=\"refresh-button\"\n            onClick={() => refetchVaults()}\n            title={t('refresh_data')}\n          >\n            ↻\n          </button>\n          <div className=\"search-bar\">\n            <div className=\"search-icon\" />\n            <input\n              type=\"text\"\n              placeholder={t('vaults_search_placeholder')}\n              value={searchQuery}\n              onChange={(e) => setSearchQuery(e.target.value)}\n            />\n            {searchQuery && (\n              <button\n                type=\"button\"\n                className=\"search-clear\"\n                onClick={() => setSearchQuery('')}\n              >\n                ✕\n              </button>\n            )}\n          </div>\n        </div>\n      </div>\n      <div className=\"vaults-table-section\">\n        {tableLoading && (\n          <div className=\"table-loader-overlay\">\n            <Loader />\n          </div>\n        )}\n        <VaultsTable\n          vaults={vaults}\n          sortField={sortField}\n          setSortField={handleSortFieldChange}\n          sortOrder={sortOrder}\n          setSortOrder={handleSortOrderChange}\n          setPage={setPage}\n          xrpToUSDRate={xrpToUSDRate}\n          assetPrices={assetPrices}\n        />\n        <div className=\"footnote\">\n          <Trans i18nKey=\"vaults_disclaimer\">\n            {/* eslint-disable-next-line jsx-a11y/anchor-has-content,jsx-a11y/control-has-associated-label */}\n            <a\n              href=\"https://xrplmeta.org/\"\n              target=\"_blank\"\n              rel=\"noopener noreferrer\"\n            >\n              XRPL Meta\n            </a>\n          </Trans>\n        </div>\n        <Pagination\n          totalItems={totalItems}\n          currentPage={page}\n          onPageChange={setPage}\n          pageSize={PAGE_SIZE}\n        />\n      </div>\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/Vaults/test/api/vaults.test.ts",
    "content": "import axios from 'axios'\nimport {\n  fetchVaultsList,\n  fetchVaultsAggregateStats,\n  fetchVaultAssetPrices,\n} from '../../api'\n\njest.mock('axios')\n\ndescribe('Vaults API', () => {\n  const mockAxios = axios as jest.Mocked<typeof axios>\n\n  beforeEach(() => {\n    jest.clearAllMocks()\n  })\n\n  describe('fetchVaultsList', () => {\n    const mockApiResponse = {\n      total: 2,\n      page: 1,\n      size: 20,\n      sort_by: 'assets_total',\n      sort_order: 'desc',\n      asset_type: 'all',\n      results: [\n        {\n          vault_id: 'vault123',\n          name: 'Test Vault',\n          asset_currency: 'XRP',\n          asset_issuer: '',\n          asset_issuer_name: '',\n          assets_total: 5000000,\n          outstanding_loans: 2500000,\n          utilization_ratio: 0.5,\n          average_interest_rate: 5.25,\n          website: 'https://example.com',\n          asset_category: 'xrp',\n        },\n      ],\n    }\n\n    it('should fetch and map vault data correctly', async () => {\n      mockAxios.get.mockResolvedValueOnce({ data: mockApiResponse })\n\n      const result = await fetchVaultsList({\n        page: 1,\n        size: 20,\n        sortField: 'tvl-usd',\n        sortOrder: 'desc',\n        assetType: '',\n        searchQuery: '',\n      })\n\n      expect(result.total).toBe(2)\n      expect(result.results).toHaveLength(1)\n      // Verify field mapping from API names to frontend names\n      expect(result.results[0].vault_id).toBe('vault123')\n      expect(result.results[0].name).toBe('Test Vault')\n      expect(result.results[0].tvl_usd).toBe(5000000)\n      expect(result.results[0].outstanding_loans_usd).toBe(2500000)\n      expect(result.results[0].avg_interest_rate).toBe(5.25)\n      expect(result.results[0].utilization_ratio).toBe(0.5)\n    })\n\n    it('should map sort field names to API parameters', async () => {\n      mockAxios.get.mockResolvedValueOnce({\n        data: { ...mockApiResponse, results: [] },\n      })\n\n      await fetchVaultsList({\n        page: 1,\n        size: 20,\n        sortField: 'tvl-usd',\n        sortOrder: 'desc',\n        assetType: '',\n        searchQuery: '',\n      })\n\n      expect(mockAxios.get).toHaveBeenCalledWith(\n        expect.stringContaining('sort_by=assets_total'),\n      )\n    })\n\n    it('should map outstanding-loans-usd sort field', async () => {\n      mockAxios.get.mockResolvedValueOnce({\n        data: { ...mockApiResponse, results: [] },\n      })\n\n      await fetchVaultsList({\n        page: 1,\n        size: 20,\n        sortField: 'outstanding-loans-usd',\n        sortOrder: 'asc',\n        assetType: '',\n        searchQuery: '',\n      })\n\n      expect(mockAxios.get).toHaveBeenCalledWith(\n        expect.stringContaining('sort_by=outstanding_loans'),\n      )\n      expect(mockAxios.get).toHaveBeenCalledWith(\n        expect.stringContaining('sort_order=asc'),\n      )\n    })\n\n    it('should include asset_type param for non-default filters', async () => {\n      mockAxios.get.mockResolvedValueOnce({\n        data: { ...mockApiResponse, results: [] },\n      })\n\n      await fetchVaultsList({\n        page: 1,\n        size: 20,\n        sortField: 'tvl-usd',\n        sortOrder: 'desc',\n        assetType: 'stablecoin',\n        searchQuery: '',\n      })\n\n      expect(mockAxios.get).toHaveBeenCalledWith(\n        expect.stringContaining('asset_type=stablecoins'),\n      )\n    })\n\n    it('should not include asset_type for \"all\" filter', async () => {\n      mockAxios.get.mockResolvedValueOnce({\n        data: { ...mockApiResponse, results: [] },\n      })\n\n      await fetchVaultsList({\n        page: 1,\n        size: 20,\n        sortField: 'tvl-usd',\n        sortOrder: 'desc',\n        assetType: '',\n        searchQuery: '',\n      })\n\n      expect(mockAxios.get).toHaveBeenCalledWith(\n        expect.not.stringContaining('asset_type='),\n      )\n    })\n\n    it('should include name_like param for search queries', async () => {\n      mockAxios.get.mockResolvedValueOnce({\n        data: { ...mockApiResponse, results: [] },\n      })\n\n      await fetchVaultsList({\n        page: 1,\n        size: 20,\n        sortField: 'tvl-usd',\n        sortOrder: 'desc',\n        assetType: '',\n        searchQuery: 'lending',\n      })\n\n      expect(mockAxios.get).toHaveBeenCalledWith(\n        expect.stringContaining('name_like=lending'),\n      )\n    })\n\n    it('should trim whitespace from search queries', async () => {\n      mockAxios.get.mockResolvedValueOnce({\n        data: { ...mockApiResponse, results: [] },\n      })\n\n      await fetchVaultsList({\n        page: 1,\n        size: 20,\n        sortField: 'tvl-usd',\n        sortOrder: 'desc',\n        assetType: '',\n        searchQuery: '  vault  ',\n      })\n\n      expect(mockAxios.get).toHaveBeenCalledWith(\n        expect.stringContaining('name_like=vault'),\n      )\n    })\n\n    it('should not include name_like for empty search', async () => {\n      mockAxios.get.mockResolvedValueOnce({\n        data: { ...mockApiResponse, results: [] },\n      })\n\n      await fetchVaultsList({\n        page: 1,\n        size: 20,\n        sortField: 'tvl-usd',\n        sortOrder: 'desc',\n        assetType: '',\n        searchQuery: '   ',\n      })\n\n      expect(mockAxios.get).toHaveBeenCalledWith(\n        expect.not.stringContaining('name_like'),\n      )\n    })\n\n    it('should include page and size params', async () => {\n      mockAxios.get.mockResolvedValueOnce({\n        data: { ...mockApiResponse, results: [] },\n      })\n\n      await fetchVaultsList({\n        page: 3,\n        size: 10,\n        sortField: 'tvl-usd',\n        sortOrder: 'desc',\n        assetType: '',\n        searchQuery: '',\n      })\n\n      expect(mockAxios.get).toHaveBeenCalledWith(\n        expect.stringContaining('page=3'),\n      )\n      expect(mockAxios.get).toHaveBeenCalledWith(\n        expect.stringContaining('size=10'),\n      )\n    })\n\n    it('should handle empty results array', async () => {\n      mockAxios.get.mockResolvedValueOnce({\n        data: { ...mockApiResponse, total: 0, results: [] },\n      })\n\n      const result = await fetchVaultsList({\n        page: 1,\n        size: 20,\n        sortField: 'tvl-usd',\n        sortOrder: 'desc',\n        assetType: '',\n        searchQuery: '',\n      })\n\n      expect(result.total).toBe(0)\n      expect(result.results).toHaveLength(0)\n    })\n\n    it('should propagate network errors', async () => {\n      mockAxios.get.mockRejectedValueOnce(new Error('Network error'))\n\n      await expect(\n        fetchVaultsList({\n          page: 1,\n          size: 20,\n          sortField: 'tvl-usd',\n          sortOrder: 'desc',\n          assetType: '',\n          searchQuery: '',\n        }),\n      ).rejects.toThrow('Network error')\n    })\n  })\n\n  describe('fetchVaultsAggregateStats', () => {\n    const mockStatsResponse = {\n      tvl_total: 8000000,\n      debt_total: 3700000,\n      active_vaults: 42,\n      avg_interest_rate: 4.5,\n      utilization_ratio: 0.4625,\n      loans_originated: 15000000,\n      last_updated: '2026-03-17T00:00:00Z',\n    }\n\n    it('should fetch aggregate stats successfully', async () => {\n      mockAxios.get.mockResolvedValueOnce({ data: mockStatsResponse })\n\n      const result = await fetchVaultsAggregateStats()\n\n      expect(result).toEqual(mockStatsResponse)\n      expect(mockAxios.get).toHaveBeenCalledWith(\n        '/api/v1/vaults/aggregate-statistics',\n      )\n    })\n\n    it('should return all expected fields', async () => {\n      mockAxios.get.mockResolvedValueOnce({ data: mockStatsResponse })\n\n      const result = await fetchVaultsAggregateStats()\n\n      expect(result).toHaveProperty('tvl_total')\n      expect(result).toHaveProperty('debt_total')\n      expect(result).toHaveProperty('active_vaults')\n      expect(result).toHaveProperty('avg_interest_rate')\n      expect(result).toHaveProperty('utilization_ratio')\n      expect(result).toHaveProperty('loans_originated')\n    })\n\n    it('should propagate network errors', async () => {\n      mockAxios.get.mockRejectedValueOnce(new Error('Server error'))\n\n      await expect(fetchVaultsAggregateStats()).rejects.toThrow('Server error')\n    })\n  })\n\n  describe('fetchVaultAssetPrices', () => {\n    const mockPricesResponse = {\n      prices: {\n        'USD.rIssuer123': 0.35,\n        'EUR.rIssuer456': 0.38,\n      },\n      lastUpdated: 1710000000000,\n    }\n\n    it('should fetch asset prices successfully', async () => {\n      mockAxios.get.mockResolvedValueOnce({ data: mockPricesResponse })\n\n      const result = await fetchVaultAssetPrices()\n\n      expect(result).toEqual(mockPricesResponse)\n      expect(mockAxios.get).toHaveBeenCalledWith('/api/v1/vaults/asset-prices')\n    })\n\n    it('should return prices map and lastUpdated', async () => {\n      mockAxios.get.mockResolvedValueOnce({ data: mockPricesResponse })\n\n      const result = await fetchVaultAssetPrices()\n\n      expect(result).toHaveProperty('prices')\n      expect(result).toHaveProperty('lastUpdated')\n      expect(result.prices['USD.rIssuer123']).toBe(0.35)\n    })\n\n    it('should propagate network errors', async () => {\n      mockAxios.get.mockRejectedValueOnce(new Error('Server error'))\n\n      await expect(fetchVaultAssetPrices()).rejects.toThrow('Server error')\n    })\n  })\n})\n"
  },
  {
    "path": "src/containers/Vaults/test/index.test.tsx",
    "content": "import { render, waitFor, fireEvent } from '@testing-library/react'\nimport moxios from 'moxios'\nimport { Route } from 'react-router'\nimport i18n from '../../../i18n/testConfigEnglish'\nimport { Vaults } from '..'\nimport NetworkContext from '../../shared/NetworkContext'\nimport { flushPromises, QuickHarness } from '../../test/utils'\nimport vaultsData from './mock_data/vaults.json'\nimport aggregateStats from './mock_data/aggregate_stats.json'\nimport { VAULTS_ROUTE } from '../../App/routes'\n\njest.mock('usehooks-ts', () => ({\n  useWindowSize: () => ({\n    width: 375,\n    height: 600,\n  }),\n}))\n\njest.mock('../../shared/hooks/useXRPToUSDRate', () => ({\n  useXRPToUSDRate: () => 2.0,\n}))\n\ndescribe('Vaults Page container', () => {\n  const renderVaults = () =>\n    render(\n      <NetworkContext.Provider value=\"main\">\n        <QuickHarness i18n={i18n} initialEntries={['/vaults']}>\n          <Route path={VAULTS_ROUTE.path} element={<Vaults />} />\n        </QuickHarness>\n      </NetworkContext.Provider>,\n    )\n\n  const oldEnvs = process.env\n\n  const mockAssetPrices = {\n    prices: {\n      '524C555344000000000000000000000000000000.rMxCKbEDwqr76QuheSUMdEGf4B9xJ8m5De': 0.35,\n    },\n    lastUpdated: Date.now(),\n  }\n\n  const stubVaultsApis = () => {\n    moxios.stubRequest('/api/v1/vaults/aggregate-statistics', {\n      status: 200,\n      response: aggregateStats,\n    })\n    moxios.stubRequest('/api/v1/vaults/asset-prices', {\n      status: 200,\n      response: mockAssetPrices,\n    })\n    moxios.stubRequest(/\\/api\\/v1\\/vaults\\?/, {\n      status: 200,\n      response: vaultsData,\n    })\n  }\n\n  beforeEach(() => {\n    moxios.install()\n    process.env = { ...oldEnvs, VITE_ENVIRONMENT: 'mainnet' }\n  })\n\n  afterEach(() => {\n    moxios.uninstall()\n    process.env = oldEnvs\n  })\n\n  it('renders without crashing', () => {\n    renderVaults()\n  })\n\n  it('renders all parts', async () => {\n    stubVaultsApis()\n    const { container } = renderVaults()\n    await flushPromises()\n    await waitFor(() => {\n      expect(container.querySelectorAll('.vaults-page').length).toBe(1)\n      expect(container.querySelectorAll('.metric').length).toBe(6)\n    })\n\n    // Metrics (xrpToUSDRate = 2.0)\n    const metrics = container.querySelectorAll('.metric')\n\n    // TVL: 8,000,000 * 2 = $16.0M\n    expect(metrics[0].querySelector('.title')?.textContent).toContain(\n      'Total Value Locked (TVL)',\n    )\n    expect(metrics[0].querySelector('.val')?.textContent).toContain('$16.0M')\n\n    // Outstanding Loans: 3,700,000 * 2 = $7.4M\n    expect(metrics[1].querySelector('.title')?.textContent).toContain(\n      'Outstanding Loans',\n    )\n    expect(metrics[1].querySelector('.val')?.textContent).toContain('$7.4M')\n\n    // Loans Originated: 15,000,000 * 2 = $30.0M\n    expect(metrics[2].querySelector('.title')?.textContent).toContain(\n      'Loans Originated',\n    )\n    expect(metrics[2].querySelector('.val')?.textContent).toContain('$30.0M')\n\n    // Avg Interest Rate: 4.50%\n    expect(metrics[3].querySelector('.title')?.textContent).toContain(\n      'Avg. Interest Rate',\n    )\n    expect(metrics[3].querySelector('.val')?.textContent).toContain('4.50%')\n\n    // # of Vaults: 42\n    expect(metrics[4].querySelector('.title')?.textContent).toContain(\n      '# of Vaults',\n    )\n    expect(metrics[4].querySelector('.val')?.textContent).toContain('42')\n\n    // Utilization Ratio: 0.4625 * 100 = 46.3%\n    expect(metrics[5].querySelector('.title')?.textContent).toContain(\n      'Utilization Ratio',\n    )\n    expect(metrics[5].querySelector('.val')?.textContent).toContain('46.3%')\n\n    // Filters\n    const filters = container.querySelectorAll('.filter-field')\n    expect(filters.length).toBe(3)\n\n    expect(filters[0].querySelector('.filter-label')?.textContent).toContain(\n      'All Assets',\n    )\n    expect(filters[1].querySelector('.filter-label')?.textContent).toContain(\n      'XRP',\n    )\n    expect(filters[2].querySelector('.filter-label')?.textContent).toContain(\n      'Stablecoins',\n    )\n\n    // Vaults Table\n    expect(container.querySelectorAll('.vaults-table').length).toBe(1)\n\n    // Table Headers\n    expect(container.querySelector('th.rank')?.textContent).toContain('#')\n    expect(container.querySelector('th.vault-id')?.textContent).toContain(\n      'Vault ID',\n    )\n    expect(container.querySelector('th.name-col')?.textContent).toContain(\n      'name',\n    )\n    expect(container.querySelector('th.asset')?.textContent).toContain('Asset')\n    expect(container.querySelector('th.tvl-usd')?.textContent).toContain(\n      'TVL (USD)',\n    )\n    expect(\n      container.querySelector('th.outstanding-loans-usd')?.textContent,\n    ).toContain('Outstanding Loans')\n    expect(\n      container.querySelector('th.utilization-ratio')?.textContent,\n    ).toContain('Utilization Ratio')\n    expect(\n      container.querySelector('th.avg-interest-rate')?.textContent,\n    ).toContain('Avg. Interest Rate')\n    expect(container.querySelector('th.website')?.textContent).toContain(\n      'Website',\n    )\n\n    // Table Rows (excluding header)\n    const rows = Array.from(container.querySelectorAll('tr')).filter(\n      (row) => !row.querySelector('th'),\n    )\n    expect(rows).toHaveLength(2)\n\n    // Row 1: XRP vault (asset_currency = XRP, so TVL = 5,000,000 * 2 = $10.0M)\n    const firstRow = rows[0]\n    expect(firstRow.querySelector('td.rank')?.textContent).toContain('1')\n    expect(firstRow.querySelector('td.name')?.textContent).toContain(\n      'XRP Lending Vault',\n    )\n    expect(firstRow.querySelector('td.asset')?.textContent).toContain('XRP')\n    expect(firstRow.querySelector('td.tvl')?.textContent).toContain('$10.0M')\n    expect(\n      firstRow.querySelector('td.outstanding-loans')?.textContent,\n    ).toContain('$5.0M')\n    expect(firstRow.querySelector('td.utilization')?.textContent).toContain(\n      '50.00%',\n    )\n    expect(firstRow.querySelector('td.interest-rate')?.textContent).toContain(\n      '5.25%',\n    )\n\n    // Row 2: RLUSD vault (price=0.35 XRP, xrpToUSDRate=2.0)\n    // TVL: 3,000,000 * 0.35 * 2 = $2.1M\n    // Outstanding loans: 1,200,000 * 0.35 * 2 = $840.0K\n    const secondRow = rows[1]\n    expect(secondRow.querySelector('td.rank')?.textContent).toContain('2')\n    expect(secondRow.querySelector('td.name')?.textContent).toContain(\n      'RLUSD Stable Vault',\n    )\n    expect(secondRow.querySelector('td.asset')?.textContent).toContain('Ripple')\n    expect(secondRow.querySelector('td.tvl')?.textContent).toContain('$2.1M')\n    expect(\n      secondRow.querySelector('td.outstanding-loans')?.textContent,\n    ).toContain('$840.0K')\n    expect(secondRow.querySelector('td.utilization')?.textContent).toContain(\n      '40.00%',\n    )\n    expect(secondRow.querySelector('td.interest-rate')?.textContent).toContain(\n      '3.75%',\n    )\n  })\n\n  it('renders search bar', async () => {\n    stubVaultsApis()\n    const { container } = renderVaults()\n    await flushPromises()\n    await waitFor(() => {\n      expect(container.querySelector('.search-bar')).toBeTruthy()\n    })\n\n    const input = container.querySelector(\n      '.search-bar input',\n    ) as HTMLInputElement\n    expect(input).toBeTruthy()\n    expect(input.placeholder).toContain(\n      'Search Accounts, Vault Names, Assets, Websites',\n    )\n  })\n\n  it('renders empty state when no vaults returned', async () => {\n    moxios.stubRequest('/api/v1/vaults/aggregate-statistics', {\n      status: 200,\n      response: aggregateStats,\n    })\n    moxios.stubRequest('/api/v1/vaults/asset-prices', {\n      status: 200,\n      response: mockAssetPrices,\n    })\n    moxios.stubRequest(/\\/api\\/v1\\/vaults\\?/, {\n      status: 200,\n      response: { ...vaultsData, total: 0, results: [] },\n    })\n    const { container } = renderVaults()\n    await flushPromises()\n    await waitFor(() => {\n      expect(container.querySelector('.empty-message')?.textContent).toContain(\n        'No vaults found.',\n      )\n    })\n  })\n\n  it('toggles filter selection', async () => {\n    stubVaultsApis()\n    const { container } = renderVaults()\n    await flushPromises()\n    await waitFor(() => {\n      expect(container.querySelectorAll('.filter-field').length).toBe(3)\n    })\n\n    const xrpFilter = container.querySelectorAll('.filter-field')[1]\n    fireEvent.click(xrpFilter)\n\n    expect(xrpFilter.classList.contains('selected')).toBe(true)\n\n    // Clicking the same filter again deselects it\n    fireEvent.click(xrpFilter)\n    expect(xrpFilter.classList.contains('selected')).toBe(false)\n  })\n\n  it('renders refresh button', async () => {\n    stubVaultsApis()\n    const { container } = renderVaults()\n    await flushPromises()\n    await waitFor(() => {\n      expect(container.querySelector('.refresh-button')).toBeTruthy()\n    })\n  })\n\n  it('renders pagination', async () => {\n    stubVaultsApis()\n    const { container } = renderVaults()\n    await flushPromises()\n    await waitFor(() => {\n      expect(container.querySelector('.vaults-page')).toBeTruthy()\n    })\n\n    // Pagination component should be rendered (with only 2 items and pageSize 20,\n    // pagination may render but with limited controls)\n    await waitFor(() => {\n      expect(container.querySelector('.vaults-table-section')).toBeTruthy()\n    })\n  })\n\n  it('renders disclaimer footnote', async () => {\n    stubVaultsApis()\n    const { container } = renderVaults()\n    await flushPromises()\n    await waitFor(() => {\n      expect(container.querySelector('.footnote')).toBeTruthy()\n    })\n    expect(container.querySelector('.footnote')?.textContent).toContain(\n      'Trust Level ≥1',\n    )\n    const link = container.querySelector('.footnote a') as HTMLAnchorElement\n    expect(link).toBeTruthy()\n    expect(link.textContent).toBe('XRPL Meta')\n    expect(link.href).toBe('https://xrplmeta.org/')\n  })\n})\n"
  },
  {
    "path": "src/containers/Vaults/test/mock_data/aggregate_stats.json",
    "content": "{\n  \"tvl_total\": 8000000,\n  \"debt_total\": 3700000,\n  \"active_vaults\": 42,\n  \"avg_interest_rate\": 4.5,\n  \"utilization_ratio\": 0.4625,\n  \"loans_originated\": 15000000,\n  \"last_updated\": \"2026-03-17T00:00:00Z\"\n}\n"
  },
  {
    "path": "src/containers/Vaults/test/mock_data/vaults.json",
    "content": "{\n  \"total\": 2,\n  \"page\": 1,\n  \"size\": 20,\n  \"sort_by\": \"assets_total\",\n  \"sort_order\": \"desc\",\n  \"asset_type\": \"all\",\n  \"results\": [\n    {\n      \"vault_id\": \"ABC123DEF456GHI789JKL012MNO345PQR678STU901VWX234YZA567BCD890EFG\",\n      \"name\": \"XRP Lending Vault\",\n      \"asset_currency\": \"XRP\",\n      \"asset_issuer\": \"\",\n      \"asset_issuer_name\": \"\",\n      \"assets_total\": 5000000,\n      \"outstanding_loans\": 2500000,\n      \"utilization_ratio\": 0.5,\n      \"average_interest_rate\": 5.25,\n      \"website\": \"https://example.com\",\n      \"asset_category\": \"xrp\"\n    },\n    {\n      \"vault_id\": \"ZYX987WVU654TSR321QPO098NML765KJI432HGF109EDC876BAZ543YXW210VUT\",\n      \"name\": \"RLUSD Stable Vault\",\n      \"asset_currency\": \"524C555344000000000000000000000000000000\",\n      \"asset_issuer\": \"rMxCKbEDwqr76QuheSUMdEGf4B9xJ8m5De\",\n      \"asset_issuer_name\": \"Ripple\",\n      \"assets_total\": 3000000,\n      \"outstanding_loans\": 1200000,\n      \"utilization_ratio\": 0.4,\n      \"average_interest_rate\": 3.75,\n      \"website\": \"ripple.com\",\n      \"asset_category\": \"stablecoin\"\n    }\n  ]\n}\n"
  },
  {
    "path": "src/containers/Vaults/types.ts",
    "content": "export interface VaultData {\n  vault_id: string\n  name: string\n  asset_currency: string\n  asset_issuer: string\n  asset_issuer_name: string\n  tvl_usd: number\n  outstanding_loans_usd: number\n  utilization_ratio: number\n  avg_interest_rate: number\n  website: string\n  asset_category: string\n}\n\nexport interface VaultsMetrics {\n  tvl_total: number\n  debt_total: number\n  active_vaults: number\n  avg_interest_rate: number\n  utilization_ratio: number\n  loans_originated: number\n  last_updated: string\n}\n\nexport interface VaultsListResponse {\n  total: number\n  page: number\n  size: number\n  sort_by: string\n  sort_order: string\n  asset_type: string\n  results: VaultData[]\n}\n\nexport interface AssetPricesResponse {\n  prices: Record<string, number> // \"currency.issuer\" → XRP price\n  lastUpdated: number | null\n}\n"
  },
  {
    "path": "src/containers/Vaults/vaults.scss",
    "content": "@use '../shared/css/variables' as *;\n@use '../shared/css/table';\n\n.vaults-page {\n  overflow: visible;\n  width: 100%;\n  max-width: 1500px;\n  min-height: 150px;\n  margin: auto;\n  margin-top: 40px;\n\n  .text-truncate {\n    @extend %truncate;\n  }\n\n  .type {\n    display: inline-block;\n    margin-bottom: 80px;\n    margin-left: 24px;\n    color: $white;\n    font-size: 32px;\n    @include bold;\n  }\n\n  .metrics-wrapper {\n    padding: 16px 16px 4px;\n    border: 1px solid $black-60;\n    margin-right: 24px;\n    margin-bottom: 40px;\n    margin-left: 24px;\n    background-color: $black-80;\n    font-size: 12px;\n\n    .metric {\n      display: flex;\n      align-items: center;\n      justify-content: space-between;\n      margin-bottom: 12px;\n      background-color: $black-80;\n      gap: 6px;\n\n      .title {\n        display: flex;\n        align-items: center;\n        color: $black-40;\n        gap: 8px;\n        line-height: 150%;\n        text-transform: uppercase;\n        @include semibold;\n\n        .hover {\n          width: 16px;\n          height: 16px;\n          flex-shrink: 0;\n        }\n      }\n\n      .val {\n        color: $white;\n        font-size: 18px;\n        @include bold;\n      }\n    }\n  }\n\n  .vaults-controls {\n    display: flex;\n    flex-direction: column;\n    margin-bottom: 24px;\n    margin-left: 24px;\n    gap: 16px;\n  }\n\n  .filter {\n    display: flex;\n    flex-wrap: wrap;\n    align-items: center;\n    gap: 12px;\n\n    .filter-icon {\n      width: 24px;\n      height: 24px;\n      flex-shrink: 0;\n      background-image: url('../shared/images/group.svg');\n    }\n\n    .filter-field {\n      display: flex;\n      flex: 0 0 auto;\n      align-items: center;\n      padding: 6px 12px;\n      border: 1px solid $black-50;\n      border-radius: $border-radius;\n      background-color: $black;\n      color: $white;\n      cursor: pointer;\n      font-size: 12px;\n      gap: 8px;\n      @include medium;\n\n      &:hover {\n        background-color: $black-70;\n      }\n\n      &.selected {\n        background-color: $white;\n        color: $black;\n\n        &:hover {\n          color: $black;\n        }\n      }\n    }\n  }\n\n  .controls-right {\n    display: flex;\n    align-items: center;\n    gap: 12px;\n  }\n\n  .refresh-button {\n    display: flex;\n    width: 40px;\n    height: 40px;\n    flex-shrink: 0;\n    align-items: center;\n    justify-content: center;\n    padding: 0;\n    border: 1px solid $black-50;\n    border-radius: $border-radius;\n    background-color: transparent;\n    color: $white;\n    cursor: pointer;\n    font-size: 18px;\n    line-height: 1;\n    transition: all 0.2s ease;\n\n    &:hover {\n      background-color: rgba($black-80, 0.5);\n    }\n\n    &:active {\n      background-color: $black-70;\n    }\n  }\n\n  .search-bar {\n    display: flex;\n    align-items: center;\n    padding: 8px 16px;\n    border: 1px solid $black-50;\n    border-radius: $border-radius;\n    gap: 16px;\n\n    .search-icon {\n      width: 12px;\n      height: 12px;\n      flex-shrink: 0;\n      background-image: url('../shared/images/search.svg');\n      background-repeat: no-repeat;\n      background-size: contain;\n    }\n\n    &:hover,\n    &:focus-within {\n      background-color: rgba($black-80, 0.5);\n    }\n\n    &:focus-within {\n      border-color: $blue-purple-40;\n    }\n\n    input {\n      width: 100%;\n      border: none;\n      border-radius: 0;\n      appearance: none;\n      background: transparent;\n      color: $white;\n      font-size: 14px;\n      letter-spacing: 0.14px;\n      line-height: 24px;\n      outline: none !important;\n\n      &::placeholder {\n        color: $black-50;\n      }\n    }\n\n    .search-clear {\n      display: flex;\n      flex-shrink: 0;\n      align-items: center;\n      justify-content: center;\n      padding: 0;\n      border: none;\n      background: transparent;\n      color: $black-40;\n      cursor: pointer;\n      font-size: 12px;\n\n      &:hover {\n        color: $white;\n      }\n    }\n  }\n\n  .vaults-table-section {\n    position: relative;\n\n    .table-loader-overlay {\n      position: absolute;\n      z-index: 10;\n      display: flex;\n      align-items: center;\n      justify-content: center;\n      background-color: rgba($black, 0.5);\n      inset: 0;\n    }\n  }\n\n  .vaults-table {\n    .table-wrap {\n      overflow-x: auto;\n    }\n\n    table.basic {\n      min-width: 900px;\n      font-size: 14px;\n      table-layout: fixed;\n\n      th {\n        font-size: 12px;\n        @include semibold;\n\n        &.rank {\n          width: 3%;\n        }\n\n        &.vault-id {\n          width: 13%;\n        }\n\n        &.name-col {\n          width: 15%;\n        }\n\n        &.asset {\n          width: 13%;\n        }\n\n        &.tvl-usd,\n        &.outstanding-loans-usd,\n        &.utilization-ratio,\n        &.avg-interest-rate {\n          width: 11%;\n          text-align: right;\n\n          .sort-header .arrow {\n            width: 12px;\n            height: 12px;\n            opacity: 0.4;\n          }\n\n          &.active {\n            color: $white;\n\n            .sort-header .arrow {\n              opacity: 1;\n            }\n          }\n        }\n\n        &.website {\n          width: 6%;\n          text-align: center;\n        }\n      }\n\n      td {\n        &.name {\n          @extend %truncate;\n        }\n\n        &.asset {\n          white-space: nowrap;\n        }\n\n        &.vault-id {\n          .vault-id-long {\n            display: none;\n          }\n\n          .vault-id-short {\n            display: inline;\n          }\n        }\n\n        &.website {\n          text-align: center;\n        }\n      }\n    }\n\n    .green-link {\n      color: $green-30;\n      cursor: pointer;\n    }\n\n    .website-link {\n      display: inline-flex;\n      align-items: center;\n      color: $green-30;\n\n      &::after {\n        content: none !important;\n      }\n    }\n\n    .external-link-icon {\n      width: 15px;\n      height: 15px;\n\n      path {\n        fill: $green-30;\n      }\n    }\n  }\n\n  .footnote {\n    @include footnote;\n  }\n\n  @include for-size(tablet-landscape-up) {\n    padding-right: 24px;\n    padding-left: 24px;\n\n    .type {\n      margin-left: 0;\n    }\n\n    .metrics-wrapper {\n      display: flex;\n      flex-wrap: wrap;\n      padding: 0;\n      border: none;\n      margin-right: 0;\n      margin-left: 0;\n      background-color: transparent;\n      gap: 32px;\n\n      .metric {\n        display: block !important;\n        min-width: 200px;\n        flex: 1 1 calc(33.333% - 32px);\n        padding: 14px 20px;\n        border-radius: $border-radius;\n        margin-bottom: 0;\n        background-color: $black-80;\n\n        .title {\n          margin-bottom: 6px;\n          font-size: 14px;\n        }\n\n        .val {\n          font-size: 18px;\n        }\n      }\n    }\n\n    .vaults-controls {\n      flex-direction: row;\n      align-items: center;\n      justify-content: space-between;\n      margin-left: 0;\n    }\n\n    .controls-right .search-bar {\n      width: 400px;\n    }\n\n    table.basic {\n      font-size: 14px;\n    }\n\n    .vaults-table table.basic td.vault-id {\n      .vault-id-long {\n        display: inline;\n      }\n\n      .vault-id-short {\n        display: none;\n      }\n    }\n  }\n\n  @include for-size(desktop-up) {\n    padding-right: 150px;\n    padding-left: 150px;\n    margin: auto;\n    margin-top: 100px;\n\n    .type {\n      margin-left: auto;\n      font-size: 42px;\n    }\n\n    .filter {\n      .filter-field {\n        padding: 8px 16px;\n        font-size: 14px;\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "src/containers/shared/EmptyMessageTableRow.tsx",
    "content": "import { PropsWithChildren } from 'react'\n\nexport type EmptyMessageTableRowProps = PropsWithChildren<{\n  colSpan: number // How many columns is the table\n}>\n\nexport const EmptyMessageTableRow = ({\n  children,\n  colSpan,\n}: EmptyMessageTableRowProps) => (\n  <tr>\n    <td colSpan={colSpan} className=\"empty-message\">\n      {children}\n    </td>\n  </tr>\n)\n"
  },
  {
    "path": "src/containers/shared/Interfaces.tsx",
    "content": "/**\n * Values returned by 'formatAccountInfo' from /src/rippled/lib/utils.js\n */\nexport interface AccountFormattedInfo {\n  accountTransactionID?: string\n  sequence?: number\n  ticketCount?: number\n  ownerCount?: number\n  reserve?: number\n  tick?: number\n  rate?: string\n  domain?: string\n  emailHash?: string\n  flags?: string[]\n  balance?: string\n  previousTxn?: string\n  previousLedger?: number\n  nftMinter?: string\n}\n\n/**\n * Values returned by 'formatNFTInfo' from /src/rippled/lib/utils.js\n */\nexport interface NFTFormattedInfo {\n  NFTId?: string\n  ledgerIndex?: number\n  owner?: string\n  isBurned?: boolean\n  flags?: string[]\n  transferFee?: number\n  issuer?: string\n  NFTTaxon?: number\n  NFTSerial?: number\n  uri?: string\n  validated?: boolean\n  status?: string\n  warnings?: string[]\n}\n\n/**\n * Values returned by 'formatMPTIssuance' from /src/rippled/lib/utils.js\n */\nexport interface FormattedMPTIssuance {\n  issuer: string\n  sequence: number\n  assetScale?: number\n  maxAmt?: string\n  outstandingAmt?: string\n  flags?: string[]\n  transferFee?: number\n  rawMPTMetadata?: string\n  parsedMPTMetadata?: Record<string, unknown>\n  isMPTMetadataCompliant: boolean\n}\n\nexport interface ErrorMessage {\n  title: string\n  hints: string[]\n}\n\nexport type ErrorMessages = {\n  default: ErrorMessage\n  [code: number]: ErrorMessage\n}\n"
  },
  {
    "path": "src/containers/shared/LoadMoreButton.tsx",
    "content": "import { MouseEventHandler } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { useAnalytics } from './analytics'\n\nexport interface LoadMoreButtonProps {\n  onClick: MouseEventHandler\n}\n\nexport const LoadMoreButton = ({ onClick }: LoadMoreButtonProps) => {\n  const { track } = useAnalytics()\n  const { t } = useTranslation()\n\n  const onClickWrapper = (event) => {\n    track('load_more', {})\n    onClick(event)\n  }\n\n  return (\n    <button\n      type=\"button\"\n      className=\"btn load-more-btn\"\n      onClick={onClickWrapper}\n    >\n      {t('load_more_action')}\n    </button>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/NetworkContext.tsx",
    "content": "import React, { useEffect, useState } from 'react'\nimport axios from 'axios'\nimport Log from './log'\n\nconst ENV_NETWORK_MAP: Record<string, string> = {\n  mainnet: 'main',\n  testnet: 'test',\n  devnet: 'dev',\n  xahau_mainnet: 'xahau-main',\n  xahau_testnet: 'xahau-test',\n}\n\nfunction getNetworkName() {\n  if (\n    process.env.VITE_ENVIRONMENT &&\n    process.env.VITE_ENVIRONMENT in ENV_NETWORK_MAP\n  ) {\n    return ENV_NETWORK_MAP[process.env.VITE_ENVIRONMENT]\n  }\n  return undefined\n}\n\nconst NetworkContext = React.createContext(getNetworkName())\n\nexport type NetworkProviderProps = React.PropsWithChildren<{\n  children: any\n  rippledUrl?: string\n}>\n\nexport const NetworkProvider = ({\n  children,\n  rippledUrl,\n}: NetworkProviderProps) => {\n  const initialNetworkName = getNetworkName()\n  const [networkName, setNetworkName] = useState(initialNetworkName)\n\n  useEffect(() => {\n    if (initialNetworkName == null && rippledUrl) {\n      axios\n        .get(`${process.env.VITE_DATA_URL}/get_network/${rippledUrl}`)\n        .then((resp) => resp.data)\n        .then((data) =>\n          setNetworkName(\n            data.result && data.result === 'error' ? null : data.network,\n          ),\n        )\n        .catch((e) => Log.error(e))\n    }\n  }, [initialNetworkName, rippledUrl])\n\n  return (\n    <NetworkContext.Provider value={networkName}>\n      {children}\n    </NetworkContext.Provider>\n  )\n}\n\nexport { getNetworkName }\n\nexport default NetworkContext\n"
  },
  {
    "path": "src/containers/shared/NumberFormattingUtils.ts",
    "content": "import { localizeNumber, formatLargeNumber, formatSmallNumber } from './utils'\n\n/**\n * Thresholds for determining formatting precision.\n * Adjust these values as needed to match product or UX requirements.\n */\nconst USD_REGULAR_BALANCE_LOWER_BOUND = 1\nconst USD_SMALL_BALANCE_LOWER_BOUND = 0.0001\nconst TOKEN_BALANCE_LARGE_LOWER_BOUND = 999\n\n// Standard display for most XRP amounts (2 decimals)\nexport const XRP_CURRENCY_OPTIONS = {\n  style: 'currency',\n  currency: 'XRP',\n  minimumFractionDigits: 2,\n  maximumFractionDigits: 2,\n}\n\n// Higher precision for small (<1 XRP) balances\nexport const XRP_SMALL_BALANCE_CURRENCY_OPTIONS = {\n  style: 'currency',\n  currency: 'XRP',\n  minimumFractionDigits: 2,\n  maximumFractionDigits: 4,\n}\n\nexport const USD_CURRENCY_OPTIONS = {\n  style: 'currency',\n  currency: 'USD',\n  minimumFractionDigits: 2,\n  maximumFractionDigits: 2,\n}\n\n// Higher precision for small (<1 USD) balances\nexport const USD_SMALL_BALANCE_CURRENCY_OPTIONS = {\n  style: 'currency',\n  currency: 'USD',\n  minimumFractionDigits: 2,\n  maximumFractionDigits: 4,\n}\n\n// Higher precision for small (<0.0001 USD) balances\nexport const USD_EXTRA_SMALL_BALANCE_CURRENCY_OPTIONS = {\n  style: 'currency',\n  currency: 'USD',\n  minimumFractionDigits: 2,\n  maximumFractionDigits: 10,\n}\n\nexport const NUMBER_DEFAULT_OPTIONS = {\n  style: 'decimal',\n  minimumFractionDigits: 0,\n  maximumFractionDigits: 2,\n  useGrouping: true,\n}\n\nexport const NUMBER_SMALL_OPTIONS = {\n  style: 'decimal',\n  minimumFractionDigits: 0,\n  maximumFractionDigits: 4,\n  useGrouping: true,\n}\n\n/**\n * Formats USD values (price or balance) with tiered precision based on value\n * @param value - The USD value to format\n * @param lang - Language for localization\n * @returns Formatted USD string or '--' for zero values\n */\nexport const formatUsdValue = (value: number, lang: string): string => {\n  if (value === 0) {\n    return '--'\n  }\n\n  let options\n  if (value >= USD_REGULAR_BALANCE_LOWER_BOUND) {\n    options = USD_CURRENCY_OPTIONS\n  } else if (value >= USD_SMALL_BALANCE_LOWER_BOUND) {\n    options = USD_SMALL_BALANCE_CURRENCY_OPTIONS\n  } else {\n    options = USD_EXTRA_SMALL_BALANCE_CURRENCY_OPTIONS\n  }\n\n  return localizeNumber(value, lang, options) || '--'\n}\n\n/**\n * Formats token balances with conditional precision based on value\n * @param balance - The token balance to format\n * @param lang - Language for localization\n * @returns Formatted balance string\n */\nexport const formatTokenBalance = (balance: number, lang: string): string => {\n  const options =\n    balance > TOKEN_BALANCE_LARGE_LOWER_BOUND\n      ? NUMBER_DEFAULT_OPTIONS\n      : NUMBER_SMALL_OPTIONS\n  return localizeNumber(balance, lang, options) || '0'\n}\n\n/**\n * Three-step calculation for USD balance to ensure mathematical consistency\n * Formats USD price, formats token balance, then calculates USD balance using displayed values\n * @param tokenBalance - The token balance\n * @param priceInUSD - Price in USD\n * @param lang - Language for localization\n * @returns Object with formatted USD price, token balance, and calculated USD balance\n */\nexport const calculateFormattedUsdBalance = (\n  tokenBalance: number,\n  priceInUSD: number,\n  lang: string,\n): {\n  formattedUsdPrice: string\n  formattedBalance: string\n  formattedBalanceUsd: string\n} => {\n  let formattedUsdPrice = '--'\n  let formattedBalance = '--'\n  let formattedBalanceUsd = '--'\n\n  if (priceInUSD !== 0) {\n    // Step 1: Format USD Price\n    formattedUsdPrice = formatUsdValue(priceInUSD, lang)\n    const displayedUsdPrice = parseFloat(\n      (formattedUsdPrice || '0').replace(/[$,]/g, ''), // Removes dollar signs and commas from USD prices like \"$4,321.30\" → \"4321.30\"\n    )\n\n    // Step 2: Format Balance\n    formattedBalance = formatTokenBalance(tokenBalance, lang)\n    const displayedBalance = parseFloat(\n      (formattedBalance || '0').replace(/[,]/g, ''), // Removes commas from token balances like \"1,234.5678\" → \"1234.5678\"\n    )\n\n    // Step 3: Calculate USD Balance using displayed values\n    const calculatedBalanceUSD = displayedUsdPrice * displayedBalance\n    formattedBalanceUsd = formatUsdValue(calculatedBalanceUSD, lang)\n  } else {\n    // If no price, still format the balance\n    formattedBalance = formatTokenBalance(tokenBalance, lang)\n  }\n\n  return {\n    formattedUsdPrice,\n    formattedBalance,\n    formattedBalanceUsd,\n  }\n}\n\n/**\n * Formats numbers according to the general rules:\n * - Small numbers (< 1): 4 decimal places with trailing zeros\n * - Large numbers (>= 10,000): abbreviate with 1 decimal place and suffix (K, M, B)\n * - Medium numbers (1 to 9,999): full number with 2 decimal places and commas\n * @param value - The numeric value to format\n * @param decimals - Number of decimal places for abbreviated numbers (default: 1)\n * @param lang - Language for localization (default: 'en-US')\n * @returns Formatted string\n */\nexport const parseAmount = (\n  value: string | number,\n  decimals: number = 1,\n  lang: string = 'en-US',\n): string => {\n  const valueNumeric = Number(value)\n\n  if (valueNumeric === 0) {\n    return (\n      localizeNumber(0, lang, {\n        minimumFractionDigits: 2,\n        maximumFractionDigits: 2,\n      }) || '0.00'\n    )\n  }\n\n  if (valueNumeric.toString().includes('e')) {\n    return '< 0.0001'\n  }\n\n  if (valueNumeric > 0 && valueNumeric < 1) {\n    return formatSmallNumber(valueNumeric, lang) || '0.0000'\n  }\n\n  const formatted = formatLargeNumber(valueNumeric, decimals, lang)\n  return formatted.unit\n    ? `${formatted.num || '0'}${formatted.unit}`\n    : formatted.num || '0'\n}\n\n/**\n * Formats currency amounts with dollar sign prefix\n * @param value - The numeric value to format as currency\n * @param decimals - Number of decimal places for abbreviated numbers (default: 1)\n * @returns Formatted currency string with $ prefix\n */\nexport const parseCurrencyAmount = (\n  value: string | number,\n  decimals: number = 1,\n  lang: string = 'en-US',\n): string => {\n  const formatted = parseAmount(value, decimals, lang)\n\n  if (formatted === '< 0.0001') {\n    return '<\\u00A0$0.0001'\n  }\n\n  return `$${formatted}`\n}\n\n/**\n * Formats integer values with 0 decimal places\n * @param value - The numeric value to format as integer\n * @param lang - Language for localization (default: 'en-US')\n * @returns Formatted integer string with commas for thousands separators\n */\nexport const parseIntegerAmount = (\n  value: string | number,\n  lang: string = 'en-US',\n): string => {\n  const valueNumeric = Number(value)\n\n  if (valueNumeric === 0) {\n    return '0'\n  }\n\n  // For large numbers (>= 10,000), use abbreviations with 1 decimal place\n  if (valueNumeric >= 10000) {\n    const formatted = formatLargeNumber(valueNumeric, 1, lang)\n    return formatted.unit\n      ? `${formatted.num || '0'}${formatted.unit}`\n      : formatted.num || '0'\n  }\n\n  // For smaller numbers, show full integer with commas\n  return (\n    localizeNumber(Math.round(valueNumeric), lang, { useGrouping: true }) ||\n    Math.round(valueNumeric).toString()\n  )\n}\n\n/**\n * Formats price values with special rules:\n * - For prices >= $10,000: no decimal places\n * - For very large prices (>= $1,000,000): abbreviate with 2 decimal places\n * - Otherwise: use standard currency formatting\n * @param value - The price value to format\n * @param lang - Language for localization (default: 'en-US')\n * @returns Formatted price string with $ prefix\n */\nexport const parsePrice = (\n  value: string | number,\n  lang: string = 'en-US',\n): string => {\n  const valueNumeric = Number(value)\n\n  if (valueNumeric === 0) {\n    return `$${localizeNumber(0, lang, { minimumFractionDigits: 2, maximumFractionDigits: 2 }) || '0.00'}`\n  }\n\n  if (valueNumeric > 0 && valueNumeric < 0.0001) {\n    return '<\\u00A0$0.0001'\n  }\n\n  if (valueNumeric > 0 && valueNumeric < 1) {\n    return `$${formatSmallNumber(valueNumeric, lang) || '0.0000'}`\n  }\n\n  if (valueNumeric >= 1000000) {\n    const formatted = formatLargeNumber(valueNumeric, 2, lang)\n    return `$${formatted.num || '0'}${formatted.unit}`\n  }\n\n  if (valueNumeric >= 10000) {\n    return `$${localizeNumber(Math.round(valueNumeric), lang, { useGrouping: true }) || Math.round(valueNumeric).toString()}`\n  }\n\n  return `$${\n    localizeNumber(valueNumeric, lang, {\n      minimumFractionDigits: 2,\n      maximumFractionDigits: 2,\n    }) || valueNumeric.toFixed(2)\n  }`\n}\n\n/**\n * Formats percentage values with % suffix and configurable decimal places and cutoff\n *\n * @param percent - The percentage value to format\n * @param digits - Number of decimal places to display (default: 2)\n * @param cutoff - Minimum percentage value to display (default: 0.01 for 0.01%)\n * @returns Formatted percentage string with % suffix\n */\nexport const parsePercent = (\n  percent: number,\n  digits = 2,\n  cutoff = 0.01,\n): string => {\n  // Handle very small percentages below the cutoff\n  if (Math.abs(percent) < cutoff) {\n    return `${(0.0).toFixed(digits)}%`\n  }\n\n  // Use specified decimal places for percentages\n  return `${percent.toFixed(digits)}%`\n}\n"
  },
  {
    "path": "src/containers/shared/QueryClient.tsx",
    "content": "import { QueryClient } from 'react-query'\n\nexport const queryClient = new QueryClient({\n  defaultOptions: {\n    queries: {\n      refetchOnWindowFocus: false,\n      refetchOnReconnect: false,\n      refetchOnMount: false,\n      retry: false,\n    },\n  },\n})\n"
  },
  {
    "path": "src/containers/shared/SocketContext.tsx",
    "content": "import React, { useContext, createContext, useEffect, useState } from 'react'\nimport { XrplClient } from 'xrpl-client'\nimport { useAnalytics } from './analytics'\n\nconst LOCALHOST_URLS = ['localhost', '127.0.0.1', '0.0.0.0']\n\nexport interface ExplorerXrplClient extends XrplClient {\n  p2pSocket: XrplClient\n  rippledUrl: string | undefined\n}\n\nfunction isInsecureWs(rippledHost: string | undefined): boolean {\n  return (\n    !!Number(process.env.VITE_INSECURE_WS) ||\n    LOCALHOST_URLS.some((url) => rippledHost?.includes(url)) ||\n    rippledHost === ''\n  )\n}\n\nfunction getSocket(rippledUrl?: string): ExplorerXrplClient {\n  const hosts = rippledUrl\n    ? [rippledUrl]\n    : process.env.VITE_RIPPLED_HOST?.split(',') || []\n\n  const wsUrls: string[] = []\n\n  hosts.forEach((host) => {\n    const prefix = isInsecureWs(host) ? 'ws' : 'wss'\n\n    if (host?.includes(':')) {\n      wsUrls.push(`${prefix}://${host}`)\n    } else if (process.env.VITE_RIPPLED_WS_PORT) {\n      wsUrls.push(`${prefix}://${host}:${process.env.VITE_RIPPLED_WS_PORT}`)\n      if (process.env.VITE_ENVIRONMENT === 'custom') {\n        wsUrls.push(`${prefix}://${host}`)\n      }\n    } else {\n      wsUrls.push(`${prefix}://${host}`)\n    }\n  })\n\n  const socket = new XrplClient(wsUrls, {\n    tryAllNodes: true,\n  }) as ExplorerXrplClient\n  const hasP2PSocket =\n    process.env.VITE_P2P_RIPPLED_HOST != null &&\n    process.env.VITE_P2P_RIPPLED_HOST !== ''\n  // @ts-ignore - will be removed eventually\n  socket.p2pSocket = hasP2PSocket\n    ? new XrplClient([\n        `${isInsecureWs(process.env.VITE_P2P_RIPPLED_HOST) ? 'ws' : 'wss'}://${\n          process.env.VITE_P2P_RIPPLED_HOST\n        }:${process.env.VITE_RIPPLED_WS_PORT}`,\n      ])\n    : undefined\n\n  socket.rippledUrl = rippledUrl\n  return socket\n}\n\nconst SocketContext = createContext<ExplorerXrplClient>(undefined!)\n\nexport type SocketProviderProps = React.PropsWithChildren<{\n  children: any\n  rippledUrl?: string\n}>\n\nexport const SocketProvider = ({\n  children,\n  rippledUrl,\n}: SocketProviderProps) => {\n  const socket = getSocket(rippledUrl)\n  const { setGlobals } = useAnalytics()\n\n  socket.once('online', () => {\n    setGlobals({\n      entrypoint: socket.getState().server.uri,\n    })\n  })\n\n  useEffect(() => () => {\n    socket.close()\n    if (socket.p2pSocket !== undefined) {\n      socket.p2pSocket.close()\n    }\n  })\n  return (\n    <SocketContext.Provider value={socket}>{children}</SocketContext.Provider>\n  )\n}\n\n/**\n * Hook that says whether the global socket is currently connected\n */\nconst useIsOnline = () => {\n  const rippledSocket = useContext(SocketContext)\n  const [isOnline, setIsOnline] = useState(false)\n\n  useEffect(() => {\n    const setIsReadyTrue = () => setIsOnline(true)\n    const setIsReadyFalse = () => setIsOnline(false)\n    rippledSocket.ready().then(() => {\n      setIsReadyTrue()\n      rippledSocket.on('online', setIsReadyTrue)\n      rippledSocket.on('offline', setIsReadyFalse)\n    })\n    return () => {\n      rippledSocket.off('online', setIsReadyTrue)\n      rippledSocket.off('offline', setIsReadyFalse)\n    }\n  }, [rippledSocket])\n\n  return {\n    isOnline,\n  }\n}\n\nexport { getSocket, useIsOnline }\n\nexport default SocketContext\n"
  },
  {
    "path": "src/containers/shared/amendmentUtils.ts",
    "content": "import axios from 'axios'\n\nimport { localizeDate } from './utils'\n\nlet cachedRippledVersions = new Map<string, string>()\n\nconst TIME_ZONE = 'UTC'\nconst DATE_OPTIONS = {\n  hour: 'numeric',\n  minute: 'numeric',\n  second: 'numeric',\n  year: 'numeric',\n  month: 'numeric',\n  day: 'numeric',\n  hour12: true,\n  timeZone: TIME_ZONE,\n}\n\nexport function getExpectedDate(date: string, language: string) {\n  const txDate = new Date(date)\n\n  return localizeDate(\n    txDate.setDate(txDate.getDate() + 14),\n    language,\n    DATE_OPTIONS,\n  )\n}\n\nasync function fetchMinRippledVersions() {\n  const response = await axios.get(\n    `${process.env.VITE_DATA_URL}/amendments/info`,\n  )\n  const { amendments } = response.data\n  const mapping = new Map<string, string>()\n\n  amendments.forEach((amendment) => {\n    if (amendment.name && amendment.rippled_version) {\n      mapping.set(amendment.name, amendment.rippled_version)\n    }\n  })\n\n  return mapping\n}\n\nexport async function getRippledVersion(name: string) {\n  if (cachedRippledVersions.get(name)) {\n    return cachedRippledVersions.get(name)\n  }\n  cachedRippledVersions = await fetchMinRippledVersions()\n  return cachedRippledVersions.get(name)\n}\n"
  },
  {
    "path": "src/containers/shared/analytics.ts",
    "content": "import { useCallback, useEffect } from 'react'\nimport { useLocation } from 'react-router'\n\n/* eslint-disable camelcase -- GA uses underscores for the names */\nexport type AnalyticsEventNames =\n  | 'exception'\n  | 'screen_view'\n  | 'search'\n  | 'mobile_menu'\n  | 'network_switch'\n  | 'load_more'\n  | 'not_found'\n  | 'token_search_click'\n\nexport interface AnalyticsFields {\n  network?: string\n  entrypoint?: string\n  transaction_type?: string\n  transaction_category?: string\n  transaction_action?: string\n  tec_code?: string\n  account_id?: string\n  issuer?: string\n  currency_code?: string\n  asset1?: string\n  asset2?: string\n  nftoken_id?: string\n  search_term?: string\n  search_category?: string\n  validator?: string\n  mpt_issuance_id?: string\n  vault_id?: string\n\n  description?: string\n  page_title?: string\n  page_location?: string\n  page_path?: string\n}\n/* eslint-enable camelcase */\n\nclass Analytics {\n  globals: any = {}\n\n  setGlobals(newGlobals) {\n    Object.assign(this.globals, newGlobals)\n  }\n\n  track(event: AnalyticsEventNames, fields: AnalyticsFields) {\n    window.dataLayer.push({ ...this.globals, ...fields, event })\n  }\n\n  trackException(description: string) {\n    this.track('exception', { description })\n  }\n\n  trackScreenLoaded(fields?: AnalyticsFields) {\n    this.track('screen_view', {\n      ...fields,\n      page_title: document.title,\n    })\n  }\n}\n\nexport const analytics = new Analytics()\n\nexport const useAnalytics = () => {\n  const setGlobals = useCallback((newGlobals) => {\n    analytics.setGlobals(newGlobals)\n  }, [])\n\n  const track = useCallback(\n    (...args: Parameters<Analytics['track']>) => analytics.track(...args),\n    [],\n  )\n\n  const trackException = useCallback((description: string) => {\n    analytics.trackException(description)\n  }, [])\n\n  const trackScreenLoaded = useCallback((fields?: AnalyticsFields) => {\n    analytics.trackScreenLoaded(fields)\n  }, [])\n\n  return {\n    setGlobals,\n    track,\n    trackException,\n    trackScreenLoaded,\n  }\n}\n\n/**\n * Sets up a hook to populate page_path from `useLocation`.  This allows for via various routers.\n * @constructor\n */\nexport const AnalyticsSetPath = () => {\n  const { setGlobals } = useAnalytics()\n  const { hash, pathname, search } = useLocation()\n  useEffect(() => {\n    // remove the custom mode's endpoint from the url path\n    const url =\n      (process.env.VITE_ENVIRONMENT === 'custom'\n        ? `/${pathname.split('/').slice(2).join('/')}`\n        : pathname) +\n      search +\n      hash\n\n    setGlobals({\n      page_path: url,\n    })\n  }, [hash, pathname, search, setGlobals])\n\n  return null\n}\n"
  },
  {
    "path": "src/containers/shared/components/Account.tsx",
    "content": "import { RouteLink } from '../routing'\nimport { ACCOUNT_ROUTE } from '../../App/routes'\n\nexport interface AccountProps {\n  account: string\n  displayText?: string\n  link?: boolean\n  tag?: number\n}\n\nexport const Account = (props: AccountProps) => {\n  const { account, displayText, link = true, tag } = props\n  const parts = account.split(':')\n  const computedTag = tag || parts[1]\n\n  return (\n    <>\n      {link ? (\n        <RouteLink\n          className=\"account\"\n          data-testid=\"account\"\n          title={parts[0]}\n          to={ACCOUNT_ROUTE}\n          params={{ id: parts[0] }}\n        >\n          {displayText || parts[0]}\n        </RouteLink>\n      ) : (\n        <span className=\"account\" data-testid=\"account\" title={parts[0]}>\n          {displayText || parts[0]}\n        </span>\n      )}\n      {computedTag && (\n        <span className=\"dt\" data-testid=\"dt\">\n          :{computedTag}\n        </span>\n      )}\n    </>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Amount.tsx",
    "content": "import { useQuery } from 'react-query'\nimport { useContext } from 'react'\nimport { CURRENCY_OPTIONS, XRP_BASE } from '../transactionUtils'\nimport { useLanguage } from '../hooks'\nimport { localizeNumber, convertScaledPrice } from '../utils'\nimport { parseAmount } from '../NumberFormattingUtils'\nimport Currency from './Currency'\nimport { ExplorerAmount } from '../types'\nimport { FormattedMPTIssuance } from '../Interfaces'\nimport { getMPTIssuance } from '../../../rippled/lib/rippled'\nimport { formatMPTIssuance } from '../../../rippled/lib/utils'\nimport SocketContext from '../SocketContext'\nimport { useAnalytics } from '../analytics'\n\nexport interface AmountProps {\n  value: ExplorerAmount | string\n  displayIssuer?: boolean\n  modifier?: `+` | '-' | '~' // value to put in front of the currency symbol and number\n  shortenIssuer?: boolean\n  displayCurrency?: boolean\n  /** Format amount with parseAmount instead of localizeNumber. */\n  useParseAmount?: boolean\n}\n\nexport const Amount = ({\n  displayIssuer = true,\n  modifier,\n  value,\n  shortenIssuer = false,\n  displayCurrency = true,\n  useParseAmount: useParsed = false,\n}: AmountProps) => {\n  const language = useLanguage()\n  const rippledSocket = useContext(SocketContext)\n  const { trackException } = useAnalytics()\n\n  // Handle the special case where amount is '< 0.0001' string\n  const isSmallAmountString =\n    typeof value === 'object' && value.amount === '< 0.0001'\n\n  const issuer = typeof value === 'string' ? undefined : value.issuer\n  const currency = typeof value === 'string' ? 'XRP' : value.currency\n  const amount =\n    typeof value === 'string' ? parseInt(value, 10) / XRP_BASE : value.amount\n  const isMPT = typeof value === 'string' ? false : (value.isMPT ?? false)\n\n  const options = { ...CURRENCY_OPTIONS, currency }\n\n  const renderAmount = (localizedAmount: any) => (\n    <span className=\"amount\" data-testid=\"amount\">\n      <span className=\"amount-localized\" data-testid=\"amount-localized\">\n        {modifier && <span className=\"amount-modifier\">{modifier}</span>}\n        {localizedAmount}\n      </span>\n      {displayCurrency && (\n        <>\n          {' '}\n          <Currency\n            issuer={displayIssuer ? issuer : ''}\n            currency={currency}\n            link\n            displaySymbol={false}\n            isMPT={isMPT}\n            shortenIssuer={shortenIssuer}\n          />\n        </>\n      )}\n    </span>\n  )\n\n  const mptID = isMPT ? (value as ExplorerAmount).currency : null\n\n  // fetch MPTIssuance only if isMPT is true\n  const { data: mptIssuanceData } =\n    useQuery<FormattedMPTIssuance>(\n      ['getMPTIssuanceScale', mptID],\n      async () => {\n        const info = await getMPTIssuance(rippledSocket, mptID)\n        return formatMPTIssuance(info.node)\n      },\n      {\n        onError: (e: any) => {\n          trackException(`mptIssuance ${mptID} --- ${JSON.stringify(e)}`)\n        },\n        enabled: isMPT,\n      },\n    ) || {}\n\n  // Handle the special case where amount is '< 0.0001'\n  if (isSmallAmountString) {\n    return renderAmount('< 0.0001')\n  }\n\n  // if amount is MPT type, we need to fetch the scale from the MPTokenIssuance\n  // object so we can show the scaled amount\n  if (isMPT && typeof value !== 'string') {\n    if (mptIssuanceData) {\n      const scale = mptIssuanceData.assetScale ?? 0\n      const scaledAmount = convertScaledPrice(\n        parseInt(amount as string, 10).toString(16),\n        scale,\n      )\n\n      return renderAmount(localizeNumber(scaledAmount, language, {}, true))\n    }\n    return null\n  }\n\n  if (useParsed) {\n    return renderAmount(parseAmount(amount, 1, language))\n  }\n\n  return renderAmount(localizeNumber(amount, language, options))\n}\n"
  },
  {
    "path": "src/containers/shared/components/CopyableText/CopyableText.tsx",
    "content": "import { useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport CopyIcon from '../../images/copy.svg'\nimport './styles.scss'\n\ninterface CopyableTextProps {\n  /** The text to copy to clipboard when clicked */\n  text: string\n  /** The text displayed in the button */\n  displayText: string\n  /** Whether to show a separate copy icon button next to the text */\n  showCopyIcon?: boolean\n}\n\n/**\n * A button component that copies text to the clipboard when clicked.\n *\n * - Shows \"Click to copy\" tooltip on hover/focus\n * - Shows green \"Copied\" tooltip for 2 seconds after clicking\n * - When showCopyIcon is true, displays the text with a separate copy icon button\n */\nexport const CopyableText = ({\n  text,\n  displayText,\n  showCopyIcon = false,\n}: CopyableTextProps) => {\n  const { t } = useTranslation()\n  const [copied, setCopied] = useState(false)\n  const [showHint, setShowHint] = useState(false)\n\n  const handleCopy = (e: React.MouseEvent<HTMLButtonElement>) => {\n    navigator.clipboard.writeText(text)\n    setCopied(true)\n    setShowHint(false)\n    // Remove focus after clicking, so the green highlight goes away when \"Copied\" is shown.\n    e.currentTarget.blur()\n    setTimeout(() => setCopied(false), 2000)\n  }\n\n  const handleMouseEnter = () => {\n    if (!copied) {\n      setShowHint(true)\n    }\n  }\n\n  const handleMouseLeave = () => {\n    setShowHint(false)\n  }\n\n  const handleFocus = () => {\n    if (!copied) {\n      setShowHint(true)\n    }\n  }\n\n  const handleBlur = () => {\n    setShowHint(false)\n  }\n\n  if (showCopyIcon) {\n    return (\n      <span className=\"copyable-text-with-icon\">\n        <span className=\"copyable-text-value\">{displayText}</span>\n        <button\n          type=\"button\"\n          className=\"copy-icon-button\"\n          onClick={handleCopy}\n          onMouseEnter={handleMouseEnter}\n          onMouseLeave={handleMouseLeave}\n          onFocus={handleFocus}\n          onBlur={handleBlur}\n          aria-label={t('click_to_copy')}\n        >\n          <CopyIcon className=\"copy-icon\" />\n          {showHint && !copied && (\n            <span className=\"copy-tooltip\">{t('click_to_copy')}</span>\n          )}\n          {copied && <span className=\"copy-tooltip copied\">{t('copied')}</span>}\n        </button>\n      </span>\n    )\n  }\n\n  return (\n    <button\n      type=\"button\"\n      className=\"copy-button\"\n      onClick={handleCopy}\n      onMouseEnter={handleMouseEnter}\n      onMouseLeave={handleMouseLeave}\n      onFocus={handleFocus}\n      onBlur={handleBlur}\n    >\n      {displayText}\n      {showHint && !copied && (\n        <span className=\"copy-tooltip\">{t('click_to_copy')}</span>\n      )}\n      {copied && <span className=\"copy-tooltip copied\">{t('copied')}</span>}\n    </button>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/CopyableText/index.ts",
    "content": "export { CopyableText } from './CopyableText'\n"
  },
  {
    "path": "src/containers/shared/components/CopyableText/styles.scss",
    "content": "@use '../../css/variables' as *;\n\n.copy-button {\n  position: relative;\n  padding: 0;\n  border: none;\n  background: none;\n  color: $white;\n  cursor: pointer;\n  font-family: inherit;\n  font-size: inherit;\n  font-weight: inherit;\n\n  .copy-tooltip {\n    position: absolute;\n    z-index: 1000;\n    top: -32px;\n    left: 50%;\n    padding: 8px 12px;\n    border-radius: 2px;\n    background: rgb(0 0 0 / 90%);\n    color: white;\n    font-size: 13px;\n    font-weight: normal;\n    line-height: 16px;\n    transform: translateX(-50%);\n    white-space: nowrap;\n    @include medium;\n\n    &.copied {\n      color: $white;\n    }\n  }\n}\n\n.copyable-text-with-icon {\n  display: inline-flex;\n  align-items: center;\n\n  .copyable-text-value {\n    color: $white;\n  }\n\n  .copy-icon-button {\n    position: relative;\n    display: none;\n    align-items: center;\n    justify-content: center;\n    padding: 0;\n    border: none;\n    margin-left: 0.25em;\n    background: transparent;\n    cursor: pointer;\n    vertical-align: -10%;\n\n    .copy-icon {\n      width: 1em;\n      height: 11px;\n      color: #f5f5f7;\n      fill: none;\n    }\n\n    .copy-tooltip {\n      position: absolute;\n      z-index: 1000;\n      top: -32px;\n      left: 50%;\n      padding: 8px 12px;\n      border-radius: 2px;\n      background: rgb(0 0 0 / 90%);\n      color: white;\n      font-size: 13px;\n      font-weight: normal;\n      line-height: 16px;\n      transform: translateX(-50%);\n      white-space: nowrap;\n      @include medium;\n\n      &.copied {\n        color: $white;\n      }\n    }\n  }\n\n  &:hover .copy-icon-button,\n  &:focus-within .copy-icon-button {\n    display: inline-flex;\n  }\n}\n"
  },
  {
    "path": "src/containers/shared/components/CopyableText/test/CopyableText.test.tsx",
    "content": "import { render, fireEvent, act } from '@testing-library/react'\nimport { I18nextProvider } from 'react-i18next'\nimport i18n from '../../../../../i18n/testConfigEnglish'\nimport { CopyableText } from '..'\n\n// Mock clipboard API\nconst mockWriteText = jest.fn()\nObject.assign(navigator, {\n  clipboard: {\n    writeText: mockWriteText,\n  },\n})\n\ndescribe('CopyableText', () => {\n  beforeEach(() => {\n    jest.clearAllMocks()\n    jest.useFakeTimers()\n  })\n\n  afterEach(() => {\n    jest.useRealTimers()\n  })\n\n  const renderCopyableText = (props: { text: string; displayText: string }) =>\n    render(\n      <I18nextProvider i18n={i18n}>\n        <CopyableText text={props.text} displayText={props.displayText} />\n      </I18nextProvider>,\n    )\n\n  it('renders displayText correctly', () => {\n    const { container } = renderCopyableText({\n      text: 'secret-value',\n      displayText: 'Click me',\n    })\n\n    expect(container.querySelector('.copy-button')).toHaveTextContent(\n      'Click me',\n    )\n  })\n\n  it('copies text to clipboard when clicked', () => {\n    const { container } = renderCopyableText({\n      text: 'secret-value-to-copy',\n      displayText: 'Copy this',\n    })\n\n    fireEvent.click(container.querySelector('.copy-button')!)\n\n    expect(mockWriteText).toHaveBeenCalledWith('secret-value-to-copy')\n  })\n\n  it('shows \"Click to copy\" tooltip on hover', () => {\n    const { container } = renderCopyableText({\n      text: 'value',\n      displayText: 'Copy',\n    })\n\n    // Initially no tooltip\n    expect(container.querySelector('.copy-tooltip')).not.toBeInTheDocument()\n\n    // Hover to show hint\n    fireEvent.mouseEnter(container.querySelector('.copy-button')!)\n\n    // Tooltip should appear with \"Click to copy\"\n    expect(container.querySelector('.copy-tooltip')).toBeInTheDocument()\n    expect(container.querySelector('.copy-tooltip')).toHaveTextContent(\n      'Click to copy',\n    )\n\n    // Mouse leave hides tooltip\n    fireEvent.mouseLeave(container.querySelector('.copy-button')!)\n    expect(container.querySelector('.copy-tooltip')).not.toBeInTheDocument()\n  })\n\n  it('shows \"Click to copy\" tooltip on focus', () => {\n    const { container } = renderCopyableText({\n      text: 'value',\n      displayText: 'Copy',\n    })\n\n    // Focus to show hint\n    fireEvent.focus(container.querySelector('.copy-button')!)\n\n    expect(container.querySelector('.copy-tooltip')).toBeInTheDocument()\n    expect(container.querySelector('.copy-tooltip')).toHaveTextContent(\n      'Click to copy',\n    )\n\n    // Blur hides tooltip\n    fireEvent.blur(container.querySelector('.copy-button')!)\n    expect(container.querySelector('.copy-tooltip')).not.toBeInTheDocument()\n  })\n\n  it('shows \"Copied\" tooltip after clicking and hides it after 2 seconds', () => {\n    const { container } = renderCopyableText({\n      text: 'value',\n      displayText: 'Copy',\n    })\n\n    // Click to copy\n    fireEvent.click(container.querySelector('.copy-button')!)\n\n    // Tooltip should show \"Copied\" with the copied class for green styling\n    expect(container.querySelector('.copy-tooltip.copied')).toBeInTheDocument()\n    expect(container.querySelector('.copy-tooltip.copied')).toHaveTextContent(\n      'Copied',\n    )\n\n    // Fast-forward 2 seconds\n    act(() => {\n      jest.advanceTimersByTime(2000)\n    })\n\n    // Tooltip should disappear\n    expect(container.querySelector('.copy-tooltip')).not.toBeInTheDocument()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Currency.tsx",
    "content": "import { RouteLink } from '../routing'\nimport { TOKEN_ROUTE, MPT_ROUTE } from '../../App/routes'\nimport { shortenMPTID } from '../utils'\n\n// https://xrpl.org/currency-formats.html#nonstandard-currency-codes\nconst NON_STANDARD_CODE_LENGTH = 40\nconst XRP = 'XRP'\n// https://xrpl.org/docs/concepts/tokens/decentralized-exchange/automated-market-makers#lp-token-currency-codes\nexport const LP_TOKEN_IDENTIFIER = '03'\n\nexport interface Props {\n  issuer?: string\n  currency: string\n  link?: boolean\n  shortenIssuer?: boolean\n  displaySymbol?: boolean\n  isMPT?: boolean\n  hideIssuer?: boolean\n  shortenMPTIssuanceID?: boolean\n}\n\n/*\n  TODO: LP token identifier is the identifier for LP tokens. All issued LP tokens start with 03 so we can use this to\n  make sure we're only converting actual hex values.\n */\nconst Currency = (props: Props) => {\n  const {\n    issuer,\n    currency,\n    link = true,\n    shortenIssuer = false,\n    displaySymbol = true,\n    isMPT = false,\n    hideIssuer = false,\n    shortenMPTIssuanceID = false,\n  } = props\n  let content: string\n\n  if (isMPT) {\n    const display = `${shortenMPTIssuanceID ? shortenMPTID(currency) : currency}`\n    if (link)\n      return (\n        <RouteLink\n          className=\"currency\"\n          data-testid=\"currency\"\n          to={MPT_ROUTE}\n          params={{ id: currency }}\n        >\n          {display}\n        </RouteLink>\n      )\n    content = display\n  } else {\n    let currencyCode =\n      currency?.length === NON_STANDARD_CODE_LENGTH &&\n      currency?.substring(0, 2) !== LP_TOKEN_IDENTIFIER\n        ? hexToString(currency)\n        : currency\n\n    if (\n      currency?.length === NON_STANDARD_CODE_LENGTH &&\n      currencyCode.length === 3\n    ) {\n      currencyCode = `Fake${currencyCode}`\n    }\n\n    let display = `${currencyCode}`\n\n    if (currencyCode === XRP && displaySymbol) {\n      display = `\\uE900 ${display}`\n    }\n\n    if (issuer && !hideIssuer) {\n      display += '.'\n      display += shortenIssuer ? issuer.substring(0, 4) : issuer\n    }\n\n    if (link && issuer)\n      return (\n        <RouteLink\n          className=\"currency\"\n          to={TOKEN_ROUTE}\n          data-testid=\"currency\"\n          params={{ token: `${currency}.${issuer}` }}\n        >\n          {display}\n        </RouteLink>\n      )\n    content = display\n  }\n\n  return (\n    <span className=\"currency\" data-testid=\"currency\">\n      {content}\n    </span>\n  )\n}\n\nexport const hexToString = (hex: string) => {\n  let string = ''\n  for (let i = 0; i < hex.length; i += 2) {\n    const part = hex.substring(i, i + 2)\n    const code = parseInt(part, 16)\n    if (!isNaN(code) && code !== 0) {\n      string += String.fromCharCode(code)\n    }\n  }\n  return string\n}\n\nexport default Currency\n"
  },
  {
    "path": "src/containers/shared/components/CurrencySwitch/CurrencySwitch.tsx",
    "content": "import { FC } from 'react'\nimport './styles.scss'\n\n/** A two-option switch for toggling between currency display modes. */\ninterface CurrencySwitchProps {\n  /** Label shown on the left side of the switch */\n  leftLabel: string\n  /** Label shown on the right side of the switch */\n  rightLabel: string\n  /** The currently selected value (must match leftLabel or rightLabel) */\n  selected: string\n  /** Called with the other value when the switch is toggled */\n  onChange: (value: string) => void\n}\n\nexport const CurrencySwitch: FC<CurrencySwitchProps> = ({\n  leftLabel,\n  rightLabel,\n  selected,\n  onChange,\n}) => {\n  const isRight = selected === rightLabel\n\n  return (\n    <div className=\"currency-switch\">\n      <span className={`currency-label ${!isRight ? 'active' : ''}`}>\n        {leftLabel}\n      </span>\n      {/* eslint-disable-next-line jsx-a11y/label-has-associated-control */}\n      <label className=\"toggle-switch\" aria-label=\"Toggle currency\">\n        <input\n          type=\"checkbox\"\n          checked={isRight}\n          onChange={() => onChange(isRight ? leftLabel : rightLabel)}\n        />\n        <span className=\"toggle-slider\" />\n      </label>\n      <span className={`currency-label ${isRight ? 'active' : ''}`}>\n        {rightLabel}\n      </span>\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/CurrencySwitch/index.ts",
    "content": "export { CurrencySwitch } from './CurrencySwitch'\n"
  },
  {
    "path": "src/containers/shared/components/CurrencySwitch/styles.scss",
    "content": "@use '../../css/variables' as *;\n\n.currency-switch {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n\n  @include for-size(tablet-portrait-up) {\n    gap: 12px;\n  }\n\n  .currency-label {\n    color: $black-40;\n    font-size: 14px;\n    @include medium;\n\n    @include for-size(tablet-portrait-up) {\n      font-size: 16px;\n    }\n\n    &.active {\n      color: $white;\n      @include bold;\n    }\n  }\n\n  .toggle-switch {\n    position: relative;\n    display: inline-block;\n    width: 36px;\n    height: 20px;\n    cursor: pointer;\n\n    @include for-size(desktop-up) {\n      width: 40px;\n      height: 24px;\n    }\n\n    input {\n      position: absolute;\n      width: 0;\n      height: 0;\n      opacity: 0;\n    }\n\n    .toggle-slider {\n      position: absolute;\n      border-radius: 24px;\n      background-color: $blue;\n      inset: 0;\n      transition: background-color 0.2s;\n\n      &::before {\n        position: absolute;\n        top: 3px;\n        left: 3px;\n        width: 14px;\n        height: 14px;\n        border-radius: 50%;\n        background-color: $white;\n        content: '';\n        transition: transform 0.2s;\n\n        @include for-size(desktop-up) {\n          width: 18px;\n          height: 18px;\n        }\n      }\n    }\n\n    input:checked + .toggle-slider::before {\n      transform: translateX(16px);\n    }\n  }\n}\n"
  },
  {
    "path": "src/containers/shared/components/CurrencySwitch/test/CurrencySwitch.test.tsx",
    "content": "import { render, screen } from '@testing-library/react'\nimport userEvent from '@testing-library/user-event'\nimport { CurrencySwitch } from '../CurrencySwitch'\n\ndescribe('CurrencySwitch', () => {\n  it('renders both labels', () => {\n    render(\n      <CurrencySwitch\n        leftLabel=\"USD\"\n        rightLabel=\"XRP\"\n        selected=\"USD\"\n        onChange={jest.fn()}\n      />,\n    )\n    expect(screen.getByText('USD')).toBeInTheDocument()\n    expect(screen.getByText('XRP')).toBeInTheDocument()\n  })\n\n  it('highlights the selected label', () => {\n    const { rerender } = render(\n      <CurrencySwitch\n        leftLabel=\"USD\"\n        rightLabel=\"XRP\"\n        selected=\"USD\"\n        onChange={jest.fn()}\n      />,\n    )\n    expect(screen.getByText('USD')).toHaveClass('active')\n    expect(screen.getByText('XRP')).not.toHaveClass('active')\n\n    rerender(\n      <CurrencySwitch\n        leftLabel=\"USD\"\n        rightLabel=\"XRP\"\n        selected=\"XRP\"\n        onChange={jest.fn()}\n      />,\n    )\n    expect(screen.getByText('USD')).not.toHaveClass('active')\n    expect(screen.getByText('XRP')).toHaveClass('active')\n  })\n\n  it('calls onChange with right label when toggled from left', async () => {\n    const onChange = jest.fn()\n    render(\n      <CurrencySwitch\n        leftLabel=\"USD\"\n        rightLabel=\"XRP\"\n        selected=\"USD\"\n        onChange={onChange}\n      />,\n    )\n\n    await userEvent.click(screen.getByLabelText('Toggle currency'))\n    expect(onChange).toHaveBeenCalledWith('XRP')\n  })\n\n  it('calls onChange with left label when toggled from right', async () => {\n    const onChange = jest.fn()\n    render(\n      <CurrencySwitch\n        leftLabel=\"USD\"\n        rightLabel=\"XRP\"\n        selected=\"XRP\"\n        onChange={onChange}\n      />,\n    )\n\n    await userEvent.click(screen.getByLabelText('Toggle currency'))\n    expect(onChange).toHaveBeenCalledWith('USD')\n  })\n\n  it('checkbox is unchecked when left is selected', () => {\n    render(\n      <CurrencySwitch\n        leftLabel=\"USD\"\n        rightLabel=\"XRP\"\n        selected=\"USD\"\n        onChange={jest.fn()}\n      />,\n    )\n    expect(screen.getByRole('checkbox')).not.toBeChecked()\n  })\n\n  it('checkbox is checked when right is selected', () => {\n    render(\n      <CurrencySwitch\n        leftLabel=\"USD\"\n        rightLabel=\"XRP\"\n        selected=\"XRP\"\n        onChange={jest.fn()}\n      />,\n    )\n    expect(screen.getByRole('checkbox')).toBeChecked()\n  })\n\n  it('works with arbitrary labels', async () => {\n    const onChange = jest.fn()\n    render(\n      <CurrencySwitch\n        leftLabel=\"BTC\"\n        rightLabel=\"ETH\"\n        selected=\"BTC\"\n        onChange={onChange}\n      />,\n    )\n\n    expect(screen.getByText('BTC')).toHaveClass('active')\n    await userEvent.click(screen.getByLabelText('Toggle currency'))\n    expect(onChange).toHaveBeenCalledWith('ETH')\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/DexTradeTable/DexTradeTable.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { useEffect, useRef } from 'react'\nimport { Link } from 'react-router'\nimport { Account } from '../Account'\nimport { Loader } from '../Loader'\nimport { EmptyStateMessage } from '../EmptyStateMessage'\nimport { useTooltip } from '../Tooltip'\nimport HoverIcon from '../../images/hover.svg'\nimport ArrowIcon from '../../images/down_arrow.svg'\nimport './styles.scss'\nimport '../../css/data-tables-mobile.scss'\nimport { Pagination } from '../Pagination'\nimport { ExplorerAmount } from '../../types'\nimport { ResponsiveTimestamp } from '../ResponsiveTimestamp'\nimport { Amount } from '../Amount'\nimport Currency from '../Currency'\nimport { shortenAccount, shortenTxHash } from '../../utils'\nimport { parseAmount } from '../../NumberFormattingUtils'\nimport { useLanguage } from '../../hooks'\n\nexport interface DexTradeFormatted {\n  hash: string\n  ledger: number\n  timestamp: number\n  from: string\n  to: string\n  amount_in: ExplorerAmount\n  amount_out: ExplorerAmount\n  rate: number | null\n  type?: string\n  subtype?: string\n}\n\ninterface DexTradeTableProps {\n  transactions: DexTradeFormatted[]\n  isLoading?: boolean\n  totalTrades: number\n  currentPage: number\n  onPageChange: (page: number) => void\n  pageSize: number\n  hasMore?: boolean\n  hasPrevPage?: boolean\n  sortField?: string\n  setSortField?: (field: string) => void\n  sortOrder?: 'asc' | 'desc'\n  setSortOrder?: (order: 'asc' | 'desc') => void\n  onRefresh?: () => void\n  hideType?: boolean\n}\n\nexport const DexTradeTable = ({\n  transactions,\n  isLoading = false,\n  totalTrades,\n  currentPage,\n  onPageChange,\n  pageSize,\n  hasMore = false,\n  hasPrevPage = false,\n  sortField,\n  setSortField,\n  sortOrder,\n  setSortOrder,\n  onRefresh,\n  hideType = false,\n}: DexTradeTableProps) => {\n  const { t } = useTranslation()\n  const language = useLanguage()\n  const { showTooltip, hideTooltip } = useTooltip()\n  const tableRef = useRef<HTMLTableElement>(null)\n\n  // Scroll to top of table when page changes\n  useEffect(() => {\n    if (!isLoading) {\n      // Use double requestAnimationFrame to ensure scroll happens after DOM updates\n      requestAnimationFrame(() => {\n        requestAnimationFrame(() => {\n          const tableContainer = tableRef.current?.closest('.tokens-table')\n          if (tableContainer) {\n            const rect = tableContainer.getBoundingClientRect()\n            const scrollTop = window.scrollY + rect.top - 200 // Scroll higher to show tabs and table headers\n            window.scrollTo({ top: scrollTop, behavior: 'smooth' })\n          }\n        })\n      })\n    }\n  }, [currentPage, isLoading])\n\n  const renderTextTooltip = (tooltipText: string, yOffset = 60) => (\n    <HoverIcon\n      className=\"hover\"\n      onMouseOver={(e: React.MouseEvent<SVGSVGElement>) => {\n        const rect = e.currentTarget.getBoundingClientRect()\n        showTooltip('text', e, tooltipText, {\n          x: rect.left - 10,\n          y: rect.top - yOffset,\n        })\n      }}\n      onMouseLeave={() => hideTooltip()}\n    />\n  )\n\n  const formatDexType = (type: string | undefined) => {\n    if (!type) {\n      return '--'\n    }\n    if (type === 'orderBook') {\n      return 'Order Book'\n    }\n    if (type === 'amm') {\n      return 'AMM'\n    }\n    return type\n  }\n\n  const handleTimestampSort = () => {\n    if (setSortField && setSortOrder) {\n      if (sortField === 'timestamp') {\n        // Toggle sort order\n        setSortOrder(sortOrder === 'asc' ? 'desc' : 'asc')\n      } else {\n        // Set to timestamp field with desc order by default\n        setSortField('timestamp')\n        setSortOrder('desc')\n      }\n    }\n  }\n\n  const renderTransaction = (tx: DexTradeFormatted, idx: number) => (\n    <tr key={`${tx.hash}-${tx.ledger}-${idx}`}>\n      <td className=\"tx-hash\">\n        <Link to={`/transactions/${tx.hash}`}>{shortenTxHash(tx.hash)}</Link>\n      </td>\n\n      <td className=\"tx-ledger\">\n        <Link to={`/ledgers/${tx.ledger}`}>{tx.ledger}</Link>\n      </td>\n      <td className=\"tx-timestamp\">\n        <ResponsiveTimestamp timestamp={tx.timestamp} lang={language} />\n      </td>\n      {!hideType && <td className=\"tx-type\">{formatDexType(tx.type)}</td>}\n      <td className=\"tx-from\">\n        <span className=\"text-truncate\">\n          <Account displayText={shortenAccount(tx.from)} account={tx.from} />\n        </span>\n      </td>\n      <td className=\"tx-to\">\n        <span className=\"text-truncate\">\n          <Account displayText={shortenAccount(tx.to)} account={tx.to} />\n        </span>\n      </td>\n      <td className=\"tx-amount-in\">\n        <Amount\n          value={tx.amount_in}\n          displayIssuer\n          shortenIssuer\n          useParseAmount\n        />\n      </td>\n      <td className=\"tx-amount-out\">\n        <Amount\n          value={tx.amount_out}\n          displayIssuer\n          shortenIssuer\n          useParseAmount\n        />\n      </td>\n\n      <td className=\"tx-amount-rate\">\n        1{' '}\n        <Currency\n          currency={String(tx.amount_in.currency)}\n          link={false}\n          displaySymbol={false}\n        />{' '}\n        = {tx.rate !== null ? parseAmount(tx.rate) : '--'}{' '}\n        <Currency\n          currency={String(tx.amount_out.currency)}\n          link={false}\n          displaySymbol={false}\n        />\n      </td>\n    </tr>\n  )\n\n  return (\n    <div className=\"tokens-table\">\n      {isLoading && <Loader />}\n\n      {!isLoading && transactions && transactions.length > 0 && (\n        <>\n          <div className=\"notice-with-controls\">\n            <div className=\"data-notice\">{t('data_available_from_notice')}</div>\n            <button\n              type=\"button\"\n              className=\"refresh-button\"\n              onClick={onRefresh}\n              title={t('refresh_data')}\n            >\n              ↻\n            </button>\n          </div>\n          <div className=\"table-wrap\">\n            <table\n              className=\"basic\"\n              key={`dex-table-page-${currentPage}`}\n              ref={tableRef}\n            >\n              <thead>\n                <tr>\n                  <th className=\"tx-hash\">{t('tx_hash')}</th>\n                  <th className=\"tx-ledger\">{t('ledger')}</th>\n                  <th\n                    className=\"tx-timestamp\"\n                    onClick={handleTimestampSort}\n                    style={{ cursor: 'pointer' }}\n                  >\n                    <span className=\"sort-header\">\n                      {t('timestamp')}\n                      {sortField === 'timestamp' && (\n                        <ArrowIcon\n                          className={`arrow ${sortOrder === 'asc' ? 'asc' : 'desc'}`}\n                        />\n                      )}\n                    </span>\n                  </th>\n                  {!hideType && (\n                    <th className=\"tx-type\">{t('token_page.dex_type')}</th>\n                  )}\n                  <th className=\"tx-from\">{t('from')}</th>\n                  <th className=\"tx-to\">{t('to')}</th>\n                  <th className=\"tx-amount-in\">\n                    <span className=\"sort-header\">\n                      {t('amount_in')}\n                      {renderTextTooltip(t('token_page.dex_amount_in_tooltip'))}\n                    </span>\n                  </th>\n                  <th className=\"tx-amount-out\">\n                    <span className=\"sort-header\">\n                      {t('amount_out')}\n                      {renderTextTooltip(\n                        t('token_page.dex_amount_out_tooltip'),\n                      )}\n                    </span>\n                  </th>\n                  <th className=\"tx-amount-rate\">\n                    <span className=\"sort-header\">\n                      {t('rate')}\n                      {renderTextTooltip(t('token_page.dex_rate_tooltip'))}\n                    </span>\n                  </th>\n                </tr>\n              </thead>\n              <tbody>\n                {transactions.map((tx, idx) => renderTransaction(tx, idx))}\n              </tbody>\n            </table>\n          </div>\n\n          {(hasMore || hasPrevPage) && (\n            <Pagination\n              currentPage={currentPage}\n              onPageChange={onPageChange}\n              totalItems={totalTrades}\n              pageSize={pageSize}\n              scrollToTop={null}\n              showLastPage={!hasMore}\n            />\n          )}\n        </>\n      )}\n\n      {!isLoading && (!transactions || transactions.length === 0) && (\n        <EmptyStateMessage message={t('token_page.dex_no_trades')} />\n      )}\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/DexTradeTable/formatDexTrade.ts",
    "content": "import { DexTradeFormatted } from './DexTradeTable'\n\n/** Raw DEX trade as returned by LOS /dex-trades API */\nexport interface LOSDexTradeRaw {\n  tx_hash: string\n  ledger_index: number\n  timestamp: number\n  from: string\n  to: string\n  type?: string\n  subtype?: string\n  amount_in: { currency: string; issuer?: string; value: string }\n  amount_out: { currency: string; issuer?: string; value: string }\n}\n\n/** Transform a raw LOS dex trade into the format consumed by DexTradeTable. */\nexport const formatDexTrade = (trade: LOSDexTradeRaw): DexTradeFormatted => ({\n  hash: trade.tx_hash,\n  ledger: trade.ledger_index,\n  timestamp: trade.timestamp,\n  from: trade.from,\n  to: trade.to,\n  type: trade.type,\n  subtype: trade.subtype,\n  amount_in: {\n    currency: trade.amount_in.currency,\n    issuer: trade.amount_in.issuer,\n    amount: Number(trade.amount_in.value),\n  },\n  amount_out: {\n    currency: trade.amount_out.currency,\n    issuer: trade.amount_out.issuer,\n    amount: Number(trade.amount_out.value),\n  },\n  rate:\n    trade.amount_in && Number(trade.amount_in.value) !== 0\n      ? Number(trade.amount_out.value) / Number(trade.amount_in.value)\n      : null,\n})\n"
  },
  {
    "path": "src/containers/shared/components/DexTradeTable/styles.scss",
    "content": "@use '../../css/variables' as *;\n@use '../../css/table';\n@use '../../css/data-tables-notice';\n\n// =============================================================================\n// DEX TRADE TABLE - Component-specific styles\n// =============================================================================\n\n.text-truncate {\n  @extend %truncate;\n}\n\n// Add spacing between action and timestamp columns\n.tx-action {\n  padding-right: 16px;\n\n  @include for-size(phone-only) {\n    padding-right: 12px;\n  }\n}\n\n// Scoped styles for dex trade table to prevent conflicts with other tables\n.tokens-table {\n  // Custom tooltip styling for dex trade table\n  .tooltip.tooltip-text {\n    z-index: 9999;\n    max-width: calc(100vw - 32px);\n    margin: 0 16px;\n  }\n\n  table.basic {\n    // Fix column widths for dex trade table to prevent wrapping and ensure consistent spacing\n    .tx-hash {\n      width: 100px;\n      min-width: 100px;\n    }\n\n    th:nth-child(2),\n    .tx-ledger {\n      width: 80px;\n      min-width: 80px;\n      padding: 15px 5px;\n\n      @include for-size(desktop-up) {\n        padding: 15px 5px !important;\n      }\n    }\n\n    .tx-timestamp {\n      width: 200px;\n      min-width: 200px;\n      padding: 15px 5px;\n\n      @include for-size(tablet-portrait-up) {\n        padding: 15px 5px 15px 0px;\n      }\n    }\n\n    .tx-type {\n      width: 100px;\n      min-width: 100px;\n    }\n\n    .tx-from,\n    .tx-to {\n      width: 140px;\n      min-width: 140px;\n    }\n\n    .tx-amount-in,\n    .tx-amount-out {\n      width: 140px;\n      min-width: 140px;\n    }\n\n    .tx-amount-rate {\n      width: 165px;\n      min-width: 165px;\n    }\n  }\n}\n"
  },
  {
    "path": "src/containers/shared/components/DexTradeTable/test/DexTradeTable.test.tsx",
    "content": "import { render, screen, fireEvent } from '@testing-library/react'\nimport { I18nextProvider } from 'react-i18next'\nimport { BrowserRouter as Router } from 'react-router'\nimport i18n from '../../../../../i18n/testConfigEnglish'\nimport { DexTradeTable, DexTradeFormatted } from '../DexTradeTable'\n\n// Amount must be mocked — it uses useQuery(), SocketContext, and useAnalytics()\njest.mock('../../Amount', () => ({\n  Amount: ({ value }: any) => <div>{value.amount}</div>,\n}))\n\nconst TestWrapper = ({ children }: { children: React.ReactNode }) => (\n  <I18nextProvider i18n={i18n}>\n    <Router>{children}</Router>\n  </I18nextProvider>\n)\n\nconst mockDexTrades: DexTradeFormatted[] = [\n  {\n    hash: 'E3FE6EA3D48F0C2B639448020EA4F03D4F4F8FFDB243A852A0F59177921B4879',\n    ledger: 12345,\n    timestamp: 1609459200,\n    from: 'rN7n7otQDd6FczFgLdSqtcsAUxDkw6fzRH',\n    to: 'rLNaPoKeeBjZe2qs6x52yVPZpZ8td4dc6w',\n    amount_in: {\n      currency: 'USD',\n      issuer: 'rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B',\n      amount: '100',\n    },\n    amount_out: {\n      currency: 'XRP',\n      issuer: '',\n      amount: '500',\n    },\n    rate: 5,\n    type: 'orderBook',\n  },\n  {\n    hash: 'F4GF7FB4E49F1D3C740559131FB5G04E4G5G9GGEC354B963B1G60288C32C5980',\n    ledger: 12346,\n    timestamp: 1609545600,\n    from: 'rLNaPoKeeBjZe2qs6x52yVPZpZ8td4dc6w',\n    to: 'rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B',\n    amount_in: {\n      currency: 'XRP',\n      issuer: '',\n      amount: '1000',\n    },\n    amount_out: {\n      currency: 'EUR',\n      issuer: 'rN7n7otQDd6FczFgLdSqtcsAUxDkw6fzRH',\n      amount: '200',\n    },\n    rate: 0.2,\n    type: 'amm',\n  },\n]\n\ndescribe('DexTradeTable Component', () => {\n  const mockOnPageChange = jest.fn()\n  const mockOnRefresh = jest.fn()\n\n  beforeEach(() => {\n    jest.clearAllMocks()\n  })\n\n  it('renders without crashing', () => {\n    render(\n      <TestWrapper>\n        <DexTradeTable\n          transactions={mockDexTrades}\n          totalTrades={2}\n          currentPage={1}\n          onPageChange={mockOnPageChange}\n          pageSize={10}\n        />\n      </TestWrapper>,\n    )\n    expect(screen.getByText('E3FE6E...1B4879')).toBeInTheDocument()\n  })\n\n  it('displays all transactions in the table', () => {\n    render(\n      <TestWrapper>\n        <DexTradeTable\n          transactions={mockDexTrades}\n          totalTrades={2}\n          currentPage={1}\n          onPageChange={mockOnPageChange}\n          pageSize={10}\n        />\n      </TestWrapper>,\n    )\n    const accounts = screen.getAllByTestId('account')\n    expect(accounts.length).toBeGreaterThanOrEqual(2)\n    expect(accounts[0]).toHaveTextContent('rN7n7ot...6fzRH')\n    expect(accounts[1]).toHaveTextContent('rLNaPoK...4dc6w')\n  })\n\n  it('shows loading state when isLoading is true', () => {\n    render(\n      <TestWrapper>\n        <DexTradeTable\n          transactions={[]}\n          isLoading\n          totalTrades={0}\n          currentPage={1}\n          onPageChange={mockOnPageChange}\n          pageSize={10}\n        />\n      </TestWrapper>,\n    )\n    expect(screen.getByRole('img', { name: /loading/i })).toBeInTheDocument()\n  })\n\n  it('shows no trades message when empty and not loading', () => {\n    render(\n      <TestWrapper>\n        <DexTradeTable\n          transactions={[]}\n          isLoading={false}\n          totalTrades={0}\n          currentPage={1}\n          onPageChange={mockOnPageChange}\n          pageSize={10}\n        />\n      </TestWrapper>,\n    )\n    expect(screen.getByText(/no dex trades found/i)).toBeInTheDocument()\n    expect(screen.getByText('no_info.svg')).toBeInTheDocument()\n  })\n\n  it('calls onPageChange when pagination is triggered', () => {\n    render(\n      <TestWrapper>\n        <DexTradeTable\n          transactions={mockDexTrades}\n          totalTrades={20}\n          currentPage={1}\n          onPageChange={mockOnPageChange}\n          pageSize={10}\n          hasMore\n        />\n      </TestWrapper>,\n    )\n    const page2Button = screen.getByRole('button', { name: '2' })\n    fireEvent.click(page2Button)\n    expect(mockOnPageChange).toHaveBeenCalledWith(2)\n  })\n\n  it('displays correct DEX type for orderBook', () => {\n    render(\n      <TestWrapper>\n        <DexTradeTable\n          transactions={mockDexTrades}\n          totalTrades={2}\n          currentPage={1}\n          onPageChange={mockOnPageChange}\n          pageSize={10}\n        />\n      </TestWrapper>,\n    )\n    expect(screen.getByText('Order Book')).toBeInTheDocument()\n  })\n\n  it('displays correct DEX type for AMM', () => {\n    render(\n      <TestWrapper>\n        <DexTradeTable\n          transactions={mockDexTrades}\n          totalTrades={2}\n          currentPage={1}\n          onPageChange={mockOnPageChange}\n          pageSize={10}\n        />\n      </TestWrapper>,\n    )\n    expect(screen.getByText('AMM')).toBeInTheDocument()\n  })\n\n  it('renders table headers correctly', () => {\n    const { container } = render(\n      <TestWrapper>\n        <DexTradeTable\n          transactions={mockDexTrades}\n          totalTrades={2}\n          currentPage={1}\n          onPageChange={mockOnPageChange}\n          pageSize={10}\n        />\n      </TestWrapper>,\n    )\n    const headers = container.querySelectorAll('thead th')\n    expect(headers.length).toBe(9)\n  })\n\n  it('displays refresh button when transactions exist', () => {\n    render(\n      <TestWrapper>\n        <DexTradeTable\n          transactions={mockDexTrades}\n          totalTrades={2}\n          currentPage={1}\n          onPageChange={mockOnPageChange}\n          pageSize={10}\n          onRefresh={mockOnRefresh}\n        />\n      </TestWrapper>,\n    )\n    const refreshButton = screen.getByTitle(/refresh/i)\n    expect(refreshButton).toBeInTheDocument()\n  })\n\n  it('calls onRefresh when refresh button is clicked', () => {\n    render(\n      <TestWrapper>\n        <DexTradeTable\n          transactions={mockDexTrades}\n          totalTrades={2}\n          currentPage={1}\n          onPageChange={mockOnPageChange}\n          pageSize={10}\n          onRefresh={mockOnRefresh}\n        />\n      </TestWrapper>,\n    )\n    const refreshButton = screen.getByTitle(/refresh/i)\n    fireEvent.click(refreshButton)\n    expect(mockOnRefresh).toHaveBeenCalled()\n  })\n\n  it('handles transactions with null rate', () => {\n    const tradesWithNullRate: DexTradeFormatted[] = [\n      {\n        ...mockDexTrades[0],\n        rate: null,\n      },\n    ]\n    const { container } = render(\n      <TestWrapper>\n        <DexTradeTable\n          transactions={tradesWithNullRate}\n          totalTrades={1}\n          currentPage={1}\n          onPageChange={mockOnPageChange}\n          pageSize={10}\n        />\n      </TestWrapper>,\n    )\n    const rateCell = container.querySelector('tbody tr .tx-amount-rate')\n    expect(rateCell?.textContent).toContain('--')\n  })\n\n  it('handles transactions without type', () => {\n    const tradesWithoutType: DexTradeFormatted[] = [\n      {\n        ...mockDexTrades[0],\n        type: undefined,\n      },\n    ]\n    const { container } = render(\n      <TestWrapper>\n        <DexTradeTable\n          transactions={tradesWithoutType}\n          totalTrades={1}\n          currentPage={1}\n          onPageChange={mockOnPageChange}\n          pageSize={10}\n        />\n      </TestWrapper>,\n    )\n    const typeCell = container.querySelector('tbody tr .tx-type')\n    expect(typeCell?.textContent).toBe('--')\n  })\n\n  it('displays pagination when hasMore is true', () => {\n    render(\n      <TestWrapper>\n        <DexTradeTable\n          transactions={mockDexTrades}\n          totalTrades={20}\n          currentPage={1}\n          onPageChange={mockOnPageChange}\n          pageSize={10}\n          hasMore\n        />\n      </TestWrapper>,\n    )\n    expect(\n      screen.getByRole('navigation', { name: /pagination/i }),\n    ).toBeInTheDocument()\n  })\n\n  it('displays pagination when hasPrevPage is true', () => {\n    render(\n      <TestWrapper>\n        <DexTradeTable\n          transactions={mockDexTrades}\n          totalTrades={20}\n          currentPage={2}\n          onPageChange={mockOnPageChange}\n          pageSize={10}\n          hasPrevPage\n        />\n      </TestWrapper>,\n    )\n    expect(\n      screen.getByRole('navigation', { name: /pagination/i }),\n    ).toBeInTheDocument()\n  })\n\n  it('renders correct number of rows', () => {\n    const { container } = render(\n      <TestWrapper>\n        <DexTradeTable\n          transactions={mockDexTrades}\n          totalTrades={2}\n          currentPage={1}\n          onPageChange={mockOnPageChange}\n          pageSize={10}\n        />\n      </TestWrapper>,\n    )\n    const rows = container.querySelectorAll('tbody tr')\n    expect(rows.length).toBe(mockDexTrades.length)\n  })\n\n  it('hides type column when hideType is true', () => {\n    const { container } = render(\n      <TestWrapper>\n        <DexTradeTable\n          transactions={mockDexTrades}\n          totalTrades={2}\n          currentPage={1}\n          onPageChange={mockOnPageChange}\n          pageSize={10}\n          hideType\n        />\n      </TestWrapper>,\n    )\n    const headers = container.querySelectorAll('thead th')\n    expect(headers.length).toBe(8)\n    expect(screen.queryByText('Order Book')).not.toBeInTheDocument()\n    expect(screen.queryByText('AMM')).not.toBeInTheDocument()\n  })\n\n  it('handles single transaction', () => {\n    const singleTrade: DexTradeFormatted[] = [mockDexTrades[0]]\n    render(\n      <TestWrapper>\n        <DexTradeTable\n          transactions={singleTrade}\n          totalTrades={1}\n          currentPage={1}\n          onPageChange={mockOnPageChange}\n          pageSize={10}\n        />\n      </TestWrapper>,\n    )\n    const accounts = screen.getAllByTestId('account')\n    expect(accounts[0]).toHaveTextContent('rN7n7ot...6fzRH')\n    expect(accounts[1]).toHaveTextContent('rLNaPoK...4dc6w')\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/DomainLink.tsx",
    "content": "import classnames from 'classnames'\nimport { decodeHex } from '../transactionUtils'\n\nexport interface Props {\n  className?: string\n  decode?: boolean\n  domain: string\n  displayDomain?: string\n  keepProtocol?: boolean\n}\n\n// Matches a protocol (e.g. 'http://' or 'https://') at the start of a string.\nconst PROTOCOL_REGEX = /^([a-z][a-z0-9+\\-.]*):\\/\\//\nconst PROTOCOL_REMOVAL_REGEX = /^(https?:\\/\\/)?(.*?)(\\/)?$/\n\nconst DomainLink = (props: Props) => {\n  const {\n    className,\n    decode = false,\n    domain,\n    displayDomain = '',\n    keepProtocol = true,\n  } = props\n\n  // If decode is true, decode the domain\n  const decodedDomain = decode ? decodeHex(domain) : domain\n\n  // Use the test method to check for the protocol\n  const domainHasProtocol = PROTOCOL_REGEX.test(decodedDomain)\n\n  // If decoded domain does not have a protocol, add one ; otherwise, don't\n  let href = domainHasProtocol ? decodedDomain : `https://${decodedDomain}`\n\n  if (href.startsWith('ipfs://')) {\n    href = href.replace('ipfs://', 'https://ipfs.io/ipfs/')\n  }\n\n  const domainText = keepProtocol\n    ? decodedDomain\n    : decodedDomain.replace(PROTOCOL_REMOVAL_REGEX, '$2')\n\n  return (\n    <a\n      className={classnames('domain', className)}\n      rel=\"noopener noreferrer\"\n      target=\"_blank\"\n      href={href}\n      onClick={(event) => event.stopPropagation()}\n    >\n      {displayDomain || domainText}\n    </a>\n  )\n}\n\nexport default DomainLink\n"
  },
  {
    "path": "src/containers/shared/components/Dropdown/Dropdown.tsx",
    "content": "import classnames from 'classnames'\nimport { ReactNode, useCallback, useEffect, useRef, useState } from 'react'\nimport ArrowIcon from '../../images/down_arrow.svg'\nimport './dropdown.scss'\n\nexport interface DropdownProps {\n  tagName?: `div` | `li`\n  title: ReactNode | string\n  children: ReactNode | undefined\n  className?: string\n}\n\n// TODO: Add useId after upgrading to react@18 to populate id on .dropdown-menu and aria-controlled by on .dropdown-toggle\n/**\n * A simple dropdown that has auto closing\n *\n * @param title The value in the toggle\n * @param children The contents of the menu. DropdownItem is the preferred child component\n * @param className\n * @constructor\n *\n * @example\n * <Dropdown title=\"Choose Something\">\n *   <DropdownItem handler={() => alert('hello')}>Option 1</DropdownItem>\n *   <DropdownItem>Option 2</DropdownItem>\n * </Dropdown>\n */\nexport const Dropdown = ({\n  title,\n  children,\n  className,\n  tagName = `div`,\n}: DropdownProps) => {\n  const [expanded, setExpanded] = useState(false)\n  const dropdownRef = useRef<any>(null)\n\n  const globalClickListener = useCallback((nativeEvent) => {\n    // ignore click event happened inside the dropdown menu\n    if (dropdownRef.current && dropdownRef.current.contains(nativeEvent.target))\n      return\n    // else hide dropdown menu\n    setExpanded(false)\n    document.removeEventListener('click', globalClickListener)\n  }, [])\n\n  useEffect(\n    (): (() => void) => () =>\n      // remove listener when cleaning up component\n      document.removeEventListener('click', globalClickListener),\n    [globalClickListener],\n  )\n\n  const toggleExpand = () => {\n    // don't de-expand if clicking in the textbox\n    setExpanded((prevExpanded) => !prevExpanded)\n    document.addEventListener('click', globalClickListener)\n  }\n\n  const TagName = tagName\n\n  return (\n    <TagName\n      ref={dropdownRef}\n      className={classnames(\n        'dropdown',\n        expanded && 'dropdown-expanded',\n        className,\n      )}\n    >\n      <button\n        className=\"btn dropdown-toggle\"\n        type=\"button\"\n        onClick={toggleExpand}\n        onKeyUp={toggleExpand}\n        tabIndex={0}\n        aria-haspopup=\"true\"\n        aria-expanded={expanded}\n      >\n        <div className=\"dropdown-toggle-text\">{title}</div>{' '}\n        <ArrowIcon className=\"arrow\" />\n      </button>\n      <div\n        className=\"dropdown-menu\"\n        role=\"menu\"\n        tabIndex={0}\n        aria-hidden={!expanded}\n      >\n        {children}\n      </div>\n    </TagName>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Dropdown/DropdownItem.tsx",
    "content": "import { PropsWithChildren } from 'react'\nimport classnames from 'classnames'\n\nexport type DropdownItemProps = PropsWithChildren<{\n  className?: string\n  handler?: (event) => void\n  href?: string\n}>\n\nexport const DropdownItem = ({\n  children,\n  className,\n  handler,\n  href,\n}: DropdownItemProps) => {\n  const Tag = handler || href ? `a` : `div`\n\n  return (\n    <Tag\n      className={classnames(`dropdown-item`, className)}\n      role=\"menuitem\"\n      onClick={handler}\n      onKeyUp={handler}\n      tabIndex={0}\n      href={href}\n    >\n      {children}\n    </Tag>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Dropdown/dropdown.scss",
    "content": "@use '../../css/variables' as *;\n\n.dropdown {\n  position: relative;\n  display: inline-block;\n  font-size: 14px;\n  white-space: nowrap;\n}\n\n.dropdown-toggle {\n  display: flex;\n  align-items: center;\n  font-weight: 700;\n  gap: 0 8px;\n\n  .arrow {\n    height: 1em;\n    margin-left: auto;\n  }\n}\n\n.dropdown-menu {\n  position: absolute;\n  z-index: 100;\n  display: none;\n  overflow: hidden;\n  min-width: max(100%, 160px);\n  padding: 8px;\n  border: 1px solid $black-80;\n  border-radius: $border-radius;\n  margin-top: 5px;\n  background: rgba($black, 0.96);\n}\n\n.dropdown-item {\n  padding: 12px 8px;\n  border-radius: calc($border-radius / 2);\n  font-weight: normal;\n\n  @at-root {\n    a#{&} {\n      display: flex;\n      align-items: center;\n      color: $white;\n      gap: 0 12px;\n\n      &::after {\n        display: none;\n      }\n\n      &:hover {\n        background: $black-80;\n        cursor: pointer;\n      }\n    }\n  }\n\n  input {\n    width: 100%;\n    padding: 8px;\n    border: none;\n    background: $black-80;\n    color: $white;\n    font-size: inherit;\n\n    &::placeholder {\n      color: $black-40;\n    }\n  }\n\n  .btn-remove {\n    padding: 8px;\n    margin-left: auto;\n    background: url('../../images/close.png') center no-repeat;\n    background-size: 8px;\n  }\n}\n\n.dropdown-expanded {\n  .arrow {\n    transform: rotate(180deg);\n  }\n\n  .dropdown-menu {\n    display: block;\n  }\n}\n\n.dropdown-right {\n  .dropdown-menu {\n    right: 0;\n  }\n}\n"
  },
  {
    "path": "src/containers/shared/components/Dropdown/index.ts",
    "content": "export * from './Dropdown'\nexport * from './DropdownItem'\n"
  },
  {
    "path": "src/containers/shared/components/Dropdown/test/Dropdown.test.tsx",
    "content": "import { render, screen } from '@testing-library/react'\nimport userEvent from '@testing-library/user-event'\nimport { Dropdown } from '../Dropdown'\n\ndescribe('Dropdown', () => {\n  describe('prop: title', () => {\n    it('renders when it is jsx', () => {\n      const title = <span className=\"title-component\">Woo</span>\n      render(<Dropdown title={title}>Menu Contents</Dropdown>)\n      expect(screen.getByText('Woo')).toBeInTheDocument()\n      expect(screen.getByText('Woo')).toHaveClass('title-component')\n    })\n\n    it('renders when it is a string', () => {\n      const title = 'Woo'\n      render(<Dropdown title={title}>Menu Contents</Dropdown>)\n      expect(screen.getByRole('button')).toHaveTextContent(title)\n    })\n  })\n\n  describe(`prop: className`, () => {\n    it('renders with custom className', () => {\n      const { container } = render(\n        <Dropdown title=\"Woo\" className=\"dropdown-custom\">\n          Menu Contents\n        </Dropdown>,\n      )\n      expect(container.querySelector('.dropdown')).toHaveClass(\n        'dropdown-custom',\n      )\n    })\n  })\n\n  it('shows menu when clicking toggle', async () => {\n    const { container } = render(<Dropdown title=\"Woo\">Menu Contents</Dropdown>)\n    const dropdown = container.querySelector('.dropdown')\n    expect(dropdown).not.toHaveClass('dropdown-expanded')\n    await userEvent.click(screen.getByRole('button'))\n    expect(dropdown).toHaveClass('dropdown-expanded')\n    await userEvent.click(screen.getByRole('button'))\n    expect(dropdown).not.toHaveClass('dropdown-expanded')\n  })\n\n  it('hides menu when clicking toggle outside the component', async () => {\n    const { container } = render(\n      <div className=\"container\">\n        <Dropdown title=\"Woo\">\n          <div className=\"child\">Menu Contents</div>\n        </Dropdown>\n        <button type=\"button\" className=\"outside\">\n          Outside\n        </button>\n      </div>,\n    )\n    const dropdown = container.querySelector('.dropdown')\n    expect(dropdown).not.toHaveClass('dropdown-expanded')\n    await userEvent.click(screen.getByRole('button', { name: /woo/i }))\n    expect(dropdown).toHaveClass('dropdown-expanded')\n    await userEvent.click(screen.getByText('Menu Contents'))\n    expect(dropdown).toHaveClass('dropdown-expanded')\n    await userEvent.click(screen.getByRole('button', { name: /outside/i }))\n    expect(dropdown).not.toHaveClass('dropdown-expanded')\n  })\n\n  it('adds aria roles', async () => {\n    const { container } = render(<Dropdown title=\"Woo\">Menu Contents</Dropdown>)\n    const toggle = screen.getByRole('button')\n    const menu = container.querySelector('.dropdown-menu')\n    expect(toggle).toHaveAttribute('aria-haspopup', 'true')\n    expect(toggle).toHaveAttribute('tabIndex', '0')\n    expect(menu).toHaveAttribute('tabIndex', '0')\n    await userEvent.click(toggle)\n    expect(toggle).toHaveAttribute('aria-expanded', 'true')\n    expect(menu).toHaveAttribute('aria-hidden', 'false')\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Dropdown/test/DropdownItem.test.tsx",
    "content": "import { render, screen } from '@testing-library/react'\nimport userEvent from '@testing-library/user-event'\nimport { DropdownItem } from '../DropdownItem'\n\ndescribe('DropdownItem', () => {\n  describe(`prop: className`, () => {\n    it('renders with custom className', () => {\n      render(<DropdownItem className=\"custom\">Hello</DropdownItem>)\n      expect(screen.getByRole('menuitem')).toHaveClass(\n        'dropdown-item',\n        'custom',\n      )\n    })\n  })\n\n  describe('prop: handler', () => {\n    const handler = jest.fn()\n\n    beforeEach(() => {\n      handler.mockClear()\n    })\n\n    it('renders as an anchor tag', () => {\n      render(<DropdownItem handler={handler}>Hello</DropdownItem>)\n      const element = screen.getByRole('menuitem')\n      expect(element.tagName.toLowerCase()).toBe('a')\n    })\n\n    it('executes handler on click', async () => {\n      render(<DropdownItem handler={handler}>Hello</DropdownItem>)\n      await userEvent.click(screen.getByRole('menuitem'))\n      expect(handler).toHaveBeenCalled()\n    })\n\n    it('executes handler on keyup', async () => {\n      render(<DropdownItem handler={handler}>Hello</DropdownItem>)\n      await userEvent.click(screen.getByRole('menuitem'))\n      expect(handler).toHaveBeenCalled()\n    })\n  })\n\n  describe('prop: href', () => {\n    it('renders as an anchor tag', () => {\n      render(<DropdownItem href=\"http://google.com\">Hello</DropdownItem>)\n      const element = screen.getByRole('menuitem')\n      expect(element.tagName.toLowerCase()).toBe('a')\n    })\n\n    it('renders href attribute on anchor', () => {\n      render(<DropdownItem href=\"http://google.com\">Hello</DropdownItem>)\n      expect(screen.getByRole('menuitem')).toHaveAttribute('href')\n    })\n  })\n\n  it('renders as div without handler or href', () => {\n    render(<DropdownItem>Hello</DropdownItem>)\n    const element = screen.getByRole('menuitem')\n    expect(element.tagName.toLowerCase()).toBe('div')\n  })\n\n  it('adds aria roles', () => {\n    render(<DropdownItem>Hello</DropdownItem>)\n    expect(screen.getByRole('menuitem')).toBeInTheDocument()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/DualAxisAreaChart/DualAxisAreaChart.tsx",
    "content": "import { FC } from 'react'\nimport {\n  AreaChart,\n  Area,\n  XAxis,\n  YAxis,\n  Tooltip,\n  TooltipProps,\n  ResponsiveContainer,\n  CartesianGrid,\n} from 'recharts'\n\n/** Configuration for a single Y-axis and its associated area series. */\nexport interface AxisConfig {\n  dataKey: string\n  label: string\n  color: string\n  formatter: (value: number) => string\n  show: boolean\n}\n\n/**\n * A recharts AreaChart with two Y-axes (left + right), gradient fills,\n * and configurable axis formatting.\n */\nexport interface DualAxisAreaChartProps {\n  data: any[]\n  xAxisKey: string\n  xAxisFormatter?: (value: any) => string\n  leftAxis: AxisConfig\n  rightAxis: AxisConfig\n  height?: number\n  margin?: { top: number; right: number; left: number; bottom: number }\n  tooltipContent?: FC<TooltipProps<any, any>>\n  gridStroke?: string\n  axisStroke?: string\n  tickColor?: string\n  tickFontSize?: number\n  showGrid?: boolean\n  gradientOpacity?: number\n}\n\nexport const DualAxisAreaChart: FC<DualAxisAreaChartProps> = ({\n  data,\n  xAxisKey,\n  xAxisFormatter,\n  leftAxis,\n  rightAxis,\n  height = 340,\n  margin = { top: 10, right: 50, left: 50, bottom: 0 },\n  tooltipContent,\n  gridStroke = '#333',\n  axisStroke = '#555',\n  tickColor = '#888',\n  tickFontSize = 13,\n  showGrid = true,\n  gradientOpacity = 0.8,\n}) => {\n  const tickInterval = data.length > 6 ? Math.floor(data.length / 5) : 0\n\n  const leftGradientId = `gradient-${leftAxis.dataKey}`\n  const rightGradientId = `gradient-${rightAxis.dataKey}`\n\n  return (\n    <ResponsiveContainer width=\"100%\" height={height}>\n      <AreaChart data={data} margin={margin}>\n        <defs>\n          <linearGradient id={leftGradientId} x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n            <stop\n              offset=\"0%\"\n              stopColor={leftAxis.color}\n              stopOpacity={gradientOpacity}\n            />\n            <stop\n              offset=\"100%\"\n              stopColor={leftAxis.color}\n              stopOpacity={gradientOpacity}\n            />\n          </linearGradient>\n          <linearGradient id={rightGradientId} x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n            <stop\n              offset=\"0%\"\n              stopColor={rightAxis.color}\n              stopOpacity={gradientOpacity}\n            />\n            <stop\n              offset=\"100%\"\n              stopColor={rightAxis.color}\n              stopOpacity={gradientOpacity}\n            />\n          </linearGradient>\n        </defs>\n\n        {showGrid && (\n          <CartesianGrid\n            strokeDasharray=\"0\"\n            stroke={gridStroke}\n            vertical={false}\n          />\n        )}\n\n        <XAxis\n          dataKey={xAxisKey}\n          stroke={axisStroke}\n          tick={{ fill: tickColor, fontSize: tickFontSize }}\n          interval={tickInterval}\n          tickFormatter={xAxisFormatter}\n          tickLine={false}\n        />\n\n        <YAxis\n          yAxisId=\"left\"\n          stroke={axisStroke}\n          tick={{ fill: tickColor, fontSize: tickFontSize }}\n          tickFormatter={leftAxis.formatter}\n          tickLine={false}\n          label={{\n            value: leftAxis.label,\n            angle: -90,\n            position: 'insideLeft',\n            style: {\n              fill: '#fff',\n              fontSize: tickFontSize,\n              textAnchor: 'middle',\n            },\n            dx: -25,\n          }}\n        />\n\n        <YAxis\n          yAxisId=\"right\"\n          orientation=\"right\"\n          stroke={axisStroke}\n          tick={{ fill: tickColor, fontSize: tickFontSize }}\n          tickFormatter={rightAxis.formatter}\n          tickLine={false}\n          label={{\n            value: rightAxis.label,\n            angle: 90,\n            position: 'insideRight',\n            style: {\n              fill: '#fff',\n              fontSize: tickFontSize,\n              textAnchor: 'middle',\n            },\n            dx: 25,\n          }}\n        />\n\n        {tooltipContent && <Tooltip content={tooltipContent} />}\n\n        {leftAxis.show && (\n          <Area\n            yAxisId=\"left\"\n            type=\"monotone\"\n            dataKey={leftAxis.dataKey}\n            stroke=\"none\"\n            strokeWidth={0}\n            fill={`url(#${leftGradientId})`}\n            dot={false}\n            name={leftAxis.label}\n            isAnimationActive={false}\n          />\n        )}\n\n        {rightAxis.show && (\n          <Area\n            yAxisId=\"right\"\n            type=\"monotone\"\n            dataKey={rightAxis.dataKey}\n            stroke=\"none\"\n            strokeWidth={0}\n            fill={`url(#${rightGradientId})`}\n            dot={false}\n            name={rightAxis.label}\n            isAnimationActive={false}\n          />\n        )}\n      </AreaChart>\n    </ResponsiveContainer>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/DualAxisAreaChart/index.ts",
    "content": "export {\n  DualAxisAreaChart,\n  type AxisConfig,\n  type DualAxisAreaChartProps,\n} from './DualAxisAreaChart'\n"
  },
  {
    "path": "src/containers/shared/components/EmptyStateMessage/emptyStateMessage.scss",
    "content": "@use '../../css/variables' as *;\n\n// Empty state message styling\n.empty-state-message {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  padding: 60px 20px;\n  color: $black-40;\n  text-align: center;\n\n  .empty-state-icon {\n    width: 126px;\n    height: 137px;\n    margin-bottom: 16px;\n    opacity: 0.5;\n  }\n\n  .empty-state-text {\n    color: $black-60;\n    font-size: 16px;\n    line-height: 1.5;\n  }\n}\n"
  },
  {
    "path": "src/containers/shared/components/EmptyStateMessage/index.tsx",
    "content": "import { ReactNode } from 'react'\nimport NoInfo from '../../images/no_info.svg'\nimport './emptyStateMessage.scss'\n\ninterface EmptyStateMessageProps {\n  message: ReactNode\n}\n\nexport const EmptyStateMessage = ({ message }: EmptyStateMessageProps) => (\n  <div className=\"empty-state-message\">\n    <NoInfo className=\"empty-state-icon\" alt=\"No data\" />\n    <div className=\"empty-state-text\">{message}</div>\n  </div>\n)\n"
  },
  {
    "path": "src/containers/shared/components/EmptyStateMessage/tests/index.test.tsx",
    "content": "import { render } from '@testing-library/react'\nimport { EmptyStateMessage } from '../index'\n\ndescribe('EmptyStateMessage', () => {\n  it('renders correctly with message', () => {\n    const testMessage = 'No data available'\n    const { container } = render(<EmptyStateMessage message={testMessage} />)\n    expect(container.querySelectorAll('.empty-state-message')).toHaveLength(1)\n    expect(container.querySelector('.empty-state-text')).toHaveTextContent(\n      testMessage,\n    )\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/HoldersTable/HoldersTable.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { useEffect, useRef } from 'react'\nimport { Loader } from '../Loader'\nimport { Pagination } from '../Pagination'\nimport { EmptyStateMessage } from '../EmptyStateMessage'\nimport './styles.scss'\nimport '../../css/data-tables-mobile.scss'\nimport {\n  parseAmount,\n  parseCurrencyAmount,\n  parsePercent,\n} from '../../NumberFormattingUtils'\nimport { shortenAccount } from '../../utils'\nimport { Account } from '../Account'\n\nexport interface XRPLHolder {\n  rank: number\n  account: string\n  balance: number | string\n  percent: number\n  value_usd: number | null\n}\n\ninterface HoldersTableProps {\n  holders: XRPLHolder[]\n  isHoldersDataLoading?: boolean\n  totalHolders: number\n  currentPage: number\n  onPageChange: (page: number) => void\n  pageSize: number\n}\n\nexport const HoldersTable = ({\n  holders,\n  isHoldersDataLoading = false,\n  totalHolders,\n  currentPage,\n  onPageChange,\n  pageSize,\n}: HoldersTableProps) => {\n  const { t } = useTranslation()\n  const tableRef = useRef<HTMLTableElement>(null)\n\n  // Scroll to top of table when page changes\n  useEffect(() => {\n    if (!isHoldersDataLoading) {\n      // Use double requestAnimationFrame to ensure scroll happens after DOM updates\n      requestAnimationFrame(() => {\n        requestAnimationFrame(() => {\n          const tableContainer = tableRef.current?.closest('.tokens-table')\n          if (tableContainer) {\n            const rect = tableContainer.getBoundingClientRect()\n            const scrollTop = window.scrollY + rect.top - 200 // Scroll higher to show tabs and table headers\n            window.scrollTo({ top: scrollTop, behavior: 'smooth' })\n          }\n        })\n      })\n    }\n  }, [currentPage, isHoldersDataLoading])\n\n  const renderHolder = (holder: XRPLHolder) => (\n    <tr key={`${holder.account}-${holder.rank}`}>\n      <td className=\"holder-rank\">{holder.rank}</td>\n      <td className=\"tx-hash\">\n        <Account\n          account={holder.account}\n          displayText={shortenAccount(holder.account)}\n        />\n      </td>\n      <td className=\"tx-ledger\">{parseAmount(holder.balance)}</td>\n      <td className=\"tx-percent-supply\">{parsePercent(holder.percent)}</td>\n      <td className=\"tx-value\">\n        {holder.value_usd === null\n          ? '--'\n          : parseCurrencyAmount(holder.value_usd)}\n      </td>\n    </tr>\n  )\n\n  if (!isHoldersDataLoading && (!holders || holders.length === 0)) {\n    return <EmptyStateMessage message={t('token_page.holders_no_holders')} />\n  }\n\n  return (\n    <div className=\"tokens-table\">\n      <div className=\"table-wrap\">\n        <table className=\"basic\" ref={tableRef}>\n          <thead>\n            <tr>\n              <th className=\"holder-rank\">{t('token_page.holders_rank')}</th>\n              <th className=\"tx-hash\">{t('account')}</th>\n              <th className=\"tx-ledger\">\n                {t('token_page.holders_num_tokens')}\n              </th>\n              <th className=\"tx-percent-supply\">\n                {t('token_page.holders_percent_supply')}\n              </th>\n              <th className=\"tx-value\">{t('token_page.holders_usd_value')}</th>\n            </tr>\n          </thead>\n          <tbody>\n            {isHoldersDataLoading ? (\n              <tr>\n                <td colSpan={5}>\n                  <div className=\"mobile-loading\">\n                    <Loader />\n                  </div>\n                </td>\n              </tr>\n            ) : (\n              holders.map(renderHolder)\n            )}\n          </tbody>\n        </table>\n      </div>\n      {!isHoldersDataLoading && totalHolders > pageSize && (\n        <Pagination\n          totalItems={totalHolders}\n          currentPage={currentPage}\n          onPageChange={onPageChange}\n          pageSize={pageSize}\n          scrollToTop={null}\n        />\n      )}\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/HoldersTable/styles.scss",
    "content": "@use '../../css/variables' as *;\n@use '../../css/table';\n\n// Fix column widths for holders table\n.holder-rank {\n  width: 60px;\n  min-width: 60px;\n}\n\n.tx-hash {\n  width: 140px;\n  min-width: 140px;\n}\n\n.tx-ledger {\n  width: 120px;\n  min-width: 120px;\n}\n\n.tx-percent-supply {\n  width: 110px;\n  min-width: 110px;\n}\n\n.tx-value {\n  width: 120px;\n  min-width: 120px;\n}\n"
  },
  {
    "path": "src/containers/shared/components/HoldersTable/test/HoldersTable.test.tsx",
    "content": "import { render, screen, fireEvent } from '@testing-library/react'\nimport { I18nextProvider } from 'react-i18next'\nimport { BrowserRouter as Router } from 'react-router'\nimport i18n from '../../../../../i18n/testConfigEnglish'\nimport { HoldersTable, XRPLHolder } from '../HoldersTable'\n\nconst TestWrapper = ({ children }: { children: React.ReactNode }) => (\n  <I18nextProvider i18n={i18n}>\n    <Router>{children}</Router>\n  </I18nextProvider>\n)\n\nconst mockHolders: XRPLHolder[] = [\n  {\n    rank: 1,\n    account: 'rN7n7otQDd6FczFgLdSqtcsAUxDkw6fzRH',\n    balance: 1000000,\n    percent: 25.5,\n    value_usd: 500000,\n  },\n  {\n    rank: 2,\n    account: 'rLNaPoKeeBjZe2qs6x52yVPZpZ8td4dc6w',\n    balance: 500000,\n    percent: 12.75,\n    value_usd: 250000,\n  },\n  {\n    rank: 3,\n    account: 'rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B',\n    balance: 250000,\n    percent: 6.375,\n    value_usd: 125000,\n  },\n]\n\ndescribe('HoldersTable Component', () => {\n  const mockOnPageChange = jest.fn()\n\n  beforeEach(() => {\n    jest.clearAllMocks()\n  })\n\n  it('renders without crashing', () => {\n    render(\n      <TestWrapper>\n        <HoldersTable\n          holders={mockHolders}\n          totalHolders={3}\n          currentPage={1}\n          onPageChange={mockOnPageChange}\n          pageSize={10}\n        />\n      </TestWrapper>,\n    )\n    // Verify accounts are rendered (shortened to first 7 + last 5 chars with ... in between)\n    const accounts = screen.getAllByTestId('account')\n    expect(accounts.length).toBeGreaterThanOrEqual(3)\n    expect(accounts[0]).toHaveTextContent('rN7n7ot...6fzRH')\n  })\n\n  it('displays all holders in the table', () => {\n    render(\n      <TestWrapper>\n        <HoldersTable\n          holders={mockHolders}\n          totalHolders={3}\n          currentPage={1}\n          onPageChange={mockOnPageChange}\n          pageSize={10}\n        />\n      </TestWrapper>,\n    )\n    // Verify accounts are rendered (they are shortened to first 7 + last 5 chars with ... in between)\n    const accounts = screen.getAllByTestId('account')\n    expect(accounts.length).toBeGreaterThanOrEqual(3)\n    expect(accounts[0]).toHaveTextContent('rN7n7ot...6fzRH')\n    expect(accounts[1]).toHaveTextContent('rLNaPoK...4dc6w')\n    expect(accounts[2]).toHaveTextContent('rvYAfWj...bs59B')\n  })\n\n  it('displays correct rank for each holder', () => {\n    const { container } = render(\n      <TestWrapper>\n        <HoldersTable\n          holders={mockHolders}\n          totalHolders={3}\n          currentPage={1}\n          onPageChange={mockOnPageChange}\n          pageSize={10}\n        />\n      </TestWrapper>,\n    )\n    const rows = container.querySelectorAll('tbody tr')\n    expect(rows.length).toBe(3)\n  })\n\n  it('shows loading state when isHoldersDataLoading is true', () => {\n    render(\n      <TestWrapper>\n        <HoldersTable\n          holders={[]}\n          isHoldersDataLoading\n          totalHolders={0}\n          currentPage={1}\n          onPageChange={mockOnPageChange}\n          pageSize={10}\n        />\n      </TestWrapper>,\n    )\n    expect(screen.getByRole('img', { name: /loading/i })).toBeInTheDocument()\n  })\n\n  it('shows no holders message when empty and not loading', () => {\n    render(\n      <TestWrapper>\n        <HoldersTable\n          holders={[]}\n          isHoldersDataLoading={false}\n          totalHolders={0}\n          currentPage={1}\n          onPageChange={mockOnPageChange}\n          pageSize={10}\n        />\n      </TestWrapper>,\n    )\n    expect(screen.getByText(/no holders/i)).toBeInTheDocument()\n  })\n\n  it('calls onPageChange when pagination is triggered', () => {\n    render(\n      <TestWrapper>\n        <HoldersTable\n          holders={mockHolders}\n          totalHolders={30}\n          currentPage={1}\n          onPageChange={mockOnPageChange}\n          pageSize={10}\n        />\n      </TestWrapper>,\n    )\n    const page2Button = screen.getByRole('button', { name: '2' })\n    fireEvent.click(page2Button)\n    expect(mockOnPageChange).toHaveBeenCalledWith(2)\n  })\n\n  it('renders table headers correctly', () => {\n    const { container } = render(\n      <TestWrapper>\n        <HoldersTable\n          holders={mockHolders}\n          totalHolders={3}\n          currentPage={1}\n          onPageChange={mockOnPageChange}\n          pageSize={10}\n        />\n      </TestWrapper>,\n    )\n    const headers = container.querySelectorAll('thead th')\n    expect(headers.length).toBe(5)\n  })\n\n  it('displays pagination when there are multiple pages', () => {\n    render(\n      <TestWrapper>\n        <HoldersTable\n          holders={mockHolders}\n          totalHolders={30}\n          currentPage={1}\n          onPageChange={mockOnPageChange}\n          pageSize={10}\n        />\n      </TestWrapper>,\n    )\n    expect(\n      screen.getByRole('navigation', { name: /pagination/i }),\n    ).toBeInTheDocument()\n  })\n\n  it('does not display pagination when all items fit on one page', () => {\n    render(\n      <TestWrapper>\n        <HoldersTable\n          holders={mockHolders}\n          totalHolders={3}\n          currentPage={1}\n          onPageChange={mockOnPageChange}\n          pageSize={10}\n        />\n      </TestWrapper>,\n    )\n    expect(\n      screen.queryByRole('navigation', { name: /pagination/i }),\n    ).not.toBeInTheDocument()\n  })\n\n  it('handles single holder correctly', () => {\n    const singleHolder: XRPLHolder[] = [mockHolders[0]]\n    render(\n      <TestWrapper>\n        <HoldersTable\n          holders={singleHolder}\n          totalHolders={1}\n          currentPage={1}\n          onPageChange={mockOnPageChange}\n          pageSize={10}\n        />\n      </TestWrapper>,\n    )\n    // Verify account is rendered (shortened to first 7 + last 5 chars with ... in between)\n    const account = screen.getByTestId('account')\n    expect(account).toHaveTextContent('rN7n7ot...6fzRH')\n  })\n\n  it('handles large holder balances', () => {\n    const largeHolder: XRPLHolder[] = [\n      {\n        rank: 1,\n        account: 'rN7n7otQDd6FczFgLdSqtcsAUxDkw6fzRH',\n        balance: 999999999999,\n        percent: 99.99,\n        value_usd: 999999999999,\n      },\n    ]\n    render(\n      <TestWrapper>\n        <HoldersTable\n          holders={largeHolder}\n          totalHolders={1}\n          currentPage={1}\n          onPageChange={mockOnPageChange}\n          pageSize={10}\n        />\n      </TestWrapper>,\n    )\n    // Verify account is rendered (shortened to first 7 + last 5 chars with ... in between)\n    const account = screen.getByTestId('account')\n    expect(account).toHaveTextContent('rN7n7ot...6fzRH')\n  })\n\n  it('handles zero balance holders', () => {\n    const zeroHolder: XRPLHolder[] = [\n      {\n        rank: 1,\n        account: 'rN7n7otQDd6FczFgLdSqtcsAUxDkw6fzRH',\n        balance: 0,\n        percent: 0,\n        value_usd: 0,\n      },\n    ]\n    render(\n      <TestWrapper>\n        <HoldersTable\n          holders={zeroHolder}\n          totalHolders={1}\n          currentPage={1}\n          onPageChange={mockOnPageChange}\n          pageSize={10}\n        />\n      </TestWrapper>,\n    )\n    // Verify account is rendered (shortened to first 7 + last 5 chars with ... in between)\n    const account = screen.getByTestId('account')\n    expect(account).toHaveTextContent('rN7n7ot...6fzRH')\n  })\n\n  it('renders table with correct CSS classes', () => {\n    const { container } = render(\n      <TestWrapper>\n        <HoldersTable\n          holders={mockHolders}\n          totalHolders={3}\n          currentPage={1}\n          onPageChange={mockOnPageChange}\n          pageSize={10}\n        />\n      </TestWrapper>,\n    )\n    expect(container.querySelector('.tokens-table')).toBeInTheDocument()\n    expect(container.querySelector('table.basic')).toBeInTheDocument()\n  })\n\n  it('displays correct number of rows for current page', () => {\n    const { container } = render(\n      <TestWrapper>\n        <HoldersTable\n          holders={mockHolders}\n          totalHolders={3}\n          currentPage={1}\n          onPageChange={mockOnPageChange}\n          pageSize={10}\n        />\n      </TestWrapper>,\n    )\n    const rows = container.querySelectorAll('tbody tr')\n    expect(rows.length).toBe(mockHolders.length)\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/JsonView/JsonView.tsx",
    "content": "import { useState } from 'react'\nimport ReactJson from 'react18-json-view'\nimport { useTranslation } from 'react-i18next'\n\nimport './json-view.scss'\nimport CollapseAllIcon from '../../images/collapse_all.svg'\nimport ExpandAllIcon from '../../images/expand_all.svg'\n\ninterface JsonViewProps {\n  data: any\n  showExpandButton?: boolean\n  showBackground?: boolean\n}\n\nexport const JsonView = ({\n  data,\n  showExpandButton = false,\n  showBackground = false,\n}: JsonViewProps) => {\n  const { t } = useTranslation()\n  const [isExpanded, setIsExpanded] = useState(false)\n\n  const handleExpandToggle = () => {\n    setIsExpanded(!isExpanded)\n  }\n\n  const Icon = isExpanded ? CollapseAllIcon : ExpandAllIcon\n\n  return (\n    <div\n      className={`json-view-container ${showBackground ? 'show-background' : ''}`}\n    >\n      {showExpandButton && (\n        <div className=\"json-view-controls\">\n          <button\n            type=\"button\"\n            className=\"json-view-expand-button\"\n            onClick={handleExpandToggle}\n            aria-label={isExpanded ? t('collapse') : t('expand')}\n          >\n            <Icon width={24} height={24} />\n            {isExpanded ? t('collapse') : t('expand')}\n          </button>\n        </div>\n      )}\n      <ReactJson\n        src={data}\n        collapsed={isExpanded ? false : 5}\n        collapseStringsAfterLength={65}\n        customizeNode={(params) => {\n          if (params.node === undefined)\n            return { className: 'json-view--undefined' }\n          return undefined\n        }}\n      />\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/JsonView/index.ts",
    "content": "export * from './JsonView'\n"
  },
  {
    "path": "src/containers/shared/components/JsonView/json-view.scss",
    "content": "@use '../../css/variables' as *;\n@import 'react18-json-view/src/style.css';\n\n.json-view-container {\n  position: relative;\n\n  &.show-background {\n    padding: 24px;\n    background-color: $black-80;\n  }\n}\n\n.json-view {\n  overflow: hidden;\n  margin-bottom: 40px;\n  color: $black-10 !important;\n  font-size: 12px;\n  letter-spacing: 0;\n\n  @include for-size(phone-only) {\n    padding-top: 85px;\n  }\n\n  svg {\n    height: 11px !important;\n    color: $black-10;\n  }\n}\n\n.json-view-controls {\n  position: absolute;\n  z-index: 10;\n  top: 24px;\n  right: 24px;\n  display: flex;\n  height: auto;\n  align-items: flex-start;\n  justify-content: flex-end;\n  padding-top: 4px;\n\n  @include for-size(phone-only) {\n    position: absolute;\n    top: 24px;\n    right: auto;\n    left: 24px;\n    justify-content: flex-start;\n    padding-top: 0;\n  }\n}\n\n.json-view-expand-button {\n  display: flex;\n  align-items: center;\n  justify-content: flex-end;\n  padding: 4px 16px;\n  border: 1px solid $white;\n  border-radius: 100px;\n  background: transparent;\n  color: $white;\n  cursor: pointer;\n  font-size: 12px;\n  font-style: normal;\n  gap: 10px;\n  line-height: 150%;\n  transition: all 0.2s ease;\n  @include regular;\n\n  &:hover {\n    background: $black-70;\n  }\n\n  &:focus {\n    outline: none;\n  }\n}\n\n.jv-button {\n  color: $orange-50 !important;\n  font-size: 14px;\n}\n\n.jv-indent {\n  border-left: 1px solid $black-60;\n  margin: 4px;\n}\n\n/* stylelint-disable selector-class-pattern -- react18-json-view uses these */\n.json-view--boolean {\n  color: $magenta-60 !important;\n}\n\n.json-view--pair {\n  margin: 4px;\n}\n\n.json-view--property {\n  color: $black-10 !important;\n}\n\n.json-view--null,\n.json-view--undefined {\n  display: inline-block;\n  padding: 1px 2px;\n  border-radius: 3px;\n  background-color: $black-60;\n  color: $black-10 !important;\n  font-size: 11px;\n}\n\n.json-view--number {\n  color: $green-30 !important;\n}\n\n.json-view--string {\n  color: $orange-50 !important;\n  overflow-wrap: break-word;\n  white-space: pre-wrap;\n  word-break: break-all;\n}\n\n/* stylelint-enable selector-class-pattern */\n"
  },
  {
    "path": "src/containers/shared/components/JsonView/test/JsonView.test.tsx",
    "content": "import { render, screen, fireEvent, cleanup } from '@testing-library/react'\nimport { I18nextProvider } from 'react-i18next'\nimport { JsonView } from '../JsonView'\nimport i18n from '../../../../../i18n/testConfigEnglish'\n\nconst renderComponent = (component: JSX.Element) =>\n  render(<I18nextProvider i18n={i18n}>{component}</I18nextProvider>)\n\nconst mockData = {\n  Account: 'rL7cFLMatevSip1b2FVFVMevSip1b2FVFVMevSip1b2FVFV',\n  Fee: '50',\n  LastLedgerSequence: 98135739,\n  OfferSequence: 98722304,\n  Sequence: 98722305,\n  SigningPubKey:\n    'EDB83C0135E7CE2C7CE2DCDE0E4B4B09E0B0B7B580D975D50F80D50A67E58E13',\n  TransactionType: 'OfferCancel',\n  TxnSignature:\n    '93B80F8FB8832C4F3E39C179B411D2AAFB7D4851894301C1B2FDE8BE1942B...',\n  hash: '327FD39E14EF14741374137A2BC0CCEA67AEC371F2D67B58E66182B1AEC89E',\n  ctid: 'C8D6ELA000000000',\n  meta: {\n    AffectedNodes: [\n      {\n        ModifiedNode: {\n          FinalFields: {\n            Account: 'rL7cFLMatevSip1b2FVFVMevSip1b2FVFVMevSip1b2FVFV',\n            Balance: '41797929',\n            Flags: 0,\n            LedgerEntryType: 'AccountRoot',\n            OwnerCount: 0,\n            PreviousTxnID:\n              '30615372ELF11D1065C7DEDEOE4B4B09E0B0B7B580D975D50F80D50A67E58E13',\n            PreviousTxnLgrSeq: 30615372,\n            Sequence: 98722306,\n          },\n          LedgerEntryType: 'AccountRoot',\n          LedgerIndex:\n            '30615372ELF11D1065C7DEDEOE4B4B09E0B0B7B580D975D50F80D50A67E58E13',\n          PreviousFields: {\n            Balance: '41797979',\n            Sequence: 98722305,\n          },\n          PreviousTxnID:\n            '30615372ELF11D1065C7DEDEOE4B4B09E0B0B7B580D975D50F80D50A67E58E13',\n          PreviousTxnLgrSeq: 30615371,\n        },\n      },\n    ],\n    TransactionIndex: 0,\n    TransactionResult: 'tesSUCCESS',\n  },\n}\n\ndescribe('JsonView', () => {\n  afterEach(cleanup)\n\n  describe('Basic Rendering', () => {\n    it('renders without crashing', () => {\n      renderComponent(<JsonView data={mockData} />)\n      expect(screen.getByText('Account')).toBeInTheDocument()\n      expect(screen.getByText('Fee')).toBeInTheDocument()\n      expect(screen.getByText('TransactionType')).toBeInTheDocument()\n    })\n\n    it('renders JSON data correctly', () => {\n      renderComponent(<JsonView data={mockData} />)\n\n      // Check that key properties are displayed\n      expect(screen.getByText('Account')).toBeInTheDocument()\n      expect(\n        screen.getByText(/rL7cFLMatevSip1b2FVFVMevSip1b2FVFVMevSip1b2FVFV/),\n      ).toBeInTheDocument()\n      expect(screen.getByText('Fee')).toBeInTheDocument()\n      expect(screen.getAllByText(/50/)[0]).toBeInTheDocument()\n      expect(screen.getByText('TransactionType')).toBeInTheDocument()\n      expect(screen.getByText(/OfferCancel/)).toBeInTheDocument()\n    })\n\n    it('does not show expand button by default', () => {\n      renderComponent(<JsonView data={mockData} />)\n\n      const expandButton = document.querySelector('.json-view-expand-button')\n      expect(expandButton).not.toBeInTheDocument()\n\n      const controls = document.querySelector('.json-view-controls')\n      expect(controls).not.toBeInTheDocument()\n    })\n  })\n\n  describe('Expand Button Functionality', () => {\n    it('shows expand button when showExpandButton is true', () => {\n      renderComponent(<JsonView data={mockData} showExpandButton />)\n\n      const expandButton = document.querySelector('.json-view-expand-button')\n      expect(expandButton).toBeInTheDocument()\n\n      const controls = document.querySelector('.json-view-controls')\n      expect(controls).toBeInTheDocument()\n    })\n\n    it('displays \"Expand\" text initially', () => {\n      renderComponent(<JsonView data={mockData} showExpandButton />)\n\n      const expandButton = document.querySelector('.json-view-expand-button')\n      expect(expandButton).toHaveTextContent('Expand')\n    })\n\n    it('toggles button text when clicked', () => {\n      renderComponent(<JsonView data={mockData} showExpandButton />)\n\n      const expandButton = document.querySelector(\n        '.json-view-expand-button',\n      ) as HTMLButtonElement\n\n      // Initially shows \"Expand\"\n      expect(expandButton).toHaveTextContent('Expand')\n      expect(expandButton).toHaveAttribute('aria-label', 'Expand')\n\n      // Click to expand\n      fireEvent.click(expandButton)\n\n      // Should now show \"Collapse\"\n      expect(expandButton).toHaveTextContent('Collapse')\n      expect(expandButton).toHaveAttribute('aria-label', 'Collapse')\n\n      // Click again to collapse\n      fireEvent.click(expandButton)\n\n      // Should be back to \"Expand\"\n      expect(expandButton).toHaveTextContent('Expand')\n      expect(expandButton).toHaveAttribute('aria-label', 'Expand')\n    })\n\n    it('renders SVG icons', () => {\n      renderComponent(<JsonView data={mockData} showExpandButton />)\n\n      const expandButton = document.querySelector('.json-view-expand-button')\n      const svg = expandButton?.querySelector('svg')\n      expect(svg).toBeInTheDocument()\n      expect(svg).toHaveAttribute('width', '24')\n      expect(svg).toHaveAttribute('height', '24')\n    })\n\n    it('changes icon when toggled', () => {\n      renderComponent(<JsonView data={mockData} showExpandButton />)\n\n      const expandButton = document.querySelector(\n        '.json-view-expand-button',\n      ) as HTMLButtonElement\n      const initialSvg = expandButton?.querySelector('svg')\n      const initialSvgContent = initialSvg?.textContent\n\n      // Click to expand\n      fireEvent.click(expandButton)\n\n      const toggledSvg = expandButton?.querySelector('svg')\n      const toggledSvgContent = toggledSvg?.textContent\n\n      // SVG content should be different (different icon)\n      expect(toggledSvgContent).not.toBe(initialSvgContent)\n    })\n  })\n\n  describe('Edge Cases', () => {\n    it('handles empty data object', () => {\n      renderComponent(<JsonView data={{}} />)\n\n      // Should still render without errors\n      const container = document.querySelector('.json-view-container')\n      expect(container).toBeInTheDocument()\n    })\n\n    it('handles null data', () => {\n      renderComponent(<JsonView data={null} />)\n\n      // Should still render without errors\n      const container = document.querySelector('.json-view-container')\n      expect(container).toBeInTheDocument()\n    })\n\n    it('handles complex nested data', () => {\n      const complexData = {\n        level1: {\n          level2: {\n            level3: {\n              deepValue: 'test',\n            },\n          },\n        },\n      }\n\n      renderComponent(<JsonView data={complexData} showExpandButton />)\n\n      expect(screen.getByText('level1')).toBeInTheDocument()\n      expect(screen.getByRole('button')).toBeInTheDocument()\n    })\n  })\n\n  describe('Integration with react18-json-view', () => {\n    it('passes correct props to ReactJson component', () => {\n      renderComponent(<JsonView data={mockData} showExpandButton />)\n\n      // The component should render the JSON structure\n      expect(screen.getByText('Account')).toBeInTheDocument()\n      expect(screen.getByText('meta')).toBeInTheDocument()\n      expect(screen.getByText('AffectedNodes')).toBeInTheDocument()\n    })\n\n    it('handles expand/collapse state correctly', () => {\n      renderComponent(<JsonView data={mockData} showExpandButton />)\n\n      const expandButton = document.querySelector(\n        '.json-view-expand-button',\n      ) as HTMLButtonElement\n\n      // Initially collapsed (collapsed=5) - some nested content is visible but deeply nested values are not\n      expect(screen.getByText('FinalFields')).toBeInTheDocument()\n      expect(screen.getByText('PreviousFields')).toBeInTheDocument()\n      // But the actual balance values should be collapsed\n      expect(screen.queryByText(/41797929/)).not.toBeInTheDocument()\n      expect(screen.queryByText(/41797979/)).not.toBeInTheDocument()\n\n      // Click to expand (collapsed=false)\n      fireEvent.click(expandButton)\n\n      // After expansion, all deeply nested content should be visible including balance values\n      expect(screen.getByText('ModifiedNode')).toBeInTheDocument()\n      expect(screen.getByText('FinalFields')).toBeInTheDocument()\n      expect(screen.getByText('PreviousFields')).toBeInTheDocument()\n      expect(screen.getAllByText('Balance').length).toBeGreaterThan(0)\n      expect(screen.getByText(/41797929/)).toBeInTheDocument()\n      expect(screen.getByText(/41797979/)).toBeInTheDocument()\n      expect(screen.getAllByText('OwnerCount').length).toBeGreaterThan(0)\n\n      // Click to collapse again (collapsed=5)\n      fireEvent.click(expandButton)\n\n      // After collapsing, deeply nested values should be hidden again\n      expect(screen.getByText('FinalFields')).toBeInTheDocument() // Still visible at level 5\n      expect(screen.getByText('PreviousFields')).toBeInTheDocument() // Still visible at level 5\n      expect(screen.queryByText(/41797929/)).not.toBeInTheDocument() // Hidden beyond level 5\n      expect(screen.queryByText(/41797979/)).not.toBeInTheDocument() // Hidden beyond level 5\n    })\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Loader.tsx",
    "content": "import { FC } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport LoaderPath from '../images/xrp-loader.png'\nimport '../css/loader.scss'\n\nexport const Loader: FC<{ className?: string }> = ({ className }) => {\n  const { t } = useTranslation()\n  return (\n    <div className={`loader ${className}`}>\n      <img src={LoaderPath} alt={t('loading')} />\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/MPTokenLink.tsx",
    "content": "import { RouteLink } from '../routing'\nimport { MPT_ROUTE } from '../../App/routes'\n\nexport interface MPTokenLinkProps {\n  tokenID: string\n}\n\nexport const MPTokenLink = ({ tokenID }: MPTokenLinkProps) => (\n  <RouteLink title={tokenID} to={MPT_ROUTE} params={{ id: tokenID }}>\n    {tokenID}\n  </RouteLink>\n)\n"
  },
  {
    "path": "src/containers/shared/components/NFTokenLink.tsx",
    "content": "import { RouteLink } from '../routing'\nimport { NFT_ROUTE } from '../../App/routes'\n\nexport interface NFTokenLinkProps {\n  tokenID: string\n  shortTokenID?: string\n}\n\nexport const NFTokenLink = ({ tokenID, shortTokenID }: NFTokenLinkProps) => (\n  <RouteLink title={tokenID} to={NFT_ROUTE} params={{ id: tokenID }}>\n    {shortTokenID || tokenID}\n  </RouteLink>\n)\n"
  },
  {
    "path": "src/containers/shared/components/Notification/index.tsx",
    "content": "import { useEffect, useState } from 'react'\nimport './styles.scss'\n\ntype NotificationLevel = 'primary'\ntype NotificationUsage =\n  | 'default'\n  | 'success'\n  | 'warning'\n  | 'danger'\n  | 'dark'\n  | 'light'\n  | 'dark50'\n\nexport interface NotificationProps {\n  autoDismiss?: boolean\n  message: string\n  action?: string\n  level?: NotificationLevel\n  delay?: number\n  usage?: NotificationUsage\n  className?: string\n}\n\nexport const Notification = ({\n  autoDismiss = false,\n  delay = 5000,\n  message,\n  action,\n  usage = 'default',\n  level = 'primary',\n  className,\n}: NotificationProps) => {\n  const [dismissed, setDismissed] = useState(false)\n  useEffect(() => {\n    if (autoDismiss) {\n      setTimeout(() => {\n        setDismissed(true)\n      }, delay)\n    }\n  }, [autoDismiss, delay])\n\n  const classNames = ['notification', usage, `${level}-theme`, className].join(\n    ' ',\n  )\n  return !dismissed ? (\n    <div className={classNames}>\n      <span>{message}</span>\n      {action}\n    </div>\n  ) : null\n}\n"
  },
  {
    "path": "src/containers/shared/components/Notification/styles.scss",
    "content": "@use '../../css/variables' as *;\n\n.notification {\n  border: 1px solid;\n  border-radius: 4px;\n  margin: 12px 0;\n  background: $blue;\n  color: $white;\n  font-size: 14px;\n  line-height: 22px;\n  text-align: center;\n  @include bold;\n\n  span {\n    padding: 0 22px;\n  }\n\n  &.primary-theme {\n    color: $white;\n\n    &.default {\n      border-color: $blue;\n      background: $blue;\n    }\n\n    &.success {\n      border-color: $green;\n      background: $green;\n    }\n\n    &.warning {\n      border-color: $orange;\n      background: $orange;\n    }\n\n    &.danger {\n      border-color: $red;\n      background: $red-dark;\n    }\n\n    &.dark {\n      border-color: $black-100;\n      background: $black-100;\n    }\n\n    &.dark50 {\n      border-color: $black-50;\n      background: $black-50;\n    }\n\n    &.light {\n      border-color: $white;\n      background: $white;\n      color: $black-100;\n    }\n  }\n}\n"
  },
  {
    "path": "src/containers/shared/components/Notification/tests/index.test.tsx",
    "content": "import { render } from '@testing-library/react'\nimport { Notification } from '../index'\n\n/* eslint-disable react/jsx-props-no-spreading */\nconst VALID_USAGES = [\n  'default',\n  'success',\n  'warning',\n  'danger',\n  'dark',\n  'light',\n  'dark50',\n]\nconst notificationLevels = ['primary', 'secondary', 'ghost']\nconst message = 'A catchy message'\nconst renderComponent = (props) => render(<Notification {...props} />)\n\ndescribe('<Notification />', () => {\n  it('should render with custom className', () => {\n    const className = 'test-class'\n    const { container } = renderComponent({\n      message,\n      className,\n    })\n\n    expect(container.firstChild).toHaveClass(className)\n  })\n\n  it('should render the action button', () => {\n    const { container } = renderComponent({\n      message,\n      action: <button type=\"button\" data-testid=\"action-btn\" />,\n    })\n\n    expect(container.querySelector('button')).toBeInTheDocument()\n  })\n\n  it('should render its message', () => {\n    const { container } = renderComponent({\n      message,\n    })\n\n    expect(container).toHaveTextContent(message)\n  })\n\n  // test all notification levels\n  notificationLevels.forEach((level) => {\n    it(`should accept level prop of ${level}`, () => {\n      const { container } = renderComponent({\n        level,\n        message,\n      })\n\n      expect(container.querySelector('.notification')).toHaveClass(\n        `${level}-theme`,\n      )\n    })\n  })\n\n  // test all notification usages\n  VALID_USAGES.forEach((usage) => {\n    it(`should render with usage prop of ${usage}`, () => {\n      const { container } = renderComponent({\n        usage,\n        message,\n      })\n      expect(container.querySelector('.notification')).toHaveClass(usage)\n    })\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/PaginatedTable/index.tsx",
    "content": "import './styles.scss'\nimport { useState, useMemo, ReactNode } from 'react'\n\nfunction getPageItems(current: number, total: number) {\n  const pages: (number | 'dots')[] = []\n  const push = (v: number | 'dots') => pages.push(v)\n  const addRange = (s: number, e: number) => {\n    for (let i = s; i <= e; i += 1) {\n      push(i)\n    }\n  }\n\n  if (total <= 7) {\n    addRange(1, total)\n    return pages\n  }\n\n  if (current <= 4) {\n    addRange(1, 5)\n    push('dots')\n    push(total)\n    return pages\n  }\n  if (current >= total - 3) {\n    push(1)\n    push('dots')\n    addRange(total - 4, total)\n    return pages\n  }\n\n  push(1)\n  push('dots')\n  addRange(current - 2, current + 2)\n  push('dots')\n  push(total)\n  return pages\n}\n\nexport interface PaginatedTableProps {\n  data: any[]\n  pageSize?: number\n  tableStructure: (paginatedData: any[]) => ReactNode\n}\n\nexport function PaginatedTable({\n  data,\n  pageSize = 10,\n  tableStructure,\n}: PaginatedTableProps) {\n  const [currentPage, setCurrentPage] = useState(1)\n\n  const totalPages = Math.max(1, Math.ceil(data.length / pageSize))\n\n  // Calculate paginated data\n  const paginatedData = useMemo(() => {\n    const start = (currentPage - 1) * pageSize\n    return data.slice(start, start + pageSize)\n  }, [currentPage, data, pageSize])\n\n  const items = getPageItems(currentPage, totalPages)\n  const prevDisabled = currentPage === 1\n  const nextDisabled = currentPage === totalPages\n\n  const pagination =\n    totalPages > 1 ? (\n      <div\n        className=\"table-pagination\"\n        role=\"navigation\"\n        aria-label=\"Table pagination\"\n      >\n        <button\n          type=\"button\"\n          className=\"table-pg-btn\"\n          disabled={prevDisabled}\n          aria-label=\"First page\"\n          onClick={() => setCurrentPage(1)}\n        >\n          «\n        </button>\n\n        <button\n          type=\"button\"\n          className=\"table-pg-btn\"\n          disabled={prevDisabled}\n          aria-label=\"Previous page\"\n          onClick={() => setCurrentPage(Math.max(1, currentPage - 1))}\n        >\n          ‹\n        </button>\n\n        {items.map((it, index) =>\n          it === 'dots' ? (\n            <span\n              className=\"table-pg-ellipsis\"\n              key={`dots-${index < items.length / 2 ? 'start' : 'end'}`}\n            >\n              …\n            </span>\n          ) : (\n            <button\n              type=\"button\"\n              key={it}\n              className={`table-pg-btn ${it === currentPage ? 'is-active' : ''}`}\n              aria-current={it === currentPage ? 'page' : undefined}\n              onClick={() => setCurrentPage(it as number)}\n            >\n              {it}\n            </button>\n          ),\n        )}\n\n        <button\n          type=\"button\"\n          className=\"table-pg-btn\"\n          disabled={nextDisabled}\n          aria-label=\"Next page\"\n          onClick={() => setCurrentPage(Math.min(totalPages, currentPage + 1))}\n        >\n          ›\n        </button>\n\n        <button\n          type=\"button\"\n          className=\"table-pg-btn\"\n          disabled={nextDisabled}\n          aria-label=\"Last page\"\n          onClick={() => setCurrentPage(totalPages)}\n        >\n          »\n        </button>\n      </div>\n    ) : null\n\n  return (\n    <div>\n      {tableStructure(paginatedData)}\n      {pagination}\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/PaginatedTable/styles.scss",
    "content": "@use '../../css/variables' as *;\n\n.table-pagination {\n  position: relative;\n  z-index: 5;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  margin: 12px 0 0;\n  gap: 3px;\n}\n\n/* Page numbers + chevrons */\n.table-pg-btn {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  border: none;\n  background: transparent;\n  color: $black-50;\n  cursor: pointer;\n  font-size: 14px;\n}\n\n.table-pg-btn:hover {\n  background: rgb(255 255 255 / 3%);\n  color: $black-0;\n}\n\n.table-pg-btn.is-active {\n  background: rgb(22 163 74 / 6%);\n  color: $green-30;\n}\n\n/* Larger green chevrons for first/prev/next/last */\n.table-pg-btn[aria-label='First page'],\n.table-pg-btn[aria-label='Previous page'],\n.table-pg-btn[aria-label='Next page'],\n.table-pg-btn[aria-label='Last page'] {\n  padding: 0 5px;\n  color: $green-30;\n  font-size: 25px;\n}\n\n/* Disabled state */\n.table-pg-btn:disabled {\n  background: transparent;\n  color: $black-50;\n  cursor: not-allowed;\n  opacity: 0.35;\n}\n\n/* Ellipsis */\n.table-pg-ellipsis {\n  padding: 0 6px;\n  color: $black-50;\n  font-size: 15px;\n}\n"
  },
  {
    "path": "src/containers/shared/components/PaginatedTable/test/PaginatedTable.test.tsx",
    "content": "import { render, screen, fireEvent } from '@testing-library/react'\nimport { PaginatedTable } from '../index'\n\ndescribe('PaginatedTable', () => {\n  const mockTableStructure = (data: any[]) => (\n    <table>\n      <tbody>\n        {data.map((item) => (\n          <tr key={item.name}>\n            <td>{item.name}</td>\n          </tr>\n        ))}\n      </tbody>\n    </table>\n  )\n\n  const generateMockData = (count: number) =>\n    Array.from({ length: count }, (_, i) => ({ name: `Item ${i + 1}` }))\n\n  describe('Rendering', () => {\n    it('renders without crashing with empty data', () => {\n      render(<PaginatedTable data={[]} tableStructure={mockTableStructure} />)\n      expect(screen.queryByRole('navigation')).not.toBeInTheDocument()\n    })\n\n    it('renders table with data', () => {\n      const data = generateMockData(5)\n      render(<PaginatedTable data={data} tableStructure={mockTableStructure} />)\n      expect(screen.getByText('Item 1')).toBeInTheDocument()\n      expect(screen.getByText('Item 5')).toBeInTheDocument()\n    })\n\n    it('does not render pagination when data fits in one page', () => {\n      const data = generateMockData(5)\n      render(\n        <PaginatedTable\n          data={data}\n          pageSize={10}\n          tableStructure={mockTableStructure}\n        />,\n      )\n      expect(screen.queryByRole('navigation')).not.toBeInTheDocument()\n    })\n\n    it('renders pagination when data exceeds page size', () => {\n      const data = generateMockData(15)\n      render(\n        <PaginatedTable\n          data={data}\n          pageSize={10}\n          tableStructure={mockTableStructure}\n        />,\n      )\n      expect(\n        screen.getByRole('navigation', { name: 'Table pagination' }),\n      ).toBeInTheDocument()\n    })\n  })\n\n  describe('Pagination controls', () => {\n    it('renders all pagination buttons', () => {\n      const data = generateMockData(15)\n      render(\n        <PaginatedTable\n          data={data}\n          pageSize={10}\n          tableStructure={mockTableStructure}\n        />,\n      )\n      expect(screen.getByLabelText('First page')).toBeInTheDocument()\n      expect(screen.getByLabelText('Previous page')).toBeInTheDocument()\n      expect(screen.getByLabelText('Next page')).toBeInTheDocument()\n      expect(screen.getByLabelText('Last page')).toBeInTheDocument()\n    })\n\n    it('disables prev/first buttons on first page', () => {\n      const data = generateMockData(15)\n      render(\n        <PaginatedTable\n          data={data}\n          pageSize={10}\n          tableStructure={mockTableStructure}\n        />,\n      )\n      expect(screen.getByLabelText('First page')).toBeDisabled()\n      expect(screen.getByLabelText('Previous page')).toBeDisabled()\n      expect(screen.getByLabelText('Next page')).not.toBeDisabled()\n      expect(screen.getByLabelText('Last page')).not.toBeDisabled()\n    })\n\n    it('disables next/last buttons on last page', () => {\n      const data = generateMockData(15)\n      render(\n        <PaginatedTable\n          data={data}\n          pageSize={10}\n          tableStructure={mockTableStructure}\n        />,\n      )\n      const lastPageButton = screen.getByLabelText('Last page')\n      fireEvent.click(lastPageButton)\n\n      expect(screen.getByLabelText('First page')).not.toBeDisabled()\n      expect(screen.getByLabelText('Previous page')).not.toBeDisabled()\n      expect(screen.getByLabelText('Next page')).toBeDisabled()\n      expect(screen.getByLabelText('Last page')).toBeDisabled()\n    })\n\n    it('marks current page as active', () => {\n      const data = generateMockData(15)\n      render(\n        <PaginatedTable\n          data={data}\n          pageSize={10}\n          tableStructure={mockTableStructure}\n        />,\n      )\n      const page1Button = screen.getByRole('button', {\n        name: '1',\n        current: 'page',\n      })\n      expect(page1Button).toHaveClass('is-active')\n    })\n  })\n\n  describe('Navigation', () => {\n    it('navigates to next page', () => {\n      const data = generateMockData(25)\n      render(\n        <PaginatedTable\n          data={data}\n          pageSize={10}\n          tableStructure={mockTableStructure}\n        />,\n      )\n      expect(screen.getByText('Item 1')).toBeInTheDocument()\n      expect(screen.queryByText('Item 11')).not.toBeInTheDocument()\n\n      fireEvent.click(screen.getByLabelText('Next page'))\n\n      expect(screen.queryByText('Item 1')).not.toBeInTheDocument()\n      expect(screen.getByText('Item 11')).toBeInTheDocument()\n    })\n\n    it('navigates to previous page', () => {\n      const data = generateMockData(25)\n      render(\n        <PaginatedTable\n          data={data}\n          pageSize={10}\n          tableStructure={mockTableStructure}\n        />,\n      )\n      fireEvent.click(screen.getByLabelText('Next page'))\n      fireEvent.click(screen.getByLabelText('Previous page'))\n\n      expect(screen.getByText('Item 1')).toBeInTheDocument()\n      expect(screen.queryByText('Item 11')).not.toBeInTheDocument()\n    })\n\n    it('navigates to first page', () => {\n      const data = generateMockData(25)\n      render(\n        <PaginatedTable\n          data={data}\n          pageSize={10}\n          tableStructure={mockTableStructure}\n        />,\n      )\n      fireEvent.click(screen.getByLabelText('Last page'))\n      fireEvent.click(screen.getByLabelText('First page'))\n\n      expect(screen.getByText('Item 1')).toBeInTheDocument()\n      expect(screen.queryByText('Item 21')).not.toBeInTheDocument()\n    })\n\n    it('navigates to last page', () => {\n      const data = generateMockData(25)\n      render(\n        <PaginatedTable\n          data={data}\n          pageSize={10}\n          tableStructure={mockTableStructure}\n        />,\n      )\n      fireEvent.click(screen.getByLabelText('Last page'))\n\n      expect(screen.queryByText('Item 1')).not.toBeInTheDocument()\n      expect(screen.getByText('Item 21')).toBeInTheDocument()\n      expect(screen.getByText('Item 25')).toBeInTheDocument()\n    })\n\n    it('navigates to specific page by clicking page number', () => {\n      const data = generateMockData(30)\n      render(\n        <PaginatedTable\n          data={data}\n          pageSize={10}\n          tableStructure={mockTableStructure}\n        />,\n      )\n      const page2Button = screen.getByRole('button', { name: '2' })\n      fireEvent.click(page2Button)\n\n      expect(screen.queryByText('Item 1')).not.toBeInTheDocument()\n      expect(screen.getByText('Item 11')).toBeInTheDocument()\n      expect(screen.getByText('Item 20')).toBeInTheDocument()\n    })\n  })\n\n  describe('Page items display', () => {\n    it('shows all pages when total pages <= 7', () => {\n      const data = generateMockData(70)\n      render(\n        <PaginatedTable\n          data={data}\n          pageSize={10}\n          tableStructure={mockTableStructure}\n        />,\n      )\n      expect(screen.getByRole('button', { name: '1' })).toBeInTheDocument()\n      expect(screen.getByRole('button', { name: '7' })).toBeInTheDocument()\n      expect(screen.queryByText('…')).not.toBeInTheDocument()\n    })\n\n    it('shows ellipsis at end when current page <= 4', () => {\n      const data = generateMockData(100)\n      render(\n        <PaginatedTable\n          data={data}\n          pageSize={10}\n          tableStructure={mockTableStructure}\n        />,\n      )\n      expect(screen.getByRole('button', { name: '1' })).toBeInTheDocument()\n      expect(screen.getByRole('button', { name: '5' })).toBeInTheDocument()\n      expect(screen.getByRole('button', { name: '10' })).toBeInTheDocument()\n      expect(screen.getAllByText('…')).toHaveLength(1)\n    })\n\n    it('shows ellipsis at start when current page >= total - 3', () => {\n      const data = generateMockData(100)\n      render(\n        <PaginatedTable\n          data={data}\n          pageSize={10}\n          tableStructure={mockTableStructure}\n        />,\n      )\n      fireEvent.click(screen.getByLabelText('Last page'))\n\n      expect(screen.getByRole('button', { name: '1' })).toBeInTheDocument()\n      expect(screen.getByRole('button', { name: '6' })).toBeInTheDocument()\n      expect(screen.getByRole('button', { name: '10' })).toBeInTheDocument()\n      expect(screen.getAllByText('…')).toHaveLength(1)\n    })\n\n    it('shows ellipsis at both ends when in middle pages', () => {\n      const data = generateMockData(100)\n      render(\n        <PaginatedTable\n          data={data}\n          pageSize={10}\n          tableStructure={mockTableStructure}\n        />,\n      )\n      fireEvent.click(screen.getByRole('button', { name: '5' }))\n\n      expect(screen.getByRole('button', { name: '1' })).toBeInTheDocument()\n      expect(screen.getByRole('button', { name: '3' })).toBeInTheDocument()\n      expect(screen.getByRole('button', { name: '5' })).toBeInTheDocument()\n      expect(screen.getByRole('button', { name: '7' })).toBeInTheDocument()\n      expect(screen.getByRole('button', { name: '10' })).toBeInTheDocument()\n      expect(screen.getAllByText('…')).toHaveLength(2)\n    })\n  })\n\n  describe('Data pagination', () => {\n    it('displays correct data for each page', () => {\n      const data = generateMockData(25)\n      render(\n        <PaginatedTable\n          data={data}\n          pageSize={10}\n          tableStructure={mockTableStructure}\n        />,\n      )\n\n      // Page 1: Items 1-10\n      expect(screen.getByText('Item 1')).toBeInTheDocument()\n      expect(screen.getByText('Item 10')).toBeInTheDocument()\n      expect(screen.queryByText('Item 11')).not.toBeInTheDocument()\n\n      fireEvent.click(screen.getByLabelText('Next page'))\n\n      // Page 2: Items 11-20\n      expect(screen.queryByText('Item 10')).not.toBeInTheDocument()\n      expect(screen.getByText('Item 11')).toBeInTheDocument()\n      expect(screen.getByText('Item 20')).toBeInTheDocument()\n      expect(screen.queryByText('Item 21')).not.toBeInTheDocument()\n\n      fireEvent.click(screen.getByLabelText('Next page'))\n\n      // Page 3: Items 21-25\n      expect(screen.queryByText('Item 20')).not.toBeInTheDocument()\n      expect(screen.getByText('Item 21')).toBeInTheDocument()\n      expect(screen.getByText('Item 25')).toBeInTheDocument()\n    })\n\n    it('uses custom page size', () => {\n      const data = generateMockData(15)\n      render(\n        <PaginatedTable\n          data={data}\n          pageSize={5}\n          tableStructure={mockTableStructure}\n        />,\n      )\n\n      expect(screen.getByText('Item 1')).toBeInTheDocument()\n      expect(screen.getByText('Item 5')).toBeInTheDocument()\n      expect(screen.queryByText('Item 6')).not.toBeInTheDocument()\n    })\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Pagination/Pagination.tsx",
    "content": "import './pagination.scss'\nimport Arrow from '../../images/right-vector.svg'\nimport DoubleArrow from '../../images/double-right-vector.svg'\n\ntype Props = {\n  totalItems: number\n  currentPage: number\n  onPageChange: (page: number) => void\n  siblingCount?: number\n  className?: string\n  pageSize?: number\n  scrollToTop?: number | null\n  showLastPage?: boolean\n}\n\nconst DOTS = '…'\n\nfunction range(start: number, end: number) {\n  const len = end - start + 1\n  return Array.from({ length: len }, (_, i) => i + start)\n}\n\nfunction getPaginationRange({\n  totalItems,\n  siblingCount,\n  currentPage,\n  pageSize,\n  showLastPage = true,\n}: {\n  totalItems: number\n  siblingCount: number\n  currentPage: number\n  pageSize: number\n  showLastPage?: boolean\n}) {\n  const totalPageCount = Math.max(1, Math.ceil(totalItems / pageSize))\n  const totalPageNumbers = siblingCount * 2 + 5\n\n  if (totalPageNumbers >= totalPageCount) {\n    return range(1, totalPageCount)\n  }\n\n  const leftSiblingIndex = Math.max(currentPage - siblingCount, 1)\n  const rightSiblingIndex = Math.min(currentPage + siblingCount, totalPageCount)\n\n  const showLeftDots = leftSiblingIndex > 2\n  const showRightDots = rightSiblingIndex < totalPageCount - 2\n\n  const firstPageIndex = 1\n  const lastPageIndex = totalPageCount\n\n  // If showLastPage is false, don't show the last page or the dots leading to it\n  if (!showLastPage) {\n    if (!showLeftDots) {\n      const leftItemCount = 3 + 2 * siblingCount\n      const leftRange = range(1, leftItemCount)\n      return [...leftRange, DOTS]\n    }\n\n    if (showLeftDots) {\n      const rightRange = range(\n        leftSiblingIndex,\n        Math.min(rightSiblingIndex, totalPageCount),\n      )\n      return [firstPageIndex, DOTS, ...rightRange]\n    }\n\n    return [\n      firstPageIndex,\n      DOTS,\n      ...range(leftSiblingIndex, rightSiblingIndex),\n      DOTS,\n    ]\n  }\n\n  if (!showLeftDots && showRightDots) {\n    const leftItemCount = 3 + 2 * siblingCount\n    const leftRange = range(1, leftItemCount)\n    return [...leftRange, DOTS, lastPageIndex]\n  }\n\n  if (showLeftDots && !showRightDots) {\n    const rightItemCount = 3 + 2 * siblingCount\n    const rightRange = range(lastPageIndex - rightItemCount + 1, lastPageIndex)\n    return [firstPageIndex, DOTS, ...rightRange]\n  }\n\n  return [\n    firstPageIndex,\n    DOTS,\n    ...range(leftSiblingIndex, rightSiblingIndex),\n    DOTS,\n    lastPageIndex,\n  ]\n}\n\nexport const Pagination = ({\n  totalItems,\n  currentPage,\n  onPageChange,\n  siblingCount = 1,\n  className = '',\n  pageSize = 15,\n  scrollToTop = 100,\n  showLastPage = true,\n}: Props) => {\n  const totalPages = Math.max(1, Math.ceil(totalItems / pageSize))\n  if (totalPages <= 1) return null\n\n  const paginationRange = getPaginationRange({\n    totalItems,\n    siblingCount,\n    currentPage,\n    pageSize,\n    showLastPage,\n  })\n\n  const canGoPrev = currentPage > 1\n  const canGoNext = currentPage < totalPages\n\n  const handlePageChange = (page: number) => {\n    onPageChange(page)\n    if (scrollToTop !== null && scrollToTop !== undefined) {\n      window.scrollTo({ top: scrollToTop, behavior: 'auto' })\n    }\n  }\n\n  return (\n    <nav className={`pagination ${className}`} aria-label=\"Pagination\">\n      <button\n        className=\"page-btn\"\n        type=\"button\"\n        onClick={() => canGoPrev && handlePageChange(1)}\n        disabled={!canGoPrev}\n      >\n        <DoubleArrow className=\"prev\" />\n      </button>\n      <button\n        className=\"page-btn\"\n        type=\"button\"\n        onClick={() => canGoPrev && handlePageChange(currentPage - 1)}\n        disabled={!canGoPrev}\n      >\n        <Arrow className=\"prev\" />\n      </button>\n\n      <ul className=\"page-list\">\n        {paginationRange.map((item) => {\n          if (item === DOTS) {\n            return (\n              <li key=\"dots\" className=\"page-ellipsis\">\n                {DOTS}\n              </li>\n            )\n          }\n          const page = item as number\n          return (\n            <li key={page}>\n              <button\n                type=\"button\"\n                className={`page-number ${page === currentPage ? 'active' : ''}`}\n                onClick={() => handlePageChange(page)}\n              >\n                {page}\n              </button>\n            </li>\n          )\n        })}\n      </ul>\n\n      <button\n        className=\"page-btn\"\n        type=\"button\"\n        onClick={() => canGoNext && handlePageChange(currentPage + 1)}\n        disabled={!canGoNext}\n      >\n        <Arrow className=\"next\" />\n      </button>\n      {showLastPage && (\n        <button\n          className=\"page-btn\"\n          type=\"button\"\n          onClick={() => canGoNext && handlePageChange(totalPages)}\n          disabled={!canGoNext}\n        >\n          <DoubleArrow className=\"next\" />\n        </button>\n      )}\n    </nav>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Pagination/index.ts",
    "content": "export * from './Pagination'\n"
  },
  {
    "path": "src/containers/shared/components/Pagination/pagination.scss",
    "content": "@use '../../css/variables.scss' as *;\n\n.pagination {\n  display: flex;\n  align-items: center; /* vertical centering (optional) */\n  justify-content: center; /* horizontal centering */\n  margin: 24px 0;\n  color: $black-50;\n  gap: 8px;\n  user-select: none;\n\n  .page-list {\n    display: flex;\n    padding: 0;\n    margin: 0;\n    list-style: none;\n  }\n\n  .page-number,\n  .page-btn,\n  .page-ellipsis {\n    display: flex;\n    align-items: center;\n    justify-content: center;\n  }\n\n  .page-number,\n  .page-btn {\n    padding: 2px 6px;\n    border: none;\n    background: none;\n    color: $black-50;\n    cursor: pointer;\n    font-size: 14px;\n    opacity: 0.85;\n  }\n\n  .page-number.active {\n    color: $green-30;\n  }\n\n  .page-btn[disabled] {\n    display: none;\n  }\n\n  .page-ellipsis {\n    padding: 0 2px;\n    opacity: 0.6;\n  }\n\n  .page-size {\n    display: inline-flex;\n    align-items: center;\n    margin-right: 8px;\n    gap: 6px;\n    opacity: 0.85;\n  }\n\n  .prev {\n    transform: rotate(180deg);\n    transform-box: fill-box;\n    transform-origin: center;\n  }\n\n  svg {\n    width: 14px;\n    height: 14px;\n  }\n}\n"
  },
  {
    "path": "src/containers/shared/components/ResponsiveTimestamp/ResponsiveTimestamp.tsx",
    "content": "import { FC } from 'react'\nimport { convertRippleDate } from '../../../../rippled/lib/convertRippleDate'\nimport './styles.scss'\n\ninterface ResponsiveTimestampProps {\n  timestamp: number\n  lang: string\n}\n\nexport const ResponsiveTimestamp: FC<ResponsiveTimestampProps> = ({\n  timestamp,\n  lang,\n}) => {\n  const date = new Date(convertRippleDate(timestamp))\n\n  // Desktop format: \"12/15/2023, 10:30:45 AM\"\n  const desktopFormat = date.toLocaleString(lang, {\n    month: '2-digit',\n    day: '2-digit',\n    year: 'numeric',\n    hour: '2-digit',\n    minute: '2-digit',\n    second: '2-digit',\n  })\n\n  // Mobile format: \"12/15/2023 10:30\"\n  const mobileFormat = date.toLocaleString(lang, {\n    month: '2-digit',\n    day: '2-digit',\n    year: 'numeric',\n    hour: '2-digit',\n    minute: '2-digit',\n    hour12: false,\n  })\n\n  return (\n    <div className=\"responsive-timestamp\">\n      <span className=\"desktop-timestamp\">{desktopFormat}</span>\n      <span className=\"mobile-timestamp\">{mobileFormat}</span>\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/ResponsiveTimestamp/index.ts",
    "content": "export { ResponsiveTimestamp } from './ResponsiveTimestamp'\n"
  },
  {
    "path": "src/containers/shared/components/ResponsiveTimestamp/styles.scss",
    "content": "@use '../../css/variables' as *;\n\n.responsive-timestamp {\n  .desktop-timestamp {\n    display: inline;\n\n    @include for-size(phone-only) {\n      display: none;\n    }\n  }\n\n  .mobile-timestamp {\n    display: none;\n\n    @include for-size(phone-only) {\n      display: inline;\n    }\n  }\n}\n"
  },
  {
    "path": "src/containers/shared/components/Sequence.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { FC } from 'react'\nimport { ACCOUNT_ZERO } from '../transactionUtils'\n\ninterface SequenceProps {\n  addContextHelp?: boolean\n  sequence?: number\n  ticketSequence?: number\n  account?: string\n  isHook?: boolean\n}\n\nexport const Sequence: FC<SequenceProps> = ({\n  addContextHelp = false,\n  sequence = 0,\n  ticketSequence = 0,\n  account = '',\n  isHook = false,\n}) => {\n  const { t } = useTranslation()\n  const isPseudoTransaction = account === ACCOUNT_ZERO || account === ''\n\n  function getContext() {\n    if (isHook) {\n      return addContextHelp === true ? t('hook_emitted') : t('hook')\n    }\n    return addContextHelp === true ? t('ticket_used') : t('ticket')\n  }\n\n  return (\n    <span>\n      {sequence === 0 && !isPseudoTransaction ? (\n        <span className=\"row\" data-testid=\"sequence\">\n          {ticketSequence}\n          {' ('}\n          {getContext()})\n        </span>\n      ) : (\n        sequence\n      )}\n    </span>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/SortColumn.tsx",
    "content": "import React from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { useTooltip } from './Tooltip'\nimport ArrowIcon from '../images/down_arrow.svg'\nimport '../css/sort.scss'\nimport HoverIcon from '../images/hover.svg'\n\ntype SortOrder = 'asc' | 'desc'\n\ninterface SortTableProps {\n  field: string\n  label: string\n  sortField: string\n  sortOrder: SortOrder\n  setSortField: (field: string) => void\n  setSortOrder: (order: SortOrder) => void\n  setPage: (page: number) => void\n  tooltip?: boolean\n  alwaysShowArrow?: boolean\n}\n\nconst SortTableColumn: React.FC<SortTableProps> = ({\n  field,\n  label,\n  sortField,\n  sortOrder,\n  setSortField,\n  setSortOrder,\n  setPage,\n  tooltip = false,\n  alwaysShowArrow = false,\n}) => {\n  const { showTooltip, hideTooltip } = useTooltip()\n  const { t } = useTranslation()\n\n  const renderTextTooltip = (key: string, yOffset = 60) => (\n    <HoverIcon\n      className=\"hover\"\n      onMouseOver={(e) => {\n        const rect = e.currentTarget.getBoundingClientRect()\n        showTooltip('text', e, t(`${key}_description`, { defaultValue: '' }), {\n          x: rect.left + rect.width / 2,\n          y: rect.top - yOffset,\n        })\n      }}\n      onMouseLeave={() => hideTooltip()}\n    />\n  )\n\n  const handleClick = () => {\n    if (sortField === field) {\n      setSortOrder(sortOrder === 'asc' ? 'desc' : 'asc')\n    } else {\n      setSortField(field)\n      setSortOrder('desc')\n    }\n    setPage(1)\n  }\n\n  const isActive = sortField === field\n  const showArrow = isActive || alwaysShowArrow\n\n  return (\n    <th\n      className={`${field} ${tooltip ? 'has-tooltip' : ''} ${isActive ? 'active' : ''}`}\n      onClick={handleClick}\n      style={{ cursor: 'pointer' }}\n    >\n      <span className=\"sort-header\">\n        {label}\n        {tooltip && renderTextTooltip(field)}\n        {showArrow && (\n          <ArrowIcon\n            className={`arrow ${isActive && sortOrder === 'asc' ? 'asc' : 'desc'}`}\n          />\n        )}\n      </span>\n    </th>\n  )\n}\n\nexport default SortTableColumn\n"
  },
  {
    "path": "src/containers/shared/components/Streams/StreamsContext.tsx",
    "content": "import { contextFactory } from '../../helpers'\nimport { Ledger, Metrics } from './types'\nimport { StreamValidator } from '../../vhsTypes'\n\nconst [StreamsContext, useStreams] = contextFactory<{\n  metrics: Metrics\n  ledgers: Record<number, Ledger>\n  validators: Record<string, StreamValidator>\n}>({\n  hook: 'useStreams',\n  provider: 'StreamsProvider',\n})\n\nexport { StreamsContext, useStreams }\n"
  },
  {
    "path": "src/containers/shared/components/Streams/StreamsProvider.tsx",
    "content": "import {\n  FC,\n  PropsWithChildren,\n  useContext,\n  useEffect,\n  useMemo,\n  useRef,\n  useState,\n} from 'react'\nimport axios from 'axios'\nimport type { LedgerStream, ValidationStream } from 'xrpl'\nimport { AnyJson } from 'xrpl-client'\nimport { useQuery } from 'react-query'\nimport SocketContext from '../../SocketContext'\nimport { getLedger } from '../../../../rippled/lib/rippled'\nimport { convertRippleDate } from '../../../../rippled/lib/convertRippleDate'\nimport { summarizeLedger } from '../../../../rippled/lib/summarizeLedger'\nimport Log from '../../log'\nimport { getNegativeUNL, getQuorum } from '../../../../rippled'\nimport { XRP_BASE } from '../../transactionUtils'\nimport { StreamsContext } from './StreamsContext'\nimport { Ledger, LedgerHash, RunningMetrics } from './types'\nimport { StreamValidator } from '../../vhsTypes'\n\nconst THROTTLE = 200\nconst MAX_LEDGERS_SHOWN = 50\n\nconst fetchMetrics = () =>\n  axios\n    .get('/api/v1/metrics')\n    .then((result) => result.data)\n    .catch((e) => Log.error(e))\n\nconst fetchNegativeUNL = async (rippledSocket) =>\n  getNegativeUNL(rippledSocket)\n    .then((data) => {\n      if (data === undefined) throw new Error('undefined nUNL')\n\n      return data\n    })\n    .catch((e) => {\n      Log.error(e)\n      return []\n    })\n\nconst fetchQuorum = async (rippledSocket): Promise<string> =>\n  getQuorum(rippledSocket)\n    .then((data) => {\n      if (data === undefined) throw new Error('undefined quorum')\n      return data\n    })\n    .catch((e) => Log.error(e))\n\nconst truncateLedgers = (ledgers: Record<string, Ledger>, count) =>\n  Object.entries(ledgers)\n    .sort((a, b) => parseInt(b[0], 10) - parseInt(a[0], 10))\n    .slice(0, count)\n    .reduce((accumulator, [index, ledger]) => {\n      accumulator[index] = ledger\n      return accumulator\n    }, {})\n\nexport const StreamsProvider: FC<PropsWithChildren> = ({ children }) => {\n  // In custom mode we populate metrics from ledgers loaded into memory\n  const useServerMetrics = process.env.VITE_ENVIRONMENT !== 'custom'\n  const [ledgers, setLedgers] = useState<Record<number, Ledger>>({})\n  const ledgersRef = useRef<Record<number, Ledger>>(ledgers)\n  const firstLedgerRef = useRef<number>(0)\n  const [validators, setValidators] = useState<Record<number, StreamValidator>>(\n    {},\n  )\n  const validationQueue = useRef<ValidationStream[]>([])\n  const socket = useContext(SocketContext)\n\n  // metrics\n  const [runningMetrics, setRunningMetrics] = useState<RunningMetrics>({})\n  const [loadFee, setLoadFee] = useState<string>()\n  const { data: quorum, refetch: refetchQuorum } = useQuery(\n    'quorum',\n    () => fetchQuorum(socket),\n    { enabled: socket.getState().online },\n  )\n  const { data: nUnl, refetch: refetchNUnl } = useQuery<string[]>(\n    'nUnl',\n    () => fetchNegativeUNL(socket),\n    { enabled: socket.getState().online },\n  )\n  const { data: serverRunningMetrics, refetch: refetchServerRunningMetrics } =\n    useQuery<string[]>('runningMetrics', () => fetchMetrics())\n\n  function addLedger(index: number | string) {\n    // Only add new ledgers that are newer than the last one added.\n    Log.trace(`Processing ledger index: ${index}`, 'StreamsProvider.addLedger')\n    if (!firstLedgerRef.current) {\n      firstLedgerRef.current = Number(index)\n    }\n    if (firstLedgerRef.current > Number(index)) {\n      return\n    }\n\n    if (!(index in ledgers)) {\n      setLedgers((previousLedgers) => ({\n        [index]: {\n          index: Number(index),\n          seen: Date.now(),\n          hashes: [],\n          transactions: undefined,\n          txCount: undefined,\n        },\n        ...truncateLedgers(previousLedgers, MAX_LEDGERS_SHOWN - 1),\n      }))\n    }\n  }\n\n  function updateMetrics() {\n    const ledgerChain = Object.values(ledgers)\n      .sort((a, b) => a.index - b.index)\n      .slice(-MAX_LEDGERS_SHOWN)\n\n    let time = 0\n    let fees = 0\n    let timeCount = 0\n    let txCount = 0\n    let txWithFeesCount = 0\n    let ledgerCount = 0\n\n    ledgerChain.forEach((d, i) => {\n      const next = ledgerChain[i + 1]\n      if (next && next.seen && d.seen) {\n        time += next.seen - d.seen\n        timeCount += 1\n      }\n\n      if (d.totalFees) {\n        fees += d.totalFees\n        txWithFeesCount += d.txCount ?? 0\n      }\n      if (d.txCount) {\n        txCount += d.txCount\n      }\n      ledgerCount += 1\n    })\n\n    setRunningMetrics({\n      txn_ledger: ledgerCount ? (txCount / ledgerCount).toFixed(2) : undefined,\n      txn_sec: time ? ((txCount / time) * 1000).toFixed(2) : undefined,\n      avg_fee: txWithFeesCount\n        ? (fees / txWithFeesCount).toPrecision(4)\n        : undefined,\n      ledger_interval: timeCount\n        ? (time / timeCount / 1000).toFixed(3)\n        : undefined,\n    })\n  }\n\n  function onLedger(data: LedgerStream) {\n    Log.trace(\n      `Processing ledger data: ${JSON.stringify(data)}`,\n      'StreamsProvider.onLedger',\n    )\n    if (!ledgersRef.current[data.ledger_index]) {\n      // The ledger closed, but we did not have an existing entry likely because the page just loaded and its\n      // validations came in before we connected to the websocket.\n      addLedger(data.ledger_index)\n    }\n\n    useServerMetrics ? refetchServerRunningMetrics() : updateMetrics()\n\n    setLoadFee((data.fee_base / XRP_BASE).toString())\n\n    // After each flag ledger we should check the UNL and quorum which are correlated and can only update every flag ledger.\n    if (data.ledger_index % 256 === 0 || !quorum) {\n      refetchNUnl()\n      refetchQuorum()\n    }\n\n    // use ledger_hash to fetch the complete ledger info from the rippled server.\n    // other fields (like close_time) can be obtained from the response of the `ledger` RPC.\n    getLedger(socket, { ledger_hash: data.ledger_hash })\n      .then(populateFromLedgerResponse)\n      .catch((error) => {\n        Log.error(error)\n      })\n  }\n\n  const populateFromLedgerResponse = (ledger: any) => {\n    Log.trace(\n      `Processing ledger: ${JSON.stringify(ledger)}`,\n      'StreamsProvider.populateFromLedgerResponse',\n    )\n    const ledgerSummary = summarizeLedger(ledger)\n    let idx: number\n    // legacy rippled clients (prior to v1.12.0) populate `seqNum` field instead of `ledger_index`\n    if (!Number.isNaN(Number(ledgerSummary.ledger_index))) {\n      idx = Number(ledgerSummary.ledger_index)\n    } else {\n      idx = Number(ledger.seqNum)\n    }\n    if (Number.isNaN(idx)) {\n      Log.error(\n        `Unable to typecast ledger-index to number type: ${ledgerSummary.ledger_index}`,\n        'StreamsProvider.populateFromLedgerResponse',\n      )\n      return\n    }\n    setLedgers((previousLedgers) => {\n      const newLedger = Object.assign(previousLedgers[idx] ?? { hashes: [] }, {\n        index: idx,\n        txCount: ledgerSummary.transactions.length,\n        closeTime: convertRippleDate(ledgerSummary.ledger_time),\n        transactions: ledgerSummary.transactions,\n        // Note: Ledger.totalFees is of `number` (primitive javascript) type, whereas ledgerSummary.total_fees is of `Number` type.\n        // Both of these types are compatible with each other: https://stackoverflow.com/questions/67155108/what-is-the-difference-between-number-and-number-in-typescript\n        totalFees: ledgerSummary.total_fees, // fix type\n      })\n      const matchingHashIndex = newLedger?.hashes.findIndex(\n        (hash) => hash.hash === ledgerSummary.ledger_hash,\n      )\n      const matchingHash = newLedger?.hashes[matchingHashIndex]\n      if (matchingHash) {\n        matchingHash.validated = true\n      }\n      if (newLedger && matchingHash) {\n        newLedger.hashes[matchingHashIndex] = {\n          ...matchingHash,\n        }\n      }\n\n      return { ...previousLedgers, [idx]: newLedger }\n    })\n  }\n\n  const onValidation = (data: ValidationStream) => {\n    Log.trace(\n      `Processing validation data: ${JSON.stringify(data)}`,\n      'StreamsProvider.onValidation',\n    )\n    if (!ledgersRef.current[Number(data.ledger_index)]) {\n      addLedger(data.ledger_index)\n    }\n    if (firstLedgerRef.current <= Number(data.ledger_index)) {\n      validationQueue.current.push(data)\n    }\n  }\n\n  // Process validations in chunks to make re-renders more manageable.\n  function processValidationQueue() {\n    Log.trace(\n      `Processing validation queue: ${JSON.stringify(validationQueue.current)}`,\n      'StreamsProvider.processValidationQueue',\n    )\n    setTimeout(processValidationQueue, THROTTLE)\n\n    if (validationQueue.current.length < 1) {\n      return\n    }\n    // copy the queue and clear it, so we aren't adding more while processing\n    const queue = [...validationQueue.current]\n    validationQueue.current = []\n    setLedgers((previousLedgers) => {\n      queue.forEach((validation) => {\n        const ledger = previousLedgers[Number(validation.ledger_index)]\n        const matchingHashIndex = ledger?.hashes.findIndex(\n          (hash) => hash.hash === validation.ledger_hash,\n        )\n        let matchingHash = ledger?.hashes[matchingHashIndex] as LedgerHash\n        if (!matchingHash) {\n          matchingHash = {\n            hash: validation.ledger_hash,\n            unselected: false,\n            validated: false,\n            validations: [],\n            time: convertRippleDate(validation.signing_time),\n            cookie: validation.cookie,\n          }\n          ledger.hashes.push(matchingHash)\n        }\n        matchingHash.validations = [...matchingHash.validations, validation]\n        if (ledger) {\n          ledger.hashes = [...(ledger?.hashes || [])]\n          ledger.hashes[matchingHashIndex] = {\n            ...matchingHash,\n          }\n        }\n      })\n      return { ...previousLedgers }\n    })\n    setValidators((previousValidators) => {\n      const newValidators: any = { ...previousValidators }\n      queue.forEach((validation) => {\n        newValidators[validation.validation_public_key] = {\n          ...previousValidators[validation.validation_public_key],\n          cookie: validation.cookie,\n          ledger_index: Number(validation.ledger_index),\n          ledger_hash: validation.ledger_hash,\n          pubkey: validation.validation_public_key,\n          partial: !validation.full,\n          time: convertRippleDate(validation.signing_time),\n          last: Date.now(),\n        }\n      })\n      return newValidators\n    })\n  }\n\n  useEffect(() => {\n    const interval = setTimeout(processValidationQueue, THROTTLE)\n\n    if (socket) {\n      socket.send({\n        command: 'subscribe',\n        streams: ['ledger', 'validations'],\n      })\n      socket.on('ledger', onLedger as (json: AnyJson) => void)\n      socket.on('validation', onValidation as (json: AnyJson) => void)\n\n      // Load in the most recent validated ledger to prevent the page from being empty until the next validations come in.\n      getLedger(socket, { ledger_index: 'validated' })\n        .then(populateFromLedgerResponse)\n        .catch((error) => {\n          Log.error(error)\n        })\n    }\n\n    return () => {\n      clearTimeout(interval)\n      if (socket) {\n        socket.send({\n          command: 'unsubscribe',\n          streams: ['ledger', 'validations'],\n        })\n        socket.off('ledger', onLedger)\n        socket.off('validation', onValidation)\n      }\n    }\n    // eslint-disable-next-line react-hooks/exhaustive-deps -- this should only run when the socket is connected or disconnected\n  }, [])\n\n  useEffect(() => {\n    ledgersRef.current = ledgers\n  }, [ledgers])\n\n  const value = useMemo(\n    () => ({\n      ledgers,\n      validators,\n      metrics: {\n        ...(useServerMetrics ? serverRunningMetrics : runningMetrics),\n        load_fee: loadFee,\n        quorum,\n        nUnl,\n      },\n    }),\n    [\n      useServerMetrics,\n      ledgers,\n      runningMetrics,\n      serverRunningMetrics,\n      validators,\n      loadFee,\n      quorum,\n      nUnl,\n    ],\n  )\n\n  return (\n    <StreamsContext.Provider value={value}>{children}</StreamsContext.Provider>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Streams/index.ts",
    "content": "export * from './types'\nexport * from './StreamsContext'\nexport * from './StreamsProvider'\n"
  },
  {
    "path": "src/containers/shared/components/Streams/types.ts",
    "content": "import type { ValidationStream } from 'xrpl'\nimport { TransactionSummary } from '../../types'\n\nexport type LedgerValidation = ValidationStream & { partial?: boolean }\n\nexport interface LedgerHash {\n  hash: string\n  validated: boolean\n  unselected: boolean\n  validations: LedgerValidation[]\n  time: number\n  cookie?: string\n}\n\nexport interface Ledger {\n  transactions: TransactionSummary[]\n  index: number\n  hashes: LedgerHash[]\n  seen: number\n  txCount?: number\n  closeTime: number\n  totalFees: number\n}\n\nexport interface RunningMetrics {\n  txn_sec?: string\n  txn_ledger?: string\n  ledger_interval?: string\n  avg_fee?: string\n}\n\nexport interface Metrics extends RunningMetrics {\n  base_fee?: string\n  load_fee?: string\n  nUnl?: string[]\n  quorum?: string\n}\n"
  },
  {
    "path": "src/containers/shared/components/TVLVolumeChart/TVLVolumeChart.tsx",
    "content": "import { FC, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { useWindowSize } from 'usehooks-ts'\nimport { TooltipProps } from 'recharts'\nimport { DualAxisAreaChart, AxisConfig } from '../DualAxisAreaChart'\nimport { Loader } from '../Loader'\nimport { useTooltip } from '../Tooltip'\nimport { parseAmount } from '../../NumberFormattingUtils'\nimport { GREEN_500, PURPLE_500 } from '../../utils'\nimport { CurrencySwitch } from '../CurrencySwitch'\nimport './styles.scss'\n\nexport interface TVLVolumeDataPoint {\n  date: string\n  tvl: number\n  volume: number\n}\n\nexport interface TVLVolumeChartProps {\n  data: TVLVolumeDataPoint[]\n  isLoading: boolean\n  displayCurrency: 'usd' | 'xrp'\n  setDisplayCurrency: (currency: 'usd' | 'xrp') => void\n  onTimeRangeChange: (range: string) => void\n}\n\nconst TIME_RANGES = ['1W', '1M', '6M', '1Y', '5Y'] as const\nconst TVL_COLOR = GREEN_500\nconst VOLUME_COLOR = PURPLE_500\n\nconst formatDateTick = (value: string, timeRange: string): string => {\n  const date = new Date(value)\n  if (timeRange === '5Y') {\n    return date.toLocaleDateString('en-US', {\n      year: '2-digit',\n      timeZone: 'UTC',\n    })\n  }\n  if (timeRange === '1W' || timeRange === '1M') {\n    return date.toLocaleDateString('en-US', {\n      month: 'short',\n      day: 'numeric',\n      timeZone: 'UTC',\n    })\n  }\n  return date.toLocaleDateString('en-US', {\n    month: 'short',\n    year: '2-digit',\n    timeZone: 'UTC',\n  })\n}\n\nconst formatCurrencyTick = (\n  value: number,\n  currencyMode: 'usd' | 'xrp',\n): string => {\n  const prefix = currencyMode === 'usd' ? '$' : ''\n  if (value === 0) {\n    return `${prefix}0`\n  }\n  if (value >= 1000000) {\n    return `${prefix}${(value / 1000000).toFixed(1)}M`\n  }\n  if (value >= 1000) {\n    return `${prefix}${(value / 1000).toFixed(0)}K`\n  }\n  return `${prefix}${value.toFixed(0)}`\n}\n\nexport const TVLVolumeChart: FC<TVLVolumeChartProps> = ({\n  data,\n  isLoading,\n  displayCurrency,\n  setDisplayCurrency,\n  onTimeRangeChange,\n}) => {\n  const { t } = useTranslation()\n  const { showTooltip, hideTooltip } = useTooltip()\n  const { width: windowWidth = 1200 } = useWindowSize()\n  const [timeRange, setTimeRange] = useState<string>('6M')\n  const [showTVL, setShowTVL] = useState(true)\n  const [showVolume, setShowVolume] = useState(true)\n\n  const handleTimeRangeChange = (range: string) => {\n    setTimeRange(range)\n    onTimeRangeChange(range)\n  }\n\n  const isSmallScreen = windowWidth < 600\n  const chartMargin = isSmallScreen\n    ? { top: 10, right: 10, left: 10, bottom: 0 }\n    : { top: 10, right: 50, left: 50, bottom: 0 }\n  const chartTickFontSize = isSmallScreen ? 10 : 13\n\n  const formatTooltipValue = (value: number | string) => {\n    const num = Number(value)\n    const formatted = parseAmount(num)\n    return displayCurrency === 'usd' ? `$${formatted}` : `${formatted} XRP`\n  }\n\n  const renderTooltip = ({\n    active,\n    payload,\n    label,\n  }: TooltipProps<number | string, string>) => {\n    if (active && payload && payload.length > 0) {\n      const date = new Date(label as string)\n      const formattedDate = date.toLocaleDateString('en-US', {\n        month: 'short',\n        day: 'numeric',\n        year: 'numeric',\n        timeZone: 'UTC',\n      })\n      return (\n        <div className=\"chart-tooltip\">\n          <p className=\"tooltip-label\">{formattedDate}</p>\n          {payload.map((entry) => (\n            <p\n              key={`${entry.name}-${entry.dataKey}`}\n              className=\"tooltip-value\"\n              style={{ color: entry.color }}\n            >\n              {entry.name}: {formatTooltipValue(entry.value ?? 0)}\n            </p>\n          ))}\n        </div>\n      )\n    }\n    return null\n  }\n\n  const chartData = data\n\n  const leftAxis: AxisConfig = {\n    dataKey: 'tvl',\n    label: 'TVL',\n    color: TVL_COLOR,\n    formatter: (value: number) => formatCurrencyTick(value, displayCurrency),\n    show: showTVL,\n  }\n\n  const rightAxis: AxisConfig = {\n    dataKey: 'volume',\n    label: 'Volume',\n    color: VOLUME_COLOR,\n    formatter: (value: number) => formatCurrencyTick(value, displayCurrency),\n    show: showVolume,\n  }\n\n  return (\n    <div className=\"tvl-volume-section\">\n      <h2 className=\"chart-section-title\">{t('tvl_and_volume')}</h2>\n\n      {/* Controls row: toggle + checkboxes */}\n      <div className=\"controls\">\n        <CurrencySwitch\n          leftLabel=\"USD\"\n          rightLabel=\"XRP\"\n          selected={displayCurrency === 'usd' ? 'USD' : 'XRP'}\n          onChange={(value) =>\n            setDisplayCurrency(value === 'USD' ? 'usd' : 'xrp')\n          }\n        />\n\n        <label className=\"filter-checkbox\" htmlFor=\"tvl-checkbox\">\n          <input\n            id=\"tvl-checkbox\"\n            type=\"checkbox\"\n            checked={showTVL}\n            onChange={() => setShowTVL(!showTVL)}\n          />\n          <span className=\"checkbox-custom\" />\n          <span>{t('tvl')}</span>\n        </label>\n        <label className=\"filter-checkbox\" htmlFor=\"volume-checkbox\">\n          <input\n            id=\"volume-checkbox\"\n            type=\"checkbox\"\n            checked={showVolume}\n            onChange={() => setShowVolume(!showVolume)}\n          />\n          <span className=\"checkbox-custom\" />\n          <span>{t('volume')}</span>\n        </label>\n      </div>\n\n      <div className=\"tvl-volume-chart-container\">\n        <div className=\"chart-header\">\n          <div className=\"time-filters\">\n            {TIME_RANGES.map((range) => (\n              <button\n                key={range}\n                className={`time-filter ${timeRange === range ? 'active' : ''}`}\n                onClick={() => handleTimeRangeChange(range)}\n                type=\"button\"\n              >\n                {range}\n              </button>\n            ))}\n          </div>\n        </div>\n\n        {isLoading ? (\n          <Loader />\n        ) : (\n          <DualAxisAreaChart\n            data={chartData}\n            xAxisKey=\"date\"\n            xAxisFormatter={(value) => formatDateTick(value, timeRange)}\n            leftAxis={leftAxis}\n            rightAxis={rightAxis}\n            tooltipContent={renderTooltip}\n            margin={chartMargin}\n            tickFontSize={chartTickFontSize}\n          />\n        )}\n\n        <div className=\"chart-legend\">\n          <div\n            className=\"legend-item\"\n            onMouseOver={(e) => {\n              const rect = e.currentTarget.getBoundingClientRect()\n              showTooltip('text', e, t('tvl_tooltip' as any), {\n                x: rect.left + rect.width / 2,\n                y: rect.top - 60,\n              })\n            }}\n            onFocus={() => {}}\n            onMouseLeave={() => hideTooltip()}\n          >\n            <span className=\"legend-color tvl-color\" />\n            <span className=\"legend-text\">{t('tvl')}</span>\n          </div>\n          <div className=\"legend-item\">\n            <span className=\"legend-color volume-color\" />\n            <span className=\"legend-text\">{t('volume')}</span>\n          </div>\n        </div>\n      </div>\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/TVLVolumeChart/index.ts",
    "content": "export { TVLVolumeChart } from './TVLVolumeChart'\n"
  },
  {
    "path": "src/containers/shared/components/TVLVolumeChart/styles.scss",
    "content": "@use '../../css/variables' as *;\n\n$tvl-color: #32e685;\n$volume-color: #7919ff;\n\n.tvl-volume-section {\n  margin-bottom: 50px;\n\n  .chart-section-title {\n    padding-bottom: 0;\n    border-bottom: none;\n    margin: 0 0 16px;\n    color: $white;\n    font-size: 16px;\n    @include bold;\n\n    @include for-size(tablet-portrait-up) {\n      margin: 0 0 20px;\n      font-size: 18px;\n    }\n\n    @include for-size(desktop-up) {\n      font-size: 20px;\n    }\n  }\n\n  // ── Controls row: toggle + checkboxes ──\n  .controls {\n    display: flex;\n    flex-wrap: wrap;\n    align-items: center;\n    margin-bottom: 12px;\n    gap: 16px;\n\n    @include for-size(tablet-portrait-up) {\n      margin-bottom: 16px;\n      gap: 24px;\n    }\n\n    @include for-size(desktop-up) {\n      gap: 42px;\n    }\n  }\n\n  .filter-checkbox {\n    display: flex;\n    align-items: center;\n    color: $white;\n    cursor: pointer;\n    font-size: 14px;\n    gap: 8px;\n    @include medium;\n\n    @include for-size(tablet-portrait-up) {\n      font-size: 16px;\n      gap: 12px;\n    }\n\n    input[type='checkbox'] {\n      display: none;\n    }\n\n    .checkbox-custom {\n      position: relative;\n      display: flex;\n      width: 20px;\n      height: 20px;\n      flex-shrink: 0;\n      align-items: center;\n      justify-content: center;\n      border: 1px solid $green-60;\n      border-radius: 4px;\n      background-color: transparent;\n      transition: all 0.2s;\n\n      @include for-size(desktop-up) {\n        width: 22px;\n        height: 22px;\n      }\n\n      &::after {\n        position: absolute;\n        display: none;\n        width: 5px;\n        height: 10px;\n        border: solid $black-100;\n        border-width: 0 2px 2px 0;\n        margin-top: -2px;\n        content: '';\n        transform: rotate(45deg);\n      }\n    }\n\n    &:hover .checkbox-custom {\n      border-color: $green;\n    }\n\n    input[type='checkbox']:checked + .checkbox-custom {\n      border-color: $blue;\n      background-color: $blue;\n\n      &::after {\n        display: block;\n      }\n    }\n  }\n}\n\n.tvl-volume-chart-container {\n  padding: 16px 12px;\n  border: 1px solid $black-60;\n  border-radius: $border-radius;\n  background-color: $black-80;\n\n  @include for-size(desktop-up) {\n    padding: 32px;\n  }\n\n  .chart-header {\n    display: flex;\n    justify-content: flex-end;\n    margin-bottom: 16px;\n\n    @include for-size(desktop-up) {\n      margin-bottom: 24px;\n    }\n  }\n\n  .time-filters {\n    display: flex;\n    gap: 8px;\n\n    @include for-size(tablet-portrait-up) {\n      gap: 12px;\n    }\n\n    @include for-size(desktop-up) {\n      gap: 16px;\n    }\n\n    .time-filter {\n      display: flex;\n      width: 40px;\n      align-items: center;\n      justify-content: center;\n      padding: 6px;\n      border: 1px solid $black-50;\n      border-radius: $border-radius;\n      background-color: $black;\n      color: $white;\n      cursor: pointer;\n      font-size: 12px;\n      transition: all 0.15s;\n      @include regular;\n\n      @include for-size(tablet-portrait-up) {\n        width: 50px;\n        padding: 8px;\n        font-size: 14px;\n      }\n\n      &:hover {\n        border-color: $black-40;\n        background-color: $black-80;\n      }\n\n      &.active {\n        border-color: $blue;\n        background-color: $blue;\n        color: $white;\n        @include bold;\n      }\n    }\n  }\n\n  .chart-tooltip {\n    padding: 10px 14px;\n    border: 1px solid $black-60;\n    border-radius: $border-radius;\n    background: $black-80;\n\n    .tooltip-label {\n      margin: 0 0 6px;\n      color: $black-40;\n      font-size: 12px;\n    }\n\n    .tooltip-value {\n      margin: 2px 0;\n      font-size: 13px;\n      @include semibold;\n    }\n  }\n\n  .chart-legend {\n    display: flex;\n    justify-content: center;\n    margin-top: 12px;\n    gap: 24px;\n  }\n\n  .legend-item {\n    display: flex;\n    align-items: center;\n    color: $white;\n    font-size: 11px;\n    gap: 6px;\n\n    @include for-size(tablet-portrait-up) {\n      font-size: 13px;\n      gap: 8px;\n    }\n  }\n\n  .legend-color {\n    width: 12px;\n    height: 12px;\n    flex-shrink: 0;\n    border-radius: 3px;\n\n    @include for-size(tablet-portrait-up) {\n      width: 14px;\n      height: 14px;\n    }\n\n    &.tvl-color {\n      background: $tvl-color;\n    }\n\n    &.volume-color {\n      background: $volume-color;\n    }\n  }\n}\n"
  },
  {
    "path": "src/containers/shared/components/TVLVolumeChart/test/TVLVolumeChart.test.tsx",
    "content": "import { render, screen } from '@testing-library/react'\nimport userEvent from '@testing-library/user-event'\nimport { I18nextProvider } from 'react-i18next'\nimport i18n from '../../../../../i18n/testConfig'\nimport { TVLVolumeChart } from '../TVLVolumeChart'\nimport { TooltipProvider } from '../../Tooltip'\n\n// ResizeObserver is not available in jsdom (required by recharts ResponsiveContainer)\nfunction MockResizeObserver() {\n  return { observe: jest.fn(), unobserve: jest.fn(), disconnect: jest.fn() }\n}\nbeforeAll(() => {\n  global.ResizeObserver = MockResizeObserver as unknown as typeof ResizeObserver\n})\n\nconst mockData = [\n  { date: '2026-03-25', tvl: 7000000, volume: 700 },\n  { date: '2026-03-26', tvl: 7100000, volume: 800 },\n  { date: '2026-03-27', tvl: 7200000, volume: 550 },\n]\n\ninterface RenderProps {\n  data?: { date: string; tvl: number; volume: number }[]\n  isLoading?: boolean\n  displayCurrency?: 'usd' | 'xrp'\n  setDisplayCurrency?: (currency: 'usd' | 'xrp') => void\n  onTimeRangeChange?: (range: string) => void\n}\n\nconst renderComponent = ({\n  data = mockData,\n  isLoading = false,\n  displayCurrency = 'usd',\n  setDisplayCurrency = jest.fn(),\n  onTimeRangeChange = jest.fn(),\n}: RenderProps = {}) =>\n  render(\n    <I18nextProvider i18n={i18n}>\n      <TooltipProvider>\n        <TVLVolumeChart\n          data={data}\n          isLoading={isLoading}\n          displayCurrency={displayCurrency}\n          setDisplayCurrency={setDisplayCurrency}\n          onTimeRangeChange={onTimeRangeChange}\n        />\n      </TooltipProvider>\n    </I18nextProvider>,\n  )\n\ndescribe('TVLVolumeChart', () => {\n  it('renders chart section title', () => {\n    renderComponent()\n    expect(screen.getByText('tvl_and_volume')).toBeInTheDocument()\n  })\n\n  it('renders currency toggle labels', () => {\n    renderComponent()\n    expect(screen.getByText('USD')).toBeInTheDocument()\n    expect(screen.getByText('XRP')).toBeInTheDocument()\n  })\n\n  it('renders TVL and Volume checkboxes', () => {\n    renderComponent()\n    const checkboxes = screen.getAllByRole('checkbox')\n    // Toggle + TVL checkbox + Volume checkbox = 3\n    expect(checkboxes.length).toBe(3)\n  })\n\n  it('renders all time range buttons', () => {\n    renderComponent()\n    expect(screen.getByText('1W')).toBeInTheDocument()\n    expect(screen.getByText('1M')).toBeInTheDocument()\n    expect(screen.getByText('6M')).toBeInTheDocument()\n    expect(screen.getByText('1Y')).toBeInTheDocument()\n    expect(screen.getByText('5Y')).toBeInTheDocument()\n  })\n\n  it('calls onTimeRangeChange when a time range button is clicked', async () => {\n    const onTimeRangeChange = jest.fn()\n    renderComponent({ onTimeRangeChange })\n\n    await userEvent.click(screen.getByText('1W'))\n\n    expect(onTimeRangeChange).toHaveBeenCalledWith('1W')\n  })\n\n  it('calls setDisplayCurrency when toggle is clicked', async () => {\n    const setDisplayCurrency = jest.fn()\n    renderComponent({ setDisplayCurrency })\n\n    const toggle = screen.getByLabelText('Toggle currency')\n    await userEvent.click(toggle)\n\n    expect(setDisplayCurrency).toHaveBeenCalledWith('xrp')\n  })\n\n  it('renders chart legend', () => {\n    renderComponent()\n    const legends = document.querySelectorAll('.legend-text')\n    expect(legends.length).toBe(2)\n  })\n\n  it('shows loader when isLoading is true', () => {\n    renderComponent({ isLoading: true, data: [] })\n    expect(screen.getByRole('img', { name: /loading/i })).toBeInTheDocument()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Tabs.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { Link } from 'react-router'\nimport '../css/tabs.scss'\n\ninterface TabConfig {\n  id: string\n  labelKey: string\n  onTabClick?: () => void\n}\n\ninterface Props {\n  path?: string\n  selected: string\n  tabs: string[] | TabConfig[]\n  onTabChange?: (tabId: string) => void\n}\n\nexport const Tabs = ({ tabs, selected, path, onTabChange }: Props) => {\n  const { t } = useTranslation()\n\n  // Normalize tabs to TabConfig format\n  const normalizedTabs: TabConfig[] = tabs.map((tab) => {\n    if (typeof tab === 'string') {\n      return {\n        id: tab,\n        labelKey: tab.replace('-', '_'),\n      }\n    }\n    return tab\n  })\n\n  // If path is provided, use routing-based tabs (original behavior)\n  if (path) {\n    const items = normalizedTabs.map((tab) => {\n      const className = selected === tab.id ? 'tab selected' : 'tab'\n      const title = t(tab.labelKey as any)\n      return (\n        <Link\n          className={className}\n          title={title}\n          key={tab.id}\n          to={`${path}/${tab.id}`}\n        >\n          {title}\n        </Link>\n      )\n    })\n    return <div className=\"tabs\">{items}</div>\n  }\n\n  // Otherwise, use state-based tabs with onTabChange callback\n  const items = normalizedTabs.map((tab) => {\n    const className = selected === tab.id ? 'tab selected' : 'tab'\n    const title = t(tab.labelKey as any)\n    const handleClick = () => {\n      onTabChange?.(tab.id)\n      tab.onTabClick?.()\n    }\n    return (\n      <button\n        className={className}\n        title={title}\n        key={tab.id}\n        onClick={handleClick}\n        type=\"button\"\n      >\n        {title}\n      </button>\n    )\n  })\n  return <div className=\"tabs\">{items}</div>\n}\n"
  },
  {
    "path": "src/containers/shared/components/TokenSearchResults/TokenSearchResults.tsx",
    "content": "import { useContext } from 'react'\nimport './styles.scss'\n\nimport { useTranslation } from 'react-i18next'\nimport axios from 'axios'\nimport { useQuery } from 'react-query'\nimport { useAnalytics } from '../../analytics'\nimport { TokenSearchRow } from './TokenSearchRow'\nimport SocketContext from '../../SocketContext'\nimport Log from '../../log'\nimport { getAccountLines } from '../../../../rippled/lib/rippled'\nimport {\n  FETCH_INTERVAL_XRP_USD_ORACLE_MILLIS,\n  ORACLE_ACCOUNT,\n} from '../../utils'\nimport { LOSToken } from '../../losTypes'\n\ninterface SearchResultsProps {\n  currentSearchValue: string\n  setCurrentSearchInput: (string) => void\n}\n\nconst SearchResults = ({\n  currentSearchValue,\n  setCurrentSearchInput,\n}: SearchResultsProps): JSX.Element | null => {\n  const analytics = useAnalytics()\n  const { t } = useTranslation()\n  const rippledSocket = useContext(SocketContext)\n\n  const { data: XRPUSDPrice = 0.0 } = useQuery(\n    ['fetchXRPToUSDRate'],\n    () => fetchXRPToUSDRate(),\n    {\n      refetchInterval: FETCH_INTERVAL_XRP_USD_ORACLE_MILLIS,\n      onError: (error) => {\n        Log.error(error)\n        return 0.0\n      },\n    },\n  )\n\n  const { data: tokens = [] } = useQuery<LOSToken[]>(\n    ['fetchTokens', currentSearchValue],\n    () => fetchTokens(),\n    {\n      enabled: !!currentSearchValue,\n      staleTime: 0,\n      keepPreviousData: false,\n      onError: (error) => Log.error(error),\n    },\n  )\n\n  const fetchXRPToUSDRate = () =>\n    getAccountLines(rippledSocket, ORACLE_ACCOUNT, 1).then(\n      (accountLines) => accountLines.lines[0]?.limit ?? 0.0,\n    )\n\n  const fetchTokens = () => {\n    if (currentSearchValue === '') {\n      return [] // Return an empty list if search is cleared\n    }\n\n    return axios\n      .get(`/api/v1/tokens/search/${currentSearchValue}`)\n      .then((response) => response.data.tokens)\n  }\n\n  const onLinkClick = () => {\n    analytics.track('token_search_click', {\n      search_category: 'token',\n      search_term: currentSearchValue,\n    })\n\n    // clear current search on navigation\n    setCurrentSearchInput('')\n  }\n\n  return tokens.length > 0 ? (\n    <div className=\"search-results-menu\">\n      <div className=\"search-results-header\">\n        {t('tokens')} ({tokens.length})\n      </div>\n\n      {tokens.map((token) => (\n        <TokenSearchRow\n          token={token}\n          onClick={onLinkClick}\n          xrpPrice={XRPUSDPrice}\n          key={`${token.currency}.${token.issuer_account}`}\n        />\n      ))}\n    </div>\n  ) : null\n}\n\nexport default SearchResults\n"
  },
  {
    "path": "src/containers/shared/components/TokenSearchResults/TokenSearchRow.tsx",
    "content": "import { Link } from 'react-router'\nimport { useTranslation } from 'react-i18next'\nimport { FC } from 'react'\nimport { Amount } from '../Amount'\nimport { localizeNumber } from '../../utils'\nimport Currency from '../Currency'\nimport DomainLink from '../DomainLink'\nimport { LOSToken } from '../../losTypes'\n\nconst parsePrice = (dollarPrice: string, xrpPrice: number): number => {\n  const parsedDollar = Number(dollarPrice)\n  return Number((parsedDollar * xrpPrice).toFixed(6))\n}\n\nconst DEFAULT_VALUE = '--'\n\nconst TokenLogo: FC<{ token: LOSToken }> = ({ token }) =>\n  token && token.icon ? (\n    <object data={token.icon} className=\"result-row-icon\">\n      <div className=\"result-row-icon\" />\n    </object>\n  ) : (\n    <div className=\"result-row-icon no-logo\" />\n  )\n\nconst TokenName: FC<{ token: LOSToken }> = ({ token }) =>\n  token && token.name ? (\n    <div>\n      ({token.name.trim().toUpperCase().replace('(', '').replace(')', '')})\n    </div>\n  ) : null\n\nconst IssuerAddress: FC<{ token: LOSToken; onClick: any }> = ({\n  token,\n  onClick,\n}) =>\n  token && token.issuer_account ? (\n    <Link\n      to={`/accounts/${token.issuer_account}`}\n      onClick={onClick}\n      className=\"issuer-link\"\n    >\n      <div className=\"issuer-name\">\n        {token.issuer_name && `${token.issuer_name} (`}\n      </div>\n      <div className=\"issuer-address truncate\">{token.issuer_account}</div>\n      {token.issuer_name && <div>)</div>}\n    </Link>\n  ) : null\n\ninterface SearchResultRowProps {\n  token: LOSToken\n  onClick: () => void\n  xrpPrice: number\n}\n\nexport const TokenSearchRow = ({\n  token,\n  onClick,\n  xrpPrice,\n}: SearchResultRowProps): JSX.Element => {\n  const { t } = useTranslation()\n\n  return (\n    <Link\n      to={`/token/${token.currency}.${token.issuer_account}`}\n      className=\"search-result-row\"\n      onClick={onClick}\n    >\n      <div className=\"result-name-line\">\n        <div className=\"result-logo\">\n          <TokenLogo token={token} />\n        </div>\n        <div className=\"result-currency\">\n          <Currency currency={token.currency} />\n        </div>\n        <div className=\"result-token-name\">\n          <TokenName token={token} />\n        </div>\n        <div className=\"metric-chip\">\n          {token.price ? (\n            <Amount\n              value={{\n                currency: 'USD',\n                amount: parsePrice(token.price, xrpPrice),\n              }}\n              displayIssuer={false}\n              modifier={\n                parsePrice(token.price, xrpPrice) === 0 ? '~' : undefined\n              }\n            />\n          ) : (\n            <div className=\"no-price\">{DEFAULT_VALUE}</div>\n          )}\n        </div>\n        <div className=\"metric-chip\">\n          {t('holders_count', {\n            holders: localizeNumber(token.holders),\n          })}\n        </div>\n        <div className=\"metric-chip\">\n          {t('trustlines', {\n            trustlines: localizeNumber(token.trustlines),\n          })}\n        </div>\n      </div>\n      <div className=\"result-issuer-line\">\n        <div className=\"issuer-title\">{t('issuer')}:</div>\n        <IssuerAddress token={token} onClick={onClick} />\n      </div>\n      <div className=\"result-website-line\">\n        {token.issuer_domain && (\n          <>\n            <div>{t('website')}:</div>\n            <div className=\"result-domain-link\">\n              <DomainLink domain={token.issuer_domain} keepProtocol={false} />\n            </div>\n          </>\n        )}\n      </div>\n    </Link>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/TokenSearchResults/styles.scss",
    "content": "@use '../../css/variables' as *;\n\n.search-results-menu {\n  position: absolute;\n  z-index: 1;\n  width: 100%;\n  max-height: 400px;\n  border: 1px solid $black-80;\n  border-radius: 8px;\n  border-top: 0px;\n  margin-top: 6px;\n  background-color: $black-100;\n  box-shadow: 2px 2px 15px 0px rgb(131 131 134 / 30%);\n  overflow-wrap: anywhere;\n  overflow-y: scroll;\n  scrollbar-color: $black-50 transparent;\n  scrollbar-width: thin;\n\n  @media (width < 900px) {\n    max-width: calc(100% - 32px);\n  }\n}\n\n.search-results-header {\n  padding: 0.5rem 0rem 0.5rem 1rem;\n  background-color: $black-80;\n  font-size: 14px;\n  font-weight: 500;\n}\n\n.result-row-icon {\n  width: 1.5rem;\n  height: 1.5rem;\n  border-radius: 16px;\n}\n\n.no-logo {\n  border-radius: 50%;\n  background-color: $black-50;\n}\n\n.result-currency {\n  flex-shrink: 0;\n  padding-top: 2px;\n  padding-right: 0px;\n  padding-bottom: 2px;\n  white-space: nowrap;\n}\n\n.result-token-name {\n  padding-top: 2px;\n  padding-bottom: 2px;\n  margin-left: 3px;\n}\n\n.result-logo {\n  padding-right: 14px;\n  padding-left: 1rem;\n}\n\n.search-result-row {\n  position: relative;\n  display: flex;\n  width: 100%;\n  box-sizing: border-box;\n  padding-top: 13px;\n  padding-bottom: 13px;\n  color: $black-0;\n  font-size: 14px;\n  font-weight: 500;\n\n  &:hover {\n    background-color: $black-70;\n    color: $black-0;\n    cursor: pointer;\n  }\n}\n\n.result-name-line {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  margin-bottom: 0.5rem;\n  white-space: nowrap;\n}\n\n.result-issuer-line {\n  display: flex;\n  overflow: hidden;\n  padding: 0 1rem;\n  margin-bottom: 0.5rem;\n  color: $black-50;\n}\n\n.result-website-line {\n  display: flex;\n  flex-direction: row;\n  padding: 0 1rem;\n  color: $black-50;\n}\n\n.metric-chip {\n  padding: 2px 12px;\n  border: 1px solid $black-70;\n  border-radius: 100px;\n  margin-right: 8px;\n  margin-left: 8px;\n  background-color: $black-100;\n  font-size: 12px;\n  font-weight: 600;\n\n  &:hover {\n    background-color: $black-100;\n    cursor: pointer;\n  }\n}\n\n.issuer-link {\n  display: inline-flex !important;\n  overflow: hidden;\n  margin-left: 0.25rem;\n  color: $black-50;\n\n  &:hover {\n    background: transparent;\n    color: $blue-purple-30;\n  }\n}\n\n.issuer-address {\n  @extend %truncate;\n}\n\n.issuer-name,\n.issuer-title {\n  flex-shrink: 0;\n}\n\n.result-domain-link {\n  margin-left: 0.25rem;\n}\n"
  },
  {
    "path": "src/containers/shared/components/TokenSearchResults/test/TokenSearchResults.test.js",
    "content": "import { render, cleanup, waitFor } from '@testing-library/react'\nimport moxios from 'moxios'\nimport i18n from '../../../../../i18n/testConfig'\nimport testTokens from './mock_data/tokens.json'\nimport SocketContext from '../../../SocketContext'\nimport SearchResults from '../TokenSearchResults'\nimport MockWsClient from '../../../../test/mockWsClient'\nimport { QuickHarness, flushPromises } from '../../../../test/utils'\n\nconst testQuery = 'test'\n\ndescribe('Testing tokens search', () => {\n  let client\n\n  const renderSearchResults = () => {\n    const searchURL = `/api/v1/tokens/search/${testQuery}`\n    moxios.stubRequest(searchURL, {\n      status: 200,\n      response: testTokens,\n    })\n    return render(\n      <QuickHarness i18n={i18n}>\n        <SocketContext.Provider value={client}>\n          <SearchResults\n            currentSearchValue={testQuery}\n            setCurrentSearchInput={jest.fn()}\n          />\n        </SocketContext.Provider>\n      </QuickHarness>,\n    )\n  }\n\n  beforeEach(() => {\n    moxios.install()\n    client = new MockWsClient()\n  })\n\n  afterEach(() => {\n    client.close()\n    moxios.uninstall()\n    cleanup()\n  })\n\n  it('renders without crashing', async () => {\n    const { container } = renderSearchResults()\n    await flushPromises()\n\n    await waitFor(() => {\n      expect(container.querySelectorAll('.search-results-menu').length).toEqual(\n        1,\n      )\n    })\n  })\n\n  it('renders all tokens ', async () => {\n    const { container } = renderSearchResults()\n    await flushPromises()\n\n    await waitFor(() => {\n      expect(\n        container.querySelector('.search-results-menu .search-results-header'),\n      ).toBeInTheDocument()\n    })\n\n    const searchMenu = container.querySelector('.search-results-menu')\n\n    expect(searchMenu.querySelector('.search-results-header').outerHTML).toBe(\n      `<div class=\"search-results-header\">tokens (1)</div>`,\n    )\n    expect(searchMenu.querySelector('.currency').outerHTML).toBe(\n      `<span class=\"currency\" data-testid=\"currency\">SOLO</span>`,\n    )\n    expect(searchMenu.querySelector('.issuer-name').outerHTML).toBe(\n      `<div class=\"issuer-name\">Sologenic (</div>`,\n    )\n    expect(searchMenu.querySelector('.issuer-address').outerHTML).toBe(\n      `<div class=\"issuer-address truncate\">rsoLo2S1kiGeCcn6hCUXVrCpGMWLrRrLZz</div>`,\n    )\n    expect(\n      searchMenu\n        .querySelector('.search-result-row')\n        .querySelectorAll('.metric-chip').length,\n    ).toEqual(3)\n    expect(searchMenu.querySelector('.domain').outerHTML).toBe(\n      `<a class=\"domain\" rel=\"noopener noreferrer\" target=\"_blank\" href=\"https://sologenic.com\">sologenic.com</a>`,\n    )\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/TokenSearchResults/test/mock_data/tokens.json",
    "content": "{\n  \"tokens\": [\n    {\n      \"price_change\": -3.31881203079154,\n      \"issuer_name\": \"Sologenic\",\n      \"currency\": \"534F4C4F00000000000000000000000000000000\",\n      \"daily_trades\": \"549\",\n      \"icon\": \"https://s1.xrplmeta.org/icon/C40439709A.png\",\n      \"ttl\": 1755388960,\n      \"social_links\": [],\n      \"name\": \"SOLO\",\n      \"tvl_xrp\": 603524.60505,\n      \"issuer_account\": \"rsoLo2S1kiGeCcn6hCUXVrCpGMWLrRrLZz\",\n      \"market_cap\": \"44282163.354157\",\n      \"holders\": 218547,\n      \"circ_supply\": \"398974338.612327\",\n      \"issuer_domain\": \"sologenic.com\",\n      \"daily_volume\": \"35991.7343289996\",\n      \"supply\": \"398974338.612327\",\n      \"trustlines\": 283772,\n      \"trust_level\": 3,\n      \"price\": \"0.110990003788651\"\n    }\n  ]\n}\n"
  },
  {
    "path": "src/containers/shared/components/TokenTableRow.tsx",
    "content": "export interface TokenTableRowProps {\n  label: string\n  value: any\n}\n\nexport const TokenTableRow = (props: TokenTableRowProps) => {\n  const { label, value } = props\n  return (\n    <tr className=\"row\">\n      <td className=\"col1\">{label}</td>\n      <td className=\"col2\">{value}</td>\n    </tr>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Tooltip/Tooltip.tsx",
    "content": "import { CSSProperties } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport successIcon from '../../images/success.png'\nimport { localizeDate } from '../../utils'\nimport '../../css/tooltip.scss'\nimport { TxStatus } from '../TxStatus'\nimport { TxLabel } from '../TxLabel'\nimport { useLanguage } from '../../hooks'\n\nconst PADDING_Y = 20\nconst DATE_OPTIONS = {\n  hour: 'numeric',\n  minute: 'numeric',\n  second: 'numeric',\n  hour12: true,\n}\n\nexport interface TooltipInstance {\n  data?: any\n  mode: string\n  x: number\n  y: number\n}\n\nexport const Tooltip = ({ tooltip }: { tooltip?: TooltipInstance }) => {\n  const { t } = useTranslation()\n  const language = useLanguage()\n\n  if (!tooltip) {\n    // eslint-disable-next-line react/jsx-no-useless-fragment\n    return <></>\n  }\n\n  const { data } = tooltip\n\n  const renderNegativeUnlTooltip = () =>\n    data.nUnl.map((key) => {\n      const short = key.substring(0, 8)\n      return <div key={key} className={`nUnl: ${key}`}>{`${short}...`}</div>\n    })\n\n  const renderValidatorTooltip = () => {\n    const { v = {}, pubkey, time } = data\n    const key = v.master_key || pubkey\n\n    return (\n      <>\n        <div className=\"domain\">{v.domain}</div>\n        <div className=\"pubkey\">{key}</div>\n        <div className=\"time\">{localizeDate(time, language, DATE_OPTIONS)}</div>\n        {v.unl && (\n          <div className=\"unl\">\n            {v.unl}\n            <img src={successIcon} alt={v.unl} />\n          </div>\n        )}\n      </>\n    )\n  }\n\n  const renderTxTooltip = () => {\n    const { type, result, account } = data\n    return (\n      <>\n        <div className={`tx-type ${type}`}>\n          <TxLabel type={type} /> <TxStatus status={result} shorthand />\n        </div>\n        <div className=\"account\">{account}</div>\n      </>\n    )\n  }\n\n  const renderMissingValidators = () => (\n    <>\n      <div className=\"label\">{t('missing')}:</div>\n      {data.missing.map((d) => (\n        <div className={d.domain ? 'domain' : 'pubkey'} key={d.master_key}>\n          {d.domain || d.master_key}\n        </div>\n      ))}\n    </>\n  )\n\n  const renderNFTId = () => <div className=\"nft\">{data.tokenId}</div>\n\n  const renderMPTId = () => <div className=\"mpt\">{data.tokenId}</div>\n\n  const renderText = () => <div className=\"desc\">{data}</div>\n\n  const { x, y, mode } = tooltip\n  const style: CSSProperties = { top: y + PADDING_Y, left: x }\n  const modeMap = {\n    validator: renderValidatorTooltip,\n    tx: renderTxTooltip,\n    nUnl: renderNegativeUnlTooltip,\n    missing: renderMissingValidators,\n    nftId: renderNFTId,\n    mptId: renderMPTId,\n    text: renderText,\n  }\n\n  return modeMap[mode] ? (\n    <div\n      tabIndex={0}\n      role=\"button\"\n      className={`tooltip tooltip-${mode}`}\n      style={style}\n    >\n      {modeMap[mode]()}\n    </div>\n  ) : null\n}\n"
  },
  {
    "path": "src/containers/shared/components/Tooltip/index.ts",
    "content": "export * from './Tooltip'\nexport * from './useTooltip'\n"
  },
  {
    "path": "src/containers/shared/components/Tooltip/useTooltip.tsx",
    "content": "import {\n  createContext,\n  Dispatch,\n  FC,\n  MouseEvent,\n  PropsWithChildren,\n  SetStateAction,\n  useContext,\n  useMemo,\n  useState,\n} from 'react'\n\nexport interface TooltipContextType {\n  tooltip?: any\n  setTooltip: Dispatch<SetStateAction<any | undefined>>\n  hideTooltip: () => void\n  showTooltip: (\n    mode: string,\n    event: MouseEvent<HTMLElement> | MouseEvent<SVGGElement>,\n    data: any,\n    positionOverride?: { x: number; y: number },\n  ) => void\n}\n\nexport const TooltipContext = createContext<TooltipContextType>({\n  tooltip: undefined,\n  setTooltip: (tt: SetStateAction<any | undefined>) => tt,\n  hideTooltip: () => {},\n  showTooltip: () => {},\n})\n\nexport const TooltipProvider: FC<PropsWithChildren> = ({ children }) => {\n  const [tooltip, setTooltip] = useState<any>()\n  const hideTooltip = () => setTooltip(undefined)\n  const showTooltip = (\n    mode: string,\n    event: MouseEvent<HTMLElement | SVGGElement>,\n    data: any,\n    positionOverride?: { x: number; y: number },\n  ) => {\n    setTooltip({\n      data,\n      mode,\n      x:\n        positionOverride?.x ??\n        (event.currentTarget instanceof HTMLElement\n          ? event.currentTarget.offsetLeft\n          : event.nativeEvent.offsetX),\n      y:\n        positionOverride?.y ??\n        (event.currentTarget instanceof HTMLElement\n          ? event.currentTarget.offsetTop\n          : event.nativeEvent.offsetY),\n    })\n  }\n\n  const tooltipValues = useMemo(\n    () => ({\n      tooltip,\n      setTooltip,\n      hideTooltip,\n      showTooltip,\n    }),\n    [tooltip],\n  )\n\n  return (\n    <TooltipContext.Provider value={tooltipValues}>\n      {children}\n    </TooltipContext.Provider>\n  )\n}\n\nexport const useTooltip = (): TooltipContextType => useContext(TooltipContext)\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/AMMBid/Simple.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { SimpleRow } from '../SimpleRow'\nimport { TransactionSimpleProps } from '../types'\nimport { Account } from '../../Account'\nimport { Amount } from '../../Amount'\n\nexport const Simple = ({ data }: TransactionSimpleProps) => {\n  const { t } = useTranslation()\n  const { ammAccountID, bidMin, bidMax, authAccounts } = data.instructions\n\n  return (\n    <>\n      {ammAccountID && (\n        <SimpleRow label={t('amm_account_id')} data-testid=\"account_id\">\n          <Account account={ammAccountID} />\n        </SimpleRow>\n      )}\n      {bidMin && (\n        <SimpleRow label={t('min_slot_price')} data-testid=\"min_slot_price\">\n          <Amount value={bidMin} />\n        </SimpleRow>\n      )}\n      {bidMax && (\n        <SimpleRow label={t('max_slot_price')} data-testid=\"max_slot_price\">\n          <Amount value={bidMax} />\n        </SimpleRow>\n      )}\n      {authAccounts && (\n        <SimpleRow label={t('auth_accounts')} data-testid=\"auth_accounts\">\n          {authAccounts.map((accID: string) => (\n            <Account account={accID} />\n          ))}\n        </SimpleRow>\n      )}\n    </>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/AMMBid/index.ts",
    "content": "import { Simple } from './Simple'\nimport {\n  TransactionAction,\n  TransactionCategory,\n  TransactionMapping,\n} from '../types'\nimport { parser } from './parser'\n\nexport const AMMBid: TransactionMapping = {\n  Simple,\n  action: TransactionAction.MODIFY,\n  category: TransactionCategory.DEX,\n  parser,\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/AMMBid/parser.ts",
    "content": "import { getAMMAccountID, getAuthAccounts } from '../../../metaParser'\n\nfunction getMinBid(tx: any) {\n  return tx.BidMin\n    ? { currency: 'LP', issuer: tx.BidMin.issuer, amount: tx.BidMin.value }\n    : undefined\n}\n\nfunction getMaxBid(tx: any) {\n  return tx.BidMax\n    ? { currency: 'LP', issuer: tx.BidMax.issuer, amount: tx.BidMax.value }\n    : undefined\n}\n\nexport function parser(tx: any, meta: any) {\n  const ammAccountID = getAMMAccountID(meta)\n  const bidMin = getMinBid(tx)\n  const bidMax = getMaxBid(tx)\n  const authAccounts = getAuthAccounts(tx)\n\n  return {\n    ammAccountID,\n    bidMin,\n    authAccounts,\n    bidMax,\n  }\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/AMMBid/test/AMMBid.test.tsx",
    "content": "import { Simple } from '../Simple'\nimport { createSimpleRenderFactory, expectSimpleRowText } from '../../test'\nimport bidMock from './mock_data/amm_bid.json'\n\ndescribe('AMM Bid Tests', () => {\n  const renderComponent = createSimpleRenderFactory(Simple)\n\n  it('renders from transaction', () => {\n    const { container, unmount } = renderComponent(bidMock)\n    expectSimpleRowText(\n      container,\n      'min_slot_price',\n      '100.00 LP.rMEdVzU8mtEArzjrN9avm3kA675GX7ez8W',\n    )\n    expectSimpleRowText(\n      container,\n      'max_slot_price',\n      '500.00 LP.rMEdVzU8mtEArzjrN9avm3kA675GX7ez8W',\n    )\n    expectSimpleRowText(\n      container,\n      'account_id',\n      'rMEdVzU8mtEArzjrN9avm3kA675GX7ez8W',\n    )\n    expectSimpleRowText(\n      container,\n      'auth_accounts',\n      'ra8uHq2Qme5j19TqvPzTE2nqT12Zc3xJmKrU6o2YguZi847RaiH2QGTkL4eZWZjbxZvk',\n    )\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/AMMBid/test/mock_data/amm_bid.json",
    "content": "{\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"03930D02208264E2E40EC1B0C09E4DB96EE197B1\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"9173773.260640362\"\n            },\n            \"Flags\": 65536,\n            \"HighLimit\": {\n              \"currency\": \"03930D02208264E2E40EC1B0C09E4DB96EE197B1\",\n              \"issuer\": \"rMEdVzU8mtEArzjrN9avm3kA675GX7ez8W\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"03930D02208264E2E40EC1B0C09E4DB96EE197B1\",\n              \"issuer\": \"rUwaiErsYE5kibUUtaPczXZVVd73VNy4R9\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"32951EDAF938635BE23319144E5420B4F2D19E81483B5759F535FEF0730AF797\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"03930D02208264E2E40EC1B0C09E4DB96EE197B1\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"9173965.000290365\"\n            }\n          },\n          \"PreviousTxnID\": \"62969AAF44C876412326B11782FA709851AD400568FD7C329D38D7F94F6E83CD\",\n          \"PreviousTxnLgrSeq\": 318596\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rUwaiErsYE5kibUUtaPczXZVVd73VNy4R9\",\n            \"Balance\": \"991642540761\",\n            \"Flags\": 8388608,\n            \"OwnerCount\": 2,\n            \"Sequence\": 14\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"53383A918D45DEF78DED23CE5141C0FAB44661D602465F5FCFC487792448F1E2\",\n          \"PreviousFields\": {\n            \"Balance\": \"991642540771\",\n            \"Sequence\": 13\n          },\n          \"PreviousTxnID\": \"62969AAF44C876412326B11782FA709851AD400568FD7C329D38D7F94F6E83CD\",\n          \"PreviousTxnLgrSeq\": 318596\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rMEdVzU8mtEArzjrN9avm3kA675GX7ez8W\",\n            \"Asset\": {\n              \"currency\": \"XRP\"\n            },\n            \"Asset2\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rhpHaFggC92ELty3n3yDEtuFgWxXWkUFET\"\n            },\n            \"AuctionSlot\": {\n              \"Account\": \"rUwaiErsYE5kibUUtaPczXZVVd73VNy4R9\",\n              \"DiscountedFee\": 0,\n              \"Expiration\": 723254240,\n              \"Price\": {\n                \"currency\": \"03930D02208264E2E40EC1B0C09E4DB96EE197B1\",\n                \"issuer\": \"rMEdVzU8mtEArzjrN9avm3kA675GX7ez8W\",\n                \"value\": \"191.7396500029036\"\n              }\n            },\n            \"Flags\": 0,\n            \"LPTokenBalance\": {\n              \"currency\": \"03930D02208264E2E40EC1B0C09E4DB96EE197B1\",\n              \"issuer\": \"rMEdVzU8mtEArzjrN9avm3kA675GX7ez8W\",\n              \"value\": \"19173773.26064036\"\n            },\n            \"TradingFee\": 0\n          },\n          \"LedgerEntryType\": \"AMM\",\n          \"LedgerIndex\": \"C7FD06649235AF4CABD8FA6D8BB0CAF6C6EA5038A74D0DDD5025290683636D02\",\n          \"PreviousFields\": {\n            \"LPTokenBalance\": {\n              \"currency\": \"03930D02208264E2E40EC1B0C09E4DB96EE197B1\",\n              \"issuer\": \"rMEdVzU8mtEArzjrN9avm3kA675GX7ez8W\",\n              \"value\": \"19173965.00029036\"\n            }\n          }\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tesSUCCESS\"\n  },\n  \"tx\": {\n    \"Account\": \"rUwaiErsYE5kibUUtaPczXZVVd73VNy4R9\",\n    \"Asset\": {\n      \"currency\": \"XRP\"\n    },\n    \"Asset2\": {\n      \"currency\": \"USD\",\n      \"issuer\": \"rhpHaFggC92ELty3n3yDEtuFgWxXWkUFET\"\n    },\n    \"BidMin\": {\n      \"currency\": \"03930D02208264E2E40EC1B0C09E4DB96EE197B1\",\n      \"issuer\": \"rMEdVzU8mtEArzjrN9avm3kA675GX7ez8W\",\n      \"value\": \"100\"\n    },\n    \"BidMax\": {\n      \"currency\": \"03930D02208264E2E40EC1B0C09E4DB96EE197B1\",\n      \"issuer\": \"rMEdVzU8mtEArzjrN9avm3kA675GX7ez8W\",\n      \"value\": \"500\"\n    },\n    \"AuthAccounts\": [\n      {\n        \"AuthAccount\": {\n          \"Account\": \"ra8uHq2Qme5j19TqvPzTE2nqT12Zc3xJmK\"\n        }\n      },\n      {\n        \"AuthAccount\": {\n          \"Account\": \"rU6o2YguZi847RaiH2QGTkL4eZWZjbxZvk\"\n        }\n      }\n    ],\n    \"Fee\": \"10\",\n    \"Flags\": 0,\n    \"Sequence\": 13,\n    \"SigningPubKey\": \"023CFED4018084296285DD8A321C099134B9CF6DCD8D91DC067BABCFF0E3F2BE1A\",\n    \"TransactionType\": \"AMMBid\",\n    \"TxnSignature\": \"3045022100A808321D7E4532354ECD848050B2BBB49978B0E96E3048E5EBD95C4CD05A4DF9022037796FC79058C7F4940AE5B0DE8D5A3B8561098621AA01FD36845FF4F1F1BF9F\",\n    \"date\": \"2022-11-30T23:57:21Z\"\n  }\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/AMMClawback/Simple.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { TransactionSimpleProps } from '../types'\nimport { SimpleRow } from '../SimpleRow'\nimport { Account } from '../../Account'\nimport { Amount } from '../../Amount'\n\nexport const Simple = ({ data }: TransactionSimpleProps) => {\n  const { t } = useTranslation()\n  const { amount2, amount, holder } = data.instructions\n  return (\n    <>\n      <SimpleRow label={t('holder')} data-testid=\"holder\">\n        <Account account={holder} />\n      </SimpleRow>\n      {amount && (\n        <SimpleRow label={t('asset1')} data-testid=\"asset1\">\n          <Amount value={amount} displayIssuer />\n        </SimpleRow>\n      )}\n      {amount2 && (\n        <SimpleRow label={t('asset2')} data-testid=\"asset2\">\n          <Amount value={amount2} displayIssuer />\n        </SimpleRow>\n      )}\n    </>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/AMMClawback/TableDetail.tsx",
    "content": "import { Trans, useTranslation } from 'react-i18next'\nimport { Amount } from '../../Amount'\nimport { Account } from '../../Account'\nimport { TransactionTableDetailProps } from '../types'\n\nexport const TableDetail = ({ instructions }: TransactionTableDetailProps) => {\n  const { t } = useTranslation()\n  const { amount2, amount, holder } = instructions\n  if (amount2) {\n    return (\n      <div className=\"amm-clawback\">\n        <Trans i18nKey=\"action_from_and\">\n          <span className=\"label\">{t('claws_back')}</span>\n          <Amount value={amount} displayIssuer />\n          and\n          <Amount value={amount2} displayIssuer />\n          from\n          <Account account={holder} />\n        </Trans>\n      </div>\n    )\n  }\n  return (\n    <div className=\"amm-clawback\">\n      <Trans i18nKey=\"action_from\">\n        <span className=\"label\">{t('claws_back')}</span>\n        <Amount value={amount} displayIssuer />\n        from\n        <Account account={holder} />\n      </Trans>\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/AMMClawback/index.ts",
    "content": "import { Simple } from './Simple'\nimport {\n  TransactionAction,\n  TransactionCategory,\n  TransactionMapping,\n} from '../types'\nimport { parser } from './parser'\nimport { TableDetail } from './TableDetail'\n\nexport const AMMClawback: TransactionMapping = {\n  TableDetail,\n  Simple,\n  action: TransactionAction.CANCEL,\n  category: TransactionCategory.DEX,\n  parser,\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/AMMClawback/parser.ts",
    "content": "import type { AMMClawback } from 'xrpl'\nimport { findAssetAmount } from '../../../metaParser'\n\nexport function parser(tx: AMMClawback, meta: any) {\n  const account = tx.Account\n  const holder = tx.Holder\n  const amount = findAssetAmount(meta, tx.Asset, tx)\n  if (tx.Flags) {\n    // @ts-expect-error - MPT is not being supported for AMM transactions until https://github.com/XRPLF/rippled/pull/5285 is merged\n    const amount2 = findAssetAmount(meta, tx.Asset2, tx)\n    return {\n      amount,\n      account,\n      amount2,\n      holder,\n    }\n  }\n  return {\n    amount,\n    account,\n    holder,\n  }\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/AMMClawback/test/AMMClawbackSimple.test.tsx",
    "content": "import { expectSimpleRowNotToExist, expectSimpleRowText } from '../../test'\n\nimport { createSimpleRenderFactory } from '../../test/createWrapperFactory'\nimport { Simple } from '../Simple'\nimport mockAMMClawbackNoFlag from './mock_data/withoutFlag.json'\nimport mockAMMClawbackWithAmount from './mock_data/withAmount.json'\nimport mockAMMClawbackWithFlag from './mock_data/withFlag.json'\n\nconst renderSimple = createSimpleRenderFactory(Simple)\n\ndescribe('AMMClawback: Simple', () => {\n  it('renders without tfClawTwoAssets flag, only one asset should be clawed back', () => {\n    const { container } = renderSimple(mockAMMClawbackNoFlag)\n    expectSimpleRowText(\n      container,\n      'asset1',\n      '$260.00 USD.rGGjMesMUrRMP8ZkLZ2cZ5agzmFwBfT4f2',\n    )\n    expectSimpleRowNotToExist(container, 'asset2')\n    expectSimpleRowText(\n      container,\n      'holder',\n      'rJk5n4egp7Th4Y4vxAMVAbf1ziuiFuVKiw',\n    )\n  })\n\n  it('renders with tfClawTwoAssets flag, both asset should be clawed back', () => {\n    const { container } = renderSimple(mockAMMClawbackWithFlag)\n    expectSimpleRowText(\n      container,\n      'asset1',\n      '$260.00 USD.rUuVtbgagFKjHPTxmN639XYVHLATnB6VNk',\n    )\n    expectSimpleRowText(\n      container,\n      'asset2',\n      '100.00 YEN.rUuVtbgagFKjHPTxmN639XYVHLATnB6VNk',\n    )\n    expectSimpleRowText(\n      container,\n      'holder',\n      'r4eWC5DixP74dpk7FDzXcap1BJ2NaoUeZN',\n    )\n  })\n\n  it('renders with Amount set', () => {\n    const { container } = renderSimple(mockAMMClawbackWithAmount)\n    expectSimpleRowText(\n      container,\n      'asset1',\n      '$20.00 USD.rK2Du3gUmFbg5UFFHFq9LKywVuGbqNsyyi',\n    )\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/AMMClawback/test/AMMClawbackTableDetail.test.tsx",
    "content": "import { createTableDetailRenderFactory } from '../../test'\nimport { TableDetail } from '../TableDetail'\nimport AMMClawbackNoFlag from './mock_data/withoutFlag.json'\nimport AMMClawbackWithFlag from './mock_data/withFlag.json'\nimport mockAMMClawbackWithAmount from './mock_data/withAmount.json'\n\nconst renderComponent = createTableDetailRenderFactory(TableDetail)\n\ndescribe('AMMClawback: TableDetail', () => {\n  it('renders without tfClawTwoAssets flag, only one asset should be clawed back', () => {\n    const { container, unmount } = renderComponent(AMMClawbackNoFlag)\n    expect(container).toHaveTextContent(\n      'claws_back' +\n        '$260.00 USD.rGGjMesMUrRMP8ZkLZ2cZ5agzmFwBfT4f2' +\n        'from' +\n        'rJk5n4egp7Th4Y4vxAMVAbf1ziuiFuVKiw',\n    )\n    unmount()\n  })\n\n  it('renders without tfClawTwoAssets flag, both assets should be clawed back', () => {\n    const { container, unmount } = renderComponent(AMMClawbackWithFlag)\n    expect(container).toHaveTextContent(\n      'claws_back' +\n        '$260.00 USD.rUuVtbgagFKjHPTxmN639XYVHLATnB6VNk' +\n        'and' +\n        '100.00 YEN.rUuVtbgagFKjHPTxmN639XYVHLATnB6VNk' +\n        'from' +\n        'r4eWC5DixP74dpk7FDzXcap1BJ2NaoUeZN',\n    )\n    unmount()\n  })\n\n  it('renders with Amount set', () => {\n    const { container, unmount } = renderComponent(mockAMMClawbackWithAmount)\n    expect(container).toHaveTextContent(\n      'claws_back' +\n        '$20.00 USD.rK2Du3gUmFbg5UFFHFq9LKywVuGbqNsyyi' +\n        'from' +\n        'rJbLyxGA3jvwrFmiouADLHMKaBQn46SVZi',\n    )\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/AMMClawback/test/mock_data/withAmount.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rK2Du3gUmFbg5UFFHFq9LKywVuGbqNsyyi\",\n    \"Amount\": {\n      \"currency\": \"USD\",\n      \"issuer\": \"rK2Du3gUmFbg5UFFHFq9LKywVuGbqNsyyi\",\n      \"value\": \"20\"\n    },\n    \"Asset\": {\n      \"currency\": \"USD\",\n      \"issuer\": \"rK2Du3gUmFbg5UFFHFq9LKywVuGbqNsyyi\"\n    },\n    \"Asset2\": {\n      \"currency\": \"XRP\"\n    },\n    \"Fee\": \"12\",\n    \"Flags\": 0,\n    \"Holder\": \"rJbLyxGA3jvwrFmiouADLHMKaBQn46SVZi\",\n    \"LastLedgerSequence\": 230970,\n    \"Sequence\": 230944,\n    \"SigningPubKey\": \"ED723B12E122AA8FCD9C627C47F086F03F3A159694F95704B3B10600CE51D9FD08\",\n    \"TransactionType\": \"AMMClawback\",\n    \"TxnSignature\": \"1114A1D07FDAEE942023DB1CE24434AD9E2D3FE35CDB7F7AD4D997B476BD615DB4C6853B689802070C420D9AF7D58761A3D0C88226C61DE636E074B35C520C0A\",\n    \"ctid\": \"C003862800200002\",\n    \"date\": 1739312961000\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rK2Du3gUmFbg5UFFHFq9LKywVuGbqNsyyi\",\n            \"Balance\": \"99999952\",\n            \"Flags\": 2155872256,\n            \"OwnerCount\": 0,\n            \"Sequence\": 230945\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"0DBF627C1E345907877801F17D8600F6070488B4E11A25EF91ED80F9B4C47023\",\n          \"PreviousFields\": {\n            \"Balance\": \"99999964\",\n            \"Sequence\": 230944\n          },\n          \"PreviousTxnID\": \"68DEA274DFA1E2D8540BF40B12EA882901EF7049DF562F507187D8FFD52CD56A\",\n          \"PreviousTxnLgrSeq\": 230949\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"240.0000000000002\"\n            },\n            \"Flags\": 16842752,\n            \"HighLimit\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rK2Du3gUmFbg5UFFHFq9LKywVuGbqNsyyi\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"ravwv8VvsaoXuHsjaKZLd5C84X2x79sr8T\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"26DD7487583BF2BCA6CD8BCBD140CF7CD1C1AA06068BB199534F7CCD47438F23\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"260.0000000000002\"\n            }\n          },\n          \"PreviousTxnID\": \"168EDD75D0A5C349960557C7C5613100389C1FE9544E8A83767F7EA17D8EEACA\",\n          \"PreviousTxnLgrSeq\": 230950\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rJbLyxGA3jvwrFmiouADLHMKaBQn46SVZi\",\n            \"Balance\": \"99799745\",\n            \"Flags\": 0,\n            \"OwnerCount\": 2,\n            \"Sequence\": 230943\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"2FB4D2B26B9F16855220BC46B06193724A666FA45F58AC404F1C253B1CC47C23\",\n          \"PreviousFields\": {\n            \"Balance\": \"99799726\"\n          },\n          \"PreviousTxnID\": \"168EDD75D0A5C349960557C7C5613100389C1FE9544E8A83767F7EA17D8EEACA\",\n          \"PreviousTxnLgrSeq\": 230950\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"ravwv8VvsaoXuHsjaKZLd5C84X2x79sr8T\",\n            \"Asset\": {\n              \"currency\": \"XRP\"\n            },\n            \"Asset2\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rK2Du3gUmFbg5UFFHFq9LKywVuGbqNsyyi\"\n            },\n            \"AuctionSlot\": {\n              \"Account\": \"rJbLyxGA3jvwrFmiouADLHMKaBQn46SVZi\",\n              \"DiscountedFee\": 1,\n              \"Expiration\": 792714550,\n              \"Price\": {\n                \"currency\": \"03930D02208264E2E40EC1B0C09E4DB96EE197B1\",\n                \"issuer\": \"ravwv8VvsaoXuHsjaKZLd5C84X2x79sr8T\",\n                \"value\": \"0\"\n              }\n            },\n            \"Flags\": 0,\n            \"LPTokenBalance\": {\n              \"currency\": \"03930D02208264E2E40EC1B0C09E4DB96EE197B1\",\n              \"issuer\": \"ravwv8VvsaoXuHsjaKZLd5C84X2x79sr8T\",\n              \"value\": \"235.3393393150508\"\n            },\n            \"OwnerNode\": \"0\",\n            \"TradingFee\": 12,\n            \"VoteSlots\": [\n              {\n                \"VoteEntry\": {\n                  \"Account\": \"rJbLyxGA3jvwrFmiouADLHMKaBQn46SVZi\",\n                  \"TradingFee\": 12,\n                  \"VoteWeight\": 100000\n                }\n              }\n            ]\n          },\n          \"LedgerEntryType\": \"AMM\",\n          \"LedgerIndex\": \"4B82C6834CF2DF6320763766BB21A9D62DD02752F9F8FDDABC394E7584BDAD4A\",\n          \"PreviousFields\": {\n            \"LPTokenBalance\": {\n              \"currency\": \"03930D02208264E2E40EC1B0C09E4DB96EE197B1\",\n              \"issuer\": \"ravwv8VvsaoXuHsjaKZLd5C84X2x79sr8T\",\n              \"value\": \"254.9509509246383\"\n            }\n          },\n          \"PreviousTxnID\": \"168EDD75D0A5C349960557C7C5613100389C1FE9544E8A83767F7EA17D8EEACA\",\n          \"PreviousTxnLgrSeq\": 230950\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"03930D02208264E2E40EC1B0C09E4DB96EE197B1\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-235.3393393150508\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"03930D02208264E2E40EC1B0C09E4DB96EE197B1\",\n              \"issuer\": \"rJbLyxGA3jvwrFmiouADLHMKaBQn46SVZi\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"03930D02208264E2E40EC1B0C09E4DB96EE197B1\",\n              \"issuer\": \"ravwv8VvsaoXuHsjaKZLd5C84X2x79sr8T\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"C27E27B4CC4E229B6DC3027C7F05E31EE4F311C05120B83165DE838968BEFAF6\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"03930D02208264E2E40EC1B0C09E4DB96EE197B1\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-254.9509509246383\"\n            }\n          },\n          \"PreviousTxnID\": \"168EDD75D0A5C349960557C7C5613100389C1FE9544E8A83767F7EA17D8EEACA\",\n          \"PreviousTxnLgrSeq\": 230950\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"AMMID\": \"4B82C6834CF2DF6320763766BB21A9D62DD02752F9F8FDDABC394E7584BDAD4A\",\n            \"Account\": \"ravwv8VvsaoXuHsjaKZLd5C84X2x79sr8T\",\n            \"Balance\": \"231\",\n            \"Flags\": 26214400,\n            \"OwnerCount\": 1,\n            \"Sequence\": 230949\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"F4EEAB09F9EC00FEE9B8C3C7434EB140F57348564A46B0A5E161C7C49051BFFD\",\n          \"PreviousFields\": {\n            \"Balance\": \"250\"\n          },\n          \"PreviousTxnID\": \"68DEA274DFA1E2D8540BF40B12EA882901EF7049DF562F507187D8FFD52CD56A\",\n          \"PreviousTxnLgrSeq\": 230949\n        }\n      }\n    ],\n    \"TransactionIndex\": 32,\n    \"TransactionResult\": \"tesSUCCESS\"\n  },\n  \"hash\": \"4C8C11648764ADF0D64020081600739760771C3510862272A86551C70FCC38D1\",\n  \"ledger_index\": 230952,\n  \"date\": 1739312961000\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/AMMClawback/test/mock_data/withFlag.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rUuVtbgagFKjHPTxmN639XYVHLATnB6VNk\",\n    \"Asset\": {\n      \"currency\": \"USD\",\n      \"issuer\": \"rUuVtbgagFKjHPTxmN639XYVHLATnB6VNk\"\n    },\n    \"Asset2\": {\n      \"currency\": \"YEN\",\n      \"issuer\": \"rUuVtbgagFKjHPTxmN639XYVHLATnB6VNk\"\n    },\n    \"Fee\": \"12\",\n    \"Flags\": 1,\n    \"Holder\": \"r4eWC5DixP74dpk7FDzXcap1BJ2NaoUeZN\",\n    \"LastLedgerSequence\": 254460,\n    \"Sequence\": 254428,\n    \"SigningPubKey\": \"ED7FBCDEF465DF8D6D25B50EDF4B10ECB4A50C15B4A7F5EE49437DD17B5B67E39B\",\n    \"TransactionType\": \"AMMClawback\",\n    \"TxnSignature\": \"19846DD492CD9F914333DA06CE17545A8447BDC5F0191F76ABDDEFFECA2261E9A75861D66578AF83569B254D6303C475F92DB84B9C4979EE8C0F20AFAD405304\",\n    \"ctid\": \"C003E1EA00000002\",\n    \"date\": 1739385880000\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rUuVtbgagFKjHPTxmN639XYVHLATnB6VNk\",\n            \"Balance\": \"99999940\",\n            \"Flags\": 2155872256,\n            \"OwnerCount\": 0,\n            \"Sequence\": 254429\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"49648B64B65B612D89AA414A3C352400A3B38DE891D551C7103E4C439F0270FE\",\n          \"PreviousFields\": {\n            \"Balance\": \"99999952\",\n            \"Sequence\": 254428\n          },\n          \"PreviousTxnID\": \"60DC4B0DCF3364F490974C0F8BF4ECB98F06E7679B21BD0EBF04EE54E3A8370D\",\n          \"PreviousTxnLgrSeq\": 254438\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rVABxFmKqgaamoxhyajfU26NSQhM1GSVT\",\n            \"Asset\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rUuVtbgagFKjHPTxmN639XYVHLATnB6VNk\"\n            },\n            \"Asset2\": {\n              \"currency\": \"YEN\",\n              \"issuer\": \"rUuVtbgagFKjHPTxmN639XYVHLATnB6VNk\"\n            },\n            \"AuctionSlot\": {\n              \"Account\": \"r4eWC5DixP74dpk7FDzXcap1BJ2NaoUeZN\",\n              \"DiscountedFee\": 1,\n              \"Expiration\": 792787462,\n              \"Price\": {\n                \"currency\": \"0347228E34D1F45F1527508854B97B9CEC898B99\",\n                \"issuer\": \"rVABxFmKqgaamoxhyajfU26NSQhM1GSVT\",\n                \"value\": \"0\"\n              }\n            },\n            \"Flags\": 0,\n            \"LPTokenBalance\": {\n              \"currency\": \"0347228E34D1F45F1527508854B97B9CEC898B99\",\n              \"issuer\": \"rVABxFmKqgaamoxhyajfU26NSQhM1GSVT\",\n              \"value\": \"161.2451393095337\"\n            },\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"BD39A86341D8E00E6E989C7D60E6D03D195E90E3552E76D5701CBF0B4172FA1A\",\n            \"PreviousTxnLgrSeq\": 254440,\n            \"TradingFee\": 12,\n            \"VoteSlots\": [\n              {\n                \"VoteEntry\": {\n                  \"Account\": \"r4eWC5DixP74dpk7FDzXcap1BJ2NaoUeZN\",\n                  \"TradingFee\": 12,\n                  \"VoteWeight\": 100000\n                }\n              }\n            ]\n          },\n          \"LedgerEntryType\": \"AMM\",\n          \"LedgerIndex\": \"6E934944DA277E595B306225B71DF2B43BF957AF5BA0812B273B61221EEFF459\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"AMMID\": \"6E934944DA277E595B306225B71DF2B43BF957AF5BA0812B273B61221EEFF459\",\n            \"Account\": \"rVABxFmKqgaamoxhyajfU26NSQhM1GSVT\",\n            \"Balance\": \"0\",\n            \"Flags\": 26214400,\n            \"OwnerCount\": 0,\n            \"PreviousTxnID\": \"60DC4B0DCF3364F490974C0F8BF4ECB98F06E7679B21BD0EBF04EE54E3A8370D\",\n            \"PreviousTxnLgrSeq\": 254438,\n            \"Sequence\": 254438\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"7D4B3E5DB6FA1A916E314C9F2150249DF0F70F6B83A714F990598A92DC054CC5\",\n          \"PreviousFields\": {\n            \"OwnerCount\": 2\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r4eWC5DixP74dpk7FDzXcap1BJ2NaoUeZN\",\n            \"Balance\": \"99799964\",\n            \"Flags\": 0,\n            \"OwnerCount\": 2,\n            \"Sequence\": 254426\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"83B3EFF4EEF419DABDA36AF86D2B1F6C4BA787EA6398E461E6AEE1EC0FDAEF14\",\n          \"PreviousFields\": {\n            \"OwnerCount\": 3\n          },\n          \"PreviousTxnID\": \"BD39A86341D8E00E6E989C7D60E6D03D195E90E3552E76D5701CBF0B4172FA1A\",\n          \"PreviousTxnLgrSeq\": 254440\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 16777216,\n            \"HighLimit\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rUuVtbgagFKjHPTxmN639XYVHLATnB6VNk\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rVABxFmKqgaamoxhyajfU26NSQhM1GSVT\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"0\",\n            \"PreviousTxnID\": \"BD39A86341D8E00E6E989C7D60E6D03D195E90E3552E76D5701CBF0B4172FA1A\",\n            \"PreviousTxnLgrSeq\": 254440\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"971E4A160386760AC1AD94A2711C75E6954F915C5A781640A11BBDCAC8D56A29\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"260\"\n            },\n            \"Flags\": 16842752\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"YEN\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 16777216,\n            \"HighLimit\": {\n              \"currency\": \"YEN\",\n              \"issuer\": \"rUuVtbgagFKjHPTxmN639XYVHLATnB6VNk\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"YEN\",\n              \"issuer\": \"rVABxFmKqgaamoxhyajfU26NSQhM1GSVT\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"0\",\n            \"PreviousTxnID\": \"60DC4B0DCF3364F490974C0F8BF4ECB98F06E7679B21BD0EBF04EE54E3A8370D\",\n            \"PreviousTxnLgrSeq\": 254438\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"98F5AFE3DF8C6BCC07F2EF6AA76CA1CA49389C4FB5F0D5E1AB31FD0410891538\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"YEN\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"100\"\n            },\n            \"Flags\": 16842752\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"0347228E34D1F45F1527508854B97B9CEC898B99\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2097152,\n            \"HighLimit\": {\n              \"currency\": \"0347228E34D1F45F1527508854B97B9CEC898B99\",\n              \"issuer\": \"r4eWC5DixP74dpk7FDzXcap1BJ2NaoUeZN\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"0347228E34D1F45F1527508854B97B9CEC898B99\",\n              \"issuer\": \"rVABxFmKqgaamoxhyajfU26NSQhM1GSVT\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"0\",\n            \"PreviousTxnID\": \"BD39A86341D8E00E6E989C7D60E6D03D195E90E3552E76D5701CBF0B4172FA1A\",\n            \"PreviousTxnLgrSeq\": 254440\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"A9CD2BD0E3FEF8B6315D81D1BECFCC2D4D61C2AC0FEDE0068F2518D11B46ECB4\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"0347228E34D1F45F1527508854B97B9CEC898B99\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-161.2451393095337\"\n            },\n            \"Flags\": 2228224\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rVABxFmKqgaamoxhyajfU26NSQhM1GSVT\",\n            \"PreviousTxnID\": \"60DC4B0DCF3364F490974C0F8BF4ECB98F06E7679B21BD0EBF04EE54E3A8370D\",\n            \"PreviousTxnLgrSeq\": 254438,\n            \"RootIndex\": \"B3335E5D0FD255079F7163800B97ECC3A9E766C6360A5206DF782EB5E2A0D0F0\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"B3335E5D0FD255079F7163800B97ECC3A9E766C6360A5206DF782EB5E2A0D0F0\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rUuVtbgagFKjHPTxmN639XYVHLATnB6VNk\",\n            \"RootIndex\": \"C192FCC5BDF820AA1E92CAECB4E0B3F9276AD98EA15018B380AA2164AFC353C8\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"C192FCC5BDF820AA1E92CAECB4E0B3F9276AD98EA15018B380AA2164AFC353C8\",\n          \"PreviousTxnID\": \"60DC4B0DCF3364F490974C0F8BF4ECB98F06E7679B21BD0EBF04EE54E3A8370D\",\n          \"PreviousTxnLgrSeq\": 254438\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"r4eWC5DixP74dpk7FDzXcap1BJ2NaoUeZN\",\n            \"RootIndex\": \"D88F143891ED07B0E39F8F756E1E0A6B0FB904A2C39D84A53AC9553C40F241EB\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"D88F143891ED07B0E39F8F756E1E0A6B0FB904A2C39D84A53AC9553C40F241EB\",\n          \"PreviousTxnID\": \"60DC4B0DCF3364F490974C0F8BF4ECB98F06E7679B21BD0EBF04EE54E3A8370D\",\n          \"PreviousTxnLgrSeq\": 254438\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tesSUCCESS\"\n  },\n  \"hash\": \"9ADAC8C3CF9A7D162EFB93F9CFEBBFFBD8B17F3AFAE26C634E154FF1015AEFC0\",\n  \"ledger_index\": 254442,\n  \"date\": 1739385880000\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/AMMClawback/test/mock_data/withoutFlag.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rGGjMesMUrRMP8ZkLZ2cZ5agzmFwBfT4f2\",\n    \"Asset\": {\n      \"currency\": \"USD\",\n      \"issuer\": \"rGGjMesMUrRMP8ZkLZ2cZ5agzmFwBfT4f2\"\n    },\n    \"Asset2\": {\n      \"currency\": \"XRP\"\n    },\n    \"Fee\": \"12\",\n    \"Flags\": 0,\n    \"Holder\": \"rJk5n4egp7Th4Y4vxAMVAbf1ziuiFuVKiw\",\n    \"LastLedgerSequence\": 223800,\n    \"Sequence\": 223773,\n    \"SigningPubKey\": \"ED6181A0E956D793CF5A4965A6CF7E92A60DE6F2035A0A7A063AE27CF6C689CE43\",\n    \"TransactionType\": \"AMMClawback\",\n    \"TxnSignature\": \"38DCB4EC5842F90B6639099F08ED916A8C9143F39CE29E95F3C3A7AB4A3A274EC1B3C880E900347F4AC2B4965FA9E24F32AE24E37E5637D4941797B61D9D6B09\",\n    \"ctid\": \"C0036A2600000002\",\n    \"date\": 1739289812000\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rJk5n4egp7Th4Y4vxAMVAbf1ziuiFuVKiw\",\n            \"RootIndex\": \"221B55985CE3E04EA6EEF2C3E37EE26CA91651CB308DE9DD798092E20C7C37A1\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"221B55985CE3E04EA6EEF2C3E37EE26CA91651CB308DE9DD798092E20C7C37A1\",\n          \"PreviousTxnID\": \"D4C34015291D34FD2D5D03FB86F21F44FF7BAAD099573E88F53DB2081C07D737\",\n          \"PreviousTxnLgrSeq\": 223779\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 16777216,\n            \"HighLimit\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rGGjMesMUrRMP8ZkLZ2cZ5agzmFwBfT4f2\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"r3mDE6Agmyp8xnARMoEoKvJbpGQseUiBtv\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"0\",\n            \"PreviousTxnID\": \"60EE2673F078628842575576BEE10D8D00208093C90AFC9CF93465522110993E\",\n            \"PreviousTxnLgrSeq\": 223780\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"4EF836D4D7305E8FDE6E04FD54857D818778218715E9474D2EC2667799EF096D\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"260.0000000000002\"\n            },\n            \"Flags\": 16842752\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rGGjMesMUrRMP8ZkLZ2cZ5agzmFwBfT4f2\",\n            \"Balance\": \"99999952\",\n            \"Flags\": 2155872256,\n            \"OwnerCount\": 0,\n            \"Sequence\": 223774\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"63B68A5062ED9768EDECF2187B03B79B70A7EE3C5382D09D3E44BAAD762DA0E0\",\n          \"PreviousFields\": {\n            \"Balance\": \"99999964\",\n            \"Sequence\": 223773\n          },\n          \"PreviousTxnID\": \"D4C34015291D34FD2D5D03FB86F21F44FF7BAAD099573E88F53DB2081C07D737\",\n          \"PreviousTxnLgrSeq\": 223779\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rJk5n4egp7Th4Y4vxAMVAbf1ziuiFuVKiw\",\n            \"Balance\": \"99799976\",\n            \"Flags\": 0,\n            \"OwnerCount\": 1,\n            \"Sequence\": 223771\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"8F9B0C3D5EF04F2BD1C7D0E5B050A300F78180EE9E84E5D5510953D60F93F519\",\n          \"PreviousFields\": {\n            \"Balance\": \"99799726\",\n            \"OwnerCount\": 2\n          },\n          \"PreviousTxnID\": \"60EE2673F078628842575576BEE10D8D00208093C90AFC9CF93465522110993E\",\n          \"PreviousTxnLgrSeq\": 223780\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"r3mDE6Agmyp8xnARMoEoKvJbpGQseUiBtv\",\n            \"PreviousTxnID\": \"D4C34015291D34FD2D5D03FB86F21F44FF7BAAD099573E88F53DB2081C07D737\",\n            \"PreviousTxnLgrSeq\": 223779,\n            \"RootIndex\": \"96CAC0ED63FFA30F53912D4A0F0E7974661F98CD89C9AA98A8CC750C9E1E6A54\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"96CAC0ED63FFA30F53912D4A0F0E7974661F98CD89C9AA98A8CC750C9E1E6A54\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r3mDE6Agmyp8xnARMoEoKvJbpGQseUiBtv\",\n            \"Asset\": {\n              \"currency\": \"XRP\"\n            },\n            \"Asset2\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rGGjMesMUrRMP8ZkLZ2cZ5agzmFwBfT4f2\"\n            },\n            \"AuctionSlot\": {\n              \"Account\": \"rJk5n4egp7Th4Y4vxAMVAbf1ziuiFuVKiw\",\n              \"DiscountedFee\": 1,\n              \"Expiration\": 792691402,\n              \"Price\": {\n                \"currency\": \"03930D02208264E2E40EC1B0C09E4DB96EE197B1\",\n                \"issuer\": \"r3mDE6Agmyp8xnARMoEoKvJbpGQseUiBtv\",\n                \"value\": \"0\"\n              }\n            },\n            \"Flags\": 0,\n            \"LPTokenBalance\": {\n              \"currency\": \"03930D02208264E2E40EC1B0C09E4DB96EE197B1\",\n              \"issuer\": \"r3mDE6Agmyp8xnARMoEoKvJbpGQseUiBtv\",\n              \"value\": \"254.9509509246383\"\n            },\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"60EE2673F078628842575576BEE10D8D00208093C90AFC9CF93465522110993E\",\n            \"PreviousTxnLgrSeq\": 223780,\n            \"TradingFee\": 12,\n            \"VoteSlots\": [\n              {\n                \"VoteEntry\": {\n                  \"Account\": \"rJk5n4egp7Th4Y4vxAMVAbf1ziuiFuVKiw\",\n                  \"TradingFee\": 12,\n                  \"VoteWeight\": 100000\n                }\n              }\n            ]\n          },\n          \"LedgerEntryType\": \"AMM\",\n          \"LedgerIndex\": \"9F4ABCCDF2CECA64CCD309B609AEE8A73A6C06FD0D19B49AC7857B61433B94E7\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"AMMID\": \"9F4ABCCDF2CECA64CCD309B609AEE8A73A6C06FD0D19B49AC7857B61433B94E7\",\n            \"Account\": \"r3mDE6Agmyp8xnARMoEoKvJbpGQseUiBtv\",\n            \"Balance\": \"0\",\n            \"Flags\": 26214400,\n            \"OwnerCount\": 0,\n            \"PreviousTxnID\": \"D4C34015291D34FD2D5D03FB86F21F44FF7BAAD099573E88F53DB2081C07D737\",\n            \"PreviousTxnLgrSeq\": 223779,\n            \"Sequence\": 223779\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"AA50E7BEF6A65C18C68981E7022A2BE977583157CE7B48987BAF98E24880D51F\",\n          \"PreviousFields\": {\n            \"Balance\": \"250\",\n            \"OwnerCount\": 1\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"03930D02208264E2E40EC1B0C09E4DB96EE197B1\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2097152,\n            \"HighLimit\": {\n              \"currency\": \"03930D02208264E2E40EC1B0C09E4DB96EE197B1\",\n              \"issuer\": \"rJk5n4egp7Th4Y4vxAMVAbf1ziuiFuVKiw\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"03930D02208264E2E40EC1B0C09E4DB96EE197B1\",\n              \"issuer\": \"r3mDE6Agmyp8xnARMoEoKvJbpGQseUiBtv\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"0\",\n            \"PreviousTxnID\": \"60EE2673F078628842575576BEE10D8D00208093C90AFC9CF93465522110993E\",\n            \"PreviousTxnLgrSeq\": 223780\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"CC1C7BA5826A8E0119FEACB2D92619454E74B1DB91350AC59E025583CB0147D3\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"03930D02208264E2E40EC1B0C09E4DB96EE197B1\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-254.9509509246383\"\n            },\n            \"Flags\": 2228224\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rGGjMesMUrRMP8ZkLZ2cZ5agzmFwBfT4f2\",\n            \"RootIndex\": \"D28B5E4A4DCD6F42F4EC2EE591B2602D8E7CD69E241066D474EFA6BEFAE721A0\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"D28B5E4A4DCD6F42F4EC2EE591B2602D8E7CD69E241066D474EFA6BEFAE721A0\",\n          \"PreviousTxnID\": \"D4C34015291D34FD2D5D03FB86F21F44FF7BAAD099573E88F53DB2081C07D737\",\n          \"PreviousTxnLgrSeq\": 223779\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tesSUCCESS\"\n  },\n  \"hash\": \"58AA4289ED06C3792E536F07B482C32A3F325CAAEFB169E3B8FC55316E4A3F02\",\n  \"ledger_index\": 223782,\n  \"date\": 1739289812000\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/AMMCreate/Simple.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { SimpleRow } from '../SimpleRow'\nimport { TransactionSimpleProps } from '../types'\nimport { formatTradingFee } from '../../../utils'\nimport { Account } from '../../Account'\nimport { Amount } from '../../Amount'\n\nexport const Simple = ({ data }: TransactionSimpleProps) => {\n  const { t } = useTranslation()\n  const { amount, amount2, ammAccountID, tradingFee } = data.instructions\n  const tf = formatTradingFee(tradingFee)\n\n  return (\n    <>\n      {ammAccountID && (\n        <SimpleRow label={t('amm_account_id')} data-testid=\"account_id\">\n          <Account account={ammAccountID} />\n        </SimpleRow>\n      )}\n      {amount && (\n        <SimpleRow label={t('asset1')} data-testid=\"asset1\">\n          <Amount value={amount} />\n        </SimpleRow>\n      )}\n      {amount2 && (\n        <SimpleRow label={t('asset2')} data-testid=\"asset2\">\n          <Amount value={amount2} />\n        </SimpleRow>\n      )}\n      {tf && (\n        <SimpleRow label={t('trading_fee')} data-testid=\"trading_fee\">\n          {tf}%\n        </SimpleRow>\n      )}\n    </>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/AMMCreate/index.ts",
    "content": "import { Simple } from './Simple'\nimport {\n  TransactionAction,\n  TransactionCategory,\n  TransactionMapping,\n} from '../types'\nimport { parser } from './parser'\n\nexport const AMMCreate: TransactionMapping = {\n  Simple,\n  action: TransactionAction.CREATE,\n  category: TransactionCategory.DEX,\n  parser,\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/AMMCreate/parser.ts",
    "content": "import { formatAmount } from '../../../../../rippled/lib/txSummary/formatAmount'\nimport { getAMMAccountID } from '../../../metaParser'\n\nexport function parser(tx: any, meta: any) {\n  const amount = formatAmount(tx.Amount)\n  const amount2 = formatAmount(tx.Amount2)\n  const tradingFee = tx.TradingFee\n  const ammAccountID = getAMMAccountID(meta)\n\n  return {\n    amount,\n    amount2,\n    tradingFee,\n    ammAccountID,\n  }\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/AMMCreate/test/AMMCreate.test.tsx",
    "content": "import { Simple } from '../Simple'\nimport { createSimpleRenderFactory, expectSimpleRowText } from '../../test'\nimport createMock from './mock_data/amm_create.json'\n\ndescribe('AMM Create Tests', () => {\n  const renderComponent = createSimpleRenderFactory(Simple)\n\n  it('renders from transaction', () => {\n    const { container, unmount } = renderComponent(createMock)\n    expectSimpleRowText(container, 'asset1', '\\uE90010,000.00 XRP')\n    expectSimpleRowText(container, 'trading_fee', '0.001%')\n    expectSimpleRowText(\n      container,\n      'asset2',\n      '$10,000.00 USD.rhpHaFggC92ELty3n3yDEtuFgWxXWkUFET',\n    )\n    expectSimpleRowText(\n      container,\n      'account_id',\n      'rMEdVzU8mtEArzjrN9avm3kA675GX7ez8W',\n    )\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/AMMCreate/test/mock_data/amm_create.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rwRGF9pmfEGT4GcZ379cYC9p3wpJDozy8w\",\n    \"Amount\": \"10000000000\",\n    \"Amount2\": {\n      \"currency\": \"USD\",\n      \"issuer\": \"rhpHaFggC92ELty3n3yDEtuFgWxXWkUFET\",\n      \"value\": \"10000\"\n    },\n    \"Fee\": \"10\",\n    \"Flags\": 0,\n    \"Sequence\": 3,\n    \"SigningPubKey\": \"02BFF00BCB2D25845C1D7C1FC5AAAE465B56CBB966BF034E1F6FFC097E8A6FBD28\",\n    \"TradingFee\": 1,\n    \"TransactionType\": \"AMMCreate\",\n    \"TxnSignature\": \"304402200CE5EA35FB7545CA8CD3231C2EE6F23D6B9EF7E146F23016905B9516721D5745022062DCC01BB7617C93F85DAE93917CC585FF09AE690BA78FDC5924565EEC186C70\",\n    \"date\": \"2022-11-21T20:58:11Z\"\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-990000\"\n            },\n            \"Flags\": 131072,\n            \"HighLimit\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rwRGF9pmfEGT4GcZ379cYC9p3wpJDozy8w\",\n              \"value\": \"1000000\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rhpHaFggC92ELty3n3yDEtuFgWxXWkUFET\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"10D7C86BCC29BAE4545D06CE98A2F961F0DBC73DE38B9792BA776B821EFF28AC\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-1000000\"\n            }\n          },\n          \"PreviousTxnID\": \"98D314D1EC81BE9342EDA1C04BCEFA8F327B0EFE12839F1EAB52065492B20E82\",\n          \"PreviousTxnLgrSeq\": 114138\n        }\n      },\n      {\n        \"CreatedNode\": {\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"2BC24DD364DD10CFF573560CB7C911DE61971207993417B5A1EC87E227DE7424\",\n          \"NewFields\": {\n            \"Balance\": {\n              \"currency\": \"03930D02208264E2E40EC1B0C09E4DB96EE197B1\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"10000000\"\n            },\n            \"Flags\": 65536,\n            \"HighLimit\": {\n              \"currency\": \"03930D02208264E2E40EC1B0C09E4DB96EE197B1\",\n              \"issuer\": \"rMEdVzU8mtEArzjrN9avm3kA675GX7ez8W\",\n              \"value\": \"0\"\n            },\n            \"LowLimit\": {\n              \"currency\": \"03930D02208264E2E40EC1B0C09E4DB96EE197B1\",\n              \"issuer\": \"rwRGF9pmfEGT4GcZ379cYC9p3wpJDozy8w\",\n              \"value\": \"0\"\n            }\n          }\n        }\n      },\n      {\n        \"CreatedNode\": {\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"471AC5276FBA4916D53017D7073D44C5F4780CC73954B1715DC8A65365E8ACAC\",\n          \"NewFields\": {\n            \"Account\": \"rMEdVzU8mtEArzjrN9avm3kA675GX7ez8W\",\n            \"Balance\": \"10000000000\",\n            \"Flags\": 59768832,\n            \"OwnerCount\": 1,\n            \"Sequence\": 1\n          }\n        }\n      },\n      {\n        \"CreatedNode\": {\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"65B78B3B60DA403E99C8CC526882EC34299AF2BA135842CE489C02F82D0203F3\",\n          \"NewFields\": {\n            \"Balance\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-10000\"\n            },\n            \"Flags\": 131072,\n            \"HighLimit\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rMEdVzU8mtEArzjrN9avm3kA675GX7ez8W\",\n              \"value\": \"0\"\n            },\n            \"LowLimit\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rhpHaFggC92ELty3n3yDEtuFgWxXWkUFET\",\n              \"value\": \"0\"\n            }\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rwRGF9pmfEGT4GcZ379cYC9p3wpJDozy8w\",\n            \"Balance\": \"989999999970\",\n            \"Flags\": 8388608,\n            \"OwnerCount\": 2,\n            \"Sequence\": 4\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"83A4BB5EA0DB3CFEE89804BC08E1CBD222E869046EE01A7ECCAB57F8433F9655\",\n          \"PreviousFields\": {\n            \"Balance\": \"999999999980\",\n            \"OwnerCount\": 1,\n            \"Sequence\": 3\n          },\n          \"PreviousTxnID\": \"F7998834E30DEB92E62754744328C882CD1C50C59A7568884B14F498B2B91198\",\n          \"PreviousTxnLgrSeq\": 114136\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rhpHaFggC92ELty3n3yDEtuFgWxXWkUFET\",\n            \"RootIndex\": \"A49DF2BCB7DE1E35F4F0662624A45DF35D56BC3833008E0BE8721424BBD80E33\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"A49DF2BCB7DE1E35F4F0662624A45DF35D56BC3833008E0BE8721424BBD80E33\"\n        }\n      },\n      {\n        \"CreatedNode\": {\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"A55924837E8BDDBAA2A59B4E1490E81CA63EC5266C679FF5418F1975AA793ADF\",\n          \"NewFields\": {\n            \"Owner\": \"rMEdVzU8mtEArzjrN9avm3kA675GX7ez8W\",\n            \"RootIndex\": \"A55924837E8BDDBAA2A59B4E1490E81CA63EC5266C679FF5418F1975AA793ADF\"\n          }\n        }\n      },\n      {\n        \"CreatedNode\": {\n          \"LedgerEntryType\": \"AMM\",\n          \"LedgerIndex\": \"C7FD06649235AF4CABD8FA6D8BB0CAF6C6EA5038A74D0DDD5025290683636D02\",\n          \"NewFields\": {\n            \"Account\": \"rMEdVzU8mtEArzjrN9avm3kA675GX7ez8W\",\n            \"Asset2\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rhpHaFggC92ELty3n3yDEtuFgWxXWkUFET\"\n            },\n            \"LPTokenBalance\": {\n              \"currency\": \"03930D02208264E2E40EC1B0C09E4DB96EE197B1\",\n              \"issuer\": \"rMEdVzU8mtEArzjrN9avm3kA675GX7ez8W\",\n              \"value\": \"10000000\"\n            }\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rwRGF9pmfEGT4GcZ379cYC9p3wpJDozy8w\",\n            \"RootIndex\": \"D69B2631EAE1115AFA8A12284B3780D743CB6CBA74A2F5D878CD68C0352C4CFA\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"D69B2631EAE1115AFA8A12284B3780D743CB6CBA74A2F5D878CD68C0352C4CFA\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"F2C157AFC0B58AE61CF96D0A671A35B0E240E3BFBCE71F18604307627AB1EDF5\",\n          \"PreviousTxnID\": \"B05CAE1B66F6A64ADB5B7753395E49FC8E5376D3E95ED50BE5F7395509D6334C\",\n          \"PreviousTxnLgrSeq\": 114138\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tesSUCCESS\"\n  }\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/AMMDelete/Description.tsx",
    "content": "import { Trans } from 'react-i18next'\nimport { type AMMDelete } from 'xrpl'\nimport { TransactionDescriptionProps } from '../types'\nimport Currency from '../../Currency'\n\nexport const Description = ({\n  data,\n}: TransactionDescriptionProps<AMMDelete>) => {\n  const { Asset, Asset2 } = data.tx\n\n  return (\n    <div data-testid=\"amm-delete-description\">\n      <Trans\n        i18nKey=\"amm_delete_description\"\n        components={{\n          // @ts-expect-error - MPT is not being supported for AMM transactions until https://github.com/XRPLF/rippled/pull/5285 is merged\n          Asset: <Currency currency={Asset.currency} issuer={Asset.issuer} />,\n          Asset2: (\n            // @ts-expect-error - MPT is not being supported for AMM transactions until https://github.com/XRPLF/rippled/pull/5285 is merged\n            <Currency currency={Asset2.currency} issuer={Asset2.issuer} />\n          ),\n        }}\n      />\n      <br />\n      <Trans i18nKey=\"amm_delete_description_caveat\" />\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/AMMDelete/Simple.tsx",
    "content": "import { useTranslation } from 'react-i18next'\n\nimport { type AMMDelete } from 'xrpl'\nimport { SimpleRow } from '../SimpleRow'\nimport { TransactionSimpleProps } from '../types'\nimport Currency from '../../Currency'\n\nexport const Simple = ({ data }: TransactionSimpleProps<AMMDelete>) => {\n  const { t } = useTranslation()\n  const { Asset, Asset2 } = data.instructions\n\n  return (\n    <>\n      <SimpleRow label={t('asset1')} data-testid=\"asset1\">\n        {/* @ts-expect-error - MPT is not being supported for AMM transactions until https://github.com/XRPLF/rippled/pull/5285 is merged */}\n        <Currency currency={Asset.currency} issuer={Asset.issuer} />\n      </SimpleRow>\n      <SimpleRow label={t('asset2')} data-testid=\"asset2\">\n        {/* @ts-expect-error - MPT is not being supported for AMM transactions until https://github.com/XRPLF/rippled/pull/5285 is merged */}\n        <Currency currency={Asset2.currency} issuer={Asset2.issuer} />\n      </SimpleRow>\n    </>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/AMMDelete/TableDetail.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { type AMMDelete } from 'xrpl'\nimport { TransactionTableDetailProps } from '../types'\nimport Currency from '../../Currency'\n\nexport const TableDetail = ({\n  instructions,\n}: TransactionTableDetailProps<AMMDelete>) => {\n  const { t } = useTranslation()\n  const { Asset, Asset2 } = instructions\n\n  return (\n    <div className=\"ammDelete\">\n      <div data-testid=\"asset\">\n        <span className=\"label\">{t('asset1')}</span>\n        {/* @ts-expect-error - MPT is not being supported for AMM transactions until https://github.com/XRPLF/rippled/pull/5285 is merged */}\n        <Currency currency={Asset.currency} issuer={(Asset as any).issuer} />\n      </div>\n      <div data-testid=\"asset2\">\n        <span className=\"label\">{t('asset2')}</span>\n        {/* @ts-expect-error - MPT is not being supported for AMM transactions until https://github.com/XRPLF/rippled/pull/5285 is merged */}\n        <Currency currency={Asset2.currency} issuer={(Asset2 as any).issuer} />\n      </div>\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/AMMDelete/index.ts",
    "content": "import { type AMMDelete } from 'xrpl'\nimport {\n  TransactionAction,\n  TransactionCategory,\n  TransactionMapping,\n} from '../types'\nimport { Description } from './Description'\n\nimport { Simple } from './Simple'\nimport { TableDetail } from './TableDetail'\n\nexport const AMMDeleteTransaction: TransactionMapping = {\n  Description,\n  TableDetail,\n  Simple,\n  action: TransactionAction.CANCEL,\n  category: TransactionCategory.DEX,\n  parser: (tx: AMMDelete): AMMDelete => tx,\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/AMMDelete/test/AMMDeleteDescription.test.tsx",
    "content": "import i18n from '../../../../../../i18n/testConfigEnglish'\nimport mockAMMDelete from './mock_data/AMMDelete.json'\nimport { Description } from '../Description'\nimport { createDescriptionRenderFactory } from '../../test'\n\nconst renderComponent = createDescriptionRenderFactory(Description, i18n)\n\ndescribe('AMMDelete: Description', () => {\n  it('renders description for AMMDelete transaction', () => {\n    const { container, unmount } = renderComponent(mockAMMDelete)\n\n    expect(\n      container.querySelector('[data-testid=\"amm-delete-description\"]'),\n    ).toHaveTextContent(\n      'Attempted to delete the AMM for \\uE900 XRP and FOO.rm5c42Crqpdch5fbuCdHmSMV1wrL9arV9.If there were more than 512 trustlines, this only removes 512 trustlines instead.',\n    )\n    expect(container.querySelector('a')).toHaveAttribute(\n      'href',\n      '/token/FOO.rm5c42Crqpdch5fbuCdHmSMV1wrL9arV9',\n    )\n\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/AMMDelete/test/AMMDeleteSimple.test.tsx",
    "content": "import i18n from '../../../../../../i18n/testConfigEnglish'\nimport { expectSimpleRowText } from '../../test'\n\nimport { createSimpleRenderFactory } from '../../test/createWrapperFactory'\nimport { Simple } from '../Simple'\nimport mockAMMDelete from './mock_data/AMMDelete.json'\n\nconst renderComponent = createSimpleRenderFactory(Simple, i18n)\n\ndescribe('AMMDelete: Simple', () => {\n  it('renders', () => {\n    const { container, unmount } = renderComponent(mockAMMDelete) // TOOD: - Make this look up asset 1 / asset 2 currency codes\n    expectSimpleRowText(container, 'asset1', '\\uE900 XRP')\n    expectSimpleRowText(\n      container,\n      'asset2',\n      'FOO.rm5c42Crqpdch5fbuCdHmSMV1wrL9arV9',\n    )\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/AMMDelete/test/AMMDeleteTableDetail.test.tsx",
    "content": "import { TableDetail } from '../TableDetail'\nimport mockAMMDelete from './mock_data/AMMDelete.json'\nimport { createTableDetailRenderFactory } from '../../test'\nimport i18n from '../../../../../../i18n/testConfigEnglish'\n\nconst renderComponent = createTableDetailRenderFactory(TableDetail, i18n)\n\ndescribe('AMMDelete: TableDetail', () => {\n  it('renders with an expiration and offer', () => {\n    const { container, unmount } = renderComponent(mockAMMDelete)\n\n    expect(container.querySelector('[data-testid=\"asset\"]')).toHaveTextContent(\n      'Asset 1\\uE900 XRP',\n    )\n    expect(container.querySelector('[data-testid=\"asset2\"]')).toHaveTextContent(\n      'Asset 2FOO.rm5c42Crqpdch5fbuCdHmSMV1wrL9arV9',\n    )\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/AMMDelete/test/mock_data/AMMDelete.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rm5c42Crqpdch5fbuCdHmSMV1wrL9arV9\",\n    \"Asset\": {\n      \"currency\": \"XRP\"\n    },\n    \"Asset2\": {\n      \"currency\": \"FOO\",\n      \"issuer\": \"rm5c42Crqpdch5fbuCdHmSMV1wrL9arV9\"\n    },\n    \"Fee\": \"12\",\n    \"Flags\": 0,\n    \"LastLedgerSequence\": 372572,\n    \"Sequence\": 372548,\n    \"SigningPubKey\": \"ED6784394D134E202BCCD957A1A3C5A66647092F3929D388A878A16D1910875435\",\n    \"TransactionType\": \"AMMDelete\",\n    \"TxnSignature\": \"F9AA459D8CE593E6E2E69BB6A6F723A4822FD5F40314F642FA9EC5187F7FD937FBD3E8A214119D04C74358A3478DCB6EAABE02EFAC1E6E125E15310E18A36D0D\",\n    \"date\": 1693268101000\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rm5c42Crqpdch5fbuCdHmSMV1wrL9arV9\",\n            \"Balance\": \"9997998976\",\n            \"Flags\": 8388608,\n            \"OwnerCount\": 1,\n            \"Sequence\": 372549\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"84CA74ECFDB34F014142013B4CD2FBE3942C7BA9BA7E1FC5A1CB1EF719173812\",\n          \"PreviousFields\": {\n            \"Balance\": \"9997998988\",\n            \"Sequence\": 372548\n          },\n          \"PreviousTxnID\": \"E5051DA09F143A719521D6ABBB3856EA3E2CA38EF1CFF0E7DF9FE1C31DD73B6D\",\n          \"PreviousTxnLgrSeq\": 372552\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tecAMM_NOT_EMPTY\"\n  },\n  \"hash\": \"D159883D456646562F51F3E5A2754F7D880D39A6372EDF679A43A7DDB77F735C\",\n  \"ledger_index\": 372554,\n  \"date\": 1693268101000\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/AMMDeposit/Simple.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { SimpleRow } from '../SimpleRow'\nimport { TransactionSimpleProps } from '../types'\nimport { Account } from '../../Account'\nimport { Amount } from '../../Amount'\nimport { localizeNumber } from '../../../utils'\n\nexport const Simple = ({ data }: TransactionSimpleProps) => {\n  const { t } = useTranslation()\n  const { amount, amount2, ammAccountID, ePrice, lpTokens } = data.instructions\n  const lpTokenFormatted = lpTokens?.amount\n    ? localizeNumber(lpTokens.amount, 'en-US', {\n        minimumFractionDigits: 0,\n        maximumFractionDigits: 2,\n      })\n    : undefined\n\n  return (\n    <>\n      {ammAccountID && (\n        <SimpleRow label={t('amm_account_id')} data-testid=\"account_id\">\n          <Account account={ammAccountID} />\n        </SimpleRow>\n      )}\n      {amount && (\n        <SimpleRow label={t('asset1in')} data-testid=\"asset1\">\n          <Amount value={amount} />\n        </SimpleRow>\n      )}\n      {amount2 && (\n        <SimpleRow label={t('asset2in')} data-testid=\"asset2\">\n          <Amount value={amount2} />\n        </SimpleRow>\n      )}\n      {ePrice && (\n        <SimpleRow label={t('effective_price')} data-testid=\"effective_price\">\n          <Amount value={ePrice} />\n        </SimpleRow>\n      )}\n      {lpTokenFormatted && (\n        <SimpleRow label={t('lp_tokens')} data-testid=\"lp_tokens\">\n          {lpTokenFormatted}\n        </SimpleRow>\n      )}\n    </>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/AMMDeposit/index.ts",
    "content": "import { Simple } from './Simple'\nimport {\n  TransactionAction,\n  TransactionCategory,\n  TransactionMapping,\n} from '../types'\nimport { parser } from './parser'\n\nexport const AMMDeposit: TransactionMapping = {\n  Simple,\n  action: TransactionAction.SEND,\n  category: TransactionCategory.DEX,\n  parser,\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/AMMDeposit/parser.ts",
    "content": "import {\n  getAMMAccountID,\n  findAssetAmount,\n  getLPTokenAmount,\n} from '../../../metaParser'\nimport { formatAmount } from '../../../../../rippled/lib/txSummary/formatAmount'\n\nexport function parser(tx: any, meta: any) {\n  const ammAccountID = getAMMAccountID(meta)\n  const ePrice = formatAmount(tx.EPrice)\n  const lpTokens = getLPTokenAmount(meta)\n  const amount = findAssetAmount(meta, tx.Asset, tx)\n  const amount2 = findAssetAmount(meta, tx.Asset2, tx)\n\n  return {\n    amount,\n    amount2,\n    ammAccountID,\n    ePrice,\n    lpTokens,\n  }\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/AMMDeposit/test/AMMDeposit.test.tsx",
    "content": "import { Simple } from '../Simple'\nimport {\n  createSimpleRenderFactory,\n  expectSimpleRowNotToExist,\n  expectSimpleRowText,\n} from '../../test'\nimport depositBothAssets from './mock_data/deposit_both.json'\nimport depositUSD from './mock_data/deposit_usd.json'\nimport depositXRP from './mock_data/deposit_xrp.json'\nimport depositEprice from './mock_data/deposit_eprice.json'\nimport depositNonXRP from './mock_data/deposit_nonxrp.json'\nimport depositFail from './mock_data/deposit_fail.json'\nimport depositLPToken from './mock_data/deposit_lptoken.json'\n\ndescribe('AMM Deposit Tests', () => {\n  const renderComponent = createSimpleRenderFactory(Simple)\n\n  it('renders with both assets', () => {\n    const { container, unmount } = renderComponent(depositBothAssets)\n    expectSimpleRowText(container, 'asset1', '\\uE90010,997.290462 XRP')\n    expectSimpleRowText(\n      container,\n      'asset2',\n      '$10,000.00 USD.rhpHaFggC92ELty3n3yDEtuFgWxXWkUFET',\n    )\n    expectSimpleRowText(\n      container,\n      'account_id',\n      'rMEdVzU8mtEArzjrN9avm3kA675GX7ez8W',\n    )\n    unmount()\n  })\n\n  it('renders only with USD', () => {\n    const { container, unmount } = renderComponent(depositUSD)\n    expectSimpleRowNotToExist(container, 'asset1')\n    expectSimpleRowText(\n      container,\n      'asset2',\n      '$2,000.00 USD.rhpHaFggC92ELty3n3yDEtuFgWxXWkUFET',\n    )\n    expectSimpleRowText(\n      container,\n      'account_id',\n      'rMEdVzU8mtEArzjrN9avm3kA675GX7ez8W',\n    )\n    unmount()\n  })\n\n  it('renders only with XRP', () => {\n    const { container, unmount } = renderComponent(depositXRP)\n    expectSimpleRowText(container, 'asset1', '\\uE9001,000.00 XRP')\n    expectSimpleRowText(\n      container,\n      'account_id',\n      'rMEdVzU8mtEArzjrN9avm3kA675GX7ez8W',\n    )\n    unmount()\n  })\n\n  it('renders with eprice', () => {\n    const { container, unmount } = renderComponent(depositEprice)\n    expectSimpleRowNotToExist(container, 'asset1')\n    expectSimpleRowText(\n      container,\n      'asset2',\n      '$1,000.00 USD.rA3nNmhWKRZvcsA89DxTRbV62JiaSZWdy',\n    )\n    expectSimpleRowText(\n      container,\n      'effective_price',\n      '$0.10 USD.rA3nNmhWKRZvcsA89DxTRbV62JiaSZWdy',\n    )\n    expectSimpleRowText(\n      container,\n      'account_id',\n      'rHrzrzVHSyunKzW3JLgSaLcsxfwVLPVV97',\n    )\n    unmount()\n  })\n\n  it('renders with both assets non XRP', () => {\n    const { container, unmount } = renderComponent(depositNonXRP)\n    expectSimpleRowText(\n      container,\n      'asset1',\n      '€500.00 EUR.rEaiyQKvxYWmh7q9mvSm11kZmKx92HZdmr',\n    )\n    expectSimpleRowText(\n      container,\n      'asset2',\n      '$500.00 USD.rEaiyQKvxYWmh7q9mvSm11kZmKx92HZdmr',\n    )\n    expectSimpleRowText(\n      container,\n      'account_id',\n      'rEJ1X5BoSmHqa5h6TSVvYrHAzFmyxGqNic',\n    )\n    unmount()\n  })\n\n  it('deposit shouldnt crash with tx that changes fee', () => {\n    const { container, unmount } = renderComponent(depositFail)\n    expectSimpleRowNotToExist(container, 'asset1')\n    expectSimpleRowNotToExist(container, 'asset2')\n    expectSimpleRowNotToExist(container, 'account_id')\n    unmount()\n  })\n\n  it('renders LP Tokens properly', () => {\n    const { container, unmount } = renderComponent(depositLPToken)\n    expectSimpleRowText(container, 'lp_tokens', '4,279,342.4')\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/AMMDeposit/test/mock_data/deposit_both.json",
    "content": "{\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"03930D02208264E2E40EC1B0C09E4DB96EE197B1\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"11001684.93864386\"\n            },\n            \"Flags\": 65536,\n            \"HighLimit\": {\n              \"currency\": \"03930D02208264E2E40EC1B0C09E4DB96EE197B1\",\n              \"issuer\": \"rMEdVzU8mtEArzjrN9avm3kA675GX7ez8W\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"03930D02208264E2E40EC1B0C09E4DB96EE197B1\",\n              \"issuer\": \"rUwaiErsYE5kibUUtaPczXZVVd73VNy4R9\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"32951EDAF938635BE23319144E5420B4F2D19E81483B5759F535FEF0730AF797\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"03930D02208264E2E40EC1B0C09E4DB96EE197B1\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"514888.2582723813\"\n            }\n          },\n          \"PreviousTxnID\": \"C9A05B23CCCD598D90B00F3B3E7FD49A592A6C6EE8C1ECFC3A16823D9B99CF41\",\n          \"PreviousTxnLgrSeq\": 317108\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rMEdVzU8mtEArzjrN9avm3kA675GX7ez8W\",\n            \"Balance\": \"22024039991\",\n            \"Flags\": 59768832,\n            \"OwnerCount\": 1,\n            \"Sequence\": 1\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"471AC5276FBA4916D53017D7073D44C5F4780CC73954B1715DC8A65365E8ACAC\",\n          \"PreviousFields\": {\n            \"Balance\": \"11026749529\"\n          },\n          \"PreviousTxnID\": \"C9A05B23CCCD598D90B00F3B3E7FD49A592A6C6EE8C1ECFC3A16823D9B99CF41\",\n          \"PreviousTxnLgrSeq\": 317108\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rUwaiErsYE5kibUUtaPczXZVVd73VNy4R9\",\n            \"Balance\": \"987975959919\",\n            \"Flags\": 8388608,\n            \"OwnerCount\": 2,\n            \"Sequence\": 10\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"53383A918D45DEF78DED23CE5141C0FAB44661D602465F5FCFC487792448F1E2\",\n          \"PreviousFields\": {\n            \"Balance\": \"998973250391\",\n            \"Sequence\": 9\n          },\n          \"PreviousTxnID\": \"C9A05B23CCCD598D90B00F3B3E7FD49A592A6C6EE8C1ECFC3A16823D9B99CF41\",\n          \"PreviousTxnLgrSeq\": 317108\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-20026.78756798392\"\n            },\n            \"Flags\": 131072,\n            \"HighLimit\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rMEdVzU8mtEArzjrN9avm3kA675GX7ez8W\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rhpHaFggC92ELty3n3yDEtuFgWxXWkUFET\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"65B78B3B60DA403E99C8CC526882EC34299AF2BA135842CE489C02F82D0203F3\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-10026.78756798392\"\n            }\n          },\n          \"PreviousTxnID\": \"C9A05B23CCCD598D90B00F3B3E7FD49A592A6C6EE8C1ECFC3A16823D9B99CF41\",\n          \"PreviousTxnLgrSeq\": 317108\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-989973.2124320161\"\n            },\n            \"Flags\": 131072,\n            \"HighLimit\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rUwaiErsYE5kibUUtaPczXZVVd73VNy4R9\",\n              \"value\": \"1000000\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rhpHaFggC92ELty3n3yDEtuFgWxXWkUFET\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"AB154A6C44E28D94D9856A68FA7BBB342F8A517E9107144646AE4880BED76117\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-999973.2124320161\"\n            }\n          },\n          \"PreviousTxnID\": \"C9A05B23CCCD598D90B00F3B3E7FD49A592A6C6EE8C1ECFC3A16823D9B99CF41\",\n          \"PreviousTxnLgrSeq\": 317108\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rMEdVzU8mtEArzjrN9avm3kA675GX7ez8W\",\n            \"Asset\": {\n              \"currency\": \"XRP\"\n            },\n            \"Asset2\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rhpHaFggC92ELty3n3yDEtuFgWxXWkUFET\"\n            },\n            \"Flags\": 0,\n            \"LPTokenBalance\": {\n              \"currency\": \"03930D02208264E2E40EC1B0C09E4DB96EE197B1\",\n              \"issuer\": \"rMEdVzU8mtEArzjrN9avm3kA675GX7ez8W\",\n              \"value\": \"21001684.93864386\"\n            },\n            \"TradingFee\": 0\n          },\n          \"LedgerEntryType\": \"AMM\",\n          \"LedgerIndex\": \"C7FD06649235AF4CABD8FA6D8BB0CAF6C6EA5038A74D0DDD5025290683636D02\",\n          \"PreviousFields\": {\n            \"LPTokenBalance\": {\n              \"currency\": \"03930D02208264E2E40EC1B0C09E4DB96EE197B1\",\n              \"issuer\": \"rMEdVzU8mtEArzjrN9avm3kA675GX7ez8W\",\n              \"value\": \"10514888.25827238\"\n            }\n          }\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tesSUCCESS\"\n  },\n  \"tx\": {\n    \"Account\": \"rUwaiErsYE5kibUUtaPczXZVVd73VNy4R9\",\n    \"Amount\": {\n      \"currency\": \"USD\",\n      \"issuer\": \"rhpHaFggC92ELty3n3yDEtuFgWxXWkUFET\",\n      \"value\": \"10000\"\n    },\n    \"Amount2\": \"20000000000\",\n    \"Asset\": {\n      \"currency\": \"XRP\"\n    },\n    \"Asset2\": {\n      \"currency\": \"USD\",\n      \"issuer\": \"rhpHaFggC92ELty3n3yDEtuFgWxXWkUFET\"\n    },\n    \"Fee\": \"10\",\n    \"Flags\": 1048576,\n    \"Sequence\": 9,\n    \"SigningPubKey\": \"023CFED4018084296285DD8A321C099134B9CF6DCD8D91DC067BABCFF0E3F2BE1A\",\n    \"TransactionType\": \"AMMDeposit\",\n    \"TxnSignature\": \"304502210094677044010A252FDE5837644092548C7286E36667D67116163F4B42E02AE78C02206BED75A5D9BE3AC70DC1C3DC85DB88C289C33B315144FE345487734FC924E53F\",\n    \"date\": \"2022-11-28T22:28:03Z\"\n  }\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/AMMDeposit/test/mock_data/deposit_eprice.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rhmfYgnWbKKwYNJbh3iysPHbz7aparZ1qd\",\n    \"Amount\": {\n      \"currency\": \"USD\",\n      \"issuer\": \"rA3nNmhWKRZvcsA89DxTRbV62JiaSZWdy\",\n      \"value\": \"1000\"\n    },\n    \"Asset\": {\n      \"currency\": \"XRP\",\n      \"amount\": 0.00001\n    },\n    \"Asset2\": {\n      \"currency\": \"USD\",\n      \"issuer\": \"rA3nNmhWKRZvcsA89DxTRbV62JiaSZWdy\",\n      \"amount\": 999.9999999999964\n    },\n    \"EPrice\": {\n      \"currency\": \"USD\",\n      \"issuer\": \"rA3nNmhWKRZvcsA89DxTRbV62JiaSZWdy\",\n      \"value\": \"0.1\"\n    },\n    \"Fee\": \"10\",\n    \"Flags\": 4194304,\n    \"Sequence\": 113539,\n    \"SigningPubKey\": \"031E3709F92AF9138B63CCDEC7357E3779762F3FB3BB56F6966D7040644B0E179C\",\n    \"TransactionType\": \"AMMDeposit\",\n    \"TxnSignature\": \"304402200942E3F71CC272FD385211DA12F312A9B8883FAB1307DD2302BA0CC4720D34C102205C9719BE1EA8C6E430FC8BF51BF641484D169B0E6DD19677EA7238FAEF54DC8D\",\n    \"date\": \"2023-01-17T23:34:32Z\"\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rhmfYgnWbKKwYNJbh3iysPHbz7aparZ1qd\",\n            \"Balance\": \"29994999980\",\n            \"Flags\": 0,\n            \"OwnerCount\": 2,\n            \"Sequence\": 113540\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"1E47D3574E19E3D519D57FF5B3A6EE7622A5998A82DF170C440C8CB7AA0015E1\",\n          \"PreviousFields\": {\n            \"Balance\": \"29994999990\",\n            \"Sequence\": 113539\n          },\n          \"PreviousTxnID\": \"1853F40E7D243AE2CDC86BEF435F0251E3115F912F624DBC4B4EC42EB70788A7\",\n          \"PreviousTxnLgrSeq\": 113560\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-10440.58975699956\"\n            },\n            \"Flags\": 16908288,\n            \"HighLimit\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rHrzrzVHSyunKzW3JLgSaLcsxfwVLPVV97\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rA3nNmhWKRZvcsA89DxTRbV62JiaSZWdy\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"6821A772CD6D9CC703438CDE99713837AE7D7606AB31CCF2D1E5E5991A637E43\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-9440.589756999564\"\n            }\n          },\n          \"PreviousTxnID\": \"90BC4C26A58B8861A2824CB24195CBD1C20E2109A12078AE5FC07CECE8CDAEF6\",\n          \"PreviousTxnLgrSeq\": 114210\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rHrzrzVHSyunKzW3JLgSaLcsxfwVLPVV97\",\n            \"Asset\": {\n              \"currency\": \"XRP\"\n            },\n            \"Asset2\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rA3nNmhWKRZvcsA89DxTRbV62JiaSZWdy\"\n            },\n            \"AuctionSlot\": {\n              \"Account\": \"r7stmFYYViSDxXYFZkXtL7fRanUyFwWey\",\n              \"AuthAccounts\": [\n                {\n                  \"AuthAccount\": {\n                    \"Account\": \"ra8uHq2Qme5j19TqvPzTE2nqT12Zc3xJmK\"\n                  }\n                },\n                {\n                  \"AuthAccount\": {\n                    \"Account\": \"rU6o2YguZi847RaiH2QGTkL4eZWZjbxZvk\"\n                  }\n                }\n              ],\n              \"DiscountedFee\": 0,\n              \"Expiration\": 727397182,\n              \"Price\": {\n                \"currency\": \"03930D02208264E2E40EC1B0C09E4DB96EE197B1\",\n                \"issuer\": \"rHrzrzVHSyunKzW3JLgSaLcsxfwVLPVV97\",\n                \"value\": \"100\"\n              }\n            },\n            \"Flags\": 0,\n            \"LPTokenBalance\": {\n              \"currency\": \"03930D02208264E2E40EC1B0C09E4DB96EE197B1\",\n              \"issuer\": \"rHrzrzVHSyunKzW3JLgSaLcsxfwVLPVV97\",\n              \"value\": \"10754867.45765637\"\n            },\n            \"TradingFee\": 225,\n            \"VoteSlots\": [\n              {\n                \"VoteEntry\": {\n                  \"Account\": \"rKE48YsvrtNfW1mwXGY5zruNnvbQme1EnD\",\n                  \"TradingFee\": 350,\n                  \"VoteWeight\": 90\n                }\n              },\n              {\n                \"VoteEntry\": {\n                  \"Account\": \"rJgu92PQxSMcs4ycLKoCGk4rYgoJeWmexR\",\n                  \"TradingFee\": 300,\n                  \"VoteWeight\": 90\n                }\n              },\n              {\n                \"VoteEntry\": {\n                  \"Account\": \"rGLvAxi5QRBxYnKdg8CqXGnYrFWr1WWi6b\",\n                  \"TradingFee\": 150,\n                  \"VoteWeight\": 90\n                }\n              },\n              {\n                \"VoteEntry\": {\n                  \"Account\": \"rGfys78D1z3gSHE75iYxJzseJQqRKrQcJy\",\n                  \"TradingFee\": 200,\n                  \"VoteWeight\": 90\n                }\n              },\n              {\n                \"VoteEntry\": {\n                  \"Account\": \"rHTFtEYeo8b9Guur4DNADyXnLe28XgEjFb\",\n                  \"TradingFee\": 100,\n                  \"VoteWeight\": 90\n                }\n              },\n              {\n                \"VoteEntry\": {\n                  \"Account\": \"r3qituSZx5nH6B1ygXvWkB9oNANNagWUYq\",\n                  \"TradingFee\": 50,\n                  \"VoteWeight\": 90\n                }\n              },\n              {\n                \"VoteEntry\": {\n                  \"Account\": \"rnQk7TFb2EWX6QSUBxcy1WtAkfb19NkYXN\",\n                  \"TradingFee\": 250,\n                  \"VoteWeight\": 90\n                }\n              },\n              {\n                \"VoteEntry\": {\n                  \"Account\": \"rPL9AqJtUqw5UWGgizCormAMtZhWoLBwbS\",\n                  \"TradingFee\": 400,\n                  \"VoteWeight\": 90\n                }\n              }\n            ]\n          },\n          \"LedgerEntryType\": \"AMM\",\n          \"LedgerIndex\": \"9ADECA79A6FA8287F94FDA558E5DDB15C33856E73910991EE842A7B170F45B35\",\n          \"PreviousFields\": {\n            \"LPTokenBalance\": {\n              \"currency\": \"03930D02208264E2E40EC1B0C09E4DB96EE197B1\",\n              \"issuer\": \"rHrzrzVHSyunKzW3JLgSaLcsxfwVLPVV97\",\n              \"value\": \"10227406.29545451\"\n            }\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-19000\"\n            },\n            \"Flags\": 131072,\n            \"HighLimit\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rhmfYgnWbKKwYNJbh3iysPHbz7aparZ1qd\",\n              \"value\": \"60000\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rA3nNmhWKRZvcsA89DxTRbV62JiaSZWdy\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"F966CB2731E550DB40887518B4E6E73E4F0F8E63CC77BC6918AF610753977FC2\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-20000\"\n            }\n          },\n          \"PreviousTxnID\": \"1853F40E7D243AE2CDC86BEF435F0251E3115F912F624DBC4B4EC42EB70788A7\",\n          \"PreviousTxnLgrSeq\": 113560\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"03930D02208264E2E40EC1B0C09E4DB96EE197B1\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"10527461.16220186\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"03930D02208264E2E40EC1B0C09E4DB96EE197B1\",\n              \"issuer\": \"rHrzrzVHSyunKzW3JLgSaLcsxfwVLPVV97\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"03930D02208264E2E40EC1B0C09E4DB96EE197B1\",\n              \"issuer\": \"rhmfYgnWbKKwYNJbh3iysPHbz7aparZ1qd\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"FE014629D5BE7D92E9A520189D5758FAB0E7A4C672A1F0847AD1B790C04CC395\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"03930D02208264E2E40EC1B0C09E4DB96EE197B1\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"10000000\"\n            }\n          },\n          \"PreviousTxnID\": \"1853F40E7D243AE2CDC86BEF435F0251E3115F912F624DBC4B4EC42EB70788A7\",\n          \"PreviousTxnLgrSeq\": 113560\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tesSUCCESS\"\n  },\n  \"hash\": \"9B4AFEE8FD2E47E71089585A9A0B8E8B2643B0328DA570B9DB1EC1820795CB16\",\n  \"ledger_index\": 114526,\n  \"date\": \"2023-01-17T23:34:32Z\"\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/AMMDeposit/test/mock_data/deposit_fail.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rhmfYgnWbKKwYNJbh3iysPHbz7aparZ1qd\",\n    \"Amount\": \"100000000\",\n    \"Asset\": {\n      \"currency\": \"XRP\"\n    },\n    \"Asset2\": {\n      \"currency\": \"USD\",\n      \"issuer\": \"rA3nNmhWKRZvcsA89DxTRbV62JiaSZWdy\"\n    },\n    \"Fee\": \"10\",\n    \"Flags\": 524288,\n    \"Sequence\": 113545,\n    \"SigningPubKey\": \"031E3709F92AF9138B63CCDEC7357E3779762F3FB3BB56F6966D7040644B0E179C\",\n    \"TransactionType\": \"AMMWithdraw\",\n    \"TxnSignature\": \"3044022079422294399EE1A47EB35C018CD7775E074E51BB161E005E09754243FBDA58B902203775B497F7D2993F4BA0DAC4F9E8362BEB583D261C6F4E043303451B70942428\",\n    \"date\": \"2023-01-18T01:20:21Z\"\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rhmfYgnWbKKwYNJbh3iysPHbz7aparZ1qd\",\n            \"Balance\": \"41057652006\",\n            \"Flags\": 0,\n            \"OwnerCount\": 1,\n            \"Sequence\": 113546\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"1E47D3574E19E3D519D57FF5B3A6EE7622A5998A82DF170C440C8CB7AA0015E1\",\n          \"PreviousFields\": {\n            \"Balance\": \"41057652016\",\n            \"Sequence\": 113545\n          },\n          \"PreviousTxnID\": \"C7B058C67F97CF7C5F8B135BFF702FFE320130CB9516422BA82256D99E07F9F0\",\n          \"PreviousTxnLgrSeq\": 116474\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tecAMM_BALANCE\"\n  }\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/AMMDeposit/test/mock_data/deposit_lptoken.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rLGLRLAyh6sPsYYddF9XighPaK6YyhftpW\",\n    \"Amount\": \"2000000\",\n    \"Amount2\": {\n      \"currency\": \"574C464900000000000000000000000000000000\",\n      \"issuer\": \"rGVxqEKH58bAZQKoRjyBJkYDPazCRxsqJ\",\n      \"value\": \"15839384.398443\"\n    },\n    \"Asset\": {\n      \"currency\": \"XRP\"\n    },\n    \"Asset2\": {\n      \"currency\": \"574C464900000000000000000000000000000000\",\n      \"issuer\": \"rGVxqEKH58bAZQKoRjyBJkYDPazCRxsqJ\"\n    },\n    \"Fee\": \"12\",\n    \"Flags\": 1048576,\n    \"LastLedgerSequence\": 97520507,\n    \"Sequence\": 91550423,\n    \"SigningPubKey\": \"026140E2349AAFD11B9C702E43F86400773E85755639190EBFFD7DC65C53A0DE92\",\n    \"SourceTag\": 74920348,\n    \"TransactionType\": \"AMMDeposit\",\n    \"TxnSignature\": \"3045022100DB8B1F1B39F9958F4EBBB368A4462392EF71F42B0BBD17EC2B179114484B55E602204B843FA969062FEFD723DA65694361A67823367CB7C25977B9086B90A7B17616\",\n    \"hash\": \"6D85FF2BEE30E53F690A0DBEBCAAB83AD207E264A49EA83DE29A30A1BD36D06D\",\n    \"ctid\": \"C5D00B6900000000\"\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"574C464900000000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-240776638.5747707\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"574C464900000000000000000000000000000000\",\n              \"issuer\": \"rLGLRLAyh6sPsYYddF9XighPaK6YyhftpW\",\n              \"value\": \"99997097504.31943\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"574C464900000000000000000000000000000000\",\n              \"issuer\": \"rGVxqEKH58bAZQKoRjyBJkYDPazCRxsqJ\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"1b\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"2FECF5F478EBC8E22E0109353461944B3B16CDEFE923124797C21ECF231AEBCA\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"574C464900000000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-256616022.97321\"\n            }\n          },\n          \"PreviousTxnID\": \"D7FDEA1E7827F015E9BA86903D13FC38B5BC64D1FD5BBF75C3E432B915B61408\",\n          \"PreviousTxnLgrSeq\": 97520440\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"AMMID\": \"660E6977E9842140E7310436A362DD276C77EA66CBBC06CBAD53CA83030B9E62\",\n            \"Account\": \"rn8gn11MeoxnAcSvHiTGDUdvAZydGvXp21\",\n            \"Balance\": \"1431840972\",\n            \"Flags\": 26214400,\n            \"OwnerCount\": 1,\n            \"Sequence\": 93580609\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"501BE541F2A35C3FF167481E543C5CD320F8F221AAC2CB9F9699AEF7A81239C1\",\n          \"PreviousFields\": {\n            \"Balance\": \"1429840972\"\n          },\n          \"PreviousTxnID\": \"D7FDEA1E7827F015E9BA86903D13FC38B5BC64D1FD5BBF75C3E432B915B61408\",\n          \"PreviousTxnLgrSeq\": 97520440\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"574C464900000000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-11339739776.4744\"\n            },\n            \"Flags\": 16908288,\n            \"HighLimit\": {\n              \"currency\": \"574C464900000000000000000000000000000000\",\n              \"issuer\": \"rn8gn11MeoxnAcSvHiTGDUdvAZydGvXp21\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"574C464900000000000000000000000000000000\",\n              \"issuer\": \"rGVxqEKH58bAZQKoRjyBJkYDPazCRxsqJ\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"11\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"6348E9F846C58DF3587F80E52A68F661094692576D84107686FD871485D9EA63\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"574C464900000000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-11323900392.07596\"\n            }\n          },\n          \"PreviousTxnID\": \"D7FDEA1E7827F015E9BA86903D13FC38B5BC64D1FD5BBF75C3E432B915B61408\",\n          \"PreviousTxnLgrSeq\": 97520440\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rn8gn11MeoxnAcSvHiTGDUdvAZydGvXp21\",\n            \"Asset\": {\n              \"currency\": \"XRP\"\n            },\n            \"Asset2\": {\n              \"currency\": \"574C464900000000000000000000000000000000\",\n              \"issuer\": \"rGVxqEKH58bAZQKoRjyBJkYDPazCRxsqJ\"\n            },\n            \"AuctionSlot\": {\n              \"Account\": \"rHPHmsoofHe83Grzkczzar6HaBixZYLi2y\",\n              \"DiscountedFee\": 100,\n              \"Expiration\": 790758222,\n              \"Price\": {\n                \"currency\": \"034326630D65E49CE46381F3DF6C333A24EF9DD5\",\n                \"issuer\": \"rn8gn11MeoxnAcSvHiTGDUdvAZydGvXp21\",\n                \"value\": \"0\"\n              }\n            },\n            \"Flags\": 0,\n            \"LPTokenBalance\": {\n              \"currency\": \"034326630D65E49CE46381F3DF6C333A24EF9DD5\",\n              \"issuer\": \"rn8gn11MeoxnAcSvHiTGDUdvAZydGvXp21\",\n              \"value\": \"3063668890.262321\"\n            },\n            \"OwnerNode\": \"0\",\n            \"TradingFee\": 1000,\n            \"VoteSlots\": [\n              {\n                \"VoteEntry\": {\n                  \"Account\": \"rHPHmsoofHe83Grzkczzar6HaBixZYLi2y\",\n                  \"TradingFee\": 1000,\n                  \"VoteWeight\": 76247\n                }\n              },\n              {\n                \"VoteEntry\": {\n                  \"Account\": \"rNJkfihfGdQdeB6oAdizUc1naQzJ7SMnhf\",\n                  \"TradingFee\": 1000,\n                  \"VoteWeight\": 532\n                }\n              },\n              {\n                \"VoteEntry\": {\n                  \"Account\": \"rp9T8C1KpaYAk79PSr2wjWQ19B2jFpVoiW\",\n                  \"TradingFee\": 1000,\n                  \"VoteWeight\": 8122\n                }\n              }\n            ]\n          },\n          \"LedgerEntryType\": \"AMM\",\n          \"LedgerIndex\": \"660E6977E9842140E7310436A362DD276C77EA66CBBC06CBAD53CA83030B9E62\",\n          \"PreviousFields\": {\n            \"LPTokenBalance\": {\n              \"currency\": \"034326630D65E49CE46381F3DF6C333A24EF9DD5\",\n              \"issuer\": \"rn8gn11MeoxnAcSvHiTGDUdvAZydGvXp21\",\n              \"value\": \"3059389547.863029\"\n            }\n          },\n          \"PreviousTxnID\": \"0C37E99203905408BC222E63E1F965C264D569A7F4C51E4938EBA9385C43EB27\",\n          \"PreviousTxnLgrSeq\": 97437889\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rLGLRLAyh6sPsYYddF9XighPaK6YyhftpW\",\n            \"RootIndex\": \"84E6E4868CEC3A7377D656D8A37E0866A882128D29D24D036463FB698D4C9276\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"84E6E4868CEC3A7377D656D8A37E0866A882128D29D24D036463FB698D4C9276\",\n          \"PreviousTxnID\": \"6B31C0F6B523361716C7E9708F289C11D907404929AB9C61CB927F612A37E6E8\",\n          \"PreviousTxnLgrSeq\": 97520316\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rn8gn11MeoxnAcSvHiTGDUdvAZydGvXp21\",\n            \"RootIndex\": \"B78034000734213582DBD8519C932A6948B8104450BD5CDBB0576C85053E84E7\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"B78034000734213582DBD8519C932A6948B8104450BD5CDBB0576C85053E84E7\",\n          \"PreviousTxnID\": \"0C37E99203905408BC222E63E1F965C264D569A7F4C51E4938EBA9385C43EB27\",\n          \"PreviousTxnLgrSeq\": 97437889\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rLGLRLAyh6sPsYYddF9XighPaK6YyhftpW\",\n            \"Balance\": \"6132666\",\n            \"Flags\": 0,\n            \"OwnerCount\": 16,\n            \"Sequence\": 91550424\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"F44F6CFB64D54D5B4D320F9A7B0D961291D9197A856ABA8F84F3E6ACED42A5F5\",\n          \"PreviousFields\": {\n            \"Balance\": \"8132678\",\n            \"OwnerCount\": 15,\n            \"Sequence\": 91550423\n          },\n          \"PreviousTxnID\": \"CB64B17D730809C689CAABA3A4BDE106B39164B0FDFD667C3598DE8F125C0154\",\n          \"PreviousTxnLgrSeq\": 97520485\n        }\n      },\n      {\n        \"CreatedNode\": {\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"FF4C8A2AE9481F513489CBC71216C9BD93AD9A3711F34782706E29DFBF2ED694\",\n          \"NewFields\": {\n            \"Balance\": {\n              \"currency\": \"034326630D65E49CE46381F3DF6C333A24EF9DD5\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-4279342.399292\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"034326630D65E49CE46381F3DF6C333A24EF9DD5\",\n              \"issuer\": \"rLGLRLAyh6sPsYYddF9XighPaK6YyhftpW\",\n              \"value\": \"0\"\n            },\n            \"LowLimit\": {\n              \"currency\": \"034326630D65E49CE46381F3DF6C333A24EF9DD5\",\n              \"issuer\": \"rn8gn11MeoxnAcSvHiTGDUdvAZydGvXp21\",\n              \"value\": \"0\"\n            }\n          }\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tesSUCCESS\"\n  },\n  \"validated\": true,\n  \"date\": 1752703261000,\n  \"ledger_index\": 97520489,\n  \"inLedger\": 97520489,\n  \"TransactionIndex\": 0,\n  \"TransactionResult\": \"tesSUCCESS\"\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/AMMDeposit/test/mock_data/deposit_nonxrp.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rno4rnVC5E8b3pLsQhkDV83nBf4k8ThdyG\",\n    \"Amount\": {\n      \"currency\": \"USD\",\n      \"issuer\": \"rEaiyQKvxYWmh7q9mvSm11kZmKx92HZdmr\",\n      \"value\": \"500\"\n    },\n    \"Amount2\": {\n      \"currency\": \"EUR\",\n      \"issuer\": \"rEaiyQKvxYWmh7q9mvSm11kZmKx92HZdmr\",\n      \"value\": \"500\"\n    },\n    \"Asset\": {\n      \"currency\": \"EUR\",\n      \"issuer\": \"rEaiyQKvxYWmh7q9mvSm11kZmKx92HZdmr\",\n      \"amount\": 500\n    },\n    \"Asset2\": {\n      \"currency\": \"USD\",\n      \"issuer\": \"rEaiyQKvxYWmh7q9mvSm11kZmKx92HZdmr\",\n      \"amount\": 500\n    },\n    \"Fee\": \"10\",\n    \"Flags\": 1048576,\n    \"Sequence\": 172369,\n    \"SigningPubKey\": \"034F64DC1AA64405C826E76FE2C1E75CF009C383AFE170882004357BC02CC7677F\",\n    \"TransactionType\": \"AMMDeposit\",\n    \"TxnSignature\": \"30440220018BF040C92E3CD09471D61E518FA6888C3EF30D974ECC123FD6B46BF32CDBFB02204CAE4B71D611E77E3655641862F90CBDCBBAEC87F1807A390C7C9D6B9C21D38F\",\n    \"date\": \"2023-01-19T23:58:40Z\"\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"03FE31F736943F050684BDDE2A78B1D2AE331DF5\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"10500\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"03FE31F736943F050684BDDE2A78B1D2AE331DF5\",\n              \"issuer\": \"rEJ1X5BoSmHqa5h6TSVvYrHAzFmyxGqNic\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"03FE31F736943F050684BDDE2A78B1D2AE331DF5\",\n              \"issuer\": \"rno4rnVC5E8b3pLsQhkDV83nBf4k8ThdyG\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"0F93EA0030F7FF31713CEEE05DB871B26BEEBBA1C7DAA18FEFFBF6E66C0D2046\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"03FE31F736943F050684BDDE2A78B1D2AE331DF5\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"10000\"\n            }\n          },\n          \"PreviousTxnID\": \"60D62672AFD306B2922EE34FF2FAF36471437A56CB745C34E9A144E297DAD4B1\",\n          \"PreviousTxnLgrSeq\": 172387\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rEJ1X5BoSmHqa5h6TSVvYrHAzFmyxGqNic\",\n            \"Asset\": {\n              \"currency\": \"EUR\",\n              \"issuer\": \"rEaiyQKvxYWmh7q9mvSm11kZmKx92HZdmr\"\n            },\n            \"Asset2\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rEaiyQKvxYWmh7q9mvSm11kZmKx92HZdmr\"\n            },\n            \"Flags\": 0,\n            \"LPTokenBalance\": {\n              \"currency\": \"03FE31F736943F050684BDDE2A78B1D2AE331DF5\",\n              \"issuer\": \"rEJ1X5BoSmHqa5h6TSVvYrHAzFmyxGqNic\",\n              \"value\": \"10500\"\n            },\n            \"TradingFee\": 0\n          },\n          \"LedgerEntryType\": \"AMM\",\n          \"LedgerIndex\": \"3BC36D1B0563D5E0C56F2AED812A5A75F20077AEC8A50E912CC9F5AE7A9097B3\",\n          \"PreviousFields\": {\n            \"LPTokenBalance\": {\n              \"currency\": \"03FE31F736943F050684BDDE2A78B1D2AE331DF5\",\n              \"issuer\": \"rEJ1X5BoSmHqa5h6TSVvYrHAzFmyxGqNic\",\n              \"value\": \"10000\"\n            }\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"89500\"\n            },\n            \"Flags\": 2162688,\n            \"HighLimit\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rEaiyQKvxYWmh7q9mvSm11kZmKx92HZdmr\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rno4rnVC5E8b3pLsQhkDV83nBf4k8ThdyG\",\n              \"value\": \"1000000\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"41517EE2A364A2B4DBFCBC3BC794A4A9259F2DFBCF3EA494658829AD2F6708EF\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"90000\"\n            }\n          },\n          \"PreviousTxnID\": \"60D62672AFD306B2922EE34FF2FAF36471437A56CB745C34E9A144E297DAD4B1\",\n          \"PreviousTxnLgrSeq\": 172387\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"EUR\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-10500\"\n            },\n            \"Flags\": 17956864,\n            \"HighLimit\": {\n              \"currency\": \"EUR\",\n              \"issuer\": \"rEJ1X5BoSmHqa5h6TSVvYrHAzFmyxGqNic\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"EUR\",\n              \"issuer\": \"rEaiyQKvxYWmh7q9mvSm11kZmKx92HZdmr\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"4224B4C62D8B15C1657EE66664738E039704D60BE9042E9D2C5F7F0A357B5C87\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"EUR\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-10000\"\n            }\n          },\n          \"PreviousTxnID\": \"60D62672AFD306B2922EE34FF2FAF36471437A56CB745C34E9A144E297DAD4B1\",\n          \"PreviousTxnLgrSeq\": 172387\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"EUR\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"189500\"\n            },\n            \"Flags\": 2162688,\n            \"HighLimit\": {\n              \"currency\": \"EUR\",\n              \"issuer\": \"rEaiyQKvxYWmh7q9mvSm11kZmKx92HZdmr\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"EUR\",\n              \"issuer\": \"rno4rnVC5E8b3pLsQhkDV83nBf4k8ThdyG\",\n              \"value\": \"1000000\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"80D9AB85EC6BB25BD87A676EFB9B14EF1D1D3CC9B01CDDE3C0A0C7A4D27B12B5\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"EUR\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"190000\"\n            }\n          },\n          \"PreviousTxnID\": \"60D62672AFD306B2922EE34FF2FAF36471437A56CB745C34E9A144E297DAD4B1\",\n          \"PreviousTxnLgrSeq\": 172387\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rno4rnVC5E8b3pLsQhkDV83nBf4k8ThdyG\",\n            \"Balance\": \"9994999970\",\n            \"Flags\": 0,\n            \"OwnerCount\": 3,\n            \"Sequence\": 172370\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"98A64F6B42164DEACE36E05D3482633645DDD02E78A345C927BC5B846695F607\",\n          \"PreviousFields\": {\n            \"Balance\": \"9994999980\",\n            \"Sequence\": 172369\n          },\n          \"PreviousTxnID\": \"60D62672AFD306B2922EE34FF2FAF36471437A56CB745C34E9A144E297DAD4B1\",\n          \"PreviousTxnLgrSeq\": 172387\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-10500\"\n            },\n            \"Flags\": 17956864,\n            \"HighLimit\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rEJ1X5BoSmHqa5h6TSVvYrHAzFmyxGqNic\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rEaiyQKvxYWmh7q9mvSm11kZmKx92HZdmr\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"F1AA3596A743B3D5A16C7725278C3190EB19DC7237758697B8BD2E8488F9FC5C\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-10000\"\n            }\n          },\n          \"PreviousTxnID\": \"60D62672AFD306B2922EE34FF2FAF36471437A56CB745C34E9A144E297DAD4B1\",\n          \"PreviousTxnLgrSeq\": 172387\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tesSUCCESS\"\n  },\n  \"hash\": \"F031EC2F67432AE3DA8084EA8CC3CA3832CC5BF7B1D37161E01C5533E699EC77\",\n  \"ledger_index\": 172412,\n  \"date\": \"2023-01-19T23:58:40Z\"\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/AMMDeposit/test/mock_data/deposit_usd.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rUwaiErsYE5kibUUtaPczXZVVd73VNy4R9\",\n    \"Amount\": {\n      \"currency\": \"USD\",\n      \"issuer\": \"rhpHaFggC92ELty3n3yDEtuFgWxXWkUFET\",\n      \"value\": \"2000\"\n    },\n    \"Asset\": {\n      \"currency\": \"XRP\"\n    },\n    \"Asset2\": {\n      \"currency\": \"USD\",\n      \"issuer\": \"rhpHaFggC92ELty3n3yDEtuFgWxXWkUFET\"\n    },\n    \"Fee\": \"10\",\n    \"Flags\": 524288,\n    \"Sequence\": 10,\n    \"SigningPubKey\": \"023CFED4018084296285DD8A321C099134B9CF6DCD8D91DC067BABCFF0E3F2BE1A\",\n    \"TransactionType\": \"AMMDeposit\",\n    \"TxnSignature\": \"3045022100E97288DE0E1A6232A35227D3EF95A75D1E902D123E1C4CC8E69686A0D5A30BED022071639476F7A7999927E859AB3AE4FCD73D016E94B3886CD2A85DDCA8173EE42B\",\n    \"date\": \"2022-11-28T22:39:12Z\"\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"03930D02208264E2E40EC1B0C09E4DB96EE197B1\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"12025413.73598727\"\n            },\n            \"Flags\": 65536,\n            \"HighLimit\": {\n              \"currency\": \"03930D02208264E2E40EC1B0C09E4DB96EE197B1\",\n              \"issuer\": \"rMEdVzU8mtEArzjrN9avm3kA675GX7ez8W\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"03930D02208264E2E40EC1B0C09E4DB96EE197B1\",\n              \"issuer\": \"rUwaiErsYE5kibUUtaPczXZVVd73VNy4R9\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"32951EDAF938635BE23319144E5420B4F2D19E81483B5759F535FEF0730AF797\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"03930D02208264E2E40EC1B0C09E4DB96EE197B1\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"11001684.93864386\"\n            }\n          },\n          \"PreviousTxnID\": \"14DE7AE1A29A0CE13FEBABCF4EBCD48AF4945725CA07405EC0E0A50CBCE29CCC\",\n          \"PreviousTxnLgrSeq\": 317249\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rUwaiErsYE5kibUUtaPczXZVVd73VNy4R9\",\n            \"Balance\": \"987975959909\",\n            \"Flags\": 8388608,\n            \"OwnerCount\": 2,\n            \"Sequence\": 11\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"53383A918D45DEF78DED23CE5141C0FAB44661D602465F5FCFC487792448F1E2\",\n          \"PreviousFields\": {\n            \"Balance\": \"987975959919\",\n            \"Sequence\": 10\n          },\n          \"PreviousTxnID\": \"14DE7AE1A29A0CE13FEBABCF4EBCD48AF4945725CA07405EC0E0A50CBCE29CCC\",\n          \"PreviousTxnLgrSeq\": 317249\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-22026.78756798392\"\n            },\n            \"Flags\": 131072,\n            \"HighLimit\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rMEdVzU8mtEArzjrN9avm3kA675GX7ez8W\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rhpHaFggC92ELty3n3yDEtuFgWxXWkUFET\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"65B78B3B60DA403E99C8CC526882EC34299AF2BA135842CE489C02F82D0203F3\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-20026.78756798392\"\n            }\n          },\n          \"PreviousTxnID\": \"14DE7AE1A29A0CE13FEBABCF4EBCD48AF4945725CA07405EC0E0A50CBCE29CCC\",\n          \"PreviousTxnLgrSeq\": 317249\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-987973.2124320161\"\n            },\n            \"Flags\": 131072,\n            \"HighLimit\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rUwaiErsYE5kibUUtaPczXZVVd73VNy4R9\",\n              \"value\": \"1000000\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rhpHaFggC92ELty3n3yDEtuFgWxXWkUFET\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"AB154A6C44E28D94D9856A68FA7BBB342F8A517E9107144646AE4880BED76117\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-989973.2124320161\"\n            }\n          },\n          \"PreviousTxnID\": \"14DE7AE1A29A0CE13FEBABCF4EBCD48AF4945725CA07405EC0E0A50CBCE29CCC\",\n          \"PreviousTxnLgrSeq\": 317249\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rMEdVzU8mtEArzjrN9avm3kA675GX7ez8W\",\n            \"Asset\": {\n              \"currency\": \"XRP\"\n            },\n            \"Asset2\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rhpHaFggC92ELty3n3yDEtuFgWxXWkUFET\"\n            },\n            \"Flags\": 0,\n            \"LPTokenBalance\": {\n              \"currency\": \"03930D02208264E2E40EC1B0C09E4DB96EE197B1\",\n              \"issuer\": \"rMEdVzU8mtEArzjrN9avm3kA675GX7ez8W\",\n              \"value\": \"22025413.73598727\"\n            },\n            \"TradingFee\": 0\n          },\n          \"LedgerEntryType\": \"AMM\",\n          \"LedgerIndex\": \"C7FD06649235AF4CABD8FA6D8BB0CAF6C6EA5038A74D0DDD5025290683636D02\",\n          \"PreviousFields\": {\n            \"LPTokenBalance\": {\n              \"currency\": \"03930D02208264E2E40EC1B0C09E4DB96EE197B1\",\n              \"issuer\": \"rMEdVzU8mtEArzjrN9avm3kA675GX7ez8W\",\n              \"value\": \"21001684.93864386\"\n            }\n          }\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tesSUCCESS\"\n  }\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/AMMDeposit/test/mock_data/deposit_xrp.json",
    "content": "{\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"03930D02208264E2E40EC1B0C09E4DB96EE197B1\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"515288.2582723813\"\n            },\n            \"Flags\": 65536,\n            \"HighLimit\": {\n              \"currency\": \"03930D02208264E2E40EC1B0C09E4DB96EE197B1\",\n              \"issuer\": \"rMEdVzU8mtEArzjrN9avm3kA675GX7ez8W\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"03930D02208264E2E40EC1B0C09E4DB96EE197B1\",\n              \"issuer\": \"rUwaiErsYE5kibUUtaPczXZVVd73VNy4R9\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"32951EDAF938635BE23319144E5420B4F2D19E81483B5759F535FEF0730AF797\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"03930D02208264E2E40EC1B0C09E4DB96EE197B1\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"27169\"\n            }\n          },\n          \"PreviousTxnID\": \"209B17403B42271F2D50DEC0F808AE07EC04B8B9605FF52B1093BFF31676AD2C\",\n          \"PreviousTxnLgrSeq\": 233852\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rMEdVzU8mtEArzjrN9avm3kA675GX7ez8W\",\n            \"Balance\": \"11027169000\",\n            \"Flags\": 59768832,\n            \"OwnerCount\": 1,\n            \"Sequence\": 1\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"471AC5276FBA4916D53017D7073D44C5F4780CC73954B1715DC8A65365E8ACAC\",\n          \"PreviousFields\": {\n            \"Balance\": \"10027169000\"\n          },\n          \"PreviousTxnID\": \"209B17403B42271F2D50DEC0F808AE07EC04B8B9605FF52B1093BFF31676AD2C\",\n          \"PreviousTxnLgrSeq\": 233852\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rUwaiErsYE5kibUUtaPczXZVVd73VNy4R9\",\n            \"Balance\": \"998972830930\",\n            \"Flags\": 8388608,\n            \"OwnerCount\": 2,\n            \"Sequence\": 8\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"53383A918D45DEF78DED23CE5141C0FAB44661D602465F5FCFC487792448F1E2\",\n          \"PreviousFields\": {\n            \"Balance\": \"999972830940\",\n            \"Sequence\": 7\n          },\n          \"PreviousTxnID\": \"209B17403B42271F2D50DEC0F808AE07EC04B8B9605FF52B1093BFF31676AD2C\",\n          \"PreviousTxnLgrSeq\": 233852\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rMEdVzU8mtEArzjrN9avm3kA675GX7ez8W\",\n            \"Asset\": {\n              \"currency\": \"XRP\"\n            },\n            \"Asset2\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rhpHaFggC92ELty3n3yDEtuFgWxXWkUFET\"\n            },\n            \"Flags\": 0,\n            \"LPTokenBalance\": {\n              \"currency\": \"03930D02208264E2E40EC1B0C09E4DB96EE197B1\",\n              \"issuer\": \"rMEdVzU8mtEArzjrN9avm3kA675GX7ez8W\",\n              \"value\": \"10515288.25827238\"\n            },\n            \"TradingFee\": 0\n          },\n          \"LedgerEntryType\": \"AMM\",\n          \"LedgerIndex\": \"C7FD06649235AF4CABD8FA6D8BB0CAF6C6EA5038A74D0DDD5025290683636D02\",\n          \"PreviousFields\": {\n            \"LPTokenBalance\": {\n              \"currency\": \"03930D02208264E2E40EC1B0C09E4DB96EE197B1\",\n              \"issuer\": \"rMEdVzU8mtEArzjrN9avm3kA675GX7ez8W\",\n              \"value\": \"10027169\"\n            }\n          }\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tesSUCCESS\"\n  },\n  \"tx\": {\n    \"Account\": \"rUwaiErsYE5kibUUtaPczXZVVd73VNy4R9\",\n    \"Amount\": \"1000000000\",\n    \"Asset\": {\n      \"currency\": \"XRP\"\n    },\n    \"Asset2\": {\n      \"currency\": \"USD\",\n      \"issuer\": \"rhpHaFggC92ELty3n3yDEtuFgWxXWkUFET\"\n    },\n    \"Fee\": \"10\",\n    \"Flags\": 524288,\n    \"Sequence\": 7,\n    \"SigningPubKey\": \"023CFED4018084296285DD8A321C099134B9CF6DCD8D91DC067BABCFF0E3F2BE1A\",\n    \"TransactionType\": \"AMMDeposit\",\n    \"TxnSignature\": \"3045022100D1363F0A6D7252690820657B6ACCB35245E65D8DCDB48199578C213ED9D3E24B0220697D4DC057ECCD942BC59B0242411839C125696CD9DE9A3EFE45367EE0D1D29D\",\n    \"date\": \"2022-11-26T00:55:02Z\"\n  }\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/AMMVote/Simple.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { SimpleRow } from '../SimpleRow'\nimport { TransactionSimpleProps } from '../types'\nimport { formatTradingFee } from '../../../utils'\nimport { Account } from '../../Account'\nimport { Amount } from '../../Amount'\n\nexport const Simple = ({ data }: TransactionSimpleProps) => {\n  const { t } = useTranslation()\n  const { amount, amount2, tradingFee, ammAccountID } = data.instructions\n  const tf = formatTradingFee(tradingFee)\n\n  return (\n    <>\n      {ammAccountID && (\n        <SimpleRow label={t('amm_account_id')} data-testid=\"account_id\">\n          <Account account={ammAccountID} />\n        </SimpleRow>\n      )}\n      {amount && (\n        <SimpleRow label={t('asset1')} data-testid=\"asset1\">\n          <Amount value={amount} />\n        </SimpleRow>\n      )}\n      {amount2 && (\n        <SimpleRow label={t('asset2')} data-testid=\"asset2\">\n          <Amount value={amount2} />\n        </SimpleRow>\n      )}\n      {tf && (\n        <SimpleRow label={t('trading_fee')} data-testid=\"trading_fee\">\n          {tf}%\n        </SimpleRow>\n      )}\n    </>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/AMMVote/index.ts",
    "content": "import { Simple } from './Simple'\nimport {\n  TransactionAction,\n  TransactionCategory,\n  TransactionMapping,\n} from '../types'\n\nimport { parser } from './parser'\n\nexport const AMMVote: TransactionMapping = {\n  Simple,\n  action: TransactionAction.MODIFY,\n  category: TransactionCategory.DEX,\n  parser,\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/AMMVote/parser.ts",
    "content": "import { findAssetAmount, getAMMAccountID } from '../../../metaParser'\n\nexport function parser(tx: any, meta: any) {\n  const tradingFee = tx.TradingFee\n  const ammAccountID = getAMMAccountID(meta)\n  const amount = findAssetAmount(meta, tx.Asset, tx)\n  const amount2 = findAssetAmount(meta, tx.Asset2, tx)\n\n  return {\n    tradingFee,\n    ammAccountID,\n    amount,\n    amount2,\n  }\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/AMMVote/test/AMMVote.test.tsx",
    "content": "import { Simple } from '../Simple'\nimport { createSimpleRenderFactory, expectSimpleRowText } from '../../test'\nimport voteMock from './mock_data/amm_vote.json'\n\ndescribe('AMM Vote Tests', () => {\n  const renderComponent = createSimpleRenderFactory(Simple)\n\n  it('renders from transaction', () => {\n    const { container, unmount } = renderComponent(voteMock)\n    expectSimpleRowText(container, 'trading_fee', '0.001%')\n    expectSimpleRowText(\n      container,\n      'account_id',\n      'rMEdVzU8mtEArzjrN9avm3kA675GX7ez8W',\n    )\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/AMMVote/test/mock_data/amm_vote.json",
    "content": "{\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rUwaiErsYE5kibUUtaPczXZVVd73VNy4R9\",\n            \"Balance\": \"991642540751\",\n            \"Flags\": 8388608,\n            \"OwnerCount\": 2,\n            \"Sequence\": 15\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"53383A918D45DEF78DED23CE5141C0FAB44661D602465F5FCFC487792448F1E2\",\n          \"PreviousFields\": {\n            \"Balance\": \"991642540761\",\n            \"Sequence\": 14\n          },\n          \"PreviousTxnID\": \"C23F7BB2A7F80DBCE9AB5CBA1E3F1CA20F2E68F34B98ADE7C4241B68E4574FEA\",\n          \"PreviousTxnLgrSeq\": 376513\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rMEdVzU8mtEArzjrN9avm3kA675GX7ez8W\",\n            \"Asset\": {\n              \"currency\": \"XRP\"\n            },\n            \"Asset2\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rhpHaFggC92ELty3n3yDEtuFgWxXWkUFET\"\n            },\n            \"AuctionSlot\": {\n              \"Account\": \"rUwaiErsYE5kibUUtaPczXZVVd73VNy4R9\",\n              \"DiscountedFee\": 0,\n              \"Expiration\": 723254240,\n              \"Price\": {\n                \"currency\": \"03930D02208264E2E40EC1B0C09E4DB96EE197B1\",\n                \"issuer\": \"rMEdVzU8mtEArzjrN9avm3kA675GX7ez8W\",\n                \"value\": \"191.7396500029036\"\n              }\n            },\n            \"Flags\": 0,\n            \"LPTokenBalance\": {\n              \"currency\": \"03930D02208264E2E40EC1B0C09E4DB96EE197B1\",\n              \"issuer\": \"rMEdVzU8mtEArzjrN9avm3kA675GX7ez8W\",\n              \"value\": \"19173773.26064036\"\n            },\n            \"TradingFee\": 1,\n            \"VoteSlots\": [\n              {\n                \"VoteEntry\": {\n                  \"Account\": \"rUwaiErsYE5kibUUtaPczXZVVd73VNy4R9\",\n                  \"TradingFee\": 1,\n                  \"VoteWeight\": 47845\n                }\n              }\n            ]\n          },\n          \"LedgerEntryType\": \"AMM\",\n          \"LedgerIndex\": \"C7FD06649235AF4CABD8FA6D8BB0CAF6C6EA5038A74D0DDD5025290683636D02\",\n          \"PreviousFields\": {\n            \"TradingFee\": 0\n          }\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tesSUCCESS\"\n  },\n  \"tx\": {\n    \"Account\": \"rUwaiErsYE5kibUUtaPczXZVVd73VNy4R9\",\n    \"Asset\": {\n      \"currency\": \"XRP\"\n    },\n    \"Asset2\": {\n      \"currency\": \"USD\",\n      \"issuer\": \"rhpHaFggC92ELty3n3yDEtuFgWxXWkUFET\"\n    },\n    \"Fee\": \"10\",\n    \"Flags\": 0,\n    \"Sequence\": 14,\n    \"SigningPubKey\": \"023CFED4018084296285DD8A321C099134B9CF6DCD8D91DC067BABCFF0E3F2BE1A\",\n    \"TradingFee\": 1,\n    \"TransactionType\": \"AMMVote\",\n    \"TxnSignature\": \"3045022100978CE4DB4D648CE0E5F8744A0D29F40AD1A7874AF3D80E3DF06A4FC7A830EB5B022009ACABE3EE71B368520649A1F0251256137CA9B5742EEFDA8960C7E567670929\",\n    \"date\": \"2022-11-30T23:57:42Z\"\n  }\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/AMMWithdraw/Simple.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { SimpleRow } from '../SimpleRow'\nimport { TransactionSimpleProps } from '../types'\nimport { localizeNumber } from '../../../utils'\nimport { Account } from '../../Account'\nimport { Amount } from '../../Amount'\n\nexport const Simple = ({ data }: TransactionSimpleProps) => {\n  const { t } = useTranslation()\n  const { amount, amount2, lpTokens, ammAccountID, ePrice } = data.instructions\n  const lpTokenFormatted = lpTokens?.amount\n    ? localizeNumber(lpTokens.amount, 'en-US', {\n        minimumFractionDigits: 0,\n        maximumFractionDigits: 2,\n      })\n    : undefined\n\n  return (\n    <>\n      {ammAccountID && (\n        <SimpleRow label={t('amm_account_id')} data-testid=\"account_id\">\n          <Account account={ammAccountID} />\n        </SimpleRow>\n      )}\n      {amount && (\n        <SimpleRow label={t('asset1out')} data-testid=\"asset1\">\n          <Amount value={amount} />\n        </SimpleRow>\n      )}\n      {amount2 && (\n        <SimpleRow label={t('asset2out')} data-testid=\"asset2\">\n          <Amount value={amount2} />\n        </SimpleRow>\n      )}\n      {ePrice && (\n        <SimpleRow label={t('effective_price')} data-testid=\"effective_price\">\n          <Amount value={ePrice} />\n        </SimpleRow>\n      )}\n      {lpTokenFormatted && (\n        <SimpleRow label={t('lp_tokens')} data-testid=\"lp_tokens\">\n          {lpTokenFormatted}\n        </SimpleRow>\n      )}\n    </>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/AMMWithdraw/index.ts",
    "content": "import { Simple } from './Simple'\nimport {\n  TransactionAction,\n  TransactionCategory,\n  TransactionMapping,\n} from '../types'\nimport { parser } from './parser'\n\nexport const AMMWithdraw: TransactionMapping = {\n  Simple,\n  action: TransactionAction.SEND,\n  category: TransactionCategory.DEX,\n  parser,\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/AMMWithdraw/parser.ts",
    "content": "import {\n  findAssetAmount,\n  getAMMAccountID,\n  getLPTokenAmount,\n} from '../../../metaParser'\nimport { formatAmount } from '../../../../../rippled/lib/txSummary/formatAmount'\n\nexport function parser(tx: any, meta: any) {\n  const ammAccountID = getAMMAccountID(meta)\n  const lpTokens = getLPTokenAmount(meta)\n  const ePrice = formatAmount(tx.EPrice)\n  const amount = findAssetAmount(meta, tx.Asset, tx)\n  const amount2 = findAssetAmount(meta, tx.Asset2, tx)\n\n  return {\n    amount,\n    amount2,\n    ammAccountID,\n    lpTokens,\n    ePrice,\n  }\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/AMMWithdraw/test/AMMWithdraw.test.tsx",
    "content": "import { Simple } from '../Simple'\nimport {\n  createSimpleRenderFactory,\n  expectSimpleRowNotToExist,\n  expectSimpleRowText,\n} from '../../test'\nimport withdrawMock from './mock_data/withdraw.json'\nimport withdrawUSDMock from './mock_data/withdraw_usd.json'\nimport withdrawXRPMock from './mock_data/withdraw_xrp.json'\nimport withdrawEpriceMock from './mock_data/withdraw_eprice.json'\nimport withdrawAll from './mock_data/withdraw_all.json'\n\ndescribe('AMM Withdraw Tests', () => {\n  const renderComponent = createSimpleRenderFactory(Simple)\n\n  it('renders from transaction', () => {\n    const { container, unmount } = renderComponent(withdrawMock)\n    expectSimpleRowText(container, 'asset1', '\\uE9003,666.580862 XRP')\n    expectSimpleRowText(\n      container,\n      'asset2',\n      '$4,000.00 USD.rhpHaFggC92ELty3n3yDEtuFgWxXWkUFET',\n    )\n    expectSimpleRowText(\n      container,\n      'account_id',\n      'rMEdVzU8mtEArzjrN9avm3kA675GX7ez8W',\n    )\n    unmount()\n  })\n\n  it('renders transaction from usd only', () => {\n    const { container, unmount } = renderComponent(withdrawUSDMock)\n    expectSimpleRowNotToExist(container, 'asset1')\n    expectSimpleRowText(\n      container,\n      'asset2',\n      '$100.00 USD.rA3nNmhWKRZvcsA89DxTRbV62JiaSZWdy',\n    )\n    expectSimpleRowText(\n      container,\n      'account_id',\n      'rHrzrzVHSyunKzW3JLgSaLcsxfwVLPVV97',\n    )\n    unmount()\n  })\n  it('renders transaction from XRP only', () => {\n    const { container, unmount } = renderComponent(withdrawXRPMock)\n    expectSimpleRowNotToExist(container, 'asset2')\n    expectSimpleRowText(container, 'asset1', '\\uE90099.99998 XRP')\n    expectSimpleRowText(\n      container,\n      'account_id',\n      'rHrzrzVHSyunKzW3JLgSaLcsxfwVLPVV97',\n    )\n    unmount()\n  })\n\n  it('renders transaction from eprice', () => {\n    const { container, unmount } = renderComponent(withdrawEpriceMock)\n    expectSimpleRowNotToExist(container, 'asset1')\n    expectSimpleRowText(\n      container,\n      'asset2',\n      '$1,639.41097028 USD.rA3nNmhWKRZvcsA89DxTRbV62JiaSZWdy',\n    )\n    expectSimpleRowText(\n      container,\n      'account_id',\n      'rHrzrzVHSyunKzW3JLgSaLcsxfwVLPVV97',\n    )\n    unmount()\n  })\n\n  it('renders LP Tokens properly', () => {\n    const { container, unmount } = renderComponent(withdrawAll)\n    expectSimpleRowText(container, 'lp_tokens', '4.77')\n    unmount()\n  })\n\n  it('renders positive XRP amount even if transaction fee is greater than XRP taken out of AMM', () => {\n    const { container, unmount } = renderComponent(withdrawAll)\n    expectSimpleRowNotToExist(container, 'asset2')\n    expectSimpleRowText(container, 'asset1', '\\uE9000.000005 XRP')\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/AMMWithdraw/test/mock_data/withdraw.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rUwaiErsYE5kibUUtaPczXZVVd73VNy4R9\",\n    \"Amount\": {\n      \"currency\": \"USD\",\n      \"issuer\": \"rhpHaFggC92ELty3n3yDEtuFgWxXWkUFET\",\n      \"value\": \"4000\"\n    },\n    \"Amount2\": \"4000000000\",\n    \"Asset\": {\n      \"currency\": \"XRP\"\n    },\n    \"Asset2\": {\n      \"currency\": \"USD\",\n      \"issuer\": \"rhpHaFggC92ELty3n3yDEtuFgWxXWkUFET\"\n    },\n    \"Fee\": \"10\",\n    \"Flags\": 1048576,\n    \"Sequence\": 12,\n    \"SigningPubKey\": \"023CFED4018084296285DD8A321C099134B9CF6DCD8D91DC067BABCFF0E3F2BE1A\",\n    \"TransactionType\": \"AMMWithdraw\",\n    \"TxnSignature\": \"304502210081F3DBDA3F0E9BEA18CE9E7F0E8C1A0083D8B98DD18A4C8B192B50F8788341A2022036AD3BD6F74C5F13FCBBF3FAA821D502E212C8C4ECE98AF2F98B1B7E430304EB\",\n    \"date\": \"2022-11-28T23:35:50Z\"\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"03930D02208264E2E40EC1B0C09E4DB96EE197B1\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"9173965.000290365\"\n            },\n            \"Flags\": 65536,\n            \"HighLimit\": {\n              \"currency\": \"03930D02208264E2E40EC1B0C09E4DB96EE197B1\",\n              \"issuer\": \"rMEdVzU8mtEArzjrN9avm3kA675GX7ez8W\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"03930D02208264E2E40EC1B0C09E4DB96EE197B1\",\n              \"issuer\": \"rUwaiErsYE5kibUUtaPczXZVVd73VNy4R9\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"32951EDAF938635BE23319144E5420B4F2D19E81483B5759F535FEF0730AF797\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"03930D02208264E2E40EC1B0C09E4DB96EE197B1\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"13003628.63160447\"\n            }\n          },\n          \"PreviousTxnID\": \"0FEA8D6779D0C6BAD7B3D6CD85A99A935E9176D696937A35BD7D2440AC9C97F0\",\n          \"PreviousTxnLgrSeq\": 317473\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rMEdVzU8mtEArzjrN9avm3kA675GX7ez8W\",\n            \"Balance\": \"18357459109\",\n            \"Flags\": 59768832,\n            \"OwnerCount\": 1,\n            \"Sequence\": 1\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"471AC5276FBA4916D53017D7073D44C5F4780CC73954B1715DC8A65365E8ACAC\",\n          \"PreviousFields\": {\n            \"Balance\": \"22024039991\"\n          },\n          \"PreviousTxnID\": \"14DE7AE1A29A0CE13FEBABCF4EBCD48AF4945725CA07405EC0E0A50CBCE29CCC\",\n          \"PreviousTxnLgrSeq\": 317249\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rUwaiErsYE5kibUUtaPczXZVVd73VNy4R9\",\n            \"Balance\": \"991642540771\",\n            \"Flags\": 8388608,\n            \"OwnerCount\": 2,\n            \"Sequence\": 13\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"53383A918D45DEF78DED23CE5141C0FAB44661D602465F5FCFC487792448F1E2\",\n          \"PreviousFields\": {\n            \"Balance\": \"987975959899\",\n            \"Sequence\": 12\n          },\n          \"PreviousTxnID\": \"0FEA8D6779D0C6BAD7B3D6CD85A99A935E9176D696937A35BD7D2440AC9C97F0\",\n          \"PreviousTxnLgrSeq\": 317473\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-20026.78756798392\"\n            },\n            \"Flags\": 131072,\n            \"HighLimit\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rMEdVzU8mtEArzjrN9avm3kA675GX7ez8W\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rhpHaFggC92ELty3n3yDEtuFgWxXWkUFET\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"65B78B3B60DA403E99C8CC526882EC34299AF2BA135842CE489C02F82D0203F3\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-24026.78756798392\"\n            }\n          },\n          \"PreviousTxnID\": \"0FEA8D6779D0C6BAD7B3D6CD85A99A935E9176D696937A35BD7D2440AC9C97F0\",\n          \"PreviousTxnLgrSeq\": 317473\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-989973.2124320161\"\n            },\n            \"Flags\": 131072,\n            \"HighLimit\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rUwaiErsYE5kibUUtaPczXZVVd73VNy4R9\",\n              \"value\": \"1000000\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rhpHaFggC92ELty3n3yDEtuFgWxXWkUFET\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"AB154A6C44E28D94D9856A68FA7BBB342F8A517E9107144646AE4880BED76117\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-985973.2124320161\"\n            }\n          },\n          \"PreviousTxnID\": \"0FEA8D6779D0C6BAD7B3D6CD85A99A935E9176D696937A35BD7D2440AC9C97F0\",\n          \"PreviousTxnLgrSeq\": 317473\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rMEdVzU8mtEArzjrN9avm3kA675GX7ez8W\",\n            \"Asset\": {\n              \"currency\": \"XRP\"\n            },\n            \"Asset2\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rhpHaFggC92ELty3n3yDEtuFgWxXWkUFET\"\n            },\n            \"Flags\": 0,\n            \"LPTokenBalance\": {\n              \"currency\": \"03930D02208264E2E40EC1B0C09E4DB96EE197B1\",\n              \"issuer\": \"rMEdVzU8mtEArzjrN9avm3kA675GX7ez8W\",\n              \"value\": \"19173965.00029036\"\n            },\n            \"TradingFee\": 0\n          },\n          \"LedgerEntryType\": \"AMM\",\n          \"LedgerIndex\": \"C7FD06649235AF4CABD8FA6D8BB0CAF6C6EA5038A74D0DDD5025290683636D02\",\n          \"PreviousFields\": {\n            \"LPTokenBalance\": {\n              \"currency\": \"03930D02208264E2E40EC1B0C09E4DB96EE197B1\",\n              \"issuer\": \"rMEdVzU8mtEArzjrN9avm3kA675GX7ez8W\",\n              \"value\": \"23003628.63160447\"\n            }\n          }\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tesSUCCESS\"\n  }\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/AMMWithdraw/test/mock_data/withdraw_all.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rhaAaAaaSDNiZpvUPQN5H5aP6kpZ2brare\",\n    \"Asset\": {\n      \"currency\": \"XRP\"\n    },\n    \"Asset2\": {\n      \"currency\": \"4147444E00000000000000000000000000000000\",\n      \"issuer\": \"rUSF1wn7BfHLgnCApU4uPURf56TWtcqahA\"\n    },\n    \"Fee\": \"100\",\n    \"Flags\": 131072,\n    \"LastLedgerSequence\": 97666771,\n    \"Sequence\": 94287972,\n    \"SigningPubKey\": \"0254F7BB9189361F61C0532A32D3C8D043C7C3780E080DD3C6E2BFD131BF856F7E\",\n    \"TransactionType\": \"AMMWithdraw\",\n    \"TxnSignature\": \"3045022100F7F376DB982E061A8A6BE76D84D31BA898C35E0FE290202A46666990477095FA02205C6D4350AFD48C5A97E16F3A92AC4F7AAC8BCF5D5EBF2DDF2F63ECE681988389\",\n    \"hash\": \"68AD5C03CCF55D84EDB68E92E014716E6D059A4D6779E1E1595EBCC2E14E8B39\",\n    \"ctid\": \"C5D2463F00270000\"\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rhaAaAaaSDNiZpvUPQN5H5aP6kpZ2brare\",\n            \"RootIndex\": \"25C0D3BB6C48EA92B0474E34C42D137E1FF7A38FE48D603FBD23AB5AAB75081E\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"25C0D3BB6C48EA92B0474E34C42D137E1FF7A38FE48D603FBD23AB5AAB75081E\",\n          \"PreviousTxnID\": \"A4628BCC9AF0AB56032C83FD93F5D2CE59A366E9C2BF5848E26CA36B4BCA0875\",\n          \"PreviousTxnLgrSeq\": 97666611\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"AMMID\": \"C963A4B34A98FD522F1EC2FF229247E1CE05C820204EE9BBFDAE8AAB3C3EAA44\",\n            \"Account\": \"rGjXpVMZtX5KFPNxt7srucLuLsPXxHLCPe\",\n            \"Balance\": \"0\",\n            \"Flags\": 26214400,\n            \"OwnerCount\": 0,\n            \"PreviousTxnID\": \"C2C08B76D640A778A1C6B1872E20BDBF58FA58E6048AB99FC3DDDECA6C07D1A2\",\n            \"PreviousTxnLgrSeq\": 97666611,\n            \"Sequence\": 97666609\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"7D483F2F26536969776123735C61C3885490D175709C7454FBAEF39AB1E5E2C4\",\n          \"PreviousFields\": {\n            \"Balance\": \"5\",\n            \"OwnerCount\": 1\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rGjXpVMZtX5KFPNxt7srucLuLsPXxHLCPe\",\n            \"PreviousTxnID\": \"C2C08B76D640A778A1C6B1872E20BDBF58FA58E6048AB99FC3DDDECA6C07D1A2\",\n            \"PreviousTxnLgrSeq\": 97666611,\n            \"RootIndex\": \"7EBE5E7A3699DB40EDB5451EE479A57C08D3C051E20C90875C32EF5C4AF52136\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"7EBE5E7A3699DB40EDB5451EE479A57C08D3C051E20C90875C32EF5C4AF52136\"\n        }\n      },\n      {\n        \"CreatedNode\": {\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"9A02EC53233C6629E0FB1E403FCF3ECF9D405B63BC4EDEA4BBD6464618066CC8\",\n          \"NewFields\": {\n            \"Balance\": {\n              \"currency\": \"4147444E00000000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"4.55850791\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"4147444E00000000000000000000000000000000\",\n              \"issuer\": \"rUSF1wn7BfHLgnCApU4uPURf56TWtcqahA\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"3\",\n            \"LowLimit\": {\n              \"currency\": \"4147444E00000000000000000000000000000000\",\n              \"issuer\": \"rhaAaAaaSDNiZpvUPQN5H5aP6kpZ2brare\",\n              \"value\": \"0\"\n            }\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"2\",\n            \"Owner\": \"rUSF1wn7BfHLgnCApU4uPURf56TWtcqahA\",\n            \"RootIndex\": \"D0EB2E110763130F51F8D5E3916CCA7A9222DD6ED984649C24BBAF62F4C8FD7C\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"9DBEE938E8BB7E75305B4468AC42D7E941FECA6DCDE4EDD0CEEA36601F503749\",\n          \"PreviousTxnID\": \"FBCD265CD622D83F914B28F1B3A8DCCA44E2546B19D05B12C6D7E6F7DFE240DE\",\n          \"PreviousTxnLgrSeq\": 97666615\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rhaAaAaaSDNiZpvUPQN5H5aP6kpZ2brare\",\n            \"Balance\": \"94165821\",\n            \"Flags\": 0,\n            \"OwnerCount\": 2,\n            \"Sequence\": 94287973\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"A94F7C14018E704F0F99B5731ABD9DF179CFD17DEEB09B64DC58695ADA454949\",\n          \"PreviousFields\": {\n            \"Balance\": \"94165916\",\n            \"Sequence\": 94287972\n          },\n          \"PreviousTxnID\": \"F432C4C2BAFE4CF8515E60925D4374D7CB067B68362E55920055B6FCA589DA59\",\n          \"PreviousTxnLgrSeq\": 97666613\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rGjXpVMZtX5KFPNxt7srucLuLsPXxHLCPe\",\n            \"Asset\": {\n              \"currency\": \"XRP\"\n            },\n            \"Asset2\": {\n              \"currency\": \"4147444E00000000000000000000000000000000\",\n              \"issuer\": \"rUSF1wn7BfHLgnCApU4uPURf56TWtcqahA\"\n            },\n            \"AuctionSlot\": {\n              \"Account\": \"rHUYcq5sgqTscPDP4JkUBp4JAejTT8fR5Z\",\n              \"DiscountedFee\": 100,\n              \"Expiration\": 806674721,\n              \"Price\": {\n                \"currency\": \"0376CD9DC788A7B5B6FF15C3042E637F798393FC\",\n                \"issuer\": \"rGjXpVMZtX5KFPNxt7srucLuLsPXxHLCPe\",\n                \"value\": \"0\"\n              }\n            },\n            \"Flags\": 0,\n            \"LPTokenBalance\": {\n              \"currency\": \"0376CD9DC788A7B5B6FF15C3042E637F798393FC\",\n              \"issuer\": \"rGjXpVMZtX5KFPNxt7srucLuLsPXxHLCPe\",\n              \"value\": \"4.7710463\"\n            },\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"F432C4C2BAFE4CF8515E60925D4374D7CB067B68362E55920055B6FCA589DA59\",\n            \"PreviousTxnLgrSeq\": 97666613,\n            \"TradingFee\": 1000,\n            \"VoteSlots\": [\n              {\n                \"VoteEntry\": {\n                  \"Account\": \"rhaAaAaaSDNiZpvUPQN5H5aP6kpZ2brare\",\n                  \"TradingFee\": 1000,\n                  \"VoteWeight\": 100000\n                }\n              }\n            ]\n          },\n          \"LedgerEntryType\": \"AMM\",\n          \"LedgerIndex\": \"C963A4B34A98FD522F1EC2FF229247E1CE05C820204EE9BBFDAE8AAB3C3EAA44\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"D681715789CA270DBD3C1DAAF89DEADF001BF99E10023736D228CB887D4AC8C8\",\n          \"PreviousTxnID\": \"80BAB41A65C27B23CC88616669D475EE3B03434DEE6F4B14E39A27648E4355F8\",\n          \"PreviousTxnLgrSeq\": 97666619\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"0376CD9DC788A7B5B6FF15C3042E637F798393FC\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1048576,\n            \"HighLimit\": {\n              \"currency\": \"0376CD9DC788A7B5B6FF15C3042E637F798393FC\",\n              \"issuer\": \"rGjXpVMZtX5KFPNxt7srucLuLsPXxHLCPe\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"0376CD9DC788A7B5B6FF15C3042E637F798393FC\",\n              \"issuer\": \"rhaAaAaaSDNiZpvUPQN5H5aP6kpZ2brare\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"0\",\n            \"PreviousTxnID\": \"A4628BCC9AF0AB56032C83FD93F5D2CE59A366E9C2BF5848E26CA36B4BCA0875\",\n            \"PreviousTxnLgrSeq\": 97666611\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"EB64CA02BD24176701F2ADC00873A42959BD93585BF78E947A5A23E41CF6C327\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"0376CD9DC788A7B5B6FF15C3042E637F798393FC\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"4.7710463\"\n            },\n            \"Flags\": 1114112\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"4147444E00000000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 16777216,\n            \"HighLimit\": {\n              \"currency\": \"4147444E00000000000000000000000000000000\",\n              \"issuer\": \"rGjXpVMZtX5KFPNxt7srucLuLsPXxHLCPe\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"4147444E00000000000000000000000000000000\",\n              \"issuer\": \"rUSF1wn7BfHLgnCApU4uPURf56TWtcqahA\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"3\",\n            \"PreviousTxnID\": \"C2C08B76D640A778A1C6B1872E20BDBF58FA58E6048AB99FC3DDDECA6C07D1A2\",\n            \"PreviousTxnLgrSeq\": 97666611\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"F0DB56A979BE581CD1F87BB9FBF89341435175BB14BACF274C085C4D55D07310\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"4147444E00000000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-4.55850791\"\n            },\n            \"Flags\": 16908288\n          }\n        }\n      }\n    ],\n    \"TransactionIndex\": 39,\n    \"TransactionResult\": \"tesSUCCESS\"\n  },\n  \"hash\": \"68AD5C03CCF55D84EDB68E92E014716E6D059A4D6779E1E1595EBCC2E14E8B39\",\n  \"ledger_index\": 97666623,\n  \"date\": 1753273181000\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/AMMWithdraw/test/mock_data/withdraw_eprice.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"r7stmFYYViSDxXYFZkXtL7fRanUyFwWey\",\n    \"Amount\": {\n      \"currency\": \"USD\",\n      \"issuer\": \"rA3nNmhWKRZvcsA89DxTRbV62JiaSZWdy\",\n      \"value\": \"0\"\n    },\n    \"Asset\": {\n      \"currency\": \"XRP\",\n      \"amount\": 0.00001\n    },\n    \"Asset2\": {\n      \"currency\": \"USD\",\n      \"issuer\": \"rA3nNmhWKRZvcsA89DxTRbV62JiaSZWdy\",\n      \"amount\": 1639.4109702798014\n    },\n    \"EPrice\": {\n      \"currency\": \"03930D02208264E2E40EC1B0C09E4DB96EE197B1\",\n      \"issuer\": \"rHrzrzVHSyunKzW3JLgSaLcsxfwVLPVV97\",\n      \"value\": \"520\"\n    },\n    \"Fee\": \"10\",\n    \"Flags\": 4194304,\n    \"Sequence\": 113541,\n    \"SigningPubKey\": \"025D06F9635CF6363CB238C81925155F94AB7944202CFE6EAAE3A1FBCD818F1C5E\",\n    \"TransactionType\": \"AMMWithdraw\",\n    \"TxnSignature\": \"3044022020769C8B08DB2C4323B117036E05096AD40D9C7A8542E2A913AD9E0EABE2DEC302202065F02CB9BDAE07865B3558102FE1905013AACB718BC7C0F464B854A3452B12\",\n    \"date\": \"2023-01-17T23:18:43Z\"\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"30639.4109702798\"\n            },\n            \"Flags\": 65536,\n            \"HighLimit\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rA3nNmhWKRZvcsA89DxTRbV62JiaSZWdy\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"r7stmFYYViSDxXYFZkXtL7fRanUyFwWey\",\n              \"value\": \"60000\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"4978EF296D4D3064928F7BC522A48977D98053DF9BD9C3BCD0BBBD219BDE20B0\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"29000\"\n            }\n          },\n          \"PreviousTxnID\": \"23DC76DE0BC1066B7B70FC7F2214FCC053C553C6046CFA7A25065D1A1E425812\",\n          \"PreviousTxnLgrSeq\": 113563\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-9440.589756999564\"\n            },\n            \"Flags\": 16908288,\n            \"HighLimit\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rHrzrzVHSyunKzW3JLgSaLcsxfwVLPVV97\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rA3nNmhWKRZvcsA89DxTRbV62JiaSZWdy\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"6821A772CD6D9CC703438CDE99713837AE7D7606AB31CCF2D1E5E5991A637E43\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-11080.00072727936\"\n            }\n          },\n          \"PreviousTxnID\": \"E969278BF1E342808DFEF55F9D2E086E574AA4770905C405852C42E17C523C49\",\n          \"PreviousTxnLgrSeq\": 113567\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"03930D02208264E2E40EC1B0C09E4DB96EE197B1\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"147406.29545451\"\n            },\n            \"Flags\": 65536,\n            \"HighLimit\": {\n              \"currency\": \"03930D02208264E2E40EC1B0C09E4DB96EE197B1\",\n              \"issuer\": \"rHrzrzVHSyunKzW3JLgSaLcsxfwVLPVV97\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"03930D02208264E2E40EC1B0C09E4DB96EE197B1\",\n              \"issuer\": \"r7stmFYYViSDxXYFZkXtL7fRanUyFwWey\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"708941031E4B7A159C510EA35D723D4439E93E9DAD4C26EE473F640154E190C7\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"03930D02208264E2E40EC1B0C09E4DB96EE197B1\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"999900\"\n            }\n          },\n          \"PreviousTxnID\": \"D852B817F69C4417E76CAAE54C5E78D7D54C04E6FA3C6FC81CCA3A01EAABEF25\",\n          \"PreviousTxnLgrSeq\": 113565\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rHrzrzVHSyunKzW3JLgSaLcsxfwVLPVV97\",\n            \"Asset\": {\n              \"currency\": \"XRP\"\n            },\n            \"Asset2\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rA3nNmhWKRZvcsA89DxTRbV62JiaSZWdy\"\n            },\n            \"AuctionSlot\": {\n              \"Account\": \"r7stmFYYViSDxXYFZkXtL7fRanUyFwWey\",\n              \"AuthAccounts\": [\n                {\n                  \"AuthAccount\": {\n                    \"Account\": \"ra8uHq2Qme5j19TqvPzTE2nqT12Zc3xJmK\"\n                  }\n                },\n                {\n                  \"AuthAccount\": {\n                    \"Account\": \"rU6o2YguZi847RaiH2QGTkL4eZWZjbxZvk\"\n                  }\n                }\n              ],\n              \"DiscountedFee\": 0,\n              \"Expiration\": 727397182,\n              \"Price\": {\n                \"currency\": \"03930D02208264E2E40EC1B0C09E4DB96EE197B1\",\n                \"issuer\": \"rHrzrzVHSyunKzW3JLgSaLcsxfwVLPVV97\",\n                \"value\": \"100\"\n              }\n            },\n            \"Flags\": 0,\n            \"LPTokenBalance\": {\n              \"currency\": \"03930D02208264E2E40EC1B0C09E4DB96EE197B1\",\n              \"issuer\": \"rHrzrzVHSyunKzW3JLgSaLcsxfwVLPVV97\",\n              \"value\": \"10227406.29545451\"\n            },\n            \"TradingFee\": 225,\n            \"VoteSlots\": [\n              {\n                \"VoteEntry\": {\n                  \"Account\": \"rKE48YsvrtNfW1mwXGY5zruNnvbQme1EnD\",\n                  \"TradingFee\": 350,\n                  \"VoteWeight\": 90\n                }\n              },\n              {\n                \"VoteEntry\": {\n                  \"Account\": \"rJgu92PQxSMcs4ycLKoCGk4rYgoJeWmexR\",\n                  \"TradingFee\": 300,\n                  \"VoteWeight\": 90\n                }\n              },\n              {\n                \"VoteEntry\": {\n                  \"Account\": \"rGLvAxi5QRBxYnKdg8CqXGnYrFWr1WWi6b\",\n                  \"TradingFee\": 150,\n                  \"VoteWeight\": 90\n                }\n              },\n              {\n                \"VoteEntry\": {\n                  \"Account\": \"rGfys78D1z3gSHE75iYxJzseJQqRKrQcJy\",\n                  \"TradingFee\": 200,\n                  \"VoteWeight\": 90\n                }\n              },\n              {\n                \"VoteEntry\": {\n                  \"Account\": \"rHTFtEYeo8b9Guur4DNADyXnLe28XgEjFb\",\n                  \"TradingFee\": 100,\n                  \"VoteWeight\": 90\n                }\n              },\n              {\n                \"VoteEntry\": {\n                  \"Account\": \"r3qituSZx5nH6B1ygXvWkB9oNANNagWUYq\",\n                  \"TradingFee\": 50,\n                  \"VoteWeight\": 90\n                }\n              },\n              {\n                \"VoteEntry\": {\n                  \"Account\": \"rnQk7TFb2EWX6QSUBxcy1WtAkfb19NkYXN\",\n                  \"TradingFee\": 250,\n                  \"VoteWeight\": 90\n                }\n              },\n              {\n                \"VoteEntry\": {\n                  \"Account\": \"rPL9AqJtUqw5UWGgizCormAMtZhWoLBwbS\",\n                  \"TradingFee\": 400,\n                  \"VoteWeight\": 90\n                }\n              }\n            ]\n          },\n          \"LedgerEntryType\": \"AMM\",\n          \"LedgerIndex\": \"9ADECA79A6FA8287F94FDA558E5DDB15C33856E73910991EE842A7B170F45B35\",\n          \"PreviousFields\": {\n            \"LPTokenBalance\": {\n              \"currency\": \"03930D02208264E2E40EC1B0C09E4DB96EE197B1\",\n              \"issuer\": \"rHrzrzVHSyunKzW3JLgSaLcsxfwVLPVV97\",\n              \"value\": \"11079900\"\n            }\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r7stmFYYViSDxXYFZkXtL7fRanUyFwWey\",\n            \"Balance\": \"38999999950\",\n            \"Flags\": 8388608,\n            \"OwnerCount\": 2,\n            \"Sequence\": 113542\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"CE4CB96141255DE701556F0EB79E72EA481B4690C498F29234598E641E6EF2D0\",\n          \"PreviousFields\": {\n            \"Balance\": \"38999999960\",\n            \"Sequence\": 113541\n          },\n          \"PreviousTxnID\": \"D852B817F69C4417E76CAAE54C5E78D7D54C04E6FA3C6FC81CCA3A01EAABEF25\",\n          \"PreviousTxnLgrSeq\": 113565\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tesSUCCESS\"\n  },\n  \"hash\": \"90BC4C26A58B8861A2824CB24195CBD1C20E2109A12078AE5FC07CECE8CDAEF6\",\n  \"ledger_index\": 114210,\n  \"date\": \"2023-01-17T23:18:43Z\"\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/AMMWithdraw/test/mock_data/withdraw_usd.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rhmfYgnWbKKwYNJbh3iysPHbz7aparZ1qd\",\n    \"Amount\": {\n      \"currency\": \"USD\",\n      \"issuer\": \"rA3nNmhWKRZvcsA89DxTRbV62JiaSZWdy\",\n      \"value\": \"100\"\n    },\n    \"Asset\": {\n      \"currency\": \"XRP\",\n      \"amount\": 0.00001\n    },\n    \"Asset2\": {\n      \"currency\": \"USD\",\n      \"issuer\": \"rA3nNmhWKRZvcsA89DxTRbV62JiaSZWdy\",\n      \"amount\": 100\n    },\n    \"Fee\": \"10\",\n    \"Flags\": 524288,\n    \"Sequence\": 113542,\n    \"SigningPubKey\": \"031E3709F92AF9138B63CCDEC7357E3779762F3FB3BB56F6966D7040644B0E179C\",\n    \"TransactionType\": \"AMMWithdraw\",\n    \"TxnSignature\": \"3045022100C19ACC9C27537B055AE16F5D7A92853F83C1A4920355B35E0688C1A3CAD96DB4022006CAAADC90DACE7096629599CF8D1B454D92D5063BAF01155C38F2B5C9492152\",\n    \"date\": \"2023-01-18T00:12:42Z\"\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rhmfYgnWbKKwYNJbh3iysPHbz7aparZ1qd\",\n            \"Balance\": \"29994999950\",\n            \"Flags\": 0,\n            \"OwnerCount\": 2,\n            \"Sequence\": 113543\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"1E47D3574E19E3D519D57FF5B3A6EE7622A5998A82DF170C440C8CB7AA0015E1\",\n          \"PreviousFields\": {\n            \"Balance\": \"29994999960\",\n            \"Sequence\": 113542\n          },\n          \"PreviousTxnID\": \"137D0EF6B80E63EA0D794B744D2B689A4EDCB5E3C94CDB40C5D08CC950BC5F89\",\n          \"PreviousTxnLgrSeq\": 114927\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-10340.58975699956\"\n            },\n            \"Flags\": 16908288,\n            \"HighLimit\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rHrzrzVHSyunKzW3JLgSaLcsxfwVLPVV97\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rA3nNmhWKRZvcsA89DxTRbV62JiaSZWdy\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"6821A772CD6D9CC703438CDE99713837AE7D7606AB31CCF2D1E5E5991A637E43\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-10440.58975699956\"\n            }\n          },\n          \"PreviousTxnID\": \"9B4AFEE8FD2E47E71089585A9A0B8E8B2643B0328DA570B9DB1EC1820795CB16\",\n          \"PreviousTxnLgrSeq\": 114526\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rHrzrzVHSyunKzW3JLgSaLcsxfwVLPVV97\",\n            \"Asset\": {\n              \"currency\": \"XRP\"\n            },\n            \"Asset2\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rA3nNmhWKRZvcsA89DxTRbV62JiaSZWdy\"\n            },\n            \"AuctionSlot\": {\n              \"Account\": \"r7stmFYYViSDxXYFZkXtL7fRanUyFwWey\",\n              \"AuthAccounts\": [\n                {\n                  \"AuthAccount\": {\n                    \"Account\": \"ra8uHq2Qme5j19TqvPzTE2nqT12Zc3xJmK\"\n                  }\n                },\n                {\n                  \"AuthAccount\": {\n                    \"Account\": \"rU6o2YguZi847RaiH2QGTkL4eZWZjbxZvk\"\n                  }\n                }\n              ],\n              \"DiscountedFee\": 0,\n              \"Expiration\": 727397182,\n              \"Price\": {\n                \"currency\": \"03930D02208264E2E40EC1B0C09E4DB96EE197B1\",\n                \"issuer\": \"rHrzrzVHSyunKzW3JLgSaLcsxfwVLPVV97\",\n                \"value\": \"100\"\n              }\n            },\n            \"Flags\": 0,\n            \"LPTokenBalance\": {\n              \"currency\": \"03930D02208264E2E40EC1B0C09E4DB96EE197B1\",\n              \"issuer\": \"rHrzrzVHSyunKzW3JLgSaLcsxfwVLPVV97\",\n              \"value\": \"10703180.16970725\"\n            },\n            \"TradingFee\": 225,\n            \"VoteSlots\": [\n              {\n                \"VoteEntry\": {\n                  \"Account\": \"rKE48YsvrtNfW1mwXGY5zruNnvbQme1EnD\",\n                  \"TradingFee\": 350,\n                  \"VoteWeight\": 90\n                }\n              },\n              {\n                \"VoteEntry\": {\n                  \"Account\": \"rJgu92PQxSMcs4ycLKoCGk4rYgoJeWmexR\",\n                  \"TradingFee\": 300,\n                  \"VoteWeight\": 90\n                }\n              },\n              {\n                \"VoteEntry\": {\n                  \"Account\": \"rGLvAxi5QRBxYnKdg8CqXGnYrFWr1WWi6b\",\n                  \"TradingFee\": 150,\n                  \"VoteWeight\": 90\n                }\n              },\n              {\n                \"VoteEntry\": {\n                  \"Account\": \"rGfys78D1z3gSHE75iYxJzseJQqRKrQcJy\",\n                  \"TradingFee\": 200,\n                  \"VoteWeight\": 90\n                }\n              },\n              {\n                \"VoteEntry\": {\n                  \"Account\": \"rHTFtEYeo8b9Guur4DNADyXnLe28XgEjFb\",\n                  \"TradingFee\": 100,\n                  \"VoteWeight\": 90\n                }\n              },\n              {\n                \"VoteEntry\": {\n                  \"Account\": \"r3qituSZx5nH6B1ygXvWkB9oNANNagWUYq\",\n                  \"TradingFee\": 50,\n                  \"VoteWeight\": 90\n                }\n              },\n              {\n                \"VoteEntry\": {\n                  \"Account\": \"rnQk7TFb2EWX6QSUBxcy1WtAkfb19NkYXN\",\n                  \"TradingFee\": 250,\n                  \"VoteWeight\": 90\n                }\n              },\n              {\n                \"VoteEntry\": {\n                  \"Account\": \"rPL9AqJtUqw5UWGgizCormAMtZhWoLBwbS\",\n                  \"TradingFee\": 400,\n                  \"VoteWeight\": 90\n                }\n              }\n            ]\n          },\n          \"LedgerEntryType\": \"AMM\",\n          \"LedgerIndex\": \"9ADECA79A6FA8287F94FDA558E5DDB15C33856E73910991EE842A7B170F45B35\",\n          \"PreviousFields\": {\n            \"LPTokenBalance\": {\n              \"currency\": \"03930D02208264E2E40EC1B0C09E4DB96EE197B1\",\n              \"issuer\": \"rHrzrzVHSyunKzW3JLgSaLcsxfwVLPVV97\",\n              \"value\": \"10754867.45765637\"\n            }\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-19100\"\n            },\n            \"Flags\": 131072,\n            \"HighLimit\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rhmfYgnWbKKwYNJbh3iysPHbz7aparZ1qd\",\n              \"value\": \"60000\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rA3nNmhWKRZvcsA89DxTRbV62JiaSZWdy\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"F966CB2731E550DB40887518B4E6E73E4F0F8E63CC77BC6918AF610753977FC2\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-19000\"\n            }\n          },\n          \"PreviousTxnID\": \"9B4AFEE8FD2E47E71089585A9A0B8E8B2643B0328DA570B9DB1EC1820795CB16\",\n          \"PreviousTxnLgrSeq\": 114526\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"03930D02208264E2E40EC1B0C09E4DB96EE197B1\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"10475773.87425274\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"03930D02208264E2E40EC1B0C09E4DB96EE197B1\",\n              \"issuer\": \"rHrzrzVHSyunKzW3JLgSaLcsxfwVLPVV97\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"03930D02208264E2E40EC1B0C09E4DB96EE197B1\",\n              \"issuer\": \"rhmfYgnWbKKwYNJbh3iysPHbz7aparZ1qd\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"FE014629D5BE7D92E9A520189D5758FAB0E7A4C672A1F0847AD1B790C04CC395\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"03930D02208264E2E40EC1B0C09E4DB96EE197B1\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"10527461.16220186\"\n            }\n          },\n          \"PreviousTxnID\": \"9B4AFEE8FD2E47E71089585A9A0B8E8B2643B0328DA570B9DB1EC1820795CB16\",\n          \"PreviousTxnLgrSeq\": 114526\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tesSUCCESS\"\n  },\n  \"hash\": \"F9D17A67A23EE944E4B8EBF17FBD2AC12F6A2923737754F8D1C21B9055328339\",\n  \"ledger_index\": 115287,\n  \"date\": \"2023-01-18T00:12:42Z\"\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/AMMWithdraw/test/mock_data/withdraw_xrp.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rhmfYgnWbKKwYNJbh3iysPHbz7aparZ1qd\",\n    \"Amount\": \"100000000\",\n    \"Asset\": {\n      \"currency\": \"XRP\",\n      \"amount\": 99.99999\n    },\n    \"Asset2\": {\n      \"currency\": \"USD\",\n      \"issuer\": \"rA3nNmhWKRZvcsA89DxTRbV62JiaSZWdy\",\n      \"amount\": null\n    },\n    \"Fee\": \"10\",\n    \"Flags\": 524288,\n    \"Sequence\": 113543,\n    \"SigningPubKey\": \"031E3709F92AF9138B63CCDEC7357E3779762F3FB3BB56F6966D7040644B0E179C\",\n    \"TransactionType\": \"AMMWithdraw\",\n    \"TxnSignature\": \"3044022002EC2204C4B5DFB2A732390129BCD307C485BE12900D416C72AC4DD0C192616602201B10C6F3A17A32DCD8C7066B45FDDFD621E87D9B6064A82D2B189C6838B3D9E8\",\n    \"date\": \"2023-01-18T00:12:52Z\"\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rhmfYgnWbKKwYNJbh3iysPHbz7aparZ1qd\",\n            \"Balance\": \"30094999940\",\n            \"Flags\": 0,\n            \"OwnerCount\": 2,\n            \"Sequence\": 113544\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"1E47D3574E19E3D519D57FF5B3A6EE7622A5998A82DF170C440C8CB7AA0015E1\",\n          \"PreviousFields\": {\n            \"Balance\": \"29994999950\",\n            \"Sequence\": 113543\n          },\n          \"PreviousTxnID\": \"F9D17A67A23EE944E4B8EBF17FBD2AC12F6A2923737754F8D1C21B9055328339\",\n          \"PreviousTxnLgrSeq\": 115287\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rHrzrzVHSyunKzW3JLgSaLcsxfwVLPVV97\",\n            \"Balance\": \"10980000728\",\n            \"Flags\": 59768832,\n            \"OwnerCount\": 1,\n            \"Sequence\": 113560\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"86843146392F52D7BD45969F7BD9E6DF62C8D650FC695CFBD1BAE77E2BAFE7F8\",\n          \"PreviousFields\": {\n            \"Balance\": \"11080000728\"\n          },\n          \"PreviousTxnID\": \"E969278BF1E342808DFEF55F9D2E086E574AA4770905C405852C42E17C523C49\",\n          \"PreviousTxnLgrSeq\": 113567\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rHrzrzVHSyunKzW3JLgSaLcsxfwVLPVV97\",\n            \"Asset\": {\n              \"currency\": \"XRP\"\n            },\n            \"Asset2\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rA3nNmhWKRZvcsA89DxTRbV62JiaSZWdy\"\n            },\n            \"AuctionSlot\": {\n              \"Account\": \"r7stmFYYViSDxXYFZkXtL7fRanUyFwWey\",\n              \"AuthAccounts\": [\n                {\n                  \"AuthAccount\": {\n                    \"Account\": \"ra8uHq2Qme5j19TqvPzTE2nqT12Zc3xJmK\"\n                  }\n                },\n                {\n                  \"AuthAccount\": {\n                    \"Account\": \"rU6o2YguZi847RaiH2QGTkL4eZWZjbxZvk\"\n                  }\n                }\n              ],\n              \"DiscountedFee\": 0,\n              \"Expiration\": 727397182,\n              \"Price\": {\n                \"currency\": \"03930D02208264E2E40EC1B0C09E4DB96EE197B1\",\n                \"issuer\": \"rHrzrzVHSyunKzW3JLgSaLcsxfwVLPVV97\",\n                \"value\": \"100\"\n              }\n            },\n            \"Flags\": 0,\n            \"LPTokenBalance\": {\n              \"currency\": \"03930D02208264E2E40EC1B0C09E4DB96EE197B1\",\n              \"issuer\": \"rHrzrzVHSyunKzW3JLgSaLcsxfwVLPVV97\",\n              \"value\": \"10654716.50420904\"\n            },\n            \"TradingFee\": 225,\n            \"VoteSlots\": [\n              {\n                \"VoteEntry\": {\n                  \"Account\": \"rKE48YsvrtNfW1mwXGY5zruNnvbQme1EnD\",\n                  \"TradingFee\": 350,\n                  \"VoteWeight\": 90\n                }\n              },\n              {\n                \"VoteEntry\": {\n                  \"Account\": \"rJgu92PQxSMcs4ycLKoCGk4rYgoJeWmexR\",\n                  \"TradingFee\": 300,\n                  \"VoteWeight\": 90\n                }\n              },\n              {\n                \"VoteEntry\": {\n                  \"Account\": \"rGLvAxi5QRBxYnKdg8CqXGnYrFWr1WWi6b\",\n                  \"TradingFee\": 150,\n                  \"VoteWeight\": 90\n                }\n              },\n              {\n                \"VoteEntry\": {\n                  \"Account\": \"rGfys78D1z3gSHE75iYxJzseJQqRKrQcJy\",\n                  \"TradingFee\": 200,\n                  \"VoteWeight\": 90\n                }\n              },\n              {\n                \"VoteEntry\": {\n                  \"Account\": \"rHTFtEYeo8b9Guur4DNADyXnLe28XgEjFb\",\n                  \"TradingFee\": 100,\n                  \"VoteWeight\": 90\n                }\n              },\n              {\n                \"VoteEntry\": {\n                  \"Account\": \"r3qituSZx5nH6B1ygXvWkB9oNANNagWUYq\",\n                  \"TradingFee\": 50,\n                  \"VoteWeight\": 90\n                }\n              },\n              {\n                \"VoteEntry\": {\n                  \"Account\": \"rnQk7TFb2EWX6QSUBxcy1WtAkfb19NkYXN\",\n                  \"TradingFee\": 250,\n                  \"VoteWeight\": 90\n                }\n              },\n              {\n                \"VoteEntry\": {\n                  \"Account\": \"rPL9AqJtUqw5UWGgizCormAMtZhWoLBwbS\",\n                  \"TradingFee\": 400,\n                  \"VoteWeight\": 90\n                }\n              }\n            ]\n          },\n          \"LedgerEntryType\": \"AMM\",\n          \"LedgerIndex\": \"9ADECA79A6FA8287F94FDA558E5DDB15C33856E73910991EE842A7B170F45B35\",\n          \"PreviousFields\": {\n            \"LPTokenBalance\": {\n              \"currency\": \"03930D02208264E2E40EC1B0C09E4DB96EE197B1\",\n              \"issuer\": \"rHrzrzVHSyunKzW3JLgSaLcsxfwVLPVV97\",\n              \"value\": \"10703180.16970725\"\n            }\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"03930D02208264E2E40EC1B0C09E4DB96EE197B1\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"10427310.20875453\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"03930D02208264E2E40EC1B0C09E4DB96EE197B1\",\n              \"issuer\": \"rHrzrzVHSyunKzW3JLgSaLcsxfwVLPVV97\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"03930D02208264E2E40EC1B0C09E4DB96EE197B1\",\n              \"issuer\": \"rhmfYgnWbKKwYNJbh3iysPHbz7aparZ1qd\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"FE014629D5BE7D92E9A520189D5758FAB0E7A4C672A1F0847AD1B790C04CC395\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"03930D02208264E2E40EC1B0C09E4DB96EE197B1\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"10475773.87425274\"\n            }\n          },\n          \"PreviousTxnID\": \"F9D17A67A23EE944E4B8EBF17FBD2AC12F6A2923737754F8D1C21B9055328339\",\n          \"PreviousTxnLgrSeq\": 115287\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tesSUCCESS\"\n  },\n  \"hash\": \"697FF8492BDAB8C4914C93CFA1F38D354E06375616A41604298E7228607C8941\",\n  \"ledger_index\": 115290,\n  \"date\": \"2023-01-18T00:12:52Z\"\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/AccountDelete/Simple.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport type { AccountDelete } from 'xrpl'\n\nimport { SimpleRow } from '../SimpleRow'\nimport { TransactionSimpleProps } from '../types'\nimport { Account } from '../../Account'\nimport { CredentialIDs } from '../CredentialIDs'\n\nexport const Simple = ({ data }: TransactionSimpleProps<AccountDelete>) => {\n  const { t } = useTranslation()\n  const tx = data.instructions\n\n  return (\n    <>\n      <SimpleRow label={t('destination')} data-testid=\"destination\">\n        <Account account={tx.Destination} />\n        {tx.DestinationTag && <span className=\"dt\">:{tx.DestinationTag}</span>}\n      </SimpleRow>\n      {tx.CredentialIDs && tx.CredentialIDs.length > 0 && (\n        <CredentialIDs credentialIDs={tx.CredentialIDs} />\n      )}\n    </>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/AccountDelete/index.ts",
    "content": "import type { AccountDelete } from 'xrpl'\nimport {\n  TransactionAction,\n  TransactionCategory,\n  TransactionMapping,\n} from '../types'\n\nimport { Simple } from './Simple'\n\nexport const AccountDeleteTransaction: TransactionMapping = {\n  Simple,\n  action: TransactionAction.CANCEL,\n  category: TransactionCategory.ACCOUNT,\n  parser: (tx: AccountDelete): AccountDelete => tx,\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/AccountDelete/test/AccountDeleteSimple.test.tsx",
    "content": "import {\n  createSimpleRenderFactory,\n  expectSimpleRowText,\n  expectSimpleRowLabel,\n} from '../../test'\nimport { Simple } from '../Simple'\nimport mockAccountDelete from './mock_data/AccountDelete.json'\nimport mockAccountDeleteWithDestinationTag from './mock_data/AccountDeleteWithDestinationTag.json'\nimport mockAccountDeleteWithCredentialIDs from './mock_data/AccountDeleteWithCredentialIDs.json'\n\nconst renderComponent = createSimpleRenderFactory(Simple)\n\ndescribe('AccountDelete: Simple', () => {\n  it('renders', () => {\n    const { container, unmount } = renderComponent(mockAccountDelete)\n    expectSimpleRowText(\n      container,\n      'destination',\n      'raT74sdzpxJUaubcBAQNS8aLqFMU85Rr5J',\n    )\n    unmount()\n  })\n\n  it('renders with destination tag', () => {\n    const { container, unmount } = renderComponent(\n      mockAccountDeleteWithDestinationTag,\n    )\n    expectSimpleRowText(\n      container,\n      'destination',\n      'rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn:123123',\n    )\n    unmount()\n  })\n\n  it('renders with CredentialIDs', () => {\n    const { container, unmount } = renderComponent(\n      mockAccountDeleteWithCredentialIDs,\n    )\n\n    expectSimpleRowText(\n      container,\n      'destination',\n      'raT74sdzpxJUaubcBAQNS8aLqFMU85Rr5J',\n    )\n    expectSimpleRowText(\n      container,\n      'credential-id-0',\n      '7B685088D546B9E8905D26206F452BB2F44D9A33C9BD9BCF280F7BA39015A955',\n    )\n    expectSimpleRowLabel(container, 'credential-id-0', 'credential_ids')\n\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/AccountDelete/test/mock_data/AccountDelete.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"raf19Ns8czi85kTfia3KJ9ndjSp9baTLyH\",\n    \"Destination\": \"raT74sdzpxJUaubcBAQNS8aLqFMU85Rr5J\",\n    \"Fee\": \"5000000\",\n    \"Flags\": 2147483648,\n    \"Sequence\": 58118671,\n    \"SigningPubKey\": \"0211DA2A9AEF04FB772776CD35291AF20DC09A6F0EF52C1A58E4ED43C8685D7093\",\n    \"TransactionType\": \"AccountDelete\",\n    \"TxnSignature\": \"304402202E61AC4B56BFFD2186D3E9BDECE7B68CD21B9486F691C5B31AA0E84E161E2C1C022048B70011A1D04566883EFEC3E988C31A853B89D18E0159315EF488DE89F7BA8B\"\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"raf19Ns8czi85kTfia3KJ9ndjSp9baTLyH\",\n            \"Balance\": \"0\",\n            \"Flags\": 0,\n            \"MessageKey\": \"020000000000000000000000007C50654DCAE0020232ABB4C236F7CE03CF2784B0\",\n            \"OwnerCount\": 0,\n            \"PreviousTxnID\": \"9A0AD95BA92118D66BDB3DCF86575BAEBE34D3F640146BD5A68D4AC355E56A21\",\n            \"PreviousTxnLgrSeq\": 58233607,\n            \"Sequence\": 58118672\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"1F8BBAE9AD8533D18C1A2DD03E22232D49A28CCF2383D80CEE50735E82900068\",\n          \"PreviousFields\": {\n            \"Balance\": \"19999988\",\n            \"Sequence\": 58118671\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"raT74sdzpxJUaubcBAQNS8aLqFMU85Rr5J\",\n            \"Balance\": \"11468518495\",\n            \"Flags\": 0,\n            \"OwnerCount\": 0,\n            \"Sequence\": 58233435\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"40D5C5FF088C4BC3CA79974DCB585DDD04E9D88FF732AE6E7E36F0FF1CDD4220\",\n          \"PreviousFields\": {\n            \"Balance\": \"11453518507\"\n          },\n          \"PreviousTxnID\": \"9A0AD95BA92118D66BDB3DCF86575BAEBE34D3F640146BD5A68D4AC355E56A21\",\n          \"PreviousTxnLgrSeq\": 58233607\n        }\n      }\n    ],\n    \"DeliveredAmount\": \"14999988\",\n    \"TransactionIndex\": 34,\n    \"TransactionResult\": \"tesSUCCESS\",\n    \"delivered_amount\": \"14999988\"\n  },\n  \"hash\": \"91BCF2965F7381EC01EDA6A36948A23480B566A0DDD3B13610ED8FD59840956D\",\n  \"ledger_index\": 58233707,\n  \"date\": \"2020-09-16T23:18:20Z\"\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/AccountDelete/test/mock_data/AccountDeleteWithCredentialIDs.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"raf19Ns8czi85kTfia3KJ9ndjSp9baTLyH\",\n    \"Destination\": \"raT74sdzpxJUaubcBAQNS8aLqFMU85Rr5J\",\n    \"CredentialIDs\": [\n      \"7B685088D546B9E8905D26206F452BB2F44D9A33C9BD9BCF280F7BA39015A955\"\n    ],\n    \"Fee\": \"5000000\",\n    \"Flags\": 2147483648,\n    \"Sequence\": 58118671,\n    \"SigningPubKey\": \"0211DA2A9AEF04FB772776CD35291AF20DC09A6F0EF52C1A58E4ED43C8685D7093\",\n    \"TransactionType\": \"AccountDelete\",\n    \"TxnSignature\": \"304402202E61AC4B56BFFD2186D3E9BDECE7B68CD21B9486F691C5B31AA0E84E161E2C1C022048B70011A1D04566883EFEC3E988C31A853B89D18E0159315EF488DE89F7BA8B\"\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"raf19Ns8czi85kTfia3KJ9ndjSp9baTLyH\",\n            \"Balance\": \"0\",\n            \"Flags\": 0,\n            \"MessageKey\": \"020000000000000000000000007C50654DCAE0020232ABB4C236F7CE03CF2784B0\",\n            \"OwnerCount\": 0,\n            \"PreviousTxnID\": \"9A0AD95BA92118D66BDB3DCF86575BAEBE34D3F640146BD5A68D4AC355E56A21\",\n            \"PreviousTxnLgrSeq\": 58233607,\n            \"Sequence\": 58118672\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"1F8BBAE9AD8533D18C1A2DD03E22232D49A28CCF2383D80CEE50735E82900068\",\n          \"PreviousFields\": {\n            \"Balance\": \"19999988\",\n            \"Sequence\": 58118671\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"raT74sdzpxJUaubcBAQNS8aLqFMU85Rr5J\",\n            \"Balance\": \"11468518495\",\n            \"Flags\": 0,\n            \"OwnerCount\": 0,\n            \"Sequence\": 58233435\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"40D5C5FF088C4BC3CA79974DCB585DDD04E9D88FF732AE6E7E36F0FF1CDD4220\",\n          \"PreviousFields\": {\n            \"Balance\": \"11453518507\"\n          },\n          \"PreviousTxnID\": \"9A0AD95BA92118D66BDB3DCF86575BAEBE34D3F640146BD5A68D4AC355E56A21\",\n          \"PreviousTxnLgrSeq\": 58233607\n        }\n      }\n    ],\n    \"DeliveredAmount\": \"14999988\",\n    \"TransactionIndex\": 34,\n    \"TransactionResult\": \"tesSUCCESS\",\n    \"delivered_amount\": \"14999988\"\n  },\n  \"hash\": \"91BCF2965F7381EC01EDA6A36948A23480B566A0DDD3B13610ED8FD59840956D\",\n  \"ledger_index\": 58233707,\n  \"date\": \"2020-09-16T23:18:20Z\"\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/AccountDelete/test/mock_data/AccountDeleteWithDestinationTag.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rQHoYBZ7pvJgh9DpjeELnXiR5uWoLRxyGA\",\n    \"Destination\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n    \"DestinationTag\": 123123,\n    \"Fee\": \"5000000\",\n    \"Flags\": 2147483648,\n    \"LastLedgerSequence\": 69841530,\n    \"Sequence\": 67024637,\n    \"SigningPubKey\": \"0263F02703A97E5BD3AA671183D83219522704CCC49D85EB1AC199989181D405A6\",\n    \"TransactionType\": \"AccountDelete\",\n    \"TxnSignature\": \"3045022100A3AF36CB35476F22B83C2ECB7003D9C0BED72B201C102E774FB75E37908C9911022055C29E1C2CFBFF9610341B352E140AD59F5146BAD02AD90E44BDA05B87749476\",\n    \"date\": \"2022-02-21T15:44:11Z\",\n    \"warnings\": [\n      {\n        \"id\": 1004,\n        \"message\": \"This is a reporting server.  The default behavior of a reporting server is to only return validated data. If you are looking for not yet validated data, include \\\"ledger_index : current\\\" in your request, which will cause this server to forward the request to a p2p node. If the forward is successful the response will include \\\"forwarded\\\" : \\\"true\\\"\"\n      }\n    ]\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n            \"AccountTxnID\": \"4E0AA11CBDD1760DE95B68DF2ABBE75C9698CEB548BEA9789053FCB3EBD444FB\",\n            \"Balance\": \"1026816941\",\n            \"Domain\": \"6D64756F31332E636F6D\",\n            \"EmailHash\": \"98B4375E1D753E5B91627516F6D70977\",\n            \"Flags\": 9568256,\n            \"MessageKey\": \"0000000000000000000000070000000300\",\n            \"OwnerCount\": 12,\n            \"RegularKey\": \"rD9iJmieYHn8jTtPjwwkW2Wm9sVDvPXLoJ\",\n            \"Sequence\": 385,\n            \"TransferRate\": 4294967295\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"13F1A95D7AAB7108D5CE7EEAF504B2894B8C674E6D68499076441C4837282BF8\",\n          \"PreviousFields\": {\n            \"Balance\": \"1021816941\"\n          },\n          \"PreviousTxnID\": \"8566673ECD0A9731C516906E5D2F47129C5C13713602140733831A56CEAE1A05\",\n          \"PreviousTxnLgrSeq\": 68999137\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rQHoYBZ7pvJgh9DpjeELnXiR5uWoLRxyGA\",\n            \"Balance\": \"0\",\n            \"Flags\": 0,\n            \"OwnerCount\": 0,\n            \"PreviousTxnID\": \"474E7682B4D9F2B752C7897C5C0362C93397C361D14A5A68F2A4BA2F06E54D7F\",\n            \"PreviousTxnLgrSeq\": 69841432,\n            \"Sequence\": 67024638\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"377D6778741A746817C993E97BB57F35E528B582B77BE28F9397CBD84E6E5CB0\",\n          \"PreviousFields\": {\n            \"Balance\": \"10000000\",\n            \"Sequence\": 67024637\n          }\n        }\n      }\n    ],\n    \"DeliveredAmount\": \"5000000\",\n    \"TransactionIndex\": 82,\n    \"TransactionResult\": \"tesSUCCESS\",\n    \"delivered_amount\": \"5000000\"\n  },\n  \"hash\": \"6DB88ADABE67CA86A3853122224858B17B60283476B7E7D5A436A56B10725413\",\n  \"ledger_index\": 69841511,\n  \"date\": \"2022-02-21T15:44:11Z\"\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/AccountSet/Description.tsx",
    "content": "import { useTranslation, Trans } from 'react-i18next'\nimport type { AccountSet } from 'xrpl'\nimport { ACCOUNT_FLAGS } from '../../../transactionUtils'\nimport DomainLink from '../../DomainLink'\nimport { TransactionDescriptionProps } from '../types'\nimport { Account } from '../../Account'\n\nexport const Description = ({\n  data,\n}: TransactionDescriptionProps<AccountSet>) => {\n  const { t } = useTranslation()\n  const { tx } = data\n\n  return (\n    <>\n      {tx.Domain && (\n        <div data-testid=\"domain\">\n          {t('set_domain_description')} <DomainLink decode domain={tx.Domain} />\n        </div>\n      )}\n      {tx.EmailHash && (\n        <div data-testid=\"email\">\n          {t('set_email_description')}\n          <span className=\"email\"> {tx.EmailHash}</span>\n        </div>\n      )}\n      {tx.MessageKey && (\n        <div data-testid=\"message-key\">\n          {t('set_message_key_description')}\n          <span className=\"message-key\"> {tx.MessageKey}</span>\n        </div>\n      )}\n      {tx.SetFlag && (\n        <div data-testid=\"set-flag\">\n          {t('set_flag_description')}\n          <span className=\"flag\">\n            {' '}\n            {ACCOUNT_FLAGS[tx.SetFlag] || tx.SetFlag}\n          </span>\n        </div>\n      )}\n      {tx.ClearFlag && (\n        <div data-testid=\"clear-flag\">\n          {t('clear_flag_description')}\n          <span className=\"flag\">\n            {' '}\n            {ACCOUNT_FLAGS[tx.ClearFlag] || tx.ClearFlag}\n          </span>\n        </div>\n      )}\n      {tx.NFTokenMinter && (\n        <div data-testid=\"minter\">\n          <Trans i18nKey=\"set_nftoken_minter_description\">\n            <Account account={tx.NFTokenMinter} />\n          </Trans>\n        </div>\n      )}\n    </>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/AccountSet/Simple.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport type { AccountSet } from 'xrpl'\nimport { ACCOUNT_FLAGS } from '../../../transactionUtils'\nimport DomainLink from '../../DomainLink'\nimport { Account } from '../../Account'\nimport { SimpleRow } from '../SimpleRow'\nimport { TransactionSimpleProps } from '../types'\n\nexport const Simple = ({ data }: TransactionSimpleProps<AccountSet>) => {\n  const { t } = useTranslation()\n  const tx = data.instructions\n\n  return (\n    <>\n      {tx.Domain && (\n        <SimpleRow label={t('domain')} data-testid=\"domain\">\n          <DomainLink decode domain={tx.Domain} />\n        </SimpleRow>\n      )}\n      {tx.EmailHash && (\n        <SimpleRow label={t('email_hash')} data-testid=\"email\">\n          {tx.EmailHash}\n        </SimpleRow>\n      )}\n      {tx.MessageKey && (\n        <SimpleRow label={t('message_key')} data-testid=\"message\">\n          {tx.MessageKey}\n        </SimpleRow>\n      )}\n      {tx.SetFlag && (\n        <SimpleRow\n          label={t('set_flag')}\n          className=\"flag\"\n          data-testid=\"set-flag\"\n        >\n          {ACCOUNT_FLAGS[tx.SetFlag] || tx.SetFlag}\n        </SimpleRow>\n      )}\n      {tx.ClearFlag && (\n        <SimpleRow\n          label={t('clear_flag')}\n          className=\"flag\"\n          data-testid=\"clear-flag\"\n        >\n          {ACCOUNT_FLAGS[tx.ClearFlag] || tx.ClearFlag}\n        </SimpleRow>\n      )}\n      {tx.NFTokenMinter && (\n        <SimpleRow label={t('nftoken_minter')} data-testid=\"minter\">\n          <Account account={tx.NFTokenMinter} />\n        </SimpleRow>\n      )}\n    </>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/AccountSet/TableDetail.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport type { AccountSet } from 'xrpl'\nimport { ACCOUNT_FLAGS, decodeHex } from '../../../transactionUtils'\nimport { Account } from '../../Account'\nimport { TransactionTableDetailProps } from '../types'\n\nexport const TableDetail = ({\n  instructions: tx,\n}: TransactionTableDetailProps<AccountSet>) => {\n  const { t } = useTranslation()\n\n  return (\n    <>\n      {tx.Domain && (\n        <div data-testid=\"domain\">\n          <span className=\"label\">{t('domain')}:</span>{' '}\n          <span className=\"domain\">{decodeHex(tx.Domain)}</span>\n        </div>\n      )}\n      {tx.EmailHash && (\n        <div data-testid=\"email\">\n          <span className=\"label\">{t('email_hash')}:</span>{' '}\n          <span className=\"email-hash\">{tx.EmailHash}</span>\n        </div>\n      )}\n      {tx.MessageKey && (\n        <div data-testid=\"message\">\n          <span className=\"label\">{t('message_key')}:</span>{' '}\n          <span className=\"message-key\">{tx.MessageKey}</span>\n        </div>\n      )}\n      {tx.SetFlag && (\n        <div data-testid=\"set-flag\">\n          <span className=\"label\">{t('set_flag')}:</span>{' '}\n          <span className=\"flag\">\n            {ACCOUNT_FLAGS[Number(tx.SetFlag)] || tx.SetFlag}\n          </span>\n        </div>\n      )}\n      {tx.ClearFlag && (\n        <div data-testid=\"clear-flag\">\n          <span className=\"label\">{t('clear_flag')}:</span>{' '}\n          <span className=\"flag\">\n            {ACCOUNT_FLAGS[Number(tx.ClearFlag)] || tx.ClearFlag}\n          </span>\n        </div>\n      )}\n      {tx.NFTokenMinter && (\n        <div data-testid=\"minter\">\n          <span className=\"label\">{t('nftoken_minter')}:</span>{' '}\n          <span className=\"domain\">\n            <Account account={tx.NFTokenMinter} />\n          </span>\n        </div>\n      )}\n    </>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/AccountSet/index.tsx",
    "content": "import {\n  TransactionAction,\n  TransactionCategory,\n  TransactionMapping,\n} from '../types'\nimport { Description } from './Description'\nimport { Simple } from './Simple'\nimport { TableDetail } from './TableDetail'\n\nexport const AccountSetTransaction: TransactionMapping = {\n  Description,\n  Simple,\n  TableDetail,\n  action: TransactionAction.MODIFY,\n  category: TransactionCategory.ACCOUNT,\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/AccountSet/test/AccountSetDescription.test.tsx",
    "content": "import i18n from '../../../../../../i18n/testConfigEnglish'\n\nimport { Description } from '../Description'\nimport { createDescriptionRenderFactory } from '../../test'\nimport mockAccountSetWithDomain from './mock_data/AccountSetWithDomain.json'\nimport mockAccountSetWithClearFlag from './mock_data/AccountSetWithClearFlag.json'\nimport mockAccountSetWithSetFlag from './mock_data/AccountSetWithSetFlag.json'\nimport mockAccountSetWithMessageKey from './mock_data/AccountSetWithMessageKey.json'\nimport mockAccountSetWithNFTokenMinter from './mock_data/AccountSetWithNFTokenMinter.json'\n\nconst renderComponent = createDescriptionRenderFactory(Description, i18n)\n\ndescribe('AccountSet: Description', () => {\n  it('renders tx that sets the domain', () => {\n    const { container, unmount } = renderComponent(mockAccountSetWithDomain)\n    expect(container).toHaveTextContent(\n      'It sets the account domain as mduo13.com',\n    )\n    unmount()\n  })\n\n  it('renders tx that sets the email hash', () => {\n    const { container, unmount } = renderComponent({\n      ...mockAccountSetWithDomain,\n      tx: {\n        ...mockAccountSetWithDomain.tx,\n        Domain: undefined,\n        EmailHash: '7AC3878BF42A5329698F468A6AAA03B9',\n      },\n    })\n    expect(container).toHaveTextContent(\n      'It sets the account email hash as 7AC3878BF42A5329698F468A6AAA03B9',\n    )\n    unmount()\n  })\n\n  it('renders tx that clears a flag', () => {\n    const { container, unmount } = renderComponent(mockAccountSetWithClearFlag)\n    expect(container).toHaveTextContent(\n      'It clears the account flag asfGlobalFreeze',\n    )\n    unmount()\n  })\n\n  it('renders tx that sets a flag', () => {\n    const { container, unmount } = renderComponent(mockAccountSetWithSetFlag)\n    expect(container).toHaveTextContent(\n      'It sets the account flag asfRequireDest',\n    )\n    unmount()\n  })\n\n  it('renders tx that clears a flag that is not defined', () => {\n    const { container, unmount } = renderComponent({\n      ...mockAccountSetWithClearFlag,\n      tx: { ...mockAccountSetWithClearFlag.tx, ClearFlag: 45 },\n    })\n    expect(container).toHaveTextContent('It clears the account flag 45')\n    unmount()\n  })\n\n  it('renders tx that sets a flag that is not defined', () => {\n    const { container, unmount } = renderComponent({\n      ...mockAccountSetWithSetFlag,\n      tx: { ...mockAccountSetWithSetFlag.tx, SetFlag: 45 },\n    })\n    expect(container).toHaveTextContent('It sets the account flag 45')\n    unmount()\n  })\n\n  it('renders tx that sets a message', () => {\n    const { container, unmount } = renderComponent(mockAccountSetWithMessageKey)\n    expect(\n      container.querySelector('[data-testid=\"message-key\"]'),\n    ).toHaveTextContent(\n      'It sets the account message key as 020000000000000000000000000941C216565D33C8A8ACD1A33C359E84D652D1DA',\n    )\n    unmount()\n  })\n\n  it('renders tx that sets a minter', () => {\n    const { container, unmount } = renderComponent(\n      mockAccountSetWithNFTokenMinter,\n    )\n    expect(container.querySelector('[data-testid=\"minter\"]')).toHaveTextContent(\n      'It sets rXMART8usFd5kABXCayoP6ZfB35b4v43t as the authorized minter for this account',\n    )\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/AccountSet/test/AccountSetSimple.test.tsx",
    "content": "import i18n from '../../../../../../i18n/testConfigEnglish'\n\nimport { createSimpleRenderFactory } from '../../test/createWrapperFactory'\nimport { Simple } from '../Simple'\nimport mockAccountSetWithDomain from './mock_data/AccountSetWithDomain.json'\nimport mockAccountSetWithClearFlag from './mock_data/AccountSetWithClearFlag.json'\nimport mockAccountSetWithSetFlag from './mock_data/AccountSetWithSetFlag.json'\nimport mockAccountSetWithMessageKey from './mock_data/AccountSetWithMessageKey.json'\nimport mockAccountSetWithNFTokenMinter from './mock_data/AccountSetWithNFTokenMinter.json'\nimport { expectSimpleRowLabel, expectSimpleRowText } from '../../test'\n\nconst renderComponent = createSimpleRenderFactory(Simple, i18n)\n\ndescribe('AccountSet: Simple', () => {\n  it('renders tx that sets the domain', () => {\n    const { container, unmount } = renderComponent(mockAccountSetWithDomain)\n    expectSimpleRowLabel(container, 'domain', 'domain')\n    expectSimpleRowText(container, 'domain', 'mduo13.com')\n    unmount()\n  })\n\n  it('renders tx that sets the email hash', () => {\n    const { container } = renderComponent({\n      ...mockAccountSetWithDomain,\n      tx: {\n        ...mockAccountSetWithDomain.tx,\n        Domain: undefined,\n        EmailHash: '7AC3878BF42A5329698F468A6AAA03B9',\n      },\n    })\n\n    expectSimpleRowLabel(container, 'email', 'email hash')\n    expectSimpleRowText(container, 'email', '7AC3878BF42A5329698F468A6AAA03B9')\n  })\n\n  it('renders tx that clears a flag', () => {\n    const { container, unmount } = renderComponent(mockAccountSetWithClearFlag)\n    expectSimpleRowLabel(container, 'clear-flag', 'clear flag')\n    expectSimpleRowText(container, 'clear-flag', 'asfGlobalFreeze')\n    unmount()\n  })\n\n  it('renders tx that sets a flag', () => {\n    const { container, unmount } = renderComponent(mockAccountSetWithSetFlag)\n    expectSimpleRowLabel(container, 'set-flag', 'set flag')\n    expectSimpleRowText(container, 'set-flag', 'asfRequireDest')\n    unmount()\n  })\n\n  it('renders tx that clears a flag without a defined flag', () => {\n    const { container, unmount } = renderComponent({\n      ...mockAccountSetWithClearFlag,\n      tx: { ...mockAccountSetWithClearFlag.tx, ClearFlag: 45 },\n    })\n    expectSimpleRowLabel(container, 'clear-flag', 'clear flag')\n    expectSimpleRowText(container, 'clear-flag', '45')\n    unmount()\n  })\n\n  it('renders tx that sets a flag without a defined flag', () => {\n    const { container, unmount } = renderComponent({\n      ...mockAccountSetWithSetFlag,\n      tx: { ...mockAccountSetWithSetFlag.tx, SetFlag: 45 },\n    })\n    expectSimpleRowLabel(container, 'set-flag', 'set flag')\n    expectSimpleRowText(container, 'set-flag', '45')\n    unmount()\n  })\n\n  it('renders tx that sets a message', () => {\n    const { container, unmount } = renderComponent(mockAccountSetWithMessageKey)\n    expectSimpleRowLabel(container, 'message', 'message key')\n    expectSimpleRowText(\n      container,\n      'message',\n      '020000000000000000000000000941C216565D33C8A8ACD1A33C359E84D652D1DA',\n    )\n    unmount()\n  })\n\n  it('renders tx that sets a minter', () => {\n    const { container, unmount } = renderComponent(\n      mockAccountSetWithNFTokenMinter,\n    )\n    expectSimpleRowLabel(container, 'minter', 'NFT Minter')\n    expectSimpleRowText(\n      container,\n      'minter',\n      'rXMART8usFd5kABXCayoP6ZfB35b4v43t',\n    )\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/AccountSet/test/AccountSetTableDetail.test.tsx",
    "content": "import { createTableDetailRenderFactory } from '../../test'\nimport i18n from '../../../../../../i18n/testConfigEnglish'\n\nimport { TableDetail } from '../TableDetail'\nimport mockAccountSetWithDomain from './mock_data/AccountSetWithDomain.json'\nimport mockAccountSetWithClearFlag from './mock_data/AccountSetWithClearFlag.json'\nimport mockAccountSetWithSetFlag from './mock_data/AccountSetWithSetFlag.json'\nimport mockAccountSetWithMessageKey from './mock_data/AccountSetWithMessageKey.json'\nimport mockAccountSetWithNFTokenMinter from './mock_data/AccountSetWithNFTokenMinter.json'\n\nconst renderComponent = createTableDetailRenderFactory(TableDetail, i18n)\n\ndescribe('AccountSet: TableDetail', () => {\n  it('renders tx that sets the domain', () => {\n    const { container, unmount } = renderComponent(mockAccountSetWithDomain)\n    expect(container).toHaveTextContent('domain: mduo13.com')\n    unmount()\n  })\n\n  it('renders tx that sets the email hash', () => {\n    const { container, unmount } = renderComponent({\n      ...mockAccountSetWithDomain,\n      tx: {\n        ...mockAccountSetWithDomain.tx,\n        Domain: undefined,\n        EmailHash: '7AC3878BF42A5329698F468A6AAA03B9',\n      },\n    })\n    expect(container).toHaveTextContent(\n      'email hash: 7AC3878BF42A5329698F468A6AAA03B9',\n    )\n    unmount()\n  })\n\n  it('renders tx that clears a flag', () => {\n    const { container, unmount } = renderComponent(mockAccountSetWithClearFlag)\n    expect(container).toHaveTextContent('clear flag: asfGlobalFreeze')\n    unmount()\n  })\n\n  it('renders tx that sets a flag', () => {\n    const { container, unmount } = renderComponent(mockAccountSetWithSetFlag)\n    expect(container).toHaveTextContent('set flag: asfRequireDest')\n    unmount()\n  })\n\n  it('renders tx that clears a flag that is not defined', () => {\n    const { container, unmount } = renderComponent({\n      ...mockAccountSetWithClearFlag,\n      tx: { ...mockAccountSetWithClearFlag.tx, ClearFlag: 45 },\n    })\n    expect(container).toHaveTextContent('clear flag: 45')\n    unmount()\n  })\n\n  it('renders tx that sets a flag that is not defined', () => {\n    const { container, unmount } = renderComponent({\n      ...mockAccountSetWithSetFlag,\n      tx: { ...mockAccountSetWithSetFlag.tx, SetFlag: 45 },\n    })\n    expect(container).toHaveTextContent('set flag: 45')\n    unmount()\n  })\n\n  it('renders tx that sets a message', () => {\n    const { container, unmount } = renderComponent(mockAccountSetWithMessageKey)\n    expect(container).toHaveTextContent(\n      'message key: 020000000000000000000000000941C216565D33C8A8ACD1A33C359E84D652D1DA',\n    )\n    unmount()\n  })\n\n  it('renders tx that sets a minter', () => {\n    const { container, unmount } = renderComponent(\n      mockAccountSetWithNFTokenMinter,\n    )\n    expect(container.querySelector('[data-testid=\"minter\"]')).toHaveTextContent(\n      'NFT Minter: rXMART8usFd5kABXCayoP6ZfB35b4v43t',\n    )\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/AccountSet/test/mock_data/AccountSetWithClearFlag.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n    \"ClearFlag\": 7,\n    \"Fee\": \"12000\",\n    \"Flags\": 2147483648,\n    \"LastLedgerSequence\": 18123085,\n    \"Sequence\": 350,\n    \"SigningPubKey\": \"03AB40A0490F9B7ED8DF29D246BF2D6269820A0EE7742ACDD457BEA7C7D0931EDB\",\n    \"TransactionType\": \"AccountSet\",\n    \"TxnSignature\": \"3045022100EBDF1A5718BC47251ADDE4F84A7971AB9D2886DDA7E20016B9373DF2AA88161B02201958A3E7E594F0FACC8F29C7505288626CF73E7225DF8EA1EC9797AA0F8AD2B6\",\n    \"date\": \"2016-01-06T22:58:50Z\"\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n            \"AccountTxnID\": \"719D520BBA197666BADE09A68D059709D6155AE80E29DF19FDC53EEF25B1A915\",\n            \"Balance\": \"100270663\",\n            \"Domain\": \"6D64756F31332E636F6D\",\n            \"EmailHash\": \"98B4375E1D753E5B91627516F6D70977\",\n            \"Flags\": 8388608,\n            \"MessageKey\": \"0000000000000000000000070000000300\",\n            \"OwnerCount\": 4,\n            \"Sequence\": 351,\n            \"TransferRate\": 1004999999\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"13F1A95D7AAB7108D5CE7EEAF504B2894B8C674E6D68499076441C4837282BF8\",\n          \"PreviousFields\": {\n            \"AccountTxnID\": \"7955A09FEC8D20CA20F39B67908C219F6B3E64C24E1EFABAA672E440186B8667\",\n            \"Balance\": \"100282663\",\n            \"Flags\": 12582912,\n            \"Sequence\": 350\n          },\n          \"PreviousTxnID\": \"7955A09FEC8D20CA20F39B67908C219F6B3E64C24E1EFABAA672E440186B8667\",\n          \"PreviousTxnLgrSeq\": 18121764\n        }\n      }\n    ],\n    \"TransactionIndex\": 4,\n    \"TransactionResult\": \"tesSUCCESS\"\n  },\n  \"hash\": \"719D520BBA197666BADE09A68D059709D6155AE80E29DF19FDC53EEF25B1A915\",\n  \"ledger_index\": 18123084,\n  \"date\": \"2016-01-06T22:58:50Z\"\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/AccountSet/test/mock_data/AccountSetWithDomain.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW\",\n    \"Domain\": \"6D64756F31332E636F6D\",\n    \"Fee\": \"12\",\n    \"Flags\": 0,\n    \"LastLedgerSequence\": 69173351,\n    \"Sequence\": 16,\n    \"SigningPubKey\": \"02B3EC4E5DD96029A647CFA20DA07FE1F85296505552CCAC114087E66B46BD77DF\",\n    \"TransactionType\": \"AccountSet\",\n    \"TxnSignature\": \"3044022012424CC922880F7196DF03C9D14C71631527A36FF10FB460CC45B5B406675E8F02205A1BB0F42CCABBE252C82F4F94B21307D8B0A4341E85D5F7DEC3AAF18CB8EE24\",\n    \"date\": \"2022-01-22T02:27:41Z\"\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW\",\n            \"Balance\": \"20323989\",\n            \"Domain\": \"6D64756F31332E636F6D\",\n            \"Flags\": 0,\n            \"OwnerCount\": 1,\n            \"Sequence\": 17,\n            \"TransferRate\": 1005000000\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"F0D5C006F9DD3227B13516AA3DC8CC14909954496F1876051D646639ACB34C02\",\n          \"PreviousFields\": {\n            \"Balance\": \"20324001\",\n            \"Sequence\": 16\n          },\n          \"PreviousTxnID\": \"BDF144FA668838F8485B4FF677291F7039137A5247D616519D0BB8BC234952F7\",\n          \"PreviousTxnLgrSeq\": 67118406\n        }\n      }\n    ],\n    \"TransactionIndex\": 25,\n    \"TransactionResult\": \"tesSUCCESS\"\n  },\n  \"hash\": \"09F5E55AD8309310A536852A1321A7B8FDEBF5F7F8DDE8D78A6C70DACCBEC707\",\n  \"ledger_index\": 69173333,\n  \"date\": \"2022-01-22T02:27:41Z\"\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/AccountSet/test/mock_data/AccountSetWithMessageKey.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"ra5nK24KXen9AHvsdFTKHSANinZseWnPcX\",\n    \"Fee\": \"12\",\n    \"Flags\": 2147483648,\n    \"LastLedgerSequence\": 60069268,\n    \"MessageKey\": \"020000000000000000000000000941C216565D33C8A8ACD1A33C359E84D652D1DA\",\n    \"Sequence\": 35,\n    \"SigningPubKey\": \"ED9F3F4ECF8F66D7727847B569EC055F637FA059A08623E63EFE78DFC9F42C1299\",\n    \"TransactionType\": \"AccountSet\",\n    \"TxnSignature\": \"653F6BE81D8BDA15FA4DAACAA3968A286CDD59484933046C66B2163543DF7A81996EFE2EA29BB5713FA276F59355811342008D6E9AB1C212D12010A396E0B500\",\n    \"date\": \"2020-12-08T02:05:40Z\"\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"ra5nK24KXen9AHvsdFTKHSANinZseWnPcX\",\n            \"Balance\": \"79723222395\",\n            \"Domain\": \"6D64756F31332E636F6D\",\n            \"Flags\": 65536,\n            \"MessageKey\": \"020000000000000000000000000941C216565D33C8A8ACD1A33C359E84D652D1DA\",\n            \"OwnerCount\": 2,\n            \"RegularKey\": \"rUnMgNT74LreSH8i23FbonW8iYfADyq5tR\",\n            \"Sequence\": 36\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"43EA78783A089B137D5E87610DF3BD4129F989EDD02EFAF6C265924D3A0EF8CE\",\n          \"PreviousFields\": {\n            \"Balance\": \"79723222407\",\n            \"Sequence\": 35\n          },\n          \"PreviousTxnID\": \"EEA6B31F6E49D4F59103F20E51BCB44919ACFDC51861616F397B8FA66E2F8861\",\n          \"PreviousTxnLgrSeq\": 60069210\n        }\n      }\n    ],\n    \"TransactionIndex\": 12,\n    \"TransactionResult\": \"tesSUCCESS\"\n  },\n  \"hash\": \"79050F3835F7D1B806206E5F9E43939C5B624EC0D246264D6761110BF5818C62\",\n  \"ledger_index\": 60069265,\n  \"date\": \"2020-12-08T02:05:40Z\"\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/AccountSet/test/mock_data/AccountSetWithNFTokenMinter.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rUBZRgMztpzMUVz4Ne67pAUisBtvqU6Coc\",\n    \"Fee\": \"225\",\n    \"LastLedgerSequence\": 75444767,\n    \"NFTokenMinter\": \"rXMART8usFd5kABXCayoP6ZfB35b4v43t\",\n    \"Sequence\": 75425977,\n    \"SetFlag\": 10,\n    \"SigningPubKey\": \"EDADF95E0375381F32BDEB63A980E5378AECE1F59FD255977D7800C40E9A3618DF\",\n    \"TransactionType\": \"AccountSet\",\n    \"TxnSignature\": \"73DFC88CB11471707BE18F4D985866C65ECB7F186A41216ADA2545D72CCFEBD438B17415E199F7EE1C24540BA8C948E297595ACB7D5007584A921BEC5685FB01\",\n    \"date\": \"2022-10-31T22:14:31Z\"\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rUBZRgMztpzMUVz4Ne67pAUisBtvqU6Coc\",\n            \"Balance\": \"19999715\",\n            \"Flags\": 0,\n            \"NFTokenMinter\": \"rXMART8usFd5kABXCayoP6ZfB35b4v43t\",\n            \"OwnerCount\": 1,\n            \"Sequence\": 75425978\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"EA67F0BBF06894FBAA495C20B960D5D649C218F3FD167BF6866AF52E102C4CAB\",\n          \"PreviousFields\": {\n            \"Balance\": \"19999940\",\n            \"Sequence\": 75425977\n          },\n          \"PreviousTxnID\": \"95382C7B8C71D8CBF77B6A65FEA37FDD6C1FDBBD1AC8C35DF9F2E6ADEB7F75F4\",\n          \"PreviousTxnLgrSeq\": 75444695\n        }\n      }\n    ],\n    \"TransactionIndex\": 16,\n    \"TransactionResult\": \"tesSUCCESS\"\n  },\n  \"hash\": \"180F2A55E2E06396D835A49B834595D2A9E5842E2C0E95AE3F85716926BFDAA1\",\n  \"ledger_index\": 75444759,\n  \"date\": \"2022-10-31T22:14:31Z\"\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/AccountSet/test/mock_data/AccountSetWithSetFlag.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n    \"Fee\": \"10000\",\n    \"Flags\": 0,\n    \"Sequence\": 355,\n    \"SetFlag\": 1,\n    \"SigningPubKey\": \"03AB40A0490F9B7ED8DF29D246BF2D6269820A0EE7742ACDD457BEA7C7D0931EDB\",\n    \"TransactionType\": \"AccountSet\",\n    \"TxnSignature\": \"304402201BE9677917AD0DB5DC988A1737F62C0364BB0147BDF9A8F7097030C8E8557CC202201A0CA1B5C9F815CA86DFCD548596DA6F4C0FBD3C398FBE129044D1F35D1066F5\",\n    \"date\": \"2016-01-22T22:09:51Z\"\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n            \"AccountTxnID\": \"C464D4D13DCB88BA72C1B7A389E748BF7504CA52A7104692E55B41CA499110A3\",\n            \"Balance\": \"100211663\",\n            \"Domain\": \"6D64756F31332E636F6D\",\n            \"EmailHash\": \"98B4375E1D753E5B91627516F6D70977\",\n            \"Flags\": 9043968,\n            \"MessageKey\": \"0000000000000000000000070000000300\",\n            \"OwnerCount\": 4,\n            \"Sequence\": 356,\n            \"TransferRate\": 1004999999\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"13F1A95D7AAB7108D5CE7EEAF504B2894B8C674E6D68499076441C4837282BF8\",\n          \"PreviousFields\": {\n            \"AccountTxnID\": \"59025DD6C9848679BA433448A1DD95833F2F4B64B03E214D074C7A5B6E3E3E70\",\n            \"Balance\": \"100221663\",\n            \"Flags\": 8912896,\n            \"Sequence\": 355\n          },\n          \"PreviousTxnID\": \"F93F189C54D99397E97AD036830AEE129883C4C2F6A6DF3747797C86E62DA790\",\n          \"PreviousTxnLgrSeq\": 18406205\n        }\n      }\n    ],\n    \"TransactionIndex\": 7,\n    \"TransactionResult\": \"tesSUCCESS\"\n  },\n  \"hash\": \"C464D4D13DCB88BA72C1B7A389E748BF7504CA52A7104692E55B41CA499110A3\",\n  \"ledger_index\": 18424170,\n  \"date\": \"2016-01-22T22:09:51Z\"\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/Batch/Description.tsx",
    "content": "import { Trans } from 'react-i18next'\nimport { TransactionDescriptionProps } from '../types'\nimport { Account } from '../../Account'\n\nexport const Description = ({ data }: TransactionDescriptionProps) => {\n  const Signers = data.tx.BatchSigners\n  function renderSigners() {\n    return Signers.map((signer, index) => (\n      <span key={signer.BatchSigner.Account}>\n        <Account account={signer.BatchSigner.Account} />\n        {index < Signers.length - 1 && ', '}\n      </span>\n    ))\n  }\n\n  return Signers ? (\n    <div data-testid=\"desc\">\n      <Trans\n        i18nKey=\"batch_description\"\n        components={{\n          SignerList: <>{renderSigners()}</>,\n        }}\n      />\n    </div>\n  ) : null\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/Batch/Simple.tsx",
    "content": "import { Trans, useTranslation } from 'react-i18next'\nimport { useContext } from 'react'\nimport { useQuery } from 'react-query'\nimport { TransactionSimpleComponent, TransactionSimpleProps } from '../types'\nimport { SimpleRow } from '../SimpleRow'\nimport { SimpleGroup } from '../SimpleGroup'\nimport { Account } from '../../Account'\nimport { TRANSACTION_ROUTE } from '../../../../App/routes'\nimport { RouteLink } from '../../../routing'\nimport SocketContext from '../../../SocketContext'\nimport { getBatchTxStatus } from './utils'\nimport '../../../css/txstatus.scss'\n\nexport const Simple: TransactionSimpleComponent = ({\n  data,\n}: TransactionSimpleProps) => {\n  const { t } = useTranslation()\n  const rippledSocket = useContext(SocketContext)\n  const { batchTransactions } = data.instructions\n\n  const { data: updatedBatchTransactions = [] } = useQuery(\n    ['batchTxStatus', batchTransactions],\n    () => getBatchTxStatus(rippledSocket, batchTransactions),\n    {\n      enabled: !!batchTransactions.length && !!rippledSocket,\n    },\n  )\n\n  const renderFailedStatus = (status) => {\n    if (status === 'not validated') {\n      return t('not-validated')\n    }\n\n    return <span className=\"failed\">{status}</span>\n  }\n\n  const renderBatchTransaction = (tx) => (\n    <SimpleGroup title={t('inner_transaction')} key={tx.Account}>\n      <SimpleRow label={t('account')} data-testid=\"tx-account\">\n        <Account account={tx.Account} />\n      </SimpleRow>\n      <SimpleRow label={t('hash')} data-testid=\"tx-hash\">\n        {tx.successful || tx.status !== 'not validated' ? (\n          <RouteLink\n            className=\"hash\"\n            to={TRANSACTION_ROUTE}\n            params={{ identifier: tx.hash }}\n          >\n            {tx.hash}\n          </RouteLink>\n        ) : (\n          tx.hash\n        )}\n      </SimpleRow>\n      <SimpleRow label={t('status')} data-testid=\"tx-status\">\n        {tx.successful ? (\n          t('successful')\n        ) : (\n          <Trans\n            i18nKey=\"failed\"\n            components={{\n              Status: (\n                <span className=\"tx-result fail\">\n                  {renderFailedStatus(tx.status)}\n                </span>\n              ),\n            }}\n          />\n        )}\n      </SimpleRow>\n    </SimpleGroup>\n  )\n  return <>{updatedBatchTransactions.map(renderBatchTransaction)}</>\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/Batch/TableDetail.tsx",
    "content": "import { Trans, useTranslation } from 'react-i18next'\nimport { useContext } from 'react'\nimport { useQuery } from 'react-query'\nimport { TransactionTableDetailProps } from '../types'\nimport SocketContext from '../../../SocketContext'\nimport { getBatchTxStatus } from './utils'\nimport { RouteLink } from '../../../routing'\nimport { TRANSACTION_ROUTE } from '../../../../App/routes'\n\nexport const TableDetail = ({\n  instructions: tx,\n}: TransactionTableDetailProps) => {\n  const { t } = useTranslation()\n  const { batchTransactions } = tx\n  const rippledSocket = useContext(SocketContext)\n\n  const { data: updatedBatchTransactions = [] } = useQuery(\n    ['batchTxStatus', batchTransactions],\n    () => getBatchTxStatus(rippledSocket, batchTransactions),\n    {\n      enabled: !!batchTransactions.length && !!rippledSocket,\n    },\n  )\n\n  function renderTxList() {\n    const successfulTxs = updatedBatchTransactions.filter(\n      (transaction) => transaction.successful,\n    )\n\n    return successfulTxs.map((transaction, index) => (\n      <span key={transaction.hash}>\n        <RouteLink\n          className=\"hash\"\n          to={TRANSACTION_ROUTE}\n          params={{ identifier: transaction.hash }}\n        >\n          {transaction.hash}\n        </RouteLink>\n        {index < successfulTxs.length - 1 && ', '}\n      </span>\n    ))\n  }\n\n  return (\n    <>\n      <div>\n        <Trans\n          i18nKey=\"batch_table_detail_count\"\n          components={{\n            BatchLabel: <span className=\"label\">{t('batch')}</span>,\n          }}\n          values={{\n            batch_count: batchTransactions.length,\n          }}\n        />\n      </div>\n      <div>\n        <Trans\n          i18nKey=\"batch_table_detail_list\"\n          components={{\n            TxList: <>{renderTxList()}</>,\n          }}\n        />\n      </div>\n    </>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/Batch/index.ts",
    "content": "import {\n  TransactionAction,\n  TransactionCategory,\n  TransactionMapping,\n} from '../types'\n\nimport { Simple } from './Simple'\nimport { TableDetail } from './TableDetail'\nimport { Description } from './Description'\nimport { parser } from './parser'\n\nexport const BatchTransaction: TransactionMapping = {\n  Simple,\n  Description,\n  TableDetail,\n  action: TransactionAction.CREATE,\n  category: TransactionCategory.OTHER,\n  parser,\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/Batch/parser.ts",
    "content": "import type { Batch } from 'xrpl'\nimport { hashSignedTx } from './utils'\n\nexport function parser(tx: Batch) {\n  const batchTransactions = tx.RawTransactions.map((transaction) => ({\n    Account: transaction.RawTransaction.Account,\n    hash: hashSignedTx(transaction.RawTransaction),\n  }))\n  const batchSigners = tx.BatchSigners?.map((signer) => ({\n    Account: signer.BatchSigner.Account,\n  }))\n  return { batchTransactions, batchSigners }\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/Batch/test/BatchDescription.test.tsx",
    "content": "import { createDescriptionRenderFactory } from '../../test'\nimport { Description } from '../Description'\nimport Batch from './mock_data/Batch.json'\nimport i18n from '../../../../../../i18n/testConfigEnglish'\n\nconst renderComponent = createDescriptionRenderFactory(Description, i18n)\n\ndescribe('Clawback', () => {\n  it('handles Clawback Description ', () => {\n    const { container, unmount } = renderComponent(Batch)\n    expect(container.querySelector('[data-testid=\"desc\"]')).toHaveTextContent(\n      `Batch Signers: ` +\n        `rGPoXHWJgeSQow8NQYZgW6HT82GMwTLAaB, ` +\n        `rH84ztgQsQuUnZwaM3ujHjQQJYEf4NR59M`,\n    )\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/Batch/test/BatchSimple.test.tsx",
    "content": "import { render, waitFor } from '@testing-library/react'\nimport { expectSimpleRowText } from '../../test'\nimport { QuickHarness } from '../../../../../test/utils'\nimport { Simple } from '../Simple'\nimport * as rippled from '../../../../../../rippled/lib/rippled'\nimport SocketContext from '../../../../SocketContext'\nimport MockWsClient from '../../../../../test/mockWsClient'\nimport summarizeTransaction from '../../../../../../rippled/lib/txSummary'\nimport i18n from '../../../../../../i18n/testConfigEnglish'\nimport Batch from './mock_data/Batch.json'\nimport InnerTransactionSuccessful from './mock_data/InnerTxSuccessful.json'\nimport InnerTransactionFailed from './mock_data/InnerTxFailed.json'\n\njest.mock('../../../../../../rippled/lib/rippled', () => ({\n  __esModule: true,\n  getTransaction: jest.fn(),\n}))\n\nconst mockedGetTransaction = rippled.getTransaction as jest.Mock\n\nfunction renderComponent(tx: any, socketMock: any = {}) {\n  const data = summarizeTransaction(tx, true)\n  return render(\n    <QuickHarness i18n={i18n}>\n      <SocketContext.Provider value={socketMock}>\n        <Simple data={data.details!} />\n      </SocketContext.Provider>\n    </QuickHarness>,\n  )\n}\n\ndescribe('Batch: Simple', () => {\n  let client\n\n  beforeEach(() => {\n    client = new MockWsClient()\n  })\n  afterEach(() => {\n    client.close()\n    mockedGetTransaction.mockReset()\n  })\n\n  it('renders', async () => {\n    mockedGetTransaction.mockImplementation((_, txId) => {\n      if (\n        txId ===\n        'EB5933399A49541B65552C5B5959AEECC520D10B946EC30F5A39B9EAA16C7D56'\n      ) {\n        return Promise.resolve(InnerTransactionSuccessful)\n      }\n      return Promise.reject(new Error('transaction not found'))\n    })\n\n    const { container } = renderComponent(Batch, client)\n\n    await waitFor(() => {\n      expect(container.querySelectorAll('.group')).toHaveLength(3)\n    })\n\n    const groups = container.querySelectorAll('.group')\n    const innerTx1 = groups[0]\n    const innerTx2 = groups[1]\n    const innerTx3 = groups[2]\n\n    expectSimpleRowText(\n      innerTx1,\n      'tx-account',\n      'rGfNFbXcdrx1t7UDEzrJkPCVBRAR2o6HVc',\n    )\n    expectSimpleRowText(\n      innerTx1,\n      'tx-hash',\n      'EB5933399A49541B65552C5B5959AEECC520D10B946EC30F5A39B9EAA16C7D56',\n    )\n\n    expectSimpleRowText(innerTx1, 'tx-status', 'Successful')\n\n    expectSimpleRowText(\n      innerTx2,\n      'tx-account',\n      'rH84ztgQsQuUnZwaM3ujHjQQJYEf4NR59M',\n    )\n    expectSimpleRowText(\n      innerTx2,\n      'tx-hash',\n      'FD62E8028755E60A8529C76861FAF31A71C97AEAE4E1B27D2D3FAAD234272C11',\n    )\n\n    expectSimpleRowText(innerTx2, 'tx-status', 'Failed (Not Validated)')\n\n    expectSimpleRowText(\n      innerTx3,\n      'tx-account',\n      'rGPoXHWJgeSQow8NQYZgW6HT82GMwTLAaB',\n    )\n    expectSimpleRowText(\n      innerTx3,\n      'tx-hash',\n      'B7EB7E00B47E4CD57FECAB8E0EBAF5EB9471C66A3F80CB5C7D88856FAA7CD090',\n    )\n\n    expectSimpleRowText(innerTx3, 'tx-status', 'Failed (Not Validated)')\n  })\n\n  it('show failed transaction', async () => {\n    mockedGetTransaction.mockImplementation((_, txId) => {\n      if (\n        txId ===\n        'EB5933399A49541B65552C5B5959AEECC520D10B946EC30F5A39B9EAA16C7D56'\n      ) {\n        return Promise.resolve(InnerTransactionFailed)\n      }\n      return Promise.reject(new Error('transaction not found'))\n    })\n    const { container } = renderComponent(Batch, client)\n\n    await waitFor(() => {\n      expect(container.querySelectorAll('.group')).toHaveLength(3)\n    })\n\n    const innerTx1 = container.querySelectorAll('.group')[0]\n    expectSimpleRowText(\n      innerTx1,\n      'tx-account',\n      'rGfNFbXcdrx1t7UDEzrJkPCVBRAR2o6HVc',\n    )\n    expectSimpleRowText(\n      innerTx1,\n      'tx-hash',\n      'EB5933399A49541B65552C5B5959AEECC520D10B946EC30F5A39B9EAA16C7D56',\n    )\n\n    expectSimpleRowText(innerTx1, 'tx-status', 'Failed (tecUNFUNDED_PAYMENT)')\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/Batch/test/BatchTableDetail.test.tsx",
    "content": "import { render, waitFor } from '@testing-library/react'\nimport i18n from '../../../../../../i18n/testConfigEnglish'\nimport * as rippled from '../../../../../../rippled/lib/rippled'\nimport { TableDetail } from '../TableDetail'\nimport Batch from './mock_data/Batch.json'\nimport InnerTransaction from './mock_data/InnerTxSuccessful.json'\nimport MockWsClient from '../../../../../test/mockWsClient'\nimport summarizeTransaction from '../../../../../../rippled/lib/txSummary'\nimport { QuickHarness } from '../../../../../test/utils'\nimport SocketContext from '../../../../SocketContext'\n\nfunction renderComponent(tx: any, socketMock: any = {}) {\n  const data = summarizeTransaction(tx, true)\n  return render(\n    <QuickHarness i18n={i18n}>\n      <SocketContext.Provider value={socketMock}>\n        <TableDetail instructions={data.details!.instructions} />\n      </SocketContext.Provider>\n    </QuickHarness>,\n  )\n}\n\njest.mock('../../../../../../rippled/lib/rippled', () => ({\n  __esModule: true,\n  getTransaction: jest.fn(),\n}))\n\nconst mockedGetTransaction = rippled.getTransaction as jest.Mock\n\ndescribe('Batch: TableDetail', () => {\n  let client\n\n  beforeEach(() => {\n    client = new MockWsClient()\n  })\n  afterEach(() => {\n    client.close()\n    mockedGetTransaction.mockReset()\n  })\n  it('renders', async () => {\n    mockedGetTransaction.mockImplementation((_, txId) => {\n      if (\n        txId ===\n        'EB5933399A49541B65552C5B5959AEECC520D10B946EC30F5A39B9EAA16C7D56'\n      ) {\n        return Promise.resolve(InnerTransaction)\n      }\n      return Promise.reject(new Error('transaction not found'))\n    })\n    const { container } = renderComponent(Batch)\n    await waitFor(() => {\n      expect(container).toHaveTextContent(\n        'Batch 3 transactions' +\n          'Applied Inner Transactions: ' +\n          'EB5933399A49541B65552C5B5959AEECC520D10B946EC30F5A39B9EAA16C7D56',\n      )\n    })\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/Batch/test/mock_data/Batch.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rGfNFbXcdrx1t7UDEzrJkPCVBRAR2o6HVc\",\n    \"BatchSigners\": [\n      {\n        \"BatchSigner\": {\n          \"Account\": \"rGPoXHWJgeSQow8NQYZgW6HT82GMwTLAaB\",\n          \"SigningPubKey\": \"ED69F00948A324C474E76D9FDB9786DB7A8F1C4494EF0DF157CB6C7FD2B3825546\",\n          \"TxnSignature\": \"07D05F59CA2A00CC18548E9BD05AFAEEBD24827050AAC5E87DDEA8CF605B8CC996194F9CF91AC7651018AC158EF8E91A70FC938D03CA5F7809D134350B83B508\"\n        }\n      },\n      {\n        \"BatchSigner\": {\n          \"Account\": \"rH84ztgQsQuUnZwaM3ujHjQQJYEf4NR59M\",\n          \"SigningPubKey\": \"EDD0172DDA3EE826BA95B23A3D4299461381A09E2A9DB981F924787FDCF1237D94\",\n          \"TxnSignature\": \"DC3A2F4C25DC4E4D7FB20F620F0D403AC628F1F135AF1CDD060A6FAA60C87ED595A81D7860EED3A1D6E999DFE17EA45F9D649C55FE559CC298F3F2BF19363F00\"\n        }\n      }\n    ],\n    \"Fee\": \"8\",\n    \"Flags\": 131072,\n    \"LastLedgerSequence\": 4105155,\n    \"RawTransactions\": [\n      {\n        \"RawTransaction\": {\n          \"Account\": \"rGfNFbXcdrx1t7UDEzrJkPCVBRAR2o6HVc\",\n          \"Amount\": \"10000000\",\n          \"Destination\": \"rs6Skg9oNmbCS2FeHLkYXTvz5QmBbqotbm\",\n          \"Fee\": \"0\",\n          \"Flags\": 1073741824,\n          \"Sequence\": 4105131,\n          \"SigningPubKey\": \"\",\n          \"TransactionType\": \"Payment\"\n        }\n      },\n      {\n        \"RawTransaction\": {\n          \"Account\": \"rH84ztgQsQuUnZwaM3ujHjQQJYEf4NR59M\",\n          \"Amount\": \"10000000\",\n          \"Destination\": \"rs6Skg9oNmbCS2FeHLkYXTvz5QmBbqotbm\",\n          \"Fee\": \"0\",\n          \"Flags\": 1073741824,\n          \"Sequence\": 4105134,\n          \"SigningPubKey\": \"\",\n          \"TransactionType\": \"Payment\"\n        }\n      },\n      {\n        \"RawTransaction\": {\n          \"Account\": \"rGPoXHWJgeSQow8NQYZgW6HT82GMwTLAaB\",\n          \"Amount\": \"10000000\",\n          \"Destination\": \"rs6Skg9oNmbCS2FeHLkYXTvz5QmBbqotbm\",\n          \"Fee\": \"0\",\n          \"Flags\": 1073741824,\n          \"Sequence\": 4105135,\n          \"SigningPubKey\": \"\",\n          \"TransactionType\": \"Payment\"\n        }\n      }\n    ],\n    \"Sequence\": 4105130,\n    \"SigningPubKey\": \"ED22122357075DF80555FBD7B4B16E777ABD05C3C2CFAD75E9A6A99FD78729BB19\",\n    \"TransactionType\": \"Batch\",\n    \"TxnSignature\": \"97EA43481D8448544B49580E42BACFD6BCAA3B9B13C940BE3BC9C71D2D81B3D9EA92AFDB35A2AB22780ED6F1D837437BF2B8A291987F17463AD602F13EBA2806\",\n    \"ctid\": \"C03EA3B100000002\",\n    \"date\": 1751382100000,\n    \"hash\": \"9B956A77943DF3FB891DD14D2D41A87CD6E5FA8CC606A097F47319EE6110ABA1\",\n    \"inLedger\": 4105137,\n    \"ledger_index\": 4105137,\n    \"meta\": {\n      \"AffectedNodes\": [\n        {\n          \"ModifiedNode\": {\n            \"FinalFields\": {\n              \"Account\": \"rGfNFbXcdrx1t7UDEzrJkPCVBRAR2o6HVc\",\n              \"Balance\": \"99999992\",\n              \"Flags\": 0,\n              \"OwnerCount\": 0,\n              \"Sequence\": 4105131\n            },\n            \"LedgerEntryType\": \"AccountRoot\",\n            \"LedgerIndex\": \"C944D2DAB07823AF102AE4C26D9E4561928045392428DD5040F97CED66851A07\",\n            \"PreviousFields\": {\n              \"Balance\": \"100000000\",\n              \"Sequence\": 4105130\n            },\n            \"PreviousTxnID\": \"E1456C423164AC5F86226994DCD899C1B3A59A63F8B21568BB1847D38537883E\",\n            \"PreviousTxnLgrSeq\": 4105130\n          }\n        }\n      ],\n      \"TransactionIndex\": 0,\n      \"TransactionResult\": \"tesSUCCESS\"\n    },\n    \"validated\": true\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rGfNFbXcdrx1t7UDEzrJkPCVBRAR2o6HVc\",\n            \"Balance\": \"99999992\",\n            \"Flags\": 0,\n            \"OwnerCount\": 0,\n            \"Sequence\": 4105131\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"C944D2DAB07823AF102AE4C26D9E4561928045392428DD5040F97CED66851A07\",\n          \"PreviousFields\": {\n            \"Balance\": \"100000000\",\n            \"Sequence\": 4105130\n          },\n          \"PreviousTxnID\": \"E1456C423164AC5F86226994DCD899C1B3A59A63F8B21568BB1847D38537883E\",\n          \"PreviousTxnLgrSeq\": 4105130\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tesSUCCESS\"\n  },\n  \"hash\": \"9B956A77943DF3FB891DD14D2D41A87CD6E5FA8CC606A097F47319EE6110ABA1\",\n  \"ledger_index\": 4105137,\n  \"date\": 1751382100000\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/Batch/test/mock_data/InnerTxFailed.json",
    "content": "{\n  \"Account\": \"rGfNFbXcdrx1t7UDEzrJkPCVBRAR2o6HVc\",\n  \"Amount\": \"10000000\",\n  \"DeliverMax\": \"10000000\",\n  \"Destination\": \"rs6Skg9oNmbCS2FeHLkYXTvz5QmBbqotbm\",\n  \"Fee\": \"0\",\n  \"Flags\": 1073741824,\n  \"Sequence\": 4105131,\n  \"SigningPubKey\": \"\",\n  \"TransactionType\": \"Payment\",\n  \"ctid\": \"C03EA3B100010002\",\n  \"date\": 804697300,\n  \"hash\": \"EB5933399A49541B65552C5B5959AEECC520D10B946EC30F5A39B9EAA16C7D56\",\n  \"inLedger\": 4105137,\n  \"ledger_index\": 4105137,\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rs6Skg9oNmbCS2FeHLkYXTvz5QmBbqotbm\",\n            \"Balance\": \"9999990\",\n            \"Flags\": 0,\n            \"OwnerCount\": 0,\n            \"Sequence\": 4105132\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"63BAFBAE46A0E3C6711A8E5020A49886B2FCA50AD9204017BE2BBDB02F025A88\",\n          \"PreviousFields\": {\n            \"Balance\": \"100000000\"\n          },\n          \"PreviousTxnID\": \"63043E9063DBF29379845C3A38D305BBC7B7622E5380193B657C29AFAF57C41E\",\n          \"PreviousTxnLgrSeq\": 4105132\n        }\n      }\n    ],\n    \"ParentBatchID\": \"9B956A77943DF3FB891DD14D2D41A87CD6E5FA8CC606A097F47319EE6110ABA1\",\n    \"TransactionIndex\": 1,\n    \"TransactionResult\": \"tecUNFUNDED_PAYMENT\",\n    \"delivered_amount\": \"10000000\"\n  },\n  \"validated\": true\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/Batch/test/mock_data/InnerTxSuccessful.json",
    "content": "{\n  \"Account\": \"rGfNFbXcdrx1t7UDEzrJkPCVBRAR2o6HVc\",\n  \"Amount\": \"10000000\",\n  \"DeliverMax\": \"10000000\",\n  \"Destination\": \"rs6Skg9oNmbCS2FeHLkYXTvz5QmBbqotbm\",\n  \"Fee\": \"0\",\n  \"Flags\": 1073741824,\n  \"Sequence\": 4105131,\n  \"SigningPubKey\": \"\",\n  \"TransactionType\": \"Payment\",\n  \"ctid\": \"C03EA3B100010002\",\n  \"date\": 804697300,\n  \"hash\": \"EB5933399A49541B65552C5B5959AEECC520D10B946EC30F5A39B9EAA16C7D56\",\n  \"inLedger\": 4105137,\n  \"ledger_index\": 4105137,\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rs6Skg9oNmbCS2FeHLkYXTvz5QmBbqotbm\",\n            \"Balance\": \"110000000\",\n            \"Flags\": 0,\n            \"OwnerCount\": 0,\n            \"Sequence\": 4105132\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"63BAFBAE46A0E3C6711A8E5020A49886B2FCA50AD9204017BE2BBDB02F025A88\",\n          \"PreviousFields\": {\n            \"Balance\": \"100000000\"\n          },\n          \"PreviousTxnID\": \"63043E9063DBF29379845C3A38D305BBC7B7622E5380193B657C29AFAF57C41E\",\n          \"PreviousTxnLgrSeq\": 4105132\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rGfNFbXcdrx1t7UDEzrJkPCVBRAR2o6HVc\",\n            \"Balance\": \"89999992\",\n            \"Flags\": 0,\n            \"OwnerCount\": 0,\n            \"Sequence\": 4105132\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"C944D2DAB07823AF102AE4C26D9E4561928045392428DD5040F97CED66851A07\",\n          \"PreviousFields\": {\n            \"Balance\": \"99999992\",\n            \"Sequence\": 4105131\n          },\n          \"PreviousTxnID\": \"9B956A77943DF3FB891DD14D2D41A87CD6E5FA8CC606A097F47319EE6110ABA1\",\n          \"PreviousTxnLgrSeq\": 4105137\n        }\n      }\n    ],\n    \"ParentBatchID\": \"9B956A77943DF3FB891DD14D2D41A87CD6E5FA8CC606A097F47319EE6110ABA1\",\n    \"TransactionIndex\": 1,\n    \"TransactionResult\": \"tesSUCCESS\",\n    \"delivered_amount\": \"10000000\"\n  },\n  \"validated\": true\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/Batch/utils.ts",
    "content": "import type { Transaction } from 'xrpl'\nimport { decode, encode } from 'ripple-binary-codec'\nimport { bytesToHex, hexToBytes } from '@xrplf/isomorphic/dist/utils'\nimport { sha512 } from '@xrplf/isomorphic/sha512'\nimport { getTransaction } from '../../../../../rippled/lib/rippled'\n\nexport async function getBatchTxStatus(rippledSocket, batchTransactions) {\n  const results = await Promise.all(\n    batchTransactions.map(async (tx) => {\n      try {\n        const res = await getTransaction(rippledSocket, tx.hash)\n        if (res.meta.TransactionResult === 'tesSUCCESS') {\n          return {\n            ...tx,\n            successful: true,\n          }\n        }\n        return {\n          ...tx,\n          successful: false,\n          status: res.meta.TransactionResult,\n        }\n      } catch (error) {\n        return {\n          ...tx,\n          successful: false,\n          status: 'not validated',\n        }\n      }\n    }),\n  )\n  return results\n}\n\nenum GlobalFlags {\n  tfInnerBatchTxn = 0x40000000,\n}\n\nenum HashPrefix {\n  // transaction plus signature to give transaction ID 'TXN'\n  TRANSACTION_ID = 0x54584e00,\n\n  // transaction plus metadata 'TND'\n  TRANSACTION_NODE = 0x534e4400,\n\n  // inner node in tree 'MIN'\n  INNER_NODE = 0x4d494e00,\n\n  // leaf node in tree 'MLN'\n  LEAF_NODE = 0x4d4c4e00,\n\n  // inner transaction to sign 'STX'\n  TRANSACTION_SIGN = 0x53545800,\n\n  // inner transaction to sign (TESTNET) 'stx'\n  TRANSACTION_SIGN_TESTNET = 0x73747800,\n\n  // inner transaction to multisign 'SMT'\n  TRANSACTION_MULTISIGN = 0x534d5400,\n\n  // ledger 'LWR'\n  LEDGER = 0x4c575200,\n}\n\nconst HASH_BYTES = 32\n\nexport function hashSignedTx(tx: Transaction | string): string {\n  let txBlob: string\n  let txObject: Transaction\n  if (typeof tx === 'string') {\n    txBlob = tx\n    /* eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- Required until updated in binary codec. */\n    txObject = decode(tx) as unknown as Transaction\n  } else {\n    txBlob = encode(tx)\n    txObject = tx\n  }\n\n  if (\n    txObject.TxnSignature === undefined &&\n    txObject.Signers === undefined &&\n    txObject.SigningPubKey === undefined &&\n    !hasFlag(txObject, GlobalFlags.tfInnerBatchTxn, 'tfInnerBatchTxn')\n  ) {\n    throw new Error('The transaction must be signed to hash it.')\n  }\n\n  const prefix = HashPrefix.TRANSACTION_ID.toString(16).toUpperCase()\n  return sha512Half(prefix.concat(txBlob))\n}\n\nfunction hasFlag(\n  tx: Transaction | Record<string, unknown>,\n  flag: number,\n  flagName: string,\n): boolean {\n  if (tx.Flags == null) {\n    return false\n  }\n  if (typeof tx.Flags === 'number') {\n    return isFlagEnabled(tx.Flags, flag)\n  }\n  return tx.Flags[flagName] === true\n}\n\nexport function isFlagEnabled(Flags: number, checkFlag: number): boolean {\n  // eslint-disable-next-line no-bitwise -- flags need bitwise\n  return (BigInt(checkFlag) & BigInt(Flags)) === BigInt(checkFlag)\n}\n\nfunction sha512Half(hex: string): string {\n  return bytesToHex(sha512(hexToBytes(hex)).slice(0, HASH_BYTES))\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/Clawback/Description.tsx",
    "content": "import { Trans } from 'react-i18next'\nimport { TransactionDescriptionProps } from '../types'\nimport { Amount } from '../../Amount'\nimport { Account } from '../../Account'\nimport { formatAmount } from '../../../../../rippled/lib/txSummary/formatAmount'\n\nexport const Description = ({ data }: TransactionDescriptionProps) => {\n  const issuer = data.tx.Account\n  const amount = formatAmount(data.tx.Amount)\n  const holder = amount.isMPT ? data.tx.Holder : data.tx.Amount.issuer\n  amount.issuer = issuer\n  return (\n    <>\n      <div data-testid=\"from-to-line\">\n        <Trans\n          i18nKey=\"claws_back_from\"\n          components={{\n            source: <Account account={issuer} />,\n            destination: <Account account={holder} />,\n          }}\n        />\n      </div>\n      <div data-testid=\"amount-line\">\n        <Trans\n          i18nKey=\"instruct_to_claw\"\n          components={{\n            amount: <Amount value={amount} />,\n          }}\n        />\n      </div>\n    </>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/Clawback/Simple.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { SimpleRow } from '../SimpleRow'\nimport { TransactionSimpleComponent, TransactionSimpleProps } from '../types'\nimport { ClawbackInstructions } from './types'\nimport { Account } from '../../Account'\nimport { Amount } from '../../Amount'\n\nexport const Simple: TransactionSimpleComponent = ({\n  data,\n}: TransactionSimpleProps<ClawbackInstructions>) => {\n  const { amount, holder } = data.instructions\n  const { t } = useTranslation()\n\n  return (\n    <>\n      {holder && (\n        <SimpleRow label={t('holder')} data-testid=\"holder\">\n          <Account account={holder} />\n        </SimpleRow>\n      )}\n      {amount && (\n        <SimpleRow label={t('amount')} data-testid=\"amount\">\n          <Amount value={amount} displayIssuer />\n        </SimpleRow>\n      )}\n    </>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/Clawback/TableDetail.tsx",
    "content": "import { useTranslation, Trans } from 'react-i18next'\nimport { Amount } from '../../Amount'\nimport { TransactionTableDetailProps } from '../types'\nimport { ClawbackInstructions } from './types'\nimport { Account } from '../../Account'\n\nexport const TableDetail = ({\n  instructions,\n}: TransactionTableDetailProps<ClawbackInstructions>) => {\n  const { t } = useTranslation()\n  const { amount, holder } = instructions\n\n  return (\n    <div>\n      {amount && holder && (\n        <div className=\"clawback\">\n          <Trans i18nKey=\"action_from\">\n            <span className=\"label\">{t('claws_back')}</span>\n            <Amount value={amount} displayIssuer />\n            from\n            <Account account={holder} />\n          </Trans>\n        </div>\n      )}\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/Clawback/index.ts",
    "content": "import {\n  TransactionAction,\n  TransactionCategory,\n  TransactionMapping,\n} from '../types'\n\nimport { Simple } from './Simple'\nimport { parser } from './parser'\nimport { TableDetail } from './TableDetail'\nimport { Description } from './Description'\n\nexport const ClawbackTransaction: TransactionMapping = {\n  Simple,\n  TableDetail,\n  Description,\n  action: TransactionAction.CANCEL,\n  category: TransactionCategory.PAYMENT,\n  parser,\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/Clawback/parser.ts",
    "content": "import type { Clawback } from 'xrpl'\nimport { ClawbackInstructions } from './types'\nimport { TransactionParser } from '../types'\nimport { formatAmount } from '../../../../../rippled/lib/txSummary/formatAmount'\nimport {\n  computeRippleStateBalanceChange,\n  computeMPTokenBalanceChange,\n} from '../../../utils'\n\nexport const parser: TransactionParser<Clawback, ClawbackInstructions> = (\n  tx,\n  meta,\n) => {\n  const account = tx.Account\n  const amount = formatAmount(tx.Amount)\n\n  if (amount.isMPT === true) {\n    const holder = tx.Holder\n\n    const filteredMptNode = meta.AffectedNodes.filter(\n      (node: any) => node.ModifiedNode?.LedgerEntryType === 'MPToken',\n    )\n\n    // If no mpt is modified, it means the tx failed.\n    // We just return the amount that was attempted to claw.\n    if (!filteredMptNode || filteredMptNode.length !== 1)\n      return {\n        amount,\n        account,\n        holder,\n      }\n\n    const mptNode = filteredMptNode[0].ModifiedNode\n    const { change } = computeMPTokenBalanceChange(mptNode)\n    amount.amount =\n      BigInt(change) < 0\n        ? BigInt(-change).toString(10)\n        : BigInt(change).toString(10)\n\n    return {\n      account,\n      amount,\n      holder,\n    }\n  }\n\n  const holder = amount.issuer\n  amount.issuer = account\n\n  // At this point, we need to get the ACTUAL balance change as a\n  // result of Clawback. If the issuer tries to claw back more than\n  // what holder has, only the max available balance is clawed.\n  const trustlineNode = meta.AffectedNodes.filter(\n    (node: any) =>\n      node.DeletedNode?.LedgerEntryType === 'RippleState' ||\n      node.ModifiedNode?.LedgerEntryType === 'RippleState',\n  )\n\n  // If no trustline is modified, it means the tx failed.\n  // We just return the amount that was attempted to claw.\n  if (!trustlineNode || trustlineNode.length !== 1)\n    return {\n      amount,\n      account,\n      holder,\n    }\n\n  const { change } = computeRippleStateBalanceChange(\n    trustlineNode[0].ModifiedNode ?? trustlineNode[0].DeletedNode,\n  )\n\n  // Update the amount that was actually clawed back\n  // (could be different from what was submitted)\n  amount.amount = Math.abs(change)\n\n  return {\n    account,\n    amount,\n    holder,\n  }\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/Clawback/test/ClawbackDescription.test.tsx",
    "content": "import { createDescriptionRenderFactory } from '../../test'\nimport { Description } from '../Description'\nimport transaction from './mock_data/Clawback.json'\nimport i18n from '../../../../../../i18n/testConfigEnglish'\n\nconst renderComponent = createDescriptionRenderFactory(Description, i18n)\n\ndescribe('Clawback', () => {\n  it('handles Clawback Description ', () => {\n    const { container, unmount } = renderComponent(transaction)\n    expect(\n      container.querySelector('[data-testid=\"from-to-line\"]'),\n    ).toHaveTextContent(\n      `rDZ713igKfedN4hhY6SjQse4Mv3ZrBxnn9 claws back from rscBWQpyZEmQvupeB1quu7Ky8YX4f5CHDP`,\n    )\n    expect(\n      container.querySelector('[data-testid=\"amount-line\"]'),\n    ).toHaveTextContent(\n      `The max clawback amount is 4,840.00 FOO.rDZ713igKfedN4hhY6SjQse4Mv3ZrBxnn9`,\n    )\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/Clawback/test/ClawbackSimple.test.tsx",
    "content": "import { useQuery } from 'react-query'\nimport { createSimpleRenderFactory, expectSimpleRowText } from '../../test'\nimport { Simple } from '../Simple'\nimport transaction from './mock_data/Clawback.json'\nimport transactionFailure from './mock_data/Clawback_Failure.json'\nimport transactionMPT from './mock_data/ClawbackMPT.json'\nimport transactionMPTFailure from './mock_data/ClawbackMPT_Failure.json'\n\njest.mock('react-query', () => ({\n  ...jest.requireActual('react-query'),\n  useQuery: jest.fn(),\n}))\n\nconst renderComponent = createSimpleRenderFactory(Simple)\n\ndescribe('Clawback', () => {\n  it('handles Clawback simple view ', () => {\n    const { container, unmount } = renderComponent(transaction)\n    expectSimpleRowText(\n      container,\n      'holder',\n      'rscBWQpyZEmQvupeB1quu7Ky8YX4f5CHDP',\n    )\n    expectSimpleRowText(\n      container,\n      'amount',\n      '3,840.00 FOO.rDZ713igKfedN4hhY6SjQse4Mv3ZrBxnn9',\n    )\n    unmount()\n  })\n\n  it('handles MPT Clawback simple view ', () => {\n    const data = {\n      assetScale: 3,\n    }\n\n    // @ts-ignore\n    useQuery.mockImplementation(() => ({\n      data,\n    }))\n    const { container, unmount } = renderComponent(transactionMPT)\n    expectSimpleRowText(\n      container,\n      'holder',\n      'rUZTPFN7MBJkjiZ48rak6q7MbhT4ur2kAD',\n    )\n    expectSimpleRowText(\n      container,\n      'amount',\n      '0.05 00000D668E702F54A27C42EF98C13B0787D1766CC9162A47',\n    )\n\n    unmount()\n  })\n\n  it('handles failed Clawback simple view ', () => {\n    const { container, unmount } = renderComponent(transactionFailure)\n    expectSimpleRowText(\n      container,\n      'holder',\n      'rDZ713igKfedN4hhY6SjQse4Mv3ZrBxnn9',\n    )\n    expectSimpleRowText(\n      container,\n      'amount',\n      '4,840.00 FOO.rscBWQpyZEmQvupeB1quu7Ky8YX4f5CHDP',\n    )\n    unmount()\n  })\n\n  it('handles failed MPT Clawback simple view ', () => {\n    const data = {\n      assetScale: 3,\n    }\n\n    // @ts-ignore\n    useQuery.mockImplementation(() => ({\n      data,\n    }))\n    const { container, unmount } = renderComponent(transactionMPTFailure)\n\n    expectSimpleRowText(\n      container,\n      'holder',\n      'r9rAqX8Jjo4uACsimYDVsy5thHDPivujqf',\n    )\n    expectSimpleRowText(\n      container,\n      'amount',\n      '0.05 000010952ECE2AFC727F1C67EF568F360A2D92CB7C29FF7C',\n    )\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/Clawback/test/ClawbackTableDetail.test.tsx",
    "content": "import { createTableDetailRenderFactory } from '../../test'\nimport { TableDetail } from '../TableDetail'\nimport transaction from './mock_data/Clawback.json'\n\nconst renderComponent = createTableDetailRenderFactory(TableDetail)\n\ndescribe('Clawback', () => {\n  it('handles Clawback TableDetail ', () => {\n    const { container, unmount } = renderComponent(transaction)\n    expect(container.querySelector('.clawback')).toHaveTextContent(\n      `claws_back3,840.00 FOO.rDZ713igKfedN4hhY6SjQse4Mv3ZrBxnn9fromrscBWQpyZEmQvupeB1quu7Ky8YX4f5CHDP`,\n    )\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/Clawback/test/mock_data/Clawback.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rDZ713igKfedN4hhY6SjQse4Mv3ZrBxnn9\",\n    \"Amount\": {\n      \"currency\": \"FOO\",\n      \"issuer\": \"rscBWQpyZEmQvupeB1quu7Ky8YX4f5CHDP\",\n      \"value\": \"4840\"\n    },\n    \"Fee\": \"10\",\n    \"Flags\": 0,\n    \"LastLedgerSequence\": 515,\n    \"Sequence\": 492,\n    \"SigningPubKey\": \"ED4B74169976E689D549ED4A50BF06C1174115D363CF9E14031030D2BB5CAA274D\",\n    \"TransactionType\": \"Clawback\",\n    \"TxnSignature\": \"E3C2138CA0C09DD4243DB47B562BDE334CFADFDFF39B50DE7E2A3D6FBCB1ADD89CCAF19A7DE08C3C295974492C3FC7E7CD71FB040A582154EC26DB09D1AEF800\",\n    \"date\": 1688136937000\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rDZ713igKfedN4hhY6SjQse4Mv3ZrBxnn9\",\n            \"Balance\": \"99999999960\",\n            \"Flags\": 2155872256,\n            \"OwnerCount\": 0,\n            \"Sequence\": 493\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"057A552C60FE5AC6C77FC70C28209BB4D33C60C6A350DACEF609C48FE12A4387\",\n          \"PreviousFields\": {\n            \"Balance\": \"99999999970\",\n            \"Sequence\": 492\n          },\n          \"PreviousTxnID\": \"E6EF19434F7FF87AB6EE7127A19D9FBC822B3E8E7C26264A902703424AB1F188\",\n          \"PreviousTxnLgrSeq\": 493\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"FOO\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 65536,\n            \"HighLimit\": {\n              \"currency\": \"FOO\",\n              \"issuer\": \"rDZ713igKfedN4hhY6SjQse4Mv3ZrBxnn9\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"FOO\",\n              \"issuer\": \"rscBWQpyZEmQvupeB1quu7Ky8YX4f5CHDP\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"907573E62311BAC99A985BBBB38DAB09D89B0C47167AB6E280DD2B309CFAF31B\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"FOO\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"3840\"\n            }\n          },\n          \"PreviousTxnID\": \"FEF8B23EB453ECC8BE0D4104CEB0B481E029213848EC1BD11470F8B8C3E6B424\",\n          \"PreviousTxnLgrSeq\": 494\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tesSUCCESS\"\n  },\n  \"hash\": \"0E09D8C61C799AF206D66F81561EC5B52641B439EEA47CB4F5637A918FB51536\",\n  \"ledger_index\": 496,\n  \"date\": 1688136937000\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/Clawback/test/mock_data/ClawbackMPT.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rDz9LyymZh4C1jJvFK6v6qXeeARLdYKuEW\",\n    \"Amount\": {\n      \"mpt_issuance_id\": \"00000D668E702F54A27C42EF98C13B0787D1766CC9162A47\",\n      \"value\": \"50\"\n    },\n    \"Fee\": \"10\",\n    \"Flags\": 2147483648,\n    \"Holder\": \"rUZTPFN7MBJkjiZ48rak6q7MbhT4ur2kAD\",\n    \"Sequence\": 3432,\n    \"SigningPubKey\": \"ED0C1DE70A8762E6C98EC78CF13D278D6950ECDFE8E87BAD3732730845E2D9AB6A\",\n    \"TransactionType\": \"Clawback\",\n    \"TxnSignature\": \"8099CED925A463A2A24F55A496D2BB40108B75840770DFBA9796FBBD40AA482126EE9DAF2512D5D2E8268BCBFC277828E66A28CF3394702611290B45FBA88109\",\n    \"ctid\": \"C0000D6D00000000\",\n    \"date\": 1728575981000\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rDz9LyymZh4C1jJvFK6v6qXeeARLdYKuEW\",\n            \"Balance\": \"99999970\",\n            \"Flags\": 0,\n            \"OwnerCount\": 1,\n            \"Sequence\": 3433\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"06A3654A4A8829FD0575ADDD068BD04F7483C407E027CB43F77C2A5CA575368B\",\n          \"PreviousFields\": {\n            \"Balance\": \"99999980\",\n            \"Sequence\": 3432\n          },\n          \"PreviousTxnID\": \"4B6D63C7AA15899EC1CB3D84C923B08A62D6643A75D28B254F7A0C082B2C0D75\",\n          \"PreviousTxnLgrSeq\": 3436\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"AssetScale\": 3,\n            \"Flags\": 98,\n            \"Issuer\": \"rDz9LyymZh4C1jJvFK6v6qXeeARLdYKuEW\",\n            \"MPTokenMetadata\": \"7B226E616D65223A2255532054726561737572792042696C6C20546F6B656E222C2273796D626F6C223A225553544254222C22646563696D616C73223A322C22746F74616C537570706C79223A313030303030302C22697373756572223A225553205472656173757279222C22697373756544617465223A22323032342D30332D3235222C226D6174757269747944617465223A22323032352D30332D3235222C226661636556616C7565223A2231303030222C22696E74657265737452617465223A22322E35222C22696E7465726573744672657175656E6379223A22517561727465726C79222C22636F6C6C61746572616C223A22555320476F7665726E6D656E74222C226A7572697364696374696F6E223A22556E6974656420537461746573222C22726567756C61746F7279436F6D706C69616E6365223A2253454320526567756C6174696F6E73222C22736563757269747954797065223A2254726561737572792042696C6C222C2265787465726E616C5F75726C223A2268747470733A2F2F6578616D706C652E636F6D2F742D62696C6C2D746F6B656E2D6D657461646174612E6A736F6E227D\",\n            \"MaximumAmount\": \"9223372036854775807\",\n            \"OutstandingAmount\": \"50\",\n            \"OwnerNode\": \"0\",\n            \"Sequence\": 3430\n          },\n          \"LedgerEntryType\": \"MPTokenIssuance\",\n          \"LedgerIndex\": \"0EABDC95DBBC52F8A95A5F49C38211A30B916BC329774F46CC081D502F9E1895\",\n          \"PreviousFields\": {\n            \"OutstandingAmount\": \"100\"\n          },\n          \"PreviousTxnID\": \"4B6D63C7AA15899EC1CB3D84C923B08A62D6643A75D28B254F7A0C082B2C0D75\",\n          \"PreviousTxnLgrSeq\": 3436\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rUZTPFN7MBJkjiZ48rak6q7MbhT4ur2kAD\",\n            \"Flags\": 0,\n            \"MPTAmount\": \"50\",\n            \"MPTokenIssuanceID\": \"00000D668E702F54A27C42EF98C13B0787D1766CC9162A47\",\n            \"OwnerNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"MPToken\",\n          \"LedgerIndex\": \"DA40BA069F110465BD90BF5732163836F011E3E761CCF7B6949FAA24D97132F6\",\n          \"PreviousFields\": {\n            \"MPTAmount\": \"100\"\n          },\n          \"PreviousTxnID\": \"4B6D63C7AA15899EC1CB3D84C923B08A62D6643A75D28B254F7A0C082B2C0D75\",\n          \"PreviousTxnLgrSeq\": 3436\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tesSUCCESS\"\n  },\n  \"hash\": \"46B686335794B911B3B76C2F4B76AF424F9978C3E82B2F6488801C359AA71856\",\n  \"ledger_index\": 3437,\n  \"date\": 1728575981000\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/Clawback/test/mock_data/ClawbackMPT_Failure.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rnGVhdnWv7g3fW8UNJyFHj6eyngsMdwA8c\",\n    \"Amount\": {\n      \"mpt_issuance_id\": \"000010952ECE2AFC727F1C67EF568F360A2D92CB7C29FF7C\",\n      \"value\": \"50\"\n    },\n    \"Fee\": \"10\",\n    \"Flags\": 2147483648,\n    \"Holder\": \"r9rAqX8Jjo4uACsimYDVsy5thHDPivujqf\",\n    \"Sequence\": 4246,\n    \"SigningPubKey\": \"ED4F6FF2241860884D4DD6C5797BDA553155D194F07B1BFC67129F183322DA7DC3\",\n    \"TransactionType\": \"Clawback\",\n    \"TxnSignature\": \"C54F175F0AFD950507C059E0EA5E6FA0079E7CDE5DF62BB122B56DC34A351C2369E208B31F7C27B1E9D21753506E195B147500D033884C44373899C84A97680B\",\n    \"ctid\": \"C000109B00000000\",\n    \"date\": 1728577343000\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rnGVhdnWv7g3fW8UNJyFHj6eyngsMdwA8c\",\n            \"Balance\": \"99999980\",\n            \"Flags\": 0,\n            \"OwnerCount\": 1,\n            \"Sequence\": 4247\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"95A16157D164CD90D64BC94DE3EA7758AE3088391C9AC44AFCAC90C5153D83D5\",\n          \"PreviousFields\": {\n            \"Balance\": \"99999990\",\n            \"Sequence\": 4246\n          },\n          \"PreviousTxnID\": \"8ACD0682CB1EDDCF6C61F15E6B9637D2719FDA2EC32EB384A68F36F0A0297D91\",\n          \"PreviousTxnLgrSeq\": 4248\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tecINSUFFICIENT_FUNDS\"\n  },\n  \"hash\": \"26E6E7AEA4F78801EB0408D802FEBA11B962BFD680501DF0D0C58F30C6EA8951\",\n  \"ledger_index\": 4251,\n  \"date\": 1728577343000\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/Clawback/test/mock_data/Clawback_Failure.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rscBWQpyZEmQvupeB1quu7Ky8YX4f5CHDP\",\n    \"Amount\": {\n      \"currency\": \"FOO\",\n      \"issuer\": \"rDZ713igKfedN4hhY6SjQse4Mv3ZrBxnn9\",\n      \"value\": \"4840\"\n    },\n    \"Fee\": \"10\",\n    \"Flags\": 0,\n    \"LastLedgerSequence\": 514,\n    \"Sequence\": 491,\n    \"SigningPubKey\": \"EDF33A9B13FC43193E136D5E76DD171DF8E7E7184979F214480252A812E148436F\",\n    \"TransactionType\": \"Clawback\",\n    \"TxnSignature\": \"4B36BF456ED06B326CF7C130FDD96F4BA0F6475CA23D5362A1FEB5D10905B377B5B359E077478E4E7412E3ED5A17FE7E7D5E7DAF554976B0B582526E082E0A0D\",\n    \"date\": 1688136936000\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rscBWQpyZEmQvupeB1quu7Ky8YX4f5CHDP\",\n            \"Balance\": \"99999999970\",\n            \"Flags\": 0,\n            \"OwnerCount\": 1,\n            \"Sequence\": 492\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"9815D11E762BFF706A1FA0362217D0DB3F3756204523D7DE46469D0DE2A2A83E\",\n          \"PreviousFields\": {\n            \"Balance\": \"99999999980\",\n            \"Sequence\": 491\n          },\n          \"PreviousTxnID\": \"FEF8B23EB453ECC8BE0D4104CEB0B481E029213848EC1BD11470F8B8C3E6B424\",\n          \"PreviousTxnLgrSeq\": 494\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tecNO_PERMISSION\"\n  },\n  \"hash\": \"6B8CD7D19CD1E3E428F26A897C4CAEDFE4474390C7CBF6D885A76CC66E80DEFA\",\n  \"ledger_index\": 495,\n  \"date\": 1688136936000\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/Clawback/types.ts",
    "content": "import { ExplorerAmount } from '../../../types'\n\nexport interface ClawbackInstructions {\n  account: string\n  amount?: ExplorerAmount\n  holder?: string\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/CredentialAccept/Simple.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { type CredentialAccept } from 'xrpl'\nimport { TransactionSimpleComponent, TransactionSimpleProps } from '../types'\nimport { SimpleRow } from '../SimpleRow'\nimport { convertHexToString } from '../../../../../rippled/lib/utils'\n\nexport const Simple: TransactionSimpleComponent = (\n  props: TransactionSimpleProps<CredentialAccept>,\n) => {\n  const { t } = useTranslation()\n  const { data } = props\n  const { Issuer: issuer, CredentialType: credentialType } = data.instructions\n\n  return (\n    <>\n      <SimpleRow label={t('issuer')} data-testid=\"issuer\">\n        {issuer}\n      </SimpleRow>\n\n      <SimpleRow label={t('credential_type')} data-testid=\"credential-type\">\n        {convertHexToString(credentialType)}\n      </SimpleRow>\n    </>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/CredentialAccept/TableDetail.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { type CredentialAccept } from 'xrpl'\nimport { TransactionTableDetailProps } from '../types'\nimport { convertHexToString } from '../../../../../rippled/lib/utils'\n\nexport const TableDetail = ({\n  instructions,\n}: TransactionTableDetailProps<CredentialAccept>) => {\n  const { t } = useTranslation()\n  const { Issuer: issuer, CredentialType: credentialType } = instructions\n  return (\n    <div className=\"credentialAccept\">\n      <div data-testid=\"issuer\">\n        <span className=\"label\">{t('issuer')}: </span>\n        <span className=\"case-sensitive\">{issuer}</span>\n      </div>\n\n      <div data-testid=\"credential-type\">\n        <span className=\"label\">{t('credential_type')}: </span>\n        <span className=\"case-sensitive\">\n          {convertHexToString(credentialType)}\n        </span>\n      </div>\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/CredentialAccept/index.ts",
    "content": "import {\n  TransactionAction,\n  TransactionCategory,\n  TransactionMapping,\n} from '../types'\n\nimport { Simple } from './Simple'\nimport { TableDetail } from './TableDetail'\n\nexport const CredentialAcceptTransaction: TransactionMapping = {\n  Simple,\n  TableDetail,\n  action: TransactionAction.MODIFY,\n  category: TransactionCategory.ACCOUNT,\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/CredentialAccept/test/CredentialAcceptSimple.test.tsx",
    "content": "import { createSimpleRenderFactory, expectSimpleRowText } from '../../test'\nimport { Simple } from '../Simple'\nimport CredentialAccept from './mock_data/CredentialAccept.json'\n\nconst renderComponent = createSimpleRenderFactory(Simple)\n\ndescribe('CredentialAccept: Simple', () => {\n  it('renders', () => {\n    const { container, unmount } = renderComponent(CredentialAccept)\n    expectSimpleRowText(\n      container,\n      'issuer',\n      'rL6bethyyyphLye6A8WHhw1KxDZrwiqCmi',\n    )\n    expectSimpleRowText(container, 'credential-type', 'My test credential')\n\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/CredentialAccept/test/CredentialAcceptTableDetail.test.tsx",
    "content": "import { createTableDetailRenderFactory } from '../../test'\nimport { TableDetail } from '../TableDetail'\nimport mockCredentialAccept from './mock_data/CredentialAccept.json'\n\nconst renderComponent = createTableDetailRenderFactory(TableDetail)\n\ndescribe('CredentialAcceptTableDetail ', () => {\n  it('renders CredentialAcceptTableDetail', () => {\n    const { container, unmount } = renderComponent(mockCredentialAccept)\n\n    expect(container.querySelector('[data-testid=\"issuer\"]')).toHaveTextContent(\n      'issuer: rL6bethyyyphLye6A8WHhw1KxDZrwiqCmi',\n    )\n    expect(\n      container.querySelector('[data-testid=\"credential-type\"]'),\n    ).toHaveTextContent('credential_type: My test credential')\n\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/CredentialAccept/test/mock_data/CredentialAccept.json",
    "content": "{\n  \"close_time_iso\": \"2025-02-18T15:06:23Z\",\n  \"ctid\": \"C006630D00000002\",\n  \"hash\": \"A5BB4EADEF1AF9D81FA9C4EB748B4B8EFB4A28D8DF7FC5227CBE2CF256376693\",\n  \"ledger_hash\": \"265927953A34EB94E687C5AC98A3B696FD225F26BAC36E37DD247E1B8137C43C\",\n  \"ledger_index\": 418573,\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rwXChshgJHh6KwwXY8hN1iNAiuyzJkz7p6\",\n            \"Balance\": \"99999988\",\n            \"Flags\": 0,\n            \"OwnerCount\": 1,\n            \"Sequence\": 418571\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"63821A059043CABF96E1955881B0C0ACAD6BB997F7BBD8F2551E3109616D463A\",\n          \"PreviousFields\": {\n            \"Balance\": \"100000000\",\n            \"OwnerCount\": 0,\n            \"Sequence\": 418570\n          },\n          \"PreviousTxnID\": \"79488F1D640ECC2059CC5D682177EEF6A597A5528372EEA163CE86EA3B188346\",\n          \"PreviousTxnLgrSeq\": 418570\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"CredentialType\": \"4D7920746573742063726564656E7469616C\",\n            \"Flags\": 65536,\n            \"Issuer\": \"rL6bethyyyphLye6A8WHhw1KxDZrwiqCmi\",\n            \"IssuerNode\": \"0\",\n            \"Subject\": \"rwXChshgJHh6KwwXY8hN1iNAiuyzJkz7p6\",\n            \"SubjectNode\": \"0\",\n            \"URI\": \"74657374555249\"\n          },\n          \"LedgerEntryType\": \"Credential\",\n          \"LedgerIndex\": \"7B685088D546B9E8905D26206F452BB2F44D9A33C9BD9BCF280F7BA39015A955\",\n          \"PreviousFields\": {\n            \"Flags\": 0\n          },\n          \"PreviousTxnID\": \"FADDC5925ACC5A5C567E3C70730E090767A9B22330CFB272005169A7CABA82DB\",\n          \"PreviousTxnLgrSeq\": 418572\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rL6bethyyyphLye6A8WHhw1KxDZrwiqCmi\",\n            \"Balance\": \"99999988\",\n            \"Flags\": 0,\n            \"OwnerCount\": 0,\n            \"Sequence\": 418570\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"CF3D9A16400DAE31DA3F0FEF511D753C5F7560ECDB8EC9B7F9E92DC837A01F52\",\n          \"PreviousFields\": {\n            \"OwnerCount\": 1\n          },\n          \"PreviousTxnID\": \"FADDC5925ACC5A5C567E3C70730E090767A9B22330CFB272005169A7CABA82DB\",\n          \"PreviousTxnLgrSeq\": 418572\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tesSUCCESS\"\n  },\n  \"tx\": {\n    \"Account\": \"rwXChshgJHh6KwwXY8hN1iNAiuyzJkz7p6\",\n    \"CredentialType\": \"4D7920746573742063726564656E7469616C\",\n    \"Fee\": \"12\",\n    \"Flags\": 0,\n    \"Issuer\": \"rL6bethyyyphLye6A8WHhw1KxDZrwiqCmi\",\n    \"LastLedgerSequence\": 418592,\n    \"Sequence\": 418570,\n    \"SigningPubKey\": \"ED2EFC907F00BA33809F2FB7B297489AB095197E3C55F3F941792B2A83966AC54E\",\n    \"TransactionType\": \"CredentialAccept\",\n    \"TxnSignature\": \"1D3E366930405D78B1909B5FF0B7315DD76A0D1B318CF675E66C0B6F162874B69F356E52A41F6E10323CAF076194E44F7C63105C4FA9031AB8AF15769C805404\",\n    \"date\": 793206383,\n    \"ledger_index\": 418573\n  },\n  \"validated\": true\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/CredentialCreate/Simple.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { type CredentialCreate } from 'xrpl'\nimport { TransactionSimpleComponent, TransactionSimpleProps } from '../types'\nimport { SimpleRow } from '../SimpleRow'\nimport { convertHexToString } from '../../../../../rippled/lib/utils'\nimport { localizeDate } from '../../../utils'\nimport { useLanguage } from '../../../hooks'\nimport { convertRippleDate } from '../../../../../rippled/lib/convertRippleDate'\nimport { DATE_OPTIONS } from '../../../transactionUtils'\n\nconst Simple: TransactionSimpleComponent = (\n  props: TransactionSimpleProps<CredentialCreate>,\n) => {\n  const { t } = useTranslation()\n  const language = useLanguage()\n  const { data } = props\n  const {\n    Subject: subject,\n    CredentialType: credentialType,\n    Expiration: expiration,\n    URI: uri,\n  } = data.instructions\n\n  return (\n    <>\n      <SimpleRow label={t('subject')} data-testid=\"subject\">\n        {subject}\n      </SimpleRow>\n\n      <SimpleRow label={t('credential_type')} data-testid=\"credential-type\">\n        {convertHexToString(credentialType)}\n      </SimpleRow>\n\n      {expiration && (\n        <SimpleRow label={t('expiration')} data-testid=\"expiration\">\n          {localizeDate(\n            new Date(convertRippleDate(expiration)),\n            language,\n            DATE_OPTIONS,\n          )}\n        </SimpleRow>\n      )}\n      {uri && (\n        <SimpleRow label={t('uri')} data-testid=\"uri\">\n          {convertHexToString(uri)}\n        </SimpleRow>\n      )}\n    </>\n  )\n}\n\nexport { Simple }\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/CredentialCreate/TableDetail.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { type CredentialCreate } from 'xrpl'\nimport { TransactionTableDetailProps } from '../types'\nimport { convertHexToString } from '../../../../../rippled/lib/utils'\n\nexport const TableDetail = ({\n  instructions,\n}: TransactionTableDetailProps<CredentialCreate>) => {\n  const { t } = useTranslation()\n  const {\n    Subject: subject,\n    CredentialType: credentialType,\n    Expiration: expiration,\n    URI: uri,\n  } = instructions\n  return (\n    <div className=\"credentialCreate\">\n      <div data-testid=\"subject\">\n        <span className=\"label\">{t('subject')}: </span>\n        <span className=\"case-sensitive\">{subject}</span>\n      </div>\n\n      <div data-testid=\"credential-type\">\n        <span className=\"label\">{t('credential_type')}: </span>\n        <span className=\"case-sensitive\">\n          {convertHexToString(credentialType)}\n        </span>\n      </div>\n\n      {expiration && (\n        <div data-testid=\"expiration\">\n          <span className=\"label\">{t('expiration')}: </span>\n          <span className=\"case-sensitive\">{expiration}</span>\n        </div>\n      )}\n      {uri && (\n        <div data-testid=\"uri\">\n          <span className=\"label\">{t('uri')}: </span>\n          <span className=\"case-sensitive\">{convertHexToString(uri)}</span>\n        </div>\n      )}\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/CredentialCreate/index.ts",
    "content": "import {\n  TransactionAction,\n  TransactionCategory,\n  TransactionMapping,\n} from '../types'\n\nimport { Simple } from './Simple'\nimport { TableDetail } from './TableDetail'\n\nexport const CredentialCreateTransaction: TransactionMapping = {\n  Simple,\n  TableDetail,\n  action: TransactionAction.CREATE,\n  category: TransactionCategory.ACCOUNT,\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/CredentialCreate/test/CredentialCreateSimple.test.tsx",
    "content": "import { createSimpleRenderFactory, expectSimpleRowText } from '../../test'\nimport { Simple } from '../Simple'\nimport CredentialCreate from './mock_data/CredentialCreate.json'\n\nconst renderComponent = createSimpleRenderFactory(Simple)\n\ndescribe('CredentialCreate: Simple', () => {\n  it('renders', () => {\n    const { container, unmount } = renderComponent(CredentialCreate)\n    expectSimpleRowText(\n      container,\n      'subject',\n      'rDeEwcsbGz4GXyGpyRuQo9vRGGT269Jmjk',\n    )\n    expectSimpleRowText(container, 'credential-type', 'VerifiedAccount')\n    expectSimpleRowText(\n      container,\n      'expiration',\n      'October 5, 2026 at 1:53:30 PM',\n    )\n\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/CredentialCreate/test/CredentialCreateTableDetail.test.tsx",
    "content": "import { createTableDetailRenderFactory } from '../../test'\nimport { TableDetail } from '../TableDetail'\nimport mockCredentialCreate from './mock_data/CredentialCreate.json'\n\nconst renderComponent = createTableDetailRenderFactory(TableDetail)\n\ndescribe('CredentialAcceptTableDetail ', () => {\n  it('renders CredentialAcceptTableDetail', () => {\n    const { container, unmount } = renderComponent(mockCredentialCreate)\n\n    expect(\n      container.querySelector('[data-testid=\"subject\"]'),\n    ).toHaveTextContent('subject: rDeEwcsbGz4GXyGpyRuQo9vRGGT269Jmjk')\n    expect(\n      container.querySelector('[data-testid=\"credential-type\"]'),\n    ).toHaveTextContent('credential_type: VerifiedAccount')\n    expect(\n      container.querySelector('[data-testid=\"expiration\"]'),\n    ).toHaveTextContent('expiration: 844523610')\n\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/CredentialCreate/test/mock_data/CredentialCreate.json",
    "content": "{\n  \"close_time_iso\": \"2025-10-05T13:53:31Z\",\n  \"ctid\": \"C000DAA700000002\",\n  \"hash\": \"38668D75129E7949649D001907709D1F8DB0FD88232B03CD510707E679AD1E0B\",\n  \"ledger_hash\": \"B7DE3742299BE553CC1DE08EFDA3EDE88F94C65B073A623F0C72484F6A9C78C7\",\n  \"ledger_index\": 55975,\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rfEd8iC2g1LVUj75bMkui3yTPcPj6W5Mgr\",\n            \"Balance\": \"99999996\",\n            \"Flags\": 0,\n            \"OwnerCount\": 1,\n            \"Sequence\": 51131\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"3AFBED20615BECB3DE06CB98E2DD0C905E572E4D279C4B5FD77EB48E110991A4\",\n          \"PreviousFields\": {\n            \"Balance\": \"99999997\",\n            \"OwnerCount\": 0,\n            \"Sequence\": 51130\n          },\n          \"PreviousTxnID\": \"76E2BEEC3AE4DF755F821BA301CED0DCC56D20BC6ABAB5C4F3717057D9F82D1A\",\n          \"PreviousTxnLgrSeq\": 51555\n        }\n      },\n      {\n        \"CreatedNode\": {\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"A0102CBC99F6B6114ACD2AD065DC41A5517CB5BEA7958FACA106FF2066B8041D\",\n          \"NewFields\": {\n            \"Owner\": \"rDeEwcsbGz4GXyGpyRuQo9vRGGT269Jmjk\",\n            \"RootIndex\": \"A0102CBC99F6B6114ACD2AD065DC41A5517CB5BEA7958FACA106FF2066B8041D\"\n          }\n        }\n      },\n      {\n        \"CreatedNode\": {\n          \"LedgerEntryType\": \"Credential\",\n          \"LedgerIndex\": \"C9B22CD799166C336E5F4EE0B85986EC354F1279F2A80C77B4A8B2EEF6EB9517\",\n          \"NewFields\": {\n            \"CredentialType\": \"56657269666965644163636F756E74\",\n            \"Expiration\": 844523610,\n            \"Issuer\": \"rfEd8iC2g1LVUj75bMkui3yTPcPj6W5Mgr\",\n            \"Subject\": \"rDeEwcsbGz4GXyGpyRuQo9vRGGT269Jmjk\"\n          }\n        }\n      },\n      {\n        \"CreatedNode\": {\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"D79FCA4F80ABD89F9D0BEBB4B44986D0E5D552DECF4A12947FD2C2493CF55C4A\",\n          \"NewFields\": {\n            \"Owner\": \"rfEd8iC2g1LVUj75bMkui3yTPcPj6W5Mgr\",\n            \"RootIndex\": \"D79FCA4F80ABD89F9D0BEBB4B44986D0E5D552DECF4A12947FD2C2493CF55C4A\"\n          }\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tesSUCCESS\"\n  },\n  \"tx\": {\n    \"Account\": \"rfEd8iC2g1LVUj75bMkui3yTPcPj6W5Mgr\",\n    \"CredentialType\": \"56657269666965644163636F756E74\",\n    \"Expiration\": 844523610,\n    \"Fee\": \"1\",\n    \"Flags\": 0,\n    \"LastLedgerSequence\": 55993,\n    \"Sequence\": 51130,\n    \"SigningPubKey\": \"ED607EE5D1864691EAF2AB8E20873ECAC397EEFAD7E9D714EFC19F44DBC858BDDE\",\n    \"Subject\": \"rDeEwcsbGz4GXyGpyRuQo9vRGGT269Jmjk\",\n    \"TransactionType\": \"CredentialCreate\",\n    \"TxnSignature\": \"EDE43649F01BDAC931E5C2477AE77E7C04B82EF3DEA575F3C8C2E553221747F59E6E57A625FA858C019D9709D829ED33B6C2ABBF42C55952B1F5FCE0309F3608\",\n    \"date\": 812987611,\n    \"ledger_index\": 55975\n  },\n  \"validated\": true\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/CredentialDelete/Simple.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { type CredentialDelete } from 'xrpl'\nimport { TransactionSimpleComponent, TransactionSimpleProps } from '../types'\nimport { SimpleRow } from '../SimpleRow'\nimport { convertHexToString } from '../../../../../rippled/lib/utils'\n\nconst Simple: TransactionSimpleComponent = (\n  props: TransactionSimpleProps<CredentialDelete>,\n) => {\n  const { t } = useTranslation()\n  const { data } = props\n  const {\n    Account: account,\n    Subject: subject,\n    CredentialType: credentialType,\n    Issuer: issuer,\n  } = data.instructions\n\n  return (\n    <>\n      <SimpleRow label={t('subject')} data-testid=\"subject\">\n        {subject || account}\n      </SimpleRow>\n\n      {issuer && (\n        <SimpleRow label={t('issuer')} data-testid=\"issuer\">\n          {issuer || account}\n        </SimpleRow>\n      )}\n\n      <SimpleRow label={t('credential_type')} data-testid=\"credential-type\">\n        {convertHexToString(credentialType)}\n      </SimpleRow>\n    </>\n  )\n}\n\nexport { Simple }\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/CredentialDelete/TableDetail.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { type CredentialDelete } from 'xrpl'\nimport { TransactionTableDetailProps } from '../types'\nimport { convertHexToString } from '../../../../../rippled/lib/utils'\n\nexport const TableDetail = ({\n  instructions,\n}: TransactionTableDetailProps<CredentialDelete>) => {\n  const { t } = useTranslation()\n  const {\n    Account: account,\n    Subject: subject,\n    Issuer: issuer,\n    CredentialType: credentialType,\n  } = instructions\n  return (\n    <div className=\"credential-delete\">\n      <div data-testid=\"subject\">\n        <span className=\"label\">{t('subject')}: </span>\n        <span className=\"case-sensitive\">{subject || account}</span>\n      </div>\n\n      <div data-testid=\"issuer\">\n        <span className=\"label\">{t('issuer')}: </span>\n        <span className=\"case-sensitive\">{issuer || account}</span>\n      </div>\n\n      <div data-testid=\"credential-type\">\n        <span className=\"label\">{t('credential_type')}: </span>\n        <span className=\"case-sensitive\">\n          {convertHexToString(credentialType)}\n        </span>\n      </div>\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/CredentialDelete/index.ts",
    "content": "import {\n  TransactionAction,\n  TransactionCategory,\n  TransactionMapping,\n} from '../types'\n\nimport { Simple } from './Simple'\nimport { TableDetail } from './TableDetail'\n\nexport const CredentialDeleteTransaction: TransactionMapping = {\n  Simple,\n  TableDetail,\n  action: TransactionAction.CANCEL,\n  category: TransactionCategory.ACCOUNT,\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/CredentialDelete/test/CredentialDeleteSimple.test.tsx",
    "content": "import { createSimpleRenderFactory, expectSimpleRowText } from '../../test'\nimport { Simple } from '../Simple'\nimport CredentialDelete from './mock_data/CredentialDelete.json'\n\nconst renderComponent = createSimpleRenderFactory(Simple)\n\ndescribe('CredentialDelete: Simple', () => {\n  it('renders', () => {\n    const { container, unmount } = renderComponent(CredentialDelete)\n\n    expectSimpleRowText(\n      container,\n      'subject',\n      'rwXChshgJHh6KwwXY8hN1iNAiuyzJkz7p6',\n    )\n    expectSimpleRowText(container, 'credential-type', 'My test credential')\n\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/CredentialDelete/test/CredentialDeleteTableDetail.test.tsx",
    "content": "import { createTableDetailRenderFactory } from '../../test'\nimport { TableDetail } from '../TableDetail'\nimport mockCredentialDelete from './mock_data/CredentialDelete.json'\n\nconst renderComponent = createTableDetailRenderFactory(TableDetail)\n\ndescribe('CredentialDeleteTableDetail ', () => {\n  it('renders CredentialDeleteTableDetail', () => {\n    const { container, unmount } = renderComponent(mockCredentialDelete)\n\n    expect(\n      container.querySelector('[data-testid=\"subject\"]'),\n    ).toHaveTextContent('subject: rwXChshgJHh6KwwXY8hN1iNAiuyzJkz7p6')\n    expect(\n      container.querySelector('[data-testid=\"credential-type\"]'),\n    ).toHaveTextContent('credential_type: My test credential')\n    expect(container.querySelector('[data-testid=\"issuer\"]')).toHaveTextContent(\n      'issuer: rL6bethyyyphLye6A8WHhw1KxDZrwiqCmi',\n    )\n\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/CredentialDelete/test/mock_data/CredentialDelete.json",
    "content": "{\n  \"close_time_iso\": \"2025-02-18T15:06:31Z\",\n  \"ctid\": \"C006630F00000002\",\n  \"hash\": \"C7707BDAF65E6C45C2009290A313244717281ABCEFA7D08DD879E19D8F83085F\",\n  \"ledger_hash\": \"634992138E5DC7059441C4B115D5445F050F8CF8CE6F5640CA1E33EEA3DD9343\",\n  \"ledger_index\": 418575,\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rwXChshgJHh6KwwXY8hN1iNAiuyzJkz7p6\",\n            \"Balance\": \"99999988\",\n            \"Flags\": 0,\n            \"OwnerCount\": 0,\n            \"Sequence\": 418571\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"63821A059043CABF96E1955881B0C0ACAD6BB997F7BBD8F2551E3109616D463A\",\n          \"PreviousFields\": {\n            \"OwnerCount\": 1\n          },\n          \"PreviousTxnID\": \"A5BB4EADEF1AF9D81FA9C4EB748B4B8EFB4A28D8DF7FC5227CBE2CF256376693\",\n          \"PreviousTxnLgrSeq\": 418573\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rwXChshgJHh6KwwXY8hN1iNAiuyzJkz7p6\",\n            \"PreviousTxnID\": \"FADDC5925ACC5A5C567E3C70730E090767A9B22330CFB272005169A7CABA82DB\",\n            \"PreviousTxnLgrSeq\": 418572,\n            \"RootIndex\": \"675537AB5EB6416AED24E856E20E5A203FB5A73F0C5D2D92359B5A45184BC594\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"675537AB5EB6416AED24E856E20E5A203FB5A73F0C5D2D92359B5A45184BC594\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"CredentialType\": \"4D7920746573742063726564656E7469616C\",\n            \"Flags\": 65536,\n            \"Issuer\": \"rL6bethyyyphLye6A8WHhw1KxDZrwiqCmi\",\n            \"IssuerNode\": \"0\",\n            \"PreviousTxnID\": \"A5BB4EADEF1AF9D81FA9C4EB748B4B8EFB4A28D8DF7FC5227CBE2CF256376693\",\n            \"PreviousTxnLgrSeq\": 418573,\n            \"Subject\": \"rwXChshgJHh6KwwXY8hN1iNAiuyzJkz7p6\",\n            \"SubjectNode\": \"0\",\n            \"URI\": \"74657374555249\"\n          },\n          \"LedgerEntryType\": \"Credential\",\n          \"LedgerIndex\": \"7B685088D546B9E8905D26206F452BB2F44D9A33C9BD9BCF280F7BA39015A955\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rL6bethyyyphLye6A8WHhw1KxDZrwiqCmi\",\n            \"PreviousTxnID\": \"FADDC5925ACC5A5C567E3C70730E090767A9B22330CFB272005169A7CABA82DB\",\n            \"PreviousTxnLgrSeq\": 418572,\n            \"RootIndex\": \"7D29B654F46648EA1787141BEC0CB3BAA6B42290955C335F9A7B2F34F9D4ACA0\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"7D29B654F46648EA1787141BEC0CB3BAA6B42290955C335F9A7B2F34F9D4ACA0\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rL6bethyyyphLye6A8WHhw1KxDZrwiqCmi\",\n            \"Balance\": \"99999976\",\n            \"Flags\": 0,\n            \"OwnerCount\": 0,\n            \"Sequence\": 418571\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"CF3D9A16400DAE31DA3F0FEF511D753C5F7560ECDB8EC9B7F9E92DC837A01F52\",\n          \"PreviousFields\": {\n            \"Balance\": \"99999988\",\n            \"Sequence\": 418570\n          },\n          \"PreviousTxnID\": \"A5BB4EADEF1AF9D81FA9C4EB748B4B8EFB4A28D8DF7FC5227CBE2CF256376693\",\n          \"PreviousTxnLgrSeq\": 418573\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tesSUCCESS\"\n  },\n  \"tx\": {\n    \"Account\": \"rL6bethyyyphLye6A8WHhw1KxDZrwiqCmi\",\n    \"CredentialType\": \"4D7920746573742063726564656E7469616C\",\n    \"Fee\": \"12\",\n    \"Flags\": 0,\n    \"LastLedgerSequence\": 418593,\n    \"Sequence\": 418570,\n    \"SigningPubKey\": \"ED8627CFD25412BDC67E6B1F1C219669FFEEF7F8D3D46EA572FBE394FAD3A8F46E\",\n    \"Subject\": \"rwXChshgJHh6KwwXY8hN1iNAiuyzJkz7p6\",\n    \"TransactionType\": \"CredentialDelete\",\n    \"TxnSignature\": \"B193889C5791E0E9C9B12B9E948B3E911445986BF5A33415FFC875076F46EA49D7437F03FF8372411D306DAD2E9CDD4C123BBCB0CEFE0C517252F7B23AD34A0D\",\n    \"date\": 793206391,\n    \"ledger_index\": 418575\n  },\n  \"validated\": true\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/CredentialIDs.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { SimpleRow } from './SimpleRow'\n\ninterface CredentialIDsProps {\n  credentialIDs: string[]\n}\n\nexport const CredentialIDs = ({ credentialIDs }: CredentialIDsProps) => {\n  const { t } = useTranslation()\n\n  if (!credentialIDs || credentialIDs.length === 0) {\n    return null\n  }\n\n  return (\n    <>\n      {credentialIDs.map((id, index) => (\n        <SimpleRow\n          key={id}\n          label={index === 0 ? t('credential_ids') : ''}\n          data-testid={`credential-id-${index}`}\n        >\n          {id}\n        </SimpleRow>\n      ))}\n    </>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/DIDDelete/Simple.tsx",
    "content": "import type { DIDDelete } from 'xrpl'\nimport { TransactionSimpleComponent, TransactionSimpleProps } from '../types'\n\nconst Simple: TransactionSimpleComponent = (\n  _props: TransactionSimpleProps<DIDDelete>,\n) => null\n\nexport { Simple }\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/DIDDelete/index.ts",
    "content": "import {\n  TransactionAction,\n  TransactionCategory,\n  TransactionMapping,\n} from '../types'\n\nimport { Simple } from './Simple'\n\nexport const DIDDeleteTransaction: TransactionMapping = {\n  Simple,\n  action: TransactionAction.CANCEL,\n  category: TransactionCategory.ACCOUNT,\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/DIDDelete/test/DIDDeleteSimple.test.tsx",
    "content": "import { createSimpleRenderFactory } from '../../test'\nimport { Simple } from '../Simple'\nimport DIDDelete from './mock_data/DIDDelete.json'\n\nconst renderComponent = createSimpleRenderFactory(Simple)\n\ndescribe('DIDDelete: Simple', () => {\n  it('renders', () => {\n    const { unmount } = renderComponent(DIDDelete)\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/DIDDelete/test/mock_data/DIDDelete.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"r91PyqgWTgED2x8dPHQX7gBktDoSJyHadi\",\n    \"Fee\": \"10\",\n    \"Flags\": 2147483648,\n    \"Sequence\": 10,\n    \"SigningPubKey\": \"ED4195861D0E6438C9CB53C05035A35F8C0183264FBFD07D3EF3DEDFA376E841F6\",\n    \"TransactionType\": \"DIDDelete\",\n    \"TxnSignature\": \"BA5EE539FBBB76BC5A8017837AC486B9FBB2803B51C71E289CE373420BDEE2FECA62BAAB6596EAD92715CA6FC6E9AC987468564279BF279217223B8BF4814208\",\n    \"ctid\": \"C000000B00000000\",\n    \"date\": 1695754510000\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r91PyqgWTgED2x8dPHQX7gBktDoSJyHadi\",\n            \"Balance\": \"999999999980\",\n            \"Flags\": 0,\n            \"OwnerCount\": 0,\n            \"Sequence\": 11\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"502EE614ECBCEC0BE756852ED6F9A460CB441052DA36585D8A59A8D55A6728DF\",\n          \"PreviousFields\": {\n            \"Balance\": \"999999999990\",\n            \"OwnerCount\": 1,\n            \"Sequence\": 10\n          },\n          \"PreviousTxnID\": \"2858A1F28031EDA2065DED324B7D7924F3D5320A60F14BBC16902784E1175F7F\",\n          \"PreviousTxnLgrSeq\": 10\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"r91PyqgWTgED2x8dPHQX7gBktDoSJyHadi\",\n            \"RootIndex\": \"52904262844EF0B9813C13C5C1C4732AD5ED0B5FC51B38F5C9329BF10AA1C8ED\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"52904262844EF0B9813C13C5C1C4732AD5ED0B5FC51B38F5C9329BF10AA1C8ED\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r91PyqgWTgED2x8dPHQX7gBktDoSJyHadi\",\n            \"Attestation\": \"617474657374\",\n            \"DIDDocument\": \"646F63\",\n            \"Flags\": 0,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"2858A1F28031EDA2065DED324B7D7924F3D5320A60F14BBC16902784E1175F7F\",\n            \"PreviousTxnLgrSeq\": 10,\n            \"URI\": \"6469645F6578616D706C65\"\n          },\n          \"LedgerEntryType\": \"DID\",\n          \"LedgerIndex\": \"62FA3D98BA56773590ACC6C5A93126085287E6A6BBCE82DFB085487F385442C3\"\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tesSUCCESS\"\n  },\n  \"hash\": \"3CFF587C2CB976563CE6D89268FA5C90626F0D0B466B56607C0775241BAF6274\",\n  \"ledger_index\": 11,\n  \"date\": 1695754510000\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/DIDSet/Simple.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport type { DIDSet } from 'xrpl'\nimport { TransactionSimpleComponent, TransactionSimpleProps } from '../types'\nimport { SimpleRow } from '../SimpleRow'\nimport { convertHexToString } from '../../../../../rippled/lib/utils'\n\nconst Simple: TransactionSimpleComponent = (\n  props: TransactionSimpleProps<DIDSet>,\n) => {\n  const { t } = useTranslation()\n  const { data } = props\n  const { URI, DIDDocument, Data } = data.instructions\n\n  return (\n    <>\n      {URI && (\n        <SimpleRow label={t('uri')} data-testid=\"uri\">\n          {convertHexToString(URI)}\n        </SimpleRow>\n      )}\n      {DIDDocument && (\n        <SimpleRow label={t('did_document')} data-testid=\"did-document\">\n          {convertHexToString(DIDDocument)}\n        </SimpleRow>\n      )}\n      {Data && (\n        <SimpleRow label={t('data')} data-testid=\"data\">\n          {convertHexToString(Data)}\n        </SimpleRow>\n      )}\n    </>\n  )\n}\n\nexport { Simple }\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/DIDSet/TableDetail.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport type { DIDSet } from 'xrpl'\nimport { TransactionTableDetailProps } from '../types'\nimport { convertHexToString } from '../../../../../rippled/lib/utils'\n\nexport const TableDetail = ({\n  instructions,\n}: TransactionTableDetailProps<DIDSet>) => {\n  const { t } = useTranslation()\n  const { URI, DIDDocument, Data } = instructions\n  return (\n    <div className=\"didSet\">\n      {URI && (\n        <div className=\"uri\">\n          <span className=\"label\">{t('uri')}: </span>\n          <span className=\"case-sensitive\">{convertHexToString(URI)}</span>\n        </div>\n      )}\n      {DIDDocument && (\n        <div className=\"did-document\">\n          <span className=\"label\">{t('did_document')}: </span>\n          <span className=\"case-sensitive\">\n            {convertHexToString(DIDDocument)}\n          </span>\n        </div>\n      )}\n      {Data && (\n        <div className=\"data\">\n          <span className=\"label\">{t('data')}: </span>\n          <span className=\"case-sensitive\">{convertHexToString(Data)}</span>\n        </div>\n      )}\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/DIDSet/index.ts",
    "content": "import {\n  TransactionAction,\n  TransactionCategory,\n  TransactionMapping,\n} from '../types'\n\nimport { Simple } from './Simple'\nimport { TableDetail } from './TableDetail'\n\nexport const DIDSetTransaction: TransactionMapping = {\n  Simple,\n  TableDetail,\n  action: TransactionAction.CREATE,\n  category: TransactionCategory.ACCOUNT,\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/DIDSet/test/DIDSetSimple.test.tsx",
    "content": "import { createSimpleRenderFactory, expectSimpleRowText } from '../../test'\nimport { Simple } from '../Simple'\nimport DIDSet from './mock_data/DIDSet.json'\n\nconst renderComponent = createSimpleRenderFactory(Simple)\n\ndescribe('DIDSet: Simple', () => {\n  it('renders', () => {\n    const { container, unmount } = renderComponent(DIDSet)\n    expectSimpleRowText(container, 'uri', 'did_example')\n    expectSimpleRowText(container, 'did-document', 'doc')\n    expectSimpleRowText(container, 'data', 'attest')\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/DIDSet/test/DIDSetTableDetail.test.tsx",
    "content": "import { createTableDetailRenderFactory } from '../../test'\nimport { TableDetail } from '../TableDetail'\nimport DIDSet from './mock_data/DIDSet.json'\n\nconst renderComponent = createTableDetailRenderFactory(TableDetail)\n\ndescribe('DIDSet: TableDetail', () => {\n  it('renders', () => {\n    const { container, unmount } = renderComponent(DIDSet)\n    expect(container).toHaveTextContent(\n      // eslint-disable-next-line no-useless-concat -- easier to read this way\n      'uri: did_example' + 'did_document: doc' + 'data: attest',\n    )\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/DIDSet/test/mock_data/DIDSet.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rsMvgKpm7cb5TMxt9XRGBXyyVWToBnDTBn\",\n    \"Data\": \"617474657374\",\n    \"DIDDocument\": \"646F63\",\n    \"Fee\": \"10\",\n    \"Flags\": 2147483648,\n    \"Sequence\": 7,\n    \"SigningPubKey\": \"ED1F092C6A847F1095938E8DA5BA2E3710642FE6436ED559E42574FD0562BCC0C8\",\n    \"TransactionType\": \"DIDSet\",\n    \"TxnSignature\": \"7B513D1FF1FA5E6D36A4E5C2AB748CB5D18664E0CCF9CF2A33FEA586070FCA2B8EAD91158B6FAA6689282B14BC186453BB10CF66E95A493C04C5F22BDE05B708\",\n    \"URI\": \"6469645F6578616D706C65\",\n    \"ctid\": \"C000000800000000\",\n    \"date\": 1695751681000\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"CreatedNode\": {\n          \"LedgerEntryType\": \"DID\",\n          \"LedgerIndex\": \"6DB3D8D5B4D76A0BCC1F009759D6FB80F32148194FF7F118B53C6141496F5EA1\",\n          \"NewFields\": {\n            \"Account\": \"rsMvgKpm7cb5TMxt9XRGBXyyVWToBnDTBn\",\n            \"Data\": \"617474657374\",\n            \"DIDDocument\": \"646F63\",\n            \"URI\": \"6469645F6578616D706C65\"\n          }\n        }\n      },\n      {\n        \"CreatedNode\": {\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"89B26FFDA662393CAE9FBE41F734A269414D2B6DDF835A58BED6C4094F678321\",\n          \"NewFields\": {\n            \"Owner\": \"rsMvgKpm7cb5TMxt9XRGBXyyVWToBnDTBn\",\n            \"RootIndex\": \"89B26FFDA662393CAE9FBE41F734A269414D2B6DDF835A58BED6C4094F678321\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rsMvgKpm7cb5TMxt9XRGBXyyVWToBnDTBn\",\n            \"Balance\": \"999999999990\",\n            \"Flags\": 0,\n            \"OwnerCount\": 1,\n            \"Sequence\": 8\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"E9045B69A0655023B8E4008DAA20A67AE3DFDF785A4A71E740B15414F7FEC435\",\n          \"PreviousFields\": {\n            \"Balance\": \"1000000000000\",\n            \"OwnerCount\": 0,\n            \"Sequence\": 7\n          },\n          \"PreviousTxnID\": \"47150C4F0FF2B33140ED221E424B2F685EF853E6E000837FBAB71DB1AD9018C9\",\n          \"PreviousTxnLgrSeq\": 7\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tesSUCCESS\"\n  },\n  \"hash\": \"3119491F7965C0048D7FEF0C9D177307A974B2764662082F405A5D8F2B4AEEB6\",\n  \"ledger_index\": 8,\n  \"date\": 1695751681000\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/DefaultSimple.tsx",
    "content": "import { isValidClassicAddress } from 'ripple-address-codec'\nimport { formatAmount } from '../../../../rippled/lib/txSummary/formatAmount'\nimport { Account } from '../Account'\nimport { Amount } from '../Amount'\nimport Currency from '../Currency'\nimport { SimpleGroup } from './SimpleGroup'\nimport { SimpleRow } from './SimpleRow'\nimport { TransactionSimpleProps } from './types'\n\nconst DEFAULT_TX_ELEMENTS = [\n  'Account',\n  'EmitDetails',\n  'Fee',\n  'FirstLedgerSequence',\n  'Flags',\n  'HookParameters',\n  'LastLedgerSequence',\n  'Memos',\n  'Signers',\n  'NetworkID',\n  'Sequence',\n  'SigningPubKey',\n  'TransactionType',\n  'TxnSignature',\n  'ctid',\n  'date',\n  'warnings',\n]\n\nconst displayKey = (key: string) => key.replace(/([a-z])([A-Z])/g, '$1 $2')\n\nconst isCurrency = (value: any) =>\n  typeof value === 'object' &&\n  Object.keys(value).length <= 2 &&\n  (value.issuer == null || typeof value.issuer === 'string') &&\n  typeof value.currency === 'string'\n\nconst isAmount = (amount: any, key: any = null) =>\n  key === 'Amount' ||\n  (typeof amount === 'object' &&\n    Object.keys(amount).length === 3 &&\n    typeof amount.issuer === 'string' &&\n    typeof amount.currency === 'string' &&\n    typeof amount.value === 'string')\n\nconst processValue = (value: any) => {\n  if (typeof value === 'string') {\n    if (isValidClassicAddress(value)) {\n      return <Account account={value} />\n    }\n    if (value.length > 300) {\n      return `${value.substring(0, 300)}...`\n    }\n    if (value === '') {\n      return <em>{'<empty>'}</em>\n    }\n    if (typeof value === 'object') {\n      return JSON.stringify(value)\n    }\n    return value\n  }\n\n  if (Array.isArray(value)) {\n    return value.map((childValue) => {\n      if (\n        typeof childValue === 'object' &&\n        Object.keys(childValue).length === 1\n      ) {\n        const childKey = Object.keys(childValue)[0]\n        const processed = processValue(childValue[childKey])\n        return <div key={JSON.stringify(childValue)}>{processed}</div>\n      }\n      const processed = processValue(childValue)\n      return <div key={JSON.stringify(processed)}>{processed}</div>\n    })\n  }\n\n  if (typeof value === 'object') {\n    return (\n      <div className=\"subgroup\">\n        {Object.entries(value).map(([childKey, childValue]) => (\n          <div key={childKey} data-testid={childKey}>\n            {`${childKey}: `}\n            {processValue(childValue)}\n          </div>\n        ))}\n      </div>\n    )\n  }\n\n  return JSON.stringify(value)\n}\n\nconst getRowNested = (key: any, value: any, uniqueKey: string = '') => {\n  if (key === 'Amount') {\n    return (\n      <SimpleRow\n        key={`${key}${uniqueKey}`}\n        label={displayKey(key)}\n        data-testid={key}\n      >\n        <Amount value={formatAmount(value)} />\n      </SimpleRow>\n    )\n  }\n\n  if (isCurrency(value)) {\n    return (\n      <SimpleRow\n        key={`${key}${uniqueKey}`}\n        label={displayKey(key)}\n        data-testid={key}\n      >\n        <Currency currency={value.currency} issuer={value.issuer} />\n      </SimpleRow>\n    )\n  }\n\n  if (isAmount(value, key)) {\n    return (\n      <SimpleRow\n        key={`${key}${uniqueKey}`}\n        label={displayKey(key)}\n        data-testid={key}\n      >\n        <Amount value={formatAmount(value)} />\n      </SimpleRow>\n    )\n  }\n  return (\n    <SimpleRow\n      key={`${key}${uniqueKey}`}\n      label={displayKey(key)}\n      data-testid={key}\n    >\n      {processValue(value)}\n    </SimpleRow>\n  )\n}\n\nconst getRow = (key: any, value: any) => {\n  if (Array.isArray(value)) {\n    return (\n      <div key={key}>\n        {value.map((innerValue, index) => {\n          if (\n            typeof innerValue === 'object' &&\n            Object.keys(innerValue).length === 1\n          ) {\n            const innerKey = Object.keys(innerValue)[0]\n            return (\n              <SimpleGroup\n                // eslint-disable-next-line react/no-array-index-key -- okay here\n                key={`group_${innerKey}_${index}`}\n                title={displayKey(innerKey)}\n                data-testid={key}\n              >\n                {Object.entries(innerValue[innerKey]).map(\n                  ([childKey, childValue], index2) =>\n                    getRowNested(childKey, childValue, index2.toString()),\n                )}\n              </SimpleGroup>\n            )\n          }\n          return getRowNested(index.toString(), innerValue, index.toString())\n        })}\n      </div>\n    )\n  }\n\n  if (\n    typeof value === 'object' &&\n    !isCurrency(value) &&\n    !isAmount(value, key)\n  ) {\n    return (\n      <SimpleGroup key={key} title={displayKey(key)} data-testid={key}>\n        {Object.entries(value).map(([childKey, childValue], index) =>\n          getRowNested(childKey, childValue, index.toString()),\n        )}\n      </SimpleGroup>\n    )\n  }\n\n  return getRowNested(key, value)\n}\n\nexport const DefaultSimple = ({ data }: TransactionSimpleProps) => {\n  const uniqueData = Object.fromEntries(\n    Object.entries(data.instructions).filter(\n      ([key, value]) => !DEFAULT_TX_ELEMENTS.includes(key) && value != null,\n    ),\n  )\n\n  return (\n    <>{Object.entries(uniqueData).map(([key, value]) => getRow(key, value))}</>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/DelegateSet/Description.tsx",
    "content": "import { Trans } from 'react-i18next'\nimport { TransactionDescriptionProps } from '../types'\nimport { DelegateSet } from './types'\nimport { Account } from '../../Account'\n\nexport const Description = ({\n  data,\n}: TransactionDescriptionProps<DelegateSet>) => {\n  const { tx } = data\n  const {\n    Account: account,\n    Authorize: authorize,\n    Permissions: permissions,\n  } = tx\n  return (\n    <Trans\n      i18nKey=\"account_delegates_to\"\n      components={{\n        Account: <Account account={account} />,\n        Permissions: (\n          <span className=\"flag\">\n            {permissions\n              .map((permission) => permission.Permission.PermissionValue)\n              .join(', ')}\n          </span>\n        ),\n        Authorize: <Account account={authorize} />,\n      }}\n    />\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/DelegateSet/Simple.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { TransactionSimpleComponent, TransactionSimpleProps } from '../types'\nimport { DelegateSet } from './types'\nimport { SimpleRow } from '../SimpleRow'\nimport { Account } from '../../Account'\n\nexport const Simple: TransactionSimpleComponent = (\n  props: TransactionSimpleProps<DelegateSet>,\n) => {\n  const { t } = useTranslation()\n  const { data } = props\n  const { Authorize, Permissions } = data.instructions\n  return (\n    <>\n      <SimpleRow label={t('authorize')} data-testid=\"authorize\">\n        <Account account={Authorize} />\n      </SimpleRow>\n      <SimpleRow\n        label={t('permissions')}\n        data-testid=\"permissions\"\n        className=\"flag\"\n      >\n        {Permissions.map((permission) => (\n          <div>{permission.Permission.PermissionValue}</div>\n        ))}\n      </SimpleRow>\n    </>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/DelegateSet/TableDetail.tsx",
    "content": "import { useTranslation, Trans } from 'react-i18next'\nimport { TransactionTableDetailProps } from '../types'\nimport { DelegateSet } from './types'\nimport { Account } from '../../Account'\n\nexport const TableDetail = ({\n  instructions,\n}: TransactionTableDetailProps<DelegateSet>) => {\n  const { t } = useTranslation()\n  const { Authorize, Permissions } = instructions\n  return (\n    <div className=\"delegate-set\">\n      <Trans\n        i18nKey=\"delegate_to\"\n        components={{\n          DelegateLabel: <span className=\"label\">{t('delegate')}</span>,\n          Permissions: (\n            <span className=\"flag\">\n              {Permissions.map(\n                (permission) => permission.Permission.PermissionValue,\n              ).join(', ')}\n            </span>\n          ),\n          Account: <Account account={Authorize} />,\n        }}\n      />\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/DelegateSet/index.ts",
    "content": "import {\n  TransactionAction,\n  TransactionCategory,\n  TransactionMapping,\n} from '../types'\nimport { Description } from './Description'\n\nimport { Simple } from './Simple'\nimport { TableDetail } from './TableDetail'\n\nexport const DelegateSetTransaction: TransactionMapping = {\n  Simple,\n  TableDetail,\n  Description,\n  action: TransactionAction.CREATE,\n  category: TransactionCategory.ACCOUNT,\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/DelegateSet/test/DelegateSetDescription.test.tsx",
    "content": "import i18n from '../../../../../../i18n/testConfigEnglish'\nimport { createDescriptionRenderFactory } from '../../test'\nimport { Description } from '../Description'\nimport mockDelegateSet from './mock_data/DelegateSet.json'\n\nconst renderComponent = createDescriptionRenderFactory(Description, i18n)\n\ndescribe('DelegateSet: Description', () => {\n  it('renders', () => {\n    const { container, unmount } = renderComponent(mockDelegateSet)\n    expect(container).toHaveTextContent(\n      'rfFLs8ZknoJKHCw7MtJKcs8GL81dqoDGRz delegates Payment, AccountDomainSet permissions to rNRfqQc9b9ehXJJYVR6NqPPwrS26tWeB6N',\n    )\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/DelegateSet/test/DelegateSetSimple.test.tsx",
    "content": "import { expectSimpleRowText, createSimpleRenderFactory } from '../../test'\nimport { Simple } from '../Simple'\nimport mockDelegateSet from './mock_data/DelegateSet.json'\n\nconst renderComponent = createSimpleRenderFactory(Simple)\n\ndescribe('DelegateSet: Simple', () => {\n  it('renders', () => {\n    const { container, unmount } = renderComponent(mockDelegateSet)\n    expectSimpleRowText(\n      container,\n      'authorize',\n      'rNRfqQc9b9ehXJJYVR6NqPPwrS26tWeB6N',\n    )\n    expectSimpleRowText(container, 'permissions', 'PaymentAccountDomainSet')\n\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/DelegateSet/test/DelegateSetTableDetail.test.tsx",
    "content": "import i18n from '../../../../../../i18n/testConfigEnglish'\nimport { createTableDetailRenderFactory } from '../../test'\nimport { TableDetail } from '../TableDetail'\nimport mockDelegateSet from './mock_data/DelegateSet.json'\n\nconst renderComponent = createTableDetailRenderFactory(TableDetail, i18n)\n\ndescribe('DelegateSetTableDetail', () => {\n  it('render DelegateSetTableDetail', () => {\n    const { container, unmount } = renderComponent(mockDelegateSet)\n    expect(container).toHaveTextContent(\n      'Delegate ' +\n        'Payment, AccountDomainSet permissions ' +\n        'to ' +\n        'rNRfqQc9b9ehXJJYVR6NqPPwrS26tWeB6N',\n    )\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/DelegateSet/test/mock_data/DelegateSet.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rfFLs8ZknoJKHCw7MtJKcs8GL81dqoDGRz\",\n    \"Authorize\": \"rNRfqQc9b9ehXJJYVR6NqPPwrS26tWeB6N\",\n    \"Fee\": \"1\",\n    \"Flags\": 0,\n    \"LastLedgerSequence\": 2947153,\n    \"Permissions\": [\n      {\n        \"Permission\": {\n          \"PermissionValue\": \"Payment\"\n        }\n      },\n      {\n        \"Permission\": {\n          \"PermissionValue\": \"AccountDomainSet\"\n        }\n      }\n    ],\n    \"Sequence\": 2947131,\n    \"SigningPubKey\": \"ED9031FEB8A3DF9EDF8F5DA6DA1756C8DE57AF0C3A35A517807DC549418736BB89\",\n    \"TransactionType\": \"DelegateSet\",\n    \"TxnSignature\": \"0F9B6CA42B177E6F44456FDF06CE1F38D0C7B98EB28C2E43B393EAB6932DBF61E6024E5EAED158A93329F2661B15B218B8DB4FB74EF1DFA58246CA1E77B32801\",\n    \"ctid\": \"C02CF83F00000002\",\n    \"date\": 1747765391000,\n    \"hash\": \"undefined\",\n    \"inLedger\": \"undefined\",\n    \"ledger_index\": \"undefined\",\n    \"meta\": \"undefined\",\n    \"validated\": \"undefined\",\n    \"metaData\": \"undefined\",\n    \"status\": \"undefined\"\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rfFLs8ZknoJKHCw7MtJKcs8GL81dqoDGRz\",\n            \"Balance\": \"99999999\",\n            \"Flags\": 0,\n            \"OwnerCount\": 1,\n            \"Sequence\": 2947132\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"186BA30C233AEABA324162B0F0C67EFE31CDED0EBDA824E1F55A2D3AB19FC461\",\n          \"PreviousFields\": {\n            \"Balance\": \"100000000\",\n            \"OwnerCount\": 0,\n            \"Sequence\": 2947131\n          },\n          \"PreviousTxnID\": \"AEA9640F6C23CAEF178090BF43032506845A6CA339EA43BA2ADE8E3688D1F874\",\n          \"PreviousTxnLgrSeq\": 2947131\n        }\n      },\n      {\n        \"CreatedNode\": {\n          \"LedgerEntryType\": \"Delegate\",\n          \"LedgerIndex\": \"756E9B60A214A46E3FCCD44776D5B578404E726E544EA54CF0C4900F303043A0\",\n          \"NewFields\": {\n            \"Account\": \"rfFLs8ZknoJKHCw7MtJKcs8GL81dqoDGRz\",\n            \"Authorize\": \"rNRfqQc9b9ehXJJYVR6NqPPwrS26tWeB6N\",\n            \"Permissions\": [\n              {\n                \"Permission\": {\n                  \"PermissionValue\": \"Payment\"\n                }\n              },\n              {\n                \"Permission\": {\n                  \"PermissionValue\": \"AccountDomainSet\"\n                }\n              }\n            ]\n          }\n        }\n      },\n      {\n        \"CreatedNode\": {\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"76D0EA7FD2D7EBE2C3952A777064E968686572E72B961DD8F2E84BF17EA18D59\",\n          \"NewFields\": {\n            \"Owner\": \"rfFLs8ZknoJKHCw7MtJKcs8GL81dqoDGRz\",\n            \"RootIndex\": \"76D0EA7FD2D7EBE2C3952A777064E968686572E72B961DD8F2E84BF17EA18D59\"\n          }\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tesSUCCESS\"\n  },\n  \"hash\": \"0E48E0E9F68F4DE642B439EFCF0A2BF4C2F79B528483CE1B7DCF20F531E613E8\",\n  \"ledger_index\": 2947135,\n  \"date\": 1747765391000\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/DelegateSet/types.ts",
    "content": "import { TransactionCommonFields } from '../types'\n\n// TODO: clean up when xrpl.js released with this feature.\nexport interface DelegateSet extends TransactionCommonFields {\n  Authorize: string\n  Permissions: Permission[]\n}\n\nexport interface Permission {\n  Permission: {\n    PermissionValue: string\n  }\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/DepositPreauth/Description.tsx",
    "content": "import { Trans, useTranslation } from 'react-i18next'\nimport { Account } from '../../Account'\nimport { TransactionDescriptionProps } from '../types'\nimport { DepositPreauth } from './types'\nimport { convertHexToString } from '../../../../../rippled/lib/utils'\nimport { parser } from './parser'\n\nexport const Description = ({\n  data,\n}: TransactionDescriptionProps<DepositPreauth>) => {\n  const { t } = useTranslation()\n  const tx = parser(data.tx)\n\n  if (tx.Authorize) {\n    return (\n      <div>\n        <Trans i18nKey=\"deposit_auth\">\n          It authorizes\n          <Account account={tx.Authorize} />\n          to send payments to the account\n        </Trans>\n      </div>\n    )\n  }\n\n  if (tx.Unauthorize) {\n    return (\n      <div>\n        <Trans i18nKey=\"deposit_unauth\">\n          It removes the authorization for\n          <Account account={tx.Unauthorize} />\n          to send payments to the account\n        </Trans>\n      </div>\n    )\n  }\n\n  if (tx.AuthorizeCredentials && tx.AuthorizeCredentials.length > 0) {\n    return (\n      <div>\n        <p>{t('deposit_auth_credentials')}</p>\n        <ul>\n          {tx.AuthorizeCredentials.map((cred) => (\n            <li key={`${cred.Issuer}-${cred.CredentialType}`}>\n              <strong>{convertHexToString(cred.CredentialType)}</strong> from{' '}\n              <Account account={cred.Issuer} />\n            </li>\n          ))}\n        </ul>\n      </div>\n    )\n  }\n\n  if (tx.UnauthorizeCredentials && tx.UnauthorizeCredentials.length > 0) {\n    return (\n      <div>\n        <p>{t('deposit_unauth_credentials')}</p>\n        <ul>\n          {tx.UnauthorizeCredentials.map((cred) => (\n            <li key={`${cred.Issuer}-${cred.CredentialType}`}>\n              <strong>{convertHexToString(cred.CredentialType)}</strong> from{' '}\n              <Account account={cred.Issuer} />\n            </li>\n          ))}\n        </ul>\n      </div>\n    )\n  }\n\n  return null\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/DepositPreauth/Simple.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { SimpleRow } from '../SimpleRow'\nimport { SimpleGroup } from '../SimpleGroup'\nimport { TransactionSimpleProps } from '../types'\nimport { DepositPreauth } from './types'\nimport { convertHexToString } from '../../../../../rippled/lib/utils'\n\nexport const Simple = ({ data }: TransactionSimpleProps<DepositPreauth>) => {\n  const { t } = useTranslation()\n  const {\n    Authorize,\n    Unauthorize,\n    AuthorizeCredentials,\n    UnauthorizeCredentials,\n  } = data.instructions\n\n  if (Authorize) {\n    return (\n      <SimpleRow label={t('authorize')} data-testid=\"authorize\">\n        {Authorize}\n      </SimpleRow>\n    )\n  }\n\n  if (Unauthorize) {\n    return (\n      <SimpleRow label={t('unauthorize')} data-testid=\"unauthorize\">\n        {Unauthorize}\n      </SimpleRow>\n    )\n  }\n\n  if (AuthorizeCredentials && AuthorizeCredentials.length > 0) {\n    return (\n      <>\n        <div className=\"groups-title\">{`${t('authorize')} ${t('accepted_credentials')}`}</div>\n        {AuthorizeCredentials.map((cred, index) => (\n          <SimpleGroup key={`${cred.Issuer}-${cred.CredentialType}`}>\n            <SimpleRow\n              label={t('credential_issuer')}\n              data-testid={`credential-issuer-${index}`}\n            >\n              {cred.Issuer}\n            </SimpleRow>\n            <SimpleRow\n              label={t('credential_type')}\n              data-testid={`credential-type-${index}`}\n            >\n              {convertHexToString(cred.CredentialType)}\n            </SimpleRow>\n          </SimpleGroup>\n        ))}\n      </>\n    )\n  }\n\n  if (UnauthorizeCredentials && UnauthorizeCredentials.length > 0) {\n    return (\n      <>\n        <div className=\"groups-title\">{`${t('unauthorize')} ${t('accepted_credentials')}`}</div>\n        {UnauthorizeCredentials.map((cred, index) => (\n          <SimpleGroup key={`${cred.Issuer}-${cred.CredentialType}`}>\n            <SimpleRow\n              label={t('credential_issuer')}\n              data-testid={`credential-issuer-${index}`}\n            >\n              {cred.Issuer}\n            </SimpleRow>\n            <SimpleRow\n              label={t('credential_type')}\n              data-testid={`credential-type-${index}`}\n            >\n              {convertHexToString(cred.CredentialType)}\n            </SimpleRow>\n          </SimpleGroup>\n        ))}\n      </>\n    )\n  }\n\n  return null\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/DepositPreauth/TableDetail.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { TransactionTableDetailProps } from '../types'\nimport { DepositPreauth } from './types'\nimport { Account } from '../../Account'\nimport { convertHexToString } from '../../../../../rippled/lib/utils'\n\nexport const TableDetail = ({\n  instructions,\n}: TransactionTableDetailProps<DepositPreauth>) => {\n  const { t } = useTranslation()\n  const {\n    Authorize,\n    Unauthorize,\n    AuthorizeCredentials,\n    UnauthorizeCredentials,\n  } = instructions\n\n  if (Authorize) {\n    return (\n      <div className=\"deposit-preauth\">\n        <span className=\"label\">{t('authorize')}</span>\n        <Account account={Authorize} />\n      </div>\n    )\n  }\n\n  if (Unauthorize) {\n    return (\n      <div className=\"deposit-preauth\">\n        <span className=\"label\">{t('unauthorize')}</span>\n        <Account account={Unauthorize} />\n      </div>\n    )\n  }\n\n  if (AuthorizeCredentials && AuthorizeCredentials.length > 0) {\n    return (\n      <div className=\"deposit-preauth\">\n        <span className=\"label\">\n          {t('authorize')} {t('accepted_credentials')}\n        </span>\n        <div className=\"credentials\">\n          {AuthorizeCredentials.map((cred) => (\n            <div\n              key={`${cred.Issuer}-${cred.CredentialType}`}\n              className=\"credential\"\n            >\n              <span className=\"credential-type\">\n                {convertHexToString(cred.CredentialType)}\n              </span>\n              <span className=\"credential-issuer\">\n                <Account account={cred.Issuer} />\n              </span>\n            </div>\n          ))}\n        </div>\n      </div>\n    )\n  }\n\n  if (UnauthorizeCredentials && UnauthorizeCredentials.length > 0) {\n    return (\n      <div className=\"deposit-preauth\">\n        <span className=\"label\">\n          {t('unauthorize')} {t('accepted_credentials')}\n        </span>\n        <div className=\"credentials\">\n          {UnauthorizeCredentials.map((cred) => (\n            <div\n              key={`${cred.Issuer}-${cred.CredentialType}`}\n              className=\"credential\"\n            >\n              <span className=\"credential-type\">\n                {convertHexToString(cred.CredentialType)}\n              </span>\n              <span className=\"credential-issuer\">\n                <Account account={cred.Issuer} />\n              </span>\n            </div>\n          ))}\n        </div>\n      </div>\n    )\n  }\n\n  return null\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/DepositPreauth/index.ts",
    "content": "import {\n  TransactionAction,\n  TransactionCategory,\n  TransactionMapping,\n} from '../types'\n\nimport { Simple } from './Simple'\nimport { Description } from './Description'\nimport { TableDetail } from './TableDetail'\nimport { parser } from './parser'\n\nexport const DepositPreauthTransaction: TransactionMapping = {\n  Description,\n  Simple,\n  TableDetail,\n  parser,\n  action: TransactionAction.MODIFY,\n  category: TransactionCategory.ACCOUNT,\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/DepositPreauth/parser.ts",
    "content": "import { CredentialAuth, DepositPreauth } from './types'\n\n// Transform the nested XRPL credential structure to flat CredentialAuth objects\nconst transformCredentials = (credentials: any[]): CredentialAuth[] =>\n  credentials.map((item) => {\n    // Check if it's nested (has Credential wrapper) or already flat\n    if (item.Credential) {\n      return {\n        Issuer: item.Credential.Issuer,\n        CredentialType: item.Credential.CredentialType,\n      }\n    }\n    // Already flat, return as-is\n    return {\n      Issuer: item.Issuer,\n      CredentialType: item.CredentialType,\n    }\n  })\n\nexport const parser = (tx: any): DepositPreauth => {\n  // Handle AuthorizeCredentials (both nested and flat structures)\n  if (tx.AuthorizeCredentials) {\n    const { Authorize, Unauthorize, ...rest } = tx\n    const result = {\n      ...rest,\n      AuthorizeCredentials: transformCredentials(tx.AuthorizeCredentials),\n    } as DepositPreauth\n    return result\n  }\n\n  // Handle UnauthorizeCredentials (both nested and flat structures)\n  if (tx.UnauthorizeCredentials) {\n    const { Authorize, Unauthorize, ...rest } = tx\n    const result = {\n      ...rest,\n      UnauthorizeCredentials: transformCredentials(tx.UnauthorizeCredentials),\n    } as DepositPreauth\n    return result\n  }\n\n  // For Authorize/Unauthorize fields (string-based), pass through unchanged\n  return tx as DepositPreauth\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/DepositPreauth/test/DepositPreauthDescription.test.tsx",
    "content": "import i18n from '../../../../../../i18n/testConfigEnglish'\n\nimport mockDepositPreaut from './mock_data/DepositPreauth.json'\nimport mockDepositPreauthUnauthorize from './mock_data/DepositPreauthUnauthorize.json'\nimport mockDepositPreauthAuthorizeCredentials from './mock_data/DepositPreauthAuthorizeCredentials.json'\nimport mockDepositPreauthUnauthorizeCredentials from './mock_data/DepositPreauthUnauthorizeCredentials.json'\n\nimport { Description } from '../Description'\nimport { createDescriptionRenderFactory } from '../../test'\n\nconst renderComponent = createDescriptionRenderFactory(Description, i18n)\n\ndescribe('DepositPreauth: Description', () => {\n  it('renders description for authorize', () => {\n    const { container, unmount } = renderComponent(mockDepositPreaut)\n    expect(container.innerHTML).toBe(\n      `<div>It authorizes <a data-testid=\"account\" title=\"rDJFnv5sEfp42LMFiX3mVQKczpFTdxYDzM\" class=\"account\" href=\"/accounts/rDJFnv5sEfp42LMFiX3mVQKczpFTdxYDzM\" data-discover=\"true\">rDJFnv5sEfp42LMFiX3mVQKczpFTdxYDzM</a> to send payments to this account</div>`,\n    )\n    unmount()\n  })\n\n  it('renders description for unauthorize', () => {\n    const { container, unmount } = renderComponent(\n      mockDepositPreauthUnauthorize,\n    )\n    expect(container.innerHTML).toBe(\n      `<div>It removes the authorization for <a data-testid=\"account\" title=\"rDJFnv5sEfp42LMFiX3mVQKczpFTdxYDzM\" class=\"account\" href=\"/accounts/rDJFnv5sEfp42LMFiX3mVQKczpFTdxYDzM\" data-discover=\"true\">rDJFnv5sEfp42LMFiX3mVQKczpFTdxYDzM</a> to send payments to this account</div>`,\n    )\n    unmount()\n  })\n\n  it('renders description for authorize credentials', () => {\n    const { container, unmount } = renderComponent(\n      mockDepositPreauthAuthorizeCredentials,\n    )\n    const html = container.innerHTML\n    expect(html).toContain('It authorizes the following credentials:')\n    expect(html).toContain('KYC')\n    expect(html).toContain('rISABEL')\n    expect(html).toContain('ID')\n    expect(html).toContain('rTRUSTED')\n    unmount()\n  })\n\n  it('renders description for unauthorize credentials', () => {\n    const { container, unmount } = renderComponent(\n      mockDepositPreauthUnauthorizeCredentials,\n    )\n    const html = container.innerHTML\n    expect(html).toContain(\n      'It removes the authorization for the following credentials:',\n    )\n    expect(html).toContain('KYC')\n    expect(html).toContain('rISABEL')\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/DepositPreauth/test/DepositPreauthSimple.test.tsx",
    "content": "import {\n  createSimpleRenderFactory,\n  expectSimpleRowText,\n  expectSimpleRowLabel,\n} from '../../test'\nimport { Simple } from '../Simple'\nimport mockDepositPreauth from './mock_data/DepositPreauth.json'\nimport mockDepositPreauthUnauthorize from './mock_data/DepositPreauthUnauthorize.json'\nimport mockDepositPreauthAuthorizeCredentials from './mock_data/DepositPreauthAuthorizeCredentials.json'\nimport mockDepositPreauthUnauthorizeCredentials from './mock_data/DepositPreauthUnauthorizeCredentials.json'\n\nconst renderComponent = createSimpleRenderFactory(Simple)\n\ndescribe('DepositPreauth: Simple', () => {\n  it('renders authorized', () => {\n    const { container, unmount } = renderComponent(mockDepositPreauth)\n    expectSimpleRowText(\n      container,\n      'authorize',\n      'rDJFnv5sEfp42LMFiX3mVQKczpFTdxYDzM',\n    )\n    unmount()\n  })\n\n  it('renders unauthorized', () => {\n    const { container, unmount } = renderComponent(\n      mockDepositPreauthUnauthorize,\n    )\n    expectSimpleRowText(\n      container,\n      'unauthorize',\n      'rDJFnv5sEfp42LMFiX3mVQKczpFTdxYDzM',\n    )\n    unmount()\n  })\n\n  it('renders authorize credentials', () => {\n    const { container, unmount } = renderComponent(\n      mockDepositPreauthAuthorizeCredentials,\n    )\n\n    // Check that SimpleGroup is rendered\n    expect(container.querySelectorAll('.group')).toHaveLength(2)\n    expect(container.querySelectorAll('.groups-title')).toHaveLength(1)\n\n    // Check first credential\n    expectSimpleRowText(container, 'credential-issuer-0', 'rISABEL......')\n    expectSimpleRowLabel(container, 'credential-issuer-0', 'credential_issuer')\n    expectSimpleRowText(container, 'credential-type-0', 'KYC') // 4B5943 hex decodes to \"KYC\"\n    expectSimpleRowLabel(container, 'credential-type-0', 'credential_type')\n\n    // Check second credential\n    expectSimpleRowText(container, 'credential-issuer-1', 'rTRUSTED.....')\n    expectSimpleRowLabel(container, 'credential-issuer-1', 'credential_issuer')\n    expectSimpleRowText(container, 'credential-type-1', 'ID') // 4944 hex decodes to \"ID\"\n    expectSimpleRowLabel(container, 'credential-type-1', 'credential_type')\n\n    unmount()\n  })\n\n  it('renders unauthorize credentials', () => {\n    const { container, unmount } = renderComponent(\n      mockDepositPreauthUnauthorizeCredentials,\n    )\n\n    // Check that SimpleGroup is rendered\n    expect(container.querySelectorAll('.group')).toHaveLength(1)\n    expect(container.querySelectorAll('.groups-title')).toHaveLength(1)\n\n    expectSimpleRowText(container, 'credential-issuer-0', 'rISABEL......')\n    expectSimpleRowLabel(container, 'credential-issuer-0', 'credential_issuer')\n    expectSimpleRowText(container, 'credential-type-0', 'KYC') // 4B5943 hex decodes to \"KYC\"\n    expectSimpleRowLabel(container, 'credential-type-0', 'credential_type')\n\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/DepositPreauth/test/DepositPreauthTableDetail.test.tsx",
    "content": "import { createTableDetailRenderFactory } from '../../test'\nimport { TableDetail } from '../TableDetail'\nimport mockDepositPreauth from './mock_data/DepositPreauth.json'\nimport mockDepositPreauthAuthorizeCredentials from './mock_data/DepositPreauthAuthorizeCredentials.json'\nimport mockDepositPreauthUnauthorize from './mock_data/DepositPreauthUnauthorize.json'\nimport mockDepositPreauthUnauthorizeCredentials from './mock_data/DepositPreauthUnauthorizeCredentials.json'\nimport i18n from '../../../../../../i18n/testConfigEnglish'\n\nconst renderComponent = createTableDetailRenderFactory(TableDetail, i18n)\n\ndescribe('DepositPreauthTableDetail', () => {\n  it('renders DepositPreauth with Authorize', () => {\n    const { container, unmount } = renderComponent(mockDepositPreauth)\n    expect(container.querySelector('.deposit-preauth')).toBeInTheDocument()\n    expect(\n      container.querySelector('.deposit-preauth .label'),\n    ).toHaveTextContent('authorize')\n    expect(\n      container.querySelector('[data-testid=\"account\"]'),\n    ).toBeInTheDocument()\n    expect(\n      container.querySelector('[data-testid=\"account\"]'),\n    ).toHaveTextContent('rDJFnv5sEfp42LMFiX3mVQKczpFTdxYDzM')\n    unmount()\n  })\n\n  it('renders DepositPreauth with Unauthorize', () => {\n    const { container, unmount } = renderComponent(\n      mockDepositPreauthUnauthorize,\n    )\n    expect(container.querySelector('.deposit-preauth')).toBeInTheDocument()\n    expect(\n      container.querySelector('.deposit-preauth .label'),\n    ).toHaveTextContent('unauthorize')\n    expect(\n      container.querySelector('[data-testid=\"account\"]'),\n    ).toBeInTheDocument()\n    expect(\n      container.querySelector('[data-testid=\"account\"]'),\n    ).toHaveTextContent('rDJFnv5sEfp42LMFiX3mVQKczpFTdxYDzM')\n    unmount()\n  })\n\n  it('renders DepositPreauth with AuthorizeCredentials', () => {\n    const { container, unmount } = renderComponent(\n      mockDepositPreauthAuthorizeCredentials,\n    )\n    expect(container.querySelector('.deposit-preauth')).toBeInTheDocument()\n    expect(\n      container.querySelector('.deposit-preauth .label'),\n    ).toHaveTextContent('authorize Accepted Credentials')\n    expect(container.querySelector('.credentials')).toBeInTheDocument()\n    expect(container.querySelectorAll('.credential')).toHaveLength(2)\n    const credentialTypes = container.querySelectorAll('.credential-type')\n    expect(credentialTypes[0]).toHaveTextContent('KYC')\n    expect(credentialTypes[1]).toHaveTextContent('ID')\n    unmount()\n  })\n\n  it('renders DepositPreauth with UnauthorizeCredentials', () => {\n    const { container, unmount } = renderComponent(\n      mockDepositPreauthUnauthorizeCredentials,\n    )\n    expect(container.querySelector('.deposit-preauth')).toBeInTheDocument()\n    expect(\n      container.querySelector('.deposit-preauth .label'),\n    ).toHaveTextContent('unauthorize Accepted Credentials')\n    expect(container.querySelector('.credentials')).toBeInTheDocument()\n    expect(container.querySelectorAll('.credential')).toHaveLength(1)\n    expect(container.querySelector('.credential-type')).toHaveTextContent('KYC')\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/DepositPreauth/test/mock_data/DepositPreauth.json",
    "content": "{\n  \"hash\": \"B5D94C027C846171B2F5D4C2D126E88580BF369986A155C1890352F5BC4D7AF9\",\n  \"ledger_index\": 37360499,\n  \"date\": \"2018-03-20T12:48:10+00:00\",\n  \"tx\": {\n    \"Account\": \"rDd6FpNbeY2CrQajSmP178BmNGusmQiYMM\",\n    \"Authorize\": \"rDJFnv5sEfp42LMFiX3mVQKczpFTdxYDzM\",\n    \"Fee\": \"10\",\n    \"Flags\": 2147483648,\n    \"Sequence\": 65,\n    \"SigningPubKey\": \"03EB1E2603E7571D6144684996C10DA75063D6E2F3B3FDABE38B857C1BE9578A55\",\n    \"TransactionType\": \"DepositPreauth\",\n    \"TxnSignature\": \"3045022100B0A5672E3E09FA3AF8CF1DCC1D8C881F58B39212D6FDC42CCF30E5400D0EFD9F02202DDD9517D9409D1D9A529B8AEA7DE13AE4CDF96BB6D18FA0D9732DBFC887348D\"\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rDd6FpNbeY2CrQajSmP178BmNGusmQiYMM\",\n            \"Balance\": \"9827999174\",\n            \"Flags\": 0,\n            \"OwnerCount\": 8,\n            \"Sequence\": 66\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"146AAAF7A266D8A92DFFEAB1A71B6523534F27820873F4E213014B23398867D2\",\n          \"PreviousFields\": {\n            \"Balance\": \"9827999184\",\n            \"OwnerCount\": 7,\n            \"Sequence\": 65\n          },\n          \"PreviousTxnID\": \"8107CEE99D556326ACD4662CA10A24550240D9F933E55435A0C0DB3B06DD343E\",\n          \"PreviousTxnLgrSeq\": 11427673\n        }\n      },\n      {\n        \"CreatedNode\": {\n          \"LedgerEntryType\": \"DepositPreauth\",\n          \"LedgerIndex\": \"C2D0317AD266B93CB3B36AEB0ABB673B0AFFAB134809CCACFD7158F539603C3A\",\n          \"NewFields\": {\n            \"Account\": \"rDd6FpNbeY2CrQajSmP178BmNGusmQiYMM\",\n            \"Authorize\": \"rDJFnv5sEfp42LMFiX3mVQKczpFTdxYDzM\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rDd6FpNbeY2CrQajSmP178BmNGusmQiYMM\",\n            \"RootIndex\": \"CD08416851CA53E9649408118A4908E01E43436ED950886D1B1E66F4B68B82EC\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"CD08416851CA53E9649408118A4908E01E43436ED950886D1B1E66F4B68B82EC\"\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tesSUCCESS\"\n  }\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/DepositPreauth/test/mock_data/DepositPreauthAuthorizeCredentials.json",
    "content": "{\n  \"hash\": \"B5D94C027C846171B2F5D4C2D126E88580BF369986A155C1890352F5BC4D7AF9\",\n  \"ledger_index\": 37360499,\n  \"date\": \"2018-03-20T12:48:10+00:00\",\n  \"tx\": {\n    \"Account\": \"rDd6FpNbeY2CrQajSmP178BmNGusmQiYMM\",\n    \"AuthorizeCredentials\": [\n      {\n        \"Credential\": {\n          \"Issuer\": \"rISABEL......\",\n          \"CredentialType\": \"4B5943\"\n        }\n      },\n      {\n        \"Credential\": {\n          \"Issuer\": \"rTRUSTED.....\",\n          \"CredentialType\": \"4944\"\n        }\n      }\n    ],\n    \"Fee\": \"10\",\n    \"Flags\": 2147483648,\n    \"Sequence\": 65,\n    \"SigningPubKey\": \"03EB1E2603E7571D6144684996C10DA75063D6E2F3B3FDABE38B857C1BE9578A55\",\n    \"TransactionType\": \"DepositPreauth\",\n    \"TxnSignature\": \"3045022100B0A5672E3E09FA3AF8CF1DCC1D8C881F58B39212D6FDC42CCF30E5400D0EFD9F02202DDD9517D9409D1D9A529B8AEA7DE13AE4CDF96BB6D18FA0D9732DBFC887348D\"\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rDd6FpNbeY2CrQajSmP178BmNGusmQiYMM\",\n            \"Balance\": \"9827999174\",\n            \"Flags\": 0,\n            \"OwnerCount\": 8,\n            \"Sequence\": 66\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"146AAAF7A266D8A92DFFEAB1A71B6523534F27820873F4E213014B23398867D2\",\n          \"PreviousFields\": {\n            \"Balance\": \"9827999184\",\n            \"OwnerCount\": 7,\n            \"Sequence\": 65\n          },\n          \"PreviousTxnID\": \"8107CEE99D556326ACD4662CA10A24550240D9F933E55435A0C0DB3B06DD343E\",\n          \"PreviousTxnLgrSeq\": 11427673\n        }\n      },\n      {\n        \"CreatedNode\": {\n          \"LedgerEntryType\": \"DepositPreauth\",\n          \"LedgerIndex\": \"C2D0317AD266B93CB3B36AEB0ABB673B0AFFAB134809CCACFD7158F539603C3A\",\n          \"NewFields\": {\n            \"Account\": \"rDd6FpNbeY2CrQajSmP178BmNGusmQiYMM\",\n            \"AuthorizeCredentials\": [\n              {\n                \"Credential\": {\n                  \"Issuer\": \"rISABEL......\",\n                  \"CredentialType\": \"4B5943\"\n                }\n              },\n              {\n                \"Credential\": {\n                  \"Issuer\": \"rTRUSTED.....\",\n                  \"CredentialType\": \"4944\"\n                }\n              }\n            ]\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rDd6FpNbeY2CrQajSmP178BmNGusmQiYMM\",\n            \"RootIndex\": \"CD08416851CA53E9649408118A4908E01E43436ED950886D1B1E66F4B68B82EC\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"CD08416851CA53E9649408118A4908E01E43436ED950886D1B1E66F4B68B82EC\"\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tesSUCCESS\"\n  }\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/DepositPreauth/test/mock_data/DepositPreauthUnauthorize.json",
    "content": "{\n  \"hash\": \"B5D94C027C846171B2F5D4C2D126E88580BF369986A155C1890352F5BC4D7AF9\",\n  \"ledger_index\": 37360499,\n  \"date\": \"2018-03-20T12:48:10+00:00\",\n  \"tx\": {\n    \"Account\": \"rDd6FpNbeY2CrQajSmP178BmNGusmQiYMM\",\n    \"Unauthorize\": \"rDJFnv5sEfp42LMFiX3mVQKczpFTdxYDzM\",\n    \"Fee\": \"10\",\n    \"Flags\": 2147483648,\n    \"Sequence\": 65,\n    \"SigningPubKey\": \"03EB1E2603E7571D6144684996C10DA75063D6E2F3B3FDABE38B857C1BE9578A55\",\n    \"TransactionType\": \"DepositPreauth\",\n    \"TxnSignature\": \"3045022100B0A5672E3E09FA3AF8CF1DCC1D8C881F58B39212D6FDC42CCF30E5400D0EFD9F02202DDD9517D9409D1D9A529B8AEA7DE13AE4CDF96BB6D18FA0D9732DBFC887348D\"\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rDd6FpNbeY2CrQajSmP178BmNGusmQiYMM\",\n            \"Balance\": \"9827999174\",\n            \"Flags\": 0,\n            \"OwnerCount\": 8,\n            \"Sequence\": 66\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"146AAAF7A266D8A92DFFEAB1A71B6523534F27820873F4E213014B23398867D2\",\n          \"PreviousFields\": {\n            \"Balance\": \"9827999184\",\n            \"OwnerCount\": 7,\n            \"Sequence\": 65\n          },\n          \"PreviousTxnID\": \"8107CEE99D556326ACD4662CA10A24550240D9F933E55435A0C0DB3B06DD343E\",\n          \"PreviousTxnLgrSeq\": 11427673\n        }\n      },\n      {\n        \"CreatedNode\": {\n          \"LedgerEntryType\": \"DepositPreauth\",\n          \"LedgerIndex\": \"C2D0317AD266B93CB3B36AEB0ABB673B0AFFAB134809CCACFD7158F539603C3A\",\n          \"NewFields\": {\n            \"Account\": \"rDd6FpNbeY2CrQajSmP178BmNGusmQiYMM\",\n            \"Authorize\": \"rDJFnv5sEfp42LMFiX3mVQKczpFTdxYDzM\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rDd6FpNbeY2CrQajSmP178BmNGusmQiYMM\",\n            \"RootIndex\": \"CD08416851CA53E9649408118A4908E01E43436ED950886D1B1E66F4B68B82EC\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"CD08416851CA53E9649408118A4908E01E43436ED950886D1B1E66F4B68B82EC\"\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tesSUCCESS\"\n  }\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/DepositPreauth/test/mock_data/DepositPreauthUnauthorizeCredentials.json",
    "content": "{\n  \"hash\": \"B5D94C027C846171B2F5D4C2D126E88580BF369986A155C1890352F5BC4D7AF9\",\n  \"ledger_index\": 37360499,\n  \"date\": \"2018-03-20T12:48:10+00:00\",\n  \"tx\": {\n    \"Account\": \"rDd6FpNbeY2CrQajSmP178BmNGusmQiYMM\",\n    \"UnauthorizeCredentials\": [\n      {\n        \"Credential\": {\n          \"Issuer\": \"rISABEL......\",\n          \"CredentialType\": \"4B5943\"\n        }\n      }\n    ],\n    \"Fee\": \"10\",\n    \"Flags\": 2147483648,\n    \"Sequence\": 65,\n    \"SigningPubKey\": \"03EB1E2603E7571D6144684996C10DA75063D6E2F3B3FDABE38B857C1BE9578A55\",\n    \"TransactionType\": \"DepositPreauth\",\n    \"TxnSignature\": \"3045022100B0A5672E3E09FA3AF8CF1DCC1D8C881F58B39212D6FDC42CCF30E5400D0EFD9F02202DDD9517D9409D1D9A529B8AEA7DE13AE4CDF96BB6D18FA0D9732DBFC887348D\"\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rDd6FpNbeY2CrQajSmP178BmNGusmQiYMM\",\n            \"Balance\": \"9827999174\",\n            \"Flags\": 0,\n            \"OwnerCount\": 8,\n            \"Sequence\": 66\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"146AAAF7A266D8A92DFFEAB1A71B6523534F27820873F4E213014B23398867D2\",\n          \"PreviousFields\": {\n            \"Balance\": \"9827999184\",\n            \"OwnerCount\": 7,\n            \"Sequence\": 65\n          },\n          \"PreviousTxnID\": \"8107CEE99D556326ACD4662CA10A24550240D9F933E55435A0C0DB3B06DD343E\",\n          \"PreviousTxnLgrSeq\": 11427673\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rDd6FpNbeY2CrQajSmP178BmNGusmQiYMM\",\n            \"UnauthorizeCredentials\": [\n              {\n                \"Credential\": {\n                  \"Issuer\": \"rISABEL......\",\n                  \"CredentialType\": \"4B5943\"\n                }\n              }\n            ]\n          },\n          \"LedgerEntryType\": \"DepositPreauth\",\n          \"LedgerIndex\": \"C2D0317AD266B93CB3B36AEB0ABB673B0AFFAB134809CCACFD7158F539603C3A\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rDd6FpNbeY2CrQajSmP178BmNGusmQiYMM\",\n            \"RootIndex\": \"CD08416851CA53E9649408118A4908E01E43436ED950886D1B1E66F4B68B82EC\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"CD08416851CA53E9649408118A4908E01E43436ED950886D1B1E66F4B68B82EC\"\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tesSUCCESS\"\n  }\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/DepositPreauth/types.ts",
    "content": "// Credential authorization object as per XLS-70 spec\nexport interface CredentialAuth {\n  Issuer: string\n  CredentialType: string\n}\n\nexport interface DepositPreauthWithAuthorize {\n  Authorize: string\n  Unauthorize: never\n  AuthorizeCredentials: never\n  UnauthorizeCredentials: never\n}\n\nexport interface DepositPreauthWithUnauthorize {\n  Authorize: never\n  Unauthorize: string\n  AuthorizeCredentials: never\n  UnauthorizeCredentials: never\n}\n\nexport interface DepositPreauthWithAuthorizeCredentials {\n  Authorize: never\n  Unauthorize: never\n  AuthorizeCredentials: CredentialAuth[]\n  UnauthorizeCredentials: never\n}\n\nexport interface DepositPreauthWithUnauthorizeCredentials {\n  Authorize: never\n  Unauthorize: never\n  AuthorizeCredentials: never\n  UnauthorizeCredentials: CredentialAuth[]\n}\n\nexport type DepositPreauth =\n  | DepositPreauthWithAuthorize\n  | DepositPreauthWithUnauthorize\n  | DepositPreauthWithAuthorizeCredentials\n  | DepositPreauthWithUnauthorizeCredentials\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/EnableAmendment/Simple.tsx",
    "content": "import { useContext, useEffect, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport type { EnableAmendment } from 'xrpl'\nimport { useLanguage } from '../../../hooks'\nimport { SimpleRow } from '../SimpleRow'\nimport { TransactionSimpleProps } from '../types'\nimport { getExpectedDate, getRippledVersion } from '../../../amendmentUtils'\nimport { AMENDMENT_ROUTE } from '../../../../App/routes'\nimport { RouteLink } from '../../../routing'\nimport SocketContext from '../../../SocketContext'\nimport { getFeature } from '../../../../../rippled/lib/rippled'\n\nconst states = {\n  loading: 'Loading',\n  unknown: 'Unknown',\n}\n\nexport const Simple = ({ data }: TransactionSimpleProps<EnableAmendment>) => {\n  const language = useLanguage()\n  const { t } = useTranslation()\n  const [amendmentDetails, setAmendmentDetails] = useState({\n    name: states.loading,\n    minRippledVersion: states.loading,\n  })\n  const rippledSocket = useContext(SocketContext)\n\n  useEffect(() => {\n    const amendmentId = data.instructions.Amendment\n    getFeature(rippledSocket, amendmentId).then((feature) => {\n      const name =\n        feature && feature[amendmentId] ? feature[amendmentId].name : ''\n      getRippledVersion(name).then((rippledVersion) => {\n        setAmendmentDetails({\n          name: name || states.unknown,\n          minRippledVersion: rippledVersion || states.unknown,\n        })\n      })\n    })\n  }, [data.instructions.Amendment, rippledSocket])\n\n  let amendmentStatus = states.unknown\n  let expectedDate: string | null = states.unknown\n\n  switch (data.instructions.Flags) {\n    case undefined:\n      amendmentStatus = 'Enabled'\n      break\n    case 65536:\n      amendmentStatus = 'Got Majority'\n      expectedDate = getExpectedDate(data.instructions.date, language)\n      break\n    case 131072:\n      amendmentStatus = 'Lost Majority'\n      break\n    default:\n      amendmentStatus = states.unknown\n  }\n\n  return (\n    <>\n      <SimpleRow label={t('enable_amendment_name')} data-testid=\"name\">\n        <RouteLink\n          to={AMENDMENT_ROUTE}\n          params={{ identifier: data.instructions.Amendment }}\n        >\n          {amendmentDetails.name}\n        </RouteLink>\n      </SimpleRow>\n      <SimpleRow label={t('amendment_status')} data-testid=\"status\">\n        <a href=\"https://xrpl.org/enableamendment.html#enableamendment-flags\">\n          {amendmentStatus}\n        </a>\n      </SimpleRow>\n      <SimpleRow label={t('introduced_in')} data-testid=\"version\">\n        {amendmentDetails.minRippledVersion}\n      </SimpleRow>\n      {amendmentStatus === 'Got Majority' && (\n        <SimpleRow label={t('expected_date')} data-testid=\"date\">\n          {expectedDate}\n        </SimpleRow>\n      )}\n    </>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/EnableAmendment/index.ts",
    "content": "import {\n  TransactionAction,\n  TransactionCategory,\n  TransactionMapping,\n} from '../types'\n\nimport { Simple } from './Simple'\n\nexport const EnableAmendmentTransaction: TransactionMapping = {\n  Simple,\n  action: TransactionAction.MODIFY,\n  category: TransactionCategory.PSEUDO,\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/EnableAmendment/test/EnableAmendmentSimple.test.tsx",
    "content": "import { waitFor } from '@testing-library/react'\nimport i18n from '../../../../../../i18n/testConfigEnglish'\nimport {\n  expectSimpleRowLabel,\n  expectSimpleRowNotToExist,\n  expectSimpleRowText,\n} from '../../test'\nimport { createSimpleRenderFactory } from '../../test/createWrapperFactory'\n\nimport { Simple } from '../Simple'\nimport mockEnableAmendmentWithEnabled from './mock_data/EnableAmendmentWithEnabled.json'\nimport mockEnableAmendmentWithMinority from './mock_data/EnableAmendmentWithMinority.json'\nimport mockEnableAmendmentWithMajority from './mock_data/EnableAmendmentWithMajority.json'\nimport mockFeatureExpandedSignerList from './mock_data/FeatureExpandedSignerList.json'\nimport mockFeatureNegativeUNL from './mock_data/FeatureNegativeUNL.json'\nimport { getRippledVersion } from '../../../../amendmentUtils'\nimport { getFeature } from '../../../../../../rippled/lib/rippled'\n\nconst renderComponent = createSimpleRenderFactory(Simple, i18n)\n\njest.mock('../../../../amendmentUtils', () => {\n  // Require the original module to not be mocked...\n  const originalModule = jest.requireActual('../../../../amendmentUtils')\n  return {\n    __esModule: true,\n    ...originalModule,\n    getRippledVersion: jest.fn(),\n  }\n})\n\njest.mock('../../../../../../rippled/lib/rippled', () => {\n  const originalModule = jest.requireActual(\n    '../../../../../../rippled/lib/rippled',\n  )\n\n  return {\n    __esModule: true,\n    ...originalModule,\n    getFeature: jest.fn(),\n  }\n})\n\nconst mockedGetRippledVersion = getRippledVersion as jest.MockedFunction<\n  typeof getRippledVersion\n>\n\nconst mockedGetFeature = getFeature as jest.MockedFunction<typeof getFeature>\n\ndescribe('EnableAmendment: Simple', () => {\n  afterEach(() => {\n    mockedGetFeature.mockReset()\n  })\n  it('renders tx that causes an amendment to loose majority', async () => {\n    mockedGetRippledVersion.mockImplementation(() => Promise.resolve('v1.9.1'))\n    mockedGetFeature.mockImplementation(() =>\n      Promise.resolve(mockFeatureExpandedSignerList),\n    )\n    const { container, unmount } = renderComponent(\n      mockEnableAmendmentWithMinority,\n    )\n    expectSimpleRowLabel(container, 'name', 'Amendment Name')\n    expectSimpleRowText(container, 'name', 'Loading')\n    expectSimpleRowLabel(container, 'status', 'Amendment Status')\n    expectSimpleRowText(container, 'status', 'Lost Majority')\n    expectSimpleRowLabel(container, 'version', 'Introduced In')\n    expectSimpleRowText(container, 'version', 'Loading')\n    expectSimpleRowNotToExist(container, 'date')\n\n    await waitFor(() => {\n      expectSimpleRowText(container, 'name', 'ExpandedSignerList')\n    })\n    expectSimpleRowText(container, 'version', 'v1.9.1')\n\n    unmount()\n  })\n\n  it('renders tx that causes an amendment to gain majority', async () => {\n    mockedGetRippledVersion.mockImplementation(() => Promise.resolve('v1.9.1'))\n    mockedGetFeature.mockImplementation(() =>\n      Promise.resolve(mockFeatureExpandedSignerList),\n    )\n    const { container, unmount } = renderComponent(\n      mockEnableAmendmentWithMajority,\n    )\n    expectSimpleRowLabel(container, 'name', 'Amendment Name')\n    expectSimpleRowText(container, 'name', 'Loading')\n    expectSimpleRowLabel(container, 'status', 'Amendment Status')\n    expectSimpleRowText(container, 'status', 'Got Majority')\n    expectSimpleRowLabel(container, 'version', 'Introduced In')\n    expectSimpleRowText(container, 'version', 'Loading')\n    expectSimpleRowLabel(container, 'date', 'Expected Date')\n    expectSimpleRowText(container, 'date', '10/13/2022, 3:28:31 PM')\n\n    await waitFor(() => {\n      expectSimpleRowText(container, 'name', 'ExpandedSignerList')\n    })\n    expectSimpleRowText(container, 'version', 'v1.9.1')\n    expect(\n      container.querySelector('[data-testid=\"name\"] .value a'),\n    ).toHaveAttribute(\n      'href',\n      '/amendment/B2A4DB846F0891BF2C76AB2F2ACC8F5B4EC64437135C6E56F3F859DE5FFD5856',\n    )\n\n    unmount()\n  })\n\n  it('renders tx that enables an amendment', async () => {\n    mockedGetRippledVersion.mockImplementation(() => Promise.resolve('v1.7.3'))\n    mockedGetFeature.mockImplementation(() =>\n      Promise.resolve(mockFeatureNegativeUNL),\n    )\n    const { container, unmount } = renderComponent(\n      mockEnableAmendmentWithEnabled,\n    )\n    expectSimpleRowLabel(container, 'name', 'Amendment Name')\n    expectSimpleRowText(container, 'name', 'Loading')\n    expectSimpleRowLabel(container, 'status', 'Amendment Status')\n    expectSimpleRowText(container, 'status', 'Enabled')\n    expectSimpleRowLabel(container, 'version', 'Introduced In')\n    expectSimpleRowText(container, 'version', 'Loading')\n\n    await waitFor(() => {\n      expectSimpleRowText(container, 'name', 'NegativeUNL')\n    })\n    expectSimpleRowText(container, 'version', 'v1.7.3')\n\n    unmount()\n  })\n\n  it('renders tx that cannot determine version or name', async () => {\n    mockedGetRippledVersion.mockImplementation(() => Promise.resolve(''))\n    mockedGetFeature.mockImplementation(() => Promise.resolve(null))\n    const { container } = renderComponent(mockEnableAmendmentWithEnabled)\n    expectSimpleRowLabel(container, 'name', 'Amendment Name')\n    expectSimpleRowText(container, 'name', 'Loading')\n    expectSimpleRowLabel(container, 'version', 'Introduced In')\n    expectSimpleRowText(container, 'version', 'Loading')\n\n    await waitFor(() => {\n      expectSimpleRowText(container, 'name', 'Unknown')\n    })\n    expectSimpleRowText(container, 'version', 'Unknown')\n  })\n\n  it('renders tx that cannot determine version', async () => {\n    mockedGetRippledVersion.mockImplementation(() => Promise.resolve(''))\n    mockedGetFeature.mockImplementation(() =>\n      Promise.resolve(mockFeatureNegativeUNL),\n    )\n    const { container } = renderComponent(mockEnableAmendmentWithEnabled)\n    expectSimpleRowLabel(container, 'name', 'Amendment Name')\n    expectSimpleRowText(container, 'name', 'Loading')\n    expectSimpleRowLabel(container, 'version', 'Introduced In')\n    expectSimpleRowText(container, 'version', 'Loading')\n\n    await waitFor(() => {\n      expectSimpleRowText(container, 'name', 'NegativeUNL')\n    })\n    expectSimpleRowText(container, 'version', 'Unknown')\n  })\n\n  it('renders tx that cannot determine name', async () => {\n    mockedGetRippledVersion.mockImplementation(() => Promise.resolve('v1.7.3'))\n    mockedGetFeature.mockImplementation(() => Promise.resolve(null))\n    const { container } = renderComponent(mockEnableAmendmentWithEnabled)\n    expectSimpleRowLabel(container, 'name', 'Amendment Name')\n    expectSimpleRowText(container, 'name', 'Loading')\n    expectSimpleRowLabel(container, 'version', 'Introduced In')\n    expectSimpleRowText(container, 'version', 'Loading')\n\n    await waitFor(() => {\n      expectSimpleRowText(container, 'name', 'Unknown')\n    })\n    expectSimpleRowText(container, 'version', 'v1.7.3')\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/EnableAmendment/test/mock_data/EnableAmendmentWithEnabled.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rrrrrrrrrrrrrrrrrrrrrhoLvTp\",\n    \"Amendment\": \"B4E4F5D2D6FB84DF7399960A732309C9FD530EAE5941838160042833625A6076\",\n    \"Fee\": \"0\",\n    \"LedgerSequence\": 67849217,\n    \"Sequence\": 0,\n    \"SigningPubKey\": \"\",\n    \"TransactionType\": \"EnableAmendment\",\n    \"date\": \"2021-11-21T18:38:51Z\",\n    \"warnings\": [\n      {\n        \"id\": 1004,\n        \"message\": \"This is a reporting server.  The default behavior of a reporting server is to only return validated data. If you are looking for not yet validated data, include \\\"ledger_index : current\\\" in your request, which will cause this server to forward the request to a p2p node. If the forward is successful the response will include \\\"forwarded\\\" : \\\"true\\\"\"\n      }\n    ]\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Amendments\": [\n              \"42426C4D4F1009EE67080A9B7965B44656D7714D104A72F9B4369F97ABF044EE\",\n              \"4C97EBA926031A7CF7D7B36FDE3ED66DDA5421192D63DE53FFB46E43B9DC8373\",\n              \"6781F8368C4771B83E8B821D88F580202BCB4228075297B19E4FDC5233F1EFDC\",\n              \"740352F2412A9909880C23A559FCECEDA3BE2126FED62FC7660D628A06927F11\",\n              \"1562511F573A19AE9BD103B5D6B9E01B3B46805AEC5D3C4805C902B514399146\",\n              \"532651B4FD58DF8922A49BA101AB3E996E5BFBF95A913B3E392504863E63B164\",\n              \"08DE7D96082187F6E6578530258C77FAABABE4C20474BDB82F04B021F1A68647\",\n              \"E2E6F2866106419B88C50045ACE96368558C345566AC8F2BDF5A5B5587F0E6FA\",\n              \"07D43DCE529B15A10827E5E04943B496762F9A88E3268269D69C44BE49E21104\",\n              \"42EEA5E28A97824821D4EF97081FE36A54E9593C6E4F20CBAE098C69D2E072DC\",\n              \"DC9CA96AEA1DCF83E527D1AFC916EFAF5D27388ECA4060A88817C1238CAEE0BF\",\n              \"1D3463A5891F9E589C5AE839FFAC4A917CE96197098A1EF22304E1BC5B98A454\",\n              \"6C92211186613F9647A89DFFBAB8F94C99D4C7E956D495270789128569177DA1\",\n              \"CC5ABAE4F3EC92E94A59B1908C2BE82D2228B6485C00AFF8F22DF930D89C194E\",\n              \"B9E739B8296B4A1BB29BE990B17D66E21B62A300A909F25AC55C22D6C72E1F9D\",\n              \"B4D44CC3111ADD964E846FC57760C8B50FFCD5A82C86A72756F6B058DDDF96AD\",\n              \"67A34F2CF55BFC0F93AACD5B281413176FEE195269FA6D95219A2DF738671172\",\n              \"F64E1EABBE79D55B3BB82020516CEC2C582A98A6BFE20FBE9BB6A0D233418064\",\n              \"7117E2EC2DBF119CA55181D69819F1999ECEE1A0225A7FD2B9ED47940968479C\",\n              \"58BE9B5968C4DA7C59BA900961828B113E5490699B21877DEF9A31E9D0FE5D5F\",\n              \"CA7C02118BA27599528543DFE77BA6838D1B0F43B447D4D7F53523CE6A0E9AC2\",\n              \"5D08145F0A4983F23AFFFF514E83FAD355C5ABFBB6CAB76FB5BC8519FF5F33BE\",\n              \"3CBC5C4E630A1B82380295CDA84B32B49DD066602E74E39B85EF64137FA65194\",\n              \"FBD513F1B893AC765B78F250E6FFA6A11B573209D1842ADC787C850696741288\",\n              \"2CD5286D8D687E98B41102BDD797198E81EA41DF7BD104E6561FEB104EFF2561\",\n              \"586480873651E106F1D6339B0C4A8945BA705A777F3F4524626FF1FC07EFE41D\",\n              \"C4483A1896170C66C098DEA5B0E024309C60DC960DE5F01CD7AF986AA3D9AD37\",\n              \"8F81B066ED20DAECA20DF57187767685EEF3980B228E0667A650BAF24426D3B4\",\n              \"621A0B264970359869E3C0363A899909AAB7A887C8B73519E4ECF952D33258A8\",\n              \"30CD365592B8EE40489BA01AE2F7555CAC9C983145871DC82A42A31CF5BAE7D9\",\n              \"157D2D480E006395B76F948E3E07A45A05FE10230D88A7993C71F97AE4B1F2D1\",\n              \"00C1FC4A53E60AB02C864641002B3172F38677E29C26C5406685179B37E1EDAC\",\n              \"89308AF3B8B10B7192C4E613E1D2E4D9BA64B2EE2D5232402AE82A6A7220D953\",\n              \"3012E8230864E95A58C60FD61430D7E1B4D3353195F2981DC12B0C7C0950FFAC\",\n              \"1F4AFA8FA1BC8827AD4C0F682C03A8B671DCDF6B5C4DE36D44243A684103EF88\",\n              \"4F46DF03559967AC60F2EB272FEFE3928A7594A45FF774B87A7E540DB0F8F068\",\n              \"25BA44241B3BD880770BFA4DA21C7180576831855368CBEC6A3154FDE4A7676E\",\n              \"452F5906C46D46F407883344BFDD90E672B672C5E9943DB4891E3A34FEEEB9DB\",\n              \"AF8DF7465C338AE64B1E937D6C8DA138C0D63AD5134A68792BBBE1F63356C422\",\n              \"B6B3EEDC0267AB50491FDC450A398AF30DBCD977CECED8BEF2499CAB5DAC19E2\",\n              \"955DF3FA5891195A9DAEFA1DDC6BB244B545DDE1BAA84CBB25D5F12A8DA68A0C\",\n              \"B4E4F5D2D6FB84DF7399960A732309C9FD530EAE5941838160042833625A6076\"\n            ],\n            \"Flags\": 0\n          },\n          \"LedgerEntryType\": \"Amendments\",\n          \"LedgerIndex\": \"7DB0788C020F02780A673DC74757F23823FA3014C1866E72CC4CD8B226CD6EF4\",\n          \"PreviousFields\": {\n            \"Amendments\": [\n              \"42426C4D4F1009EE67080A9B7965B44656D7714D104A72F9B4369F97ABF044EE\",\n              \"4C97EBA926031A7CF7D7B36FDE3ED66DDA5421192D63DE53FFB46E43B9DC8373\",\n              \"6781F8368C4771B83E8B821D88F580202BCB4228075297B19E4FDC5233F1EFDC\",\n              \"740352F2412A9909880C23A559FCECEDA3BE2126FED62FC7660D628A06927F11\",\n              \"1562511F573A19AE9BD103B5D6B9E01B3B46805AEC5D3C4805C902B514399146\",\n              \"532651B4FD58DF8922A49BA101AB3E996E5BFBF95A913B3E392504863E63B164\",\n              \"08DE7D96082187F6E6578530258C77FAABABE4C20474BDB82F04B021F1A68647\",\n              \"E2E6F2866106419B88C50045ACE96368558C345566AC8F2BDF5A5B5587F0E6FA\",\n              \"07D43DCE529B15A10827E5E04943B496762F9A88E3268269D69C44BE49E21104\",\n              \"42EEA5E28A97824821D4EF97081FE36A54E9593C6E4F20CBAE098C69D2E072DC\",\n              \"DC9CA96AEA1DCF83E527D1AFC916EFAF5D27388ECA4060A88817C1238CAEE0BF\",\n              \"1D3463A5891F9E589C5AE839FFAC4A917CE96197098A1EF22304E1BC5B98A454\",\n              \"6C92211186613F9647A89DFFBAB8F94C99D4C7E956D495270789128569177DA1\",\n              \"CC5ABAE4F3EC92E94A59B1908C2BE82D2228B6485C00AFF8F22DF930D89C194E\",\n              \"B9E739B8296B4A1BB29BE990B17D66E21B62A300A909F25AC55C22D6C72E1F9D\",\n              \"B4D44CC3111ADD964E846FC57760C8B50FFCD5A82C86A72756F6B058DDDF96AD\",\n              \"67A34F2CF55BFC0F93AACD5B281413176FEE195269FA6D95219A2DF738671172\",\n              \"F64E1EABBE79D55B3BB82020516CEC2C582A98A6BFE20FBE9BB6A0D233418064\",\n              \"7117E2EC2DBF119CA55181D69819F1999ECEE1A0225A7FD2B9ED47940968479C\",\n              \"58BE9B5968C4DA7C59BA900961828B113E5490699B21877DEF9A31E9D0FE5D5F\",\n              \"CA7C02118BA27599528543DFE77BA6838D1B0F43B447D4D7F53523CE6A0E9AC2\",\n              \"5D08145F0A4983F23AFFFF514E83FAD355C5ABFBB6CAB76FB5BC8519FF5F33BE\",\n              \"3CBC5C4E630A1B82380295CDA84B32B49DD066602E74E39B85EF64137FA65194\",\n              \"FBD513F1B893AC765B78F250E6FFA6A11B573209D1842ADC787C850696741288\",\n              \"2CD5286D8D687E98B41102BDD797198E81EA41DF7BD104E6561FEB104EFF2561\",\n              \"586480873651E106F1D6339B0C4A8945BA705A777F3F4524626FF1FC07EFE41D\",\n              \"C4483A1896170C66C098DEA5B0E024309C60DC960DE5F01CD7AF986AA3D9AD37\",\n              \"8F81B066ED20DAECA20DF57187767685EEF3980B228E0667A650BAF24426D3B4\",\n              \"621A0B264970359869E3C0363A899909AAB7A887C8B73519E4ECF952D33258A8\",\n              \"30CD365592B8EE40489BA01AE2F7555CAC9C983145871DC82A42A31CF5BAE7D9\",\n              \"157D2D480E006395B76F948E3E07A45A05FE10230D88A7993C71F97AE4B1F2D1\",\n              \"00C1FC4A53E60AB02C864641002B3172F38677E29C26C5406685179B37E1EDAC\",\n              \"89308AF3B8B10B7192C4E613E1D2E4D9BA64B2EE2D5232402AE82A6A7220D953\",\n              \"3012E8230864E95A58C60FD61430D7E1B4D3353195F2981DC12B0C7C0950FFAC\",\n              \"1F4AFA8FA1BC8827AD4C0F682C03A8B671DCDF6B5C4DE36D44243A684103EF88\",\n              \"4F46DF03559967AC60F2EB272FEFE3928A7594A45FF774B87A7E540DB0F8F068\",\n              \"25BA44241B3BD880770BFA4DA21C7180576831855368CBEC6A3154FDE4A7676E\",\n              \"452F5906C46D46F407883344BFDD90E672B672C5E9943DB4891E3A34FEEEB9DB\",\n              \"AF8DF7465C338AE64B1E937D6C8DA138C0D63AD5134A68792BBBE1F63356C422\",\n              \"B6B3EEDC0267AB50491FDC450A398AF30DBCD977CECED8BEF2499CAB5DAC19E2\",\n              \"955DF3FA5891195A9DAEFA1DDC6BB244B545DDE1BAA84CBB25D5F12A8DA68A0C\"\n            ],\n            \"Majorities\": [\n              {\n                \"Majority\": {\n                  \"Amendment\": \"B4E4F5D2D6FB84DF7399960A732309C9FD530EAE5941838160042833625A6076\",\n                  \"CloseTime\": 689625462\n                }\n              }\n            ]\n          }\n        }\n      }\n    ],\n    \"TransactionIndex\": 66,\n    \"TransactionResult\": \"tesSUCCESS\"\n  },\n  \"hash\": \"1500FADB73E7148191216C53040990E829C7110788B26E7F3246CB3660769EBA\",\n  \"ledger_index\": 67849217,\n  \"date\": \"2021-11-21T18:38:51Z\"\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/EnableAmendment/test/mock_data/EnableAmendmentWithMajority.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rrrrrrrrrrrrrrrrrrrrrhoLvTp\",\n    \"Amendment\": \"B2A4DB846F0891BF2C76AB2F2ACC8F5B4EC64437135C6E56F3F859DE5FFD5856\",\n    \"Fee\": \"0\",\n    \"Flags\": 65536,\n    \"LedgerSequence\": 74724097,\n    \"Sequence\": 0,\n    \"SigningPubKey\": \"\",\n    \"TransactionType\": \"EnableAmendment\",\n    \"date\": \"2022-09-29T15:28:31Z\",\n    \"warnings\": [\n      {\n        \"id\": 1004,\n        \"message\": \"This is a reporting server.  The default behavior of a reporting server is to only return validated data. If you are looking for not yet validated data, include \\\"ledger_index : current\\\" in your request, which will cause this server to forward the request to a p2p node. If the forward is successful the response will include \\\"forwarded\\\" : \\\"true\\\"\"\n      }\n    ]\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Amendments\": [\n              \"42426C4D4F1009EE67080A9B7965B44656D7714D104A72F9B4369F97ABF044EE\",\n              \"4C97EBA926031A7CF7D7B36FDE3ED66DDA5421192D63DE53FFB46E43B9DC8373\",\n              \"6781F8368C4771B83E8B821D88F580202BCB4228075297B19E4FDC5233F1EFDC\",\n              \"740352F2412A9909880C23A559FCECEDA3BE2126FED62FC7660D628A06927F11\",\n              \"1562511F573A19AE9BD103B5D6B9E01B3B46805AEC5D3C4805C902B514399146\",\n              \"532651B4FD58DF8922A49BA101AB3E996E5BFBF95A913B3E392504863E63B164\",\n              \"08DE7D96082187F6E6578530258C77FAABABE4C20474BDB82F04B021F1A68647\",\n              \"E2E6F2866106419B88C50045ACE96368558C345566AC8F2BDF5A5B5587F0E6FA\",\n              \"07D43DCE529B15A10827E5E04943B496762F9A88E3268269D69C44BE49E21104\",\n              \"42EEA5E28A97824821D4EF97081FE36A54E9593C6E4F20CBAE098C69D2E072DC\",\n              \"DC9CA96AEA1DCF83E527D1AFC916EFAF5D27388ECA4060A88817C1238CAEE0BF\",\n              \"1D3463A5891F9E589C5AE839FFAC4A917CE96197098A1EF22304E1BC5B98A454\",\n              \"6C92211186613F9647A89DFFBAB8F94C99D4C7E956D495270789128569177DA1\",\n              \"CC5ABAE4F3EC92E94A59B1908C2BE82D2228B6485C00AFF8F22DF930D89C194E\",\n              \"B9E739B8296B4A1BB29BE990B17D66E21B62A300A909F25AC55C22D6C72E1F9D\",\n              \"B4D44CC3111ADD964E846FC57760C8B50FFCD5A82C86A72756F6B058DDDF96AD\",\n              \"67A34F2CF55BFC0F93AACD5B281413176FEE195269FA6D95219A2DF738671172\",\n              \"F64E1EABBE79D55B3BB82020516CEC2C582A98A6BFE20FBE9BB6A0D233418064\",\n              \"7117E2EC2DBF119CA55181D69819F1999ECEE1A0225A7FD2B9ED47940968479C\",\n              \"58BE9B5968C4DA7C59BA900961828B113E5490699B21877DEF9A31E9D0FE5D5F\",\n              \"CA7C02118BA27599528543DFE77BA6838D1B0F43B447D4D7F53523CE6A0E9AC2\",\n              \"5D08145F0A4983F23AFFFF514E83FAD355C5ABFBB6CAB76FB5BC8519FF5F33BE\",\n              \"3CBC5C4E630A1B82380295CDA84B32B49DD066602E74E39B85EF64137FA65194\",\n              \"FBD513F1B893AC765B78F250E6FFA6A11B573209D1842ADC787C850696741288\",\n              \"2CD5286D8D687E98B41102BDD797198E81EA41DF7BD104E6561FEB104EFF2561\",\n              \"586480873651E106F1D6339B0C4A8945BA705A777F3F4524626FF1FC07EFE41D\",\n              \"C4483A1896170C66C098DEA5B0E024309C60DC960DE5F01CD7AF986AA3D9AD37\",\n              \"8F81B066ED20DAECA20DF57187767685EEF3980B228E0667A650BAF24426D3B4\",\n              \"621A0B264970359869E3C0363A899909AAB7A887C8B73519E4ECF952D33258A8\",\n              \"30CD365592B8EE40489BA01AE2F7555CAC9C983145871DC82A42A31CF5BAE7D9\",\n              \"157D2D480E006395B76F948E3E07A45A05FE10230D88A7993C71F97AE4B1F2D1\",\n              \"00C1FC4A53E60AB02C864641002B3172F38677E29C26C5406685179B37E1EDAC\",\n              \"89308AF3B8B10B7192C4E613E1D2E4D9BA64B2EE2D5232402AE82A6A7220D953\",\n              \"3012E8230864E95A58C60FD61430D7E1B4D3353195F2981DC12B0C7C0950FFAC\",\n              \"1F4AFA8FA1BC8827AD4C0F682C03A8B671DCDF6B5C4DE36D44243A684103EF88\",\n              \"4F46DF03559967AC60F2EB272FEFE3928A7594A45FF774B87A7E540DB0F8F068\",\n              \"25BA44241B3BD880770BFA4DA21C7180576831855368CBEC6A3154FDE4A7676E\",\n              \"452F5906C46D46F407883344BFDD90E672B672C5E9943DB4891E3A34FEEEB9DB\",\n              \"AF8DF7465C338AE64B1E937D6C8DA138C0D63AD5134A68792BBBE1F63356C422\",\n              \"B6B3EEDC0267AB50491FDC450A398AF30DBCD977CECED8BEF2499CAB5DAC19E2\",\n              \"955DF3FA5891195A9DAEFA1DDC6BB244B545DDE1BAA84CBB25D5F12A8DA68A0C\",\n              \"B4E4F5D2D6FB84DF7399960A732309C9FD530EAE5941838160042833625A6076\"\n            ],\n            \"Flags\": 0,\n            \"Majorities\": [\n              {\n                \"Majority\": {\n                  \"Amendment\": \"B2A4DB846F0891BF2C76AB2F2ACC8F5B4EC64437135C6E56F3F859DE5FFD5856\",\n                  \"CloseTime\": 717780510\n                }\n              }\n            ]\n          },\n          \"LedgerEntryType\": \"Amendments\",\n          \"LedgerIndex\": \"7DB0788C020F02780A673DC74757F23823FA3014C1866E72CC4CD8B226CD6EF4\",\n          \"PreviousFields\": {}\n        }\n      }\n    ],\n    \"TransactionIndex\": 5,\n    \"TransactionResult\": \"tesSUCCESS\"\n  },\n  \"hash\": \"042AA148D6FF73BB255B381E222CA3EFDC83A51B84C4DDD81B1CB3863C25B34D\",\n  \"ledger_index\": 74724097,\n  \"date\": \"2022-09-29T15:28:31Z\"\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/EnableAmendment/test/mock_data/EnableAmendmentWithMinority.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rrrrrrrrrrrrrrrrrrrrrhoLvTp\",\n    \"Amendment\": \"B2A4DB846F0891BF2C76AB2F2ACC8F5B4EC64437135C6E56F3F859DE5FFD5856\",\n    \"Fee\": \"0\",\n    \"Flags\": 131072,\n    \"LedgerSequence\": 74119937,\n    \"Sequence\": 0,\n    \"SigningPubKey\": \"\",\n    \"TransactionType\": \"EnableAmendment\",\n    \"date\": \"2022-09-02T15:02:22Z\",\n    \"warnings\": [\n      {\n        \"id\": 1004,\n        \"message\": \"This is a reporting server.  The default behavior of a reporting server is to only return validated data. If you are looking for not yet validated data, include \\\"ledger_index : current\\\" in your request, which will cause this server to forward the request to a p2p node. If the forward is successful the response will include \\\"forwarded\\\" : \\\"true\\\"\"\n      }\n    ]\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Amendments\": [\n              \"42426C4D4F1009EE67080A9B7965B44656D7714D104A72F9B4369F97ABF044EE\",\n              \"4C97EBA926031A7CF7D7B36FDE3ED66DDA5421192D63DE53FFB46E43B9DC8373\",\n              \"6781F8368C4771B83E8B821D88F580202BCB4228075297B19E4FDC5233F1EFDC\",\n              \"740352F2412A9909880C23A559FCECEDA3BE2126FED62FC7660D628A06927F11\",\n              \"1562511F573A19AE9BD103B5D6B9E01B3B46805AEC5D3C4805C902B514399146\",\n              \"532651B4FD58DF8922A49BA101AB3E996E5BFBF95A913B3E392504863E63B164\",\n              \"08DE7D96082187F6E6578530258C77FAABABE4C20474BDB82F04B021F1A68647\",\n              \"E2E6F2866106419B88C50045ACE96368558C345566AC8F2BDF5A5B5587F0E6FA\",\n              \"07D43DCE529B15A10827E5E04943B496762F9A88E3268269D69C44BE49E21104\",\n              \"42EEA5E28A97824821D4EF97081FE36A54E9593C6E4F20CBAE098C69D2E072DC\",\n              \"DC9CA96AEA1DCF83E527D1AFC916EFAF5D27388ECA4060A88817C1238CAEE0BF\",\n              \"1D3463A5891F9E589C5AE839FFAC4A917CE96197098A1EF22304E1BC5B98A454\",\n              \"6C92211186613F9647A89DFFBAB8F94C99D4C7E956D495270789128569177DA1\",\n              \"CC5ABAE4F3EC92E94A59B1908C2BE82D2228B6485C00AFF8F22DF930D89C194E\",\n              \"B9E739B8296B4A1BB29BE990B17D66E21B62A300A909F25AC55C22D6C72E1F9D\",\n              \"B4D44CC3111ADD964E846FC57760C8B50FFCD5A82C86A72756F6B058DDDF96AD\",\n              \"67A34F2CF55BFC0F93AACD5B281413176FEE195269FA6D95219A2DF738671172\",\n              \"F64E1EABBE79D55B3BB82020516CEC2C582A98A6BFE20FBE9BB6A0D233418064\",\n              \"7117E2EC2DBF119CA55181D69819F1999ECEE1A0225A7FD2B9ED47940968479C\",\n              \"58BE9B5968C4DA7C59BA900961828B113E5490699B21877DEF9A31E9D0FE5D5F\",\n              \"CA7C02118BA27599528543DFE77BA6838D1B0F43B447D4D7F53523CE6A0E9AC2\",\n              \"5D08145F0A4983F23AFFFF514E83FAD355C5ABFBB6CAB76FB5BC8519FF5F33BE\",\n              \"3CBC5C4E630A1B82380295CDA84B32B49DD066602E74E39B85EF64137FA65194\",\n              \"FBD513F1B893AC765B78F250E6FFA6A11B573209D1842ADC787C850696741288\",\n              \"2CD5286D8D687E98B41102BDD797198E81EA41DF7BD104E6561FEB104EFF2561\",\n              \"586480873651E106F1D6339B0C4A8945BA705A777F3F4524626FF1FC07EFE41D\",\n              \"C4483A1896170C66C098DEA5B0E024309C60DC960DE5F01CD7AF986AA3D9AD37\",\n              \"8F81B066ED20DAECA20DF57187767685EEF3980B228E0667A650BAF24426D3B4\",\n              \"621A0B264970359869E3C0363A899909AAB7A887C8B73519E4ECF952D33258A8\",\n              \"30CD365592B8EE40489BA01AE2F7555CAC9C983145871DC82A42A31CF5BAE7D9\",\n              \"157D2D480E006395B76F948E3E07A45A05FE10230D88A7993C71F97AE4B1F2D1\",\n              \"00C1FC4A53E60AB02C864641002B3172F38677E29C26C5406685179B37E1EDAC\",\n              \"89308AF3B8B10B7192C4E613E1D2E4D9BA64B2EE2D5232402AE82A6A7220D953\",\n              \"3012E8230864E95A58C60FD61430D7E1B4D3353195F2981DC12B0C7C0950FFAC\",\n              \"1F4AFA8FA1BC8827AD4C0F682C03A8B671DCDF6B5C4DE36D44243A684103EF88\",\n              \"4F46DF03559967AC60F2EB272FEFE3928A7594A45FF774B87A7E540DB0F8F068\",\n              \"25BA44241B3BD880770BFA4DA21C7180576831855368CBEC6A3154FDE4A7676E\",\n              \"452F5906C46D46F407883344BFDD90E672B672C5E9943DB4891E3A34FEEEB9DB\",\n              \"AF8DF7465C338AE64B1E937D6C8DA138C0D63AD5134A68792BBBE1F63356C422\",\n              \"B6B3EEDC0267AB50491FDC450A398AF30DBCD977CECED8BEF2499CAB5DAC19E2\",\n              \"955DF3FA5891195A9DAEFA1DDC6BB244B545DDE1BAA84CBB25D5F12A8DA68A0C\",\n              \"B4E4F5D2D6FB84DF7399960A732309C9FD530EAE5941838160042833625A6076\"\n            ],\n            \"Flags\": 0,\n            \"Majorities\": [\n              {\n                \"Majority\": {\n                  \"Amendment\": \"32A122F1352A4C7B3A6D790362CC34749C5E57FCE896377BFDC6CCD14F6CD627\",\n                  \"CloseTime\": 715204150\n                }\n              }\n            ]\n          },\n          \"LedgerEntryType\": \"Amendments\",\n          \"LedgerIndex\": \"7DB0788C020F02780A673DC74757F23823FA3014C1866E72CC4CD8B226CD6EF4\",\n          \"PreviousFields\": {\n            \"Majorities\": [\n              {\n                \"Majority\": {\n                  \"Amendment\": \"32A122F1352A4C7B3A6D790362CC34749C5E57FCE896377BFDC6CCD14F6CD627\",\n                  \"CloseTime\": 715204150\n                }\n              },\n              {\n                \"Majority\": {\n                  \"Amendment\": \"B2A4DB846F0891BF2C76AB2F2ACC8F5B4EC64437135C6E56F3F859DE5FFD5856\",\n                  \"CloseTime\": 715445160\n                }\n              }\n            ]\n          }\n        }\n      }\n    ],\n    \"TransactionIndex\": 7,\n    \"TransactionResult\": \"tesSUCCESS\"\n  },\n  \"hash\": \"D49080BB2626D57D2E1086C51FCFA046E199242C18336EDBA7AD0B8687844104\",\n  \"ledger_index\": 74119937,\n  \"date\": \"2022-09-02T15:02:22Z\"\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/EnableAmendment/test/mock_data/FeatureExpandedSignerList.json",
    "content": "{\n  \"B2A4DB846F0891BF2C76AB2F2ACC8F5B4EC64437135C6E56F3F859DE5FFD5856\": {\n    \"enabled\": false,\n    \"name\": \"ExpandedSignerList\",\n    \"supported\": true\n  }\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/EnableAmendment/test/mock_data/FeatureNegativeUNL.json",
    "content": "{\n  \"B4E4F5D2D6FB84DF7399960A732309C9FD530EAE5941838160042833625A6076\": {\n    \"enabled\": false,\n    \"name\": \"NegativeUNL\",\n    \"supported\": true\n  }\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/EscrowCancel/Description.tsx",
    "content": "import { useTranslation, Trans } from 'react-i18next'\nimport type { EscrowCancel } from 'xrpl'\nimport { findNode } from '../../../transactionUtils'\nimport { Account } from '../../Account'\nimport {\n  TransactionDescriptionComponent,\n  TransactionDescriptionProps,\n} from '../types'\nimport { TRANSACTION_ROUTE } from '../../../../App/routes'\nimport { RouteLink } from '../../../routing'\nimport {\n  formatAmount,\n  isXRP,\n} from '../../../../../rippled/lib/txSummary/formatAmount'\nimport { Amount } from '../../Amount'\n\nconst Description: TransactionDescriptionComponent = (\n  props: TransactionDescriptionProps<EscrowCancel>,\n) => {\n  const { t } = useTranslation()\n  const { data } = props\n  const deleted: any = findNode(data.meta, 'DeletedNode', 'Escrow')\n  if (deleted == null) {\n    return null\n  }\n  return (\n    <>\n      <div>\n        {t('escrow_cancellation_desc')} <Account account={data.tx.Account} />\n      </div>\n      <div data-testid=\"amount-line\">\n        <Trans i18nKey=\"escrow_cancellation_desc_2\">\n          The escrowed amount of\n          <b>\n            <Amount value={formatAmount(deleted.FinalFields.Amount)} />\n          </b>\n          was returned to\n          <Account account={data.tx.Owner} />\n        </Trans>\n        {isXRP(deleted.FinalFields.Amount) &&\n          data.tx.Owner === data.tx.Account && (\n            <span>\n              {' '}\n              (\n              <b>\n                <Amount\n                  value={formatAmount(\n                    deleted.FinalFields.Amount -\n                      parseInt(data.tx.Fee || '0', 10),\n                  )}\n                />\n              </b>{' '}\n              {t('escrow_after_transaction_cost')})\n            </span>\n          )}\n      </div>\n      <Trans i18nKey=\"escrow_created_by_desc\">\n        The escrow was created by\n        <Account account={data.tx.Owner} />\n        with transaction\n        <RouteLink\n          className=\"hash\"\n          to={TRANSACTION_ROUTE}\n          params={{ identifier: deleted.FinalFields.PreviousTxnID }}\n        >\n          {`${deleted.FinalFields.PreviousTxnID.substring(0, 6)}...`}\n        </RouteLink>\n      </Trans>\n    </>\n  )\n}\nexport { Description }\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/EscrowCancel/Simple.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { Account } from '../../Account'\nimport { TransactionSimpleComponent, TransactionSimpleProps } from '../types'\nimport { SimpleRow } from '../SimpleRow'\nimport { Amount } from '../../Amount'\nimport { TRANSACTION_ROUTE } from '../../../../App/routes'\nimport { RouteLink } from '../../../routing'\n\nconst Simple: TransactionSimpleComponent = (props: TransactionSimpleProps) => {\n  const { t } = useTranslation()\n  const { data } = props\n  const { owner, sequence, tx, destination, amount, condition } =\n    data.instructions\n  return (\n    <>\n      <SimpleRow label={t('cancel_escrow')} data-testid=\"escrow-cancel\">\n        <Account account={owner} />\n        {` - ${sequence}`}\n      </SimpleRow>\n      {condition && (\n        <SimpleRow label={t('escrow_condition_short')}>{condition}</SimpleRow>\n      )}\n      {amount.amount && (\n        <SimpleRow label={t('escrow_amount')} data-testid=\"escrow-amount\">\n          <Amount value={amount} />\n        </SimpleRow>\n      )}\n      {destination && (\n        <SimpleRow\n          label={t('escrow_destination')}\n          data-testid=\"escrow-destination\"\n        >\n          <Account account={destination} />\n        </SimpleRow>\n      )}\n      {tx && (\n        <SimpleRow\n          label={t('escrow_transaction')}\n          className=\"tx\"\n          data-testid=\"escrow-cancel-tx\"\n        >\n          <RouteLink\n            className=\"hash\"\n            to={TRANSACTION_ROUTE}\n            params={{ identifier: tx }}\n          >\n            {tx}\n          </RouteLink>\n        </SimpleRow>\n      )}\n    </>\n  )\n}\n\nexport { Simple }\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/EscrowCancel/TableDetail.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { Account } from '../../Account'\nimport { Sequence } from '../../Sequence'\n\nexport const TableDetail = (props: any) => {\n  const { t } = useTranslation()\n  const { instructions } = props\n  const { owner, sequence, ticketSequence, isHook } = instructions\n  return (\n    <div className=\"escrow\">\n      {owner && (\n        <>\n          <span className=\"label\">{t('cancel_escrow')}</span>{' '}\n          <Account account={owner} /> -{' '}\n          <Sequence\n            sequence={sequence}\n            ticketSequence={ticketSequence}\n            account={owner}\n            isHook={isHook}\n          />\n        </>\n      )}\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/EscrowCancel/index.ts",
    "content": "import {\n  TransactionAction,\n  TransactionCategory,\n  TransactionMapping,\n} from '../types'\n\nimport { Simple } from './Simple'\nimport { Description } from './Description'\nimport { parser } from './parser'\nimport { TableDetail } from './TableDetail'\n\nexport const EscrowCancelTransaction: TransactionMapping = {\n  Description,\n  Simple,\n  TableDetail,\n  action: TransactionAction.CANCEL,\n  category: TransactionCategory.PAYMENT,\n  parser,\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/EscrowCancel/parser.ts",
    "content": "import type { EscrowCancel, TransactionMetadata } from 'xrpl'\nimport { formatAmount } from '../../../../../rippled/lib/txSummary/formatAmount'\nimport { findNode } from '../../../transactionUtils'\n\nconst findNodeFinalFields = (meta: TransactionMetadata) => {\n  const node = findNode(meta, 'DeletedNode', 'Escrow')\n  return node ? node.FinalFields : {}\n}\n\nexport function parser(tx: EscrowCancel, meta: TransactionMetadata) {\n  const escrow = findNodeFinalFields(meta)\n\n  return {\n    sequence: tx.OfferSequence,\n    owner: tx.Owner,\n    tx: escrow.PreviousTxnID,\n    amount: escrow.Amount ? formatAmount(escrow.Amount) : undefined,\n    destination:\n      escrow.Destination && escrow.Destination !== escrow.Account\n        ? escrow.Destination\n        : undefined,\n    condition: escrow.Condition,\n  }\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/EscrowCancel/test/EscrowCancelDescription.test.tsx",
    "content": "import { useQuery } from 'react-query'\nimport mockEscrowCancel from './mock_data/EscrowCancel.json'\nimport { Description } from '../Description'\nimport { createDescriptionRenderFactory } from '../../test'\nimport i18n from '../../../../../../i18n/testConfigEnglish'\n\nconst renderComponent = createDescriptionRenderFactory(Description, i18n)\n\njest.mock('react-query', () => ({\n  ...jest.requireActual('react-query'),\n  useQuery: jest.fn(),\n}))\n\nfunction getTestByName(name: string) {\n  return mockEscrowCancel[name]\n}\n\ndescribe('EscrowCancelDescription', () => {\n  it('renders description for EscrowCancel', () => {\n    const { container, unmount } = renderComponent(\n      getTestByName('EscrowCancel having XRP escrowed'),\n    )\n    expect(container.innerHTML).toBe(\n      '<div>Cancellation was triggered by <a data-testid=\"account\" title=\"rpmqbo5FWoydTL2Ufh5YdtzmRjbeLyxt56\" class=\"account\" href=\"/accounts/rpmqbo5FWoydTL2Ufh5YdtzmRjbeLyxt56\" data-discover=\"true\">rpmqbo5FWoydTL2Ufh5YdtzmRjbeLyxt56</a></div><div data-testid=\"amount-line\">The escrowed amount of <b><span class=\"amount\" data-testid=\"amount\"><span class=\"amount-localized\" data-testid=\"amount-localized\">135.79</span> <span class=\"currency\" data-testid=\"currency\">XRP</span></span></b> was returned to <a data-testid=\"account\" title=\"rpmqbo5FWoydTL2Ufh5YdtzmRjbeLyxt56\" class=\"account\" href=\"/accounts/rpmqbo5FWoydTL2Ufh5YdtzmRjbeLyxt56\" data-discover=\"true\">rpmqbo5FWoydTL2Ufh5YdtzmRjbeLyxt56</a><span> (<b><span class=\"amount\" data-testid=\"amount\"><span class=\"amount-localized\" data-testid=\"amount-localized\">135.78999</span> <span class=\"currency\" data-testid=\"currency\">XRP</span></span></b> after transaction cost)</span></div>The escrow was created by <a data-testid=\"account\" title=\"rpmqbo5FWoydTL2Ufh5YdtzmRjbeLyxt56\" class=\"account\" href=\"/accounts/rpmqbo5FWoydTL2Ufh5YdtzmRjbeLyxt56\" data-discover=\"true\">rpmqbo5FWoydTL2Ufh5YdtzmRjbeLyxt56</a> with transaction <a class=\"hash\" href=\"/transactions/A979AD5C6A6C844913DA51D71BF5F0B8E254D9A211FA837C4B322C4A8FD358E6\" data-discover=\"true\">A979AD...</a>',\n    )\n    unmount()\n  })\n\n  it('test XRP amount', () => {\n    const { container, unmount } = renderComponent(\n      getTestByName('EscrowCancel having XRP escrowed'),\n    )\n    expect(\n      container.querySelector('[data-testid=\"amount-line\"]'),\n    ).toHaveTextContent(\n      `The escrowed amount of \\uE900135.79 XRP was returned to rpmqbo5FWoydTL2Ufh5YdtzmRjbeLyxt56 (\\uE900135.78999 XRP after transaction cost)`,\n    )\n\n    unmount()\n  })\n\n  it('test IOU amount', () => {\n    const { container, unmount } = renderComponent(\n      getTestByName('EscrowCancel having IOU escrowed'),\n    )\n    expect(\n      container.querySelector('[data-testid=\"amount-line\"]'),\n    ).toHaveTextContent(\n      'The escrowed amount of 1.00 ZZZ.rDb2kD2sibG5cxhz3VAoRFkmhPrca4JtL8 was returned to rDtpgHpsUFu2dHC6fMZnwgZvNEDZ9MG9YK',\n    )\n    unmount()\n  })\n\n  it('test MPT amount', () => {\n    const data = {\n      assetScale: 4,\n    }\n\n    // @ts-ignore\n    useQuery.mockImplementation(() => ({\n      data,\n    }))\n\n    const { container, unmount } = renderComponent(\n      getTestByName('EscrowCancel having MPT escrowed'),\n    )\n    expect(\n      container.querySelector('[data-testid=\"amount-line\"]'),\n    ).toHaveTextContent(\n      'The escrowed amount of 0.0001 0044E49BC9FB70ADC1A604A5792643A38CA5887219C21C8C was returned to r4ipomC348PqM2rGSBmhfRPXUH6CzKS1XJ',\n    )\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/EscrowCancel/test/EscrowCancelSimple.test.tsx",
    "content": "import { useQuery } from 'react-query'\nimport { createSimpleRenderFactory } from '../../test/createWrapperFactory'\nimport { Simple } from '../Simple'\nimport mockEscrowCancel from './mock_data/EscrowCancel.json'\n\nconst renderComponent = createSimpleRenderFactory(Simple)\n\njest.mock('react-query', () => ({\n  ...jest.requireActual('react-query'),\n  useQuery: jest.fn(),\n}))\n\nfunction getTestByName(name: string) {\n  return mockEscrowCancel[name]\n}\n\ndescribe('EscrowCancelSimple', () => {\n  it('renders with an expiration and offer', () => {\n    const { container, unmount } = renderComponent(\n      getTestByName('EscrowCancel having XRP escrowed'),\n    )\n    expect(\n      container.querySelector('[data-testid=\"escrow-amount\"] .value'),\n    ).toHaveTextContent(`\\uE900135.79 XRP`)\n    expect(\n      container.querySelector('[data-testid=\"escrow-cancel\"] .value'),\n    ).toHaveTextContent('rpmqbo5FWoydTL2Ufh5YdtzmRjbeLyxt56 - 9')\n    expect(\n      container.querySelector('[data-testid=\"escrow-cancel-tx\"] .value'),\n    ).toHaveTextContent(\n      `A979AD5C6A6C844913DA51D71BF5F0B8E254D9A211FA837C4B322C4A8FD358E6`,\n    )\n    unmount()\n  })\n\n  it('test XRP amount', () => {\n    const { container, unmount } = renderComponent(\n      getTestByName('EscrowCancel having XRP escrowed'),\n    )\n    expect(\n      container.querySelector('[data-testid=\"escrow-amount\"] .value'),\n    ).toHaveTextContent(`\\uE900135.79 XRP`)\n\n    unmount()\n  })\n\n  it('test IOU amount', () => {\n    const { container, unmount } = renderComponent(\n      getTestByName('EscrowCancel having IOU escrowed'),\n    )\n    expect(\n      container.querySelector('[data-testid=\"escrow-amount\"] .value'),\n    ).toHaveTextContent('1.00 ZZZ.rDb2kD2sibG5cxhz3VAoRFkmhPrca4JtL8')\n    unmount()\n  })\n\n  it('test MPT amount', () => {\n    const data = {\n      assetScale: 4,\n    }\n\n    // @ts-ignore\n    useQuery.mockImplementation(() => ({\n      data,\n    }))\n\n    const { container, unmount } = renderComponent(\n      getTestByName('EscrowCancel having MPT escrowed'),\n    )\n    expect(\n      container.querySelector('[data-testid=\"escrow-amount\"] .value'),\n    ).toHaveTextContent(\n      '0.0001 0044E49BC9FB70ADC1A604A5792643A38CA5887219C21C8C',\n    )\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/EscrowCancel/test/EscrowCancelTableDetail.test.tsx",
    "content": "import { TableDetail } from '../TableDetail'\nimport mockEscrowCancel from './mock_data/EscrowCancel.json'\nimport { createTableDetailRenderFactory } from '../../test'\nimport i18nTestConfigEnUS from '../../../../../../i18n/testConfigEnglish'\n\nconst renderComponent = createTableDetailRenderFactory(\n  TableDetail,\n  i18nTestConfigEnUS,\n)\n\ndescribe('EscrowCancelTableDetail', () => {\n  it('renders EscrowCancel without crashing', () => {\n    const { container, unmount } = renderComponent(\n      mockEscrowCancel['EscrowCancel having XRP escrowed'],\n    )\n    expect(container).toHaveTextContent(\n      'cancel escrow rpmqbo5FWoydTL2Ufh5YdtzmRjbeLyxt56 - 9',\n    )\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/EscrowCancel/test/mock_data/EscrowCancel.json",
    "content": "{\n  \"EscrowCancel having XRP escrowed\": {\n    \"hash\": \"C6A85A5DAC39F60F52372A5992A3760F2E042AD4146C5BB1D332EB7B6671E67D\",\n    \"ledger_index\": 36481307,\n    \"date\": \"2018-02-10T23:45:21+00:00\",\n    \"tx\": {\n      \"TransactionType\": \"EscrowCancel\",\n      \"Flags\": 2147483648,\n      \"Sequence\": 14,\n      \"OfferSequence\": 9,\n      \"Fee\": \"10\",\n      \"SigningPubKey\": \"03A0452D88684D99C2E64FA9C21D749E496E8BF6E2339A78ED7CE90F009789A868\",\n      \"TxnSignature\": \"3045022100A395018AE11415150546340FC4E8A8903E473626540D9804967089617EA6DB49022016F1415F974526F2D09FE5831696D2C964AC3EB68D78360C963AA9DAE7244EF4\",\n      \"Account\": \"rpmqbo5FWoydTL2Ufh5YdtzmRjbeLyxt56\",\n      \"Owner\": \"rpmqbo5FWoydTL2Ufh5YdtzmRjbeLyxt56\"\n    },\n    \"meta\": {\n      \"TransactionIndex\": 21,\n      \"AffectedNodes\": [\n        {\n          \"ModifiedNode\": {\n            \"LedgerEntryType\": \"AccountRoot\",\n            \"PreviousTxnLgrSeq\": 36481294,\n            \"PreviousTxnID\": \"CDA75ED59DBA56E6B699793EBF984C7702D3BB37BBFB4DFE429259FB49830CD1\",\n            \"LedgerIndex\": \"585A58602324683ED54FAE51B2DA583979879392B41BB906251FFB8293889974\",\n            \"PreviousFields\": {\n              \"Sequence\": 14,\n              \"OwnerCount\": 1,\n              \"Balance\": \"508959870\"\n            },\n            \"FinalFields\": {\n              \"Flags\": 0,\n              \"Sequence\": 15,\n              \"OwnerCount\": 0,\n              \"Balance\": \"644749860\",\n              \"Account\": \"rpmqbo5FWoydTL2Ufh5YdtzmRjbeLyxt56\"\n            }\n          }\n        },\n        {\n          \"DeletedNode\": {\n            \"LedgerEntryType\": \"Escrow\",\n            \"LedgerIndex\": \"CEE1B7E04519FAEC58F4F440EFE714A91DDE7E83A3599B050ED24E84A598BF46\",\n            \"FinalFields\": {\n              \"Flags\": 0,\n              \"PreviousTxnLgrSeq\": 36480365,\n              \"CancelAfter\": 571621204,\n              \"FinishAfter\": 571620604,\n              \"OwnerNode\": \"0000000000000000\",\n              \"PreviousTxnID\": \"A979AD5C6A6C844913DA51D71BF5F0B8E254D9A211FA837C4B322C4A8FD358E6\",\n              \"Amount\": \"135790000\",\n              \"Account\": \"rpmqbo5FWoydTL2Ufh5YdtzmRjbeLyxt56\",\n              \"Destination\": \"rpmqbo5FWoydTL2Ufh5YdtzmRjbeLyxt56\"\n            }\n          }\n        },\n        {\n          \"ModifiedNode\": {\n            \"LedgerEntryType\": \"DirectoryNode\",\n            \"LedgerIndex\": \"F7DBEAAF43ACF1C656C878489D307A49A31EAF96A41951B00A043D262B4B6717\",\n            \"FinalFields\": {\n              \"Flags\": 0,\n              \"RootIndex\": \"F7DBEAAF43ACF1C656C878489D307A49A31EAF96A41951B00A043D262B4B6717\",\n              \"Owner\": \"rpmqbo5FWoydTL2Ufh5YdtzmRjbeLyxt56\"\n            }\n          }\n        }\n      ],\n      \"TransactionResult\": \"tesSUCCESS\"\n    }\n  },\n  \"EscrowCancel having IOU escrowed\": {\n    \"tx\": {\n      \"Account\": \"rHVkbnz2ZLVUCPugCbLsXbCsayrJARLq1N\",\n      \"Fee\": \"1\",\n      \"Flags\": 0,\n      \"LastLedgerSequence\": 4469279,\n      \"OfferSequence\": 4466553,\n      \"Owner\": \"rDtpgHpsUFu2dHC6fMZnwgZvNEDZ9MG9YK\",\n      \"Sequence\": 4467163,\n      \"SigningPubKey\": \"EDDB3F5BC950C1DBCEB6C9C10B7E70FB333618F944447F1DFD9C2D5543B81A2BCB\",\n      \"TransactionType\": \"EscrowCancel\",\n      \"TxnSignature\": \"67B4B46D599184A9801AA81D05BBBF54C281F0633003370335DDB17D4EEFD87E22EFFBB717CB3920752B102D298F4953B76BB37EA3E273938CECE5EB838C4102\",\n      \"ledger_index\": 4469261,\n      \"ctid\": \"C044320D00010002\",\n      \"date\": 805842921\n    },\n    \"hash\": \"9D43C605A299C3CECD759D640B36B93E6A7E726D2A56261892BDFD7EF4E7B383\",\n    \"meta\": {\n      \"AffectedNodes\": [\n        {\n          \"ModifiedNode\": {\n            \"FinalFields\": {\n              \"Flags\": 0,\n              \"Owner\": \"rHVkbnz2ZLVUCPugCbLsXbCsayrJARLq1N\",\n              \"RootIndex\": \"02968F27FCD2E454F5146A6B5768F55C1FCF659A858265406B7855AD2E364217\"\n            },\n            \"LedgerEntryType\": \"DirectoryNode\",\n            \"LedgerIndex\": \"02968F27FCD2E454F5146A6B5768F55C1FCF659A858265406B7855AD2E364217\",\n            \"PreviousTxnID\": \"CED2D5751FAC5F888686313959A24ABC19BD0D116A0053584FC55B76DBA4A66E\",\n            \"PreviousTxnLgrSeq\": 4469251\n          }\n        },\n        {\n          \"ModifiedNode\": {\n            \"FinalFields\": {\n              \"Flags\": 0,\n              \"Owner\": \"rDtpgHpsUFu2dHC6fMZnwgZvNEDZ9MG9YK\",\n              \"RootIndex\": \"1F882E04D2F24B427C89A1B79A2C26C94A3387CF60228C86E9C027D05FFED1FF\"\n            },\n            \"LedgerEntryType\": \"DirectoryNode\",\n            \"LedgerIndex\": \"1F882E04D2F24B427C89A1B79A2C26C94A3387CF60228C86E9C027D05FFED1FF\",\n            \"PreviousTxnID\": \"CED2D5751FAC5F888686313959A24ABC19BD0D116A0053584FC55B76DBA4A66E\",\n            \"PreviousTxnLgrSeq\": 4469251\n          }\n        },\n        {\n          \"ModifiedNode\": {\n            \"FinalFields\": {\n              \"Flags\": 0,\n              \"Owner\": \"rDb2kD2sibG5cxhz3VAoRFkmhPrca4JtL8\",\n              \"RootIndex\": \"783570F9840AABAE60F077CA184FA9686DAADC12BF3270514C1931CBC0DC8452\"\n            },\n            \"LedgerEntryType\": \"DirectoryNode\",\n            \"LedgerIndex\": \"783570F9840AABAE60F077CA184FA9686DAADC12BF3270514C1931CBC0DC8452\",\n            \"PreviousTxnID\": \"CED2D5751FAC5F888686313959A24ABC19BD0D116A0053584FC55B76DBA4A66E\",\n            \"PreviousTxnLgrSeq\": 4469251\n          }\n        },\n        {\n          \"ModifiedNode\": {\n            \"FinalFields\": {\n              \"Account\": \"rHVkbnz2ZLVUCPugCbLsXbCsayrJARLq1N\",\n              \"Balance\": \"99999996\",\n              \"Flags\": 0,\n              \"OwnerCount\": 3,\n              \"Sequence\": 4467164\n            },\n            \"LedgerEntryType\": \"AccountRoot\",\n            \"LedgerIndex\": \"B9E2BAE404EEADECEE678349CD2639831A6766AE15616F570F5B345868422912\",\n            \"PreviousFields\": {\n              \"Balance\": \"99999997\",\n              \"Sequence\": 4467163\n            },\n            \"PreviousTxnID\": \"CED2D5751FAC5F888686313959A24ABC19BD0D116A0053584FC55B76DBA4A66E\",\n            \"PreviousTxnLgrSeq\": 4469251\n          }\n        },\n        {\n          \"ModifiedNode\": {\n            \"FinalFields\": {\n              \"Account\": \"rDtpgHpsUFu2dHC6fMZnwgZvNEDZ9MG9YK\",\n              \"Balance\": \"99999905\",\n              \"Flags\": 0,\n              \"OwnerCount\": 13,\n              \"Sequence\": 4466554\n            },\n            \"LedgerEntryType\": \"AccountRoot\",\n            \"LedgerIndex\": \"C1F036A2B38438CE1D39AC1ED3682CE46703352616B6EA8853F4FB25F4684313\",\n            \"PreviousFields\": {\n              \"OwnerCount\": 14\n            },\n            \"PreviousTxnID\": \"CED2D5751FAC5F888686313959A24ABC19BD0D116A0053584FC55B76DBA4A66E\",\n            \"PreviousTxnLgrSeq\": 4469251\n          }\n        },\n        {\n          \"ModifiedNode\": {\n            \"FinalFields\": {\n              \"Balance\": {\n                \"currency\": \"ZZZ\",\n                \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n                \"value\": \"-199\"\n              },\n              \"Flags\": 131072,\n              \"HighLimit\": {\n                \"currency\": \"ZZZ\",\n                \"issuer\": \"rDtpgHpsUFu2dHC6fMZnwgZvNEDZ9MG9YK\",\n                \"value\": \"10000\"\n              },\n              \"HighNode\": \"0\",\n              \"LowLimit\": {\n                \"currency\": \"ZZZ\",\n                \"issuer\": \"rDb2kD2sibG5cxhz3VAoRFkmhPrca4JtL8\",\n                \"value\": \"0\"\n              },\n              \"LowNode\": \"0\"\n            },\n            \"LedgerEntryType\": \"RippleState\",\n            \"LedgerIndex\": \"E7B74BC26326DB0B953AB9460915820DFE99A33C3585C4988030627F68BB5A54\",\n            \"PreviousFields\": {\n              \"Balance\": {\n                \"currency\": \"ZZZ\",\n                \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n                \"value\": \"-198\"\n              }\n            },\n            \"PreviousTxnID\": \"CED2D5751FAC5F888686313959A24ABC19BD0D116A0053584FC55B76DBA4A66E\",\n            \"PreviousTxnLgrSeq\": 4469251\n          }\n        },\n        {\n          \"DeletedNode\": {\n            \"FinalFields\": {\n              \"Account\": \"rDtpgHpsUFu2dHC6fMZnwgZvNEDZ9MG9YK\",\n              \"Amount\": {\n                \"currency\": \"ZZZ\",\n                \"issuer\": \"rDb2kD2sibG5cxhz3VAoRFkmhPrca4JtL8\",\n                \"value\": \"1\"\n              },\n              \"CancelAfter\": 805842907,\n              \"Destination\": \"rHVkbnz2ZLVUCPugCbLsXbCsayrJARLq1N\",\n              \"DestinationNode\": \"0\",\n              \"FinishAfter\": 805842897,\n              \"Flags\": 0,\n              \"IssuerNode\": \"0\",\n              \"OwnerNode\": \"0\",\n              \"PreviousTxnID\": \"CED2D5751FAC5F888686313959A24ABC19BD0D116A0053584FC55B76DBA4A66E\",\n              \"PreviousTxnLgrSeq\": 4469251\n            },\n            \"LedgerEntryType\": \"Escrow\",\n            \"LedgerIndex\": \"EF540EC5CBCDF5CB3929C96CC540FC5856EF07AB9AF98F6C9BEBB30F0262D75F\"\n          }\n        }\n      ],\n      \"TransactionIndex\": 1,\n      \"TransactionResult\": \"tesSUCCESS\"\n    }\n  },\n  \"EscrowCancel having MPT escrowed\": {\n    \"tx\": {\n      \"Account\": \"rHVkbnz2ZLVUCPugCbLsXbCsayrJARLq1N\",\n      \"Fee\": \"1\",\n      \"Flags\": 0,\n      \"LastLedgerSequence\": 4658119,\n      \"OfferSequence\": 4571215,\n      \"Owner\": \"r4ipomC348PqM2rGSBmhfRPXUH6CzKS1XJ\",\n      \"Sequence\": 4467171,\n      \"SigningPubKey\": \"EDDB3F5BC950C1DBCEB6C9C10B7E70FB333618F944447F1DFD9C2D5543B81A2BCB\",\n      \"TransactionType\": \"EscrowCancel\",\n      \"TxnSignature\": \"C975905200023AD738F36AD22E8E40F51F7F3FDD53CE51E329F75115944870FD7FA600447F81705CB654EFDB0E4C307CDCA91AF2EADC261196892D089BF7C401\",\n      \"ledger_index\": 4658101,\n      \"ctid\": \"C04713B500000002\",\n      \"date\": 806433870\n    },\n    \"hash\": \"2000465DF9C919F6459948BE857B0391467B110F10AAD9663BBCE91F6BE63E9A\",\n    \"meta\": {\n      \"AffectedNodes\": [\n        {\n          \"ModifiedNode\": {\n            \"FinalFields\": {\n              \"Flags\": 0,\n              \"Owner\": \"rHVkbnz2ZLVUCPugCbLsXbCsayrJARLq1N\",\n              \"RootIndex\": \"02968F27FCD2E454F5146A6B5768F55C1FCF659A858265406B7855AD2E364217\"\n            },\n            \"LedgerEntryType\": \"DirectoryNode\",\n            \"LedgerIndex\": \"02968F27FCD2E454F5146A6B5768F55C1FCF659A858265406B7855AD2E364217\",\n            \"PreviousTxnID\": \"6DB0332DF41321922F831129DA8EF753684D3140638A79A5621A44701D4742D4\",\n            \"PreviousTxnLgrSeq\": 4658091\n          }\n        },\n        {\n          \"DeletedNode\": {\n            \"FinalFields\": {\n              \"Account\": \"r4ipomC348PqM2rGSBmhfRPXUH6CzKS1XJ\",\n              \"Amount\": {\n                \"mpt_issuance_id\": \"0044E49BC9FB70ADC1A604A5792643A38CA5887219C21C8C\",\n                \"value\": \"1\"\n              },\n              \"CancelAfter\": 806433853,\n              \"Destination\": \"rHVkbnz2ZLVUCPugCbLsXbCsayrJARLq1N\",\n              \"DestinationNode\": \"0\",\n              \"FinishAfter\": 806433843,\n              \"Flags\": 0,\n              \"OwnerNode\": \"0\",\n              \"PreviousTxnID\": \"6DB0332DF41321922F831129DA8EF753684D3140638A79A5621A44701D4742D4\",\n              \"PreviousTxnLgrSeq\": 4658091\n            },\n            \"LedgerEntryType\": \"Escrow\",\n            \"LedgerIndex\": \"136AB4073D6E889AE556BEA67731648EAB724C16549B6BA83398D3B9C3159950\"\n          }\n        },\n        {\n          \"ModifiedNode\": {\n            \"FinalFields\": {\n              \"Account\": \"r4ipomC348PqM2rGSBmhfRPXUH6CzKS1XJ\",\n              \"Flags\": 0,\n              \"MPTAmount\": \"100\",\n              \"MPTokenIssuanceID\": \"0044E49BC9FB70ADC1A604A5792643A38CA5887219C21C8C\",\n              \"OwnerNode\": \"0\"\n            },\n            \"LedgerEntryType\": \"MPToken\",\n            \"LedgerIndex\": \"69C278A3CE041CF57612AC9098DA8317CB8C2B62F50392C82F376F5A33A25C4F\",\n            \"PreviousFields\": {\n              \"LockedAmount\": \"1\",\n              \"MPTAmount\": \"99\"\n            },\n            \"PreviousTxnID\": \"6DB0332DF41321922F831129DA8EF753684D3140638A79A5621A44701D4742D4\",\n            \"PreviousTxnLgrSeq\": 4658091\n          }\n        },\n        {\n          \"ModifiedNode\": {\n            \"FinalFields\": {\n              \"Flags\": 40,\n              \"Issuer\": \"rKQzpv6jvPeRSULjdwWZgiCZEUNpkSXzYH\",\n              \"MaximumAmount\": \"50000000\",\n              \"OutstandingAmount\": \"100\",\n              \"OwnerNode\": \"0\",\n              \"Sequence\": 4514971\n            },\n            \"LedgerEntryType\": \"MPTokenIssuance\",\n            \"LedgerIndex\": \"7EFCE3347922F755E953AC92B765F12B817A397EBC536854FB88298F219840E9\",\n            \"PreviousFields\": {\n              \"LockedAmount\": \"1\"\n            },\n            \"PreviousTxnID\": \"6DB0332DF41321922F831129DA8EF753684D3140638A79A5621A44701D4742D4\",\n            \"PreviousTxnLgrSeq\": 4658091\n          }\n        },\n        {\n          \"ModifiedNode\": {\n            \"FinalFields\": {\n              \"Account\": \"r4ipomC348PqM2rGSBmhfRPXUH6CzKS1XJ\",\n              \"Balance\": \"99999993\",\n              \"Flags\": 0,\n              \"OwnerCount\": 6,\n              \"Sequence\": 4571216\n            },\n            \"LedgerEntryType\": \"AccountRoot\",\n            \"LedgerIndex\": \"9A94AD7404B4ABD0492C51225B67A6F1F75BF34B0A050EF7305A169D6BD30A15\",\n            \"PreviousFields\": {\n              \"OwnerCount\": 7\n            },\n            \"PreviousTxnID\": \"6DB0332DF41321922F831129DA8EF753684D3140638A79A5621A44701D4742D4\",\n            \"PreviousTxnLgrSeq\": 4658091\n          }\n        },\n        {\n          \"ModifiedNode\": {\n            \"FinalFields\": {\n              \"Flags\": 0,\n              \"Owner\": \"r4ipomC348PqM2rGSBmhfRPXUH6CzKS1XJ\",\n              \"RootIndex\": \"A3BB6ADAAF6BFFE8D5B2F4EF091E665956B8503FE93CF0123A9EE78A332A3B03\"\n            },\n            \"LedgerEntryType\": \"DirectoryNode\",\n            \"LedgerIndex\": \"A3BB6ADAAF6BFFE8D5B2F4EF091E665956B8503FE93CF0123A9EE78A332A3B03\",\n            \"PreviousTxnID\": \"6DB0332DF41321922F831129DA8EF753684D3140638A79A5621A44701D4742D4\",\n            \"PreviousTxnLgrSeq\": 4658091\n          }\n        },\n        {\n          \"ModifiedNode\": {\n            \"FinalFields\": {\n              \"Account\": \"rHVkbnz2ZLVUCPugCbLsXbCsayrJARLq1N\",\n              \"Balance\": \"99999988\",\n              \"Flags\": 0,\n              \"OwnerCount\": 7,\n              \"Sequence\": 4467172\n            },\n            \"LedgerEntryType\": \"AccountRoot\",\n            \"LedgerIndex\": \"B9E2BAE404EEADECEE678349CD2639831A6766AE15616F570F5B345868422912\",\n            \"PreviousFields\": {\n              \"Balance\": \"99999989\",\n              \"Sequence\": 4467171\n            },\n            \"PreviousTxnID\": \"6DB0332DF41321922F831129DA8EF753684D3140638A79A5621A44701D4742D4\",\n            \"PreviousTxnLgrSeq\": 4658091\n          }\n        }\n      ],\n      \"TransactionIndex\": 0,\n      \"TransactionResult\": \"tesSUCCESS\"\n    },\n    \"validated\": true,\n    \"ledger_index\": 4658101,\n    \"ledger_hash\": \"DCE739424F1DF8313DBFFAA80EE521F8487961F7CF886B46713B35BBF7DC7155\",\n    \"close_time_iso\": \"2025-07-21T17:24:30Z\",\n    \"ctid\": \"C04713B500000002\"\n  }\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/EscrowCreate/Description.tsx",
    "content": "import { useTranslation, Trans } from 'react-i18next'\nimport type { EscrowCreate } from 'xrpl'\nimport { DATE_OPTIONS } from '../../../transactionUtils'\nimport { Account } from '../../Account'\nimport { localizeDate } from '../../../utils'\nimport {\n  TransactionDescriptionComponent,\n  TransactionDescriptionProps,\n} from '../types'\nimport { convertRippleDate } from '../../../../../rippled/lib/convertRippleDate'\nimport { Amount } from '../../Amount'\nimport { formatAmount } from '../../../../../rippled/lib/txSummary/formatAmount'\n\nconst Description: TransactionDescriptionComponent = (\n  props: TransactionDescriptionProps<EscrowCreate>,\n) => {\n  const { t, i18n } = useTranslation()\n  const language = i18n.resolvedLanguage\n  const { data } = props\n\n  const formatDate = (time: number) =>\n    `${localizeDate(convertRippleDate(time), language, DATE_OPTIONS)} ${\n      DATE_OPTIONS.timeZone\n    }`\n\n  return (\n    <>\n      {data.tx.Destination !== data.tx.Account ? (\n        <Trans i18nKey=\"escrow_is_from\">\n          The escrow is from\n          <Account account={data.tx.Account} />\n          to\n          <Account account={data.tx.Destination} />\n        </Trans>\n      ) : (\n        <Trans i18nKey=\"escrow_is_created_by\">\n          the escrow was created by\n          <Account account={data.tx.Account} />\n          and the funds will be returned to the same account\n        </Trans>\n      )}\n      {data.tx.Condition && (\n        <div>\n          {t('escrow_condition')}\n          <span className=\"condition\"> {data.tx.Condition}</span>\n        </div>\n      )}\n      <div data-testid=\"amount-line\">\n        {t('escrowed_amount')}\n        <b>\n          {' '}\n          <Amount value={formatAmount(data.tx.Amount)} />\n        </b>\n      </div>\n      {data.tx.CancelAfter && (\n        <div>\n          {t('describe_cancel_after')}\n          <span className=\"time\"> {formatDate(data.tx.CancelAfter)}</span>\n        </div>\n      )}\n      {data.tx.FinishAfter && (\n        <div>\n          {t('describe_finish_after')}\n          <span className=\"time\"> {formatDate(data.tx.FinishAfter)}</span>\n        </div>\n      )}\n    </>\n  )\n}\nexport { Description }\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/EscrowCreate/Simple.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { Account } from '../../Account'\nimport { TransactionSimpleComponent, TransactionSimpleProps } from '../types'\nimport { SimpleRow } from '../SimpleRow'\nimport { Amount } from '../../Amount'\nimport { useLanguage } from '../../../hooks'\nimport { localizeDate } from '../../../utils'\nimport { DATE_OPTIONS } from '../../../transactionUtils'\n\nconst Simple: TransactionSimpleComponent = (props: TransactionSimpleProps) => {\n  const { t } = useTranslation()\n  const language = useLanguage()\n  const { data } = props\n  const {\n    amount,\n    destination,\n    condition,\n    finishAfter,\n    cancelAfter,\n    finishFunction,\n    escrowData,\n  } = data.instructions\n  const caDate = cancelAfter\n    ? localizeDate(new Date(cancelAfter), language, DATE_OPTIONS)\n    : null\n  const faDate = finishAfter\n    ? localizeDate(new Date(finishAfter), language, DATE_OPTIONS)\n    : null\n\n  return (\n    <>\n      <SimpleRow label={t('escrow')} data-testid=\"escrow-amount\">\n        <Amount value={amount} />\n      </SimpleRow>\n      {destination && (\n        <SimpleRow label={t('destination')} data-testid=\"escrow-destination\">\n          <Account account={destination} />\n        </SimpleRow>\n      )}\n      {condition && (\n        <SimpleRow label={t('condition')} data-testid=\"escrow-condition\">\n          {condition}\n        </SimpleRow>\n      )}\n      {cancelAfter && (\n        <SimpleRow label={t('cancel_after')}>\n          {caDate} {DATE_OPTIONS.timeZone}\n        </SimpleRow>\n      )}\n      {finishAfter && (\n        <SimpleRow label={t('finish_after')}>\n          {faDate} {DATE_OPTIONS.timeZone}\n        </SimpleRow>\n      )}\n      {finishFunction && (\n        <SimpleRow\n          label={t('finish_function')}\n          data-testid=\"escrow-finish-function\"\n          className=\"text-truncate\"\n        >\n          {finishFunction}\n        </SimpleRow>\n      )}\n      {escrowData && (\n        <SimpleRow label={t('data')} data-testid=\"escrow-data\">\n          {escrowData}\n        </SimpleRow>\n      )}\n    </>\n  )\n}\n\nexport { Simple }\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/EscrowCreate/TableDetail.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { Amount } from '../../Amount'\nimport { localizeDate } from '../../../utils'\nimport { DATE_OPTIONS } from '../../../transactionUtils'\nimport { useLanguage } from '../../../hooks'\n\nexport const TableDetail = (props: any) => {\n  const { t } = useTranslation()\n  const { instructions } = props\n  const language = useLanguage()\n  const { amount, destination, finishAfter, cancelAfter, condition } =\n    instructions\n  return (\n    <div className=\"escrow\">\n      {amount && (\n        <div>\n          <span className=\"label\">{t('amount')}</span>\n          <Amount value={amount} data-testid=\"amount-line\" />\n        </div>\n      )}\n      {destination && (\n        <div>\n          <span className=\"label\">{t('destination')}</span>\n          <span className=\"account\" data-testid=\"account\">\n            {' '}\n            {destination}{' '}\n          </span>\n        </div>\n      )}\n      {condition && (\n        <div>\n          <span className=\"label\">{t('condition')}</span>\n          <span className=\"condition\" data-testid=\"condition\">\n            {' '}\n            {condition}{' '}\n          </span>\n        </div>\n      )}\n      {finishAfter && (\n        <div>\n          <span className=\"label\">{t('finish_after')}</span>\n          <span data-testid=\"finish_after\">\n            {localizeDate(new Date(finishAfter), language, DATE_OPTIONS)} UTC\n          </span>\n        </div>\n      )}\n      {cancelAfter && (\n        <div>\n          <span className=\"label\">{t('cancel_after')}</span>\n          <span data-testid=\"cancel_after\">\n            {localizeDate(new Date(cancelAfter), language, DATE_OPTIONS)} UTC\n          </span>\n        </div>\n      )}\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/EscrowCreate/index.ts",
    "content": "import {\n  TransactionAction,\n  TransactionCategory,\n  TransactionMapping,\n} from '../types'\nimport { Simple } from './Simple'\nimport { Description } from './Description'\nimport { parser } from './parser'\nimport { TableDetail } from './TableDetail'\n\nexport const EscrowCreateTransaction: TransactionMapping = {\n  Description,\n  Simple,\n  TableDetail,\n  action: TransactionAction.CREATE,\n  category: TransactionCategory.PAYMENT,\n  parser,\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/EscrowCreate/parser.ts",
    "content": "import type { EscrowCreate } from 'xrpl'\nimport { formatAmount } from '../../../../../rippled/lib/txSummary/formatAmount'\nimport { convertRippleDate } from '../../../../../rippled/lib/convertRippleDate'\n\nexport function parser(tx: EscrowCreate) {\n  return {\n    amount: formatAmount(tx.Amount),\n    destination: tx.Destination !== tx.Account ? tx.Destination : undefined,\n    condition: tx.Condition,\n    cancelAfter: tx.CancelAfter ? convertRippleDate(tx.CancelAfter) : undefined,\n    finishAfter: tx.FinishAfter ? convertRippleDate(tx.FinishAfter) : undefined,\n    finishFunction: tx.FinishFunction,\n    escrowData: tx.Data,\n  }\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/EscrowCreate/test/EscrowCreateDescription.test.tsx",
    "content": "import { useQuery } from 'react-query'\nimport i18n from '../../../../../../i18n/testConfigEnglish'\nimport mockEscrowCreateTests from './mock_data/EscrowCreate.json'\nimport { Description } from '../Description'\nimport { createDescriptionRenderFactory } from '../../test'\n\njest.mock('react-query', () => ({\n  ...jest.requireActual('react-query'),\n  useQuery: jest.fn(),\n}))\n\nconst renderComponent = createDescriptionRenderFactory(Description, i18n)\n\nfunction getTestByName(name: string) {\n  return mockEscrowCreateTests[name]\n}\n\ndescribe('EscrowCreateDescription', () => {\n  it('renders description for EscrowCreate', () => {\n    const { container, unmount } = renderComponent(\n      getTestByName('renders EscrowCreate'),\n    )\n    expect(container.innerHTML).toBe(\n      'The escrow is from <a data-testid=\"account\" title=\"rLbgNAngLq3HABBXK4uPGCHrqeZwgaYi8q\" class=\"account\" href=\"/accounts/rLbgNAngLq3HABBXK4uPGCHrqeZwgaYi8q\" data-discover=\"true\">rLbgNAngLq3HABBXK4uPGCHrqeZwgaYi8q</a> to <a data-testid=\"account\" title=\"rLbgNAngLq3HABBXK4uPGCHrqeZwgaYi7q\" class=\"account\" href=\"/accounts/rLbgNAngLq3HABBXK4uPGCHrqeZwgaYi7q\" data-discover=\"true\">rLbgNAngLq3HABBXK4uPGCHrqeZwgaYi7q</a><div>The escrow has a fulfillment condition of<span class=\"condition\"> A0258020886F982742772F414243855DC13B348FC78FB3D5119412C8A6480114E36A4451810120</span></div><div data-testid=\"amount-line\">It escrowed<b> <span class=\"amount\" data-testid=\"amount\"><span class=\"amount-localized\" data-testid=\"amount-localized\">997.50</span> <span class=\"currency\" data-testid=\"currency\">XRP</span></span></b></div><div>It can be cancelled after<span class=\"time\"> March 1, 2020 at 8:54:20 AM UTC</span></div><div>It can be finished after<span class=\"time\"> March 1, 2020 at 9:01:00 AM UTC</span></div>',\n    )\n    unmount()\n  })\n\n  it('test XRP amount', () => {\n    const { container, unmount } = renderComponent(\n      getTestByName('renders EscrowCreate'),\n    )\n    expect(\n      container.querySelector('[data-testid=\"amount-line\"]'),\n    ).toHaveTextContent(`It escrowed \\uE900997.50 XRP`)\n\n    unmount()\n  })\n\n  it('test IOU amount', () => {\n    const { container, unmount } = renderComponent(\n      getTestByName('test IOU amount'),\n    )\n    expect(\n      container.querySelector('[data-testid=\"amount-line\"]'),\n    ).toHaveTextContent(\n      `It escrowed 1.00 ZZZ.rDb2kD2sibG5cxhz3VAoRFkmhPrca4JtL8`,\n    )\n\n    unmount()\n  })\n\n  it('test MPT amount', () => {\n    const data = {\n      assetScale: 4,\n    }\n\n    // @ts-ignore\n    useQuery.mockImplementation(() => ({\n      data,\n    }))\n\n    const { container, unmount } = renderComponent(\n      getTestByName('test MPT amount'),\n    )\n    expect(\n      container.querySelector('[data-testid=\"amount-line\"]'),\n    ).toHaveTextContent(\n      `It escrowed 0.0001 0044E48FC9FB70ADC1A604A5792643A38CA5887219C21C8C`,\n    )\n\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/EscrowCreate/test/EscrowCreateSimple.test.tsx",
    "content": "import { useQuery } from 'react-query'\nimport { Simple } from '../Simple'\nimport mockEscrowCreateTests from './mock_data/EscrowCreate.json'\nimport mockEscrowCreateFinishFunction from './mock_data/EscrowCreateFinishFunction.json'\nimport { createSimpleRenderFactory } from '../../test/createWrapperFactory'\n\njest.mock('react-query', () => ({\n  ...jest.requireActual('react-query'),\n  useQuery: jest.fn(),\n}))\n\nconst renderComponent = createSimpleRenderFactory(Simple)\n\nfunction getTestByName(name: string) {\n  return mockEscrowCreateTests[name]\n}\n\ndescribe('EscrowCreateSimple', () => {\n  it('renders with an expiration and offer', () => {\n    const { container, unmount } = renderComponent(\n      getTestByName('renders EscrowCreate'),\n    )\n    expect(\n      container.querySelector('[data-testid=\"escrow-amount\"] .value'),\n    ).toHaveTextContent('\\uE900997.50 XRP')\n    expect(\n      container.querySelector('[data-testid=\"escrow-destination\"] .value'),\n    ).toHaveTextContent('rLbgNAngLq3HABBXK4uPGCHrqeZwgaYi7q')\n    expect(\n      container.querySelector('[data-testid=\"escrow-condition\"] .value'),\n    ).toHaveTextContent(\n      'A0258020886F982742772F414243855DC13B348FC78FB3D5119412C8A6480114E36A4451810120',\n    )\n    unmount()\n  })\n\n  it('renders with a smart escrow', () => {\n    const { container, unmount } = renderComponent(\n      mockEscrowCreateFinishFunction,\n    )\n    expect(\n      container.querySelector('[data-testid=\"escrow-amount\"] .value'),\n    ).toHaveTextContent('\\uE9000.10 XRP')\n    expect(\n      container.querySelector('[data-testid=\"escrow-destination\"] .value'),\n    ).toHaveTextContent('rQE6iDVinSGsk9jdGS8rbwHste1VkhyCo6')\n    expect(\n      container.querySelector('[data-testid=\"escrow-finish-function\"] .value'),\n    ).toHaveTextContent(\n      '0061736D0100000001690F60037F7F7F017F60027F7F017F60017F0060027F7F0060057F7F7F7F' +\n        '7F017F6000017F60037E7F7F017F60057F7F7F7F7F0060037F7F7F0060067F7F7F7F7F7F017F' +\n        '600B7F7F7F7F7F7F7F7F7F7F7F017F60017F017F60047F7F7F7F0060000060057F7E7E7E7E00' +\n        '028C010508686F73745F6C6962057072696E74000308686F73745F6C69620A67657454784669' +\n        '656C64000108686F73745F6C69621A67657443757272656E744C6564676572456E7472794669' +\n        '656C64000108686F73745F6C6962136765744C6564676572456E7472794669656C6400040868' +\n        '6F73745F6C696213676574506172656E744C656467657254696D650005035453020',\n    )\n    expect(\n      container.querySelector('[data-testid=\"escrow-data\"] .value'),\n    ).toHaveTextContent('70000000')\n    unmount()\n  })\n\n  it('test XRP amount', () => {\n    const { container, unmount } = renderComponent(\n      getTestByName('renders EscrowCreate'),\n    )\n    expect(\n      container.querySelector('[data-testid=\"escrow-amount\"] .value'),\n    ).toHaveTextContent(`\\uE900997.50 XRP`)\n\n    unmount()\n  })\n\n  it('test IOU amount', () => {\n    const { container, unmount } = renderComponent(\n      getTestByName('test IOU amount'),\n    )\n    expect(\n      container.querySelector('[data-testid=\"escrow-amount\"] .value'),\n    ).toHaveTextContent('1.00 ZZZ.rDb2kD2sibG5cxhz3VAoRFkmhPrca4JtL8')\n    unmount()\n  })\n\n  it('test MPT amount', () => {\n    const data = {\n      assetScale: 4,\n    }\n\n    // @ts-ignore\n    useQuery.mockImplementation(() => ({\n      data,\n    }))\n\n    const { container, unmount } = renderComponent(\n      getTestByName('test MPT amount'),\n    )\n    expect(\n      container.querySelector('[data-testid=\"escrow-amount\"] .value'),\n    ).toHaveTextContent(\n      '0.0001 0044E48FC9FB70ADC1A604A5792643A38CA5887219C21C8C',\n    )\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/EscrowCreate/test/EscrowCreateTableDetail.test.tsx",
    "content": "import { useQuery } from 'react-query'\nimport { createTableDetailRenderFactory } from '../../test'\nimport { TableDetail } from '../TableDetail'\nimport i18n from '../../../../../../i18n/testConfigEnglish'\nimport mockEscrowCreate from './mock_data/EscrowCreate.json'\n\nconst renderComponent = createTableDetailRenderFactory(TableDetail, i18n)\n\njest.mock('react-query', () => ({\n  ...jest.requireActual('react-query'),\n  useQuery: jest.fn(),\n}))\n\nfunction getTestByName(name: string) {\n  return mockEscrowCreate[name]\n}\n\ndescribe('EscrowCreateTableDetail', () => {\n  it('renders EscrowCreate without crashing', () => {\n    const { container, unmount } = renderComponent(\n      getTestByName('renders EscrowCreate'),\n    )\n    expect(\n      container.querySelector('[data-testid=\"account\"]'),\n    ).toHaveTextContent('rLbgNAngLq3HABBXK4uPGCHrqeZwgaYi7q')\n    expect(container.querySelector('[data-testid=\"amount\"]')).toHaveTextContent(\n      `997.50 XRP`,\n    )\n    expect(\n      container.querySelector('[data-testid=\"condition\"]'),\n    ).toHaveTextContent(\n      'A0258020886F982742772F414243855DC13B348FC78FB3D5119412C8A6480114E36A4451810120',\n    )\n    expect(\n      container.querySelector('[data-testid=\"finish_after\"]'),\n    ).toHaveTextContent(`March 1, 2020 at 9:01:00 AM UTC`)\n    expect(\n      container.querySelector('[data-testid=\"cancel_after\"]'),\n    ).toHaveTextContent(`March 1, 2020 at 8:54:20 AM UTC`)\n\n    unmount()\n  })\n\n  it('test XRP amount', () => {\n    const { container, unmount } = renderComponent(\n      getTestByName('renders EscrowCreate'),\n    )\n    expect(container.querySelector('[data-testid=\"amount\"]')).toHaveTextContent(\n      `\\uE900997.50 XRP`,\n    )\n\n    unmount()\n  })\n\n  it('test IOU amount', () => {\n    const { container, unmount } = renderComponent(\n      getTestByName('test IOU amount'),\n    )\n    expect(container.querySelector('[data-testid=\"amount\"]')).toHaveTextContent(\n      `1.00 ZZZ.rDb2kD2sibG5cxhz3VAoRFkmhPrca4JtL8`,\n    )\n\n    unmount()\n  })\n\n  it('test MPT amount', () => {\n    const data = {\n      assetScale: 4,\n    }\n\n    // @ts-ignore\n    useQuery.mockImplementation(() => ({\n      data,\n    }))\n\n    const { container, unmount } = renderComponent(\n      getTestByName('test MPT amount'),\n    )\n    expect(container.querySelector('[data-testid=\"amount\"]')).toHaveTextContent(\n      `0.0001 0044E48FC9FB70ADC1A604A5792643A38CA5887219C21C8C`,\n    )\n\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/EscrowCreate/test/mock_data/EscrowCreate.json",
    "content": "{\n  \"renders EscrowCreate\": {\n    \"hash\": \"27D43BD746193512ABD670DBE9C646F341BDCEDB0741CF862F64190E2851CAD1\",\n    \"ledger_index\": 37471281,\n    \"date\": \"2018-03-25T04:10:21+00:00\",\n    \"tx\": {\n      \"TransactionType\": \"EscrowCreate\",\n      \"Flags\": 2147483648,\n      \"Sequence\": 104,\n      \"FinishAfter\": 636368460,\n      \"CancelAfter\": 636368060,\n      \"Amount\": \"997500000\",\n      \"Fee\": \"10\",\n      \"SigningPubKey\": \"02D4BAE5988733A2BEA96021337CA85F0056D9AA47BCF0E16E0E527A0A28DB100D\",\n      \"TxnSignature\": \"30440220286F11B955EF4CA3A033503DC2C8E42F259A6A3A196E362453EFBB04F8ABF62902204998A8A74EDB142456E673345AB7ABB7A36506D6C8E5694B5D707108991C32C4\",\n      \"Condition\": \"A0258020886F982742772F414243855DC13B348FC78FB3D5119412C8A6480114E36A4451810120\",\n      \"Account\": \"rLbgNAngLq3HABBXK4uPGCHrqeZwgaYi8q\",\n      \"Destination\": \"rLbgNAngLq3HABBXK4uPGCHrqeZwgaYi7q\",\n      \"Memos\": [\n        {\n          \"Memo\": {\n            \"MemoType\": \"687474703A2F2F6578616D706C652E636F6D2F6D656D6F2F67656E65726963\",\n            \"MemoData\": \"\"\n          }\n        }\n      ]\n    },\n    \"meta\": {\n      \"TransactionIndex\": 7,\n      \"AffectedNodes\": [\n        {\n          \"ModifiedNode\": {\n            \"LedgerEntryType\": \"DirectoryNode\",\n            \"LedgerIndex\": \"190D286E5687F825EA226482C56EB967011B258AB1F5B8F5028534E5030CA6B8\",\n            \"FinalFields\": {\n              \"Flags\": 0,\n              \"RootIndex\": \"190D286E5687F825EA226482C56EB967011B258AB1F5B8F5028534E5030CA6B8\",\n              \"Owner\": \"rLbgNAngLq3HABBXK4uPGCHrqeZwgaYi8q\"\n            }\n          }\n        },\n        {\n          \"CreatedNode\": {\n            \"LedgerEntryType\": \"Escrow\",\n            \"LedgerIndex\": \"949D6E2DC8878166D6043348067D4672340C9710E950286E89D8385081B64C72\",\n            \"NewFields\": {\n              \"FinishAfter\": 636368460,\n              \"Amount\": \"997500000\",\n              \"Condition\": \"A0258020886F982742772F414243855DC13B348FC78FB3D5119412C8A6480114E36A4451810120\",\n              \"Account\": \"rLbgNAngLq3HABBXK4uPGCHrqeZwgaYi8q\",\n              \"Destination\": \"rLbgNAngLq3HABBXK4uPGCHrqeZwgaYi8q\"\n            }\n          }\n        },\n        {\n          \"ModifiedNode\": {\n            \"LedgerEntryType\": \"AccountRoot\",\n            \"PreviousTxnLgrSeq\": 37471281,\n            \"PreviousTxnID\": \"81D8CE5B4489301E2906632250D05B429F1849CC69F14F205C23C0E142C12B33\",\n            \"LedgerIndex\": \"BEAB548BF4AA0ED98E8DD381D566A56C35C20B49A4E9B1A10A7F334B0B50CB4C\",\n            \"PreviousFields\": {\n              \"Sequence\": 104,\n              \"OwnerCount\": 25,\n              \"Balance\": \"8132542897\"\n            },\n            \"FinalFields\": {\n              \"Flags\": 0,\n              \"Sequence\": 105,\n              \"OwnerCount\": 26,\n              \"Balance\": \"7135042887\",\n              \"Account\": \"rLbgNAngLq3HABBXK4uPGCHrqeZwgaYi8q\"\n            }\n          }\n        }\n      ],\n      \"TransactionResult\": \"tesSUCCESS\"\n    }\n  },\n  \"test IOU amount\": {\n    \"close_time_iso\": \"2025-07-14T21:14:51Z\",\n    \"ctid\": \"C044320300000002\",\n    \"hash\": \"CED2D5751FAC5F888686313959A24ABC19BD0D116A0053584FC55B76DBA4A66E\",\n    \"ledger_hash\": \"76CDF005DBC80DDF35BA9549694A57B777091E0425740F7CA70BBD2267F2BF59\",\n    \"ledger_index\": 4469251,\n    \"meta\": {\n      \"AffectedNodes\": [\n        {\n          \"ModifiedNode\": {\n            \"FinalFields\": {\n              \"Flags\": 0,\n              \"Owner\": \"rHVkbnz2ZLVUCPugCbLsXbCsayrJARLq1N\",\n              \"RootIndex\": \"02968F27FCD2E454F5146A6B5768F55C1FCF659A858265406B7855AD2E364217\"\n            },\n            \"LedgerEntryType\": \"DirectoryNode\",\n            \"LedgerIndex\": \"02968F27FCD2E454F5146A6B5768F55C1FCF659A858265406B7855AD2E364217\",\n            \"PreviousTxnID\": \"5D39379E6FD59BB84FA908AFC032271894E25FC65DBAE465B05A5EECA65B01FC\",\n            \"PreviousTxnLgrSeq\": 4469174\n          }\n        },\n        {\n          \"ModifiedNode\": {\n            \"FinalFields\": {\n              \"Flags\": 0,\n              \"Owner\": \"rDtpgHpsUFu2dHC6fMZnwgZvNEDZ9MG9YK\",\n              \"RootIndex\": \"1F882E04D2F24B427C89A1B79A2C26C94A3387CF60228C86E9C027D05FFED1FF\"\n            },\n            \"LedgerEntryType\": \"DirectoryNode\",\n            \"LedgerIndex\": \"1F882E04D2F24B427C89A1B79A2C26C94A3387CF60228C86E9C027D05FFED1FF\",\n            \"PreviousTxnID\": \"5D39379E6FD59BB84FA908AFC032271894E25FC65DBAE465B05A5EECA65B01FC\",\n            \"PreviousTxnLgrSeq\": 4469174\n          }\n        },\n        {\n          \"ModifiedNode\": {\n            \"FinalFields\": {\n              \"Flags\": 0,\n              \"Owner\": \"rDb2kD2sibG5cxhz3VAoRFkmhPrca4JtL8\",\n              \"RootIndex\": \"783570F9840AABAE60F077CA184FA9686DAADC12BF3270514C1931CBC0DC8452\"\n            },\n            \"LedgerEntryType\": \"DirectoryNode\",\n            \"LedgerIndex\": \"783570F9840AABAE60F077CA184FA9686DAADC12BF3270514C1931CBC0DC8452\",\n            \"PreviousTxnID\": \"5D39379E6FD59BB84FA908AFC032271894E25FC65DBAE465B05A5EECA65B01FC\",\n            \"PreviousTxnLgrSeq\": 4469174\n          }\n        },\n        {\n          \"ModifiedNode\": {\n            \"LedgerEntryType\": \"AccountRoot\",\n            \"LedgerIndex\": \"B9E2BAE404EEADECEE678349CD2639831A6766AE15616F570F5B345868422912\",\n            \"PreviousTxnID\": \"CDA69D793C0758BFEF64BA4FF8FBECE6890F43BFCDBC869755A13EA410CC03BE\",\n            \"PreviousTxnLgrSeq\": 4469245\n          }\n        },\n        {\n          \"ModifiedNode\": {\n            \"FinalFields\": {\n              \"Account\": \"rDtpgHpsUFu2dHC6fMZnwgZvNEDZ9MG9YK\",\n              \"Balance\": \"99999905\",\n              \"Flags\": 0,\n              \"OwnerCount\": 14,\n              \"Sequence\": 4466554\n            },\n            \"LedgerEntryType\": \"AccountRoot\",\n            \"LedgerIndex\": \"C1F036A2B38438CE1D39AC1ED3682CE46703352616B6EA8853F4FB25F4684313\",\n            \"PreviousFields\": {\n              \"Balance\": \"99999906\",\n              \"OwnerCount\": 13,\n              \"Sequence\": 4466553\n            },\n            \"PreviousTxnID\": \"7C99CE7343CECA17BF96914DCECD58F9BD916081D63FEAEA5DD6C517AE86DD07\",\n            \"PreviousTxnLgrSeq\": 4469243\n          }\n        },\n        {\n          \"ModifiedNode\": {\n            \"FinalFields\": {\n              \"Balance\": {\n                \"currency\": \"ZZZ\",\n                \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n                \"value\": \"-198\"\n              },\n              \"Flags\": 131072,\n              \"HighLimit\": {\n                \"currency\": \"ZZZ\",\n                \"issuer\": \"rDtpgHpsUFu2dHC6fMZnwgZvNEDZ9MG9YK\",\n                \"value\": \"10000\"\n              },\n              \"HighNode\": \"0\",\n              \"LowLimit\": {\n                \"currency\": \"ZZZ\",\n                \"issuer\": \"rDb2kD2sibG5cxhz3VAoRFkmhPrca4JtL8\",\n                \"value\": \"0\"\n              },\n              \"LowNode\": \"0\"\n            },\n            \"LedgerEntryType\": \"RippleState\",\n            \"LedgerIndex\": \"E7B74BC26326DB0B953AB9460915820DFE99A33C3585C4988030627F68BB5A54\",\n            \"PreviousFields\": {\n              \"Balance\": {\n                \"currency\": \"ZZZ\",\n                \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n                \"value\": \"-199\"\n              }\n            },\n            \"PreviousTxnID\": \"93F7DC25ACA9D028291507893D6F36A428655887C2EAF8FA154DA1B198DB9128\",\n            \"PreviousTxnLgrSeq\": 4469247\n          }\n        },\n        {\n          \"CreatedNode\": {\n            \"LedgerEntryType\": \"Escrow\",\n            \"LedgerIndex\": \"EF540EC5CBCDF5CB3929C96CC540FC5856EF07AB9AF98F6C9BEBB30F0262D75F\",\n            \"NewFields\": {\n              \"Account\": \"rDtpgHpsUFu2dHC6fMZnwgZvNEDZ9MG9YK\",\n              \"Amount\": {\n                \"currency\": \"ZZZ\",\n                \"issuer\": \"rDb2kD2sibG5cxhz3VAoRFkmhPrca4JtL8\",\n                \"value\": \"1\"\n              },\n              \"CancelAfter\": 805842907,\n              \"Destination\": \"rHVkbnz2ZLVUCPugCbLsXbCsayrJARLq1N\",\n              \"FinishAfter\": 805842897\n            }\n          }\n        }\n      ],\n      \"TransactionIndex\": 0,\n      \"TransactionResult\": \"tesSUCCESS\"\n    },\n    \"tx\": {\n      \"Account\": \"rDtpgHpsUFu2dHC6fMZnwgZvNEDZ9MG9YK\",\n      \"Amount\": {\n        \"currency\": \"ZZZ\",\n        \"issuer\": \"rDb2kD2sibG5cxhz3VAoRFkmhPrca4JtL8\",\n        \"value\": \"1\"\n      },\n      \"CancelAfter\": 805842907,\n      \"Destination\": \"rHVkbnz2ZLVUCPugCbLsXbCsayrJARLq1N\",\n      \"Fee\": \"1\",\n      \"FinishAfter\": 805842897,\n      \"Flags\": 0,\n      \"LastLedgerSequence\": 4469269,\n      \"Sequence\": 4466553,\n      \"SigningPubKey\": \"EDD4401CFFB6285C91655EBA715A65E8F21FA2685A682E8345AF01ED01705C3583\",\n      \"TransactionType\": \"EscrowCreate\",\n      \"TxnSignature\": \"137DCE6F5ABE9F5E1956484D0BC02354ECC41FCEDB43F390ABD23CA9CF3034E6C0D312EBDF87F7B62E38093AAFAF55ADBF4E9683E979C77920BA256A3CDDE90B\",\n      \"date\": 805842891,\n      \"ledger_index\": 4469251\n    },\n    \"validated\": true\n  },\n  \"test MPT amount\": {\n    \"close_time_iso\": \"2025-07-16T21:07:42Z\",\n    \"ctid\": \"C045077300000002\",\n    \"hash\": \"04D33C94957033B41CBB5702C0AFC02CB9063C000FA3FB7C67E8D2AB611CEF03\",\n    \"ledger_hash\": \"95163894C7E7732E4C0C82124880011F5734FBEA337AB6A0EA42B521A9C7CDB0\",\n    \"ledger_index\": 4523891,\n    \"meta\": {\n      \"AffectedNodes\": [\n        {\n          \"ModifiedNode\": {\n            \"FinalFields\": {\n              \"Flags\": 0,\n              \"Owner\": \"rHVkbnz2ZLVUCPugCbLsXbCsayrJARLq1N\",\n              \"RootIndex\": \"02968F27FCD2E454F5146A6B5768F55C1FCF659A858265406B7855AD2E364217\"\n            },\n            \"LedgerEntryType\": \"DirectoryNode\",\n            \"LedgerIndex\": \"02968F27FCD2E454F5146A6B5768F55C1FCF659A858265406B7855AD2E364217\",\n            \"PreviousTxnID\": \"486A66108E91006A5E77041F23B8CC5B258320C331B9765FAD73FB2E028BD420\",\n            \"PreviousTxnLgrSeq\": 4523885\n          }\n        },\n        {\n          \"ModifiedNode\": {\n            \"FinalFields\": {\n              \"Flags\": 0,\n              \"Owner\": \"rDtpgHpsUFu2dHC6fMZnwgZvNEDZ9MG9YK\",\n              \"RootIndex\": \"1F882E04D2F24B427C89A1B79A2C26C94A3387CF60228C86E9C027D05FFED1FF\"\n            },\n            \"LedgerEntryType\": \"DirectoryNode\",\n            \"LedgerIndex\": \"1F882E04D2F24B427C89A1B79A2C26C94A3387CF60228C86E9C027D05FFED1FF\",\n            \"PreviousTxnID\": \"B15A7FF9F2EBCAA82078C74A4E8A16ED6DF87D82A7402DE2D4DD087483AF0FC6\",\n            \"PreviousTxnLgrSeq\": 4523887\n          }\n        },\n        {\n          \"ModifiedNode\": {\n            \"FinalFields\": {\n              \"Flags\": 40,\n              \"Issuer\": \"rKQzpv6jvPeRSULjdwWZgiCZEUNpkSXzYH\",\n              \"LockedAmount\": \"1\",\n              \"MPTokenMetadata\": \"10\",\n              \"MaximumAmount\": \"50000000\",\n              \"OutstandingAmount\": \"100\",\n              \"OwnerNode\": \"0\",\n              \"Sequence\": 4514959\n            },\n            \"LedgerEntryType\": \"MPTokenIssuance\",\n            \"LedgerIndex\": \"3D1E11A0C2587D89DE8D0A50B07EBA322A92E9C57066179F2D90109274B57A26\",\n            \"PreviousFields\": {},\n            \"PreviousTxnID\": \"ECFAA72120219C414B53B6C3D71122CEB21FAF9A711F07346E0CC02F1F090E21\",\n            \"PreviousTxnLgrSeq\": 4523889\n          }\n        },\n        {\n          \"ModifiedNode\": {\n            \"FinalFields\": {\n              \"Account\": \"rDtpgHpsUFu2dHC6fMZnwgZvNEDZ9MG9YK\",\n              \"Flags\": 0,\n              \"LockedAmount\": \"1\",\n              \"MPTAmount\": \"99\",\n              \"MPTokenIssuanceID\": \"0044E48FC9FB70ADC1A604A5792643A38CA5887219C21C8C\",\n              \"OwnerNode\": \"0\"\n            },\n            \"LedgerEntryType\": \"MPToken\",\n            \"LedgerIndex\": \"535B9B6237899D37F4613B41F1B633F4B2453801A768E273DE205DBA434F094F\",\n            \"PreviousFields\": {\n              \"MPTAmount\": \"100\"\n            },\n            \"PreviousTxnID\": \"ECFAA72120219C414B53B6C3D71122CEB21FAF9A711F07346E0CC02F1F090E21\",\n            \"PreviousTxnLgrSeq\": 4523889\n          }\n        },\n        {\n          \"CreatedNode\": {\n            \"LedgerEntryType\": \"Escrow\",\n            \"LedgerIndex\": \"A4DFBF50AC21A42B279CCCD2902E2DF0FCA52B4D150C73C0D9681C6309D0A5C7\",\n            \"NewFields\": {\n              \"Account\": \"rDtpgHpsUFu2dHC6fMZnwgZvNEDZ9MG9YK\",\n              \"Amount\": {\n                \"mpt_issuance_id\": \"0044E48FC9FB70ADC1A604A5792643A38CA5887219C21C8C\",\n                \"value\": \"1\"\n              },\n              \"CancelAfter\": 806015458,\n              \"Destination\": \"rHVkbnz2ZLVUCPugCbLsXbCsayrJARLq1N\",\n              \"FinishAfter\": 806015268\n            }\n          }\n        },\n        {\n          \"ModifiedNode\": {\n            \"LedgerEntryType\": \"AccountRoot\",\n            \"LedgerIndex\": \"B9E2BAE404EEADECEE678349CD2639831A6766AE15616F570F5B345868422912\",\n            \"PreviousTxnID\": \"D1342EFC262311A2A12386783DFDC33CD09D82B2BCE82BD9A20C0F6EA3D964A4\",\n            \"PreviousTxnLgrSeq\": 4523874\n          }\n        },\n        {\n          \"ModifiedNode\": {\n            \"FinalFields\": {\n              \"Account\": \"rDtpgHpsUFu2dHC6fMZnwgZvNEDZ9MG9YK\",\n              \"Balance\": \"99999892\",\n              \"Flags\": 0,\n              \"OwnerCount\": 21,\n              \"Sequence\": 4466567\n            },\n            \"LedgerEntryType\": \"AccountRoot\",\n            \"LedgerIndex\": \"C1F036A2B38438CE1D39AC1ED3682CE46703352616B6EA8853F4FB25F4684313\",\n            \"PreviousFields\": {\n              \"Balance\": \"99999893\",\n              \"OwnerCount\": 20,\n              \"Sequence\": 4466566\n            },\n            \"PreviousTxnID\": \"B15A7FF9F2EBCAA82078C74A4E8A16ED6DF87D82A7402DE2D4DD087483AF0FC6\",\n            \"PreviousTxnLgrSeq\": 4523887\n          }\n        }\n      ],\n      \"TransactionIndex\": 0,\n      \"TransactionResult\": \"tesSUCCESS\"\n    },\n    \"tx\": {\n      \"Account\": \"rDtpgHpsUFu2dHC6fMZnwgZvNEDZ9MG9YK\",\n      \"Amount\": {\n        \"mpt_issuance_id\": \"0044E48FC9FB70ADC1A604A5792643A38CA5887219C21C8C\",\n        \"value\": \"1\"\n      },\n      \"CancelAfter\": 806015458,\n      \"Destination\": \"rHVkbnz2ZLVUCPugCbLsXbCsayrJARLq1N\",\n      \"Fee\": \"1\",\n      \"FinishAfter\": 806015268,\n      \"Flags\": 0,\n      \"LastLedgerSequence\": 4523909,\n      \"Sequence\": 4466566,\n      \"SigningPubKey\": \"EDD4401CFFB6285C91655EBA715A65E8F21FA2685A682E8345AF01ED01705C3583\",\n      \"TransactionType\": \"EscrowCreate\",\n      \"TxnSignature\": \"7716E1514AC4E77636ED6E87D7D0B7A60BAC480E5C5028E84910B0EB851DC2D14A6A56BDC8CEE3EB0FD51F6AB6B981A8022D6A28B633120345E40A92D75C5F0C\",\n      \"date\": 806015262,\n      \"ledger_index\": 4523891\n    },\n    \"validated\": true\n  }\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/EscrowCreate/test/mock_data/EscrowCreateFinishFunction.json",
    "content": "{\n  \"ctid\": \"C003B7CD000007D2\",\n  \"date\": 796841422,\n  \"hash\": \"D731AD7AEA61C7FF117D3ED31E73ACB1C60D05E75B0161A005C752BD055726CA\",\n  \"inLedger\": 243661,\n  \"ledger_index\": 243661,\n  \"tx\": {\n    \"Account\": \"rnP1xXwRYNxuxfMsyzQuJEjP35AXaV1zF6\",\n    \"Amount\": \"100000\",\n    \"CancelAfter\": 796841620,\n    \"Data\": \"70000000\",\n    \"Destination\": \"rQE6iDVinSGsk9jdGS8rbwHste1VkhyCo6\",\n    \"Fee\": \"10000\",\n    \"FinishAfter\": 796841425,\n    \"FinishFunction\": \"0061736D0100000001690F60037F7F7F017F60027F7F017F60017F0060027F7F0060057F7F7F7F7F017F6000017F60037E7F7F017F60057F7F7F7F7F0060037F7F7F0060067F7F7F7F7F7F017F600B7F7F7F7F7F7F7F7F7F7F7F017F60017F017F60047F7F7F7F0060000060057F7E7E7E7E00028C010508686F73745F6C6962057072696E74000308686F73745F6C69620A67657454784669656C64000108686F73745F6C69621A67657443757272656E744C6564676572456E7472794669656C64000108686F73745F6C6962136765744C6564676572456E7472794669656C64000408686F73745F6C696213676574506172656E744C656467657254696D650005035453020\",\n    \"Flags\": 0,\n    \"LastLedgerSequence\": 243679,\n    \"NetworkID\": 2002,\n    \"Sequence\": 243658,\n    \"SigningPubKey\": \"EDE6EDD0A1F68D38583C68CED6B7728C68D4FCE797EE4F57A92F9D8E5FB7CA4958\",\n    \"TransactionType\": \"EscrowCreate\",\n    \"TxnSignature\": \"84BE469EECD88CB6D6E407ADDAF6A46AE8E805461C22F87AD3159EBECD216EDEA5EBB18AB6AC1EE7FA015725D6A12A25E90C2C0A09A7A36E9A815C1353281209\"\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"CreatedNode\": {\n          \"LedgerEntryType\": \"Escrow\",\n          \"LedgerIndex\": \"26CD872C3DD427B2046125E7827D1ED061B087E2DBAA1F7397B4AB42B7934037\",\n          \"NewFields\": {\n            \"Account\": \"rnP1xXwRYNxuxfMsyzQuJEjP35AXaV1zF6\",\n            \"Amount\": \"100000\",\n            \"CancelAfter\": 796841620,\n            \"Data\": \"70000000\",\n            \"Destination\": \"rQE6iDVinSGsk9jdGS8rbwHste1VkhyCo6\",\n            \"FinishAfter\": 796841425,\n            \"FinishFunction\": \"0061736D0100000001690F60037F7F7F017F60027F7F017F60017F0060027F7F0060057F7F7F7F7F017F6000017F60037E7F7F017F60057F7F7F7F7F0060037F7F7F0060067F7F7F7F7F7F017F600B7F7F7F7F7F7F7F7F7F7F7F017F60017F017F60047F7F7F7F0060000060057F7E7E7E7E00028C010508686F73745F6C6962057072696E74000308686F73745F6C69620A67657454784669656C64000108686F73745F6C69621A67657443757272656E744C6564676572456E7472794669656C64000108686F73745F6C6962136765744C6564676572456E7472794669656C64000408686F73745F6C696213676574506172656E744C656467657254696D650005035453020603070101080901010A01000202010102080008000B0C0301010101040508020303030D03010204030008010101010D040001010801010B02030D0D0203010101020D0C0C0001010D030302020C0300000E0405017001212105030100110619037F01418080C0000B7F0041DCA2C0000B7F0041E0A2C0000B074506066D656D6F72790200057265616479002308616C6C6F63617465003D0A6465616C6C6F63617465003F0A5F5F646174615F656E6403010B5F5F686561705F6261736503020926010041010B2031322B0E091F0D2133343C453B464F54121815101420131E37383944474B4C4D0AE1CA0153DE0101027F23808080800041C0006B220124808080800020014100360214200142808080801037020C200141033A003820014120360228200141003602342001418080C08000360230200141003602202001410036021820012001410C6A36022C024020002000411F7522027320026BAD2000417F73411F76200141186A1086808080000D00200128020C210020012802102202200128021410808080800002402000450D00200220001087808080000B200141C0006A2480808080000F0B41A880C0800041372001413F6A419880C0800041AC81C08000108880808000000BEC0203027F017E037F23808080800041306B2203248080808000412721040240024020004290CE005A0D00200021050C010B412721040340200341096A20046A2206417C6A20004290CE0080220542F0B1037E20007CA7220741FFFF037141E4006E2208410174419A85C080006A2F00003B00002006417E6A2008419C7F6C20076A41FFFF0371410174419A85C080006A2F00003B00002004417C6A2104200042FFC1D72F5621062005210020060D000B0B02400240200542E300560D002005A721060C010B200341096A2004417E6A22046A2005A7220741FFFF037141E4006E2206419C7F6C20076A41FFFF0371410174419A85C080006A2F00003B00000B024002402006410A490D00200341096A2004417E6A22046A2006410174419A85C080006A2F00003B00000C010B200341096A2004417F6A22046A20064130723A00000B2002200141014100200341096A20046A412720046B108C808080002104200341306A24808080800020040B6C01027F024002402000417C6A2802002202417871220341044108200241037122021B20016A490D0002402002450D002003200141276A4B0D020B200010A5808080000F0B41818EC0800041B08EC0800010A680808000000B41C08EC0800041F08EC0800010A680808000000B8F0101017F23808080800041C0006B22052480808080002005200136020C2005200036020820052003360214200520023602102005410236021C200541B884C08000360218200542023702242005418180808000AD422086200541106AAD843703382005418280808000AD422086200541086AAD843703302005200541306A360220200541186A200410AA80808000000B9E0301067F23808080800041C0006B220224808080800002400240200028020022032D00000D002001280214419582C080004104200128021828020C118080808000808080800021000C010B4101210020012802142204419982C0800041042001280218220528020C220611808080800080808080000D00200341016A210302400240200128021C22074104710D0041012100200441F184C080004101200611808080800080808080000D0220032001108A80808000450D010C020B200441F284C080004102200611808080800080808080000D0141012100200241013A001B200220053602102002200436020C20022007360238200241C884C08000360234200220012D00203A003C2002200128021036022C200220012902083702242002200129020037021C20022002411B6A36021420022002410C6A36023020032002411C6A108A808080000D01200228023041EC84C080004102200228023428020C11808080800080808080000D010B2001280214419C97C080004101200128021828020C118080808000808080800021000B200241C0006A24808080800020000BE90201057F2380808080004180016B22022480808080000240024002400240200128021C22034110710D0020034120710D0120003100004101200110868080800021000C030B20002D0000210041FF00210303402002200322046A22052000410F712203413072200341D7006A2003410A491B3A00002004417F6A2103200041FF017122064104762100200641104F0D000C020B0B20002D0000210041FF00210303402002200322046A22052000410F712203413072200341376A2003410A491B3A00002004417F6A2103200041FF017122064104762100200641104F0D000B02402004418101490D002004418001418885C08000108B80808000000B20014101419885C0800041022005418101200441016A6B108C8080800021000C010B02402004418101490D002004418001418885C08000108B80808000000B20014101419885C0800041022005418101200441016A6B108C8080800021000B20024180016A24808080800020000B7902017F017E23808080800041306B220324808080800020032000360200200320013602042003410236020C200341D887C08000360208200342023702142003418380808000AD4220862204200341046AAD84370328200320042003AD843703202003200341206A360210200341086A200210AA80808000000BCB0501077F0240024020010D00200541016A2106200028021C2107412D21080C010B412B418080C400200028021C220741017122011B2108200120056A21060B0240024020074104710D00410021020C010B0240024020030D00410021090C010B02402003410371220A0D000C010B41002109200221010340200920012C000041BF7F4A6A2109200141016A2101200A417F6A220A0D000B0B200920066A21060B024020002802000D000240200028021422012000280218220920082002200310AD80808000450D0041010F0B200120042005200928020C11808080800080808080000F0B02400240024002402000280204220120064B0D00200028021422012000280218220920082002200310AD80808000450D0141010F0B2007410871450D01200028021021072000413036021020002D0020210B4101210C200041013A0020200028021422092000280218220A20082002200310AD808080000D02200120066B41016A2101024003402001417F6A2201450D0120094130200A2802101181808080008080808000450D000B41010F0B0240200920042005200A28020C1180808080008080808000450D0041010F0B2000200B3A00202000200736021041000F0B200120042005200928020C1180808080008080808000210C0C010B200120066B210702400240024020002D002022010E0402000100020B20072101410021070C010B20074101762101200741016A41017621070B200141016A210120002802102106200028021821092000280214210A024003402001417F6A2201450D01200A200620092802101181808080008080808000450D000B41010F0B4101210C200A200920082002200310AD808080000D00200A20042005200928020C11808080800080808080000D00410021010340024020072001470D0020072007490F0B200141016A2101200A200620092802101181808080008080808000450D000B2001417F6A2007490F0B200C0B6601017F23808080800041106B220224808080800020022000280200220041046A36020C200141E181C08000410941EA81C08000410B200041848080800041F581C0800041092002410C6A418580808000108F808080002100200241106A24808080800020000BE70201057F2380808080004180016B22022480808080000240024002400240200128021C22034110710D0020034120710D0120003502004101200110868080800021000C030B2000280200210041FF00210303402002200322046A22052000410F712203413072200341D7006A2003410A491B3A00002004417F6A210320004110492106200041047621002006450D000C020B0B2000280200210041FF00210303402002200322046A22052000410F712203413072200341376A2003410A491B3A00002004417F6A210320004110492106200041047621002006450D000B02402004418101490D002004418001418885C08000108B80808000000B20014101419885C0800041022005418101200441016A6B108C8080800021000C010B02402004418101490D002004418001418885C08000108B80808000000B20014101419885C0800041022005418101200441016A6B108C8080800021000B20024180016A24808080800020000BF50101017F23808080800041106B220B248080808000200028021420012002200028021828020C11808080800080808080002102200B41003A000D200B20023A000C200B2000360208200B41086A200320042005200610B680808000200720082009200A10B680808000210A200B2D000D2202200B2D000C2201722100024020024101470D0020014101710D000240200A28020022002D001C4104710D00200028021441EF84C080004102200028021828020C118080808000808080800021000C010B200028021441EE84C080004101200028021828020C118080808000808080800021000B200B41106A24808080800020004101710B12002000418080C0800020011091808080000BBF05010A7F23808080800041306B2203248080808000200341033A002C2003412036021C41002104200341003602282003200136022420032000360220200341003602142003410036020C02400240024002400240200228021022050D00200228020C2200450D0120022802082101200041037421062000417F6A41FFFFFFFF017141016A21042002280200210003400240200041046A2802002207450D00200328022020002802002007200328022428020C11808080800080808080000D040B20012802002003410C6A200128020411818080800080808080000D03200141086A2101200041086A2100200641786A22060D000C020B0B20022802142201450D00200141057421082001417F6A41FFFFFF3F7141016A210420022802082109200228020021004100210603400240200041046A2802002201450D00200328022020002802002001200328022428020C11808080800080808080000D030B2003200520066A220141106A28020036021C20032001411C6A2D00003A002C2003200141186A2802003602282001410C6A28020021074100210A4100210B024002400240200141086A2802000E03010002010B2007410374210C4100210B2009200C6A220C2802040D01200C28020021070B4101210B0B200320073602102003200B36020C200141046A280200210702400240024020012802000E03010002010B2007410374210B2009200B6A220B2802040D01200B28020021070B4101210A0B200320073602182003200A3602142009200141146A2802004103746A22012802002003410C6A200128020411818080800080808080000D02200041086A21002008200641206A2206470D000B0B200420022802044F0D012003280220200228020020044103746A22012802002001280204200328022428020C1180808080008080808000450D010B410121010C010B410021010B200341306A24808080800020010B1E01017F024020002802002201450D00200028020420011087808080000B0B1E01017F024020002802002201450D00200028020420011087808080000B0B2200200128021441DC81C080004105200128021828020C11808080800080808080000BE30201027F23808080800041106B220224808080800002400240024002402001418001490D002002410036020C2001418010490D0102402001418080044F0D0020022001413F71418001723A000E20022001410C7641E001723A000C20022001410676413F71418001723A000D410321010C030B20022001413F71418001723A000F2002200141127641F001723A000C20022001410676413F71418001723A000E20022001410C76413F71418001723A000D410421010C020B0240200028020822032000280200470D0020001096808080000B2000200341016A360208200028020420036A20013A00000C020B20022001413F71418001723A000D2002200141067641C001723A000C410221010B02402000280200200028020822036B20014F0D00200020032001109780808000200028020821030B200028020420036A2002410C6A200110D6808080001A2000200320016A3602080B200241106A24808080800041000B5501017F23808080800041106B2201248080808000200141086A200020002802004101109C80808000024020012802082200418180808078460D002000200128020C109D80808000000B200141106A2480808080000B5201017F23808080800041106B2203248080808000200341086A200020012002109C80808000024020032802082202418180808078460D002002200328020C109D80808000000B200341106A2480808080000B4B01017F02402000280200200028020822036B20024F0D00200020032002109780808000200028020821030B200028020420036A2001200210D6808080001A2000200320026A36020841000B6F01017F0240024002402002280204450D000240200228020822030D0041002D00B89EC080001A0C020B200228020020032001109A8080800021020C020B41002D00B89EC080001A0B2001109B8080800021020B2000200136020820002002410120021B36020420002002453602000B800601057F0240024002402000417C6A22032802002204417871220541044108200441037122061B20016A490D0002402006450D002005200141276A4B0D020B41102002410B6A4178712002410B491B210102400240024020060D002001418002490D0120052001410472490D01200520016B418180084F0D010C020B200041786A220720056A21060240024002400240200520014F0D00200641002802ACA2C08000460D03200641002802A8A2C08000460D02200628020422044102710D042004417871220420056A22052001490D042006200410A780808000200520016B22024110490D0120032001200328020041017172410272360200200720016A22012002410372360204200720056A220520052802044101723602042001200210A88080800020000F0B200520016B2202410F4D0D0420032001200441017172410272360200200720016A22052002410372360204200620062802044101723602042005200210A88080800020000F0B20032005200328020041017172410272360200200720056A2202200228020441017236020420000F0B41002802A0A2C0800020056A22052001490D0102400240200520016B2202410F4B0D0020032004410171200572410272360200200720056A2202200228020441017236020441002102410021010C010B20032001200441017172410272360200200720016A22012002410172360204200720056A2205200236020020052005280204417E713602040B410020013602A8A2C08000410020023602A0A2C0800020000F0B41002802A4A2C0800020056A220520014B0D040B02402002109B8080800022050D0041000F0B20052000417C4178200328020022014103711B20014178716A2201200220012002491B10D6808080002102200010A580808000200221000B20000F0B41818EC0800041B08EC0800010A680808000000B41C08EC0800041F08EC0800010A680808000000B20032001200441017172410272360200200720016A2202200520016B2205410172360204410020053602A4A2C08000410020023602ACA2C0800020000BCB2502087F017E02400240024002400240024002400240200041F501490D0041002101200041CDFF7B4F0D052000410B6A22014178712102410028029CA2C080002203450D04411F21040240200041F4FFFF074B0D002002410620014108766722006B7641017120004101746B413E6A21040B410020026B21010240200441027441809FC080006A28020022050D0041002100410021060C020B4100210020024100411920044101766B2004411F461B74210741002106034002402005220528020441787122082002490D00200820026B220820014F0D00200821012005210620080D004100210120052106200521000C040B200528021422082000200820052007411D764104716A41106A2802002205471B200020081B2100200741017421072005450D020C000B0B02404100280298A2C08000220541102000410B6A41F803712000410B491B22024103762201762200410371450D00024002402000417F7341017120016A220741037422004190A0C080006A220120004198A0C080006A28020022022802082206460D002006200136020C200120063602080C010B41002005417E20077771360298A2C080000B20022000410372360204200220006A22002000280204410172360204200241086A0F0B200241002802A0A2C080004D0D0302400240024020000D00410028029CA2C080002200450D0620006841027441809FC080006A280200220628020441787120026B21012006210503400240200628021022000D00200628021422000D0020052802182104024002400240200528020C22002005470D00200541144110200528021422001B6A28020022060D01410021000C020B20052802082206200036020C200020063602080C010B200541146A200541106A20001B21070340200721082006220041146A200041106A200028021422061B210720004114411020061B6A28020022060D000B200841003602000B2004450D040240200528021C41027441809FC080006A22062802002005460D0020044110411420042802102005461B6A20003602002000450D050C040B2006200036020020000D034100410028029CA2C08000417E200528021C777136029CA2C080000C040B200028020441787120026B22062001200620014922061B21012000200520061B2105200021060C000B0B02400240200020017441022001742200410020006B727168220841037422014190A0C080006A220620014198A0C080006A28020022002802082207460D002007200636020C200620073602080C010B41002005417E20087771360298A2C080000B20002002410372360204200020026A2207200120026B2206410172360204200020016A2006360200024041002802A0A2C080002205450D0020054178714190A0C080006A210141002802A8A2C080002102024002404100280298A2C08000220841012005410376742205710D0041002008200572360298A2C08000200121050C010B200128020821050B200120023602082005200236020C2002200136020C200220053602080B410020073602A8A2C08000410020063602A0A2C08000200041086A0F0B20002004360218024020052802102206450D0020002006360210200620003602180B20052802142206450D0020002006360214200620003602180B02400240024020014110490D0020052002410372360204200520026A22022001410172360204200220016A200136020041002802A0A2C080002207450D0120074178714190A0C080006A210641002802A8A2C080002100024002404100280298A2C08000220841012007410376742207710D0041002008200772360298A2C08000200621070C010B200628020821070B200620003602082007200036020C2000200636020C200020073602080C010B2005200120026A2200410372360204200520006A220020002802044101723602040C010B410020023602A8A2C08000410020013602A0A2C080000B200541086A0F0B024020002006720D004100210641022004742200410020006B722003712200450D0320006841027441809FC080006A28020021000B2000450D010B0340200020062000280204417871220520026B220820014922041B2103200520024921072008200120041B21080240200028021022050D00200028021421050B2006200320071B21062001200820071B21012005210020050D000B0B2006450D00024041002802A0A2C0800022002002490D002001200020026B4F0D010B20062802182104024002400240200628020C22002006470D00200641144110200628021422001B6A28020022050D01410021000C020B20062802082205200036020C200020053602080C010B200641146A200641106A20001B21070340200721082005220041146A200041106A200028021422051B210720004114411020051B6A28020022050D000B200841003602000B2004450D030240200628021C41027441809FC080006A22052802002006460D0020044110411420042802102006461B6A20003602002000450D040C030B2005200036020020000D024100410028029CA2C08000417E200628021C777136029CA2C080000C030B02400240024002400240024041002802A0A2C08000220020024F0D00024041002802A4A2C08000220020024B0D0041002101200241AF80046A220641107640002200417F4622070D0720004110742205450D07410041002802B0A2C08000410020064180807C7120071B22086A22003602B0A2C08000410041002802B4A2C0800022012000200120004B1B3602B4A2C0800002400240024041002802ACA2C080002201450D004180A0C080002100034020002802002206200028020422076A2005460D02200028020822000D000C030B0B0240024041002802BCA2C080002200450D00200020054D0D010B410020053602BCA2C080000B410041FF1F3602C0A2C0800041002008360284A0C0800041002005360280A0C0800041004190A0C0800036029CA0C0800041004198A0C080003602A4A0C0800041004190A0C08000360298A0C08000410041A0A0C080003602ACA0C0800041004198A0C080003602A0A0C08000410041A8A0C080003602B4A0C08000410041A0A0C080003602A8A0C08000410041B0A0C080003602BCA0C08000410041A8A0C080003602B0A0C08000410041B8A0C080003602C4A0C08000410041B0A0C080003602B8A0C08000410041C0A0C080003602CCA0C08000410041B8A0C080003602C0A0C08000410041C8A0C080003602D4A0C08000410041C0A0C080003602C8A0C080004100410036028CA0C08000410041D0A0C080003602DCA0C08000410041C8A0C080003602D0A0C08000410041D0A0C080003602D8A0C08000410041D8A0C080003602E4A0C08000410041D8A0C080003602E0A0C08000410041E0A0C080003602ECA0C08000410041E0A0C080003602E8A0C08000410041E8A0C080003602F4A0C08000410041E8A0C080003602F0A0C08000410041F0A0C080003602FCA0C08000410041F0A0C080003602F8A0C08000410041F8A0C08000360284A1C08000410041F8A0C08000360280A1C0800041004180A1C0800036028CA1C0800041004180A1C08000360288A1C0800041004188A1C08000360294A1C0800041004188A1C08000360290A1C0800041004190A1C0800036029CA1C0800041004198A1C080003602A4A1C0800041004190A1C08000360298A1C08000410041A0A1C080003602ACA1C0800041004198A1C080003602A0A1C08000410041A8A1C080003602B4A1C08000410041A0A1C080003602A8A1C08000410041B0A1C080003602BCA1C08000410041A8A1C080003602B0A1C08000410041B8A1C080003602C4A1C08000410041B0A1C080003602B8A1C08000410041C0A1C080003602CCA1C08000410041B8A1C080003602C0A1C08000410041C8A1C080003602D4A1C08000410041C0A1C080003602C8A1C08000410041D0A1C080003602DCA1C08000410041C8A1C080003602D0A1C08000410041D8A1C080003602E4A1C08000410041D0A1C080003602D8A1C08000410041E0A1C080003602ECA1C08000410041D8A1C080003602E0A1C08000410041E8A1C080003602F4A1C08000410041E0A1C080003602E8A1C08000410041F0A1C080003602FCA1C08000410041E8A1C080003602F0A1C08000410041F8A1C08000360284A2C08000410041F0A1C080003602F8A1C0800041004180A2C0800036028CA2C08000410041F8A1C08000360280A2C0800041004188A2C08000360294A2C0800041004180A2C08000360288A2C08000410020053602ACA2C0800041004188A2C08000360290A2C080004100200841586A22003602A4A2C0800020052000410172360204200520006A4128360204410041808080013602B8A2C080000C080B200120054F0D00200620014B0D00200028020C450D030B410041002802BCA2C080002200200520002005491B3602BCA2C08000200520086A21064180A0C0800021000240024002400340200028020022072006460D01200028020822000D000C020B0B200028020C450D010B4180A0C0800021000240034002402000280200220620014B0D002001200620002802046A2206490D020B200028020821000C000B0B410020053602ACA2C080004100200841586A22003602A4A2C0800020052000410172360204200520006A4128360204410041808080013602B8A2C080002001200641606A41787141786A22002000200141106A491B2207411B3602044100290280A0C080002109200741106A4100290288A0C080003702002007200937020841002008360284A0C0800041002005360280A0C080004100200741086A360288A0C080004100410036028CA0C080002007411C6A2100034020004107360200200041046A22002006490D000B20072001460D0720072007280204417E713602042001200720016B22004101723602042007200036020002402000418002490D002001200010D0808080000C080B200041F801714190A0C080006A2106024002404100280298A2C08000220541012000410376742200710D0041002005200072360298A2C08000200621000C010B200628020821000B200620013602082000200136020C2001200636020C200120003602080C070B200020053602002000200028020420086A360204200520024103723602042007410F6A41787141786A2201200520026A22006B2102200141002802ACA2C08000460D03200141002802A8A2C08000460D040240200128020422064103714101470D0020012006417871220610A780808000200620026A2102200120066A220128020421060B20012006417E7136020420002002410172360204200020026A200236020002402002418002490D002000200210D0808080000C060B200241F801714190A0C080006A2101024002404100280298A2C08000220641012002410376742202710D0041002006200272360298A2C08000200121020C010B200128020821020B200120003602082002200036020C2000200136020C200020023602080C050B4100200020026B22013602A4A2C08000410041002802ACA2C08000220020026A22063602ACA2C080002006200141017236020420002002410372360204200041086A21010C060B41002802A8A2C08000210102400240200020026B2206410F4B0D00410041003602A8A2C08000410041003602A0A2C0800020012000410372360204200120006A220020002802044101723602040C010B410020063602A0A2C080004100200120026A22053602A8A2C0800020052006410172360204200120006A2006360200200120024103723602040B200141086A0F0B2000200720086A360204410041002802ACA2C080002200410F6A417871220141786A22063602ACA2C080004100200020016B41002802A4A2C0800020086A22016A41086A22053602A4A2C0800020062005410172360204200020016A4128360204410041808080013602B8A2C080000C030B410020003602ACA2C08000410041002802A4A2C0800020026A22023602A4A2C08000200020024101723602040C010B410020003602A8A2C08000410041002802A0A2C0800020026A22023602A0A2C0800020002002410172360204200020026A20023602000B200541086A0F0B4100210141002802A4A2C08000220020024D0D004100200020026B22013602A4A2C08000410041002802ACA2C08000220020026A22063602ACA2C080002006200141017236020420002002410372360204200041086A0F0B20010F0B20002004360218024020062802102205450D0020002005360210200520003602180B20062802142205450D0020002005360214200520003602180B0240024020014110490D0020062002410372360204200620026A22002001410172360204200020016A200136020002402001418002490D002000200110D0808080000C020B200141F801714190A0C080006A2102024002404100280298A2C08000220541012001410376742201710D0041002005200172360298A2C08000200221010C010B200228020821010B200220003602082001200036020C2000200236020C200020013602080C010B2006200120026A2200410372360204200620006A220020002802044101723602040B200641086A0BE90101037F23808080800041206B2204248080808000024002400240200220036A220320024F0D00410021020C010B410021022001280200220541017422062003200620034B1B22034108200341084B1B22034100480D000240024020050D00410021020C010B2004200536021C20042001280204360214410121020B20042002360218200441086A2003200441146A109980808000024020042802080D00200428020C2102200120033602002001200236020441818080807821020C010B20042802102101200428020C21020C010B0B2000200136020420002002360200200441206A2480808080000B1000024020000D0010A9808080000B000B6101017F23808080800041106B220224808080800020022000410C6A36020C200141FE81C08000410D418B82C0800041052000418680808000419082C0800041052002410C6A418780808000108F808080002100200241106A24808080800020000BE00301097F23808080800041C0006B2202248080808000200028020821032000280204210441012105200128021441B083C080004101200128021828020C1180808080008080808000210002402003450D0041002106034020062107410121062000410171210841012100024020080D0002400240200128021C22084104710D002007410171450D0141012100200128021441E784C080004102200128021828020C1180808080008080808000450D010C020B200128021821092001280214210A024020074101710D0041012100200A41888BC080004101200928020C11808080800080808080000D020B200241013A001B200220093602102002200A36020C20022008360238200241C884C08000360234200220012D00203A003C2002200128021036022C200220012902083702242002200129020037021C20022002411B6A36021420022002410C6A360230024020042002411C6A108A808080000D00200228023041EC84C080004102200228023428020C118080808000808080800021000C020B410121000C010B20042001108A8080800021000B200441016A21042003417F6A22030D000B0B024020000D00200128021441F484C080004101200128021828020C118080808000808080800021050B200241C0006A24808080800020050B4A01017F23808080800041106B22022480808080002002200036020C200141EE8AC0800041FB8AC080002002410C6A41888080800010A2808080002100200241106A24808080800020000B3D00200128021420002802002D0000410274220041A09EC080006A2802002000418C9EC080006A280200200128021828020C11808080800080808080000BE70101017F23808080800041106B220524808080800020002802142001410D200028021828020C11808080800080808080002101200541003A000D200520013A000C20052000360208200541086A200241042003200410B680808000210320052D000D220120052D000C2204722100024020014101470D0020044101710D000240200328020022002D001C4104710D00200028021441EF84C080004102200028021828020C118080808000808080800021000C010B200028021441EE84C080004101200028021828020C118080808000808080800021000B200541106A24808080800020004101710BF513050B7F017E057F027E057F23808080800041C0006B220024808080800041002D00B89EC080001A02400240024002400240024002400240024002400240024002404107109B808080002201450D00200141036A41002800F18BC08000360000200141002800EE8BC08000360000200141071081808080002202280004210320022800002104200241081087808080002001410710878080800041002D00B89EC080001A4107109B808080002201450D00200141036A41002800F18BC08000360000200141002800EE8BC08000360000200141071082808080002202280004210520022800002106200241081087808080002001410710878080800041002D00B89EC080001A410B109B808080002201450D00200141076A41002800FC8BC08000360000200141002900F58BC080003700002001410B1082808080002202280004210720022800002108200241081087808080002001410B10878080800041002D00B89EC080001A4107109B808080002201450D00200141036A410028009F8CC080003600002001410028009C8CC0800036000041E1002008200720014107108380808000220928000421022009280000210A20094108108780808000200041186A200A200210A48080800002400240024020002D00184101460D002000290320210B02402002450D00200A20021087808080000B200141071087808080004100210941002D00B89EC080001A4104109B808080002201450D03200141C4C2D18B06360000200141041082808080002202280000210C2002280004210A2002410810878080800020014104108780808000024002400240200A4100480D000240200A0D00410121014100210D0C030B41002D00B89EC080001A200A109B8080800022010D01410121090B2009200A109D80808000000B200A210D0B2001200C200A10D6808080002102200A450D014100200A41796A22012001200A4B1B210E200241036A417C7120026B210F4100210103400240024002400240200220016A2D00002209C022104100480D00200F20016B4103710D012001200E4F0D020340200220016A2209280204200928020072418081828478710D03200141086A2201200E490D000C030B0B42808080808020211142808080801021120240024002400240024002400240024002400240024002402009418888C080006A2D0000417E6A0E030003010B0B200141016A2209200A490D01420021110C090B42002111200141016A2213200A490D020C080B4280808080802021114280808080102112200220096A2C000041BF7F4A0D080C060B42002111200141016A2213200A4F0D06200220136A2C00002113024002400240200941E001460D00200941ED01460D012010411F6A41FF0171410C490D022010417E71416E470D0420134140480D050C040B201341607141A07F460D040C030B2013419F7F4A0D020C030B20134140480D020C010B200220136A2C000021130240024002400240200941907E6A0E050100000002000B2010410F6A41FF017141024B0D03201341404E0D030C020B201341F0006A41FF017141304F0D020C010B2013418F7F4A0D010B200141026A2209200A4F0D05200220096A2C000041BF7F4A0D0242002112200141036A2209200A4F0D06200220096A2C000041BF7F4C0D04428080808080E00021110C030B4280808080802021110C020B42002112200141026A2209200A4F0D04200220096A2C000041BF7F4C0D020B428080808080C00021110B42808080801021120C020B200941016A21010C040B420021120B20112012842001AD8421110240200D418080808078470D00200A21142002210D0C070B200020113702242000200D3602182000200AAD4220862002AD8437021C41988AC08000412B200041186A41CC81C0800041A882C08000108880808000000B200141016A21010C010B2001200A4F0D000340200220016A2C00004100480D01200A200141016A2201470D000C040B0B2001200A490D000C020B0B200020002D00193A000C41988AC08000412B2000410C6A41888AC0800041A48CC08000108880808000000B200AAD2111200221140B200041186A20142011A710A48080800020002D00184101460D01200029032021124100210F108480808000211541002D00B89EC080001A410B109B808080002216450D00201641076A41002800878CC08000360000201641002900808CC080003700002016410B10828080800022012800002117200128000421132001410810878080800002400240024020130E020F00010B4101210F20172D0000220141556A0E030E010E010B20172D000021010B0240200141FF017141556A0E03040600060B2013417F6A2109201741016A210220134109490D024100210103402009450D0A20022D000041506A220E41094B0D084103210F2001AC420A7E2211422088A72011A72210411F75470D0D200241016A21022009417F6A2109200E41004A2010200E6B220120104873450D000C0D0B0B000B200020002D00193A000C41988AC08000412B2000410C6A41BC81C0800041B882C08000108880808000000B2009450D01410021014101210F034020022D000041506A220E41094B0D0A200241016A21022001410A6C200E6B21012009417F6A22090D000C070B0B2013417F6A2109201741016A2102201341094F0D0220090D040B410021010C050B201321092017210220134108490D020B4100210103402009450D0320022D000041506A220E41094B0D014102210F2001AC420A7E2211422088A72011A72210411F75470D06200241016A21022009417F6A2109200E4100482010200E6A220120104873450D000C060B0B4101210F0C040B410021014101210F034020022D000041506A220E41094B0D04200241016A2102200E2001410A6C6A21012009417F6A22090D000B0B2013450D010B201720131087808080000B2016410B108780808000200420031080808080002006200510808080800020082007108080808000200C200A10808080800020004100360214200042808080801037020C200041033A003820004120360228200041003602342000418080C08000360230200041003602202000410036021820002000410C6A36022C0240200B4101200041186A1086808080000D00200028020C210220002802102209200028021410808080800002402002450D00200920021087808080000B2015108580808000200110858080800041002102024020032005470D0020042006200310D58080800045200B20125871201520014E7121020B0240200D450D002014200D1087808080000B0240200A450D00200C200A1087808080000B02402007450D00200820071087808080000B02402005450D00200620051087808080000B02402003450D00200420031087808080000B200041C0006A24808080800020020F0B41A880C0800041372000413F6A419880C0800041AC81C08000108880808000000B2000200F3A001841988AC08000412B200041186A41888AC08000418C8CC08000108880808000000BD60202027F027E23808080800041106B22032480808080000240024002400240024002400240024002400240024020020E020200010B4101210220012D000041556A0E03060306030B20012D0000412B470D01200141016A2101200241124921042002417F6A210220040D020C030B200041003A00010C050B200241114F0D010B420021050C010B4200210503402002450D04200320054200420A420010D78080800020012D000041506A2204410A4F0D02024020032903084200510D00200041023A00010C040B200141016A21012002417F6A2102200329030022062004AD7C220520065A0D000B200041023A00010C020B034020012D000041506A2204410A4F0D01200141016A21012005420A7E2004AD7C21052002417F6A2202450D030C000B0B41012101200041013A00010C020B410121010C010B20002005370308410021010B200020013A0000200341106A2480808080000BBE0601057F200041786A22012000417C6A280200220241787122006A21030240024020024101710D002002410271450D012001280200220220006A21000240200120026B220141002802A8A2C08000470D0020032802044103714103470D01410020003602A0A2C0800020032003280204417E7136020420012000410172360204200320003602000F0B2001200210A7808080000B024002400240024002400240200328020422024102710D00200341002802ACA2C08000460D02200341002802A8A2C08000460D0320032002417871220210A7808080002001200220006A2200410172360204200120006A2000360200200141002802A8A2C08000470D01410020003602A0A2C080000F0B20032002417E7136020420012000410172360204200120006A20003602000B2000418002490D022001200010D08080800041002101410041002802C0A2C08000417F6A22003602C0A2C0800020000D0402404100280288A0C080002200450D00410021010340200141016A2101200028020822000D000B0B4100200141FF1F200141FF1F4B1B3602C0A2C080000F0B410020013602ACA2C08000410041002802A4A2C0800020006A22003602A4A2C08000200120004101723602040240200141002802A8A2C08000470D00410041003602A0A2C08000410041003602A8A2C080000B200041002802B8A2C0800022044D0D0341002802ACA2C080002200450D034100210241002802A4A2C0800022054129490D024180A0C080002101034002402001280200220320004B0D002000200320012802046A490D040B200128020821010C000B0B410020013602A8A2C08000410041002802A0A2C0800020006A22003602A0A2C0800020012000410172360204200120006A20003602000F0B200041F801714190A0C080006A2103024002404100280298A2C08000220241012000410376742200710D0041002002200072360298A2C08000200321000C010B200328020821000B200320013602082000200136020C2001200336020C200120003602080F0B02404100280288A0C080002201450D00410021020340200241016A2102200128020822010D000B0B4100200241FF1F200241FF1F4B1B3602C0A2C08000200520044D0D004100417F3602B8A2C080000B0B4D01017F23808080800041206B22022480808080002002410036021020024101360204200242043702082002412E36021C200220003602182002200241186A3602002002200110AA80808000000B820301047F200028020C21020240024002402001418002490D002000280218210302400240024020022000470D00200041144110200028021422021B6A28020022010D01410021020C020B20002802082201200236020C200220013602080C010B200041146A200041106A20021B21040340200421052001220241146A200241106A200228021422011B210420024114411020011B6A28020022010D000B200541003602000B2003450D020240200028021C41027441809FC080006A22012802002000460D0020034110411420032802102000461B6A20023602002002450D030C020B2001200236020020020D014100410028029CA2C08000417E200028021C777136029CA2C080000C020B0240200220002802082204460D002004200236020C200220043602080F0B41004100280298A2C08000417E20014103767771360298A2C080000F0B20022003360218024020002802102201450D0020022001360210200120023602180B20002802142201450D0020022001360214200120023602180F0B0BA00401027F200020016A210202400240200028020422034101710D002003410271450D012000280200220320016A21010240200020036B220041002802A8A2C08000470D0020022802044103714103470D01410020013602A0A2C0800020022002280204417E7136020420002001410172360204200220013602000C020B2000200310A7808080000B0240024002400240200228020422034102710D00200241002802ACA2C08000460D02200241002802A8A2C08000460D0320022003417871220310A7808080002000200320016A2201410172360204200020016A2001360200200041002802A8A2C08000470D01410020013602A0A2C080000F0B20022003417E7136020420002001410172360204200020016A20013602000B02402001418002490D002000200110D0808080000F0B200141F801714190A0C080006A2102024002404100280298A2C08000220341012001410376742201710D0041002003200172360298A2C08000200221010C010B200228020821010B200220003602082001200036020C2000200236020C200020013602080F0B410020003602ACA2C08000410041002802A4A2C0800020016A22013602A4A2C0800020002001410172360204200041002802A8A2C08000470D01410041003602A0A2C08000410041003602A8A2C080000F0B410020003602A8A2C08000410041002802A0A2C0800020016A22013602A0A2C0800020002001410172360204200020016A20013602000F0B0B4701017F23808080800041206B2200248080808000200041003602182000410136020C200041DC82C0800036020820004204370210200041086A41F882C0800010AA80808000000B5601017F23808080800041206B2202248080808000200241106A200041106A290200370300200241086A200041086A290200370300200241013B011C2002200136021820022000290200370300200210AC80808000000B11002000350200410120011086808080000B5D01027F23808080800041206B220124808080800020002802182102200141106A200041106A290200370300200141086A200041086A2902003703002001200036021C2001200236021820012000290200370300200110D180808000000B490002402002418080C400460D002000200220012802101181808080008080808000450D0041010F0B024020030D0041000F0B200020032004200128020C11808080800080808080000B7D02017F017E23808080800041306B220224808080800020022000360200200220013602042002410236020C200241F887C08000360208200242023702142002418380808000AD4220862203200241046AAD84370328200220032002AD843703202002200241206A360210200241086A419487C0800010AA80808000000BC20B010B7F200028020821030240024002400240200028020022040D002003410171450D010B02402003410171450D00200120026A210502400240200028020C22060D0041002107200121080C010B4100210741002109200121080340200822032005460D020240024020032C00002208417F4C0D00200341016A21080C010B0240200841604F0D00200341026A21080C010B0240200841704F0D00200341036A21080C010B200341046A21080B200820036B20076A21072006200941016A2209470D000B0B20082005460D00024020082C00002203417F4A0D0020034160491A0B024002402007450D000240200720024F0D00200120076A2C000041BF7F4A0D01410021030C020B20072002460D00410021030C010B200121030B2007200220031B21022003200120031B21010B024020040D00200028021420012002200028021828020C11808080800080808080000F0B2000280204210A024020024110490D0020022001200141036A417C7122076B22096A220B41037121044100210641002103024020012007460D004100210302402009417C4B0D00410021034100210503402003200120056A22082C000041BF7F4A6A200841016A2C000041BF7F4A6A200841026A2C000041BF7F4A6A200841036A2C000041BF7F4A6A2103200541046A22050D000B0B200121080340200320082C000041BF7F4A6A2103200841016A2108200941016A22090D000B0B02402004450D002007200B417C716A22082C000041BF7F4A210620044101460D00200620082C000141BF7F4A6A210620044102460D00200620082C000241BF7F4A6A21060B200B4102762105200620036A21060340200721042005450D04200541C001200541C001491B220B410371210C200B410274210D41002108024020054104490D002004200D41F007716A210941002108200421030340200328020C2207417F7341077620074106767241818284087120032802082207417F7341077620074106767241818284087120032802042207417F7341077620074106767241818284087120032802002207417F7341077620074106767241818284087120086A6A6A6A2108200341106A22032009470D000B0B2005200B6B21052004200D6A2107200841087641FF81FC0771200841FF81FC07716A418180046C41107620066A2106200C450D000B2004200B41FC01714102746A22082802002203417F734107762003410676724181828408712103200C4101460D0220082802042207417F7341077620074106767241818284087120036A2103200C4102460D0220082802082208417F7341077620084106767241818284087120036A21030C020B024020020D00410021060C030B2002410371210802400240200241044F0D0041002106410021090C010B41002106200121032002410C71220921070340200620032C000041BF7F4A6A200341016A2C000041BF7F4A6A200341026A2C000041BF7F4A6A200341036A2C000041BF7F4A6A2106200341046A21032007417C6A22070D000B0B2008450D02200120096A21030340200620032C000041BF7F4A6A2106200341016A21032008417F6A22080D000C030B0B200028021420012002200028021828020C11808080800080808080000F0B200341087641FF811C71200341FF81FC07716A418180046C41107620066A21060B02400240200A20064D0D00200A20066B21054100210302400240024020002D00200E0402000102020B20052103410021050C010B20054101762103200541016A41017621050B200341016A210320002802102109200028021821082000280214210703402003417F6A2203450D022007200920082802101181808080008080808000450D000B41010F0B200028021420012002200028021828020C11808080800080808080000F0B0240200720012002200828020C1180808080008080808000450D0041010F0B410021030340024020052003470D0020052005490F0B200341016A21032007200920082802101181808080008080808000450D000B2003417F6A2005490B820302017F017E23808080800041F0006B2203248080808000200341B08DC0800036020C20032000360208200341B08DC08000360214200320013602102003410236021C200341B183C08000360218024020022802000D002003410336025C200341E483C08000360258200342033702642003418180808000AD4220862204200341106AAD8437034820032004200341086AAD843703402003418280808000AD422086200341186AAD843703382003200341386A360260200341D8006A41E899C0800010AA80808000000B200341206A41106A200241106A290200370300200341206A41086A200241086A290200370300200320022902003703202003410436025C2003419884C08000360258200342043702642003418180808000AD4220862204200341106AAD8437035020032004200341086AAD843703482003418980808000AD422086200341206AAD843703402003418280808000AD422086200341186AAD843703382003200341386A360260200341D8006A41E899C0800010AA80808000000B1C0020002802002001200028020428020C11818080800080808080000B140020012000280200200028020410AF808080000B14002001280214200128021820001091808080000B22002001280214418883C08000410E200128021828020C11808080800080808080000B6001017F23808080800041306B22002480808080002000410136020C200041A883C08000360208200042013702142000418A80808000AD4220862000412F6AAD843703202000200041206A360210200041086A41CC97C0800010AA80808000000BE70302057F017E23808080800041C0006B220524808080800041012106024020002D00040D0020002D0005210702402000280200220828021C22094104710D0041012106200828021441E784C0800041E484C08000200741017122071B4102410320071B200828021828020C11808080800080808080000D01200828021420012002200828021828020C11808080800080808080000D01200828021441EF97C080004102200828021828020C11808080800080808080000D01200320082004118180808000808080800021060C010B41012106024020074101710D00200828021441E984C080004103200828021828020C11808080800080808080000D01200828021C21090B41012106200541013A001B2005200829021437020C200541C884C0800036023420052005411B6A360214200520082902083702242008290200210A200520093602382005200828021036022C200520082D00203A003C2005200A37021C20052005410C6A3602302005410C6A2001200210B7808080000D002005410C6A41EF97C08000410210B7808080000D0020032005411C6A200411818080800080808080000D00200528023041EC84C080004102200528023428020C118080808000808080800021060B200041013A0005200020063A0004200541C0006A24808080800020000BDF04010C7F2001417F6A21032000280204210420002802002105200028020821064100210741002108410021094100210A02400340200A4101710D0102400240200920024B0D000340200120096A210A0240024002400240200220096B220B41074B0D0020022009470D01200221090C050B02400240200A41036A417C71220C200A6B220D450D00410021000340200A20006A2D0000410A460D05200D200041016A2200470D000B200D200B41786A220E4D0D010C030B200B41786A210E0B03404180828408200C2802002200418A94A8D000736B2000724180828408200C41046A2802002200418A94A8D000736B2000727141808182847871418081828478470D02200C41086A210C200D41086A220D200E4D0D000C020B0B410021000340200A20006A2D0000410A460D02200B200041016A2200470D000B200221090C030B0240200D200B470D00200221090C030B200A200D6A210C2002200D6B20096B210B4100210002400340200C20006A2D0000410A460D01200B200041016A2200470D000B200221090C030B2000200D6A21000B200020096A220C41016A21090240200C20024F0D00200A20006A2D0000410A470D004100210A2009210D200921000C030B200920024D0D000B0B20082002460D024101210A2008210D200221000B0240024020062D0000450D00200541E084C080004104200428020C11808080800080808080000D010B200020086B210B4100210C024020002008460D00200320006A2D0000410A46210C0B200120086A21002006200C3A0000200D210820052000200B200428020C1180808080008080808000450D010B0B410121070B20070B6001027F20002802042102200028020021030240200028020822002D0000450D00200341E084C080004104200228020C1180808080008080808000450D0041010F0B20002001410A463A000020032001200228021011818080800080808080000B1200200041C884C0800020011091808080000B6A01017F23808080800041306B22032480808080002003200136020C2003200036020820034101360214200341D490C080003602102003420137021C2003418280808000AD422086200341086AAD843703282003200341286A360218200341106A200210AA80808000000B2701017F200028020022002000411F7522027320026BAD2000417F73411F7620011086808080000B830201087F2380808080004180016B2202248080808000200128020421032001280200210420002802002100200128021C2205210602402005410471450D002005410872210620040D0020014281808080A0013702000B2001200641047236021C41FF00210603402002200622076A22082000410F712206413072200641D7006A2006410A491B3A00002007417F6A210620004110492109200041047621002009450D000B02402007418101490D002007418001418885C08000108B80808000000B20014101419885C0800041022008418101200741016A6B108C8080800021002001200536021C200120033602042001200436020020024180016A24808080800020000BAF0101017F23808080800041306B2201248080808000024002402000417F4C0D000240024020000D00410121000C010B41002D00B89EC080001A2000109B808080002200450D020B2001200036020C200141023602142001418C8BC080003602102001420137021C2001418B8080800036022C2001200141286A36021820012001410C6A360228200141106A10BE80808000200128020C2100200141306A24808080800020000F0B10A9808080000B000BBE0604017F017E037F017E23808080800041C0006B22012480808080002001410636020C2001419498C08000360208024041002D00E89EC080004103460D0010C8808080000B0240024002400240024041002903D0A2C0800022024200520D00024041002802D8A2C0800022030D0010C18080800041002802D8A2C0800021030B20032003280200220441016A3602002004417F4C0D012003450D02200320032802002204417F6A3602002003290308210220044101470D00200310C2808080000B024002400240200241002903C09EC08000510D0041002D00CC9EC08000210441012103410041013A00CC9EC08000200120043A00182004450D012001420037023420014281808080C00037022C200141BC99C08000360228200141186A200141286A10C380808000000B024041002802C89EC080002203417F460D00200341016A21030C020B419C9AC08000412641E09AC0800010BA80808000000B410020023703C09EC080000B410020033602C89EC08000200141C09EC0800036021041042103200141043A00182001200141106A360220200141186A41C08DC080002000109180808000210020012D001821040240024020000D00420021024117200441FF0171764101710D01200128021C220328020021000240200341046A28020022042802002205450D002000200511828080800080808080000B024020042802042204450D00200020041087808080000B2003410C108780808000410421030C010B200441FF01714104460D032001290318220642807E8321022006A721030B200128021022002000280208417F6A2204360208024020040D00200041003A000C200042003703000B200341FF01714104470D03200141C0006A2480808080000F0B000B41808FC0800041DE0041F48FC0800010BA80808000000B200141003602382001410136022C2001418499C0800036022820014204370230200141286A418C99C0800010AA80808000000B200120022003AD42FF0183843703102001410236022C200141F497C08000360228200142023702342001418C80808000AD422086200141106AAD843703202001418280808000AD422086200141086AAD843703182001200141186A360230200141286A418498C0800010AA80808000000B7F01017F23808080800041306B22022480808080002002200036020C20024102360214200241A88BC080003602102002420137021C2002418B8080800036022C2002200241286A36021820022002410C6A360228200241106A10BE8080800002402001450D00200228020C20011087808080000B200241306A2480808080000B4701017F23808080800041206B2200248080808000200041003602182000410136020C200041BC90C0800036020820004204370210200041086A41C490C0800010AA80808000000BF90103027F037E017F23808080800041206B220024808080800041002D00B89EC080001A0240024002404120109B808080002201450D0020014102360210200142818080801037030041002903F89EC08000210203402002427F510D024100200242017C220341002903F89EC080002204200420025122051B3703F89EC08000200421022005450D000B410020033703D0A2C080002001200337030841002802D8A2C08000450D02200041003602182000410136020C200041C48CC0800036020820004204370210200041086A419C8DC0800010AA808080000B000B10C080808000000B410020013602D8A2C08000200041206A2480808080000B5B01027F024020002802104101470D002000280214220141003A000020002802182202450D00200120021087808080000B02402000417F460D00200020002802042201417F6A36020420014101470D00200041201087808080000B0B3A01017F23808080800041106B2202248080808000200241AC8DC0800036020C20022000360208200241086A2002410C6A200110B080808000000B3000024020002802002D00000D00200141E286C08000410510AF808080000F0B200141E786C08000410410AF808080000BE50301017F23808080800041C0006B220224808080800002400240024002400240024020002D00000E0400010203000B2002200028020436020441002D00B89EC080001A4114109B808080002200450D04200041106A41002800809BC08000360000200041086A41002900F89AC08000370000200041002900F09AC08000370000200241143602102002200036020C200241143602082002410336022C200241A097C08000360228200242023702342002418D80808000AD422086200241046AAD843703202002418E80808000AD422086200241086AAD843703182002200241186A36023020012802142001280218200241286A109180808000210020022802082201450D03200228020C20011087808080000C030B20002D000121002002410136022C200241D490C08000360228200242013702342002418280808000AD422086200241186AAD8437030820022000410274220041C49BC080006A28020036021C2002200041E89CC080006A2802003602182002200241086A36023020012802142001280218200241286A10918080800021000C020B200120002802042200280200200028020410AF8080800021000C010B2000280204220028020020012000280204280210118180808000808080800021000B200241C0006A24808080800020000F0B000B140020012000280204200028020810AF808080000B7001037F200028020421010240024020002D0000220041044B0D0020004103470D010B200128020021000240200141046A28020022022802002203450D002000200311828080800080808080000B024020022802042202450D00200020021087808080000B2001410C1087808080000B0BF10101027F23808080800041206B2200248080808000024002400240024041002D00E89EC080000E0400000301000B410041023A00E89EC0800041002D00B89EC080001A418008109B808080002201450D01410041033A00E89EC08000410020013602D89EC08000410042808080808080013703D09EC08000410042003703C09EC08000410041003A00E09EC08000410041003602DC9EC08000410041003A00CC9EC08000410041003602C89EC080000B200041206A2480808080000F0B000B200041003602182000410136020C200041BC9BC0800036020820004204370210200041086A418C9AC0800010AA80808000000BB108010A7F23808080800041206B22042480808080000240024002400240024020012802100D002001417F360210200341002003200241036A417C7120026B22056B41077120032005491B22066B210720032006490D0102402006450D0002400240200220036A2208417F6A22092D0000410A470D002006417F6A21060C010B200220076A220A2009460D0102402008417E6A22092D0000410A470D002006417E6A21060C010B200A2009460D0102402008417D6A22092D0000410A470D002006417D6A21060C010B200A2009460D0102402008417C6A22092D0000410A470D002006417C6A21060C010B200A2009460D0102402008417B6A22092D0000410A470D002006417B6A21060C010B200A2009460D0102402008417A6A22092D0000410A470D002006417A6A21060C010B200A2009460D010240200841796A22092D0000410A470D00200641796A21060C010B200A2009460D01200641787221060B200620076A41016A21060C040B20052003200320054B1B210B410020066B21082002417C6A210C2006417F7320026A210A02400340200A21052008210620072209200B4D0D01200641786A2108200541786A210A41808284082002200941786A22076A280200220D418A94A8D000736B200D724180828408200C20096A280200220D418A94A8D000736B200D727141808182847871418081828478460D000B0B200920034B0D0202400340200320066A450D012006417F6A2106200520036A21092005417F6A210520092D0000410A470D000B200320066A41016A21060C040B024002402001411C6A28020022060D00410021060C010B2006200141186A2802006A417F6A2D0000410A470D0041002106200141003A00202001411C6A41003602000B0240200128021420066B20034B0D002000200141146A2002200310CA808080000C050B200128021820066A2002200310D6808080001A200041043A00002001411C6A200620036A3602000C040B10B580808000000B20072003418487C08000108B80808000000B2009200310AE80808000000B0240200320064F0D00200441003602182004410136020C2004418C91C0800036020820044204370210200441086A419491C0800010AA80808000000B02402001411C6A2802002205450D0002400240200128021420056B20064D0D00200141186A28020020056A2002200610D6808080001A2001411C6A200520066A22053602000C010B200441086A200141146A2002200610CA80808000024020042D00084104460D00200020042903083702000C030B2001411C6A28020021050B2005450D00200141003A00202001411C6A41003602000B200220066A210502402001280214200320066B22064B0D002000200141146A2005200610CA808080000C010B200141186A2802002005200610D6808080001A200041043A00002001411C6A20063602000B2001200128021041016A360210200441206A2480808080000B7101027F20012802002104024020012802082205450D00200420056B20034F0D004100210520014100360208200141003A000C0B0240200420034D0D00200128020420056A2002200310D6808080001A200041043A00002001200520036A3602080F0B20004204370200200141003A000C0BC90103027F017E027F23808080800041106B2203248080808000200341086A20002802082802002001200210C980808000024020032D000822024104460D0020002802042104200329030821050240024020002D0000220141044B0D0020014103470D010B200428020021010240200441046A28020022062802002207450D002001200711828080800080808080000B024020062802042206450D00200120061087808080000B2004410C1087808080000B200020053702000B200341106A24808080800020024104470B9C0303027F017E037F23808080800041106B22022480808080002002410036020402400240024002402001418001490D002001418010490D012001418080044F0D0220022001413F71418001723A000620022001410C7641E001723A000420022001410676413F71418001723A0005410321010C030B200220013A0004410121010C020B20022001413F71418001723A00052002200141067641C001723A0004410221010C010B20022001413F71418001723A00072002200141127641F001723A000420022001410676413F71418001723A000620022001410C76413F71418001723A0005410421010B200241086A2000280208280200200241046A200110C980808000024020022D000822014104460D0020002802042103200229030821040240024020002D0000220541044B0D0020054103470D010B200328020021050240200341046A28020022062802002207450D002005200711828080800080808080000B024020062802042206450D00200520061087808080000B2003410C1087808080000B200020043702000B200241106A24808080800020014104470B1200200041C08DC0800020011091808080000B0300000B0900200041003602000BC30201047F411F21020240200141FFFFFF074B0D002001410620014108766722026B7641017120024101746B413E6A21020B200042003702102000200236021C200241027441809FC080006A21030240410028029CA2C0800041012002742204710D0020032000360200200020033602182000200036020C200020003602084100410028029CA2C0800020047236029CA2C080000F0B024002400240200328020022042802044178712001470D00200421020C010B20014100411920024101766B2002411F461B742103034020042003411D764104716A41106A22052802002202450D02200341017421032002210420022802044178712001470D000B0B20022802082203200036020C20022000360208200041003602182000200236020C200020033602080F0B20052000360200200020043602182000200036020C200020003602080B0B00200010D280808000000BB50101037F23808080800041106B2201248080808000200028020C2102024002400240024020002802040E020001020B20020D0141012102410021030C020B20020D00200028020022022802042103200228020021020C010B20014180808080783602002001200036020C2001418F80808000200028021C22002D001C20002D001D10D380808000000B20012003360204200120023602002001419080808000200028021C22002D001C20002D001D10D380808000000B990101027F23808080800041106B2204248080808000410041002802F49EC08000220541016A3602F49EC08000024020054100480D000240024041002D00C8A2C080000D00410041002802C4A2C0800041016A3602C4A2C0800041002802F09EC08000417F4A0D010C020B200441086A200020011183808080008080808000000B410041003A00C8A2C080002002450D0010CE80808000000B000B0C00200020012902003703000B4A01037F4100210302402002450D000240034020002D0000220420012D00002205470D01200041016A2100200141016A21012002417F6A2202450D020C000B0B200420056B21030B20030BC10201087F02400240200241104F0D00200021030C010B2000410020006B41037122046A210502402004450D0020002103200121060340200320062D00003A0000200641016A2106200341016A22032005490D000B0B2005200220046B2207417C7122086A210302400240200120046A2209410371450D0020084101480D012009410374220641187121022009417C71220A41046A2101410020066B4118712104200A28020021060340200520062002762001280200220620047472360200200141046A2101200541046A22052003490D000C020B0B20084101480D0020092101034020052001280200360200200141046A2101200541046A22052003490D000B0B20074103712102200920086A21010B02402002450D00200320026A21050340200320012D00003A0000200141016A2101200341016A22032005490D000B0B20000B6E01067E2000200342FFFFFFFF0F832205200142FFFFFFFF0F8322067E22072003422088220820067E22062005200142208822097E7C22054220867C220A3703002000200820097E2005200654AD4220862005422088847C200A200754AD7C200420017E200320027E7C7C3703080B0BBE1E0100418080C0000BB41E110000000C00000004000000120000001300000014000000000000000000000001000000150000006120446973706C617920696D706C656D656E746174696F6E2072657475726E656420616E206572726F7220756E65787065637465646C792F72757374632F633266373463336639323861656235303366313562346539656635373738653737663330353862382F6C6962726172792F616C6C6F632F7372632F737472696E672E727300005F0010004B000000060A00000E00000000000000010000000100000016000000170000001400000004000000180000004572726F72557466384572726F7276616C69645F75705F746F6572726F725F6C656E46726F6D557466384572726F7262797465736572726F724E6F6E65536F6D657372632F6C69622E7273001D0110000A0000000C0000003D0000001D0110000A0000000D000000370000006361706163697479206F766572666C6F770000004801100011000000616C6C6F632F7372632F7261775F7665632E727364011000140000001800000005000000426F72726F774D75744572726F72616C726561647920626F72726F7765643A2096011000120000005B3D3D617373657274696F6E20606C6566742020726967687460206661696C65640A20206C6566743A200A2072696768743A2000B301100010000000C301100017000000DA0110000900000020726967687460206661696C65643A200A20206C6566743A20000000B301100010000000FC011000100000000C02100009000000DA011000090000000100000000000000EF0B100002000000000000000C00000004000000190000001A0000001B00000020202020207B202C20207B0A2C0A7D207D28280A5D636F72652F7372632F666D742F6E756D2E7273750210001300000066000000170000003078303030313032303330343035303630373038303931303131313231333134313531363137313831393230323132323233323432353236323732383239333033313332333333343335333633373338333934303431343234333434343534363437343834393530353135323533353435353536353735383539363036313632363336343635363636373638363937303731373237333734373537363737373837393830383138323833383438353836383738383839393039313932393339343935393639373938393966616C736574727565636F72652F7372632F736C6963652F6D656D6368722E7273006B03100018000000830000001E0000006B031000180000009F0000000900000072616E676520737461727420696E64657820206F7574206F662072616E676520666F7220736C696365206F66206C656E67746820A403100012000000B60310002200000072616E676520656E6420696E64657820E803100010000000B603100022000000010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020203030303030303030303030303030303040404040400000000000000000000000000000001000000010000001600000063616C6C65642060526573756C743A3A756E77726170282960206F6E20616E2060457272602076616C7565456D707479496E76616C69644469676974506F734F766572666C6F774E65674F766572666C6F775A65726F5061727365496E744572726F726B696E64616C6C6F63617465200A0000007F0510000900000088051000010000006465616C6C6F6361746520009C0510000B00000088051000010000002F686F6D652F7077616E672F7761736D2F72782D7761736D2D70726F746F747970652F7872706C2D7374642F7372632F6C69622E72734163636F756E7444657374696E6174696F6E46696E697368416674657200B805100036000000690000001600000042616C616E636500B8051000360000007E000000160000007265656E7472616E7420696E69740000340610000E0000002F72757374632F633266373463336639323861656235303366313562346539656635373738653737663330353862382F6C6962726172792F636F72652F7372632F63656C6C2F6F6E63652E72730000004C0610004D0000002301000042000000000000000000000004000000040000001C0000001D0000000C000000040000001E0000001F000000200000002F727573742F646570732F646C6D616C6C6F632D302E322E362F7372632F646C6D616C6C6F632E7273617373657274696F6E206661696C65643A207073697A65203E3D2073697A65202B206D696E5F6F7665726865616400D806100029000000A804000009000000617373657274696F6E206661696C65643A207073697A65203C3D2073697A65202B206D61785F6F766572686561640000D806100029000000AE0400000D000000757365206F66207374643A3A7468726561643A3A63757272656E742829206973206E6F7420706F737369626C6520616674657220746865207468726561642773206C6F63616C206461746120686173206265656E2064657374726F7965647374642F7372632F7468726561642F6D6F642E727300DE07100015000000F1020000130000006661696C656420746F2067656E657261746520756E69717565207468726561642049443A20626974737061636520657868617573746564000408100037000000DE07100015000000C40400000D00000001000000000000007374642F7372632F696F2F62756666657265642F6C696E657772697465727368696D2E72736D6964203E206C656E000081081000090000005C081000250000000F01000029000000656E74697479206E6F7420666F756E647065726D697373696F6E2064656E696564636F6E6E656374696F6E2072656675736564636F6E6E656374696F6E207265736574686F737420756E726561636861626C656E6574776F726B20756E726561636861626C65636F6E6E656374696F6E2061626F727465646E6F7420636F6E6E65637465646164647265737320696E2075736561646472657373206E6F7420617661696C61626C656E6574776F726B20646F776E62726F6B656E2070697065656E7469747920616C7265616479206578697374736F7065726174696F6E20776F756C6420626C6F636B6E6F742061206469726563746F727969732061206469726563746F72796469726563746F7279206E6F7420656D707479726561642D6F6E6C792066696C6573797374656D206F722073746F72616765206D656469756D66696C6573797374656D206C6F6F70206F7220696E646972656374696F6E206C696D69742028652E672E2073796D6C696E6B206C6F6F70297374616C65206E6574776F726B2066696C652068616E646C65696E76616C696420696E70757420706172616D65746572696E76616C6964206461746174696D6564206F75747772697465207A65726F6E6F2073746F726167652073706163657365656B206F6E20756E7365656B61626C652066696C6566696C6573797374656D2071756F746120657863656564656466696C6520746F6F206C617267657265736F75726365206275737965786563757461626C652066696C652062757379646561646C6F636B63726F73732D646576696365206C696E6B206F722072656E616D65746F6F206D616E79206C696E6B73696E76616C69642066696C656E616D65617267756D656E74206C69737420746F6F206C6F6E676F7065726174696F6E20696E746572727570746564756E737570706F72746564756E657870656374656420656E64206F662066696C656F7574206F66206D656D6F72796F74686572206572726F72756E63617465676F72697A6564206572726F7220286F73206572726F7220290000000100000000000000910B10000B0000009C0B1000010000007374642F7372632F696F2F737464696F2E727300B80B1000130000002C030000140000006661696C6564207072696E74696E6720746F203A20000000DC0B100013000000EF0B100002000000B80B1000130000005D040000090000007374646F75747374642F7372632F696F2F6D6F642E72736120666F726D617474696E6720747261697420696D706C656D656E746174696F6E2072657475726E656420616E206572726F72207768656E2074686520756E6465726C79696E672073747265616D20646964206E6F740000002B0C1000560000001A0C100011000000280700001500000063616E6E6F74207265637572736976656C792061637175697265206D757465789C0C1000200000007374642F7372632F7379732F73796E632F6D757465782F6E6F5F746872656164732E7273C40C10002400000014000000090000007374642F7372632F73796E632F6F6E63652E7273F80C100014000000D9000000140000006C6F636B20636F756E74206F766572666C6F7720696E207265656E7472616E74206D757465787374642F7372632F73796E632F7265656E7472616E745F6C6F636B2E7273420D10001E000000220100002D0000006F7065726174696F6E207375636365737366756C6F6E652D74696D6520696E697469616C697A6174696F6E206D6179206E6F7420626520706572666F726D6564207265637572736976656C79840D100038000000100000001100000012000000100000001000000013000000120000000D0000000E000000150000000C0000000B00000015000000150000000F0000000E00000013000000260000003800000019000000170000000C000000090000000A0000001000000017000000190000000E0000000D00000014000000080000001B0000000E0000001000000016000000150000000B000000160000000D0000000B00000013000000A4081000B4081000C5081000D7081000E7081000F70810000A0910001C09100029091000370910004C0910005809100063091000780910008D0910009C091000AA091000BD091000E30910001B0A1000340A10004B0A1000570A1000600A10006A0A10007A0A1000910A1000AA0A1000B80A1000C50A1000D90A1000E10A1000FC0A10000A0B10001A0B1000300B1000450B1000500B1000660B1000730B10007E0B1000050000000C0000000B0000000B000000040000004305100048051000540510005F0510006A05100000C62E046E616D65000E0D7761736D5F6C69622E7761736D018E2E5800325F5A4E313068656C7065725F6C696238686F73745F6C6962357072696E74313768643363303132663765666531663636334501385F5A4E313068656C7065725F6C696238686F73745F6C6962313067657454784669656C64313768623836623962643665383439353163634502485F5A4E313068656C7065725F6C696238686F73745F6C6962323667657443757272656E744C6564676572456E7472794669656C64313768613461383030373262396335613761644503415F5A4E313068656C7065725F6C696238686F73745F6C696231396765744C6564676572456E7472794669656C64313768633661326634323734313038306331384504415F5A4E313068656C7065725F6C696238686F73745F6C69623139676574506172656E744C656467657254696D65313768373164336639663165383665663230374505315F5A4E313068656C7065725F6C696231327072696E745F6E756D626572313768343432633966366462343461613636374506305F5A4E34636F726533666D74336E756D33696D7037666D745F7536343137686435323166613665663661303637326145070E5F5F727573745F6465616C6C6F6308325F5A4E34636F726536726573756C743133756E777261705F6661696C6564313768663839396364303037373637303035314509475F5A4E34325F244C54242452462454247532302461732475323024636F72652E2E666D742E2E44656275672447542433666D7431376831323761303230623939303135656661450A475F5A4E34325F244C54242452462454247532302461732475323024636F72652E2E666D742E2E44656275672447542433666D7431376833326438343961303132376564636461450B445F5A4E34636F726535736C69636535696E6465783236736C6963655F73746172745F696E6465785F6C656E5F6661696C31376866393161336166653837623164343433450C385F5A4E34636F726533666D7439466F726D617474657231327061645F696E74656772616C31376863346561303761306263313335366334450D475F5A4E34325F244C54242452462454247532302461732475323024636F72652E2E666D742E2E44656275672447542433666D7431376835626463353035616635323364323939450E5E5F5A4E34636F726533666D74336E756D35325F244C5424696D706C2475323024636F72652E2E666D742E2E44656275672475323024666F7224753230247573697A652447542433666D7431376836336361623039386234313233343130450F465F5A4E34636F726533666D7439466F726D6174746572323664656275675F7374727563745F6669656C64325F66696E697368313768313566616636373332666330396462644510305F5A4E34636F726533666D743557726974653977726974655F666D74313768396461663134643536353865323530364511265F5A4E34636F726533666D743577726974653137683933353534653462653731663263376145124C5F5A4E34636F726533707472343264726F705F696E5F706C616365244C5424616C6C6F632E2E737472696E672E2E537472696E6724475424313768323037363135366438643165323961384513535F5A4E34636F726533707472343964726F705F696E5F706C616365244C5424616C6C6F632E2E737472696E672E2E46726F6D557466384572726F7224475424313768323066303937633266353863396661374514525F5A4E35335F244C5424636F72652E2E666D742E2E4572726F72247532302461732475323024636F72652E2E666D742E2E44656275672447542433666D743137686637616532383535623234396462633545155F5F5A4E35385F244C5424616C6C6F632E2E737472696E672E2E537472696E67247532302461732475323024636F72652E2E666D742E2E577269746524475424313077726974655F63686172313768323134333931636238656231353263364516435F5A4E35616C6C6F63377261775F7665633139526177566563244C54245424432441244754243867726F775F6F6E653137686661666363383935356337386333653545175A5F5A4E35616C6C6F63377261775F7665633230526177566563496E6E6572244C5424412447542437726573657276653231646F5F726573657276655F616E645F68616E646C653137686235633533636263666639643631653745185D5F5A4E35385F244C5424616C6C6F632E2E737472696E672E2E537472696E67247532302461732475323024636F72652E2E666D742E2E5772697465244754243977726974655F737472313768353939643965353738393436646439384519325F5A4E35616C6C6F63377261775F766563313166696E6973685F67726F7731376832313261636366633461323839333362451A0E5F5F727573745F7265616C6C6F631B435F5A4E38646C6D616C6C6F6338646C6D616C6C6F633137446C6D616C6C6F63244C54244124475424366D616C6C6F6331376865363539333961346338393763633135451C4B5F5A4E35616C6C6F63377261775F7665633230526177566563496E6E6572244C54244124475424313467726F775F616D6F7274697A656431376834623330643530396631323837393465451D335F5A4E35616C6C6F63377261775F766563313268616E646C655F6572726F7231376839376237646264306637326464373838451E5E5F5A4E36355F244C5424616C6C6F632E2E737472696E672E2E46726F6D557466384572726F72247532302461732475323024636F72652E2E666D742E2E44656275672447542433666D7431376831323138613136316439333634386539451F5E5F5A4E36355F244C5424616C6C6F632E2E7665632E2E566563244C5424542443244124475424247532302461732475323024636F72652E2E666D742E2E44656275672447542433666D74313768613636623539636339336533383537344520615F5A4E36385F244C5424636F72652E2E6E756D2E2E6572726F722E2E5061727365496E744572726F72247532302461732475323024636F72652E2E666D742E2E44656275672447542433666D74313768633837363633386165616230633031664521475F5A4E34325F244C54242452462454247532302461732475323024636F72652E2E666D742E2E44656275672447542433666D74313768393934323165636534623836333034384522465F5A4E34636F726533666D7439466F726D6174746572323664656275675F7374727563745F6669656C64315F66696E69736831376862653338633662346233306235386332452305726561647924675F5A4E34636F7265336E756D36305F244C5424696D706C2475323024636F72652E2E7374722E2E7472616974732E2E46726F6D5374722475323024666F722475323024753634244754243866726F6D5F737472313768356563336638363835643535346239644525415F5A4E38646C6D616C6C6F6338646C6D616C6C6F633137446C6D616C6C6F63244C5424412447542434667265653137683339383334616161616533653839343645262C5F5A4E34636F72653970616E69636B696E673570616E69633137683034656562393137646439336332323945274A5F5A4E38646C6D616C6C6F6338646C6D616C6C6F633137446C6D616C6C6F63244C542441244754243132756E6C696E6B5F6368756E6B3137683933346533646333383362623538613345284B5F5A4E38646C6D616C6C6F6338646C6D616C6C6F633137446C6D616C6C6F63244C542441244754243133646973706F73655F6368756E6B313768366530636363643435383635373436334529385F5A4E35616C6C6F63377261775F766563313763617061636974795F6F766572666C6F7731376834393964343832613965643537313561452A305F5A4E34636F72653970616E69636B696E673970616E69635F666D7431376836353430636362326435666463336162452B625F5A4E34636F726533666D74336E756D33696D7035325F244C5424696D706C2475323024636F72652E2E666D742E2E446973706C61792475323024666F7224753230247533322447542433666D7431376862663365303232383438336533373561452C11727573745F626567696E5F756E77696E642D465F5A4E34636F726533666D7439466F726D617474657231327061645F696E74656772616C313277726974655F70726566697831376861396134333238306236303036643132452E425F5A4E34636F726535736C69636535696E6465783234736C6963655F656E645F696E6465785F6C656E5F6661696C31376830383862353665323939626561616166452F2E5F5A4E34636F726533666D7439466F726D6174746572337061643137683437363961653338393337346363353145303B5F5A4E34636F72653970616E69636B696E6731396173736572745F6661696C65645F696E6E6572313768366637653332353764383461353034324531475F5A4E34325F244C54242452462454247532302461732475323024636F72652E2E666D742E2E44656275672447542433666D74313768336136626161316262343761643230344532495F5A4E34345F244C54242452462454247532302461732475323024636F72652E2E666D742E2E446973706C61792447542433666D74313768376666346430623836303963323437324533585F5A4E35395F244C5424636F72652E2E666D742E2E417267756D656E7473247532302461732475323024636F72652E2E666D742E2E446973706C61792447542433666D743137683638613365386535303963616663363445345C5F5A4E36335F244C5424636F72652E2E63656C6C2E2E426F72726F774D75744572726F72247532302461732475323024636F72652E2E666D742E2E44656275672447542433666D74313768313564336433343334626464636363384535395F5A4E34636F72653463656C6C323270616E69635F616C72656164795F626F72726F7765643137683331346235326131626334366266653445363C5F5A4E34636F726533666D74386275696C6465727331314465627567537472756374356669656C64313768333531353864666637643465616633354537675F5A4E36385F244C5424636F72652E2E666D742E2E6275696C646572732E2E50616441646170746572247532302461732475323024636F72652E2E666D742E2E5772697465244754243977726974655F737472313768383138623439653765363961323666644538695F5A4E36385F244C5424636F72652E2E666D742E2E6275696C646572732E2E50616441646170746572247532302461732475323024636F72652E2E666D742E2E577269746524475424313077726974655F63686172313768393437396266363162306130356661314539305F5A4E34636F726533666D743557726974653977726974655F666D7431376835393430386336353062386232313531453A325F5A4E34636F7265366F7074696F6E31336578706563745F6661696C656431376866303861393965326437333336633661453B625F5A4E34636F726533666D74336E756D33696D7035325F244C5424696D706C2475323024636F72652E2E666D742E2E446973706C61792475323024666F7224753230246933322447542433666D7431376863656439306337613633396330316464453C4F5F5A4E35305F244C5424244250246D7574247532302454247532302461732475323024636F72652E2E666D742E2E44656275672447542433666D7431376834366435353230663839333131346633453D08616C6C6F636174653E2B5F5A4E3373746432696F35737464696F365F7072696E7431376838316334373231363630343666306663453F0A6465616C6C6F6361746540395F5A4E3373746436746872656164385468726561644964336E657739657868617573746564313768333336626637613134383830343463384541425F5A4E34636F72653463656C6C346F6E636531374F6E636543656C6C244C54245424475424387472795F696E69743137686365363362663232383531393165373145423E5F5A4E35616C6C6F633473796E633136417263244C54245424432441244754243964726F705F736C6F77313768656539616363636164396363313036394543355F5A4E34636F72653970616E69636B696E6731336173736572745F6661696C6564313768323332363266326333633738623661624544475F5A4E34325F244C54242452462454247532302461732475323024636F72652E2E666D742E2E44656275672447542433666D74313768653138373433383865303762666532354545595F5A4E36305F244C54247374642E2E696F2E2E6572726F722E2E4572726F72247532302461732475323024636F72652E2E666D742E2E446973706C61792447542433666D74313768393032373163376232613663653833394546595F5A4E36305F244C5424616C6C6F632E2E737472696E672E2E537472696E67247532302461732475323024636F72652E2E666D742E2E446973706C61792447542433666D743137686365343232366161316637323663316345477A5F5A4E34636F726533707472383864726F705F696E5F706C616365244C54247374642E2E696F2E2E57726974652E2E77726974655F666D742E2E41646170746572244C5424616C6C6F632E2E7665632E2E566563244C54247538244754242447542424475424313768313636646336316162303333346331654548495F5A4E337374643473796E63396F6E63655F6C6F636B31374F6E63654C6F636B244C542454244754243130696E697469616C697A65313768376635633530386461396531623039624549605F5A4E36315F244C54247374642E2E696F2E2E737464696F2E2E5374646F75744C6F636B2475323024617324753230247374642E2E696F2E2E5772697465244754243977726974655F616C6C31376832346238323631303436316432353666454A555F5A4E3373746432696F386275666665726564396275667772697465723138427566577269746572244C54245724475424313477726974655F616C6C5F636F6C6431376835383462646262616562306662316262454B735F5A4E38305F244C54247374642E2E696F2E2E57726974652E2E77726974655F666D742E2E41646170746572244C54245424475424247532302461732475323024636F72652E2E666D742E2E5772697465244754243977726974655F73747231376837666163663562633065666364383038454C325F5A4E34636F726533666D74355772697465313077726974655F6368617231376866306233626531656331396465356537454D305F5A4E34636F726533666D743557726974653977726974655F666D7431376866383830386630646630653435313364454E0A727573745F70616E69634F375F5A4E34636F72653570616E6963313250616E69635061796C6F61643661735F737472313768363134396631343264396132653032654550505F5A4E38646C6D616C6C6F6338646C6D616C6C6F633137446C6D616C6C6F63244C542441244754243138696E736572745F6C617267655F6368756E6B313768656665383531613237353832646137624551455F5A4E3373746433737973396261636B747261636532365F5F727573745F656E645F73686F72745F6261636B7472616365313768346463336465343764323230323162394552585F5A4E337374643970616E69636B696E673139626567696E5F70616E69635F68616E646C657232385F24753762242475376224636C6F73757265247537642424753764243137686531376133393737663839633131373845533B5F5A4E337374643970616E69636B696E673230727573745F70616E69635F776974685F686F6F6B31376837373665373963396636353931626535455483015F5A4E39395F244C54247374642E2E70616E69636B696E672E2E626567696E5F70616E69635F68616E646C65722E2E5374617469635374725061796C6F6164247532302461732475323024636F72652E2E70616E69632E2E50616E69635061796C6F6164244754243661735F737472313768656233663732326432323465343266384555066D656D636D7056066D656D63707957085F5F6D756C746933071201000F5F5F737461636B5F706F696E746572090A0100072E726F6461746100550970726F64756365727302086C616E6775616765010452757374000C70726F6365737365642D62790105727573746325312E38332E302D6E696768746C79202863326637346333663920323032342D30392D30392900490F7461726765745F6665617475726573042B0A6D756C746976616C75652B0F6D757461626C652D676C6F62616C732B0F7265666572656E63652D74797065732B087369676E2D657874\"\n          }\n        }\n      },\n      {\n        \"CreatedNode\": {\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"2CE363897F39866A6F045785019BD5893B7EFF43024A00D3A044CD8596D32FEC\",\n          \"NewFields\": {\n            \"Owner\": \"rQE6iDVinSGsk9jdGS8rbwHste1VkhyCo6\",\n            \"RootIndex\": \"2CE363897F39866A6F045785019BD5893B7EFF43024A00D3A044CD8596D32FEC\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"B25B7B94E9F049F9398C693898DDF6284B9E87EEFBAD0EB138DD4157DC8D435D\",\n          \"PreviousTxnID\": \"2573FFB1BD7D97BEDABC545BB6F998E7311FD5B53F8847950CA53A2636491DB4\",\n          \"PreviousTxnLgrSeq\": 243659\n        }\n      },\n      {\n        \"CreatedNode\": {\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"C8CEBBA27C656047179FA43935498EA64967589A8F72523427A688763BB66402\",\n          \"NewFields\": {\n            \"Owner\": \"rnP1xXwRYNxuxfMsyzQuJEjP35AXaV1zF6\",\n            \"RootIndex\": \"C8CEBBA27C656047179FA43935498EA64967589A8F72523427A688763BB66402\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rnP1xXwRYNxuxfMsyzQuJEjP35AXaV1zF6\",\n            \"Balance\": \"99890000\",\n            \"Flags\": 0,\n            \"OwnerCount\": 2,\n            \"Sequence\": 243659\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"CF6154867E065C1B691CBC3E91B9D574AAE896BC83227652A6B69A3819B5D060\",\n          \"PreviousFields\": {\n            \"Balance\": \"100000000\",\n            \"OwnerCount\": 0,\n            \"Sequence\": 243658\n          },\n          \"PreviousTxnID\": \"37E2379120A1DA0A3861840BFFEB5725919A73659FF327F4B695338B95F90B3D\",\n          \"PreviousTxnLgrSeq\": 243658\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tesSUCCESS\"\n  },\n  \"validated\": true\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/EscrowFinish/Description.tsx",
    "content": "import { useTranslation, Trans } from 'react-i18next'\nimport type { EscrowFinish } from 'xrpl'\nimport { findNode } from '../../../transactionUtils'\nimport { Account } from '../../Account'\nimport {\n  TransactionDescriptionComponent,\n  TransactionDescriptionProps,\n} from '../types'\nimport { RouteLink } from '../../../routing'\nimport { TRANSACTION_ROUTE } from '../../../../App/routes'\nimport { Amount } from '../../Amount'\nimport {\n  formatAmount,\n  isXRP,\n} from '../../../../../rippled/lib/txSummary/formatAmount'\n\nconst Description: TransactionDescriptionComponent = (\n  props: TransactionDescriptionProps<EscrowFinish>,\n) => {\n  const { t } = useTranslation()\n  const { data } = props\n  const deleted: any = findNode(data.meta, 'DeletedNode', 'Escrow')\n\n  if (deleted == null) {\n    return null\n  }\n  return (\n    <>\n      <div>\n        {t('escrow_completion_desc')} <Account account={data.tx.Account} />\n      </div>\n      <div data-testid=\"amount-line\">\n        <Trans i18nKey=\"escrow_completion_desc_2\">\n          The escrowed amount of\n          <b>\n            <Amount value={formatAmount(deleted.FinalFields.Amount)} />\n          </b>\n          was delivered to\n          <Account account={deleted.FinalFields.Destination} />\n        </Trans>\n        {isXRP(deleted.FinalFields.Amount) &&\n          deleted.FinalFields.Destination === data.tx.Account && (\n            <span>\n              {' '}\n              (\n              <b>\n                <Amount\n                  value={formatAmount(\n                    deleted.FinalFields.Amount -\n                      parseInt(data.tx.Fee || '0', 10),\n                  )}\n                />\n              </b>{' '}\n              {t('escrow_after_transaction_cost')})\n            </span>\n          )}\n      </div>\n      <Trans i18nKey=\"escrow_created_by_desc\">\n        The escrow was created by\n        <Account account={data.tx.Owner} />\n        with transaction\n        <RouteLink\n          className=\"hash\"\n          to={TRANSACTION_ROUTE}\n          params={{ identifier: deleted.FinalFields.PreviousTxnID }}\n        >\n          {`${deleted.FinalFields.PreviousTxnID.substring(0, 6)}...`}\n        </RouteLink>\n      </Trans>\n      {data.tx.Fulfillment && (\n        <div>\n          {t('escrow_finish_fulfillment_desc')}\n          <span className=\"fulfillment\"> {data.tx.Fulfillment}</span>\n        </div>\n      )}\n    </>\n  )\n}\nexport { Description }\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/EscrowFinish/Simple.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { Account } from '../../Account'\nimport { TransactionSimpleComponent, TransactionSimpleProps } from '../types'\nimport { SimpleRow } from '../SimpleRow'\nimport { Amount } from '../../Amount'\nimport { RouteLink } from '../../../routing'\nimport { TRANSACTION_ROUTE } from '../../../../App/routes'\nimport { CredentialIDs } from '../CredentialIDs'\n\nconst Simple: TransactionSimpleComponent = (props: TransactionSimpleProps) => {\n  const { t } = useTranslation()\n  const { data } = props\n  const {\n    owner,\n    sequence,\n    previousTx,\n    destination,\n    amount = {},\n    condition,\n    fulfillment,\n    computationAllowance,\n    credentialIDs,\n  } = data.instructions\n\n  return (\n    <>\n      <SimpleRow label={t('finish_escrow')} data-testid=\"escrow-finish\">\n        <Account account={owner} />\n        {` - ${sequence}`}\n      </SimpleRow>\n      {condition && (\n        <SimpleRow label={t('escrow_condition_short')}>\n          <Account account={condition} />\n        </SimpleRow>\n      )}\n      {fulfillment && (\n        <SimpleRow\n          label={t('escrow_fulfillment')}\n          data-testid=\"escrow-fulfillments\"\n        >\n          {fulfillment}\n        </SimpleRow>\n      )}\n      {amount.amount && (\n        <SimpleRow label={t('escrow_amount')} data-testid=\"escrow-amount\">\n          <Amount value={amount} />\n        </SimpleRow>\n      )}\n      {destination && (\n        <SimpleRow label={t('escrow_destination')}>\n          <Account account={destination} />\n        </SimpleRow>\n      )}\n      {computationAllowance && (\n        <SimpleRow\n          label={t('computation_allowance')}\n          data-testid=\"computation-allowance\"\n        >\n          {computationAllowance} {t('gas')}\n        </SimpleRow>\n      )}\n      {previousTx && (\n        <SimpleRow\n          label={t('escrow_transaction')}\n          className=\"tx\"\n          data-testid=\"escrow-tx\"\n        >\n          <RouteLink\n            className=\"hash\"\n            to={TRANSACTION_ROUTE}\n            params={{ identifier: previousTx }}\n          >\n            {previousTx}\n          </RouteLink>\n        </SimpleRow>\n      )}\n      {credentialIDs && credentialIDs.length > 0 && (\n        <CredentialIDs credentialIDs={credentialIDs} />\n      )}\n    </>\n  )\n}\n\nexport { Simple }\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/EscrowFinish/TableDetail.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { Amount } from '../../Amount'\n\nexport const TableDetail = (props: any) => {\n  const { t } = useTranslation()\n  const { instructions } = props\n  const { amount, owner, sequence, fulfillment, ticketSequence } = instructions\n  return (\n    <div className=\"escrow\">\n      {owner && (\n        <div data-testid=\"escrow-account\">\n          <span className=\"label\">{t('finish_escrow')}</span>\n          <span className=\"account\">{owner}</span>\n          <span>\n            {' '}\n            -{sequence !== 0 ? sequence : `${ticketSequence} (Ticket)`}\n          </span>\n        </div>\n      )}\n      {amount && (\n        <div>\n          <span className=\"label\">{t('amount')}</span>\n          <Amount value={amount} data-testid=\"escrow-amount\" />\n        </div>\n      )}\n      {fulfillment && (\n        <div data-testid=\"escrow-fulfillment\">\n          <span className=\"label\">{t('fulfillment')}</span>\n          <span className=\"fulfillment\"> {fulfillment} </span>\n        </div>\n      )}\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/EscrowFinish/index.ts",
    "content": "import {\n  TransactionAction,\n  TransactionCategory,\n  TransactionMapping,\n} from '../types'\n\nimport { Simple } from './Simple'\nimport { Description } from './Description'\nimport { parser } from './parser'\nimport { TableDetail } from './TableDetail'\n\nexport const EscrowFinishTransaction: TransactionMapping = {\n  Description,\n  Simple,\n  TableDetail,\n  action: TransactionAction.FINISH,\n  category: TransactionCategory.PAYMENT,\n  parser,\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/EscrowFinish/parser.ts",
    "content": "import type { EscrowFinish, TransactionMetadata } from 'xrpl'\nimport { formatAmount } from '../../../../../rippled/lib/txSummary/formatAmount'\nimport { findNode } from '../../../transactionUtils'\n\nconst findNodeFinalFields = (meta: TransactionMetadata) => {\n  const node = findNode(meta, 'DeletedNode', 'Escrow')\n  return node ? node.FinalFields : {}\n}\n\nexport function parser(tx: EscrowFinish, meta: TransactionMetadata) {\n  const escrow = findNodeFinalFields(meta)\n  return {\n    sequence: tx.OfferSequence,\n    owner: tx.Owner,\n    previousTx: escrow.PreviousTxnID,\n    amount: escrow.Amount ? formatAmount(escrow.Amount) : undefined,\n    destination:\n      escrow.Destination && escrow.Destination !== escrow.Account\n        ? escrow.Destination\n        : undefined,\n    condition: escrow.Condition,\n    fulfillment: tx.Fulfillment,\n    computationAllowance: tx.ComputationAllowance,\n    credentialIDs: (tx as any).CredentialIDs, // Cast to any to include CredentialIDs\n  }\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/EscrowFinish/test/EscrowFinishDescription.test.tsx",
    "content": "import { useQuery } from 'react-query'\nimport mockEscrowFinish from './mock_data/EscrowFinish.json'\nimport { Description } from '../Description'\nimport i18n from '../../../../../../i18n/testConfigEnglish'\nimport { createDescriptionRenderFactory } from '../../test'\n\nconst renderComponent = createDescriptionRenderFactory(Description, i18n)\n\njest.mock('react-query', () => ({\n  ...jest.requireActual('react-query'),\n  useQuery: jest.fn(),\n}))\n\nfunction getTestByName(name: string) {\n  return mockEscrowFinish[name]\n}\n\ndescribe('EscrowFinishDescription', () => {\n  it('renders description for EscrowFinish', () => {\n    const { container, unmount } = renderComponent(\n      getTestByName('EscrowFinish having XRP escrowed'),\n    )\n    expect(container.innerHTML).toBe(\n      '<div>Completion was triggered by <a data-testid=\"account\" title=\"r4UDXF4nL7Tgss8uQxn39cCocd8GnGyXS8\" class=\"account\" href=\"/accounts/r4UDXF4nL7Tgss8uQxn39cCocd8GnGyXS8\" data-discover=\"true\">r4UDXF4nL7Tgss8uQxn39cCocd8GnGyXS8</a></div><div data-testid=\"amount-line\">The escrowed amount of <b><span class=\"amount\" data-testid=\"amount\"><span class=\"amount-localized\" data-testid=\"amount-localized\">0.0154</span> <span class=\"currency\" data-testid=\"currency\">XRP</span></span></b> was delivered to <a data-testid=\"account\" title=\"r4UDXF4nL7Tgss8uQxn39cCocd8GnGyXS8\" class=\"account\" href=\"/accounts/r4UDXF4nL7Tgss8uQxn39cCocd8GnGyXS8\" data-discover=\"true\">r4UDXF4nL7Tgss8uQxn39cCocd8GnGyXS8</a><span> (<b><span class=\"amount\" data-testid=\"amount\"><span class=\"amount-localized\" data-testid=\"amount-localized\">0.015388</span> <span class=\"currency\" data-testid=\"currency\">XRP</span></span></b> after transaction cost)</span></div>The escrow was created by <a data-testid=\"account\" title=\"r4UDXF4nL7Tgss8uQxn39cCocd8GnGyXS8\" class=\"account\" href=\"/accounts/r4UDXF4nL7Tgss8uQxn39cCocd8GnGyXS8\" data-discover=\"true\">r4UDXF4nL7Tgss8uQxn39cCocd8GnGyXS8</a> with transaction <a class=\"hash\" href=\"/transactions/3E2E755FA75FF1020C39E2ECC407E9F1C0E49A7229EDD15FF93B9F869878F1CC\" data-discover=\"true\">3E2E75...</a><div>The escrow condition is fulfilled by<span class=\"fulfillment\"> Fulfillment</span></div>',\n    )\n    unmount()\n  })\n\n  it('test XRP amount', () => {\n    const { container, unmount } = renderComponent(\n      getTestByName('EscrowFinish having XRP escrowed'),\n    )\n    expect(\n      container.querySelector('[data-testid=\"amount-line\"]'),\n    ).toHaveTextContent(\n      `The escrowed amount of \\uE9000.0154 XRP was delivered to r4UDXF4nL7Tgss8uQxn39cCocd8GnGyXS8 (\\uE9000.015388 XRP after transaction cost)`,\n    )\n\n    unmount()\n  })\n\n  it('test IOU amount', () => {\n    const { container, unmount } = renderComponent(\n      getTestByName('EscrowFinish having IOU escrowed'),\n    )\n    expect(\n      container.querySelector('[data-testid=\"amount-line\"]'),\n    ).toHaveTextContent(\n      'The escrowed amount of 1.00 ZZZ.rDb2kD2sibG5cxhz3VAoRFkmhPrca4JtL8 was delivered to rHVkbnz2ZLVUCPugCbLsXbCsayrJARLq1N',\n    )\n    unmount()\n  })\n\n  it('test MPT amount', () => {\n    const data = {\n      assetScale: 4,\n    }\n\n    // @ts-ignore\n    useQuery.mockImplementation(() => ({\n      data,\n    }))\n\n    const { container, unmount } = renderComponent(\n      getTestByName('EscrowFinish having MPT escrowed'),\n    )\n    expect(\n      container.querySelector('[data-testid=\"amount-line\"]'),\n    ).toHaveTextContent(\n      'The escrowed amount of 0.0001 0044E493C9FB70ADC1A604A5792643A38CA5887219C21C8C was delivered to rHVkbnz2ZLVUCPugCbLsXbCsayrJARLq1N',\n    )\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/EscrowFinish/test/EscrowFinishSimple.test.tsx",
    "content": "import { useQuery } from 'react-query'\nimport { createSimpleRenderFactory } from '../../test/createWrapperFactory'\nimport { Simple } from '../Simple'\nimport mockEscrowFinish from './mock_data/EscrowFinish.json'\nimport mockEscrowFinishCompAllow from './mock_data/EscrowFinishComputationAllowance.json'\nimport mockEscrowFinishCredentialIDs from './mock_data/EscrowFinishWithCredentialIDs.json'\n\nconst renderComponent = createSimpleRenderFactory(Simple)\n\njest.mock('react-query', () => ({\n  ...jest.requireActual('react-query'),\n  useQuery: jest.fn(),\n}))\n\nfunction getTestByName(name: string) {\n  return mockEscrowFinish[name]\n}\n\ndescribe('EscrowFinishSimple', () => {\n  it('renders with an expiration and offer', () => {\n    const { container, unmount } = renderComponent(\n      getTestByName('EscrowFinish having XRP escrowed'),\n    )\n    expect(\n      container.querySelector('[data-testid=\"escrow-amount\"] .value'),\n    ).toHaveTextContent(`\\uE9000.0154 XRP`)\n    expect(\n      container.querySelector('[data-testid=\"escrow-tx\"] .value'),\n    ).toHaveTextContent(\n      `3E2E755FA75FF1020C39E2ECC407E9F1C0E49A7229EDD15FF93B9F869878F1CC`,\n    )\n    unmount()\n  })\n\n  it('renders a smart escrow finish properly', () => {\n    const { container, unmount } = renderComponent(mockEscrowFinishCompAllow)\n    expect(\n      container.querySelector('[data-testid=\"escrow-amount\"] .value'),\n    ).toHaveTextContent(`\\uE9000.10 XRP`)\n    expect(\n      container.querySelector('[data-testid=\"escrow-tx\"] .value'),\n    ).toHaveTextContent(\n      `2C44A096646F815F9072D8FB3954B2B9025C21AE614CE96CB2D2C4907F9B2A1D`,\n    )\n    expect(\n      container.querySelector('[data-testid=\"computation-allowance\"] .value'),\n    ).toHaveTextContent('1000000 gas')\n    unmount()\n  })\n\n  it('test XRP amount', () => {\n    const { container, unmount } = renderComponent(\n      getTestByName('EscrowFinish having XRP escrowed'),\n    )\n    expect(\n      container.querySelector('[data-testid=\"escrow-amount\"] .value'),\n    ).toHaveTextContent(`\\uE9000.0154 XRP`)\n\n    unmount()\n  })\n\n  it('test IOU amount', () => {\n    const { container, unmount } = renderComponent(\n      getTestByName('EscrowFinish having IOU escrowed'),\n    )\n    expect(\n      container.querySelector('[data-testid=\"escrow-amount\"] .value'),\n    ).toHaveTextContent('1.00 ZZZ.rDb2kD2sibG5cxhz3VAoRFkmhPrca4JtL8')\n    unmount()\n  })\n\n  it('test MPT amount', () => {\n    const data = {\n      assetScale: 4,\n    }\n\n    // @ts-ignore\n    useQuery.mockImplementation(() => ({\n      data,\n    }))\n\n    const { container, unmount } = renderComponent(\n      getTestByName('EscrowFinish having MPT escrowed'),\n    )\n    expect(\n      container.querySelector('[data-testid=\"escrow-amount\"] .value'),\n    ).toHaveTextContent(\n      '0.0001 0044E493C9FB70ADC1A604A5792643A38CA5887219C21C8C',\n    )\n    unmount()\n  })\n\n  it('renders with CredentialIDs', () => {\n    const { container, unmount } = renderComponent(\n      mockEscrowFinishCredentialIDs,\n    )\n    expect(\n      container.querySelector('[data-testid=\"escrow-amount\"] .value'),\n    ).toHaveTextContent(`\\uE9000.0154 XRP`)\n    expect(\n      container.querySelector('[data-testid=\"credential-id-0\"]'),\n    ).toBeInTheDocument()\n    expect(\n      container.querySelector('[data-testid=\"credential-id-1\"]'),\n    ).toBeInTheDocument()\n    expect(\n      container.querySelector('[data-testid=\"credential-id-0\"] .value'),\n    ).toHaveTextContent(\n      '7B685088D546B9E8905D26206F452BB2F44D9A33C9BD9BCF280F7BA39015A955',\n    )\n    expect(\n      container.querySelector('[data-testid=\"credential-id-1\"] .value'),\n    ).toHaveTextContent(\n      '8B685088D546B9E8905D26206F452BB2F44D9A33C9BD9BCF280F7BA39015A956',\n    )\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/EscrowFinish/test/EscrowFinishTableDetail.test.tsx",
    "content": "import { useQuery } from 'react-query'\nimport { createTableDetailRenderFactory } from '../../test'\nimport { TableDetail } from '../TableDetail'\nimport mockEscrowFinish from './mock_data/EscrowFinish.json'\nimport i18n from '../../../../../../i18n/testConfigEnglish'\n\nconst renderComponent = createTableDetailRenderFactory(TableDetail, i18n)\n\njest.mock('react-query', () => ({\n  ...jest.requireActual('react-query'),\n  useQuery: jest.fn(),\n}))\n\nfunction getTestByName(name: string) {\n  return mockEscrowFinish[name]\n}\n\ndescribe('EscrowFinishTableDetail', () => {\n  it('renders EscrowFinish without crashing', () => {\n    const { container, unmount } = renderComponent(\n      getTestByName('EscrowFinish having XRP escrowed'),\n    )\n    expect(\n      container.querySelector('[data-testid=\"escrow-account\"]'),\n    ).toHaveTextContent(`finish escrowr4UDXF4nL7Tgss8uQxn39cCocd8GnGyXS8 -28`)\n    expect(container.querySelector('[data-testid=\"amount\"]')).toHaveTextContent(\n      `\\uE9000.0154 XRP`,\n    )\n    expect(\n      container.querySelector('[data-testid=\"escrow-fulfillment\"]'),\n    ).toHaveTextContent(`fulfillment Fulfillment`)\n    unmount()\n  })\n\n  it('test XRP amount', () => {\n    const { container, unmount } = renderComponent(\n      getTestByName('EscrowFinish having XRP escrowed'),\n    )\n    expect(container.querySelector('[data-testid=\"amount\"]')).toHaveTextContent(\n      `\\uE9000.0154 XRP`,\n    )\n\n    unmount()\n  })\n\n  it('test IOU amount', () => {\n    const { container, unmount } = renderComponent(\n      getTestByName('EscrowFinish having IOU escrowed'),\n    )\n    expect(container.querySelector('[data-testid=\"amount\"]')).toHaveTextContent(\n      `1.00 ZZZ.rDb2kD2sibG5cxhz3VAoRFkmhPrca4JtL8`,\n    )\n\n    unmount()\n  })\n\n  it('test MPT amount', () => {\n    const data = {\n      assetScale: 4,\n    }\n\n    // @ts-ignore\n    useQuery.mockImplementation(() => ({\n      data,\n    }))\n\n    const { container, unmount } = renderComponent(\n      getTestByName('EscrowFinish having MPT escrowed'),\n    )\n    expect(container.querySelector('[data-testid=\"amount\"]')).toHaveTextContent(\n      `0.0001 0044E493C9FB70ADC1A604A5792643A38CA5887219C21C8C`,\n    )\n\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/EscrowFinish/test/mock_data/EscrowFinish.json",
    "content": "{\n  \"EscrowFinish having XRP escrowed\": {\n    \"hash\": \"985F9CA6FD2256D5C59F8B2CC1F51BDB2F12EB7C58CB2CCA7E4A74161432B7C4\",\n    \"ledger_index\": 37467862,\n    \"date\": \"2018-03-25T00:45:12+00:00\",\n    \"tx\": {\n      \"TransactionType\": \"EscrowFinish\",\n      \"Flags\": 2147483648,\n      \"Fulfillment\": \"Fulfillment\",\n      \"Sequence\": 31,\n      \"OfferSequence\": 28,\n      \"LastLedgerSequence\": 37467863,\n      \"Fee\": \"12\",\n      \"SigningPubKey\": \"0380BB0305B1192D1F20E2E15C93E99434F8DF52ED72FC18FA4F69671B578691DF\",\n      \"TxnSignature\": \"30450221009254A6DE4960F185E19A6717B000EB542C1340BABB5E1C0447D743FB00A026A50220232DFE95819DA27B789DF47359C3EDD29FC539041EFF8526185D42485CF886A6\",\n      \"Account\": \"r4UDXF4nL7Tgss8uQxn39cCocd8GnGyXS8\",\n      \"Owner\": \"r4UDXF4nL7Tgss8uQxn39cCocd8GnGyXS8\"\n    },\n    \"meta\": {\n      \"TransactionIndex\": 23,\n      \"AffectedNodes\": [\n        {\n          \"ModifiedNode\": {\n            \"LedgerEntryType\": \"AccountRoot\",\n            \"PreviousTxnLgrSeq\": 37467849,\n            \"PreviousTxnID\": \"C730DAD26F068100CDD7F5CF17CFB7EA729D3000BFDF92BBC36590C4FE906866\",\n            \"LedgerIndex\": \"70AD67C13AB61B6FCAF9CD65862478E079B05C772D65F60179EC8E7E7701740E\",\n            \"PreviousFields\": {\n              \"Sequence\": 31,\n              \"OwnerCount\": 4,\n              \"Balance\": \"59916121\"\n            },\n            \"FinalFields\": {\n              \"Flags\": 0,\n              \"Sequence\": 32,\n              \"OwnerCount\": 3,\n              \"Balance\": \"59931509\",\n              \"Account\": \"r4UDXF4nL7Tgss8uQxn39cCocd8GnGyXS8\"\n            }\n          }\n        },\n        {\n          \"ModifiedNode\": {\n            \"LedgerEntryType\": \"DirectoryNode\",\n            \"LedgerIndex\": \"7C3EC8879AD0E00BAE0957F7A5F1DBDD0E84F04202912AF9910296CD6FC427E0\",\n            \"FinalFields\": {\n              \"Flags\": 0,\n              \"RootIndex\": \"7C3EC8879AD0E00BAE0957F7A5F1DBDD0E84F04202912AF9910296CD6FC427E0\",\n              \"Owner\": \"r4UDXF4nL7Tgss8uQxn39cCocd8GnGyXS8\"\n            }\n          }\n        },\n        {\n          \"DeletedNode\": {\n            \"LedgerEntryType\": \"Escrow\",\n            \"LedgerIndex\": \"C4B2935F1E8BBCF7C10FBF5E3C98897DE37A2DA6C6F3E3A591B55D1A6DC8FDEF\",\n            \"FinalFields\": {\n              \"Flags\": 0,\n              \"PreviousTxnLgrSeq\": 37466547,\n              \"DestinationTag\": 0,\n              \"FinishAfter\": 575249422,\n              \"OwnerNode\": \"0000000000000000\",\n              \"PreviousTxnID\": \"3E2E755FA75FF1020C39E2ECC407E9F1C0E49A7229EDD15FF93B9F869878F1CC\",\n              \"Amount\": \"15400\",\n              \"Account\": \"r4UDXF4nL7Tgss8uQxn39cCocd8GnGyXS8\",\n              \"Destination\": \"r4UDXF4nL7Tgss8uQxn39cCocd8GnGyXS8\"\n            }\n          }\n        }\n      ],\n      \"TransactionResult\": \"tesSUCCESS\"\n    }\n  },\n  \"EscrowFinish having IOU escrowed\": {\n    \"tx\": {\n      \"Account\": \"rHVkbnz2ZLVUCPugCbLsXbCsayrJARLq1N\",\n      \"Fee\": \"1\",\n      \"Flags\": 0,\n      \"LastLedgerSequence\": 4469192,\n      \"OfferSequence\": 4466551,\n      \"Owner\": \"rDtpgHpsUFu2dHC6fMZnwgZvNEDZ9MG9YK\",\n      \"Sequence\": 4467161,\n      \"SigningPubKey\": \"EDDB3F5BC950C1DBCEB6C9C10B7E70FB333618F944447F1DFD9C2D5543B81A2BCB\",\n      \"TransactionType\": \"EscrowFinish\",\n      \"TxnSignature\": \"A7FC7A08C03AD4F3F08DDBC7489AE755AB162B4645E1AD365B481122D1EAE4E8ECBCFA9AC2FC010B7CA01AB18EDB12B09E6FE08DFF0A33813DDF78681E8F9401\",\n      \"ledger_index\": 4469174,\n      \"ctid\": \"C04431B600050002\",\n      \"date\": 805842630\n    },\n    \"hash\": \"5D39379E6FD59BB84FA908AFC032271894E25FC65DBAE465B05A5EECA65B01FC\",\n    \"meta\": {\n      \"AffectedNodes\": [\n        {\n          \"ModifiedNode\": {\n            \"FinalFields\": {\n              \"Flags\": 0,\n              \"Owner\": \"rHVkbnz2ZLVUCPugCbLsXbCsayrJARLq1N\",\n              \"RootIndex\": \"02968F27FCD2E454F5146A6B5768F55C1FCF659A858265406B7855AD2E364217\"\n            },\n            \"LedgerEntryType\": \"DirectoryNode\",\n            \"LedgerIndex\": \"02968F27FCD2E454F5146A6B5768F55C1FCF659A858265406B7855AD2E364217\",\n            \"PreviousTxnID\": \"94869A575F0B48A8AFC6628D83241FB13CD082AD35D172103E26B79F77F6C179\",\n            \"PreviousTxnLgrSeq\": 4469165\n          }\n        },\n        {\n          \"ModifiedNode\": {\n            \"FinalFields\": {\n              \"Flags\": 0,\n              \"Owner\": \"rDtpgHpsUFu2dHC6fMZnwgZvNEDZ9MG9YK\",\n              \"RootIndex\": \"1F882E04D2F24B427C89A1B79A2C26C94A3387CF60228C86E9C027D05FFED1FF\"\n            },\n            \"LedgerEntryType\": \"DirectoryNode\",\n            \"LedgerIndex\": \"1F882E04D2F24B427C89A1B79A2C26C94A3387CF60228C86E9C027D05FFED1FF\",\n            \"PreviousTxnID\": \"94869A575F0B48A8AFC6628D83241FB13CD082AD35D172103E26B79F77F6C179\",\n            \"PreviousTxnLgrSeq\": 4469165\n          }\n        },\n        {\n          \"DeletedNode\": {\n            \"FinalFields\": {\n              \"Account\": \"rDtpgHpsUFu2dHC6fMZnwgZvNEDZ9MG9YK\",\n              \"Amount\": {\n                \"currency\": \"ZZZ\",\n                \"issuer\": \"rDb2kD2sibG5cxhz3VAoRFkmhPrca4JtL8\",\n                \"value\": \"1\"\n              },\n              \"CancelAfter\": 805842790,\n              \"Destination\": \"rHVkbnz2ZLVUCPugCbLsXbCsayrJARLq1N\",\n              \"DestinationNode\": \"0\",\n              \"FinishAfter\": 805842600,\n              \"Flags\": 0,\n              \"IssuerNode\": \"0\",\n              \"OwnerNode\": \"0\",\n              \"PreviousTxnID\": \"94869A575F0B48A8AFC6628D83241FB13CD082AD35D172103E26B79F77F6C179\",\n              \"PreviousTxnLgrSeq\": 4469165\n            },\n            \"LedgerEntryType\": \"Escrow\",\n            \"LedgerIndex\": \"771DFC8F43D0F9DCE2313A26D6F867EEDB3595AA46B46CA076E26CDCFC369167\"\n          }\n        },\n        {\n          \"ModifiedNode\": {\n            \"FinalFields\": {\n              \"Flags\": 0,\n              \"Owner\": \"rDb2kD2sibG5cxhz3VAoRFkmhPrca4JtL8\",\n              \"RootIndex\": \"783570F9840AABAE60F077CA184FA9686DAADC12BF3270514C1931CBC0DC8452\"\n            },\n            \"LedgerEntryType\": \"DirectoryNode\",\n            \"LedgerIndex\": \"783570F9840AABAE60F077CA184FA9686DAADC12BF3270514C1931CBC0DC8452\",\n            \"PreviousTxnID\": \"94869A575F0B48A8AFC6628D83241FB13CD082AD35D172103E26B79F77F6C179\",\n            \"PreviousTxnLgrSeq\": 4469165\n          }\n        },\n        {\n          \"ModifiedNode\": {\n            \"FinalFields\": {\n              \"Balance\": {\n                \"currency\": \"ZZZ\",\n                \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n                \"value\": \"-101\"\n              },\n              \"Flags\": 131072,\n              \"HighLimit\": {\n                \"currency\": \"ZZZ\",\n                \"issuer\": \"rHVkbnz2ZLVUCPugCbLsXbCsayrJARLq1N\",\n                \"value\": \"10000\"\n              },\n              \"HighNode\": \"0\",\n              \"LowLimit\": {\n                \"currency\": \"ZZZ\",\n                \"issuer\": \"rDb2kD2sibG5cxhz3VAoRFkmhPrca4JtL8\",\n                \"value\": \"0\"\n              },\n              \"LowNode\": \"0\"\n            },\n            \"LedgerEntryType\": \"RippleState\",\n            \"LedgerIndex\": \"8F7710AF2382180CAE97B13555D3244970B2B4E7AB580929C2EA8164612086D4\",\n            \"PreviousFields\": {\n              \"Balance\": {\n                \"currency\": \"ZZZ\",\n                \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n                \"value\": \"-100\"\n              }\n            },\n            \"PreviousTxnID\": \"315DFAFF176C555C5176CA91B9A646B79A9064D24018180CCB7368268B39A134\",\n            \"PreviousTxnLgrSeq\": 4469163\n          }\n        },\n        {\n          \"ModifiedNode\": {\n            \"FinalFields\": {\n              \"Account\": \"rHVkbnz2ZLVUCPugCbLsXbCsayrJARLq1N\",\n              \"Balance\": \"99999998\",\n              \"Flags\": 0,\n              \"OwnerCount\": 3,\n              \"Sequence\": 4467162\n            },\n            \"LedgerEntryType\": \"AccountRoot\",\n            \"LedgerIndex\": \"B9E2BAE404EEADECEE678349CD2639831A6766AE15616F570F5B345868422912\",\n            \"PreviousFields\": {\n              \"Balance\": \"99999999\",\n              \"Sequence\": 4467161\n            },\n            \"PreviousTxnID\": \"94869A575F0B48A8AFC6628D83241FB13CD082AD35D172103E26B79F77F6C179\",\n            \"PreviousTxnLgrSeq\": 4469165\n          }\n        },\n        {\n          \"ModifiedNode\": {\n            \"FinalFields\": {\n              \"Account\": \"rDtpgHpsUFu2dHC6fMZnwgZvNEDZ9MG9YK\",\n              \"Balance\": \"99999907\",\n              \"Flags\": 0,\n              \"OwnerCount\": 13,\n              \"Sequence\": 4466552\n            },\n            \"LedgerEntryType\": \"AccountRoot\",\n            \"LedgerIndex\": \"C1F036A2B38438CE1D39AC1ED3682CE46703352616B6EA8853F4FB25F4684313\",\n            \"PreviousFields\": {\n              \"OwnerCount\": 14\n            },\n            \"PreviousTxnID\": \"94869A575F0B48A8AFC6628D83241FB13CD082AD35D172103E26B79F77F6C179\",\n            \"PreviousTxnLgrSeq\": 4469165\n          }\n        }\n      ],\n      \"TransactionIndex\": 5,\n      \"TransactionResult\": \"tesSUCCESS\"\n    },\n    \"validated\": true,\n    \"ledger_index\": 4469174,\n    \"ledger_hash\": \"5E8A7C3FD44E846D6096ABB124FD4ACD451E4616261EC6CA03C562A580E6D90B\",\n    \"close_time_iso\": \"2025-07-14T21:10:30Z\",\n    \"ctid\": \"C04431B600050002\"\n  },\n  \"EscrowFinish having MPT escrowed\": {\n    \"tx\": {\n      \"Account\": \"rHVkbnz2ZLVUCPugCbLsXbCsayrJARLq1N\",\n      \"Fee\": \"1\",\n      \"Flags\": 0,\n      \"LastLedgerSequence\": 4543614,\n      \"OfferSequence\": 4466568,\n      \"Owner\": \"rDtpgHpsUFu2dHC6fMZnwgZvNEDZ9MG9YK\",\n      \"Sequence\": 4467166,\n      \"SigningPubKey\": \"EDDB3F5BC950C1DBCEB6C9C10B7E70FB333618F944447F1DFD9C2D5543B81A2BCB\",\n      \"TransactionType\": \"EscrowFinish\",\n      \"TxnSignature\": \"028C429A596E4AA857D9A728B7124423DF3DD816DB10353C59B35C240197091472E2195F1C0A3BEBA26BE8D7E0E71CD20F54DE7B3D93447998DCDB2A6710470D\",\n      \"ledger_index\": 4543596,\n      \"ctid\": \"C045546C00000002\",\n      \"date\": 806076750\n    },\n    \"hash\": \"E1FDD95D1303DEF2794D49913CDE7CD91EB3FFE0FF35C7AB2E7DC7BD8EDE7851\",\n    \"meta\": {\n      \"AffectedNodes\": [\n        {\n          \"ModifiedNode\": {\n            \"FinalFields\": {\n              \"Flags\": 0,\n              \"Owner\": \"rHVkbnz2ZLVUCPugCbLsXbCsayrJARLq1N\",\n              \"RootIndex\": \"02968F27FCD2E454F5146A6B5768F55C1FCF659A858265406B7855AD2E364217\"\n            },\n            \"LedgerEntryType\": \"DirectoryNode\",\n            \"LedgerIndex\": \"02968F27FCD2E454F5146A6B5768F55C1FCF659A858265406B7855AD2E364217\",\n            \"PreviousTxnID\": \"85844936B005ECFA2A39B2DBB92EED81AF9DF393E9D6C2A207AB5E34F6C66550\",\n            \"PreviousTxnLgrSeq\": 4543586\n          }\n        },\n        {\n          \"ModifiedNode\": {\n            \"FinalFields\": {\n              \"Flags\": 0,\n              \"Owner\": \"rDtpgHpsUFu2dHC6fMZnwgZvNEDZ9MG9YK\",\n              \"RootIndex\": \"1F882E04D2F24B427C89A1B79A2C26C94A3387CF60228C86E9C027D05FFED1FF\"\n            },\n            \"LedgerEntryType\": \"DirectoryNode\",\n            \"LedgerIndex\": \"1F882E04D2F24B427C89A1B79A2C26C94A3387CF60228C86E9C027D05FFED1FF\",\n            \"PreviousTxnID\": \"85844936B005ECFA2A39B2DBB92EED81AF9DF393E9D6C2A207AB5E34F6C66550\",\n            \"PreviousTxnLgrSeq\": 4543586\n          }\n        },\n        {\n          \"ModifiedNode\": {\n            \"FinalFields\": {\n              \"Account\": \"rDtpgHpsUFu2dHC6fMZnwgZvNEDZ9MG9YK\",\n              \"Flags\": 0,\n              \"MPTAmount\": \"99\",\n              \"MPTokenIssuanceID\": \"0044E493C9FB70ADC1A604A5792643A38CA5887219C21C8C\",\n              \"OwnerNode\": \"0\"\n            },\n            \"LedgerEntryType\": \"MPToken\",\n            \"LedgerIndex\": \"5A29E93B3B281F0271A7C4E50B9E017CB3836C7FFA203827976A9738B1F3F029\",\n            \"PreviousFields\": {\n              \"LockedAmount\": \"1\"\n            },\n            \"PreviousTxnID\": \"85844936B005ECFA2A39B2DBB92EED81AF9DF393E9D6C2A207AB5E34F6C66550\",\n            \"PreviousTxnLgrSeq\": 4543586\n          }\n        },\n        {\n          \"DeletedNode\": {\n            \"FinalFields\": {\n              \"Account\": \"rDtpgHpsUFu2dHC6fMZnwgZvNEDZ9MG9YK\",\n              \"Amount\": {\n                \"mpt_issuance_id\": \"0044E493C9FB70ADC1A604A5792643A38CA5887219C21C8C\",\n                \"value\": \"1\"\n              },\n              \"CancelAfter\": 806076910,\n              \"Destination\": \"rHVkbnz2ZLVUCPugCbLsXbCsayrJARLq1N\",\n              \"DestinationNode\": \"0\",\n              \"FinishAfter\": 806076720,\n              \"Flags\": 0,\n              \"OwnerNode\": \"0\",\n              \"PreviousTxnID\": \"85844936B005ECFA2A39B2DBB92EED81AF9DF393E9D6C2A207AB5E34F6C66550\",\n              \"PreviousTxnLgrSeq\": 4543586\n            },\n            \"LedgerEntryType\": \"Escrow\",\n            \"LedgerIndex\": \"B24F0F56AAC834BB12BD56C6BF78FC35E159EC135EB1C323D70B726A99F19D7B\"\n          }\n        },\n        {\n          \"ModifiedNode\": {\n            \"FinalFields\": {\n              \"Account\": \"rHVkbnz2ZLVUCPugCbLsXbCsayrJARLq1N\",\n              \"Balance\": \"99999993\",\n              \"Flags\": 0,\n              \"OwnerCount\": 6,\n              \"Sequence\": 4467167\n            },\n            \"LedgerEntryType\": \"AccountRoot\",\n            \"LedgerIndex\": \"B9E2BAE404EEADECEE678349CD2639831A6766AE15616F570F5B345868422912\",\n            \"PreviousFields\": {\n              \"Balance\": \"99999994\",\n              \"OwnerCount\": 5,\n              \"Sequence\": 4467166\n            },\n            \"PreviousTxnID\": \"85844936B005ECFA2A39B2DBB92EED81AF9DF393E9D6C2A207AB5E34F6C66550\",\n            \"PreviousTxnLgrSeq\": 4543586\n          }\n        },\n        {\n          \"ModifiedNode\": {\n            \"FinalFields\": {\n              \"Flags\": 40,\n              \"Issuer\": \"rKQzpv6jvPeRSULjdwWZgiCZEUNpkSXzYH\",\n              \"MPTokenMetadata\": \"7B0A202020202020227469636B6572223A20225442494C4C222C0A202020202020226E616D65223A2022542D42696C6C205969656C6420546F6B656E222C0A2020202020202264657363223A202241207969656C642D62656172696E6720737461626C65636F696E206261636B65642062792073686F72742D7465726D20552E532E205472656173757269657320616E64206D6F6E6579206D61726B657420696E737472756D656E74732E222C0A2020202020202269636F6E223A202268747470733A2F2F6578616D706C652E6F72672F7462696C6C2D69636F6E2E706E67222C0A2020202020202261737365745F636C617373223A2022727761222C0A2020202020202261737365745F737562636C617373223A20227472656173757279222C0A202020202020226973737565725F6E616D65223A20224578616D706C65205969656C6420436F2E222C0A2020202020202275726C73223A205B0A20202020202020207B0A202020202020202020202275726C223A202268747470733A2F2F6578616D706C657969656C642E636F2F7462696C6C222C0A202020202020202020202274797065223A202277656273697465222C0A20202020202020202020227469746C65223A202250726F647563742050616765220A20202020202020207D2C0A20202020202020207B0A202020202020202020202275726C223A202268747470733A2F2F6578616D706C657969656C642E636F2F646F6373222C0A202020202020202020202274797065223A2022646F6373222C0A20202020202020202020227469746C65223A20225969656C6420546F6B656E20446F6373220A20202020202020207D0A2020202020205D2C0A202020202020226164646974696F6E616C5F696E666F223A207B0A202020202020202022696E7465726573745F72617465223A2022352E303025222C0A202020202020202022696E7465726573745F74797065223A20227661726961626C65222C0A2020202020202020227969656C645F736F75726365223A2022552E532E2054726561737572792042696C6C73222C0A2020202020202020226D617475726974795F64617465223A2022323034352D30362D3330222C0A2020202020202020226375736970223A2022393132373936525830220A2020202020207D0A202020207D\",\n              \"MaximumAmount\": \"50000000\",\n              \"OutstandingAmount\": \"100\",\n              \"OwnerNode\": \"0\",\n              \"Sequence\": 4514963\n            },\n            \"LedgerEntryType\": \"MPTokenIssuance\",\n            \"LedgerIndex\": \"BE5DFE70E39F527214CDCA714F2335F99447E6346F1C6901958E7D8123DF58C2\",\n            \"PreviousFields\": {\n              \"LockedAmount\": \"1\"\n            },\n            \"PreviousTxnID\": \"85844936B005ECFA2A39B2DBB92EED81AF9DF393E9D6C2A207AB5E34F6C66550\",\n            \"PreviousTxnLgrSeq\": 4543586\n          }\n        },\n        {\n          \"ModifiedNode\": {\n            \"FinalFields\": {\n              \"Account\": \"rDtpgHpsUFu2dHC6fMZnwgZvNEDZ9MG9YK\",\n              \"Balance\": \"99999890\",\n              \"Flags\": 0,\n              \"OwnerCount\": 22,\n              \"Sequence\": 4466569\n            },\n            \"LedgerEntryType\": \"AccountRoot\",\n            \"LedgerIndex\": \"C1F036A2B38438CE1D39AC1ED3682CE46703352616B6EA8853F4FB25F4684313\",\n            \"PreviousFields\": {\n              \"OwnerCount\": 23\n            },\n            \"PreviousTxnID\": \"85844936B005ECFA2A39B2DBB92EED81AF9DF393E9D6C2A207AB5E34F6C66550\",\n            \"PreviousTxnLgrSeq\": 4543586\n          }\n        },\n        {\n          \"CreatedNode\": {\n            \"LedgerEntryType\": \"MPToken\",\n            \"LedgerIndex\": \"C2A9A6F4DE55540E9315D83E2CCA1D4A00CE1A16AAD7EE8B621F795E4DFEC0A9\",\n            \"NewFields\": {\n              \"Account\": \"rHVkbnz2ZLVUCPugCbLsXbCsayrJARLq1N\",\n              \"MPTAmount\": \"1\",\n              \"MPTokenIssuanceID\": \"0044E493C9FB70ADC1A604A5792643A38CA5887219C21C8C\"\n            }\n          }\n        }\n      ],\n      \"TransactionIndex\": 0,\n      \"TransactionResult\": \"tesSUCCESS\"\n    },\n    \"validated\": true,\n    \"ledger_index\": 4543596,\n    \"ledger_hash\": \"4941D35B768EAC6F3B57CC4BACEF864B76BFEF8B25B589872318BEAB6D62532E\",\n    \"close_time_iso\": \"2025-07-17T14:12:30Z\",\n    \"ctid\": \"C045546C00000002\"\n  }\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/EscrowFinish/test/mock_data/EscrowFinishComputationAllowance.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rPPLRQwB3KGvpfDMABZucA8ifJJcvQhHD3\",\n    \"ComputationAllowance\": 1000000,\n    \"Fee\": \"10000\",\n    \"Flags\": 0,\n    \"LastLedgerSequence\": 1450713,\n    \"NetworkID\": 2002,\n    \"OfferSequence\": 1450673,\n    \"Owner\": \"rBgoQAw3UnosNycPuoYYAWRE2oT3JcZq9P\",\n    \"Sequence\": 460749,\n    \"SigningPubKey\": \"ED9EBC89633B128D883BF098E05ADE6ED58918C045798E6953BED4E862A5F28479\",\n    \"TransactionType\": \"EscrowFinish\",\n    \"TxnSignature\": \"FE9A56652DEBC7CD0B2A58DB9E5C9EA346B79DEF4D3674553E328248405272541F9A7350977BDBDFAA5BCA09F2A2FF4055733C9FEF4327CBC3742D74135B6F00\"\n  },\n  \"ctid\": \"C01622C7000007D2\",\n  \"date\": 800467292,\n  \"hash\": \"DA610A7C898AF311D8DCEE0DBE61E6C2061829FBEB3309DE90171B868423EF03\",\n  \"inLedger\": 1450695,\n  \"ledger_index\": 1450695,\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rs4KGMcFw68vcShciFUztZSRjnTq13oDg3\",\n            \"RootIndex\": \"0B77DDBCBE8E3043DD721BB0511C0A1985B771FD4921924EF1E0C0ECC13FF449\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"0B77DDBCBE8E3043DD721BB0511C0A1985B771FD4921924EF1E0C0ECC13FF449\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rBgoQAw3UnosNycPuoYYAWRE2oT3JcZq9P\",\n            \"RootIndex\": \"1204773E9124B2913E653E50175465D42C9DB4C90EF17890D110C79C00951E17\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"1204773E9124B2913E653E50175465D42C9DB4C90EF17890D110C79C00951E17\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rPPLRQwB3KGvpfDMABZucA8ifJJcvQhHD3\",\n            \"Balance\": \"99830000\",\n            \"Flags\": 0,\n            \"OwnerCount\": 0,\n            \"Sequence\": 460750\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"501280F3B041963B8DFD84A75B36D5E031E45E23A870300E611DA2BEBD611782\",\n          \"PreviousFields\": {\n            \"Balance\": \"99840000\",\n            \"Sequence\": 460749\n          },\n          \"PreviousTxnID\": \"99057D7AA54CF98AB880D78C299644254B9797F47BBEA99C18BCBF22030BA759\",\n          \"PreviousTxnLgrSeq\": 1136863\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rBgoQAw3UnosNycPuoYYAWRE2oT3JcZq9P\",\n            \"Balance\": \"99890000\",\n            \"Flags\": 0,\n            \"OwnerCount\": 0,\n            \"Sequence\": 1450674\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"5AB010023D40BD0069ABA7C535574816B818953E12148650C57AB0EFDF8988D1\",\n          \"PreviousFields\": {\n            \"OwnerCount\": 2\n          },\n          \"PreviousTxnID\": \"2C44A096646F815F9072D8FB3954B2B9025C21AE614CE96CB2D2C4907F9B2A1D\",\n          \"PreviousTxnLgrSeq\": 1450675\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rBgoQAw3UnosNycPuoYYAWRE2oT3JcZq9P\",\n            \"Amount\": \"100000\",\n            \"CancelAfter\": 800469231,\n            \"Data\": \"70000000\",\n            \"Destination\": \"rs4KGMcFw68vcShciFUztZSRjnTq13oDg3\",\n            \"DestinationNode\": \"0\",\n            \"FinishAfter\": 800467236,\n            \"FinishFunction\": \"0061736D010000000105016000017F02190108686F73745F6C69620C6765744C656467657253716E0000030201000405017001010105030100100619037F01418080C0000B7F00418080C0000B7F00418080C0000B072D04066D656D6F7279020005726561647900010A5F5F646174615F656E6403010B5F5F686561705F6261736503020A0D010B0010808080800041044A0B0071046E616D6500100F6C65646765725F73716E2E7761736D014402003A5F5A4E31306C65646765725F73716E38686F73745F6C696231326765744C656467657253716E313768316433393063353137643539356635644501057265616479071201000F5F5F737461636B5F706F696E74657200550970726F64756365727302086C616E6775616765010452757374000C70726F6365737365642D62790105727573746325312E38362E302D6E696768746C79202862336233363861313820323032352D30312D30352900490F7461726765745F6665617475726573042B0A6D756C746976616C75652B0F6D757461626C652D676C6F62616C732B0F7265666572656E63652D74797065732B087369676E2D657874\",\n            \"Flags\": 0,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"2C44A096646F815F9072D8FB3954B2B9025C21AE614CE96CB2D2C4907F9B2A1D\",\n            \"PreviousTxnLgrSeq\": 1450675\n          },\n          \"LedgerEntryType\": \"Escrow\",\n          \"LedgerIndex\": \"5C27F9721E461014117FC364A15D81B1761CA58CBBAB0A94823A9970586DA5B4\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rs4KGMcFw68vcShciFUztZSRjnTq13oDg3\",\n            \"Balance\": \"100100000\",\n            \"Flags\": 0,\n            \"OwnerCount\": 0,\n            \"Sequence\": 1450674\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"67767DBD166A61727DCB28A07CC208A11DB7B7A5BB49BB63AFD473766EF688A8\",\n          \"PreviousFields\": {\n            \"Balance\": \"100000000\"\n          },\n          \"PreviousTxnID\": \"2C44A096646F815F9072D8FB3954B2B9025C21AE614CE96CB2D2C4907F9B2A1D\",\n          \"PreviousTxnLgrSeq\": 1450675\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tesSUCCESS\"\n  },\n  \"validated\": true\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/EscrowFinish/test/mock_data/EscrowFinishWithCredentialIDs.json",
    "content": "{\n  \"hash\": \"985F9CA6FD2256D5C59F8B2CC1F51BDB2F12EB7C58CB2CCA7E4A74161432B7C4\",\n  \"ledger_index\": 37467862,\n  \"date\": \"2018-03-25T00:45:12+00:00\",\n  \"tx\": {\n    \"TransactionType\": \"EscrowFinish\",\n    \"Flags\": 2147483648,\n    \"Fulfillment\": \"Fulfillment\",\n    \"Sequence\": 31,\n    \"OfferSequence\": 28,\n    \"LastLedgerSequence\": 37467863,\n    \"Fee\": \"12\",\n    \"SigningPubKey\": \"0380BB0305B1192D1F20E2E15C93E99434F8DF52ED72FC18FA4F69671B578691DF\",\n    \"TxnSignature\": \"30450221009254A6DE4960F185E19A6717B000EB542C1340BABB5E1C0447D743FB00A026A50220232DFE95819DA27B789DF47359C3EDD29FC539041EFF8526185D42485CF886A6\",\n    \"Account\": \"r4UDXF4nL7Tgss8uQxn39cCocd8GnGyXS8\",\n    \"Owner\": \"r4UDXF4nL7Tgss8uQxn39cCocd8GnGyXS8\",\n    \"CredentialIDs\": [\n      \"7B685088D546B9E8905D26206F452BB2F44D9A33C9BD9BCF280F7BA39015A955\",\n      \"8B685088D546B9E8905D26206F452BB2F44D9A33C9BD9BCF280F7BA39015A956\"\n    ]\n  },\n  \"meta\": {\n    \"TransactionIndex\": 23,\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"PreviousTxnLgrSeq\": 37467849,\n          \"PreviousTxnID\": \"C730DAD26F068100CDD7F5CF17CFB7EA729D3000BFDF92BBC36590C4FE906866\",\n          \"LedgerIndex\": \"70AD67C13AB61B6FCAF9CD65862478E079B05C772D65F60179EC8E7E7701740E\",\n          \"PreviousFields\": {\n            \"Sequence\": 31,\n            \"OwnerCount\": 4,\n            \"Balance\": \"59916121\"\n          },\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Sequence\": 32,\n            \"OwnerCount\": 3,\n            \"Balance\": \"59931509\",\n            \"Account\": \"r4UDXF4nL7Tgss8uQxn39cCocd8GnGyXS8\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"LedgerEntryType\": \"Escrow\",\n          \"LedgerIndex\": \"89C78DC2F504E3C8CA91C7BE9EA53CA7F72F44A30F8F57CFA8CF8BA90ADC6826\",\n          \"FinalFields\": {\n            \"Destination\": \"r4UDXF4nL7Tgss8uQxn39cCocd8GnGyXS8\",\n            \"Amount\": \"15400\",\n            \"PreviousTxnLgrSeq\": 37467849,\n            \"Account\": \"r4UDXF4nL7Tgss8uQxn39cCocd8GnGyXS8\",\n            \"PreviousTxnID\": \"3E2E755FA75FF1020C39E2ECC407E9F1C0E49A7229EDD15FF93B9F869878F1CC\"\n          }\n        }\n      }\n    ],\n    \"TransactionResult\": \"tesSUCCESS\",\n    \"delivered_amount\": \"15400\"\n  }\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/LoanBrokerCoverClawback/Simple.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { TransactionSimpleComponent, TransactionSimpleProps } from '../types'\nimport { SimpleRow } from '../SimpleRow'\nimport { Amount } from '../../Amount'\n\nexport const Simple: TransactionSimpleComponent = ({\n  data,\n}: TransactionSimpleProps) => {\n  const { t } = useTranslation()\n  const { loanBrokerID, calculatedAmount } = data.instructions\n\n  return (\n    <>\n      {loanBrokerID && (\n        <SimpleRow label={t('loan_broker_id')} data-testid=\"loan-broker-id\">\n          {loanBrokerID}\n        </SimpleRow>\n      )}\n      {calculatedAmount && (\n        <SimpleRow label={t('amount')} data-testid=\"amount\">\n          <Amount value={calculatedAmount} />\n        </SimpleRow>\n      )}\n    </>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/LoanBrokerCoverClawback/TableDetail.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { TransactionTableDetailProps } from '../types'\nimport { Amount } from '../../Amount'\n\nexport const TableDetail = ({ instructions }: TransactionTableDetailProps) => {\n  const { t } = useTranslation()\n  const { amount, calculatedAmount, loanBrokerID } = instructions\n\n  const displayAmount = calculatedAmount || amount\n\n  return (\n    <div className=\"loan-broker-cover-clawback\">\n      <span className=\"label\">{t('claws_back')}</span>\n      {displayAmount && <Amount value={displayAmount} />}\n      <span>\n        {t('first_loss_capital')} {t('from')} {t('loan_broker_id')}{' '}\n        <b>{loanBrokerID} </b>\n      </span>\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/LoanBrokerCoverClawback/index.ts",
    "content": "import {\n  TransactionAction,\n  TransactionCategory,\n  TransactionMapping,\n} from '../types'\n\nimport { Simple } from './Simple'\nimport { TableDetail } from './TableDetail'\nimport { parser } from './parser'\n\nexport const LoanBrokerCoverClawbackTransaction: TransactionMapping = {\n  Simple,\n  TableDetail,\n  parser,\n  action: TransactionAction.CANCEL,\n  category: TransactionCategory.OTHER,\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/LoanBrokerCoverClawback/parser.ts",
    "content": "import { formatAmount } from '../../../../../rippled/lib/txSummary/formatAmount'\nimport { LoanBrokerCoverClawback } from './types'\n\n// XRPL neutral issuer address used in RippleState balance objects\nconst XRPL_NEUTRAL_ISSUER = 'rrrrrrrrrrrrrrrrrrrrBZbvji'\n\nexport function parser(tx: LoanBrokerCoverClawback, meta: any) {\n  // LoanBrokerCoverClawback cannot clawback XRP according to XLS-66 specification\n  // If tx.Amount is a string (XRP), just return it as-is without processing\n  if (typeof tx.Amount === 'string') {\n    return {\n      loanBrokerID: tx.LoanBrokerID,\n      amount: formatAmount(tx.Amount),\n      calculatedAmount: formatAmount(tx.Amount),\n      loanBrokerData: undefined,\n    }\n  }\n\n  const loanBrokerNode = meta.AffectedNodes?.find(\n    (node: any) =>\n      (node.ModifiedNode &&\n        node.ModifiedNode.LedgerEntryType === 'LoanBroker') ||\n      (node.DeletedNode && node.DeletedNode.LedgerEntryType === 'LoanBroker'),\n  )\n\n  let calculatedAmount = tx.Amount\n  let loanBrokerData\n\n  if (loanBrokerNode) {\n    const nodeData = loanBrokerNode.ModifiedNode || loanBrokerNode.DeletedNode\n    const fields = nodeData.FinalFields || nodeData.PreviousFields\n\n    if (fields) {\n      loanBrokerData = {\n        CoverAvailable: fields.CoverAvailable,\n        DebtTotal: fields.DebtTotal,\n        CoverRateMinimum: fields.CoverRateMinimum,\n      }\n\n      // If Amount is 0 or unset, calculate it using the formula:\n      // Amount = CoverAvailable - (DebtTotal * CoverRateMinimum)\n      if (\n        !tx.Amount ||\n        (typeof tx.Amount === 'object' && tx.Amount.value === '0')\n      ) {\n        const previousFields = nodeData.PreviousFields\n        const coverAvailable = parseFloat(\n          previousFields?.CoverAvailable || fields.CoverAvailable || '0',\n        )\n        const debtTotal = parseFloat(fields.DebtTotal || '0')\n        const coverRateMinimum = fields.CoverRateMinimum || 0\n\n        // CoverRateMinimum is in 1/10th basis points, so divide by 100000\n        const requiredCover = debtTotal * (coverRateMinimum / 100000)\n        let clawbackAmount = Math.max(0, coverAvailable - requiredCover)\n\n        // For MPT, calculate actual clawback from MPToken balance changes\n        const mpTokenNode = meta.AffectedNodes?.find(\n          (node: any) =>\n            node.ModifiedNode &&\n            node.ModifiedNode.LedgerEntryType === 'MPToken',\n        )\n\n        if (mpTokenNode) {\n          const tokenData = mpTokenNode.ModifiedNode\n          const previousAmount = parseFloat(\n            tokenData.PreviousFields?.MPTAmount || '0',\n          )\n          const finalAmount = parseFloat(\n            tokenData.FinalFields?.MPTAmount || '0',\n          )\n          // Clawback amount is the reduction in MPTAmount\n          clawbackAmount = Math.max(0, previousAmount - finalAmount)\n        }\n\n        if (typeof tx.Amount === 'object') {\n          if ('issuer' in tx.Amount) {\n            // IOU\n            calculatedAmount = {\n              currency: tx.Amount.currency,\n              issuer: tx.Amount.issuer,\n              value: clawbackAmount.toString(),\n            }\n          } else {\n            // MPT\n            calculatedAmount = {\n              mpt_issuance_id: tx.Amount.mpt_issuance_id,\n              value: clawbackAmount.toString(),\n            }\n          }\n        } else if (tx.Amount === undefined) {\n          // Amount is undefined, infer currency from RippleState or MPToken changes in metadata\n          const rippleStateNode = meta.AffectedNodes?.find(\n            (node: any) =>\n              (node.ModifiedNode &&\n                node.ModifiedNode.LedgerEntryType === 'RippleState') ||\n              (node.CreatedNode &&\n                node.CreatedNode.LedgerEntryType === 'RippleState'),\n          )\n\n          const mpTokenNodeForInference = meta.AffectedNodes?.find(\n            (node: any) =>\n              (node.ModifiedNode &&\n                node.ModifiedNode.LedgerEntryType === 'MPToken') ||\n              (node.CreatedNode &&\n                node.CreatedNode.LedgerEntryType === 'MPToken'),\n          )\n\n          if (rippleStateNode) {\n            const stateData =\n              rippleStateNode.ModifiedNode || rippleStateNode.CreatedNode\n            const balance =\n              stateData.FinalFields?.Balance || stateData.NewFields?.Balance\n\n            if (balance && typeof balance === 'object' && balance.currency) {\n              // Found a currency balance change, use this currency\n              calculatedAmount = {\n                currency: balance.currency,\n                issuer:\n                  balance.issuer === XRPL_NEUTRAL_ISSUER\n                    ? stateData.FinalFields?.LowLimit?.issuer ||\n                      stateData.FinalFields?.HighLimit?.issuer\n                    : balance.issuer,\n                value: clawbackAmount.toString(),\n              }\n            }\n          } else if (mpTokenNodeForInference) {\n            const tokenData =\n              mpTokenNodeForInference.ModifiedNode ||\n              mpTokenNodeForInference.CreatedNode\n            const mpTokenIssuanceID =\n              tokenData.FinalFields?.MPTokenIssuanceID ||\n              tokenData.NewFields?.MPTokenIssuanceID\n\n            if (mpTokenIssuanceID) {\n              calculatedAmount = {\n                mpt_issuance_id: mpTokenIssuanceID,\n                value: clawbackAmount.toString(),\n              }\n            }\n          }\n        }\n      }\n    }\n  }\n\n  return {\n    loanBrokerID: tx.LoanBrokerID,\n    amount: tx.Amount ? formatAmount(tx.Amount) : undefined,\n    calculatedAmount: calculatedAmount\n      ? formatAmount(calculatedAmount)\n      : undefined,\n    loanBrokerData,\n  }\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/LoanBrokerCoverClawback/test/LoanBrokerCoverClawbackSimple.test.tsx",
    "content": "import { useQuery } from 'react-query'\nimport { createSimpleRenderFactory, expectSimpleRowText } from '../../test'\nimport { Simple } from '../Simple'\nimport LoanBrokerCoverClawback from './mock_data/LoanBrokerCoverClawback.json'\nimport LoanBrokerCoverClawbackZeroAmount from './mock_data/LoanBrokerCoverClawbackZeroAmount.json'\nimport LoanBrokerCoverClawbackNoAmount from './mock_data/LoanBrokerCoverClawbackNoAmount.json'\nimport LoanBrokerCoverClawbackMPT from './mock_data/LoanBrokerCoverClawbackMPT.json'\n\njest.mock('react-query', () => ({\n  ...jest.requireActual('react-query'),\n  useQuery: jest.fn(),\n}))\n\nconst renderComponent = createSimpleRenderFactory(Simple)\n\ndescribe('LoanBrokerCoverClawback: Simple', () => {\n  it('renders with explicit amount', () => {\n    const { container, unmount } = renderComponent(LoanBrokerCoverClawback)\n    expectSimpleRowText(\n      container,\n      'loan-broker-id',\n      '7B3AF305C92293AF3F01088298E354E7B649F963427FA4B7F5414EF1383CB80B',\n    )\n    expectSimpleRowText(\n      container,\n      'amount',\n      '$5.00 USD.ra8dG1xwi5dQTJx1fRNCc8gjSAdQMX3vV7',\n    )\n    unmount()\n  })\n\n  it('renders with calculated amount when Amount is 0', () => {\n    const { container, unmount } = renderComponent(\n      LoanBrokerCoverClawbackZeroAmount,\n    )\n    expectSimpleRowText(\n      container,\n      'loan-broker-id',\n      '7B3AF305C92293AF3F01088298E354E7B649F963427FA4B7F5414EF1383CB80B',\n    )\n    expectSimpleRowText(\n      container,\n      'amount',\n      '$14.95 USD.ra8dG1xwi5dQTJx1fRNCc8gjSAdQMX3vV7',\n    )\n    unmount()\n  })\n\n  it('renders with calculated amount when Amount is undefined (real transaction)', () => {\n    const { container, unmount } = renderComponent(\n      LoanBrokerCoverClawbackNoAmount,\n    )\n    expectSimpleRowText(\n      container,\n      'loan-broker-id',\n      '693FCCFB835B322B2714107323EAC727D710DF827030B3935E0A6B62D15B1EEC',\n    )\n    expectSimpleRowText(\n      container,\n      'amount',\n      '$4.94151169 USD.rh2z5N9avJKVKvWFXyayEMqd7ABqo7Disx',\n    )\n    unmount()\n  })\n\n  it('renders with calculated MPT amount when Amount is undefined', () => {\n    ;(useQuery as jest.Mock).mockImplementation(() => ({\n      data: {\n        assetScale: 2,\n      },\n    }))\n\n    const { container, unmount } = renderComponent(LoanBrokerCoverClawbackMPT)\n    expectSimpleRowText(\n      container,\n      'loan-broker-id',\n      '358A255D294C9F5653686E90640F7EA922CBB26149EDD0AF8A02569BFC9412DC',\n    )\n    expectSimpleRowText(\n      container,\n      'amount',\n      '4.94 0004E8D60726C960436D88F20FFC2A873665CE675789E255',\n    )\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/LoanBrokerCoverClawback/test/LoanBrokerCoverClawbackTableDetail.test.tsx",
    "content": "import { useQuery } from 'react-query'\nimport i18n from '../../../../../../i18n/testConfigEnglish'\nimport { createTableDetailRenderFactory } from '../../test'\nimport { TableDetail } from '../TableDetail'\nimport LoanBrokerCoverClawback from './mock_data/LoanBrokerCoverClawback.json'\nimport LoanBrokerCoverClawbackZeroAmount from './mock_data/LoanBrokerCoverClawbackZeroAmount.json'\nimport LoanBrokerCoverClawbackNoAmount from './mock_data/LoanBrokerCoverClawbackNoAmount.json'\nimport LoanBrokerCoverClawbackMPT from './mock_data/LoanBrokerCoverClawbackMPT.json'\n\njest.mock('react-query', () => ({\n  ...jest.requireActual('react-query'),\n  useQuery: jest.fn(),\n}))\n\nconst renderComponent = createTableDetailRenderFactory(TableDetail, i18n)\n\ndescribe('LoanBrokerCoverClawbackTableDetail', () => {\n  it('renders with explicit amount', () => {\n    const { container, unmount } = renderComponent(LoanBrokerCoverClawback)\n\n    expect(\n      container.querySelector('.loan-broker-cover-clawback'),\n    ).toHaveTextContent(\n      'Claws back$5.00 USD.ra8dG1xwi5dQTJx1fRNCc8gjSAdQMX3vV7first-loss capital from Loan Broker ID 7B3AF305C92293AF3F01088298E354E7B649F963427FA4B7F5414EF1383CB80B',\n    )\n\n    unmount()\n  })\n\n  it('renders with calculated amount when Amount is 0', () => {\n    const { container, unmount } = renderComponent(\n      LoanBrokerCoverClawbackZeroAmount,\n    )\n\n    expect(\n      container.querySelector('.loan-broker-cover-clawback'),\n    ).toHaveTextContent(\n      'Claws back$14.95 USD.ra8dG1xwi5dQTJx1fRNCc8gjSAdQMX3vV7first-loss capital from Loan Broker ID 7B3AF305C92293AF3F01088298E354E7B649F963427FA4B7F5414EF1383CB80B',\n    )\n\n    unmount()\n  })\n\n  it('renders with calculated amount when Amount is undefined', () => {\n    const { container, unmount } = renderComponent(\n      LoanBrokerCoverClawbackNoAmount,\n    )\n\n    expect(\n      container.querySelector('.loan-broker-cover-clawback'),\n    ).toHaveTextContent(\n      'Claws back$4.94151169 USD.rh2z5N9avJKVKvWFXyayEMqd7ABqo7Disxfirst-loss capital from Loan Broker ID 693FCCFB835B322B2714107323EAC727D710DF827030B3935E0A6B62D15B1EEC',\n    )\n\n    unmount()\n  })\n\n  it('renders with calculated MPT amount when Amount is undefined', () => {\n    // Mock MPT issuance data for scaling\n    ;(useQuery as jest.Mock).mockImplementation(() => ({\n      data: {\n        assetScale: 2,\n      },\n    }))\n\n    const { container, unmount } = renderComponent(LoanBrokerCoverClawbackMPT)\n\n    expect(\n      container.querySelector('.loan-broker-cover-clawback'),\n    ).toHaveTextContent(\n      'Claws back4.94 0004E8D60726C960436D88F20FFC2A873665CE675789E255first-loss capital from Loan Broker ID 358A255D294C9F5653686E90640F7EA922CBB26149EDD0AF8A02569BFC9412DC',\n    )\n\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/LoanBrokerCoverClawback/test/mock_data/LoanBrokerCoverClawback.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rfS5JMvtQk6w5tZbwpSnpx15U8qrXWW8yi\",\n    \"Amount\": {\n      \"currency\": \"USD\",\n      \"issuer\": \"ra8dG1xwi5dQTJx1fRNCc8gjSAdQMX3vV7\",\n      \"value\": \"5\"\n    },\n    \"Destination\": \"rH4absn9JcB8m943YRMNJpuR9HQs56hkr8\",\n    \"Fee\": \"2000000\",\n    \"Flags\": 0,\n    \"LastLedgerSequence\": 291195,\n    \"LoanBrokerID\": \"7B3AF305C92293AF3F01088298E354E7B649F963427FA4B7F5414EF1383CB80B\",\n    \"NetworkID\": 3222,\n    \"Sequence\": 291160,\n    \"SigningPubKey\": \"ED99153B1435C4D98191569187E7AF9DF00319794C1A82366E6E2F87B741BA1BBA\",\n    \"TransactionType\": \"LoanBrokerCoverClawback\",\n    \"TxnSignature\": \"FFECC1F5D224CC74FA3FC30ED19CD9013461DD265F0B43F98D38FBF577E6B540F9C3EB952962233562556D219516B5D52E09733B4CA155636AE7391452934D06\",\n    \"ctid\": \"C004716800000C96\",\n    \"date\": 1762469400000,\n    \"hash\": \"04139F851E529667FE6038628B9ED7960C8225BBCA0E16512C6CB4E22A2FD0BA\",\n    \"inLedger\": 291176,\n    \"ledger_index\": 291176,\n    \"meta\": {\n      \"AffectedNodes\": [\n        {\n          \"ModifiedNode\": {\n            \"FinalFields\": {\n              \"Account\": \"rBuMfvezoska1LReG1CBoayi8esBgqzpQ4\",\n              \"CoverAvailable\": \"5\",\n              \"CoverRateLiquidation\": 5000,\n              \"CoverRateMinimum\": 1000,\n              \"Data\": \"7B226D657461223A224C6F616E42726F6B6572204D65746164617461227D\",\n              \"DebtMaximum\": \"1000000000000000e-4\",\n              \"DebtTotal\": \"5.84883123436912\",\n              \"Flags\": 0,\n              \"LoanSequence\": 2,\n              \"ManagementFeeRate\": 1000,\n              \"Owner\": \"rfS5JMvtQk6w5tZbwpSnpx15U8qrXWW8yi\",\n              \"OwnerCount\": 1,\n              \"OwnerNode\": \"0\",\n              \"Sequence\": 291154,\n              \"VaultID\": \"AE7952AFEE76456A1ECA877E1797E9FF842E7FD87D1F2C856B7B1EE10C9654D7\",\n              \"VaultNode\": \"0\"\n            },\n            \"LedgerEntryType\": \"LoanBroker\",\n            \"LedgerIndex\": \"7B3AF305C92293AF3F01088298E354E7B649F963427FA4B7F5414EF1383CB80B\",\n            \"PreviousFields\": {\n              \"CoverAvailable\": \"10\"\n            },\n            \"PreviousTxnID\": \"C56440AE7007618356BA3E7C87E4822684156D08E6FC69194C864DBC624DFDA2\",\n            \"PreviousTxnLgrSeq\": 291170\n          }\n        },\n        {\n          \"ModifiedNode\": {\n            \"FinalFields\": {\n              \"Account\": \"rfS5JMvtQk6w5tZbwpSnpx15U8qrXWW8yi\",\n              \"Balance\": \"80000000\",\n              \"Flags\": 0,\n              \"OwnerCount\": 5,\n              \"Sequence\": 291161\n            },\n            \"LedgerEntryType\": \"AccountRoot\",\n            \"LedgerIndex\": \"D3A16624DDD503F0F01A1C777E597D3513B30E06576BD5DB5C59FBC604BCEBFC\",\n            \"PreviousFields\": {\n              \"Balance\": \"82000000\",\n              \"Sequence\": 291160\n            },\n            \"PreviousTxnID\": \"680925BDAE5F9F25A12095390EE0F443A898A40B8A5ADAC273A1F83814B15A17\",\n            \"PreviousTxnLgrSeq\": 291174\n          }\n        },\n        {\n          \"ModifiedNode\": {\n            \"FinalFields\": {\n              \"Balance\": {\n                \"currency\": \"USD\",\n                \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n                \"value\": \"-9.32219481235746\"\n              },\n              \"Flags\": 131072,\n              \"HighLimit\": {\n                \"currency\": \"USD\",\n                \"issuer\": \"rH4absn9JcB8m943YRMNJpuR9HQs56hkr8\",\n                \"value\": \"1000000\"\n              },\n              \"HighNode\": \"0\",\n              \"LowLimit\": {\n                \"currency\": \"USD\",\n                \"issuer\": \"ra8dG1xwi5dQTJx1fRNCc8gjSAdQMX3vV7\",\n                \"value\": \"0\"\n              },\n              \"LowNode\": \"0\"\n            },\n            \"LedgerEntryType\": \"RippleState\",\n            \"LedgerIndex\": \"D9A3D6C6DFE031982ECF8591700201F7A0F62E4D74564D3810F90B622DC31168\",\n            \"PreviousFields\": {\n              \"Balance\": {\n                \"currency\": \"USD\",\n                \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n                \"value\": \"-4.32219481235746\"\n              }\n            },\n            \"PreviousTxnID\": \"C56440AE7007618356BA3E7C87E4822684156D08E6FC69194C864DBC624DFDA2\",\n            \"PreviousTxnLgrSeq\": 291170\n          }\n        },\n        {\n          \"ModifiedNode\": {\n            \"FinalFields\": {\n              \"Balance\": {\n                \"currency\": \"USD\",\n                \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n                \"value\": \"-5\"\n              },\n              \"Flags\": 2228224,\n              \"HighLimit\": {\n                \"currency\": \"USD\",\n                \"issuer\": \"rBuMfvezoska1LReG1CBoayi8esBgqzpQ4\",\n                \"value\": \"0\"\n              },\n              \"HighNode\": \"0\",\n              \"LowLimit\": {\n                \"currency\": \"USD\",\n                \"issuer\": \"ra8dG1xwi5dQTJx1fRNCc8gjSAdQMX3vV7\",\n                \"value\": \"0\"\n              },\n              \"LowNode\": \"0\"\n            },\n            \"LedgerEntryType\": \"RippleState\",\n            \"LedgerIndex\": \"FDC8A4899C79C91D4329811A45695C59B8060F28EA7D923EB6F47E15F42FC312\",\n            \"PreviousFields\": {\n              \"Balance\": {\n                \"currency\": \"USD\",\n                \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n                \"value\": \"-10\"\n              }\n            },\n            \"PreviousTxnID\": \"61300C6409AA68AEFFBEED82B1A446AADA8FFE11152E901C36C524D62F242B54\",\n            \"PreviousTxnLgrSeq\": 291167\n          }\n        }\n      ],\n      \"TransactionIndex\": 0,\n      \"TransactionResult\": \"tesSUCCESS\"\n    },\n    \"validated\": true\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rBuMfvezoska1LReG1CBoayi8esBgqzpQ4\",\n            \"CoverAvailable\": \"5\",\n            \"CoverRateLiquidation\": 5000,\n            \"CoverRateMinimum\": 1000,\n            \"Data\": \"7B226D657461223A224C6F616E42726F6B6572204D65746164617461227D\",\n            \"DebtMaximum\": \"1000000000000000e-4\",\n            \"DebtTotal\": \"5.84883123436912\",\n            \"Flags\": 0,\n            \"LoanSequence\": 2,\n            \"ManagementFeeRate\": 1000,\n            \"Owner\": \"rfS5JMvtQk6w5tZbwpSnpx15U8qrXWW8yi\",\n            \"OwnerCount\": 1,\n            \"OwnerNode\": \"0\",\n            \"Sequence\": 291154,\n            \"VaultID\": \"AE7952AFEE76456A1ECA877E1797E9FF842E7FD87D1F2C856B7B1EE10C9654D7\",\n            \"VaultNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"LoanBroker\",\n          \"LedgerIndex\": \"7B3AF305C92293AF3F01088298E354E7B649F963427FA4B7F5414EF1383CB80B\",\n          \"PreviousFields\": {\n            \"CoverAvailable\": \"10\"\n          },\n          \"PreviousTxnID\": \"C56440AE7007618356BA3E7C87E4822684156D08E6FC69194C864DBC624DFDA2\",\n          \"PreviousTxnLgrSeq\": 291170\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rfS5JMvtQk6w5tZbwpSnpx15U8qrXWW8yi\",\n            \"Balance\": \"80000000\",\n            \"Flags\": 0,\n            \"OwnerCount\": 5,\n            \"Sequence\": 291161\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"D3A16624DDD503F0F01A1C777E597D3513B30E06576BD5DB5C59FBC604BCEBFC\",\n          \"PreviousFields\": {\n            \"Balance\": \"82000000\",\n            \"Sequence\": 291160\n          },\n          \"PreviousTxnID\": \"680925BDAE5F9F25A12095390EE0F443A898A40B8A5ADAC273A1F83814B15A17\",\n          \"PreviousTxnLgrSeq\": 291174\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-9.32219481235746\"\n            },\n            \"Flags\": 131072,\n            \"HighLimit\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rH4absn9JcB8m943YRMNJpuR9HQs56hkr8\",\n              \"value\": \"1000000\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"ra8dG1xwi5dQTJx1fRNCc8gjSAdQMX3vV7\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"D9A3D6C6DFE031982ECF8591700201F7A0F62E4D74564D3810F90B622DC31168\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-4.32219481235746\"\n            }\n          },\n          \"PreviousTxnID\": \"C56440AE7007618356BA3E7C87E4822684156D08E6FC69194C864DBC624DFDA2\",\n          \"PreviousTxnLgrSeq\": 291170\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-5\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rBuMfvezoska1LReG1CBoayi8esBgqzpQ4\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"ra8dG1xwi5dQTJx1fRNCc8gjSAdQMX3vV7\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"FDC8A4899C79C91D4329811A45695C59B8060F28EA7D923EB6F47E15F42FC312\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-10\"\n            }\n          },\n          \"PreviousTxnID\": \"61300C6409AA68AEFFBEED82B1A446AADA8FFE11152E901C36C524D62F242B54\",\n          \"PreviousTxnLgrSeq\": 291167\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tesSUCCESS\"\n  },\n  \"hash\": \"04139F851E529667FE6038628B9ED7960C8225BBCA0E16512C6CB4E22A2FD0BA\",\n  \"ledger_index\": 291176,\n  \"date\": 1762469400000\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/LoanBrokerCoverClawback/test/mock_data/LoanBrokerCoverClawbackMPT.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"reFUHWyJpym5FpHeyjjxcF7KgExTUbsVP\",\n    \"Fee\": \"2000000\",\n    \"Flags\": 0,\n    \"LastLedgerSequence\": 321787,\n    \"LoanBrokerID\": \"358A255D294C9F5653686E90640F7EA922CBB26149EDD0AF8A02569BFC9412DC\",\n    \"NetworkID\": 3222,\n    \"Sequence\": 321752,\n    \"SigningPubKey\": \"EDC477F852D181EE6066BAB536FD5F295F40CA00BC52F2507F116DDDE37C7FBFE9\",\n    \"TransactionType\": \"LoanBrokerCoverClawback\",\n    \"TxnSignature\": \"2D9B9B741548FE8CF52CC15B4EDF9516E0AA1B6D32FCBAFA59418B5C01DAC4E9DEB0D4EFEFE0405DD09376495CAA58C66C0A41076648A4222D56E8F334C4500D\",\n    \"ctid\": \"C004E8E800000C96\",\n    \"date\": 1765149982000,\n    \"hash\": \"6F95CE2BC083D317C304ED47CDD77E2DAD7F339C79FF9CA7581B3EAAC01695D3\",\n    \"inLedger\": 321768,\n    \"ledger_index\": 321768,\n    \"meta\": {\n      \"AffectedNodes\": [\n        {\n          \"ModifiedNode\": {\n            \"FinalFields\": {\n              \"Account\": \"reFUHWyJpym5FpHeyjjxcF7KgExTUbsVP\",\n              \"Balance\": \"94000000\",\n              \"Flags\": 0,\n              \"OwnerCount\": 1,\n              \"Sequence\": 321753\n            },\n            \"LedgerEntryType\": \"AccountRoot\",\n            \"LedgerIndex\": \"13B2067024FE3B1FC2D5A4991084F27521D926AF217EF49D5C702D9E330C5A3D\",\n            \"PreviousFields\": {\n              \"Balance\": \"96000000\",\n              \"Sequence\": 321752\n            },\n            \"PreviousTxnID\": \"53EE9CC17605B9BE0906BA0A3BDA2FDD424873ED22E0679648672DBBCD20D9CC\",\n            \"PreviousTxnLgrSeq\": 321755\n          }\n        },\n        {\n          \"ModifiedNode\": {\n            \"FinalFields\": {\n              \"AssetScale\": 2,\n              \"Flags\": 98,\n              \"Issuer\": \"reFUHWyJpym5FpHeyjjxcF7KgExTUbsVP\",\n              \"OutstandingAmount\": \"9506\",\n              \"OwnerNode\": \"0\",\n              \"Sequence\": 321750\n            },\n            \"LedgerEntryType\": \"MPTokenIssuance\",\n            \"LedgerIndex\": \"31614FAC7702E68ACD8AB9F5F6662CDC9085A435D2A43AC5AA1A3D6A3E34FB04\",\n            \"PreviousFields\": {\n              \"OutstandingAmount\": \"10000\"\n            },\n            \"PreviousTxnID\": \"53EE9CC17605B9BE0906BA0A3BDA2FDD424873ED22E0679648672DBBCD20D9CC\",\n            \"PreviousTxnLgrSeq\": 321755\n          }\n        },\n        {\n          \"ModifiedNode\": {\n            \"FinalFields\": {\n              \"Account\": \"rssDBZ9QfyrrckjHwvtonxKrFkcyRXN2R8\",\n              \"CoverAvailable\": \"6\",\n              \"CoverRateLiquidation\": 5000,\n              \"CoverRateMinimum\": 1000,\n              \"Data\": \"7B226D657461223A224C6F616E42726F6B6572204D65746164617461227D\",\n              \"DebtMaximum\": \"100000\",\n              \"DebtTotal\": \"585\",\n              \"Flags\": 0,\n              \"LoanSequence\": 2,\n              \"ManagementFeeRate\": 1000,\n              \"Owner\": \"rfbwAbovknQQuq5qrSwBsKcQb572oZRxw3\",\n              \"OwnerCount\": 1,\n              \"OwnerNode\": \"0\",\n              \"Sequence\": 321751,\n              \"VaultID\": \"D6208D8EE26A1FE651F444211AD807B801707839FD9C217A18C15FCC7B2B4A59\",\n              \"VaultNode\": \"0\"\n            },\n            \"LedgerEntryType\": \"LoanBroker\",\n            \"LedgerIndex\": \"358A255D294C9F5653686E90640F7EA922CBB26149EDD0AF8A02569BFC9412DC\",\n            \"PreviousFields\": {\n              \"CoverAvailable\": \"500\"\n            },\n            \"PreviousTxnID\": \"6E99D96DAFB762A93EAC232E60D309C1C283994956D319060AB785BA48E23AAC\",\n            \"PreviousTxnLgrSeq\": 321767\n          }\n        },\n        {\n          \"ModifiedNode\": {\n            \"FinalFields\": {\n              \"Account\": \"rssDBZ9QfyrrckjHwvtonxKrFkcyRXN2R8\",\n              \"Flags\": 0,\n              \"MPTAmount\": \"6\",\n              \"MPTokenIssuanceID\": \"0004E8D60726C960436D88F20FFC2A873665CE675789E255\",\n              \"OwnerNode\": \"0\"\n            },\n            \"LedgerEntryType\": \"MPToken\",\n            \"LedgerIndex\": \"B2736FB9C776B458E0ACA0F831C82C5D24B30697547818F65382DEA0FF13221F\",\n            \"PreviousFields\": {\n              \"MPTAmount\": \"500\"\n            },\n            \"PreviousTxnID\": \"6E99D96DAFB762A93EAC232E60D309C1C283994956D319060AB785BA48E23AAC\",\n            \"PreviousTxnLgrSeq\": 321767\n          }\n        }\n      ],\n      \"TransactionIndex\": 0,\n      \"TransactionResult\": \"tesSUCCESS\"\n    },\n    \"validated\": true\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"reFUHWyJpym5FpHeyjjxcF7KgExTUbsVP\",\n            \"Balance\": \"94000000\",\n            \"Flags\": 0,\n            \"OwnerCount\": 1,\n            \"Sequence\": 321753\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"13B2067024FE3B1FC2D5A4991084F27521D926AF217EF49D5C702D9E330C5A3D\",\n          \"PreviousFields\": {\n            \"Balance\": \"96000000\",\n            \"Sequence\": 321752\n          },\n          \"PreviousTxnID\": \"53EE9CC17605B9BE0906BA0A3BDA2FDD424873ED22E0679648672DBBCD20D9CC\",\n          \"PreviousTxnLgrSeq\": 321755\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"AssetScale\": 2,\n            \"Flags\": 98,\n            \"Issuer\": \"reFUHWyJpym5FpHeyjjxcF7KgExTUbsVP\",\n            \"OutstandingAmount\": \"9506\",\n            \"OwnerNode\": \"0\",\n            \"Sequence\": 321750\n          },\n          \"LedgerEntryType\": \"MPTokenIssuance\",\n          \"LedgerIndex\": \"31614FAC7702E68ACD8AB9F5F6662CDC9085A435D2A43AC5AA1A3D6A3E34FB04\",\n          \"PreviousFields\": {\n            \"OutstandingAmount\": \"10000\"\n          },\n          \"PreviousTxnID\": \"53EE9CC17605B9BE0906BA0A3BDA2FDD424873ED22E0679648672DBBCD20D9CC\",\n          \"PreviousTxnLgrSeq\": 321755\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rssDBZ9QfyrrckjHwvtonxKrFkcyRXN2R8\",\n            \"CoverAvailable\": \"6\",\n            \"CoverRateLiquidation\": 5000,\n            \"CoverRateMinimum\": 1000,\n            \"Data\": \"7B226D657461223A224C6F616E42726F6B6572204D65746164617461227D\",\n            \"DebtMaximum\": \"100000\",\n            \"DebtTotal\": \"585\",\n            \"Flags\": 0,\n            \"LoanSequence\": 2,\n            \"ManagementFeeRate\": 1000,\n            \"Owner\": \"rfbwAbovknQQuq5qrSwBsKcQb572oZRxw3\",\n            \"OwnerCount\": 1,\n            \"OwnerNode\": \"0\",\n            \"Sequence\": 321751,\n            \"VaultID\": \"D6208D8EE26A1FE651F444211AD807B801707839FD9C217A18C15FCC7B2B4A59\",\n            \"VaultNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"LoanBroker\",\n          \"LedgerIndex\": \"358A255D294C9F5653686E90640F7EA922CBB26149EDD0AF8A02569BFC9412DC\",\n          \"PreviousFields\": {\n            \"CoverAvailable\": \"500\"\n          },\n          \"PreviousTxnID\": \"6E99D96DAFB762A93EAC232E60D309C1C283994956D319060AB785BA48E23AAC\",\n          \"PreviousTxnLgrSeq\": 321767\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rssDBZ9QfyrrckjHwvtonxKrFkcyRXN2R8\",\n            \"Flags\": 0,\n            \"MPTAmount\": \"6\",\n            \"MPTokenIssuanceID\": \"0004E8D60726C960436D88F20FFC2A873665CE675789E255\",\n            \"OwnerNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"MPToken\",\n          \"LedgerIndex\": \"B2736FB9C776B458E0ACA0F831C82C5D24B30697547818F65382DEA0FF13221F\",\n          \"PreviousFields\": {\n            \"MPTAmount\": \"500\"\n          },\n          \"PreviousTxnID\": \"6E99D96DAFB762A93EAC232E60D309C1C283994956D319060AB785BA48E23AAC\",\n          \"PreviousTxnLgrSeq\": 321767\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tesSUCCESS\"\n  },\n  \"hash\": \"6F95CE2BC083D317C304ED47CDD77E2DAD7F339C79FF9CA7581B3EAAC01695D3\",\n  \"ledger_index\": 321768,\n  \"date\": 1765149982000\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/LoanBrokerCoverClawback/test/mock_data/LoanBrokerCoverClawbackNoAmount.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rh2z5N9avJKVKvWFXyayEMqd7ABqo7Disx\",\n    \"Fee\": \"2000000\",\n    \"Flags\": 0,\n    \"LastLedgerSequence\": 316225,\n    \"LoanBrokerID\": \"693FCCFB835B322B2714107323EAC727D710DF827030B3935E0A6B62D15B1EEC\",\n    \"NetworkID\": 3222,\n    \"Sequence\": 316171,\n    \"SigningPubKey\": \"ED0D0E55562A79DB42C6AA9FB94335978D8376754349764080116D57C7752488F3\",\n    \"TransactionType\": \"LoanBrokerCoverClawback\",\n    \"TxnSignature\": \"129FAD4A7ECC1E68B8297DF722282B2376773AC779A9B52386C886C3B2E4363C0C6D26B3D35F8A6917591C8FE5CD6C4D11F561848756F80BB351591DC3672808\",\n    \"ctid\": \"C004D32F00000C96\",\n    \"date\": 815859711,\n    \"hash\": \"53DCF247B7116FF9643966D3769A8F029D9844FBA5D65FBB270F5495F50AC50C\",\n    \"inLedger\": 316207,\n    \"ledger_index\": 316207,\n    \"meta\": {\n      \"AffectedNodes\": [\n        {\n          \"ModifiedNode\": {\n            \"FinalFields\": {\n              \"Account\": \"r3rMJsHUvBb35JfzKy4wpyauEg71Hkpa9W\",\n              \"CoverAvailable\": \"0.058488312343691\",\n              \"CoverRateLiquidation\": 5000,\n              \"CoverRateMinimum\": 1000,\n              \"Data\": \"7B226D657461223A224C6F616E42726F6B6572204D65746164617461227D\",\n              \"DebtMaximum\": \"1000000000000000e-4\",\n              \"DebtTotal\": \"5.84883123436912\",\n              \"Flags\": 0,\n              \"LoanSequence\": 2,\n              \"ManagementFeeRate\": 1000,\n              \"Owner\": \"rGjCwsP5siHmd81KinTomSJXA8T9ssPHea\",\n              \"OwnerCount\": 1,\n              \"OwnerNode\": \"0\",\n              \"Sequence\": 316166,\n              \"VaultID\": \"F018F41546EEC83A298BD10563C7B8A3B99BAAD2E55FAEB39FE6BE69B009DE0C\",\n              \"VaultNode\": \"0\"\n            },\n            \"LedgerEntryType\": \"LoanBroker\",\n            \"LedgerIndex\": \"693FCCFB835B322B2714107323EAC727D710DF827030B3935E0A6B62D15B1EEC\",\n            \"PreviousFields\": {\n              \"CoverAvailable\": \"5\"\n            },\n            \"PreviousTxnID\": \"3080E8781A41172042A3674866851A064B24919B069EE863442E9CD2281604CA\",\n            \"PreviousTxnLgrSeq\": 316205\n          }\n        },\n        {\n          \"ModifiedNode\": {\n            \"FinalFields\": {\n              \"Balance\": {\n                \"currency\": \"USD\",\n                \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n                \"value\": \"-0.058488312343691\"\n              },\n              \"Flags\": 2228224,\n              \"HighLimit\": {\n                \"currency\": \"USD\",\n                \"issuer\": \"r3rMJsHUvBb35JfzKy4wpyauEg71Hkpa9W\",\n                \"value\": \"0\"\n              },\n              \"HighNode\": \"0\",\n              \"LowLimit\": {\n                \"currency\": \"USD\",\n                \"issuer\": \"rh2z5N9avJKVKvWFXyayEMqd7ABqo7Disx\",\n                \"value\": \"0\"\n              },\n              \"LowNode\": \"0\"\n            },\n            \"LedgerEntryType\": \"RippleState\",\n            \"LedgerIndex\": \"9792BAE4BE62B31326F661130E27EBF2020F2565EC2AE9F1C2C2368510CA59D0\",\n            \"PreviousFields\": {\n              \"Balance\": {\n                \"currency\": \"USD\",\n                \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n                \"value\": \"-5\"\n              }\n            },\n            \"PreviousTxnID\": \"3080E8781A41172042A3674866851A064B24919B069EE863442E9CD2281604CA\",\n            \"PreviousTxnLgrSeq\": 316205\n          }\n        }\n      ],\n      \"TransactionIndex\": 0,\n      \"TransactionResult\": \"tesSUCCESS\"\n    },\n    \"validated\": true\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r3rMJsHUvBb35JfzKy4wpyauEg71Hkpa9W\",\n            \"CoverAvailable\": \"0.058488312343691\",\n            \"CoverRateLiquidation\": 5000,\n            \"CoverRateMinimum\": 1000,\n            \"Data\": \"7B226D657461223A224C6F616E42726F6B6572204D65746164617461227D\",\n            \"DebtMaximum\": \"1000000000000000e-4\",\n            \"DebtTotal\": \"5.84883123436912\",\n            \"Flags\": 0,\n            \"LoanSequence\": 2,\n            \"ManagementFeeRate\": 1000,\n            \"Owner\": \"rGjCwsP5siHmd81KinTomSJXA8T9ssPHea\",\n            \"OwnerCount\": 1,\n            \"OwnerNode\": \"0\",\n            \"Sequence\": 316166,\n            \"VaultID\": \"F018F41546EEC83A298BD10563C7B8A3B99BAAD2E55FAEB39FE6BE69B009DE0C\",\n            \"VaultNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"LoanBroker\",\n          \"LedgerIndex\": \"693FCCFB835B322B2714107323EAC727D710DF827030B3935E0A6B62D15B1EEC\",\n          \"PreviousFields\": {\n            \"CoverAvailable\": \"5\"\n          },\n          \"PreviousTxnID\": \"3080E8781A41172042A3674866851A064B24919B069EE863442E9CD2281604CA\",\n          \"PreviousTxnLgrSeq\": 316205\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-0.058488312343691\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"r3rMJsHUvBb35JfzKy4wpyauEg71Hkpa9W\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rh2z5N9avJKVKvWFXyayEMqd7ABqo7Disx\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"9792BAE4BE62B31326F661130E27EBF2020F2565EC2AE9F1C2C2368510CA59D0\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-5\"\n            }\n          },\n          \"PreviousTxnID\": \"3080E8781A41172042A3674866851A064B24919B069EE863442E9CD2281604CA\",\n          \"PreviousTxnLgrSeq\": 316205\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tesSUCCESS\"\n  },\n  \"hash\": \"53DCF247B7116FF9643966D3769A8F029D9844FBA5D65FBB270F5495F50AC50C\",\n  \"ledger_index\": 316207,\n  \"date\": 815859711\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/LoanBrokerCoverClawback/test/mock_data/LoanBrokerCoverClawbackZeroAmount.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rfS5JMvtQk6w5tZbwpSnpx15U8qrXWW8yi\",\n    \"Amount\": {\n      \"currency\": \"USD\",\n      \"issuer\": \"ra8dG1xwi5dQTJx1fRNCc8gjSAdQMX3vV7\",\n      \"value\": \"0\"\n    },\n    \"Destination\": \"rH4absn9JcB8m943YRMNJpuR9HQs56hkr8\",\n    \"Fee\": \"2000000\",\n    \"Flags\": 0,\n    \"LastLedgerSequence\": 291195,\n    \"LoanBrokerID\": \"7B3AF305C92293AF3F01088298E354E7B649F963427FA4B7F5414EF1383CB80B\",\n    \"NetworkID\": 3222,\n    \"Sequence\": 291160,\n    \"SigningPubKey\": \"ED99153B1435C4D98191569187E7AF9DF00319794C1A82366E6E2F87B741BA1BBA\",\n    \"TransactionType\": \"LoanBrokerCoverClawback\",\n    \"TxnSignature\": \"FFECC1F5D224CC74FA3FC30ED19CD9013461DD265F0B43F98D38FBF577E6B540F9C3EB952962233562556D219516B5D52E09733B4CA155636AE7391452934D06\",\n    \"ctid\": \"C004716800000C96\",\n    \"date\": 1762469400000,\n    \"hash\": \"04139F851E529667FE6038628B9ED7960C8225BBCA0E16512C6CB4E22A2FD0BA\",\n    \"inLedger\": 291176,\n    \"ledger_index\": 291176,\n    \"meta\": {\n      \"AffectedNodes\": [\n        {\n          \"ModifiedNode\": {\n            \"FinalFields\": {\n              \"Account\": \"rBuMfvezoska1LReG1CBoayi8esBgqzpQ4\",\n              \"CoverAvailable\": \"10\",\n              \"CoverRateLiquidation\": 5000,\n              \"CoverRateMinimum\": 1000,\n              \"Data\": \"7B226D657461223A224C6F616E42726F6B6572204D65746164617461227D\",\n              \"DebtMaximum\": \"1000000000000000e-4\",\n              \"DebtTotal\": \"5\",\n              \"Flags\": 0,\n              \"LoanSequence\": 2,\n              \"ManagementFeeRate\": 1000,\n              \"Owner\": \"rfS5JMvtQk6w5tZbwpSnpx15U8qrXWW8yi\",\n              \"OwnerCount\": 1,\n              \"OwnerNode\": \"0\",\n              \"Sequence\": 291154,\n              \"VaultID\": \"AE7952AFEE76456A1ECA877E1797E9FF842E7FD87D1F2C856B7B1EE10C9654D7\",\n              \"VaultNode\": \"0\"\n            },\n            \"LedgerEntryType\": \"LoanBroker\",\n            \"LedgerIndex\": \"7B3AF305C92293AF3F01088298E354E7B649F963427FA4B7F5414EF1383CB80B\",\n            \"PreviousFields\": {\n              \"CoverAvailable\": \"15\"\n            },\n            \"PreviousTxnID\": \"C56440AE7007618356BA3E7C87E4822684156D08E6FC69194C864DBC624DFDA2\",\n            \"PreviousTxnLgrSeq\": 291170\n          }\n        }\n      ],\n      \"TransactionIndex\": 0,\n      \"TransactionResult\": \"tesSUCCESS\"\n    },\n    \"validated\": true\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rBuMfvezoska1LReG1CBoayi8esBgqzpQ4\",\n            \"CoverAvailable\": \"10\",\n            \"CoverRateLiquidation\": 5000,\n            \"CoverRateMinimum\": 1000,\n            \"Data\": \"7B226D657461223A224C6F616E42726F6B6572204D65746164617461227D\",\n            \"DebtMaximum\": \"1000000000000000e-4\",\n            \"DebtTotal\": \"5\",\n            \"Flags\": 0,\n            \"LoanSequence\": 2,\n            \"ManagementFeeRate\": 1000,\n            \"Owner\": \"rfS5JMvtQk6w5tZbwpSnpx15U8qrXWW8yi\",\n            \"OwnerCount\": 1,\n            \"OwnerNode\": \"0\",\n            \"Sequence\": 291154,\n            \"VaultID\": \"AE7952AFEE76456A1ECA877E1797E9FF842E7FD87D1F2C856B7B1EE10C9654D7\",\n            \"VaultNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"LoanBroker\",\n          \"LedgerIndex\": \"7B3AF305C92293AF3F01088298E354E7B649F963427FA4B7F5414EF1383CB80B\",\n          \"PreviousFields\": {\n            \"CoverAvailable\": \"15\"\n          },\n          \"PreviousTxnID\": \"C56440AE7007618356BA3E7C87E4822684156D08E6FC69194C864DBC624DFDA2\",\n          \"PreviousTxnLgrSeq\": 291170\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tesSUCCESS\"\n  },\n  \"hash\": \"04139F851E529667FE6038628B9ED7960C8225BBCA0E16512C6CB4E22A2FD0BA\",\n  \"ledger_index\": 291176,\n  \"date\": 1762469400000\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/LoanBrokerCoverClawback/types.ts",
    "content": "import { Amount } from '../../../types'\nimport { TransactionCommonFields } from '../types'\n\n// TODO: remove when lending protocol (XLS-66) is supported on xrpl.js\nexport interface LoanBrokerCoverClawback extends TransactionCommonFields {\n  LoanBrokerID?: string\n  Amount?: Amount\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/LoanBrokerCoverDeposit/Simple.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { TransactionSimpleComponent, TransactionSimpleProps } from '../types'\nimport { SimpleRow } from '../SimpleRow'\nimport { Amount } from '../../Amount'\nimport { formatAmount } from '../../../../../rippled/lib/txSummary/formatAmount'\nimport { LoanBrokerCoverDeposit } from './types'\n\nexport const Simple: TransactionSimpleComponent = (\n  props: TransactionSimpleProps<LoanBrokerCoverDeposit>,\n) => {\n  const { t } = useTranslation()\n  const { data } = props\n  const { LoanBrokerID, Amount: amount } = data.instructions\n\n  return (\n    <>\n      <SimpleRow label={t('loan_broker_id')} data-testid=\"loan-broker-id\">\n        {LoanBrokerID}\n      </SimpleRow>\n      <SimpleRow label={t('amount')} data-testid=\"amount\">\n        <Amount value={formatAmount(amount)} />\n      </SimpleRow>\n    </>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/LoanBrokerCoverDeposit/TableDetail.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { TransactionTableDetailProps } from '../types'\nimport { LoanBrokerCoverDeposit } from './types'\nimport { Amount } from '../../Amount'\nimport { formatAmount } from '../../../../../rippled/lib/txSummary/formatAmount'\n\nexport const TableDetail = ({\n  instructions,\n}: TransactionTableDetailProps<LoanBrokerCoverDeposit>) => {\n  const { t } = useTranslation()\n  const { Amount: amount, LoanBrokerID } = instructions\n\n  return (\n    <div className=\"loan-broker-cover-deposit\">\n      <span className=\"label\">{t('transaction_action_SEND')}</span>\n      <Amount value={formatAmount(amount)} />\n      <span>\n        {t('first_loss_capital')} {t('to')} {t('loan_broker_id')}\n      </span>\n      <span className=\"case-sensitive\">\n        <b>{LoanBrokerID}</b>\n      </span>\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/LoanBrokerCoverDeposit/index.ts",
    "content": "import {\n  TransactionAction,\n  TransactionCategory,\n  TransactionMapping,\n} from '../types'\n\nimport { Simple } from './Simple'\nimport { TableDetail } from './TableDetail'\n\nexport const LoanBrokerCoverDepositTransaction: TransactionMapping = {\n  Simple,\n  TableDetail,\n  action: TransactionAction.SEND,\n  category: TransactionCategory.OTHER,\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/LoanBrokerCoverDeposit/test/LoanBrokerCoverDepositSimple.test.tsx",
    "content": "import { createSimpleRenderFactory, expectSimpleRowText } from '../../test'\nimport { Simple } from '../Simple'\nimport LoanBrokerCoverDeposit from './mock_data/LoanBrokerCoverDeposit.json'\n\nconst renderComponent = createSimpleRenderFactory(Simple)\n\ndescribe('LoanBrokerCoverDeposit: Simple', () => {\n  it('renders', () => {\n    const { container, unmount } = renderComponent(LoanBrokerCoverDeposit)\n    expectSimpleRowText(\n      container,\n      'loan-broker-id',\n      '7B3AF305C92293AF3F01088298E354E7B649F963427FA4B7F5414EF1383CB80B',\n    )\n    expectSimpleRowText(\n      container,\n      'amount',\n      '$10.00 USD.ra8dG1xwi5dQTJx1fRNCc8gjSAdQMX3vV7',\n    )\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/LoanBrokerCoverDeposit/test/LoanBrokerCoverDepositTableDetail.test.tsx",
    "content": "import i18n from '../../../../../../i18n/testConfigEnglish'\nimport { createTableDetailRenderFactory } from '../../test'\nimport { TableDetail } from '../TableDetail'\nimport LoanBrokerCoverDeposit from './mock_data/LoanBrokerCoverDeposit.json'\n\nconst renderComponent = createTableDetailRenderFactory(TableDetail, i18n)\n\ndescribe('LoanBrokerCoverDepositTableDetail', () => {\n  it('renders with amount and loan broker ID', () => {\n    const { container, unmount } = renderComponent(LoanBrokerCoverDeposit)\n\n    expect(\n      container.querySelector('.loan-broker-cover-deposit'),\n    ).toHaveTextContent(\n      'Send$10.00 USD.ra8dG1xwi5dQTJx1fRNCc8gjSAdQMX3vV7first-loss capital to Loan Broker ID7B3AF305C92293AF3F01088298E354E7B649F963427FA4B7F5414EF1383CB80B',\n    )\n\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/LoanBrokerCoverDeposit/test/mock_data/LoanBrokerCoverDeposit.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rfS5JMvtQk6w5tZbwpSnpx15U8qrXWW8yi\",\n    \"Amount\": {\n      \"currency\": \"USD\",\n      \"issuer\": \"ra8dG1xwi5dQTJx1fRNCc8gjSAdQMX3vV7\",\n      \"value\": \"10\"\n    },\n    \"Fee\": \"2000000\",\n    \"Flags\": 0,\n    \"LastLedgerSequence\": 291185,\n    \"LoanBrokerID\": \"7B3AF305C92293AF3F01088298E354E7B649F963427FA4B7F5414EF1383CB80B\",\n    \"NetworkID\": 3222,\n    \"Sequence\": 291155,\n    \"SigningPubKey\": \"ED99153B1435C4D98191569187E7AF9DF00319794C1A82366E6E2F87B741BA1BBA\",\n    \"TransactionType\": \"LoanBrokerCoverDeposit\",\n    \"TxnSignature\": \"75D97B9C2CC95F7BA20C7931BBD44B91DAB64113E700432B400F0E3096D6457CFE8B8530F1895CE7384E4F37DC1F7A609B8D54CFEAEB8341F7BC192BADA63B0D\",\n    \"ctid\": \"C004715F00000C96\",\n    \"date\": 1762469371000,\n    \"hash\": \"61300C6409AA68AEFFBEED82B1A446AADA8FFE11152E901C36C524D62F242B54\",\n    \"inLedger\": 291167,\n    \"ledger_index\": 291167,\n    \"meta\": {\n      \"AffectedNodes\": [\n        {\n          \"ModifiedNode\": {\n            \"FinalFields\": {\n              \"Account\": \"rBuMfvezoska1LReG1CBoayi8esBgqzpQ4\",\n              \"CoverAvailable\": \"10\",\n              \"CoverRateLiquidation\": 5000,\n              \"CoverRateMinimum\": 1000,\n              \"Data\": \"7B226D657461223A224C6F616E42726F6B6572204D65746164617461227D\",\n              \"DebtMaximum\": \"1000000000000000e-4\",\n              \"Flags\": 0,\n              \"LoanSequence\": 1,\n              \"ManagementFeeRate\": 1000,\n              \"Owner\": \"rfS5JMvtQk6w5tZbwpSnpx15U8qrXWW8yi\",\n              \"OwnerNode\": \"0\",\n              \"Sequence\": 291154,\n              \"VaultID\": \"AE7952AFEE76456A1ECA877E1797E9FF842E7FD87D1F2C856B7B1EE10C9654D7\",\n              \"VaultNode\": \"0\"\n            },\n            \"LedgerEntryType\": \"LoanBroker\",\n            \"LedgerIndex\": \"7B3AF305C92293AF3F01088298E354E7B649F963427FA4B7F5414EF1383CB80B\",\n            \"PreviousFields\": {},\n            \"PreviousTxnID\": \"12FE9E6C435F338E41959A1B8C107F353CC28936387037AAA3749DCB4077B526\",\n            \"PreviousTxnLgrSeq\": 291165\n          }\n        },\n        {\n          \"ModifiedNode\": {\n            \"FinalFields\": {\n              \"Balance\": {\n                \"currency\": \"USD\",\n                \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n                \"value\": \"-30\"\n              },\n              \"Flags\": 131072,\n              \"HighLimit\": {\n                \"currency\": \"USD\",\n                \"issuer\": \"rfS5JMvtQk6w5tZbwpSnpx15U8qrXWW8yi\",\n                \"value\": \"1000000\"\n              },\n              \"HighNode\": \"0\",\n              \"LowLimit\": {\n                \"currency\": \"USD\",\n                \"issuer\": \"ra8dG1xwi5dQTJx1fRNCc8gjSAdQMX3vV7\",\n                \"value\": \"0\"\n              },\n              \"LowNode\": \"0\"\n            },\n            \"LedgerEntryType\": \"RippleState\",\n            \"LedgerIndex\": \"8AC6CD6C4F2A31F675CEDE92C5FBEB0E7D2C72A0BD9CF1FA2264984FE524F32E\",\n            \"PreviousFields\": {\n              \"Balance\": {\n                \"currency\": \"USD\",\n                \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n                \"value\": \"-40\"\n              }\n            },\n            \"PreviousTxnID\": \"0A7F9BE7463DC3E3512F0228EC348922F6BBDE433A1C4644C60B977BDEB7ED71\",\n            \"PreviousTxnLgrSeq\": 291163\n          }\n        },\n        {\n          \"ModifiedNode\": {\n            \"FinalFields\": {\n              \"Account\": \"rfS5JMvtQk6w5tZbwpSnpx15U8qrXWW8yi\",\n              \"Balance\": \"90000000\",\n              \"Flags\": 0,\n              \"OwnerCount\": 5,\n              \"Sequence\": 291156\n            },\n            \"LedgerEntryType\": \"AccountRoot\",\n            \"LedgerIndex\": \"D3A16624DDD503F0F01A1C777E597D3513B30E06576BD5DB5C59FBC604BCEBFC\",\n            \"PreviousFields\": {\n              \"Balance\": \"92000000\",\n              \"Sequence\": 291155\n            },\n            \"PreviousTxnID\": \"12FE9E6C435F338E41959A1B8C107F353CC28936387037AAA3749DCB4077B526\",\n            \"PreviousTxnLgrSeq\": 291165\n          }\n        },\n        {\n          \"ModifiedNode\": {\n            \"FinalFields\": {\n              \"Balance\": {\n                \"currency\": \"USD\",\n                \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n                \"value\": \"-10\"\n              },\n              \"Flags\": 2228224,\n              \"HighLimit\": {\n                \"currency\": \"USD\",\n                \"issuer\": \"rBuMfvezoska1LReG1CBoayi8esBgqzpQ4\",\n                \"value\": \"0\"\n              },\n              \"HighNode\": \"0\",\n              \"LowLimit\": {\n                \"currency\": \"USD\",\n                \"issuer\": \"ra8dG1xwi5dQTJx1fRNCc8gjSAdQMX3vV7\",\n                \"value\": \"0\"\n              },\n              \"LowNode\": \"0\"\n            },\n            \"LedgerEntryType\": \"RippleState\",\n            \"LedgerIndex\": \"FDC8A4899C79C91D4329811A45695C59B8060F28EA7D923EB6F47E15F42FC312\",\n            \"PreviousFields\": {\n              \"Balance\": {\n                \"currency\": \"USD\",\n                \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n                \"value\": \"0\"\n              }\n            },\n            \"PreviousTxnID\": \"12FE9E6C435F338E41959A1B8C107F353CC28936387037AAA3749DCB4077B526\",\n            \"PreviousTxnLgrSeq\": 291165\n          }\n        }\n      ],\n      \"TransactionIndex\": 0,\n      \"TransactionResult\": \"tesSUCCESS\"\n    },\n    \"validated\": true\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rBuMfvezoska1LReG1CBoayi8esBgqzpQ4\",\n            \"CoverAvailable\": \"10\",\n            \"CoverRateLiquidation\": 5000,\n            \"CoverRateMinimum\": 1000,\n            \"Data\": \"7B226D657461223A224C6F616E42726F6B6572204D65746164617461227D\",\n            \"DebtMaximum\": \"1000000000000000e-4\",\n            \"Flags\": 0,\n            \"LoanSequence\": 1,\n            \"ManagementFeeRate\": 1000,\n            \"Owner\": \"rfS5JMvtQk6w5tZbwpSnpx15U8qrXWW8yi\",\n            \"OwnerNode\": \"0\",\n            \"Sequence\": 291154,\n            \"VaultID\": \"AE7952AFEE76456A1ECA877E1797E9FF842E7FD87D1F2C856B7B1EE10C9654D7\",\n            \"VaultNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"LoanBroker\",\n          \"LedgerIndex\": \"7B3AF305C92293AF3F01088298E354E7B649F963427FA4B7F5414EF1383CB80B\",\n          \"PreviousFields\": {},\n          \"PreviousTxnID\": \"12FE9E6C435F338E41959A1B8C107F353CC28936387037AAA3749DCB4077B526\",\n          \"PreviousTxnLgrSeq\": 291165\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-30\"\n            },\n            \"Flags\": 131072,\n            \"HighLimit\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rfS5JMvtQk6w5tZbwpSnpx15U8qrXWW8yi\",\n              \"value\": \"1000000\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"ra8dG1xwi5dQTJx1fRNCc8gjSAdQMX3vV7\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"8AC6CD6C4F2A31F675CEDE92C5FBEB0E7D2C72A0BD9CF1FA2264984FE524F32E\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-40\"\n            }\n          },\n          \"PreviousTxnID\": \"0A7F9BE7463DC3E3512F0228EC348922F6BBDE433A1C4644C60B977BDEB7ED71\",\n          \"PreviousTxnLgrSeq\": 291163\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rfS5JMvtQk6w5tZbwpSnpx15U8qrXWW8yi\",\n            \"Balance\": \"90000000\",\n            \"Flags\": 0,\n            \"OwnerCount\": 5,\n            \"Sequence\": 291156\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"D3A16624DDD503F0F01A1C777E597D3513B30E06576BD5DB5C59FBC604BCEBFC\",\n          \"PreviousFields\": {\n            \"Balance\": \"92000000\",\n            \"Sequence\": 291155\n          },\n          \"PreviousTxnID\": \"12FE9E6C435F338E41959A1B8C107F353CC28936387037AAA3749DCB4077B526\",\n          \"PreviousTxnLgrSeq\": 291165\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-10\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rBuMfvezoska1LReG1CBoayi8esBgqzpQ4\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"ra8dG1xwi5dQTJx1fRNCc8gjSAdQMX3vV7\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"FDC8A4899C79C91D4329811A45695C59B8060F28EA7D923EB6F47E15F42FC312\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            }\n          },\n          \"PreviousTxnID\": \"12FE9E6C435F338E41959A1B8C107F353CC28936387037AAA3749DCB4077B526\",\n          \"PreviousTxnLgrSeq\": 291165\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tesSUCCESS\"\n  },\n  \"hash\": \"61300C6409AA68AEFFBEED82B1A446AADA8FFE11152E901C36C524D62F242B54\",\n  \"ledger_index\": 291167,\n  \"date\": 1762469371000\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/LoanBrokerCoverDeposit/types.ts",
    "content": "import { Amount } from '../../../types'\nimport { TransactionCommonFields } from '../types'\n\n// TODO: remove when lending protocol (XLS-66) is supported on xrpl.js\nexport interface LoanBrokerCoverDeposit extends TransactionCommonFields {\n  LoanBrokerID: string\n  Amount: Amount\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/LoanBrokerCoverWithdraw/Simple.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { TransactionSimpleComponent, TransactionSimpleProps } from '../types'\nimport { SimpleRow } from '../SimpleRow'\nimport { Amount } from '../../Amount'\nimport { Account } from '../../Account'\nimport { formatAmount } from '../../../../../rippled/lib/txSummary/formatAmount'\nimport { LoanBrokerCoverWithdraw } from './types'\n\nexport const Simple: TransactionSimpleComponent = (\n  props: TransactionSimpleProps<LoanBrokerCoverWithdraw>,\n) => {\n  const { t } = useTranslation()\n  const { data } = props\n  const { LoanBrokerID, Amount: amount, Destination } = data.instructions\n\n  return (\n    <>\n      <SimpleRow label={t('loan_broker_id')} data-testid=\"loan-broker-id\">\n        {LoanBrokerID}\n      </SimpleRow>\n      <SimpleRow label={t('amount')} data-testid=\"amount\">\n        <Amount value={formatAmount(amount)} />\n      </SimpleRow>\n      {Destination && (\n        <SimpleRow label={t('destination')} data-testid=\"destination\">\n          <Account account={Destination} />\n        </SimpleRow>\n      )}\n    </>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/LoanBrokerCoverWithdraw/TableDetail.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { TransactionTableDetailProps } from '../types'\nimport { LoanBrokerCoverWithdraw } from './types'\nimport { Amount } from '../../Amount'\nimport { Account } from '../../Account'\nimport { formatAmount } from '../../../../../rippled/lib/txSummary/formatAmount'\n\nexport const TableDetail = ({\n  instructions,\n}: TransactionTableDetailProps<LoanBrokerCoverWithdraw>) => {\n  const { t } = useTranslation()\n  const { Amount: amount, Destination } = instructions\n\n  return (\n    <div className=\"loan-broker-cover-withdraw\">\n      <span className=\"label\">{t('withdraw')}</span>\n      <Amount value={formatAmount(amount)} />\n      <span>{t('first_loss_capital')}</span>\n      {Destination && (\n        <>\n          <span>{t('to')}</span>\n          <Account account={Destination} />\n        </>\n      )}\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/LoanBrokerCoverWithdraw/index.ts",
    "content": "import {\n  TransactionAction,\n  TransactionCategory,\n  TransactionMapping,\n} from '../types'\n\nimport { Simple } from './Simple'\nimport { TableDetail } from './TableDetail'\n\nexport const LoanBrokerCoverWithdrawTransaction: TransactionMapping = {\n  Simple,\n  TableDetail,\n  action: TransactionAction.SEND,\n  category: TransactionCategory.OTHER,\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/LoanBrokerCoverWithdraw/test/LoanBrokerCoverWithdrawSimple.test.tsx",
    "content": "import { createSimpleRenderFactory, expectSimpleRowText } from '../../test'\nimport { Simple } from '../Simple'\nimport LoanBrokerCoverWithdraw from './mock_data/LoanBrokerCoverWithdraw.json'\n\nconst renderComponent = createSimpleRenderFactory(Simple)\n\ndescribe('LoanBrokerCoverWithdraw: Simple', () => {\n  it('renders', () => {\n    const { container, unmount } = renderComponent(LoanBrokerCoverWithdraw)\n    expectSimpleRowText(\n      container,\n      'loan-broker-id',\n      '7B3AF305C92293AF3F01088298E354E7B649F963427FA4B7F5414EF1383CB80B',\n    )\n    expectSimpleRowText(\n      container,\n      'amount',\n      '$5.00 USD.ra8dG1xwi5dQTJx1fRNCc8gjSAdQMX3vV7',\n    )\n    expectSimpleRowText(\n      container,\n      'destination',\n      'rH4absn9JcB8m943YRMNJpuR9HQs56hkr8',\n    )\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/LoanBrokerCoverWithdraw/test/LoanBrokerCoverWithdrawTableDetail.test.tsx",
    "content": "import i18n from '../../../../../../i18n/testConfigEnglish'\nimport { createTableDetailRenderFactory } from '../../test'\nimport { TableDetail } from '../TableDetail'\nimport LoanBrokerCoverWithdraw from './mock_data/LoanBrokerCoverWithdraw.json'\n\nconst renderComponent = createTableDetailRenderFactory(TableDetail, i18n)\n\ndescribe('LoanBrokerCoverWithdrawTableDetail', () => {\n  it('renders with amount, destination, and first-loss capital', () => {\n    const { container, unmount } = renderComponent(LoanBrokerCoverWithdraw)\n\n    expect(\n      container.querySelector('.loan-broker-cover-withdraw'),\n    ).toHaveTextContent(\n      'withdraw$5.00 USD.ra8dG1xwi5dQTJx1fRNCc8gjSAdQMX3vV7first-loss capitaltorH4absn9JcB8m943YRMNJpuR9HQs56hkr8',\n    )\n\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/LoanBrokerCoverWithdraw/test/mock_data/LoanBrokerCoverWithdraw.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rfS5JMvtQk6w5tZbwpSnpx15U8qrXWW8yi\",\n    \"Amount\": {\n      \"currency\": \"USD\",\n      \"issuer\": \"ra8dG1xwi5dQTJx1fRNCc8gjSAdQMX3vV7\",\n      \"value\": \"5\"\n    },\n    \"Destination\": \"rH4absn9JcB8m943YRMNJpuR9HQs56hkr8\",\n    \"Fee\": \"2000000\",\n    \"Flags\": 0,\n    \"LastLedgerSequence\": 291195,\n    \"LoanBrokerID\": \"7B3AF305C92293AF3F01088298E354E7B649F963427FA4B7F5414EF1383CB80B\",\n    \"NetworkID\": 3222,\n    \"Sequence\": 291160,\n    \"SigningPubKey\": \"ED99153B1435C4D98191569187E7AF9DF00319794C1A82366E6E2F87B741BA1BBA\",\n    \"TransactionType\": \"LoanBrokerCoverWithdraw\",\n    \"TxnSignature\": \"FFECC1F5D224CC74FA3FC30ED19CD9013461DD265F0B43F98D38FBF577E6B540F9C3EB952962233562556D219516B5D52E09733B4CA155636AE7391452934D06\",\n    \"ctid\": \"C004716800000C96\",\n    \"date\": 1762469400000,\n    \"hash\": \"04139F851E529667FE6038628B9ED7960C8225BBCA0E16512C6CB4E22A2FD0BA\",\n    \"inLedger\": 291176,\n    \"ledger_index\": 291176,\n    \"meta\": {\n      \"AffectedNodes\": [\n        {\n          \"ModifiedNode\": {\n            \"FinalFields\": {\n              \"Account\": \"rBuMfvezoska1LReG1CBoayi8esBgqzpQ4\",\n              \"CoverAvailable\": \"5\",\n              \"CoverRateLiquidation\": 5000,\n              \"CoverRateMinimum\": 1000,\n              \"Data\": \"7B226D657461223A224C6F616E42726F6B6572204D65746164617461227D\",\n              \"DebtMaximum\": \"1000000000000000e-4\",\n              \"DebtTotal\": \"5.84883123436912\",\n              \"Flags\": 0,\n              \"LoanSequence\": 2,\n              \"ManagementFeeRate\": 1000,\n              \"Owner\": \"rfS5JMvtQk6w5tZbwpSnpx15U8qrXWW8yi\",\n              \"OwnerCount\": 1,\n              \"OwnerNode\": \"0\",\n              \"Sequence\": 291154,\n              \"VaultID\": \"AE7952AFEE76456A1ECA877E1797E9FF842E7FD87D1F2C856B7B1EE10C9654D7\",\n              \"VaultNode\": \"0\"\n            },\n            \"LedgerEntryType\": \"LoanBroker\",\n            \"LedgerIndex\": \"7B3AF305C92293AF3F01088298E354E7B649F963427FA4B7F5414EF1383CB80B\",\n            \"PreviousFields\": {\n              \"CoverAvailable\": \"10\"\n            },\n            \"PreviousTxnID\": \"C56440AE7007618356BA3E7C87E4822684156D08E6FC69194C864DBC624DFDA2\",\n            \"PreviousTxnLgrSeq\": 291170\n          }\n        },\n        {\n          \"ModifiedNode\": {\n            \"FinalFields\": {\n              \"Account\": \"rfS5JMvtQk6w5tZbwpSnpx15U8qrXWW8yi\",\n              \"Balance\": \"80000000\",\n              \"Flags\": 0,\n              \"OwnerCount\": 5,\n              \"Sequence\": 291161\n            },\n            \"LedgerEntryType\": \"AccountRoot\",\n            \"LedgerIndex\": \"D3A16624DDD503F0F01A1C777E597D3513B30E06576BD5DB5C59FBC604BCEBFC\",\n            \"PreviousFields\": {\n              \"Balance\": \"82000000\",\n              \"Sequence\": 291160\n            },\n            \"PreviousTxnID\": \"680925BDAE5F9F25A12095390EE0F443A898A40B8A5ADAC273A1F83814B15A17\",\n            \"PreviousTxnLgrSeq\": 291174\n          }\n        },\n        {\n          \"ModifiedNode\": {\n            \"FinalFields\": {\n              \"Balance\": {\n                \"currency\": \"USD\",\n                \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n                \"value\": \"-9.32219481235746\"\n              },\n              \"Flags\": 131072,\n              \"HighLimit\": {\n                \"currency\": \"USD\",\n                \"issuer\": \"rH4absn9JcB8m943YRMNJpuR9HQs56hkr8\",\n                \"value\": \"1000000\"\n              },\n              \"HighNode\": \"0\",\n              \"LowLimit\": {\n                \"currency\": \"USD\",\n                \"issuer\": \"ra8dG1xwi5dQTJx1fRNCc8gjSAdQMX3vV7\",\n                \"value\": \"0\"\n              },\n              \"LowNode\": \"0\"\n            },\n            \"LedgerEntryType\": \"RippleState\",\n            \"LedgerIndex\": \"D9A3D6C6DFE031982ECF8591700201F7A0F62E4D74564D3810F90B622DC31168\",\n            \"PreviousFields\": {\n              \"Balance\": {\n                \"currency\": \"USD\",\n                \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n                \"value\": \"-4.32219481235746\"\n              }\n            },\n            \"PreviousTxnID\": \"C56440AE7007618356BA3E7C87E4822684156D08E6FC69194C864DBC624DFDA2\",\n            \"PreviousTxnLgrSeq\": 291170\n          }\n        },\n        {\n          \"ModifiedNode\": {\n            \"FinalFields\": {\n              \"Balance\": {\n                \"currency\": \"USD\",\n                \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n                \"value\": \"-5\"\n              },\n              \"Flags\": 2228224,\n              \"HighLimit\": {\n                \"currency\": \"USD\",\n                \"issuer\": \"rBuMfvezoska1LReG1CBoayi8esBgqzpQ4\",\n                \"value\": \"0\"\n              },\n              \"HighNode\": \"0\",\n              \"LowLimit\": {\n                \"currency\": \"USD\",\n                \"issuer\": \"ra8dG1xwi5dQTJx1fRNCc8gjSAdQMX3vV7\",\n                \"value\": \"0\"\n              },\n              \"LowNode\": \"0\"\n            },\n            \"LedgerEntryType\": \"RippleState\",\n            \"LedgerIndex\": \"FDC8A4899C79C91D4329811A45695C59B8060F28EA7D923EB6F47E15F42FC312\",\n            \"PreviousFields\": {\n              \"Balance\": {\n                \"currency\": \"USD\",\n                \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n                \"value\": \"-10\"\n              }\n            },\n            \"PreviousTxnID\": \"61300C6409AA68AEFFBEED82B1A446AADA8FFE11152E901C36C524D62F242B54\",\n            \"PreviousTxnLgrSeq\": 291167\n          }\n        }\n      ],\n      \"TransactionIndex\": 0,\n      \"TransactionResult\": \"tesSUCCESS\"\n    },\n    \"validated\": true\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rBuMfvezoska1LReG1CBoayi8esBgqzpQ4\",\n            \"CoverAvailable\": \"5\",\n            \"CoverRateLiquidation\": 5000,\n            \"CoverRateMinimum\": 1000,\n            \"Data\": \"7B226D657461223A224C6F616E42726F6B6572204D65746164617461227D\",\n            \"DebtMaximum\": \"1000000000000000e-4\",\n            \"DebtTotal\": \"5.84883123436912\",\n            \"Flags\": 0,\n            \"LoanSequence\": 2,\n            \"ManagementFeeRate\": 1000,\n            \"Owner\": \"rfS5JMvtQk6w5tZbwpSnpx15U8qrXWW8yi\",\n            \"OwnerCount\": 1,\n            \"OwnerNode\": \"0\",\n            \"Sequence\": 291154,\n            \"VaultID\": \"AE7952AFEE76456A1ECA877E1797E9FF842E7FD87D1F2C856B7B1EE10C9654D7\",\n            \"VaultNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"LoanBroker\",\n          \"LedgerIndex\": \"7B3AF305C92293AF3F01088298E354E7B649F963427FA4B7F5414EF1383CB80B\",\n          \"PreviousFields\": {\n            \"CoverAvailable\": \"10\"\n          },\n          \"PreviousTxnID\": \"C56440AE7007618356BA3E7C87E4822684156D08E6FC69194C864DBC624DFDA2\",\n          \"PreviousTxnLgrSeq\": 291170\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rfS5JMvtQk6w5tZbwpSnpx15U8qrXWW8yi\",\n            \"Balance\": \"80000000\",\n            \"Flags\": 0,\n            \"OwnerCount\": 5,\n            \"Sequence\": 291161\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"D3A16624DDD503F0F01A1C777E597D3513B30E06576BD5DB5C59FBC604BCEBFC\",\n          \"PreviousFields\": {\n            \"Balance\": \"82000000\",\n            \"Sequence\": 291160\n          },\n          \"PreviousTxnID\": \"680925BDAE5F9F25A12095390EE0F443A898A40B8A5ADAC273A1F83814B15A17\",\n          \"PreviousTxnLgrSeq\": 291174\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-9.32219481235746\"\n            },\n            \"Flags\": 131072,\n            \"HighLimit\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rH4absn9JcB8m943YRMNJpuR9HQs56hkr8\",\n              \"value\": \"1000000\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"ra8dG1xwi5dQTJx1fRNCc8gjSAdQMX3vV7\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"D9A3D6C6DFE031982ECF8591700201F7A0F62E4D74564D3810F90B622DC31168\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-4.32219481235746\"\n            }\n          },\n          \"PreviousTxnID\": \"C56440AE7007618356BA3E7C87E4822684156D08E6FC69194C864DBC624DFDA2\",\n          \"PreviousTxnLgrSeq\": 291170\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-5\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rBuMfvezoska1LReG1CBoayi8esBgqzpQ4\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"ra8dG1xwi5dQTJx1fRNCc8gjSAdQMX3vV7\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"FDC8A4899C79C91D4329811A45695C59B8060F28EA7D923EB6F47E15F42FC312\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-10\"\n            }\n          },\n          \"PreviousTxnID\": \"61300C6409AA68AEFFBEED82B1A446AADA8FFE11152E901C36C524D62F242B54\",\n          \"PreviousTxnLgrSeq\": 291167\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tesSUCCESS\"\n  },\n  \"hash\": \"04139F851E529667FE6038628B9ED7960C8225BBCA0E16512C6CB4E22A2FD0BA\",\n  \"ledger_index\": 291176,\n  \"date\": 1762469400000\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/LoanBrokerCoverWithdraw/types.ts",
    "content": "import { Amount } from '../../../types'\nimport { TransactionCommonFields } from '../types'\n\n// TODO: remove when lending protocol (XLS-66) is supported on xrpl.js\nexport interface LoanBrokerCoverWithdraw extends TransactionCommonFields {\n  LoanBrokerID: string\n  Amount: Amount\n  Destination?: string\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/LoanBrokerDelete/Simple.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { TransactionSimpleComponent, TransactionSimpleProps } from '../types'\nimport { SimpleRow } from '../SimpleRow'\nimport { LoanBrokerDelete } from './types'\n\nexport const Simple: TransactionSimpleComponent = (\n  props: TransactionSimpleProps<LoanBrokerDelete>,\n) => {\n  const { t } = useTranslation()\n  const { data } = props\n  const { LoanBrokerID } = data.instructions\n\n  return (\n    <SimpleRow label={t('loan_broker_id')} data-testid=\"loan-broker-id\">\n      {LoanBrokerID}\n    </SimpleRow>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/LoanBrokerDelete/TableDetail.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { TransactionTableDetailProps } from '../types'\nimport { LoanBrokerDelete } from './types'\n\nexport const TableDetail = ({\n  instructions,\n}: TransactionTableDetailProps<LoanBrokerDelete>) => {\n  const { t } = useTranslation()\n  const { LoanBrokerID } = instructions\n\n  return (\n    <div className=\"loan-broker-delete\">\n      <span className=\"label\">{t('delete')}</span>\n      <span>{t('loan_broker_id')}</span>\n      <span className=\"case-sensitive\">\n        <b>{LoanBrokerID}</b>\n      </span>\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/LoanBrokerDelete/index.ts",
    "content": "import {\n  TransactionAction,\n  TransactionCategory,\n  TransactionMapping,\n} from '../types'\n\nimport { Simple } from './Simple'\nimport { TableDetail } from './TableDetail'\n\nexport const LoanBrokerDeleteTransaction: TransactionMapping = {\n  Simple,\n  TableDetail,\n  action: TransactionAction.CANCEL,\n  category: TransactionCategory.OTHER,\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/LoanBrokerDelete/test/LoanBrokerDeleteSimple.test.tsx",
    "content": "import { createSimpleRenderFactory, expectSimpleRowText } from '../../test'\nimport { Simple } from '../Simple'\nimport LoanBrokerDelete from './mock_data/LoanBrokerDelete.json'\n\nconst renderComponent = createSimpleRenderFactory(Simple)\n\ndescribe('LoanBrokerDelete: Simple', () => {\n  it('renders', () => {\n    const { container, unmount } = renderComponent(LoanBrokerDelete)\n    expectSimpleRowText(\n      container,\n      'loan-broker-id',\n      '7B3AF305C92293AF3F01088298E354E7B649F963427FA4B7F5414EF1383CB80B',\n    )\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/LoanBrokerDelete/test/LoanBrokerDeleteTableDetail.test.tsx",
    "content": "import i18n from '../../../../../../i18n/testConfigEnglish'\nimport { createTableDetailRenderFactory } from '../../test'\nimport { TableDetail } from '../TableDetail'\nimport LoanBrokerDelete from './mock_data/LoanBrokerDelete.json'\n\nconst renderComponent = createTableDetailRenderFactory(TableDetail, i18n)\n\ndescribe('LoanBrokerDeleteTableDetail', () => {\n  it('renders with loan broker ID', () => {\n    const { container, unmount } = renderComponent(LoanBrokerDelete)\n\n    expect(container.querySelector('.loan-broker-delete')).toHaveTextContent(\n      'deleteLoan Broker ID7B3AF305C92293AF3F01088298E354E7B649F963427FA4B7F5414EF1383CB80B',\n    )\n\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/LoanBrokerDelete/test/mock_data/LoanBrokerDelete.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rfS5JMvtQk6w5tZbwpSnpx15U8qrXWW8yi\",\n    \"Fee\": \"2000000\",\n    \"Flags\": 0,\n    \"LastLedgerSequence\": 291197,\n    \"LoanBrokerID\": \"7B3AF305C92293AF3F01088298E354E7B649F963427FA4B7F5414EF1383CB80B\",\n    \"NetworkID\": 3222,\n    \"Sequence\": 291161,\n    \"SigningPubKey\": \"ED99153B1435C4D98191569187E7AF9DF00319794C1A82366E6E2F87B741BA1BBA\",\n    \"TransactionType\": \"LoanBrokerDelete\",\n    \"TxnSignature\": \"F77378990FFB053BBFA43EDDE314E45FA0E2A340C398B0043F98C92A38A214C9575F3C6A18B7870EC2B46AED705303377639128A7F808AF1E51FA23A6B6A450F\",\n    \"ctid\": \"C004716A00000C96\",\n    \"date\": 1762469402000,\n    \"hash\": \"3B331E0A610E56EB0CA4943F374C445780C041414B05E8BDDD5E27EE86D6BA75\",\n    \"inLedger\": 291178,\n    \"ledger_index\": 291178,\n    \"meta\": {\n      \"AffectedNodes\": [\n        {\n          \"ModifiedNode\": {\n            \"FinalFields\": {\n              \"Account\": \"rfS5JMvtQk6w5tZbwpSnpx15U8qrXWW8yi\",\n              \"Balance\": \"78000000\",\n              \"Flags\": 0,\n              \"OwnerCount\": 5,\n              \"Sequence\": 291162\n            },\n            \"LedgerEntryType\": \"AccountRoot\",\n            \"LedgerIndex\": \"D3A16624DDD503F0F01A1C777E597D3513B30E06576BD5DB5C59FBC604BCEBFC\",\n            \"PreviousFields\": {\n              \"Balance\": \"80000000\",\n              \"Sequence\": 291161\n            },\n            \"PreviousTxnID\": \"04139F851E529667FE6038628B9ED7960C8225BBCA0E16512C6CB4E22A2FD0BA\",\n            \"PreviousTxnLgrSeq\": 291176\n          }\n        }\n      ],\n      \"TransactionIndex\": 0,\n      \"TransactionResult\": \"tesSUCCESS\"\n    },\n    \"validated\": true\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rfS5JMvtQk6w5tZbwpSnpx15U8qrXWW8yi\",\n            \"Balance\": \"78000000\",\n            \"Flags\": 0,\n            \"OwnerCount\": 5,\n            \"Sequence\": 291162\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"D3A16624DDD503F0F01A1C777E597D3513B30E06576BD5DB5C59FBC604BCEBFC\",\n          \"PreviousFields\": {\n            \"Balance\": \"80000000\",\n            \"Sequence\": 291161\n          },\n          \"PreviousTxnID\": \"04139F851E529667FE6038628B9ED7960C8225BBCA0E16512C6CB4E22A2FD0BA\",\n          \"PreviousTxnLgrSeq\": 291176\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tesSUCCESS\"\n  },\n  \"hash\": \"3B331E0A610E56EB0CA4943F374C445780C041414B05E8BDDD5E27EE86D6BA75\",\n  \"ledger_index\": 291178,\n  \"date\": 1762469402000\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/LoanBrokerDelete/types.ts",
    "content": "import { TransactionCommonFields } from '../types'\n\n// TODO: remove when lending protocol (XLS-66) is supported on xrpl.js\nexport interface LoanBrokerDelete extends TransactionCommonFields {\n  LoanBrokerID: string\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/LoanBrokerSet/Simple.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { useContext } from 'react'\nimport { useQuery } from 'react-query'\nimport { TransactionSimpleComponent, TransactionSimpleProps } from '../types'\nimport { SimpleRow } from '../SimpleRow'\nimport { Amount } from '../../Amount'\nimport { JsonView } from '../../JsonView'\nimport SocketContext from '../../../SocketContext'\nimport { getVaultAsset } from '../utils/vaultUtils'\nimport { formatAmountWithAsset } from '../../../../../rippled/lib/txSummary/formatAmount'\n\nexport const Simple: TransactionSimpleComponent = ({\n  data,\n}: TransactionSimpleProps) => {\n  const { t } = useTranslation()\n  const rippledSocket = useContext(SocketContext)\n  const {\n    vaultID,\n    loanBrokerID,\n    debtMaximumRaw,\n    dataFromHex,\n    dataAsJson,\n    managementFeeRatePercent,\n    coverRateMinimumPercent,\n    coverRateLiquidationPercent,\n  } = data.instructions\n\n  // Fetch Vault asset information to format DebtMaximum correctly\n  const { data: vaultAsset } = useQuery(\n    ['vaultAsset', vaultID],\n    () => getVaultAsset(rippledSocket, vaultID),\n    {\n      enabled: !!vaultID && !!rippledSocket,\n    },\n  )\n\n  // Format DebtMaximum with correct currency\n  const debtMaximum =\n    vaultAsset && debtMaximumRaw !== undefined\n      ? formatAmountWithAsset(debtMaximumRaw, vaultAsset)\n      : undefined\n\n  return (\n    <>\n      <SimpleRow label={t('vault_id')} data-testid=\"vault-id\">\n        {vaultID}\n      </SimpleRow>\n      {loanBrokerID && (\n        <SimpleRow label={t('loan_broker_id')} data-testid=\"loan-broker-id\">\n          {loanBrokerID}\n        </SimpleRow>\n      )}\n      {managementFeeRatePercent && (\n        <SimpleRow\n          label={t('management_fee_rate')}\n          data-testid=\"management-fee-rate\"\n        >\n          {managementFeeRatePercent}\n        </SimpleRow>\n      )}\n      {debtMaximumRaw !== undefined && (\n        <SimpleRow label={t('debt_maximum')} data-testid=\"debt-maximum\">\n          {debtMaximumRaw === '0' ? (\n            <span>{t('no_limit')}</span>\n          ) : (\n            debtMaximum && <Amount value={debtMaximum} />\n          )}\n        </SimpleRow>\n      )}\n      {coverRateMinimumPercent && (\n        <SimpleRow\n          label={t('cover_rate_minimum')}\n          data-testid=\"cover-rate-minimum\"\n        >\n          {coverRateMinimumPercent}\n        </SimpleRow>\n      )}\n      {coverRateLiquidationPercent && (\n        <SimpleRow\n          label={t('cover_rate_liquidation')}\n          data-testid=\"cover-rate-liquidation\"\n        >\n          {coverRateLiquidationPercent}\n        </SimpleRow>\n      )}\n      {dataFromHex && (\n        <SimpleRow label={t('data')} className=\"dt\" data-testid=\"data\">\n          {dataAsJson ? <JsonView data={dataAsJson} /> : dataFromHex}\n        </SimpleRow>\n      )}\n    </>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/LoanBrokerSet/TableDetail.tsx",
    "content": "import { useTranslation, Trans } from 'react-i18next'\nimport { useContext } from 'react'\nimport { useQuery } from 'react-query'\nimport { TransactionTableDetailProps } from '../types'\nimport { Amount } from '../../Amount'\nimport SocketContext from '../../../SocketContext'\nimport { getVaultAsset } from '../utils/vaultUtils'\nimport { formatAmountWithAsset } from '../../../../../rippled/lib/txSummary/formatAmount'\nimport { shortenVaultID } from '../../../utils'\n\nexport const TableDetail = ({ instructions }: TransactionTableDetailProps) => {\n  const { t } = useTranslation()\n  const rippledSocket = useContext(SocketContext)\n  const {\n    vaultID,\n    debtMaximumRaw,\n    managementFeeRatePercent,\n    coverRateMinimumPercent,\n    coverRateLiquidationPercent,\n  } = instructions\n\n  // Fetch Vault asset information to format DebtMaximum correctly\n  const { data: vaultAsset } = useQuery(\n    ['vaultAsset', vaultID],\n    () => getVaultAsset(rippledSocket, vaultID),\n    {\n      enabled: !!vaultID && !!rippledSocket,\n    },\n  )\n\n  // Format DebtMaximum with correct currency\n  const debtMaximum =\n    vaultAsset && debtMaximumRaw !== undefined\n      ? formatAmountWithAsset(debtMaximumRaw, vaultAsset)\n      : undefined\n\n  // Determine if we should show DebtMaximum field\n  const shouldShowDebtMaximum = debtMaximumRaw !== undefined\n\n  return (\n    <div className=\"loan-broker-set\">\n      <div className=\"vault-id\">\n        <span className=\"label\">{t('vault_id')}: </span>\n        <span className=\"case-sensitive\">\n          <b>{shortenVaultID(vaultID)}</b>\n        </span>\n      </div>\n\n      {(coverRateMinimumPercent ||\n        coverRateLiquidationPercent ||\n        managementFeeRatePercent) && (\n        <div className=\"rates-section\">\n          <span className=\"label\">{t('rates')}: </span>\n          <Trans\n            i18nKey=\"loan_broker_rates_detail\"\n            components={{\n              ManagementFeeRate: managementFeeRatePercent ? (\n                <span>\n                  {t('management_fee_rate')} {managementFeeRatePercent}\n                  {(coverRateMinimumPercent || coverRateLiquidationPercent) &&\n                    ', '}\n                </span>\n              ) : (\n                <span />\n              ),\n              CoverRateMinimum: coverRateMinimumPercent ? (\n                <span>\n                  {t('cover_rate_minimum')} {coverRateMinimumPercent}\n                  {coverRateLiquidationPercent && ', '}\n                </span>\n              ) : (\n                <span />\n              ),\n              CoverRateLiquidation: coverRateLiquidationPercent ? (\n                <span>\n                  {t('cover_rate_liquidation')} {coverRateLiquidationPercent}\n                </span>\n              ) : (\n                <span />\n              ),\n            }}\n          />\n        </div>\n      )}\n\n      {shouldShowDebtMaximum && (\n        <div className=\"debt-maximum\">\n          <span className=\"label\">{t('debt_maximum')}: </span>\n          {debtMaximumRaw === '0' ? (\n            <span>{t('no_limit')}</span>\n          ) : (\n            debtMaximum && <Amount value={debtMaximum} />\n          )}\n        </div>\n      )}\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/LoanBrokerSet/index.ts",
    "content": "import {\n  TransactionAction,\n  TransactionCategory,\n  TransactionMapping,\n} from '../types'\n\nimport { Simple } from './Simple'\nimport { TableDetail } from './TableDetail'\nimport { parser } from './parser'\n\nexport const LoanBrokerSetTransaction: TransactionMapping = {\n  Simple,\n  TableDetail,\n  parser,\n  action: TransactionAction.MODIFY,\n  category: TransactionCategory.OTHER,\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/LoanBrokerSet/parser.ts",
    "content": "import { LoanBrokerSet } from './types'\nimport { convertHexToString } from '../../../../../rippled/lib/utils'\nimport { parsePercent } from '../../../NumberFormattingUtils'\nimport {\n  isValidJsonString,\n  ONE_TENTH_BASIS_POINT,\n  ONE_TENTH_BASIS_POINT_CUTOFF,\n  ONE_TENTH_BASIS_POINT_DIGITS,\n} from '../../../utils'\n\nexport function parser(tx: LoanBrokerSet, meta?: any) {\n  const dataFromHex = tx.Data ? convertHexToString(tx.Data) : undefined\n\n  // Check if this is creating a new LoanBroker (CreatedNode)\n  const isCreatingLoanBroker = meta?.AffectedNodes?.some(\n    (node: any) =>\n      node.CreatedNode?.LedgerEntryType === 'LoanBroker' &&\n      node.CreatedNode?.NewFields?.LoanBrokerID === tx.LoanBrokerID,\n  )\n\n  // For new LoanBrokers, if DebtMaximum is omitted, default to \"0\" (No Limit)\n  // For existing LoanBrokers, if DebtMaximum is omitted, leave as undefined (don't show)\n  let debtMaximumRaw = tx.DebtMaximum\n  if (debtMaximumRaw === undefined && isCreatingLoanBroker) {\n    debtMaximumRaw = '0'\n  }\n\n  return {\n    vaultID: tx.VaultID,\n    loanBrokerID: tx.LoanBrokerID,\n    // Pass raw DebtMaximum value - components will format with correct currency\n    debtMaximumRaw,\n    dataFromHex,\n    dataAsJson:\n      dataFromHex && isValidJsonString(dataFromHex)\n        ? JSON.parse(dataFromHex)\n        : undefined,\n    managementFeeRatePercent:\n      tx.ManagementFeeRate !== undefined\n        ? parsePercent(\n            tx.ManagementFeeRate / ONE_TENTH_BASIS_POINT,\n            ONE_TENTH_BASIS_POINT_DIGITS,\n            ONE_TENTH_BASIS_POINT_CUTOFF,\n          )\n        : undefined,\n    coverRateMinimumPercent:\n      tx.CoverRateMinimum !== undefined\n        ? parsePercent(\n            tx.CoverRateMinimum / ONE_TENTH_BASIS_POINT,\n            ONE_TENTH_BASIS_POINT_DIGITS,\n            ONE_TENTH_BASIS_POINT_CUTOFF,\n          )\n        : undefined,\n    coverRateLiquidationPercent:\n      tx.CoverRateLiquidation !== undefined\n        ? parsePercent(\n            tx.CoverRateLiquidation / ONE_TENTH_BASIS_POINT,\n            ONE_TENTH_BASIS_POINT_DIGITS,\n            ONE_TENTH_BASIS_POINT_CUTOFF,\n          )\n        : undefined,\n  }\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/LoanBrokerSet/test/LoanBrokerSetSimple.test.tsx",
    "content": "import { useQuery } from 'react-query'\nimport { createSimpleRenderFactory, expectSimpleRowText } from '../../test'\nimport i18n from '../../../../../../i18n/testConfigEnglish'\nimport { Simple } from '../Simple'\nimport LoanBrokerSet from './mock_data/LoanBrokerSet.json'\nimport LoanBrokerSetZeroDebt from './mock_data/LoanBrokerSetZeroDebt.json'\nimport LoanBrokerSetPartialUpdate from './mock_data/LoanBrokerSetPartialUpdate.json'\n\njest.mock('react-query', () => ({\n  ...jest.requireActual('react-query'),\n  useQuery: jest.fn(),\n}))\n\nconst renderComponent = createSimpleRenderFactory(Simple, i18n)\n\ndescribe('LoanBrokerSet: Simple', () => {\n  it('renders', () => {\n    // Mock useQuery to return the vault asset information\n    ;(useQuery as jest.Mock).mockReturnValue({\n      data: { currency: 'USD', issuer: 'ra8dG1xwi5dQTJx1fRNCc8gjSAdQMX3vV7' },\n      isLoading: false,\n      error: null,\n    })\n\n    const { container, unmount } = renderComponent(LoanBrokerSet)\n    expectSimpleRowText(\n      container,\n      'vault-id',\n      'AE7952AFEE76456A1ECA877E1797E9FF842E7FD87D1F2C856B7B1EE10C9654D7',\n    )\n    expectSimpleRowText(container, 'management-fee-rate', '1.000%')\n\n    expectSimpleRowText(\n      container,\n      'debt-maximum',\n      '$100,000.00 USD.ra8dG1xwi5dQTJx1fRNCc8gjSAdQMX3vV7',\n    )\n    expectSimpleRowText(container, 'cover-rate-minimum', '1.000%')\n    expectSimpleRowText(container, 'cover-rate-liquidation', '5.000%')\n    expectSimpleRowText(container, 'data', '{meta: \"LoanBroker Metadata\"}')\n    unmount()\n  })\n\n  it('renders with zero debt maximum showing No Limit', () => {\n    // Mock useQuery to return the vault asset information\n    ;(useQuery as jest.Mock).mockReturnValue({\n      data: { currency: 'USD', issuer: 'ra8dG1xwi5dQTJx1fRNCc8gjSAdQMX3vV7' },\n      isLoading: false,\n      error: null,\n    })\n\n    const { container, unmount } = renderComponent(LoanBrokerSetZeroDebt)\n    expectSimpleRowText(\n      container,\n      'vault-id',\n      'AE7952AFEE76456A1ECA877E1797E9FF842E7FD87D1F2C856B7B1EE10C9654D7',\n    )\n    expectSimpleRowText(container, 'management-fee-rate', '1.000%')\n    expectSimpleRowText(container, 'debt-maximum', 'No Limit')\n    expectSimpleRowText(container, 'cover-rate-minimum', '1.000%')\n    expectSimpleRowText(container, 'cover-rate-liquidation', '5.000%')\n    expectSimpleRowText(container, 'data', '{meta: \"LoanBroker Metadata\"}')\n    unmount()\n  })\n\n  it('renders partial update without showing omitted DebtMaximum field', () => {\n    // Mock useQuery to return the vault asset information\n    ;(useQuery as jest.Mock).mockReturnValue({\n      data: { currency: 'USD', issuer: 'ra8dG1xwi5dQTJx1fRNCc8gjSAdQMX3vV7' },\n      isLoading: false,\n      error: null,\n    })\n\n    const { container, unmount } = renderComponent(LoanBrokerSetPartialUpdate)\n    expectSimpleRowText(\n      container,\n      'vault-id',\n      'AE7952AFEE76456A1ECA877E1797E9FF842E7FD87D1F2C856B7B1EE10C9654D7',\n    )\n    expectSimpleRowText(container, 'management-fee-rate', '1.000%')\n    expectSimpleRowText(container, 'cover-rate-minimum', '1.000%')\n    expectSimpleRowText(container, 'cover-rate-liquidation', '5.000%')\n    expectSimpleRowText(container, 'data', '{meta: \"LoanBroker Metadata\"}')\n\n    // DebtMaximum should not be shown since it was omitted from the transaction\n    expect(\n      container.querySelector('[data-testid=\"debt-maximum\"]'),\n    ).not.toBeInTheDocument()\n\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/LoanBrokerSet/test/LoanBrokerSetTableDetail.test.tsx",
    "content": "import { useQuery } from 'react-query'\nimport i18n from '../../../../../../i18n/testConfigEnglish'\nimport { createTableDetailRenderFactory } from '../../test'\nimport { TableDetail } from '../TableDetail'\nimport LoanBrokerSet from './mock_data/LoanBrokerSet.json'\nimport LoanBrokerSetPartialUpdate from './mock_data/LoanBrokerSetPartialUpdate.json'\nimport LoanBrokerSetZeroDebt from './mock_data/LoanBrokerSetZeroDebt.json'\n\njest.mock('react-query', () => ({\n  ...jest.requireActual('react-query'),\n  useQuery: jest.fn(),\n}))\n\nconst renderComponent = createTableDetailRenderFactory(TableDetail, i18n)\n\ndescribe('LoanBrokerSetTableDetail', () => {\n  it('renders with non-zero debt maximum', () => {\n    // Mock useQuery to return the vault asset information\n    ;(useQuery as jest.Mock).mockReturnValue({\n      data: { currency: 'USD', issuer: 'ra8dG1xwi5dQTJx1fRNCc8gjSAdQMX3vV7' },\n      isLoading: false,\n      error: null,\n    })\n\n    const { container, unmount } = renderComponent(LoanBrokerSet)\n\n    expect(container.querySelector('.loan-broker-set')).toHaveTextContent(\n      'Vault ID: AE7952AF...9654D7' +\n        'rates: Management Fee Rate 1.000%, Cover Rate Minimum 1.000%, Cover Rate Liquidation 5.000%' +\n        'Debt Maximum: $100,000.00 USD.ra8dG1xwi5dQTJx1fRNCc8gjSAdQMX3vV7',\n    )\n\n    unmount()\n  })\n\n  it('renders with zero debt maximum showing No Limit', () => {\n    // Mock useQuery to return the vault asset information\n    ;(useQuery as jest.Mock).mockReturnValue({\n      data: { currency: 'USD', issuer: 'ra8dG1xwi5dQTJx1fRNCc8gjSAdQMX3vV7' },\n      isLoading: false,\n      error: null,\n    })\n\n    const { container, unmount } = renderComponent(LoanBrokerSetZeroDebt)\n\n    expect(container.querySelector('.debt-maximum')).toHaveTextContent(\n      'Debt Maximum: No Limit',\n    )\n\n    unmount()\n  })\n\n  it('renders partial update without showing omitted DebtMaximum field', () => {\n    // Mock useQuery to return the vault asset information\n    ;(useQuery as jest.Mock).mockReturnValue({\n      data: { currency: 'USD', issuer: 'ra8dG1xwi5dQTJx1fRNCc8gjSAdQMX3vV7' },\n      isLoading: false,\n      error: null,\n    })\n\n    const { container, unmount } = renderComponent(LoanBrokerSetPartialUpdate)\n\n    expect(container.querySelector('.loan-broker-set')).toHaveTextContent(\n      'Vault ID: AE7952AF...9654D7' +\n        'rates: Management Fee Rate 1.000%, Cover Rate Minimum 1.000%, Cover Rate Liquidation 5.000%',\n    )\n\n    // DebtMaximum should not be shown since it was omitted from the transaction\n    expect(container.querySelector('.debt-maximum')).not.toBeInTheDocument()\n\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/LoanBrokerSet/test/mock_data/LoanBrokerSet.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rfS5JMvtQk6w5tZbwpSnpx15U8qrXWW8yi\",\n    \"CoverRateLiquidation\": 5000,\n    \"CoverRateMinimum\": 1000,\n    \"Data\": \"7B226D657461223A224C6F616E42726F6B6572204D65746164617461227D\",\n    \"DebtMaximum\": \"100000\",\n    \"Fee\": \"2000000\",\n    \"Flags\": 0,\n    \"LastLedgerSequence\": 291183,\n    \"ManagementFeeRate\": 1000,\n    \"NetworkID\": 3222,\n    \"Sequence\": 291154,\n    \"SigningPubKey\": \"ED99153B1435C4D98191569187E7AF9DF00319794C1A82366E6E2F87B741BA1BBA\",\n    \"TransactionType\": \"LoanBrokerSet\",\n    \"TxnSignature\": \"A561FF4611163D14CC45D966735832D23778F393B5B23368BFD9F587247810D4973DD838CDA741A0AD021A413805AE1C05FA5E0273A2B541173B070FF1C83108\",\n    \"VaultID\": \"AE7952AFEE76456A1ECA877E1797E9FF842E7FD87D1F2C856B7B1EE10C9654D7\",\n    \"ctid\": \"C004715D00000C96\",\n    \"date\": 1762469362000,\n    \"hash\": \"12FE9E6C435F338E41959A1B8C107F353CC28936387037AAA3749DCB4077B526\",\n    \"inLedger\": 291165,\n    \"ledger_index\": 291165,\n    \"meta\": {\n      \"AffectedNodes\": [\n        {\n          \"ModifiedNode\": {\n            \"FinalFields\": {\n              \"Flags\": 0,\n              \"Owner\": \"rfS5JMvtQk6w5tZbwpSnpx15U8qrXWW8yi\",\n              \"RootIndex\": \"4F6AE8BD0997DFFA83AD6E066EDDF019D8FBAF1C6E4B3B7CB8B06AE103D33158\"\n            },\n            \"LedgerEntryType\": \"DirectoryNode\",\n            \"LedgerIndex\": \"4F6AE8BD0997DFFA83AD6E066EDDF019D8FBAF1C6E4B3B7CB8B06AE103D33158\",\n            \"PreviousTxnID\": \"3839C7D6506483F7B48DBF3523E27BD3745049F6CEEC1E2194181C11116FAAAB\",\n            \"PreviousTxnLgrSeq\": 291162\n          }\n        },\n        {\n          \"ModifiedNode\": {\n            \"FinalFields\": {\n              \"Flags\": 0,\n              \"Owner\": \"ra8dG1xwi5dQTJx1fRNCc8gjSAdQMX3vV7\",\n              \"RootIndex\": \"56322EFCCEB8C30307F375007FD8B8C53F7B4B0E75B78066323CDDCBCDB948BE\"\n            },\n            \"LedgerEntryType\": \"DirectoryNode\",\n            \"LedgerIndex\": \"56322EFCCEB8C30307F375007FD8B8C53F7B4B0E75B78066323CDDCBCDB948BE\",\n            \"PreviousTxnID\": \"3839C7D6506483F7B48DBF3523E27BD3745049F6CEEC1E2194181C11116FAAAB\",\n            \"PreviousTxnLgrSeq\": 291162\n          }\n        },\n        {\n          \"CreatedNode\": {\n            \"LedgerEntryType\": \"DirectoryNode\",\n            \"LedgerIndex\": \"5B97A3DDC76913125CBF3FB9458955DA93A1D8EA834D770AAFCD0651B2EB3113\",\n            \"NewFields\": {\n              \"Owner\": \"rBuMfvezoska1LReG1CBoayi8esBgqzpQ4\",\n              \"RootIndex\": \"5B97A3DDC76913125CBF3FB9458955DA93A1D8EA834D770AAFCD0651B2EB3113\"\n            }\n          }\n        },\n        {\n          \"CreatedNode\": {\n            \"LedgerEntryType\": \"LoanBroker\",\n            \"LedgerIndex\": \"7B3AF305C92293AF3F01088298E354E7B649F963427FA4B7F5414EF1383CB80B\",\n            \"NewFields\": {\n              \"Account\": \"rBuMfvezoska1LReG1CBoayi8esBgqzpQ4\",\n              \"CoverRateLiquidation\": 5000,\n              \"CoverRateMinimum\": 1000,\n              \"Data\": \"7B226D657461223A224C6F616E42726F6B6572204D65746164617461227D\",\n              \"DebtMaximum\": \"1000000000000000e-4\",\n              \"LoanSequence\": 1,\n              \"ManagementFeeRate\": 1000,\n              \"Owner\": \"rfS5JMvtQk6w5tZbwpSnpx15U8qrXWW8yi\",\n              \"Sequence\": 291154,\n              \"VaultID\": \"AE7952AFEE76456A1ECA877E1797E9FF842E7FD87D1F2C856B7B1EE10C9654D7\"\n            }\n          }\n        },\n        {\n          \"ModifiedNode\": {\n            \"FinalFields\": {\n              \"Flags\": 0,\n              \"Owner\": \"r3H6XP3x3uzNW89mqSspxAVq3Pzd9hbZhG\",\n              \"RootIndex\": \"97E4739330007BCB77E6A730F07EF3C6E88233D57BA642DC67967C3136EA3542\"\n            },\n            \"LedgerEntryType\": \"DirectoryNode\",\n            \"LedgerIndex\": \"97E4739330007BCB77E6A730F07EF3C6E88233D57BA642DC67967C3136EA3542\",\n            \"PreviousTxnID\": \"3839C7D6506483F7B48DBF3523E27BD3745049F6CEEC1E2194181C11116FAAAB\",\n            \"PreviousTxnLgrSeq\": 291162\n          }\n        },\n        {\n          \"ModifiedNode\": {\n            \"LedgerEntryType\": \"AccountRoot\",\n            \"LedgerIndex\": \"9CC9DDE74906A6CFEE975F7B8B31F55F410FDD0DFD8D6474B5A144EB29CF8322\",\n            \"PreviousTxnID\": \"3839C7D6506483F7B48DBF3523E27BD3745049F6CEEC1E2194181C11116FAAAB\",\n            \"PreviousTxnLgrSeq\": 291162\n          }\n        },\n        {\n          \"CreatedNode\": {\n            \"LedgerEntryType\": \"AccountRoot\",\n            \"LedgerIndex\": \"ACE302E9118CA9A0423C36306CC659E413C3196A7E2D44C5D519A8BF468A50D7\",\n            \"NewFields\": {\n              \"Account\": \"rBuMfvezoska1LReG1CBoayi8esBgqzpQ4\",\n              \"Flags\": 26214400,\n              \"LoanBrokerID\": \"7B3AF305C92293AF3F01088298E354E7B649F963427FA4B7F5414EF1383CB80B\",\n              \"OwnerCount\": 1\n            }\n          }\n        },\n        {\n          \"ModifiedNode\": {\n            \"FinalFields\": {\n              \"Account\": \"rfS5JMvtQk6w5tZbwpSnpx15U8qrXWW8yi\",\n              \"Balance\": \"92000000\",\n              \"Flags\": 0,\n              \"OwnerCount\": 5,\n              \"Sequence\": 291155\n            },\n            \"LedgerEntryType\": \"AccountRoot\",\n            \"LedgerIndex\": \"D3A16624DDD503F0F01A1C777E597D3513B30E06576BD5DB5C59FBC604BCEBFC\",\n            \"PreviousFields\": {\n              \"Balance\": \"94000000\",\n              \"OwnerCount\": 3,\n              \"Sequence\": 291154\n            },\n            \"PreviousTxnID\": \"0A7F9BE7463DC3E3512F0228EC348922F6BBDE433A1C4644C60B977BDEB7ED71\",\n            \"PreviousTxnLgrSeq\": 291163\n          }\n        },\n        {\n          \"CreatedNode\": {\n            \"LedgerEntryType\": \"RippleState\",\n            \"LedgerIndex\": \"FDC8A4899C79C91D4329811A45695C59B8060F28EA7D923EB6F47E15F42FC312\",\n            \"NewFields\": {\n              \"Balance\": {\n                \"currency\": \"USD\",\n                \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n                \"value\": \"0\"\n              },\n              \"Flags\": 2228224,\n              \"HighLimit\": {\n                \"currency\": \"USD\",\n                \"issuer\": \"rBuMfvezoska1LReG1CBoayi8esBgqzpQ4\",\n                \"value\": \"0\"\n              },\n              \"LowLimit\": {\n                \"currency\": \"USD\",\n                \"issuer\": \"ra8dG1xwi5dQTJx1fRNCc8gjSAdQMX3vV7\",\n                \"value\": \"0\"\n              }\n            }\n          }\n        }\n      ],\n      \"TransactionIndex\": 0,\n      \"TransactionResult\": \"tesSUCCESS\"\n    },\n    \"validated\": true\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rfS5JMvtQk6w5tZbwpSnpx15U8qrXWW8yi\",\n            \"RootIndex\": \"4F6AE8BD0997DFFA83AD6E066EDDF019D8FBAF1C6E4B3B7CB8B06AE103D33158\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"4F6AE8BD0997DFFA83AD6E066EDDF019D8FBAF1C6E4B3B7CB8B06AE103D33158\",\n          \"PreviousTxnID\": \"3839C7D6506483F7B48DBF3523E27BD3745049F6CEEC1E2194181C11116FAAAB\",\n          \"PreviousTxnLgrSeq\": 291162\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"ra8dG1xwi5dQTJx1fRNCc8gjSAdQMX3vV7\",\n            \"RootIndex\": \"56322EFCCEB8C30307F375007FD8B8C53F7B4B0E75B78066323CDDCBCDB948BE\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"56322EFCCEB8C30307F375007FD8B8C53F7B4B0E75B78066323CDDCBCDB948BE\",\n          \"PreviousTxnID\": \"3839C7D6506483F7B48DBF3523E27BD3745049F6CEEC1E2194181C11116FAAAB\",\n          \"PreviousTxnLgrSeq\": 291162\n        }\n      },\n      {\n        \"CreatedNode\": {\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"5B97A3DDC76913125CBF3FB9458955DA93A1D8EA834D770AAFCD0651B2EB3113\",\n          \"NewFields\": {\n            \"Owner\": \"rBuMfvezoska1LReG1CBoayi8esBgqzpQ4\",\n            \"RootIndex\": \"5B97A3DDC76913125CBF3FB9458955DA93A1D8EA834D770AAFCD0651B2EB3113\"\n          }\n        }\n      },\n      {\n        \"CreatedNode\": {\n          \"LedgerEntryType\": \"LoanBroker\",\n          \"LedgerIndex\": \"7B3AF305C92293AF3F01088298E354E7B649F963427FA4B7F5414EF1383CB80B\",\n          \"NewFields\": {\n            \"Account\": \"rBuMfvezoska1LReG1CBoayi8esBgqzpQ4\",\n            \"CoverRateLiquidation\": 5000,\n            \"CoverRateMinimum\": 1000,\n            \"Data\": \"7B226D657461223A224C6F616E42726F6B6572204D65746164617461227D\",\n            \"DebtMaximum\": \"1000000000000000e-4\",\n            \"LoanSequence\": 1,\n            \"ManagementFeeRate\": 1000,\n            \"Owner\": \"rfS5JMvtQk6w5tZbwpSnpx15U8qrXWW8yi\",\n            \"Sequence\": 291154,\n            \"VaultID\": \"AE7952AFEE76456A1ECA877E1797E9FF842E7FD87D1F2C856B7B1EE10C9654D7\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"r3H6XP3x3uzNW89mqSspxAVq3Pzd9hbZhG\",\n            \"RootIndex\": \"97E4739330007BCB77E6A730F07EF3C6E88233D57BA642DC67967C3136EA3542\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"97E4739330007BCB77E6A730F07EF3C6E88233D57BA642DC67967C3136EA3542\",\n          \"PreviousTxnID\": \"3839C7D6506483F7B48DBF3523E27BD3745049F6CEEC1E2194181C11116FAAAB\",\n          \"PreviousTxnLgrSeq\": 291162\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"9CC9DDE74906A6CFEE975F7B8B31F55F410FDD0DFD8D6474B5A144EB29CF8322\",\n          \"PreviousTxnID\": \"3839C7D6506483F7B48DBF3523E27BD3745049F6CEEC1E2194181C11116FAAAB\",\n          \"PreviousTxnLgrSeq\": 291162\n        }\n      },\n      {\n        \"CreatedNode\": {\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"ACE302E9118CA9A0423C36306CC659E413C3196A7E2D44C5D519A8BF468A50D7\",\n          \"NewFields\": {\n            \"Account\": \"rBuMfvezoska1LReG1CBoayi8esBgqzpQ4\",\n            \"Flags\": 26214400,\n            \"LoanBrokerID\": \"7B3AF305C92293AF3F01088298E354E7B649F963427FA4B7F5414EF1383CB80B\",\n            \"OwnerCount\": 1\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rfS5JMvtQk6w5tZbwpSnpx15U8qrXWW8yi\",\n            \"Balance\": \"92000000\",\n            \"Flags\": 0,\n            \"OwnerCount\": 5,\n            \"Sequence\": 291155\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"D3A16624DDD503F0F01A1C777E597D3513B30E06576BD5DB5C59FBC604BCEBFC\",\n          \"PreviousFields\": {\n            \"Balance\": \"94000000\",\n            \"OwnerCount\": 3,\n            \"Sequence\": 291154\n          },\n          \"PreviousTxnID\": \"0A7F9BE7463DC3E3512F0228EC348922F6BBDE433A1C4644C60B977BDEB7ED71\",\n          \"PreviousTxnLgrSeq\": 291163\n        }\n      },\n      {\n        \"CreatedNode\": {\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"FDC8A4899C79C91D4329811A45695C59B8060F28EA7D923EB6F47E15F42FC312\",\n          \"NewFields\": {\n            \"Balance\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rBuMfvezoska1LReG1CBoayi8esBgqzpQ4\",\n              \"value\": \"0\"\n            },\n            \"LowLimit\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"ra8dG1xwi5dQTJx1fRNCc8gjSAdQMX3vV7\",\n              \"value\": \"0\"\n            }\n          }\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tesSUCCESS\"\n  },\n  \"hash\": \"12FE9E6C435F338E41959A1B8C107F353CC28936387037AAA3749DCB4077B526\",\n  \"ledger_index\": 291165,\n  \"date\": 1762469362000\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/LoanBrokerSet/test/mock_data/LoanBrokerSetPartialUpdate.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rfS5JMvtQk6w5tZbwpSnpx15U8qrXWW8yi\",\n    \"CoverRateLiquidation\": 5000,\n    \"CoverRateMinimum\": 1000,\n    \"Data\": \"7B226D657461223A224C6F616E42726F6B6572204D65746164617461227D\",\n    \"Fee\": \"2000000\",\n    \"Flags\": 0,\n    \"LastLedgerSequence\": 291183,\n    \"LoanBrokerID\": \"7B3AF305C92293AF3F01088298E354E7B649F963427FA4B7F5414EF1383CB80B\",\n    \"ManagementFeeRate\": 1000,\n    \"NetworkID\": 3222,\n    \"Sequence\": 291154,\n    \"SigningPubKey\": \"ED99153B1435C4D98191569187E7AF9DF00319794C1A82366E6E2F87B741BA1BBA\",\n    \"TransactionType\": \"LoanBrokerSet\",\n    \"TxnSignature\": \"A561FF4611163D14CC45D966735832D23778F393B5B23368BFD9F587247810D4973DD838CDA741A0AD021A413805AE1C05FA5E0273A2B541173B070FF1C83108\",\n    \"VaultID\": \"AE7952AFEE76456A1ECA877E1797E9FF842E7FD87D1F2C856B7B1EE10C9654D7\",\n    \"ctid\": \"C004715D00000C96\",\n    \"date\": 1762469362000,\n    \"hash\": \"12FE9E6C435F338E41959A1B8C107F353CC28936387037AAA3749DCB4077B526\",\n    \"inLedger\": 291165,\n    \"ledger_index\": 291165,\n    \"meta\": {\n      \"AffectedNodes\": [\n        {\n          \"ModifiedNode\": {\n            \"FinalFields\": {\n              \"Account\": \"rBuMfvezoska1LReG1CBoayi8esBgqzpQ4\",\n              \"CoverRateLiquidation\": 5000,\n              \"CoverRateMinimum\": 1000,\n              \"Data\": \"7B226D657461223A224C6F616E42726F6B6572204D65746164617461227D\",\n              \"DebtMaximum\": \"1000000000000000e-4\",\n              \"LoanSequence\": 1,\n              \"ManagementFeeRate\": 1000,\n              \"Owner\": \"rfS5JMvtQk6w5tZbwpSnpx15U8qrXWW8yi\",\n              \"Sequence\": 291154,\n              \"VaultID\": \"AE7952AFEE76456A1ECA877E1797E9FF842E7FD87D1F2C856B7B1EE10C9654D7\"\n            },\n            \"LedgerEntryType\": \"LoanBroker\",\n            \"LedgerIndex\": \"7B3AF305C92293AF3F01088298E354E7B649F963427FA4B7F5414EF1383CB80B\",\n            \"PreviousFields\": {\n              \"CoverRateLiquidation\": 3000,\n              \"CoverRateMinimum\": 500,\n              \"ManagementFeeRate\": 500\n            },\n            \"PreviousTxnID\": \"3839C7D6506483F7B48DBF3523E27BD3745049F6CEEC1E2194181C11116FAAAB\",\n            \"PreviousTxnLgrSeq\": 291162\n          }\n        }\n      ],\n      \"TransactionIndex\": 0,\n      \"TransactionResult\": \"tesSUCCESS\"\n    },\n    \"validated\": true\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rBuMfvezoska1LReG1CBoayi8esBgqzpQ4\",\n            \"CoverRateLiquidation\": 5000,\n            \"CoverRateMinimum\": 1000,\n            \"Data\": \"7B226D657461223A224C6F616E42726F6B6572204D65746164617461227D\",\n            \"DebtMaximum\": \"100000\",\n            \"LoanSequence\": 1,\n            \"ManagementFeeRate\": 1000,\n            \"Owner\": \"rfS5JMvtQk6w5tZbwpSnpx15U8qrXWW8yi\",\n            \"Sequence\": 291154,\n            \"VaultID\": \"AE7952AFEE76456A1ECA877E1797E9FF842E7FD87D1F2C856B7B1EE10C9654D7\"\n          },\n          \"LedgerEntryType\": \"LoanBroker\",\n          \"LedgerIndex\": \"7B3AF305C92293AF3F01088298E354E7B649F963427FA4B7F5414EF1383CB80B\",\n          \"PreviousFields\": {\n            \"CoverRateLiquidation\": 3000,\n            \"CoverRateMinimum\": 500,\n            \"ManagementFeeRate\": 500\n          },\n          \"PreviousTxnID\": \"3839C7D6506483F7B48DBF3523E27BD3745049F6CEEC1E2194181C11116FAAAB\",\n          \"PreviousTxnLgrSeq\": 291162\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tesSUCCESS\"\n  },\n  \"hash\": \"12FE9E6C435F338E41959A1B8C107F353CC28936387037AAA3749DCB4077B526\",\n  \"ledger_index\": 291165,\n  \"date\": 1762469362000\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/LoanBrokerSet/test/mock_data/LoanBrokerSetZeroDebt.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rfS5JMvtQk6w5tZbwpSnpx15U8qrXWW8yi\",\n    \"CoverRateLiquidation\": 5000,\n    \"CoverRateMinimum\": 1000,\n    \"Data\": \"7B226D657461223A224C6F616E42726F6B6572204D65746164617461227D\",\n    \"DebtMaximum\": \"0\",\n    \"Fee\": \"2000000\",\n    \"Flags\": 0,\n    \"LastLedgerSequence\": 291183,\n    \"ManagementFeeRate\": 1000,\n    \"NetworkID\": 3222,\n    \"Sequence\": 291154,\n    \"SigningPubKey\": \"ED99153B1435C4D98191569187E7AF9DF00319794C1A82366E6E2F87B741BA1BBA\",\n    \"TransactionType\": \"LoanBrokerSet\",\n    \"TxnSignature\": \"A561FF4611163D14CC45D966735832D23778F393B5B23368BFD9F587247810D4973DD838CDA741A0AD021A413805AE1C05FA5E0273A2B541173B070FF1C83108\",\n    \"VaultID\": \"AE7952AFEE76456A1ECA877E1797E9FF842E7FD87D1F2C856B7B1EE10C9654D7\",\n    \"ctid\": \"C004715D00000C96\",\n    \"date\": 1762469362000,\n    \"hash\": \"12FE9E6C435F338E41959A1B8C107F353CC28936387037AAA3749DCB4077B526\",\n    \"inLedger\": 291165,\n    \"ledger_index\": 291165,\n    \"meta\": {\n      \"AffectedNodes\": [\n        {\n          \"ModifiedNode\": {\n            \"FinalFields\": {\n              \"Flags\": 0,\n              \"Owner\": \"rfS5JMvtQk6w5tZbwpSnpx15U8qrXWW8yi\",\n              \"RootIndex\": \"4F6AE8BD0997DFFA83AD6E066EDDF019D8FBAF1C6E4B3B7CB8B06AE103D33158\"\n            },\n            \"LedgerEntryType\": \"DirectoryNode\",\n            \"LedgerIndex\": \"4F6AE8BD0997DFFA83AD6E066EDDF019D8FBAF1C6E4B3B7CB8B06AE103D33158\",\n            \"PreviousTxnID\": \"3839C7D6506483F7B48DBF3523E27BD3745049F6CEEC1E2194181C11116FAAAB\",\n            \"PreviousTxnLgrSeq\": 291162\n          }\n        },\n        {\n          \"ModifiedNode\": {\n            \"FinalFields\": {\n              \"Flags\": 0,\n              \"Owner\": \"ra8dG1xwi5dQTJx1fRNCc8gjSAdQMX3vV7\",\n              \"RootIndex\": \"56322EFCCEB8C30307F375007FD8B8C53F7B4B0E75B78066323CDDCBCDB948BE\"\n            },\n            \"LedgerEntryType\": \"DirectoryNode\",\n            \"LedgerIndex\": \"56322EFCCEB8C30307F375007FD8B8C53F7B4B0E75B78066323CDDCBCDB948BE\",\n            \"PreviousTxnID\": \"3839C7D6506483F7B48DBF3523E27BD3745049F6CEEC1E2194181C11116FAAAB\",\n            \"PreviousTxnLgrSeq\": 291162\n          }\n        },\n        {\n          \"CreatedNode\": {\n            \"LedgerEntryType\": \"DirectoryNode\",\n            \"LedgerIndex\": \"5B97A3DDC76913125CBF3FB9458955DA93A1D8EA834D770AAFCD0651B2EB3113\",\n            \"NewFields\": {\n              \"Owner\": \"rBuMfvezoska1LReG1CBoayi8esBgqzpQ4\",\n              \"RootIndex\": \"5B97A3DDC76913125CBF3FB9458955DA93A1D8EA834D770AAFCD0651B2EB3113\"\n            }\n          }\n        },\n        {\n          \"CreatedNode\": {\n            \"LedgerEntryType\": \"LoanBroker\",\n            \"LedgerIndex\": \"7B3AF305C92293AF3F01088298E354E7B649F963427FA4B7F5414EF1383CB80B\",\n            \"NewFields\": {\n              \"Account\": \"rBuMfvezoska1LReG1CBoayi8esBgqzpQ4\",\n              \"CoverRateLiquidation\": 5000,\n              \"CoverRateMinimum\": 1000,\n              \"Data\": \"7B226D657461223A224C6F616E42726F6B6572204D65746164617461227D\",\n              \"DebtMaximum\": \"1000000000000000e-4\",\n              \"LoanSequence\": 1,\n              \"ManagementFeeRate\": 1000,\n              \"Owner\": \"rfS5JMvtQk6w5tZbwpSnpx15U8qrXWW8yi\",\n              \"Sequence\": 291154,\n              \"VaultID\": \"AE7952AFEE76456A1ECA877E1797E9FF842E7FD87D1F2C856B7B1EE10C9654D7\"\n            }\n          }\n        },\n        {\n          \"ModifiedNode\": {\n            \"FinalFields\": {\n              \"Flags\": 0,\n              \"Owner\": \"r3H6XP3x3uzNW89mqSspxAVq3Pzd9hbZhG\",\n              \"RootIndex\": \"97E4739330007BCB77E6A730F07EF3C6E88233D57BA642DC67967C3136EA3542\"\n            },\n            \"LedgerEntryType\": \"DirectoryNode\",\n            \"LedgerIndex\": \"97E4739330007BCB77E6A730F07EF3C6E88233D57BA642DC67967C3136EA3542\",\n            \"PreviousTxnID\": \"3839C7D6506483F7B48DBF3523E27BD3745049F6CEEC1E2194181C11116FAAAB\",\n            \"PreviousTxnLgrSeq\": 291162\n          }\n        },\n        {\n          \"ModifiedNode\": {\n            \"LedgerEntryType\": \"AccountRoot\",\n            \"LedgerIndex\": \"9CC9DDE74906A6CFEE975F7B8B31F55F410FDD0DFD8D6474B5A144EB29CF8322\",\n            \"PreviousTxnID\": \"3839C7D6506483F7B48DBF3523E27BD3745049F6CEEC1E2194181C11116FAAAB\",\n            \"PreviousTxnLgrSeq\": 291162\n          }\n        },\n        {\n          \"CreatedNode\": {\n            \"LedgerEntryType\": \"AccountRoot\",\n            \"LedgerIndex\": \"ACE302E9118CA9A0423C36306CC659E413C3196A7E2D44C5D519A8BF468A50D7\",\n            \"NewFields\": {\n              \"Account\": \"rBuMfvezoska1LReG1CBoayi8esBgqzpQ4\",\n              \"Flags\": 26214400,\n              \"LoanBrokerID\": \"7B3AF305C92293AF3F01088298E354E7B649F963427FA4B7F5414EF1383CB80B\",\n              \"OwnerCount\": 1\n            }\n          }\n        },\n        {\n          \"ModifiedNode\": {\n            \"FinalFields\": {\n              \"Account\": \"rfS5JMvtQk6w5tZbwpSnpx15U8qrXWW8yi\",\n              \"Balance\": \"92000000\",\n              \"Flags\": 0,\n              \"OwnerCount\": 5,\n              \"Sequence\": 291155\n            },\n            \"LedgerEntryType\": \"AccountRoot\",\n            \"LedgerIndex\": \"D3A16624DDD503F0F01A1C777E597D3513B30E06576BD5DB5C59FBC604BCEBFC\",\n            \"PreviousFields\": {\n              \"Balance\": \"94000000\",\n              \"OwnerCount\": 3,\n              \"Sequence\": 291154\n            },\n            \"PreviousTxnID\": \"0A7F9BE7463DC3E3512F0228EC348922F6BBDE433A1C4644C60B977BDEB7ED71\",\n            \"PreviousTxnLgrSeq\": 291163\n          }\n        },\n        {\n          \"CreatedNode\": {\n            \"LedgerEntryType\": \"RippleState\",\n            \"LedgerIndex\": \"FDC8A4899C79C91D4329811A45695C59B8060F28EA7D923EB6F47E15F42FC312\",\n            \"NewFields\": {\n              \"Balance\": {\n                \"currency\": \"USD\",\n                \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n                \"value\": \"0\"\n              },\n              \"Flags\": 2228224,\n              \"HighLimit\": {\n                \"currency\": \"USD\",\n                \"issuer\": \"rBuMfvezoska1LReG1CBoayi8esBgqzpQ4\",\n                \"value\": \"0\"\n              },\n              \"LowLimit\": {\n                \"currency\": \"USD\",\n                \"issuer\": \"ra8dG1xwi5dQTJx1fRNCc8gjSAdQMX3vV7\",\n                \"value\": \"0\"\n              }\n            }\n          }\n        }\n      ],\n      \"TransactionIndex\": 0,\n      \"TransactionResult\": \"tesSUCCESS\"\n    },\n    \"validated\": true\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rfS5JMvtQk6w5tZbwpSnpx15U8qrXWW8yi\",\n            \"RootIndex\": \"4F6AE8BD0997DFFA83AD6E066EDDF019D8FBAF1C6E4B3B7CB8B06AE103D33158\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"4F6AE8BD0997DFFA83AD6E066EDDF019D8FBAF1C6E4B3B7CB8B06AE103D33158\",\n          \"PreviousTxnID\": \"3839C7D6506483F7B48DBF3523E27BD3745049F6CEEC1E2194181C11116FAAAB\",\n          \"PreviousTxnLgrSeq\": 291162\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"ra8dG1xwi5dQTJx1fRNCc8gjSAdQMX3vV7\",\n            \"RootIndex\": \"56322EFCCEB8C30307F375007FD8B8C53F7B4B0E75B78066323CDDCBCDB948BE\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"56322EFCCEB8C30307F375007FD8B8C53F7B4B0E75B78066323CDDCBCDB948BE\",\n          \"PreviousTxnID\": \"3839C7D6506483F7B48DBF3523E27BD3745049F6CEEC1E2194181C11116FAAAB\",\n          \"PreviousTxnLgrSeq\": 291162\n        }\n      },\n      {\n        \"CreatedNode\": {\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"5B97A3DDC76913125CBF3FB9458955DA93A1D8EA834D770AAFCD0651B2EB3113\",\n          \"NewFields\": {\n            \"Owner\": \"rBuMfvezoska1LReG1CBoayi8esBgqzpQ4\",\n            \"RootIndex\": \"5B97A3DDC76913125CBF3FB9458955DA93A1D8EA834D770AAFCD0651B2EB3113\"\n          }\n        }\n      },\n      {\n        \"CreatedNode\": {\n          \"LedgerEntryType\": \"LoanBroker\",\n          \"LedgerIndex\": \"7B3AF305C92293AF3F01088298E354E7B649F963427FA4B7F5414EF1383CB80B\",\n          \"NewFields\": {\n            \"Account\": \"rBuMfvezoska1LReG1CBoayi8esBgqzpQ4\",\n            \"CoverRateLiquidation\": 5000,\n            \"CoverRateMinimum\": 1000,\n            \"Data\": \"7B226D657461223A224C6F616E42726F6B6572204D65746164617461227D\",\n            \"DebtMaximum\": \"1000000000000000e-4\",\n            \"LoanSequence\": 1,\n            \"ManagementFeeRate\": 1000,\n            \"Owner\": \"rfS5JMvtQk6w5tZbwpSnpx15U8qrXWW8yi\",\n            \"Sequence\": 291154,\n            \"VaultID\": \"AE7952AFEE76456A1ECA877E1797E9FF842E7FD87D1F2C856B7B1EE10C9654D7\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"r3H6XP3x3uzNW89mqSspxAVq3Pzd9hbZhG\",\n            \"RootIndex\": \"97E4739330007BCB77E6A730F07EF3C6E88233D57BA642DC67967C3136EA3542\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"97E4739330007BCB77E6A730F07EF3C6E88233D57BA642DC67967C3136EA3542\",\n          \"PreviousTxnID\": \"3839C7D6506483F7B48DBF3523E27BD3745049F6CEEC1E2194181C11116FAAAB\",\n          \"PreviousTxnLgrSeq\": 291162\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"9CC9DDE74906A6CFEE975F7B8B31F55F410FDD0DFD8D6474B5A144EB29CF8322\",\n          \"PreviousTxnID\": \"3839C7D6506483F7B48DBF3523E27BD3745049F6CEEC1E2194181C11116FAAAB\",\n          \"PreviousTxnLgrSeq\": 291162\n        }\n      },\n      {\n        \"CreatedNode\": {\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"ACE302E9118CA9A0423C36306CC659E413C3196A7E2D44C5D519A8BF468A50D7\",\n          \"NewFields\": {\n            \"Account\": \"rBuMfvezoska1LReG1CBoayi8esBgqzpQ4\",\n            \"Flags\": 26214400,\n            \"LoanBrokerID\": \"7B3AF305C92293AF3F01088298E354E7B649F963427FA4B7F5414EF1383CB80B\",\n            \"OwnerCount\": 1\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rfS5JMvtQk6w5tZbwpSnpx15U8qrXWW8yi\",\n            \"Balance\": \"92000000\",\n            \"Flags\": 0,\n            \"OwnerCount\": 5,\n            \"Sequence\": 291155\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"D3A16624DDD503F0F01A1C777E597D3513B30E06576BD5DB5C59FBC604BCEBFC\",\n          \"PreviousFields\": {\n            \"Balance\": \"94000000\",\n            \"OwnerCount\": 3,\n            \"Sequence\": 291154\n          },\n          \"PreviousTxnID\": \"0A7F9BE7463DC3E3512F0228EC348922F6BBDE433A1C4644C60B977BDEB7ED71\",\n          \"PreviousTxnLgrSeq\": 291163\n        }\n      },\n      {\n        \"CreatedNode\": {\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"FDC8A4899C79C91D4329811A45695C59B8060F28EA7D923EB6F47E15F42FC312\",\n          \"NewFields\": {\n            \"Balance\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rBuMfvezoska1LReG1CBoayi8esBgqzpQ4\",\n              \"value\": \"0\"\n            },\n            \"LowLimit\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"ra8dG1xwi5dQTJx1fRNCc8gjSAdQMX3vV7\",\n              \"value\": \"0\"\n            }\n          }\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tesSUCCESS\"\n  },\n  \"hash\": \"12FE9E6C435F338E41959A1B8C107F353CC28936387037AAA3749DCB4077B526\",\n  \"ledger_index\": 291165,\n  \"date\": 1762469362000\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/LoanBrokerSet/types.ts",
    "content": "import { Amount } from '../../../types'\nimport { TransactionCommonFields } from '../types'\n\n// TODO: remove when lending protocol (XLS-66) is supported on xrpl.js\nexport interface LoanBrokerSet extends TransactionCommonFields {\n  VaultID: string\n  LoanBrokerID?: string\n  Data?: string\n  ManagementFeeRate?: number\n  DebtMaximum?: Amount\n  CoverRateMinimum?: number\n  CoverRateLiquidation?: number\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/LoanDelete/Simple.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { TransactionSimpleComponent, TransactionSimpleProps } from '../types'\nimport { SimpleRow } from '../SimpleRow'\nimport { LoanDelete } from './types'\n\nexport const Simple: TransactionSimpleComponent = (\n  props: TransactionSimpleProps<LoanDelete>,\n) => {\n  const { t } = useTranslation()\n  const { data } = props\n  const { LoanID } = data.instructions\n\n  return (\n    <SimpleRow label={t('loan_id')} data-testid=\"loan-id\">\n      {LoanID}\n    </SimpleRow>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/LoanDelete/TableDetail.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { TransactionTableDetailProps } from '../types'\nimport { LoanDelete } from './types'\nimport { shortenLoanID } from '../../../utils'\n\nexport const TableDetail = ({\n  instructions,\n}: TransactionTableDetailProps<LoanDelete>) => {\n  const { t } = useTranslation()\n  const { LoanID } = instructions\n\n  return (\n    <div className=\"loan-delete\">\n      <span className=\"label\">{t('deletes')}</span>\n      <span>{t('loan_id')}</span>\n      <span className=\"case-sensitive\">\n        <b>{shortenLoanID(LoanID)}</b>\n      </span>\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/LoanDelete/index.ts",
    "content": "import {\n  TransactionAction,\n  TransactionCategory,\n  TransactionMapping,\n} from '../types'\n\nimport { Simple } from './Simple'\nimport { TableDetail } from './TableDetail'\n\nexport const LoanDeleteTransaction: TransactionMapping = {\n  Simple,\n  TableDetail,\n  action: TransactionAction.CANCEL,\n  category: TransactionCategory.OTHER,\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/LoanDelete/test/LoanDeleteSimple.test.tsx",
    "content": "import { createSimpleRenderFactory, expectSimpleRowText } from '../../test'\nimport { Simple } from '../Simple'\nimport LoanDelete from './mock_data/LoanDelete.json'\n\nconst renderComponent = createSimpleRenderFactory(Simple)\n\ndescribe('LoanDelete: Simple', () => {\n  it('renders', () => {\n    const { container, unmount } = renderComponent(LoanDelete)\n    expectSimpleRowText(\n      container,\n      'loan-id',\n      '28375E885D1F8E46502B1A6FA44B9E2EFC15244F467010082BE314AE6224CD66',\n    )\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/LoanDelete/test/LoanDeleteTableDetail.test.tsx",
    "content": "import i18n from '../../../../../../i18n/testConfigEnglish'\nimport { createTableDetailRenderFactory } from '../../test'\nimport { TableDetail } from '../TableDetail'\nimport LoanDelete from './mock_data/LoanDelete.json'\n\nconst renderComponent = createTableDetailRenderFactory(TableDetail, i18n)\n\ndescribe('LoanDeleteTableDetail', () => {\n  it('renders with delete action and loan ID', () => {\n    const { container, unmount } = renderComponent(LoanDelete)\n\n    expect(container.querySelector('.loan-delete')).toHaveTextContent(\n      'deletesLoan ID28375E...24CD66',\n    )\n\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/LoanDelete/test/mock_data/LoanDelete.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rH4absn9JcB8m943YRMNJpuR9HQs56hkr8\",\n    \"Fee\": \"2000000\",\n    \"Flags\": 0,\n    \"LastLedgerSequence\": 291194,\n    \"LoanID\": \"28375E885D1F8E46502B1A6FA44B9E2EFC15244F467010082BE314AE6224CD66\",\n    \"NetworkID\": 3222,\n    \"Sequence\": 291155,\n    \"SigningPubKey\": \"ED5063FC56A0BD4398964FFD55B3FC353C291C34B81A60BFD33FDC0B036C4D403E\",\n    \"TransactionType\": \"LoanDelete\",\n    \"TxnSignature\": \"B979EC74ED77776913778854DEC302CCA482719D94718DAED8C61AE3FFAEA1C0031DB9B24A400320BCD6661D51CA08982FB74AE25F16A4943F244426B23DFE08\",\n    \"ctid\": \"C004716700000C96\",\n    \"date\": 1762469393000,\n    \"hash\": \"08BAA79D26A977CAD558929F8A67297FFEDCDEC4CB092B159052108ECD3C5A63\",\n    \"inLedger\": 291175,\n    \"ledger_index\": 291175,\n    \"meta\": {\n      \"AffectedNodes\": [\n        {\n          \"ModifiedNode\": {\n            \"FinalFields\": {\n              \"Account\": \"rH4absn9JcB8m943YRMNJpuR9HQs56hkr8\",\n              \"Balance\": \"94000000\",\n              \"Flags\": 0,\n              \"OwnerCount\": 2,\n              \"Sequence\": 291156\n            },\n            \"LedgerEntryType\": \"AccountRoot\",\n            \"LedgerIndex\": \"369E58AA309D1EA2619E990C565B61C92E6A393C8AE0A043663F03D471F324A1\",\n            \"PreviousFields\": {\n              \"Balance\": \"96000000\",\n              \"Sequence\": 291155\n            },\n            \"PreviousTxnID\": \"C56440AE7007618356BA3E7C87E4822684156D08E6FC69194C864DBC624DFDA2\",\n            \"PreviousTxnLgrSeq\": 291170\n          }\n        }\n      ],\n      \"TransactionIndex\": 0,\n      \"TransactionResult\": \"tecHAS_OBLIGATIONS\"\n    },\n    \"validated\": true\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rH4absn9JcB8m943YRMNJpuR9HQs56hkr8\",\n            \"Balance\": \"94000000\",\n            \"Flags\": 0,\n            \"OwnerCount\": 2,\n            \"Sequence\": 291156\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"369E58AA309D1EA2619E990C565B61C92E6A393C8AE0A043663F03D471F324A1\",\n          \"PreviousFields\": {\n            \"Balance\": \"96000000\",\n            \"Sequence\": 291155\n          },\n          \"PreviousTxnID\": \"C56440AE7007618356BA3E7C87E4822684156D08E6FC69194C864DBC624DFDA2\",\n          \"PreviousTxnLgrSeq\": 291170\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tecHAS_OBLIGATIONS\"\n  },\n  \"hash\": \"08BAA79D26A977CAD558929F8A67297FFEDCDEC4CB092B159052108ECD3C5A63\",\n  \"ledger_index\": 291175,\n  \"date\": 1762469393000\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/LoanDelete/types.ts",
    "content": "import { TransactionCommonFields } from '../types'\n\n// TODO: remove when lending protocol (XLS-66) is supported on xrpl.js\nexport interface LoanDelete extends TransactionCommonFields {\n  LoanID: string\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/LoanManage/Simple.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { TransactionSimpleComponent, TransactionSimpleProps } from '../types'\nimport { SimpleRow } from '../SimpleRow'\nimport { LoanManage } from './types'\n\nexport const Simple: TransactionSimpleComponent = (\n  props: TransactionSimpleProps<LoanManage>,\n) => {\n  const { t } = useTranslation()\n  const { data } = props\n  const { LoanID } = data.instructions\n\n  return (\n    <SimpleRow label={t('loan_id')} data-testid=\"loan-id\">\n      {LoanID}\n    </SimpleRow>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/LoanManage/TableDetail.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { TransactionTableDetailProps } from '../types'\nimport { LoanManage } from './types'\nimport { shortenLoanID } from '../../../utils'\n\nexport const TableDetail = ({\n  instructions,\n}: TransactionTableDetailProps<LoanManage>) => {\n  const { t } = useTranslation()\n  const { LoanID } = instructions\n\n  return (\n    <div className=\"loan-manage\">\n      <span>{t('loan_id')}</span>\n      <span className=\"case-sensitive\">\n        <b>{shortenLoanID(LoanID)}</b>\n      </span>\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/LoanManage/index.ts",
    "content": "import {\n  TransactionAction,\n  TransactionCategory,\n  TransactionMapping,\n} from '../types'\n\nimport { Simple } from './Simple'\nimport { TableDetail } from './TableDetail'\n\nexport const LoanManageTransaction: TransactionMapping = {\n  Simple,\n  TableDetail,\n  action: TransactionAction.MODIFY,\n  category: TransactionCategory.OTHER,\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/LoanManage/test/LoanManageSimple.test.tsx",
    "content": "import { createSimpleRenderFactory, expectSimpleRowText } from '../../test'\nimport { Simple } from '../Simple'\nimport LoanManage from './mock_data/LoanManage.json'\n\nconst renderComponent = createSimpleRenderFactory(Simple)\n\ndescribe('LoanManage: Simple', () => {\n  it('renders', () => {\n    const { container, unmount } = renderComponent(LoanManage)\n    expectSimpleRowText(\n      container,\n      'loan-id',\n      '28375E885D1F8E46502B1A6FA44B9E2EFC15244F467010082BE314AE6224CD66',\n    )\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/LoanManage/test/LoanManageTableDetail.test.tsx",
    "content": "import i18n from '../../../../../../i18n/testConfigEnglish'\nimport { createTableDetailRenderFactory } from '../../test'\nimport { TableDetail } from '../TableDetail'\nimport LoanManage from './mock_data/LoanManage.json'\n\nconst renderComponent = createTableDetailRenderFactory(TableDetail, i18n)\n\ndescribe('LoanManageTableDetail', () => {\n  it('renders with loan ID', () => {\n    const { container, unmount } = renderComponent(LoanManage)\n\n    expect(container.querySelector('.loan-manage')).toHaveTextContent(\n      'Loan ID28375E...24CD66',\n    )\n\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/LoanManage/test/mock_data/LoanManage.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rfS5JMvtQk6w5tZbwpSnpx15U8qrXWW8yi\",\n    \"Fee\": \"2000000\",\n    \"Flags\": 131072,\n    \"LastLedgerSequence\": 291190,\n    \"LoanID\": \"28375E885D1F8E46502B1A6FA44B9E2EFC15244F467010082BE314AE6224CD66\",\n    \"NetworkID\": 3222,\n    \"Sequence\": 291157,\n    \"SigningPubKey\": \"ED99153B1435C4D98191569187E7AF9DF00319794C1A82366E6E2F87B741BA1BBA\",\n    \"TransactionType\": \"LoanManage\",\n    \"TxnSignature\": \"E7FC58AB8495E798359EBF972A674E8A11366E7F85957EF840BCFA0623F3B4B4F248E8EC279DD8B55830DCB57AF35A6346B083C2538673FF096D1CC0B5B5D504\",\n    \"ctid\": \"C004716300000C96\",\n    \"date\": 1762469382000,\n    \"hash\": \"3B281754D397C58E69E56CE25F612B4FAB6AD0B2ABE7ACAF5C1A8829A2CE49FC\",\n    \"inLedger\": 291171,\n    \"ledger_index\": 291171,\n    \"meta\": {\n      \"AffectedNodes\": [\n        {\n          \"ModifiedNode\": {\n            \"FinalFields\": {\n              \"Borrower\": \"rH4absn9JcB8m943YRMNJpuR9HQs56hkr8\",\n              \"CloseInterestRate\": 200,\n              \"ClosePaymentFee\": \"1\",\n              \"Flags\": 131072,\n              \"GracePeriod\": 604800,\n              \"InterestRate\": 500,\n              \"LateInterestRate\": 1000,\n              \"LatePaymentFee\": \"0.5\",\n              \"LoanBrokerID\": \"7B3AF305C92293AF3F01088298E354E7B649F963427FA4B7F5414EF1383CB80B\",\n              \"LoanBrokerNode\": \"0\",\n              \"LoanOriginationFee\": \"1\",\n              \"LoanScale\": -14,\n              \"LoanSequence\": 1,\n              \"LoanServiceFee\": \"0.1\",\n              \"ManagementFeeOutstanding\": \"0.00009602833405\",\n              \"NextPaymentDueDate\": 815784581,\n              \"OverpaymentFee\": 500,\n              \"OverpaymentInterestRate\": 300,\n              \"OwnerNode\": \"0\",\n              \"PaymentInterval\": 2592000,\n              \"PaymentRemaining\": 7,\n              \"PeriodicPayment\": \"0.8355610375288088\",\n              \"PreviousPaymentDate\": 828744581,\n              \"PrincipalOutstanding\": \"5.83932442929905\",\n              \"StartDate\": 815784581,\n              \"TotalValueOutstanding\": \"5.84892726270317\"\n            },\n            \"LedgerEntryType\": \"Loan\",\n            \"LedgerIndex\": \"28375E885D1F8E46502B1A6FA44B9E2EFC15244F467010082BE314AE6224CD66\",\n            \"PreviousFields\": {\n              \"Flags\": 0,\n              \"NextPaymentDueDate\": 831336581\n            },\n            \"PreviousTxnID\": \"C56440AE7007618356BA3E7C87E4822684156D08E6FC69194C864DBC624DFDA2\",\n            \"PreviousTxnLgrSeq\": 291170\n          }\n        },\n        {\n          \"ModifiedNode\": {\n            \"FinalFields\": {\n              \"Account\": \"r3H6XP3x3uzNW89mqSspxAVq3Pzd9hbZhG\",\n              \"Asset\": {\n                \"currency\": \"USD\",\n                \"issuer\": \"ra8dG1xwi5dQTJx1fRNCc8gjSAdQMX3vV7\"\n              },\n              \"AssetsAvailable\": \"54.17763389147314\",\n              \"AssetsTotal\": \"60.02646512584226\",\n              \"Flags\": 0,\n              \"LossUnrealized\": \"5.84883123436912\",\n              \"Owner\": \"rfS5JMvtQk6w5tZbwpSnpx15U8qrXWW8yi\",\n              \"OwnerNode\": \"0\",\n              \"Scale\": 6,\n              \"Sequence\": 291152,\n              \"ShareMPTID\": \"000000014FF15D0B970E3DA867E1A3F714F1E7E6D67B3B79\",\n              \"WithdrawalPolicy\": 1\n            },\n            \"LedgerEntryType\": \"Vault\",\n            \"LedgerIndex\": \"AE7952AFEE76456A1ECA877E1797E9FF842E7FD87D1F2C856B7B1EE10C9654D7\",\n            \"PreviousFields\": {\n              \"LossUnrealized\": \"0\"\n            },\n            \"PreviousTxnID\": \"C56440AE7007618356BA3E7C87E4822684156D08E6FC69194C864DBC624DFDA2\",\n            \"PreviousTxnLgrSeq\": 291170\n          }\n        },\n        {\n          \"ModifiedNode\": {\n            \"FinalFields\": {\n              \"Account\": \"rfS5JMvtQk6w5tZbwpSnpx15U8qrXWW8yi\",\n              \"Balance\": \"86000000\",\n              \"Flags\": 0,\n              \"OwnerCount\": 5,\n              \"Sequence\": 291158\n            },\n            \"LedgerEntryType\": \"AccountRoot\",\n            \"LedgerIndex\": \"D3A16624DDD503F0F01A1C777E597D3513B30E06576BD5DB5C59FBC604BCEBFC\",\n            \"PreviousFields\": {\n              \"Balance\": \"88000000\",\n              \"Sequence\": 291157\n            },\n            \"PreviousTxnID\": \"636378D09168009F4ED87A933ACA7EDD9278B2D8F14D654DD759FE8687E4BDC6\",\n            \"PreviousTxnLgrSeq\": 291168\n          }\n        }\n      ],\n      \"TransactionIndex\": 0,\n      \"TransactionResult\": \"tesSUCCESS\"\n    },\n    \"validated\": true\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Borrower\": \"rH4absn9JcB8m943YRMNJpuR9HQs56hkr8\",\n            \"CloseInterestRate\": 200,\n            \"ClosePaymentFee\": \"1\",\n            \"Flags\": 131072,\n            \"GracePeriod\": 604800,\n            \"InterestRate\": 500,\n            \"LateInterestRate\": 1000,\n            \"LatePaymentFee\": \"0.5\",\n            \"LoanBrokerID\": \"7B3AF305C92293AF3F01088298E354E7B649F963427FA4B7F5414EF1383CB80B\",\n            \"LoanBrokerNode\": \"0\",\n            \"LoanOriginationFee\": \"1\",\n            \"LoanScale\": -14,\n            \"LoanSequence\": 1,\n            \"LoanServiceFee\": \"0.1\",\n            \"ManagementFeeOutstanding\": \"0.00009602833405\",\n            \"NextPaymentDueDate\": 815784581,\n            \"OverpaymentFee\": 500,\n            \"OverpaymentInterestRate\": 300,\n            \"OwnerNode\": \"0\",\n            \"PaymentInterval\": 2592000,\n            \"PaymentRemaining\": 7,\n            \"PeriodicPayment\": \"0.8355610375288088\",\n            \"PreviousPaymentDate\": 828744581,\n            \"PrincipalOutstanding\": \"5.83932442929905\",\n            \"StartDate\": 815784581,\n            \"TotalValueOutstanding\": \"5.84892726270317\"\n          },\n          \"LedgerEntryType\": \"Loan\",\n          \"LedgerIndex\": \"28375E885D1F8E46502B1A6FA44B9E2EFC15244F467010082BE314AE6224CD66\",\n          \"PreviousFields\": {\n            \"Flags\": 0,\n            \"NextPaymentDueDate\": 831336581\n          },\n          \"PreviousTxnID\": \"C56440AE7007618356BA3E7C87E4822684156D08E6FC69194C864DBC624DFDA2\",\n          \"PreviousTxnLgrSeq\": 291170\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r3H6XP3x3uzNW89mqSspxAVq3Pzd9hbZhG\",\n            \"Asset\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"ra8dG1xwi5dQTJx1fRNCc8gjSAdQMX3vV7\"\n            },\n            \"AssetsAvailable\": \"54.17763389147314\",\n            \"AssetsTotal\": \"60.02646512584226\",\n            \"Flags\": 0,\n            \"LossUnrealized\": \"5.84883123436912\",\n            \"Owner\": \"rfS5JMvtQk6w5tZbwpSnpx15U8qrXWW8yi\",\n            \"OwnerNode\": \"0\",\n            \"Scale\": 6,\n            \"Sequence\": 291152,\n            \"ShareMPTID\": \"000000014FF15D0B970E3DA867E1A3F714F1E7E6D67B3B79\",\n            \"WithdrawalPolicy\": 1\n          },\n          \"LedgerEntryType\": \"Vault\",\n          \"LedgerIndex\": \"AE7952AFEE76456A1ECA877E1797E9FF842E7FD87D1F2C856B7B1EE10C9654D7\",\n          \"PreviousFields\": {\n            \"LossUnrealized\": \"0\"\n          },\n          \"PreviousTxnID\": \"C56440AE7007618356BA3E7C87E4822684156D08E6FC69194C864DBC624DFDA2\",\n          \"PreviousTxnLgrSeq\": 291170\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rfS5JMvtQk6w5tZbwpSnpx15U8qrXWW8yi\",\n            \"Balance\": \"86000000\",\n            \"Flags\": 0,\n            \"OwnerCount\": 5,\n            \"Sequence\": 291158\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"D3A16624DDD503F0F01A1C777E597D3513B30E06576BD5DB5C59FBC604BCEBFC\",\n          \"PreviousFields\": {\n            \"Balance\": \"88000000\",\n            \"Sequence\": 291157\n          },\n          \"PreviousTxnID\": \"636378D09168009F4ED87A933ACA7EDD9278B2D8F14D654DD759FE8687E4BDC6\",\n          \"PreviousTxnLgrSeq\": 291168\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tesSUCCESS\"\n  },\n  \"hash\": \"3B281754D397C58E69E56CE25F612B4FAB6AD0B2ABE7ACAF5C1A8829A2CE49FC\",\n  \"ledger_index\": 291171,\n  \"date\": 1762469382000\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/LoanManage/types.ts",
    "content": "import { TransactionCommonFields } from '../types'\n\n// TODO: remove when lending protocol (XLS-66) is supported on xrpl.js\nexport interface LoanManage extends TransactionCommonFields {\n  LoanID: string\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/LoanPay/Simple.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { TransactionSimpleComponent, TransactionSimpleProps } from '../types'\nimport { SimpleRow } from '../SimpleRow'\nimport { Amount } from '../../Amount'\nimport { formatAmount } from '../../../../../rippled/lib/txSummary/formatAmount'\nimport { LoanPay } from './types'\n\nexport const Simple: TransactionSimpleComponent = (\n  props: TransactionSimpleProps<LoanPay>,\n) => {\n  const { t } = useTranslation()\n  const { data } = props\n  const { LoanID, Amount: amount } = data.instructions\n\n  return (\n    <>\n      <SimpleRow label={t('loan_id')} data-testid=\"loan-id\">\n        {LoanID}\n      </SimpleRow>\n      <SimpleRow label={t('amount')} data-testid=\"amount\">\n        <Amount value={formatAmount(amount)} />\n      </SimpleRow>\n    </>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/LoanPay/TableDetail.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { TransactionTableDetailProps } from '../types'\nimport { LoanPay } from './types'\nimport { Amount } from '../../Amount'\nimport { formatAmount } from '../../../../../rippled/lib/txSummary/formatAmount'\n\nexport const TableDetail = ({\n  instructions,\n}: TransactionTableDetailProps<LoanPay>) => {\n  const { t } = useTranslation()\n  const { Amount: amount, LoanID } = instructions\n\n  return (\n    <div className=\"loan-pay\">\n      <span className=\"label\">{t('send')}</span>\n      <Amount value={formatAmount(amount)} />\n      <span>\n        {t('to')} {t('loan_id')}\n      </span>\n      <span className=\"case-sensitive\">{LoanID}</span>\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/LoanPay/index.ts",
    "content": "import {\n  TransactionAction,\n  TransactionCategory,\n  TransactionMapping,\n} from '../types'\n\nimport { Simple } from './Simple'\nimport { TableDetail } from './TableDetail'\n\nexport const LoanPayTransaction: TransactionMapping = {\n  Simple,\n  TableDetail,\n  action: TransactionAction.SEND,\n  category: TransactionCategory.OTHER,\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/LoanPay/test/LoanPaySimple.test.tsx",
    "content": "import { createSimpleRenderFactory, expectSimpleRowText } from '../../test'\nimport { Simple } from '../Simple'\nimport LoanPay from './mock_data/LoanPay.json'\n\nconst renderComponent = createSimpleRenderFactory(Simple)\n\ndescribe('LoanPay: Simple', () => {\n  it('renders', () => {\n    const { container, unmount } = renderComponent(LoanPay)\n    expectSimpleRowText(\n      container,\n      'loan-id',\n      '28375E885D1F8E46502B1A6FA44B9E2EFC15244F467010082BE314AE6224CD66',\n    )\n    expectSimpleRowText(\n      container,\n      'amount',\n      '$5.00 USD.ra8dG1xwi5dQTJx1fRNCc8gjSAdQMX3vV7',\n    )\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/LoanPay/test/LoanPayTableDetail.test.tsx",
    "content": "import i18n from '../../../../../../i18n/testConfigEnglish'\nimport { createTableDetailRenderFactory } from '../../test'\nimport { TableDetail } from '../TableDetail'\nimport LoanPay from './mock_data/LoanPay.json'\n\nconst renderComponent = createTableDetailRenderFactory(TableDetail, i18n)\n\ndescribe('LoanPayTableDetail', () => {\n  it('renders with amount and loan ID', () => {\n    const { container, unmount } = renderComponent(LoanPay)\n\n    expect(container.querySelector('.loan-pay')).toHaveTextContent(\n      'Send$5.00 USD.ra8dG1xwi5dQTJx1fRNCc8gjSAdQMX3vV7to Loan ID28375E885D1F8E46502B1A6FA44B9E2EFC15244F467010082BE314AE6224CD66',\n    )\n\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/LoanPay/test/mock_data/LoanPay.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rH4absn9JcB8m943YRMNJpuR9HQs56hkr8\",\n    \"Amount\": {\n      \"currency\": \"USD\",\n      \"issuer\": \"ra8dG1xwi5dQTJx1fRNCc8gjSAdQMX3vV7\",\n      \"value\": \"5\"\n    },\n    \"Fee\": \"2000000\",\n    \"Flags\": 0,\n    \"LastLedgerSequence\": 291188,\n    \"LoanID\": \"28375E885D1F8E46502B1A6FA44B9E2EFC15244F467010082BE314AE6224CD66\",\n    \"NetworkID\": 3222,\n    \"Sequence\": 291154,\n    \"SigningPubKey\": \"ED5063FC56A0BD4398964FFD55B3FC353C291C34B81A60BFD33FDC0B036C4D403E\",\n    \"TransactionType\": \"LoanPay\",\n    \"TxnSignature\": \"B752377C875D27F2578F0CB9F9F29672856FACD23D0109586EC46EE473995EDEF733DEED4B7CBD984B69E8336C4F239C9604BBAADECF8FE1D47C5172C9C63D01\",\n    \"ctid\": \"C004716200000C96\",\n    \"date\": 1762469381000,\n    \"hash\": \"C56440AE7007618356BA3E7C87E4822684156D08E6FC69194C864DBC624DFDA2\",\n    \"inLedger\": 291170,\n    \"ledger_index\": 291170,\n    \"meta\": {\n      \"AffectedNodes\": [\n        {\n          \"ModifiedNode\": {\n            \"FinalFields\": {\n              \"Borrower\": \"rH4absn9JcB8m943YRMNJpuR9HQs56hkr8\",\n              \"CloseInterestRate\": 200,\n              \"ClosePaymentFee\": \"1\",\n              \"Flags\": 0,\n              \"GracePeriod\": 604800,\n              \"InterestRate\": 500,\n              \"LateInterestRate\": 1000,\n              \"LatePaymentFee\": \"0.5\",\n              \"LoanBrokerID\": \"7B3AF305C92293AF3F01088298E354E7B649F963427FA4B7F5414EF1383CB80B\",\n              \"LoanBrokerNode\": \"0\",\n              \"LoanOriginationFee\": \"1\",\n              \"LoanScale\": -14,\n              \"LoanSequence\": 1,\n              \"LoanServiceFee\": \"0.1\",\n              \"ManagementFeeOutstanding\": \"0.00009602833405\",\n              \"NextPaymentDueDate\": 831336581,\n              \"OverpaymentFee\": 500,\n              \"OverpaymentInterestRate\": 300,\n              \"OwnerNode\": \"0\",\n              \"PaymentInterval\": 2592000,\n              \"PaymentRemaining\": 7,\n              \"PeriodicPayment\": \"0.8355610375288088\",\n              \"PreviousPaymentDate\": 828744581,\n              \"PrincipalOutstanding\": \"5.83932442929905\",\n              \"StartDate\": 815784581,\n              \"TotalValueOutstanding\": \"5.84892726270317\"\n            },\n            \"LedgerEntryType\": \"Loan\",\n            \"LedgerIndex\": \"28375E885D1F8E46502B1A6FA44B9E2EFC15244F467010082BE314AE6224CD66\",\n            \"PreviousFields\": {\n              \"ManagementFeeOutstanding\": \"0.00026732450345\",\n              \"NextPaymentDueDate\": 818376581,\n              \"PaymentRemaining\": 12,\n              \"PrincipalOutstanding\": \"10\",\n              \"TotalValueOutstanding\": \"10.02673245034571\"\n            },\n            \"PreviousTxnID\": \"636378D09168009F4ED87A933ACA7EDD9278B2D8F14D654DD759FE8687E4BDC6\",\n            \"PreviousTxnLgrSeq\": 291168\n          }\n        },\n        {\n          \"ModifiedNode\": {\n            \"FinalFields\": {\n              \"Account\": \"rH4absn9JcB8m943YRMNJpuR9HQs56hkr8\",\n              \"Balance\": \"96000000\",\n              \"Flags\": 0,\n              \"OwnerCount\": 2,\n              \"Sequence\": 291155\n            },\n            \"LedgerEntryType\": \"AccountRoot\",\n            \"LedgerIndex\": \"369E58AA309D1EA2619E990C565B61C92E6A393C8AE0A043663F03D471F324A1\",\n            \"PreviousFields\": {\n              \"Balance\": \"98000000\",\n              \"Sequence\": 291154\n            },\n            \"PreviousTxnID\": \"636378D09168009F4ED87A933ACA7EDD9278B2D8F14D654DD759FE8687E4BDC6\",\n            \"PreviousTxnLgrSeq\": 291168\n          }\n        },\n        {\n          \"ModifiedNode\": {\n            \"FinalFields\": {\n              \"Balance\": {\n                \"currency\": \"USD\",\n                \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n                \"value\": \"-54.17763389147314\"\n              },\n              \"Flags\": 2228224,\n              \"HighLimit\": {\n                \"currency\": \"USD\",\n                \"issuer\": \"r3H6XP3x3uzNW89mqSspxAVq3Pzd9hbZhG\",\n                \"value\": \"0\"\n              },\n              \"HighNode\": \"0\",\n              \"LowLimit\": {\n                \"currency\": \"USD\",\n                \"issuer\": \"ra8dG1xwi5dQTJx1fRNCc8gjSAdQMX3vV7\",\n                \"value\": \"0\"\n              },\n              \"LowNode\": \"0\"\n            },\n            \"LedgerEntryType\": \"RippleState\",\n            \"LedgerIndex\": \"48EF1C5BBC06B44C85D2C16A27D682BB5D3622B99E78EB969B73C679C26D319F\",\n            \"PreviousFields\": {\n              \"Balance\": {\n                \"currency\": \"USD\",\n                \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n                \"value\": \"-50\"\n              }\n            },\n            \"PreviousTxnID\": \"636378D09168009F4ED87A933ACA7EDD9278B2D8F14D654DD759FE8687E4BDC6\",\n            \"PreviousTxnLgrSeq\": 291168\n          }\n        },\n        {\n          \"ModifiedNode\": {\n            \"FinalFields\": {\n              \"Account\": \"rBuMfvezoska1LReG1CBoayi8esBgqzpQ4\",\n              \"CoverAvailable\": \"10\",\n              \"CoverRateLiquidation\": 5000,\n              \"CoverRateMinimum\": 1000,\n              \"Data\": \"7B226D657461223A224C6F616E42726F6B6572204D65746164617461227D\",\n              \"DebtMaximum\": \"1000000000000000e-4\",\n              \"DebtTotal\": \"5.84883123436912\",\n              \"Flags\": 0,\n              \"LoanSequence\": 2,\n              \"ManagementFeeRate\": 1000,\n              \"Owner\": \"rfS5JMvtQk6w5tZbwpSnpx15U8qrXWW8yi\",\n              \"OwnerCount\": 1,\n              \"OwnerNode\": \"0\",\n              \"Sequence\": 291154,\n              \"VaultID\": \"AE7952AFEE76456A1ECA877E1797E9FF842E7FD87D1F2C856B7B1EE10C9654D7\",\n              \"VaultNode\": \"0\"\n            },\n            \"LedgerEntryType\": \"LoanBroker\",\n            \"LedgerIndex\": \"7B3AF305C92293AF3F01088298E354E7B649F963427FA4B7F5414EF1383CB80B\",\n            \"PreviousFields\": {\n              \"DebtTotal\": \"10.02646512584226\"\n            },\n            \"PreviousTxnID\": \"636378D09168009F4ED87A933ACA7EDD9278B2D8F14D654DD759FE8687E4BDC6\",\n            \"PreviousTxnLgrSeq\": 291168\n          }\n        },\n        {\n          \"ModifiedNode\": {\n            \"FinalFields\": {\n              \"Balance\": {\n                \"currency\": \"USD\",\n                \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n                \"value\": \"-31.5001712961694\"\n              },\n              \"Flags\": 131072,\n              \"HighLimit\": {\n                \"currency\": \"USD\",\n                \"issuer\": \"rfS5JMvtQk6w5tZbwpSnpx15U8qrXWW8yi\",\n                \"value\": \"1000000\"\n              },\n              \"HighNode\": \"0\",\n              \"LowLimit\": {\n                \"currency\": \"USD\",\n                \"issuer\": \"ra8dG1xwi5dQTJx1fRNCc8gjSAdQMX3vV7\",\n                \"value\": \"0\"\n              },\n              \"LowNode\": \"0\"\n            },\n            \"LedgerEntryType\": \"RippleState\",\n            \"LedgerIndex\": \"8AC6CD6C4F2A31F675CEDE92C5FBEB0E7D2C72A0BD9CF1FA2264984FE524F32E\",\n            \"PreviousFields\": {\n              \"Balance\": {\n                \"currency\": \"USD\",\n                \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n                \"value\": \"-31\"\n              }\n            },\n            \"PreviousTxnID\": \"636378D09168009F4ED87A933ACA7EDD9278B2D8F14D654DD759FE8687E4BDC6\",\n            \"PreviousTxnLgrSeq\": 291168\n          }\n        },\n        {\n          \"ModifiedNode\": {\n            \"FinalFields\": {\n              \"Account\": \"r3H6XP3x3uzNW89mqSspxAVq3Pzd9hbZhG\",\n              \"Asset\": {\n                \"currency\": \"USD\",\n                \"issuer\": \"ra8dG1xwi5dQTJx1fRNCc8gjSAdQMX3vV7\"\n              },\n              \"AssetsAvailable\": \"54.17763389147314\",\n              \"AssetsTotal\": \"60.02646512584226\",\n              \"Flags\": 0,\n              \"LossUnrealized\": \"0\",\n              \"Owner\": \"rfS5JMvtQk6w5tZbwpSnpx15U8qrXWW8yi\",\n              \"OwnerNode\": \"0\",\n              \"Scale\": 6,\n              \"Sequence\": 291152,\n              \"ShareMPTID\": \"000000014FF15D0B970E3DA867E1A3F714F1E7E6D67B3B79\",\n              \"WithdrawalPolicy\": 1\n            },\n            \"LedgerEntryType\": \"Vault\",\n            \"LedgerIndex\": \"AE7952AFEE76456A1ECA877E1797E9FF842E7FD87D1F2C856B7B1EE10C9654D7\",\n            \"PreviousFields\": {\n              \"AssetsAvailable\": \"50\"\n            },\n            \"PreviousTxnID\": \"636378D09168009F4ED87A933ACA7EDD9278B2D8F14D654DD759FE8687E4BDC6\",\n            \"PreviousTxnLgrSeq\": 291168\n          }\n        },\n        {\n          \"ModifiedNode\": {\n            \"FinalFields\": {\n              \"Balance\": {\n                \"currency\": \"USD\",\n                \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n                \"value\": \"-4.32219481235746\"\n              },\n              \"Flags\": 131072,\n              \"HighLimit\": {\n                \"currency\": \"USD\",\n                \"issuer\": \"rH4absn9JcB8m943YRMNJpuR9HQs56hkr8\",\n                \"value\": \"1000000\"\n              },\n              \"HighNode\": \"0\",\n              \"LowLimit\": {\n                \"currency\": \"USD\",\n                \"issuer\": \"ra8dG1xwi5dQTJx1fRNCc8gjSAdQMX3vV7\",\n                \"value\": \"0\"\n              },\n              \"LowNode\": \"0\"\n            },\n            \"LedgerEntryType\": \"RippleState\",\n            \"LedgerIndex\": \"D9A3D6C6DFE031982ECF8591700201F7A0F62E4D74564D3810F90B622DC31168\",\n            \"PreviousFields\": {\n              \"Balance\": {\n                \"currency\": \"USD\",\n                \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n                \"value\": \"-9\"\n              }\n            },\n            \"PreviousTxnID\": \"636378D09168009F4ED87A933ACA7EDD9278B2D8F14D654DD759FE8687E4BDC6\",\n            \"PreviousTxnLgrSeq\": 291168\n          }\n        }\n      ],\n      \"TransactionIndex\": 0,\n      \"TransactionResult\": \"tesSUCCESS\"\n    },\n    \"validated\": true\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Borrower\": \"rH4absn9JcB8m943YRMNJpuR9HQs56hkr8\",\n            \"CloseInterestRate\": 200,\n            \"ClosePaymentFee\": \"1\",\n            \"Flags\": 0,\n            \"GracePeriod\": 604800,\n            \"InterestRate\": 500,\n            \"LateInterestRate\": 1000,\n            \"LatePaymentFee\": \"0.5\",\n            \"LoanBrokerID\": \"7B3AF305C92293AF3F01088298E354E7B649F963427FA4B7F5414EF1383CB80B\",\n            \"LoanBrokerNode\": \"0\",\n            \"LoanOriginationFee\": \"1\",\n            \"LoanScale\": -14,\n            \"LoanSequence\": 1,\n            \"LoanServiceFee\": \"0.1\",\n            \"ManagementFeeOutstanding\": \"0.00009602833405\",\n            \"NextPaymentDueDate\": 831336581,\n            \"OverpaymentFee\": 500,\n            \"OverpaymentInterestRate\": 300,\n            \"OwnerNode\": \"0\",\n            \"PaymentInterval\": 2592000,\n            \"PaymentRemaining\": 7,\n            \"PeriodicPayment\": \"0.8355610375288088\",\n            \"PreviousPaymentDate\": 828744581,\n            \"PrincipalOutstanding\": \"5.83932442929905\",\n            \"StartDate\": 815784581,\n            \"TotalValueOutstanding\": \"5.84892726270317\"\n          },\n          \"LedgerEntryType\": \"Loan\",\n          \"LedgerIndex\": \"28375E885D1F8E46502B1A6FA44B9E2EFC15244F467010082BE314AE6224CD66\",\n          \"PreviousFields\": {\n            \"ManagementFeeOutstanding\": \"0.00026732450345\",\n            \"NextPaymentDueDate\": 818376581,\n            \"PaymentRemaining\": 12,\n            \"PrincipalOutstanding\": \"10\",\n            \"TotalValueOutstanding\": \"10.02673245034571\"\n          },\n          \"PreviousTxnID\": \"636378D09168009F4ED87A933ACA7EDD9278B2D8F14D654DD759FE8687E4BDC6\",\n          \"PreviousTxnLgrSeq\": 291168\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rH4absn9JcB8m943YRMNJpuR9HQs56hkr8\",\n            \"Balance\": \"96000000\",\n            \"Flags\": 0,\n            \"OwnerCount\": 2,\n            \"Sequence\": 291155\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"369E58AA309D1EA2619E990C565B61C92E6A393C8AE0A043663F03D471F324A1\",\n          \"PreviousFields\": {\n            \"Balance\": \"98000000\",\n            \"Sequence\": 291154\n          },\n          \"PreviousTxnID\": \"636378D09168009F4ED87A933ACA7EDD9278B2D8F14D654DD759FE8687E4BDC6\",\n          \"PreviousTxnLgrSeq\": 291168\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-54.17763389147314\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"r3H6XP3x3uzNW89mqSspxAVq3Pzd9hbZhG\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"ra8dG1xwi5dQTJx1fRNCc8gjSAdQMX3vV7\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"48EF1C5BBC06B44C85D2C16A27D682BB5D3622B99E78EB969B73C679C26D319F\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-50\"\n            }\n          },\n          \"PreviousTxnID\": \"636378D09168009F4ED87A933ACA7EDD9278B2D8F14D654DD759FE8687E4BDC6\",\n          \"PreviousTxnLgrSeq\": 291168\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rBuMfvezoska1LReG1CBoayi8esBgqzpQ4\",\n            \"CoverAvailable\": \"10\",\n            \"CoverRateLiquidation\": 5000,\n            \"CoverRateMinimum\": 1000,\n            \"Data\": \"7B226D657461223A224C6F616E42726F6B6572204D65746164617461227D\",\n            \"DebtMaximum\": \"1000000000000000e-4\",\n            \"DebtTotal\": \"5.84883123436912\",\n            \"Flags\": 0,\n            \"LoanSequence\": 2,\n            \"ManagementFeeRate\": 1000,\n            \"Owner\": \"rfS5JMvtQk6w5tZbwpSnpx15U8qrXWW8yi\",\n            \"OwnerCount\": 1,\n            \"OwnerNode\": \"0\",\n            \"Sequence\": 291154,\n            \"VaultID\": \"AE7952AFEE76456A1ECA877E1797E9FF842E7FD87D1F2C856B7B1EE10C9654D7\",\n            \"VaultNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"LoanBroker\",\n          \"LedgerIndex\": \"7B3AF305C92293AF3F01088298E354E7B649F963427FA4B7F5414EF1383CB80B\",\n          \"PreviousFields\": {\n            \"DebtTotal\": \"10.02646512584226\"\n          },\n          \"PreviousTxnID\": \"636378D09168009F4ED87A933ACA7EDD9278B2D8F14D654DD759FE8687E4BDC6\",\n          \"PreviousTxnLgrSeq\": 291168\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-31.5001712961694\"\n            },\n            \"Flags\": 131072,\n            \"HighLimit\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rfS5JMvtQk6w5tZbwpSnpx15U8qrXWW8yi\",\n              \"value\": \"1000000\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"ra8dG1xwi5dQTJx1fRNCc8gjSAdQMX3vV7\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"8AC6CD6C4F2A31F675CEDE92C5FBEB0E7D2C72A0BD9CF1FA2264984FE524F32E\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-31\"\n            }\n          },\n          \"PreviousTxnID\": \"636378D09168009F4ED87A933ACA7EDD9278B2D8F14D654DD759FE8687E4BDC6\",\n          \"PreviousTxnLgrSeq\": 291168\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r3H6XP3x3uzNW89mqSspxAVq3Pzd9hbZhG\",\n            \"Asset\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"ra8dG1xwi5dQTJx1fRNCc8gjSAdQMX3vV7\"\n            },\n            \"AssetsAvailable\": \"54.17763389147314\",\n            \"AssetsTotal\": \"60.02646512584226\",\n            \"Flags\": 0,\n            \"LossUnrealized\": \"0\",\n            \"Owner\": \"rfS5JMvtQk6w5tZbwpSnpx15U8qrXWW8yi\",\n            \"OwnerNode\": \"0\",\n            \"Scale\": 6,\n            \"Sequence\": 291152,\n            \"ShareMPTID\": \"000000014FF15D0B970E3DA867E1A3F714F1E7E6D67B3B79\",\n            \"WithdrawalPolicy\": 1\n          },\n          \"LedgerEntryType\": \"Vault\",\n          \"LedgerIndex\": \"AE7952AFEE76456A1ECA877E1797E9FF842E7FD87D1F2C856B7B1EE10C9654D7\",\n          \"PreviousFields\": {\n            \"AssetsAvailable\": \"50\"\n          },\n          \"PreviousTxnID\": \"636378D09168009F4ED87A933ACA7EDD9278B2D8F14D654DD759FE8687E4BDC6\",\n          \"PreviousTxnLgrSeq\": 291168\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-4.32219481235746\"\n            },\n            \"Flags\": 131072,\n            \"HighLimit\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rH4absn9JcB8m943YRMNJpuR9HQs56hkr8\",\n              \"value\": \"1000000\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"ra8dG1xwi5dQTJx1fRNCc8gjSAdQMX3vV7\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"D9A3D6C6DFE031982ECF8591700201F7A0F62E4D74564D3810F90B622DC31168\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-9\"\n            }\n          },\n          \"PreviousTxnID\": \"636378D09168009F4ED87A933ACA7EDD9278B2D8F14D654DD759FE8687E4BDC6\",\n          \"PreviousTxnLgrSeq\": 291168\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tesSUCCESS\"\n  },\n  \"hash\": \"C56440AE7007618356BA3E7C87E4822684156D08E6FC69194C864DBC624DFDA2\",\n  \"ledger_index\": 291170,\n  \"date\": 1762469381000\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/LoanPay/types.ts",
    "content": "import { Amount } from '../../../types'\nimport { TransactionCommonFields } from '../types'\n\n// TODO: remove when lending protocol (XLS-66) is supported on xrpl.js\nexport interface LoanPay extends TransactionCommonFields {\n  LoanID: string\n  Amount: Amount\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/LoanSet/Simple.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { useContext } from 'react'\nimport { useQuery } from 'react-query'\nimport { TransactionSimpleComponent, TransactionSimpleProps } from '../types'\nimport { SimpleRow } from '../SimpleRow'\nimport { Amount } from '../../Amount'\nimport { Account } from '../../Account'\nimport { formatDurationDetailed } from '../../../utils'\nimport { JsonView } from '../../JsonView'\nimport SocketContext from '../../../SocketContext'\nimport { getVaultAssetFromLoanBroker } from '../utils/vaultUtils'\nimport { formatAmountWithAsset } from '../../../../../rippled/lib/txSummary/formatAmount'\n\nexport const Simple: TransactionSimpleComponent = ({\n  data,\n}: TransactionSimpleProps) => {\n  const { t } = useTranslation()\n  const rippledSocket = useContext(SocketContext)\n\n  const {\n    loanBrokerID,\n    counterparty,\n    principalRequestedRaw,\n    loanOriginationFeeRaw,\n    loanServiceFeeRaw,\n    latePaymentFeeRaw,\n    closePaymentFeeRaw,\n    paymentTotal,\n    paymentInterval,\n    gracePeriod,\n    dataFromHex,\n    dataAsJson,\n    interestRatePercent,\n    lateInterestRatePercent,\n    closeInterestRatePercent,\n    overpaymentInterestRatePercent,\n    overpaymentFeePercent,\n  } = data.instructions\n\n  // Fetch Vault asset information from LoanBroker\n  const { data: vaultAsset } = useQuery(\n    ['vaultAssetFromLoanBroker', loanBrokerID],\n    () => getVaultAssetFromLoanBroker(rippledSocket, loanBrokerID),\n    { enabled: !!loanBrokerID && !!rippledSocket },\n  )\n\n  // Format amounts with correct currency\n  const principalRequested =\n    vaultAsset && principalRequestedRaw !== undefined\n      ? formatAmountWithAsset(principalRequestedRaw, vaultAsset)\n      : undefined\n\n  const loanOriginationFee =\n    vaultAsset && loanOriginationFeeRaw !== undefined\n      ? formatAmountWithAsset(loanOriginationFeeRaw, vaultAsset)\n      : undefined\n\n  const loanServiceFee =\n    vaultAsset && loanServiceFeeRaw !== undefined\n      ? formatAmountWithAsset(loanServiceFeeRaw, vaultAsset)\n      : undefined\n\n  const latePaymentFee =\n    vaultAsset && latePaymentFeeRaw !== undefined\n      ? formatAmountWithAsset(latePaymentFeeRaw, vaultAsset)\n      : undefined\n\n  const closePaymentFee =\n    vaultAsset && closePaymentFeeRaw !== undefined\n      ? formatAmountWithAsset(closePaymentFeeRaw, vaultAsset)\n      : undefined\n\n  return (\n    <>\n      <SimpleRow label={t('loan_broker_id')} data-testid=\"loan-broker-id\">\n        {loanBrokerID}\n      </SimpleRow>\n      {counterparty && (\n        <SimpleRow label={t('counterparty')} data-testid=\"counterparty\">\n          <Account account={counterparty} />\n        </SimpleRow>\n      )}\n      {principalRequested && (\n        <SimpleRow\n          label={t('principal_requested')}\n          data-testid=\"principal-requested\"\n        >\n          <Amount value={principalRequested} />\n        </SimpleRow>\n      )}\n      {interestRatePercent && (\n        <SimpleRow label={t('interest_rate')} data-testid=\"interest-rate\">\n          {interestRatePercent}\n        </SimpleRow>\n      )}\n      {paymentTotal !== undefined && (\n        <SimpleRow label={t('payment_total')} data-testid=\"payment-total\">\n          {paymentTotal}\n        </SimpleRow>\n      )}\n      {paymentInterval !== undefined && (\n        <SimpleRow label={t('payment_interval')} data-testid=\"payment-interval\">\n          {formatDurationDetailed(paymentInterval)}\n        </SimpleRow>\n      )}\n      {gracePeriod !== undefined && (\n        <SimpleRow label={t('grace_period')} data-testid=\"grace-period\">\n          {formatDurationDetailed(gracePeriod)}\n        </SimpleRow>\n      )}\n      {loanOriginationFee && (\n        <SimpleRow\n          label={t('loan_origination_fee')}\n          data-testid=\"loan-origination-fee\"\n        >\n          <Amount value={loanOriginationFee} />\n        </SimpleRow>\n      )}\n      {loanServiceFee && (\n        <SimpleRow label={t('loan_service_fee')} data-testid=\"loan-service-fee\">\n          <Amount value={loanServiceFee} />\n        </SimpleRow>\n      )}\n      {latePaymentFee && (\n        <SimpleRow label={t('late_payment_fee')} data-testid=\"late-payment-fee\">\n          <Amount value={latePaymentFee} />\n        </SimpleRow>\n      )}\n      {closePaymentFee && (\n        <SimpleRow\n          label={t('close_payment_fee')}\n          data-testid=\"close-payment-fee\"\n        >\n          <Amount value={closePaymentFee} />\n        </SimpleRow>\n      )}\n      {overpaymentFeePercent && (\n        <SimpleRow label={t('overpayment_fee')} data-testid=\"overpayment-fee\">\n          {overpaymentFeePercent}\n        </SimpleRow>\n      )}\n      {lateInterestRatePercent && (\n        <SimpleRow\n          label={t('late_interest_rate')}\n          data-testid=\"late-interest-rate\"\n        >\n          {lateInterestRatePercent}\n        </SimpleRow>\n      )}\n      {closeInterestRatePercent && (\n        <SimpleRow\n          label={t('close_interest_rate')}\n          data-testid=\"close-interest-rate\"\n        >\n          {closeInterestRatePercent}\n        </SimpleRow>\n      )}\n      {overpaymentInterestRatePercent && (\n        <SimpleRow\n          label={t('overpayment_interest_rate')}\n          data-testid=\"overpayment-interest-rate\"\n        >\n          {overpaymentInterestRatePercent}\n        </SimpleRow>\n      )}\n      {dataFromHex && (\n        <SimpleRow label={t('data')} className=\"dt\" data-testid=\"data\">\n          {dataAsJson ? <JsonView data={dataAsJson} /> : dataFromHex}\n        </SimpleRow>\n      )}\n    </>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/LoanSet/TableDetail.tsx",
    "content": "import { useTranslation, Trans } from 'react-i18next'\nimport { useContext } from 'react'\nimport { useQuery } from 'react-query'\nimport { TransactionTableDetailProps } from '../types'\nimport { Amount } from '../../Amount'\nimport { Account } from '../../Account'\nimport { formatDurationDetailed, shortenLoanBrokerID } from '../../../utils'\nimport SocketContext from '../../../SocketContext'\nimport { getVaultAssetFromLoanBroker } from '../utils/vaultUtils'\nimport { formatAmountWithAsset } from '../../../../../rippled/lib/txSummary/formatAmount'\n\nexport const TableDetail = ({ instructions }: TransactionTableDetailProps) => {\n  const { t } = useTranslation()\n  const rippledSocket = useContext(SocketContext)\n\n  const {\n    loanBrokerID,\n    principalRequestedRaw,\n    counterparty,\n    paymentTotal,\n    paymentInterval,\n    gracePeriod,\n    loanOriginationFeeRaw,\n    loanServiceFeeRaw,\n    interestRatePercent,\n    lateInterestRatePercent,\n    overpaymentFeePercent,\n  } = instructions\n\n  // Fetch Vault asset information from LoanBroker\n  const { data: vaultAsset } = useQuery(\n    ['vaultAssetFromLoanBroker', loanBrokerID],\n    () => getVaultAssetFromLoanBroker(rippledSocket, loanBrokerID),\n    { enabled: !!loanBrokerID && !!rippledSocket },\n  )\n\n  // Format amounts with correct currency\n  const principalRequested =\n    vaultAsset && principalRequestedRaw !== undefined\n      ? formatAmountWithAsset(principalRequestedRaw, vaultAsset)\n      : undefined\n\n  const loanOriginationFee =\n    vaultAsset && loanOriginationFeeRaw !== undefined\n      ? formatAmountWithAsset(loanOriginationFeeRaw, vaultAsset)\n      : undefined\n\n  const loanServiceFee =\n    vaultAsset && loanServiceFeeRaw !== undefined\n      ? formatAmountWithAsset(loanServiceFeeRaw, vaultAsset)\n      : undefined\n\n  return (\n    <div className=\"loan-set\">\n      <div className=\"loan-broker\">\n        <span className=\"label\">{t('loan_broker_id')}: </span>\n        <span className=\"case-sensitive\">\n          <b>{shortenLoanBrokerID(loanBrokerID)}</b>\n        </span>\n      </div>\n\n      {principalRequested && (\n        <div className=\"loan-request\">\n          <span className=\"label\">{t('request')}: </span>\n          <Amount value={principalRequested} />\n          {counterparty && (\n            <>\n              <span> {t('from')} </span>\n              <Account account={counterparty} />\n            </>\n          )}\n        </div>\n      )}\n\n      {(interestRatePercent ||\n        lateInterestRatePercent ||\n        overpaymentFeePercent) && (\n        <div className=\"rates-section\">\n          <span className=\"label\">Rates: </span>\n          <Trans\n            i18nKey=\"loan_rates_detail\"\n            components={{\n              InterestRate: interestRatePercent ? (\n                <span>\n                  {t('interest_rate')} {interestRatePercent}\n                  {(lateInterestRatePercent || overpaymentFeePercent) && ', '}\n                </span>\n              ) : (\n                <span />\n              ),\n              LateInterestRate: lateInterestRatePercent ? (\n                <span>\n                  {t('late_interest_rate')} {lateInterestRatePercent}\n                  {overpaymentFeePercent && ', '}\n                </span>\n              ) : (\n                <span />\n              ),\n              OverpaymentFee: overpaymentFeePercent ? (\n                <span>\n                  {t('overpayment_fee')} {overpaymentFeePercent}\n                </span>\n              ) : (\n                <span />\n              ),\n            }}\n          />\n        </div>\n      )}\n\n      {(loanOriginationFee || loanServiceFee) && (\n        <div className=\"fees-section\">\n          <span className=\"label\">Fees: </span>\n          <Trans\n            i18nKey=\"loan_fees_detail\"\n            components={{\n              LoanOriginationFee: loanOriginationFee ? (\n                <span>\n                  {t('loan_origination_fee')}{' '}\n                  <Amount value={loanOriginationFee} />\n                  {loanServiceFee && ', '}\n                </span>\n              ) : (\n                <span />\n              ),\n              LoanServiceFee: loanServiceFee ? (\n                <span>\n                  {t('loan_service_fee')} <Amount value={loanServiceFee} />\n                </span>\n              ) : (\n                <span />\n              ),\n            }}\n          />\n        </div>\n      )}\n\n      {(paymentTotal !== undefined ||\n        paymentInterval !== undefined ||\n        gracePeriod !== undefined) && (\n        <div className=\"terms-section\">\n          <span className=\"label\">{t('terms')}: </span>\n          <Trans\n            i18nKey=\"loan_terms_detail\"\n            components={{\n              PaymentTotal:\n                paymentTotal !== undefined ? (\n                  <span>\n                    {paymentTotal} {t('payment_total')}\n                    {(paymentInterval !== undefined ||\n                      gracePeriod !== undefined) &&\n                      ', '}\n                  </span>\n                ) : (\n                  <span />\n                ),\n              PaymentInterval:\n                paymentInterval !== undefined ? (\n                  <span>\n                    {t('payment_interval')}{' '}\n                    {formatDurationDetailed(paymentInterval)}\n                    {gracePeriod !== undefined && ', '}\n                  </span>\n                ) : (\n                  <span />\n                ),\n              GracePeriod:\n                gracePeriod !== undefined ? (\n                  <span>\n                    {t('grace_period')} {formatDurationDetailed(gracePeriod)}\n                  </span>\n                ) : (\n                  <span />\n                ),\n            }}\n          />\n        </div>\n      )}\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/LoanSet/index.ts",
    "content": "import {\n  TransactionAction,\n  TransactionCategory,\n  TransactionMapping,\n} from '../types'\n\nimport { Simple } from './Simple'\nimport { TableDetail } from './TableDetail'\nimport { parser } from './parser'\n\nexport const LoanSetTransaction: TransactionMapping = {\n  Simple,\n  TableDetail,\n  parser,\n  action: TransactionAction.MODIFY,\n  category: TransactionCategory.OTHER,\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/LoanSet/parser.ts",
    "content": "import { LoanSet } from './types'\nimport { convertHexToString } from '../../../../../rippled/lib/utils'\nimport { parsePercent } from '../../../NumberFormattingUtils'\nimport {\n  isValidJsonString,\n  ONE_TENTH_BASIS_POINT,\n  ONE_TENTH_BASIS_POINT_CUTOFF,\n  ONE_TENTH_BASIS_POINT_DIGITS,\n} from '../../../utils'\n\nexport function parser(tx: LoanSet) {\n  const dataFromHex = tx.Data ? convertHexToString(tx.Data) : undefined\n\n  return {\n    loanBrokerID: tx.LoanBrokerID,\n    counterparty: tx.Counterparty,\n    principalRequestedRaw: tx.PrincipalRequested,\n    paymentTotal: tx.PaymentTotal,\n    paymentInterval: tx.PaymentInterval,\n    gracePeriod: tx.GracePeriod,\n    loanOriginationFeeRaw: tx.LoanOriginationFee,\n    loanServiceFeeRaw: tx.LoanServiceFee,\n    latePaymentFeeRaw: tx.LatePaymentFee,\n    closePaymentFeeRaw: tx.ClosePaymentFee,\n    dataFromHex,\n    dataAsJson:\n      dataFromHex && isValidJsonString(dataFromHex)\n        ? JSON.parse(dataFromHex)\n        : undefined,\n    interestRatePercent:\n      tx.InterestRate !== undefined\n        ? parsePercent(\n            tx.InterestRate / ONE_TENTH_BASIS_POINT,\n            ONE_TENTH_BASIS_POINT_DIGITS,\n            ONE_TENTH_BASIS_POINT_CUTOFF,\n          )\n        : undefined,\n    lateInterestRatePercent:\n      tx.LateInterestRate !== undefined\n        ? parsePercent(\n            tx.LateInterestRate / ONE_TENTH_BASIS_POINT,\n            ONE_TENTH_BASIS_POINT_DIGITS,\n            ONE_TENTH_BASIS_POINT_CUTOFF,\n          )\n        : undefined,\n    closeInterestRatePercent:\n      tx.CloseInterestRate !== undefined\n        ? parsePercent(\n            tx.CloseInterestRate / ONE_TENTH_BASIS_POINT,\n            ONE_TENTH_BASIS_POINT_DIGITS,\n            ONE_TENTH_BASIS_POINT_CUTOFF,\n          )\n        : undefined,\n    overpaymentInterestRatePercent:\n      tx.OverpaymentInterestRate !== undefined\n        ? parsePercent(\n            tx.OverpaymentInterestRate / ONE_TENTH_BASIS_POINT,\n            ONE_TENTH_BASIS_POINT_DIGITS,\n            ONE_TENTH_BASIS_POINT_CUTOFF,\n          )\n        : undefined,\n    overpaymentFeePercent:\n      tx.OverpaymentFee !== undefined\n        ? parsePercent(\n            tx.OverpaymentFee / ONE_TENTH_BASIS_POINT,\n            ONE_TENTH_BASIS_POINT_DIGITS,\n            ONE_TENTH_BASIS_POINT_CUTOFF,\n          )\n        : undefined,\n  }\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/LoanSet/test/LoanSetSimple.test.tsx",
    "content": "import { useQuery } from 'react-query'\nimport { createSimpleRenderFactory, expectSimpleRowText } from '../../test'\nimport { Simple } from '../Simple'\nimport LoanSet from './mock_data/LoanSet.json'\n\njest.mock('react-query', () => ({\n  ...jest.requireActual('react-query'),\n  useQuery: jest.fn(),\n}))\n\nconst renderComponent = createSimpleRenderFactory(Simple)\n\ndescribe('LoanSet: Simple', () => {\n  it('renders', () => {\n    // Mock useQuery to return the vault asset information\n    ;(useQuery as jest.Mock).mockReturnValue({\n      data: { currency: 'USD', issuer: 'ra8dG1xwi5dQTJx1fRNCc8gjSAdQMX3vV7' },\n      isLoading: false,\n      error: null,\n    })\n\n    const { container, unmount } = renderComponent(LoanSet)\n\n    expectSimpleRowText(\n      container,\n      'loan-broker-id',\n      '7B3AF305C92293AF3F01088298E354E7B649F963427FA4B7F5414EF1383CB80B',\n    )\n    expectSimpleRowText(\n      container,\n      'counterparty',\n      'rH4absn9JcB8m943YRMNJpuR9HQs56hkr8',\n    )\n    expectSimpleRowText(\n      container,\n      'principal-requested',\n      '$10.00 USD.ra8dG1xwi5dQTJx1fRNCc8gjSAdQMX3vV7',\n    )\n    expectSimpleRowText(container, 'payment-total', '12')\n    expectSimpleRowText(container, 'payment-interval', '30d')\n    expectSimpleRowText(container, 'grace-period', '7d')\n    expectSimpleRowText(\n      container,\n      'loan-origination-fee',\n      '$1.00 USD.ra8dG1xwi5dQTJx1fRNCc8gjSAdQMX3vV7',\n    )\n    expectSimpleRowText(\n      container,\n      'loan-service-fee',\n      '$0.10 USD.ra8dG1xwi5dQTJx1fRNCc8gjSAdQMX3vV7',\n    )\n    expectSimpleRowText(\n      container,\n      'late-payment-fee',\n      '$0.50 USD.ra8dG1xwi5dQTJx1fRNCc8gjSAdQMX3vV7',\n    )\n    expectSimpleRowText(\n      container,\n      'close-payment-fee',\n      '$1.00 USD.ra8dG1xwi5dQTJx1fRNCc8gjSAdQMX3vV7',\n    )\n    expectSimpleRowText(container, 'overpayment-fee', '0.500%')\n    expectSimpleRowText(container, 'interest-rate', '0.500%')\n    expectSimpleRowText(container, 'late-interest-rate', '1.000%')\n    expectSimpleRowText(container, 'close-interest-rate', '0.200%')\n    expectSimpleRowText(container, 'overpayment-interest-rate', '0.003%')\n    expectSimpleRowText(container, 'data', '{meta: \"LoanSet Metadata\"}')\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/LoanSet/test/LoanSetTableDetail.test.tsx",
    "content": "import { useQuery } from 'react-query'\nimport { createTableDetailRenderFactory } from '../../test'\nimport { TableDetail } from '../TableDetail'\nimport i18n from '../../../../../../i18n/testConfigEnglish'\nimport LoanSet from './mock_data/LoanSet.json'\n\njest.mock('react-query', () => ({\n  ...jest.requireActual('react-query'),\n  useQuery: jest.fn(),\n}))\n\nconst renderComponent = createTableDetailRenderFactory(TableDetail, i18n)\n\ndescribe('LoanSetTableDetail', () => {\n  it('renders with all loan details', () => {\n    // Mock useQuery to return the vault asset information\n    ;(useQuery as jest.Mock).mockReturnValue({\n      data: { currency: 'USD', issuer: 'ra8dG1xwi5dQTJx1fRNCc8gjSAdQMX3vV7' },\n      isLoading: false,\n      error: null,\n    })\n\n    const { container, unmount } = renderComponent(LoanSet)\n\n    expect(container.querySelector('.loan-set')).toHaveTextContent(\n      'Loan Broker ID: 7B3AF3...3CB80BRequest: $10.00 USD.ra8dG1xwi5dQTJx1fRNCc8gjSAdQMX3vV7 from rH4absn9JcB8m943YRMNJpuR9HQs56hkr8Rates: Interest Rate 0.500%, Late Interest Rate 1.000%, Overpayment Fee 0.500%Fees: Loan Origination Fee $1.00 USD.ra8dG1xwi5dQTJx1fRNCc8gjSAdQMX3vV7, Loan Service Fee $0.10 USD.ra8dG1xwi5dQTJx1fRNCc8gjSAdQMX3vV7Terms: 12 Payment Total, Payment Interval 30d, Grace Period 7d',\n    )\n\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/LoanSet/test/mock_data/LoanSet.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rfS5JMvtQk6w5tZbwpSnpx15U8qrXWW8yi\",\n    \"CloseInterestRate\": 200,\n    \"ClosePaymentFee\": \"1\",\n    \"Counterparty\": \"rH4absn9JcB8m943YRMNJpuR9HQs56hkr8\",\n    \"CounterpartySignature\": {\n      \"SigningPubKey\": \"ED5063FC56A0BD4398964FFD55B3FC353C291C34B81A60BFD33FDC0B036C4D403E\",\n      \"TxnSignature\": \"E98B5560AEE64C27C680E7B9A83239DB3035958761626186455E56C841EBD88438057A0B355C9410E6E5B1A494BFE957ADD8B4873FC9D4700A3BA1041451A905\"\n    },\n    \"Data\": \"7B226D657461223A224C6F616E536574204D65746164617461227D\",\n    \"Fee\": \"2000000\",\n    \"Flags\": 0,\n    \"GracePeriod\": 604800,\n    \"InterestRate\": 500,\n    \"LastLedgerSequence\": 291187,\n    \"LateInterestRate\": 1000,\n    \"LatePaymentFee\": \"0.5\",\n    \"LoanBrokerID\": \"7B3AF305C92293AF3F01088298E354E7B649F963427FA4B7F5414EF1383CB80B\",\n    \"LoanOriginationFee\": \"1\",\n    \"LoanServiceFee\": \"0.1\",\n    \"NetworkID\": 3222,\n    \"OverpaymentFee\": 500,\n    \"OverpaymentInterestRate\": 3,\n    \"PaymentInterval\": 2592000,\n    \"PaymentTotal\": 12,\n    \"PrincipalRequested\": \"10\",\n    \"Sequence\": 291156,\n    \"SigningPubKey\": \"ED99153B1435C4D98191569187E7AF9DF00319794C1A82366E6E2F87B741BA1BBA\",\n    \"TransactionType\": \"LoanSet\",\n    \"TxnSignature\": \"8DA211444677251A1173149739C982FEC8C56D05C293E825F1B94855B805E8A485BE8F54DDD56D3AC6558AB4C001D950408BDB33F2D2044FE73FABC95463E60F\",\n    \"ctid\": \"C004716000000C96\",\n    \"date\": 1762469372000,\n    \"hash\": \"636378D09168009F4ED87A933ACA7EDD9278B2D8F14D654DD759FE8687E4BDC6\",\n    \"inLedger\": 291168,\n    \"ledger_index\": 291168,\n    \"meta\": {\n      \"AffectedNodes\": [\n        {\n          \"CreatedNode\": {\n            \"LedgerEntryType\": \"Loan\",\n            \"LedgerIndex\": \"28375E885D1F8E46502B1A6FA44B9E2EFC15244F467010082BE314AE6224CD66\",\n            \"NewFields\": {\n              \"Borrower\": \"rH4absn9JcB8m943YRMNJpuR9HQs56hkr8\",\n              \"CloseInterestRate\": 200,\n              \"ClosePaymentFee\": \"1\",\n              \"GracePeriod\": 604800,\n              \"InterestRate\": 500,\n              \"LateInterestRate\": 1000,\n              \"LatePaymentFee\": \"0.5\",\n              \"LoanBrokerID\": \"7B3AF305C92293AF3F01088298E354E7B649F963427FA4B7F5414EF1383CB80B\",\n              \"LoanOriginationFee\": \"1\",\n              \"LoanScale\": -14,\n              \"LoanSequence\": 1,\n              \"LoanServiceFee\": \"0.1\",\n              \"ManagementFeeOutstanding\": \"0.00026732450345\",\n              \"NextPaymentDueDate\": 818376581,\n              \"OverpaymentFee\": 500,\n              \"OverpaymentInterestRate\": 300,\n              \"PaymentInterval\": 2592000,\n              \"PaymentRemaining\": 12,\n              \"PeriodicPayment\": \"0.8355610375288088\",\n              \"PrincipalOutstanding\": \"10\",\n              \"StartDate\": 815784581,\n              \"TotalValueOutstanding\": \"10.02673245034571\"\n            }\n          }\n        },\n        {\n          \"ModifiedNode\": {\n            \"FinalFields\": {\n              \"Account\": \"rH4absn9JcB8m943YRMNJpuR9HQs56hkr8\",\n              \"Balance\": \"98000000\",\n              \"Flags\": 0,\n              \"OwnerCount\": 2,\n              \"Sequence\": 291154\n            },\n            \"LedgerEntryType\": \"AccountRoot\",\n            \"LedgerIndex\": \"369E58AA309D1EA2619E990C565B61C92E6A393C8AE0A043663F03D471F324A1\",\n            \"PreviousFields\": {\n              \"OwnerCount\": 1\n            },\n            \"PreviousTxnID\": \"7B7D18BDC3DFDC8C91F04D4F4A477C9E99A64F815130F57874CA7482295E4DA2\",\n            \"PreviousTxnLgrSeq\": 291159\n          }\n        },\n        {\n          \"ModifiedNode\": {\n            \"FinalFields\": {\n              \"Balance\": {\n                \"currency\": \"USD\",\n                \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n                \"value\": \"-50\"\n              },\n              \"Flags\": 2228224,\n              \"HighLimit\": {\n                \"currency\": \"USD\",\n                \"issuer\": \"r3H6XP3x3uzNW89mqSspxAVq3Pzd9hbZhG\",\n                \"value\": \"0\"\n              },\n              \"HighNode\": \"0\",\n              \"LowLimit\": {\n                \"currency\": \"USD\",\n                \"issuer\": \"ra8dG1xwi5dQTJx1fRNCc8gjSAdQMX3vV7\",\n                \"value\": \"0\"\n              },\n              \"LowNode\": \"0\"\n            },\n            \"LedgerEntryType\": \"RippleState\",\n            \"LedgerIndex\": \"48EF1C5BBC06B44C85D2C16A27D682BB5D3622B99E78EB969B73C679C26D319F\",\n            \"PreviousFields\": {\n              \"Balance\": {\n                \"currency\": \"USD\",\n                \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n                \"value\": \"-60\"\n              }\n            },\n            \"PreviousTxnID\": \"0A7F9BE7463DC3E3512F0228EC348922F6BBDE433A1C4644C60B977BDEB7ED71\",\n            \"PreviousTxnLgrSeq\": 291163\n          }\n        },\n        {\n          \"ModifiedNode\": {\n            \"FinalFields\": {\n              \"Flags\": 0,\n              \"Owner\": \"rBuMfvezoska1LReG1CBoayi8esBgqzpQ4\",\n              \"RootIndex\": \"5B97A3DDC76913125CBF3FB9458955DA93A1D8EA834D770AAFCD0651B2EB3113\"\n            },\n            \"LedgerEntryType\": \"DirectoryNode\",\n            \"LedgerIndex\": \"5B97A3DDC76913125CBF3FB9458955DA93A1D8EA834D770AAFCD0651B2EB3113\",\n            \"PreviousTxnID\": \"12FE9E6C435F338E41959A1B8C107F353CC28936387037AAA3749DCB4077B526\",\n            \"PreviousTxnLgrSeq\": 291165\n          }\n        },\n        {\n          \"ModifiedNode\": {\n            \"FinalFields\": {\n              \"Account\": \"rBuMfvezoska1LReG1CBoayi8esBgqzpQ4\",\n              \"CoverAvailable\": \"10\",\n              \"CoverRateLiquidation\": 5000,\n              \"CoverRateMinimum\": 1000,\n              \"Data\": \"7B226D657461223A224C6F616E42726F6B6572204D65746164617461227D\",\n              \"DebtMaximum\": \"1000000000000000e-4\",\n              \"DebtTotal\": \"10.02646512584226\",\n              \"Flags\": 0,\n              \"LoanSequence\": 2,\n              \"ManagementFeeRate\": 1000,\n              \"Owner\": \"rfS5JMvtQk6w5tZbwpSnpx15U8qrXWW8yi\",\n              \"OwnerCount\": 1,\n              \"OwnerNode\": \"0\",\n              \"Sequence\": 291154,\n              \"VaultID\": \"AE7952AFEE76456A1ECA877E1797E9FF842E7FD87D1F2C856B7B1EE10C9654D7\",\n              \"VaultNode\": \"0\"\n            },\n            \"LedgerEntryType\": \"LoanBroker\",\n            \"LedgerIndex\": \"7B3AF305C92293AF3F01088298E354E7B649F963427FA4B7F5414EF1383CB80B\",\n            \"PreviousFields\": {\n              \"LoanSequence\": 1\n            },\n            \"PreviousTxnID\": \"61300C6409AA68AEFFBEED82B1A446AADA8FFE11152E901C36C524D62F242B54\",\n            \"PreviousTxnLgrSeq\": 291167\n          }\n        },\n        {\n          \"ModifiedNode\": {\n            \"FinalFields\": {\n              \"Balance\": {\n                \"currency\": \"USD\",\n                \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n                \"value\": \"-31\"\n              },\n              \"Flags\": 131072,\n              \"HighLimit\": {\n                \"currency\": \"USD\",\n                \"issuer\": \"rfS5JMvtQk6w5tZbwpSnpx15U8qrXWW8yi\",\n                \"value\": \"1000000\"\n              },\n              \"HighNode\": \"0\",\n              \"LowLimit\": {\n                \"currency\": \"USD\",\n                \"issuer\": \"ra8dG1xwi5dQTJx1fRNCc8gjSAdQMX3vV7\",\n                \"value\": \"0\"\n              },\n              \"LowNode\": \"0\"\n            },\n            \"LedgerEntryType\": \"RippleState\",\n            \"LedgerIndex\": \"8AC6CD6C4F2A31F675CEDE92C5FBEB0E7D2C72A0BD9CF1FA2264984FE524F32E\",\n            \"PreviousFields\": {\n              \"Balance\": {\n                \"currency\": \"USD\",\n                \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n                \"value\": \"-30\"\n              }\n            },\n            \"PreviousTxnID\": \"61300C6409AA68AEFFBEED82B1A446AADA8FFE11152E901C36C524D62F242B54\",\n            \"PreviousTxnLgrSeq\": 291167\n          }\n        },\n        {\n          \"ModifiedNode\": {\n            \"FinalFields\": {\n              \"Flags\": 0,\n              \"Owner\": \"rH4absn9JcB8m943YRMNJpuR9HQs56hkr8\",\n              \"RootIndex\": \"9DED4EC03D7D8F22316E10700C046310C4F96C71DBA219BC679231054F426DCD\"\n            },\n            \"LedgerEntryType\": \"DirectoryNode\",\n            \"LedgerIndex\": \"9DED4EC03D7D8F22316E10700C046310C4F96C71DBA219BC679231054F426DCD\",\n            \"PreviousTxnID\": \"7B7D18BDC3DFDC8C91F04D4F4A477C9E99A64F815130F57874CA7482295E4DA2\",\n            \"PreviousTxnLgrSeq\": 291159\n          }\n        },\n        {\n          \"ModifiedNode\": {\n            \"FinalFields\": {\n              \"Account\": \"r3H6XP3x3uzNW89mqSspxAVq3Pzd9hbZhG\",\n              \"Asset\": {\n                \"currency\": \"USD\",\n                \"issuer\": \"ra8dG1xwi5dQTJx1fRNCc8gjSAdQMX3vV7\"\n              },\n              \"AssetsAvailable\": \"50\",\n              \"AssetsTotal\": \"60.02646512584226\",\n              \"Flags\": 0,\n              \"LossUnrealized\": \"0\",\n              \"Owner\": \"rfS5JMvtQk6w5tZbwpSnpx15U8qrXWW8yi\",\n              \"OwnerNode\": \"0\",\n              \"Scale\": 6,\n              \"Sequence\": 291152,\n              \"ShareMPTID\": \"000000014FF15D0B970E3DA867E1A3F714F1E7E6D67B3B79\",\n              \"WithdrawalPolicy\": 1\n            },\n            \"LedgerEntryType\": \"Vault\",\n            \"LedgerIndex\": \"AE7952AFEE76456A1ECA877E1797E9FF842E7FD87D1F2C856B7B1EE10C9654D7\",\n            \"PreviousFields\": {\n              \"AssetsAvailable\": \"60\",\n              \"AssetsTotal\": \"60\"\n            },\n            \"PreviousTxnID\": \"0A7F9BE7463DC3E3512F0228EC348922F6BBDE433A1C4644C60B977BDEB7ED71\",\n            \"PreviousTxnLgrSeq\": 291163\n          }\n        },\n        {\n          \"ModifiedNode\": {\n            \"FinalFields\": {\n              \"Account\": \"rfS5JMvtQk6w5tZbwpSnpx15U8qrXWW8yi\",\n              \"Balance\": \"88000000\",\n              \"Flags\": 0,\n              \"OwnerCount\": 5,\n              \"Sequence\": 291157\n            },\n            \"LedgerEntryType\": \"AccountRoot\",\n            \"LedgerIndex\": \"D3A16624DDD503F0F01A1C777E597D3513B30E06576BD5DB5C59FBC604BCEBFC\",\n            \"PreviousFields\": {\n              \"Balance\": \"90000000\",\n              \"Sequence\": 291156\n            },\n            \"PreviousTxnID\": \"61300C6409AA68AEFFBEED82B1A446AADA8FFE11152E901C36C524D62F242B54\",\n            \"PreviousTxnLgrSeq\": 291167\n          }\n        },\n        {\n          \"ModifiedNode\": {\n            \"FinalFields\": {\n              \"Balance\": {\n                \"currency\": \"USD\",\n                \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n                \"value\": \"-9\"\n              },\n              \"Flags\": 131072,\n              \"HighLimit\": {\n                \"currency\": \"USD\",\n                \"issuer\": \"rH4absn9JcB8m943YRMNJpuR9HQs56hkr8\",\n                \"value\": \"1000000\"\n              },\n              \"HighNode\": \"0\",\n              \"LowLimit\": {\n                \"currency\": \"USD\",\n                \"issuer\": \"ra8dG1xwi5dQTJx1fRNCc8gjSAdQMX3vV7\",\n                \"value\": \"0\"\n              },\n              \"LowNode\": \"0\"\n            },\n            \"LedgerEntryType\": \"RippleState\",\n            \"LedgerIndex\": \"D9A3D6C6DFE031982ECF8591700201F7A0F62E4D74564D3810F90B622DC31168\",\n            \"PreviousFields\": {\n              \"Balance\": {\n                \"currency\": \"USD\",\n                \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n                \"value\": \"0\"\n              }\n            },\n            \"PreviousTxnID\": \"7B7D18BDC3DFDC8C91F04D4F4A477C9E99A64F815130F57874CA7482295E4DA2\",\n            \"PreviousTxnLgrSeq\": 291159\n          }\n        }\n      ],\n      \"TransactionIndex\": 0,\n      \"TransactionResult\": \"tesSUCCESS\"\n    },\n    \"validated\": true\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"CreatedNode\": {\n          \"LedgerEntryType\": \"Loan\",\n          \"LedgerIndex\": \"28375E885D1F8E46502B1A6FA44B9E2EFC15244F467010082BE314AE6224CD66\",\n          \"NewFields\": {\n            \"Borrower\": \"rH4absn9JcB8m943YRMNJpuR9HQs56hkr8\",\n            \"CloseInterestRate\": 200,\n            \"ClosePaymentFee\": \"1\",\n            \"GracePeriod\": 604800,\n            \"InterestRate\": 500,\n            \"LateInterestRate\": 1000,\n            \"LatePaymentFee\": \"0.5\",\n            \"LoanBrokerID\": \"7B3AF305C92293AF3F01088298E354E7B649F963427FA4B7F5414EF1383CB80B\",\n            \"LoanOriginationFee\": \"1\",\n            \"LoanScale\": -14,\n            \"LoanSequence\": 1,\n            \"LoanServiceFee\": \"0.1\",\n            \"ManagementFeeOutstanding\": \"0.00026732450345\",\n            \"NextPaymentDueDate\": 818376581,\n            \"OverpaymentFee\": 500,\n            \"OverpaymentInterestRate\": 300,\n            \"PaymentInterval\": 2592000,\n            \"PaymentRemaining\": 12,\n            \"PeriodicPayment\": \"0.8355610375288088\",\n            \"PrincipalOutstanding\": \"10\",\n            \"StartDate\": 815784581,\n            \"TotalValueOutstanding\": \"10.02673245034571\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rH4absn9JcB8m943YRMNJpuR9HQs56hkr8\",\n            \"Balance\": \"98000000\",\n            \"Flags\": 0,\n            \"OwnerCount\": 2,\n            \"Sequence\": 291154\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"369E58AA309D1EA2619E990C565B61C92E6A393C8AE0A043663F03D471F324A1\",\n          \"PreviousFields\": {\n            \"OwnerCount\": 1\n          },\n          \"PreviousTxnID\": \"7B7D18BDC3DFDC8C91F04D4F4A477C9E99A64F815130F57874CA7482295E4DA2\",\n          \"PreviousTxnLgrSeq\": 291159\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-50\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"r3H6XP3x3uzNW89mqSspxAVq3Pzd9hbZhG\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"ra8dG1xwi5dQTJx1fRNCc8gjSAdQMX3vV7\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"48EF1C5BBC06B44C85D2C16A27D682BB5D3622B99E78EB969B73C679C26D319F\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-60\"\n            }\n          },\n          \"PreviousTxnID\": \"0A7F9BE7463DC3E3512F0228EC348922F6BBDE433A1C4644C60B977BDEB7ED71\",\n          \"PreviousTxnLgrSeq\": 291163\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rBuMfvezoska1LReG1CBoayi8esBgqzpQ4\",\n            \"RootIndex\": \"5B97A3DDC76913125CBF3FB9458955DA93A1D8EA834D770AAFCD0651B2EB3113\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"5B97A3DDC76913125CBF3FB9458955DA93A1D8EA834D770AAFCD0651B2EB3113\",\n          \"PreviousTxnID\": \"12FE9E6C435F338E41959A1B8C107F353CC28936387037AAA3749DCB4077B526\",\n          \"PreviousTxnLgrSeq\": 291165\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rBuMfvezoska1LReG1CBoayi8esBgqzpQ4\",\n            \"CoverAvailable\": \"10\",\n            \"CoverRateLiquidation\": 5000,\n            \"CoverRateMinimum\": 1000,\n            \"Data\": \"7B226D657461223A224C6F616E42726F6B6572204D65746164617461227D\",\n            \"DebtMaximum\": \"1000000000000000e-4\",\n            \"DebtTotal\": \"10.02646512584226\",\n            \"Flags\": 0,\n            \"LoanSequence\": 2,\n            \"ManagementFeeRate\": 1000,\n            \"Owner\": \"rfS5JMvtQk6w5tZbwpSnpx15U8qrXWW8yi\",\n            \"OwnerCount\": 1,\n            \"OwnerNode\": \"0\",\n            \"Sequence\": 291154,\n            \"VaultID\": \"AE7952AFEE76456A1ECA877E1797E9FF842E7FD87D1F2C856B7B1EE10C9654D7\",\n            \"VaultNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"LoanBroker\",\n          \"LedgerIndex\": \"7B3AF305C92293AF3F01088298E354E7B649F963427FA4B7F5414EF1383CB80B\",\n          \"PreviousFields\": {\n            \"LoanSequence\": 1\n          },\n          \"PreviousTxnID\": \"61300C6409AA68AEFFBEED82B1A446AADA8FFE11152E901C36C524D62F242B54\",\n          \"PreviousTxnLgrSeq\": 291167\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-31\"\n            },\n            \"Flags\": 131072,\n            \"HighLimit\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rfS5JMvtQk6w5tZbwpSnpx15U8qrXWW8yi\",\n              \"value\": \"1000000\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"ra8dG1xwi5dQTJx1fRNCc8gjSAdQMX3vV7\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"8AC6CD6C4F2A31F675CEDE92C5FBEB0E7D2C72A0BD9CF1FA2264984FE524F32E\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-30\"\n            }\n          },\n          \"PreviousTxnID\": \"61300C6409AA68AEFFBEED82B1A446AADA8FFE11152E901C36C524D62F242B54\",\n          \"PreviousTxnLgrSeq\": 291167\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rH4absn9JcB8m943YRMNJpuR9HQs56hkr8\",\n            \"RootIndex\": \"9DED4EC03D7D8F22316E10700C046310C4F96C71DBA219BC679231054F426DCD\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"9DED4EC03D7D8F22316E10700C046310C4F96C71DBA219BC679231054F426DCD\",\n          \"PreviousTxnID\": \"7B7D18BDC3DFDC8C91F04D4F4A477C9E99A64F815130F57874CA7482295E4DA2\",\n          \"PreviousTxnLgrSeq\": 291159\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r3H6XP3x3uzNW89mqSspxAVq3Pzd9hbZhG\",\n            \"Asset\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"ra8dG1xwi5dQTJx1fRNCc8gjSAdQMX3vV7\"\n            },\n            \"AssetsAvailable\": \"50\",\n            \"AssetsTotal\": \"60.02646512584226\",\n            \"Flags\": 0,\n            \"LossUnrealized\": \"0\",\n            \"Owner\": \"rfS5JMvtQk6w5tZbwpSnpx15U8qrXWW8yi\",\n            \"OwnerNode\": \"0\",\n            \"Scale\": 6,\n            \"Sequence\": 291152,\n            \"ShareMPTID\": \"000000014FF15D0B970E3DA867E1A3F714F1E7E6D67B3B79\",\n            \"WithdrawalPolicy\": 1\n          },\n          \"LedgerEntryType\": \"Vault\",\n          \"LedgerIndex\": \"AE7952AFEE76456A1ECA877E1797E9FF842E7FD87D1F2C856B7B1EE10C9654D7\",\n          \"PreviousFields\": {\n            \"AssetsAvailable\": \"60\",\n            \"AssetsTotal\": \"60\"\n          },\n          \"PreviousTxnID\": \"0A7F9BE7463DC3E3512F0228EC348922F6BBDE433A1C4644C60B977BDEB7ED71\",\n          \"PreviousTxnLgrSeq\": 291163\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rfS5JMvtQk6w5tZbwpSnpx15U8qrXWW8yi\",\n            \"Balance\": \"88000000\",\n            \"Flags\": 0,\n            \"OwnerCount\": 5,\n            \"Sequence\": 291157\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"D3A16624DDD503F0F01A1C777E597D3513B30E06576BD5DB5C59FBC604BCEBFC\",\n          \"PreviousFields\": {\n            \"Balance\": \"90000000\",\n            \"Sequence\": 291156\n          },\n          \"PreviousTxnID\": \"61300C6409AA68AEFFBEED82B1A446AADA8FFE11152E901C36C524D62F242B54\",\n          \"PreviousTxnLgrSeq\": 291167\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-9\"\n            },\n            \"Flags\": 131072,\n            \"HighLimit\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rH4absn9JcB8m943YRMNJpuR9HQs56hkr8\",\n              \"value\": \"1000000\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"ra8dG1xwi5dQTJx1fRNCc8gjSAdQMX3vV7\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"D9A3D6C6DFE031982ECF8591700201F7A0F62E4D74564D3810F90B622DC31168\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            }\n          },\n          \"PreviousTxnID\": \"7B7D18BDC3DFDC8C91F04D4F4A477C9E99A64F815130F57874CA7482295E4DA2\",\n          \"PreviousTxnLgrSeq\": 291159\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tesSUCCESS\"\n  },\n  \"hash\": \"636378D09168009F4ED87A933ACA7EDD9278B2D8F14D654DD759FE8687E4BDC6\",\n  \"ledger_index\": 291168,\n  \"date\": 1762469372000\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/LoanSet/types.ts",
    "content": "import { TransactionCommonFields } from '../types'\n\n// TODO: remove when lending protocol (XLS-66) is supported on xrpl.js\nexport interface LoanSet extends TransactionCommonFields {\n  LoanBrokerID: string\n  Counterparty?: string\n  CounterpartySignature: object\n  LoanOriginationFee?: string | number\n  LoanServiceFee?: string | number\n  LatePaymentFee?: string | number\n  ClosePaymentFee?: string | number\n  OverpaymentFee?: number\n  InterestRate?: number\n  LateInterestRate?: number\n  CloseInterestRate?: number\n  OverpaymentInterestRate?: number\n  PrincipalRequested: string | number\n  PaymentTotal?: number\n  PaymentInterval?: number\n  GracePeriod?: number\n  Data?: string\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/MPTokenAuthorize/Simple.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport type { MPTokenAuthorize } from 'xrpl'\nimport { SimpleRow } from '../SimpleRow'\nimport { TransactionSimpleComponent, TransactionSimpleProps } from '../types'\nimport { Account } from '../../Account'\nimport { MPTokenLink } from '../../MPTokenLink'\n\nexport const Simple: TransactionSimpleComponent = ({\n  data,\n}: TransactionSimpleProps<MPTokenAuthorize>) => {\n  const { MPTokenIssuanceID, Holder } = data.instructions\n  const { t } = useTranslation()\n\n  return (\n    <>\n      <SimpleRow label={t('mpt_issuance_id')} data-testid=\"mpt-issuance-id\">\n        <MPTokenLink tokenID={MPTokenIssuanceID} />\n      </SimpleRow>\n      {Holder && (\n        <SimpleRow label={t('mpt_holder')} data-testid=\"mpt-holder\">\n          <Account account={Holder} />\n        </SimpleRow>\n      )}\n    </>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/MPTokenAuthorize/index.ts",
    "content": "import {\n  TransactionAction,\n  TransactionCategory,\n  TransactionMapping,\n} from '../types'\n\nimport { Simple } from './Simple'\n\nexport const MPTokenAuthorizeTransaction: TransactionMapping = {\n  Simple,\n  action: TransactionAction.MODIFY,\n  category: TransactionCategory.MPT,\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/MPTokenAuthorize/test/MPTokenAuthorizeSimple.test.jsx",
    "content": "import { createSimpleRenderFactory } from '../../test/createWrapperFactory'\nimport { Simple } from '../Simple'\nimport { expectSimpleRowText, expectSimpleRowNotToExist } from '../../test'\nimport transactionSuccess from './mock_data/MPTokenAuthorize.json'\nimport transactionFail from './mock_data/MPTokenAuthorize_Fail.json'\nimport transactionWithHolder from './mock_data/MPTokenAuthorize_WithHolder.json'\nimport transactionWithHolderFail from './mock_data/MPTokenAuthorize_WithHolderFail.json'\n\nconst renderComponent = createSimpleRenderFactory(Simple)\n\ndescribe('MPTokenAuthorize', () => {\n  it('handles MPTokenAuthorize w/o holder simple view ', () => {\n    const { container, unmount } = renderComponent(transactionSuccess)\n\n    expectSimpleRowText(\n      container,\n      'mpt-issuance-id',\n      '000005F398B624EBD06822198649C920C8B20ADB8EBE745E',\n    )\n    expectSimpleRowNotToExist(container, 'mpt-holder')\n    unmount()\n  })\n\n  it('handles MPTokenAuthorize view w/ holder simple view ', () => {\n    const { container, unmount } = renderComponent(transactionWithHolder)\n\n    expectSimpleRowText(\n      container,\n      'mpt-issuance-id',\n      '0000130B63FC523E33FDF4D1318D8D484B0D1111098CFD0B',\n    )\n    expectSimpleRowText(\n      container,\n      'mpt-holder',\n      'rK3bB9myvWoMaLbLnpksGx2Zz58BL225am',\n    )\n    unmount()\n  })\n\n  it('handles failed MPTokenAuthorize view w/ holder simple view ', () => {\n    const { container, unmount } = renderComponent(transactionWithHolderFail)\n\n    expectSimpleRowText(\n      container,\n      'mpt-issuance-id',\n      '00000F76D46440EE21F74E5B2398315BC1CFEB9A7EB48A14',\n    )\n    expectSimpleRowText(\n      container,\n      'mpt-holder',\n      'rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh',\n    )\n    unmount()\n  })\n\n  it('handles failed MPTokenAuthorize w/o holder simple view ', () => {\n    const { container, unmount } = renderComponent(transactionFail)\n    expectSimpleRowText(\n      container,\n      'mpt-issuance-id',\n      '0000098410531B842DEECCF4ABB1268C931EB71D9F6A1B64',\n    )\n    expectSimpleRowNotToExist(container, 'mpt-holder')\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/MPTokenAuthorize/test/mock_data/MPTokenAuthorize.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rnLz9TWQAvaLpdyrtb1WbMgp7jZdNQ47Ny\",\n    \"Fee\": \"10\",\n    \"Flags\": 2147483648,\n    \"MPTokenIssuanceID\": \"000005F398B624EBD06822198649C920C8B20ADB8EBE745E\",\n    \"Sequence\": 1524,\n    \"SigningPubKey\": \"ED97BAFB2D380AF67DA2C1968C3A1DC38797E9BA0653CE620F6BC97FFD66925EBB\",\n    \"TransactionType\": \"MPTokenAuthorize\",\n    \"TxnSignature\": \"28879892AF0D465063993BD1DDCA147C7CA0AB9C8429DAB3A0030AA4AC57AA80F725F295622913C07E4CAFB3160DEF7E8D0209429390B0FBD78F96B28E700A07\",\n    \"ctid\": \"C00005F600000000\",\n    \"date\": 1711397033000,\n    \"hash\": \"undefined\",\n    \"inLedger\": \"undefined\",\n    \"ledger_index\": \"undefined\",\n    \"meta\": \"undefined\",\n    \"validated\": \"undefined\",\n    \"metaData\": \"undefined\",\n    \"status\": \"undefined\"\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rnLz9TWQAvaLpdyrtb1WbMgp7jZdNQ47Ny\",\n            \"Balance\": \"99999990\",\n            \"Flags\": 0,\n            \"OwnerCount\": 1,\n            \"Sequence\": 1525\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"424AAE60FE8A4B7EF77DA492F9561AAFA1D09DB56BE5804B055235BCD662C9FE\",\n          \"PreviousFields\": {\n            \"Balance\": \"100000000\",\n            \"OwnerCount\": 0,\n            \"Sequence\": 1524\n          },\n          \"PreviousTxnID\": \"B6301327D79A93DC211043ABF66A60DC9C70BD2962FC42E0EAD0A829680ABAE8\",\n          \"PreviousTxnLgrSeq\": 1524\n        }\n      },\n      {\n        \"CreatedNode\": {\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"65BCF554A41D30521B876D012D3DC167F9E886E02D88231E9DEBD2501A4A7BB5\",\n          \"NewFields\": {\n            \"Owner\": \"rnLz9TWQAvaLpdyrtb1WbMgp7jZdNQ47Ny\",\n            \"RootIndex\": \"65BCF554A41D30521B876D012D3DC167F9E886E02D88231E9DEBD2501A4A7BB5\"\n          }\n        }\n      },\n      {\n        \"CreatedNode\": {\n          \"LedgerEntryType\": \"MPToken\",\n          \"LedgerIndex\": \"91D261494BB3D64D5D3D12BD480EB58C5E2B21F3222B12FE442BC73276C27266\",\n          \"NewFields\": {\n            \"Account\": \"rnLz9TWQAvaLpdyrtb1WbMgp7jZdNQ47Ny\",\n            \"MPTokenIssuanceID\": \"000005F398B624EBD06822198649C920C8B20ADB8EBE745E\"\n          }\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tesSUCCESS\"\n  },\n  \"hash\": \"9592E76A725CF4A5A441024EE80596DFE8809D1AD1EC28A8D9DB2CEC2CB81EDC\",\n  \"ledger_index\": 1526,\n  \"date\": 1711397033000\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/MPTokenAuthorize/test/mock_data/MPTokenAuthorize_Fail.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rJtok1j4okh4HkKxC3ArAvZbMD1vcDSteo\",\n    \"Fee\": \"10\",\n    \"Flags\": 2147483648,\n    \"MPTokenIssuanceID\": \"0000098410531B842DEECCF4ABB1268C931EB71D9F6A1B64\",\n    \"Sequence\": 2438,\n    \"SigningPubKey\": \"EDE493F0B7846A102A5C6EF4FDD9E95D1A84B0BEB99DED06C4436C0D61E5FA0B67\",\n    \"TransactionType\": \"MPTokenAuthorize\",\n    \"TxnSignature\": \"C903E4BA935BA27424D05CA230385FBA392CB4B48C136E37EF5DABE07814A2A8FA0AAEE34FCAB994D1AED7A663EB4CA121FA07B83E3C5A74289ABA258AA45F00\",\n    \"ctid\": \"C000098800000000\",\n    \"date\": 1711398512000,\n    \"hash\": \"undefined\",\n    \"inLedger\": \"undefined\",\n    \"ledger_index\": \"undefined\",\n    \"meta\": \"undefined\",\n    \"validated\": \"undefined\",\n    \"metaData\": \"undefined\",\n    \"status\": \"undefined\"\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rJtok1j4okh4HkKxC3ArAvZbMD1vcDSteo\",\n            \"Balance\": \"99999980\",\n            \"Flags\": 0,\n            \"OwnerCount\": 1,\n            \"Sequence\": 2439\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"FE496E6B5CBE4778460846E5B93648B41E15463E691311EA4CD7E578561CA20E\",\n          \"PreviousFields\": {\n            \"Balance\": \"99999990\",\n            \"Sequence\": 2438\n          },\n          \"PreviousTxnID\": \"26BB8D3B11AA0C967470DBA5D6B09A10608B4D1DADE0408668A45C010F4B8DDC\",\n          \"PreviousTxnLgrSeq\": 2439\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tecMPTOKEN_EXISTS\"\n  },\n  \"hash\": \"7B785C2D172D8FAE35DBBA66868D147747F32B5D6AA41F62D698E872643CE2B6\",\n  \"ledger_index\": 2440,\n  \"date\": 1711398512000\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/MPTokenAuthorize/test/mock_data/MPTokenAuthorize_WithHolder.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rwfgw2dWqUAexB46z5QRq2dJcgTK9piw5w\",\n    \"Fee\": \"10\",\n    \"Flags\": 2147483648,\n    \"Holder\": \"rK3bB9myvWoMaLbLnpksGx2Zz58BL225am\",\n    \"MPTokenIssuanceID\": \"0000130B63FC523E33FDF4D1318D8D484B0D1111098CFD0B\",\n    \"Sequence\": 4876,\n    \"SigningPubKey\": \"ED936E848B8E37D20991C2E1C5C76ABAEC0625D693CEB85BA495B58E16712DA627\",\n    \"TransactionType\": \"MPTokenAuthorize\",\n    \"TxnSignature\": \"3F31AD3682B9261975E27895DFCB9F373C33C174A076445C33AE13A6713D7FC8C8305A4D05C4918979C9EAD0230A61CE9998B71BEE21653D6BFCCC65F599100E\",\n    \"ctid\": \"C000130F00000000\",\n    \"date\": 1711400951000,\n    \"hash\": \"undefined\",\n    \"inLedger\": \"undefined\",\n    \"ledger_index\": \"undefined\",\n    \"meta\": \"undefined\",\n    \"validated\": \"undefined\",\n    \"metaData\": \"undefined\",\n    \"status\": \"undefined\"\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rwfgw2dWqUAexB46z5QRq2dJcgTK9piw5w\",\n            \"Balance\": \"99999980\",\n            \"Flags\": 0,\n            \"OwnerCount\": 1,\n            \"Sequence\": 4877\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"C688ECD4065B909634121581E792188424F29B48C062F1D1D4FED180DEAF3A23\",\n          \"PreviousFields\": {\n            \"Balance\": \"99999990\",\n            \"Sequence\": 4876\n          },\n          \"PreviousTxnID\": \"D12E5ED52F495449A537DB9293174209CC132CDCD4EFBBACCEB7F8E8FC582BBC\",\n          \"PreviousTxnLgrSeq\": 4877\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rK3bB9myvWoMaLbLnpksGx2Zz58BL225am\",\n            \"Flags\": 2,\n            \"MPTokenIssuanceID\": \"0000130B63FC523E33FDF4D1318D8D484B0D1111098CFD0B\",\n            \"OwnerNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"MPToken\",\n          \"LedgerIndex\": \"E6BC3F027146E5A2A50C01C37E7C5320E608C9D1D5BE763F32748865DB6EF3DE\",\n          \"PreviousFields\": {\n            \"Flags\": 0\n          },\n          \"PreviousTxnID\": \"FA5F2B8CE18C33D09E0243A2D20319AB9AF9D6CF5F1C2568B0CC4764DEC31F7A\",\n          \"PreviousTxnLgrSeq\": 4878\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tesSUCCESS\"\n  },\n  \"hash\": \"5F92E78273BCF8A71E129F2CC9B8B0D5611E79D4CF81B530BF7B69892A579060\",\n  \"ledger_index\": 4879,\n  \"date\": 1711400951000\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/MPTokenAuthorize/test/mock_data/MPTokenAuthorize_WithHolderFail.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rL4pMQAa3V7s9QNw1wEk2znnhjbfYo4GQC\",\n    \"Fee\": \"10\",\n    \"Flags\": 2147483648,\n    \"Holder\": \"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh\",\n    \"MPTokenIssuanceID\": \"00000F76D46440EE21F74E5B2398315BC1CFEB9A7EB48A14\",\n    \"Sequence\": 3959,\n    \"SigningPubKey\": \"EDF7A3D93CE3AA46168649283C20C2D4FC36642FDD87449F1CCF068638BF17B10E\",\n    \"TransactionType\": \"MPTokenAuthorize\",\n    \"TxnSignature\": \"2795F1DC9C54493ADE475800A67FD5B3BC7B65F4E343CEEA0950E994F0FC10D0DAED13B4B0FD345E92BFD2B4F42A09A44906D5B2CD1D8FD7A4B3D28983F51806\",\n    \"ctid\": \"C0000F7900000000\",\n    \"date\": 1711400033000,\n    \"hash\": \"undefined\",\n    \"inLedger\": \"undefined\",\n    \"ledger_index\": \"undefined\",\n    \"meta\": \"undefined\",\n    \"validated\": \"undefined\",\n    \"metaData\": \"undefined\",\n    \"status\": \"undefined\"\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rL4pMQAa3V7s9QNw1wEk2znnhjbfYo4GQC\",\n            \"Balance\": \"99999980\",\n            \"Flags\": 0,\n            \"OwnerCount\": 1,\n            \"Sequence\": 3960\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"00BFE84169F6CAA5D03348856B57D47788B6856ABA9FA6EC7A16E6DA1B99B9D7\",\n          \"PreviousFields\": {\n            \"Balance\": \"99999990\",\n            \"Sequence\": 3959\n          },\n          \"PreviousTxnID\": \"E07D68B9728EE8954C66219FF713782933612A7D5EF44B50F5485557629DFE3D\",\n          \"PreviousTxnLgrSeq\": 3960\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tecNO_AUTH\"\n  },\n  \"hash\": \"95AE2E382D6CFBFCECC012DDC52458E753FB9208A5040D2F441B5DE5BEA535CF\",\n  \"ledger_index\": 3961,\n  \"date\": 1711400033000\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/MPTokenIssuanceCreate/Simple.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { SimpleRow } from '../SimpleRow'\nimport { TransactionSimpleComponent, TransactionSimpleProps } from '../types'\nimport { MPTokenIssuanceCreateInstructions } from './types'\nimport { useLanguage } from '../../../hooks'\nimport { isValidJsonString, localizeNumber } from '../../../utils'\nimport { MPTokenLink } from '../../MPTokenLink'\nimport { JsonView } from '../../JsonView'\nimport './styles.scss'\n\nexport const Simple: TransactionSimpleComponent = ({\n  data,\n}: TransactionSimpleProps<MPTokenIssuanceCreateInstructions>) => {\n  const { issuanceID, metadata, assetScale, transferFee, maxAmount } =\n    data.instructions\n  const { t } = useTranslation()\n  const language = useLanguage()\n  const formattedFee =\n    transferFee &&\n    `${localizeNumber((transferFee / 1000).toPrecision(5), language, {\n      minimumFractionDigits: 3,\n    })}%`\n\n  return (\n    <>\n      {issuanceID && (\n        <SimpleRow label={t('mpt_issuance_id')} data-testid=\"mpt-issuance-id\">\n          <MPTokenLink tokenID={issuanceID} />\n        </SimpleRow>\n      )}\n      {assetScale && (\n        <SimpleRow\n          label={t('asset_scale')}\n          className=\"dt\"\n          data-testid=\"mpt-asset-scale\"\n        >\n          {assetScale}\n        </SimpleRow>\n      )}\n      {transferFee && (\n        <SimpleRow label={t('transfer_fee')} data-testid=\"mpt-fee\">\n          {formattedFee}\n        </SimpleRow>\n      )}\n      {maxAmount && (\n        <SimpleRow\n          label={t('max_amount')}\n          className=\"dt\"\n          data-testid=\"mpt-max-amount\"\n        >\n          {maxAmount}\n        </SimpleRow>\n      )}\n      {metadata && (\n        <SimpleRow\n          label={t('metadata')}\n          className=\"dt\"\n          data-testid=\"mpt-metadata\"\n        >\n          {isValidJsonString(metadata) ? (\n            <JsonView data={JSON.parse(metadata)} />\n          ) : (\n            metadata\n          )}\n        </SimpleRow>\n      )}\n    </>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/MPTokenIssuanceCreate/index.ts",
    "content": "import {\n  TransactionAction,\n  TransactionCategory,\n  TransactionMapping,\n} from '../types'\n\nimport { Simple } from './Simple'\nimport { parser } from './parser'\n\nexport const MPTokenIssuanceCreateTransaction: TransactionMapping = {\n  Simple,\n  action: TransactionAction.CREATE,\n  category: TransactionCategory.MPT,\n  parser,\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/MPTokenIssuanceCreate/parser.ts",
    "content": "import type { MPTokenIssuanceCreate } from 'xrpl'\nimport { MPTokenIssuanceCreateInstructions } from './types'\nimport { TransactionParser } from '../types'\nimport { convertHexToString } from '../../../../../rippled/lib/utils'\n\nexport const parser: TransactionParser<\n  MPTokenIssuanceCreate,\n  MPTokenIssuanceCreateInstructions\n> = (tx, meta) => ({\n  issuanceID: meta.mpt_issuance_id,\n  metadata: tx.MPTokenMetadata\n    ? convertHexToString(tx.MPTokenMetadata)\n    : undefined,\n  transferFee: tx.TransferFee,\n  assetScale: tx.AssetScale,\n  maxAmount: tx.MaximumAmount\n    ? BigInt(tx.MaximumAmount).toString(10)\n    : undefined,\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/MPTokenIssuanceCreate/styles.scss",
    "content": ".jv-indent {\n  border-left: none;\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/MPTokenIssuanceCreate/test/MPTokenIssuanceCreateSimple.test.jsx",
    "content": "import { createSimpleRenderFactory } from '../../test/createWrapperFactory'\nimport { Simple } from '../Simple'\nimport { expectSimpleRowText } from '../../test'\nimport transactionSuccess from './mock_data/MPTokenIssuanceCreate.json'\n\nconst renderComponent = createSimpleRenderFactory(Simple)\n\ndescribe('MPTokenIssuanceCreate', () => {\n  it('handles MPTokenIssuanceCreate simple view ', () => {\n    const { container, unmount } = renderComponent(transactionSuccess)\n\n    expectSimpleRowText(\n      container,\n      'mpt-issuance-id',\n      '0000157844C3F3B57A8B579FEE1033CC8E8498729D063617',\n    )\n    expectSimpleRowText(container, 'mpt-asset-scale', '2')\n    expectSimpleRowText(container, 'mpt-max-amount', '9223372036854775807')\n    expectSimpleRowText(\n      container,\n      'mpt-metadata',\n      'https://ipfs.io/ipfs/QmZnjmB9Tk4xaA9E679ytrPXda3beWMLUnMB5RFj1eStLp',\n    )\n    expectSimpleRowText(container, 'mpt-fee', '0.010%')\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/MPTokenIssuanceCreate/test/mock_data/MPTokenIssuanceCreate.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rfGb6p2kWy3zQweWnYNxSFYoHeymcx7mhg\",\n    \"AssetScale\": 2,\n    \"Fee\": \"10\",\n    \"Flags\": 34,\n    \"MPTokenMetadata\": \"68747470733A2F2F697066732E696F2F697066732F516D5A6E6A6D4239546B34786141394536373979747250586461336265574D4C556E4D423552466A316553744C70\",\n    \"MaximumAmount\": \"9223372036854775807\",\n    \"Sequence\": 5496,\n    \"SigningPubKey\": \"EDAD408FAEE57EB4A347E6FE395B834DD47C6531C3C37B09ACC35528161CAD4B0E\",\n    \"TransactionType\": \"MPTokenIssuanceCreate\",\n    \"TransferFee\": 10,\n    \"TxnSignature\": \"F7AA8083EE7D7EFD10E11FF5A12B73D2D45A80094AEED4B41FBF2A90C9E03E5E4D162E91FA1EC156BF94E770E70E7633DF09665A5C2D5408178FC376BFC9B100\",\n    \"ctid\": \"C000157A00000000\",\n    \"date\": 1710949602000,\n    \"hash\": \"undefined\",\n    \"inLedger\": \"undefined\",\n    \"ledger_index\": \"undefined\",\n    \"meta\": \"undefined\",\n    \"validated\": \"undefined\",\n    \"metaData\": \"undefined\",\n    \"status\": \"undefined\"\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rfGb6p2kWy3zQweWnYNxSFYoHeymcx7mhg\",\n            \"Balance\": \"99999990\",\n            \"Flags\": 0,\n            \"OwnerCount\": 1,\n            \"Sequence\": 5497\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"1996F74D57092C1AC261F55CB16A45A63C785993691869A431D72A5BF8AF47A0\",\n          \"PreviousFields\": {\n            \"Balance\": \"100000000\",\n            \"OwnerCount\": 0,\n            \"Sequence\": 5496\n          },\n          \"PreviousTxnID\": \"531254FC0F1599CCAF9ABCDBE0854B6BFBBA225ADD7CA341D2897CBDC3E78E5E\",\n          \"PreviousTxnLgrSeq\": 5496\n        }\n      },\n      {\n        \"CreatedNode\": {\n          \"LedgerEntryType\": \"MPTokenIssuance\",\n          \"LedgerIndex\": \"265CEA78D8246B8B51D5CCC20AF4DB95569DE09E53115C888B176A3D1D05048A\",\n          \"NewFields\": {\n            \"AssetScale\": 2,\n            \"Flags\": 34,\n            \"Issuer\": \"rfGb6p2kWy3zQweWnYNxSFYoHeymcx7mhg\",\n            \"MPTokenMetadata\": \"68747470733A2F2F697066732E696F2F697066732F516D5A6E6A6D4239546B34786141394536373979747250586461336265574D4C556E4D423552466A316553744C70\",\n            \"MaximumAmount\": \"9223372036854775807\",\n            \"Sequence\": 5496,\n            \"TransferFee\": 10\n          }\n        }\n      },\n      {\n        \"CreatedNode\": {\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"3A6F809498F6C0E3664BD8451BBAE5F972E45AF17537354D1C28F3A00B35BDFE\",\n          \"NewFields\": {\n            \"Owner\": \"rfGb6p2kWy3zQweWnYNxSFYoHeymcx7mhg\",\n            \"RootIndex\": \"3A6F809498F6C0E3664BD8451BBAE5F972E45AF17537354D1C28F3A00B35BDFE\"\n          }\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tesSUCCESS\",\n    \"mpt_issuance_id\": \"0000157844C3F3B57A8B579FEE1033CC8E8498729D063617\"\n  },\n  \"hash\": \"9686DA1322D2D8F9CD97C5848A8E3CADB9D3F73154DA59BB3A3CACC4CA43671C\",\n  \"ledger_index\": 5498,\n  \"date\": 1710949602000\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/MPTokenIssuanceCreate/types.ts",
    "content": "export interface MPTokenIssuanceCreateInstructions {\n  issuanceID?: string\n  metadata?: string\n  transferFee?: number\n  assetScale?: number\n  maxAmount?: string\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/MPTokenIssuanceDestroy/Simple.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport type { MPTokenIssuanceDestroy } from 'xrpl'\nimport { SimpleRow } from '../SimpleRow'\nimport { TransactionSimpleComponent, TransactionSimpleProps } from '../types'\nimport { MPTokenLink } from '../../MPTokenLink'\n\nexport const Simple: TransactionSimpleComponent = ({\n  data,\n}: TransactionSimpleProps<MPTokenIssuanceDestroy>) => {\n  const { MPTokenIssuanceID } = data.instructions\n  const { t } = useTranslation()\n\n  return (\n    <SimpleRow label={t('mpt_issuance_id')} data-testid=\"mpt-issuance-id\">\n      <MPTokenLink tokenID={MPTokenIssuanceID} />\n    </SimpleRow>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/MPTokenIssuanceDestroy/index.ts",
    "content": "import {\n  TransactionAction,\n  TransactionCategory,\n  TransactionMapping,\n} from '../types'\n\nimport { Simple } from './Simple'\n\nexport const MPTokenIssuanceDestroyTransaction: TransactionMapping = {\n  Simple,\n  action: TransactionAction.CANCEL,\n  category: TransactionCategory.MPT,\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/MPTokenIssuanceDestroy/test/MPTokenIssuanceDestroySimple.test.jsx",
    "content": "import { createSimpleRenderFactory } from '../../test/createWrapperFactory'\nimport { Simple } from '../Simple'\nimport { expectSimpleRowText } from '../../test'\nimport transactionSuccess from './mock_data/MPTokenIssuanceDestroy.json'\nimport transactionFail from './mock_data/MPTokenIssuanceDestroy_Fail.json'\n\nconst renderComponent = createSimpleRenderFactory(Simple)\n\ndescribe('MPTokenIssuanceDestroy', () => {\n  it('handles MPTokenIssuanceDestroy simple view ', () => {\n    const { container, unmount } = renderComponent(transactionSuccess)\n    expectSimpleRowText(\n      container,\n      'mpt-issuance-id',\n      '0000071E15A457415B9A921957CA1958F0E3B8A049BE8627',\n    )\n    unmount()\n  })\n\n  it('handles failed MPTokenIssuanceDestroy simple view ', () => {\n    const { container, unmount } = renderComponent(transactionFail)\n    expectSimpleRowText(\n      container,\n      'mpt-issuance-id',\n      '0000097E2ACB52C693EABBB156034140B2ED5E9522C4ACF4',\n    )\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/MPTokenIssuanceDestroy/test/mock_data/MPTokenIssuanceDestroy.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rpyShdZBMVC9p6tesouh97JEEWZgYGYTW1\",\n    \"Fee\": \"10\",\n    \"Flags\": 2147483648,\n    \"MPTokenIssuanceID\": \"0000071E15A457415B9A921957CA1958F0E3B8A049BE8627\",\n    \"Sequence\": 1823,\n    \"SigningPubKey\": \"ED31ED6E308C928DA72935A03526C3C5422353EB686908D3ADAD9D573921DBDFB5\",\n    \"TransactionType\": \"MPTokenIssuanceDestroy\",\n    \"TxnSignature\": \"432417F93E86710B50619E4B9EAA43A7F636546A70D4A854E619AF01108A400519A4022B7BABE4807263CDD7EB43217B9ABB8F9745B988981B1A556D11C83200\",\n    \"ctid\": \"C000072100000000\",\n    \"date\": 1710968140000,\n    \"hash\": \"undefined\",\n    \"inLedger\": \"undefined\",\n    \"ledger_index\": \"undefined\",\n    \"meta\": \"undefined\",\n    \"validated\": \"undefined\",\n    \"metaData\": \"undefined\",\n    \"status\": \"undefined\"\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rpyShdZBMVC9p6tesouh97JEEWZgYGYTW1\",\n            \"Balance\": \"99999980\",\n            \"Flags\": 0,\n            \"OwnerCount\": 0,\n            \"Sequence\": 1824\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"27F062565B9B9226F10C5AA25E1AD5C3E70A6A93FF2AB4851614A2C43D083850\",\n          \"PreviousFields\": {\n            \"Balance\": \"99999990\",\n            \"OwnerCount\": 1,\n            \"Sequence\": 1823\n          },\n          \"PreviousTxnID\": \"E6DFD28EDD7213F43B7D0DB1296D09460458709583BEEA29F17C2F63B4DA9FC4\",\n          \"PreviousTxnLgrSeq\": 1824\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Issuer\": \"rpyShdZBMVC9p6tesouh97JEEWZgYGYTW1\",\n            \"OutstandingAmount\": \"0\",\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"E6DFD28EDD7213F43B7D0DB1296D09460458709583BEEA29F17C2F63B4DA9FC4\",\n            \"PreviousTxnLgrSeq\": 1824,\n            \"Sequence\": 1822\n          },\n          \"LedgerEntryType\": \"MPTokenIssuance\",\n          \"LedgerIndex\": \"9C882DA4DF7B92FC968A0ADCA8BAFB7842264F98A5E147348C6E6077EAB24AA8\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rpyShdZBMVC9p6tesouh97JEEWZgYGYTW1\",\n            \"RootIndex\": \"B8124B2AD6A85560C73E1748E2C8B0E5C0871F4439F10B042DD7E4017D864287\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"B8124B2AD6A85560C73E1748E2C8B0E5C0871F4439F10B042DD7E4017D864287\"\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tesSUCCESS\"\n  },\n  \"hash\": \"9EB556D18BFB67F31C8716C7F3CBBB070E1E7B120DEDDC423D25DFAD850BD93A\",\n  \"ledger_index\": 1825,\n  \"date\": 1710968140000\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/MPTokenIssuanceDestroy/test/mock_data/MPTokenIssuanceDestroy_Fail.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rJbNXmT1uhmbghSQAFcgxAAN9yCRCu9y7g\",\n    \"Fee\": \"10\",\n    \"Flags\": 2147483648,\n    \"MPTokenIssuanceID\": \"0000097E2ACB52C693EABBB156034140B2ED5E9522C4ACF4\",\n    \"Sequence\": 2431,\n    \"SigningPubKey\": \"EDF5A4F08EDD12BB89658B8DE56558600342AD92D42FEDFAD682F4DAD9647EF5AA\",\n    \"TransactionType\": \"MPTokenIssuanceDestroy\",\n    \"TxnSignature\": \"C3B5F7D9A21A5EF85663058790DE7F458EA903C0010F3C2E1FEA45647052C2D85231ED4C17EB324A97AC2D4DE9A71F46D277B8A0A7AFB42D30A3EDA42E8E4106\",\n    \"ctid\": \"C000098100000000\",\n    \"date\": 1710970247000,\n    \"hash\": \"undefined\",\n    \"inLedger\": \"undefined\",\n    \"ledger_index\": \"undefined\",\n    \"meta\": \"undefined\",\n    \"validated\": \"undefined\",\n    \"metaData\": \"undefined\",\n    \"status\": \"undefined\"\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rJbNXmT1uhmbghSQAFcgxAAN9yCRCu9y7g\",\n            \"Balance\": \"99999990\",\n            \"Flags\": 0,\n            \"OwnerCount\": 0,\n            \"Sequence\": 2432\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"BA6DF5388FF6BF026D3F8C91893534890F87309A32D30749CC70BCB1C6F1BEF6\",\n          \"PreviousFields\": {\n            \"Balance\": \"100000000\",\n            \"Sequence\": 2431\n          },\n          \"PreviousTxnID\": \"07F74CD4BD3E54410E436F9895BC2EC98D35E05F7584CB95D6660AF0411E9283\",\n          \"PreviousTxnLgrSeq\": 2431\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tecNO_PERMISSION\"\n  },\n  \"hash\": \"2F31C86C343B2D2DB3D8B01BDE84E5BFA0BCB86321365A16D93DF806B79B16FD\",\n  \"ledger_index\": 2433,\n  \"date\": 1710970247000\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/MPTokenIssuanceSet/Simple.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport type { MPTokenIssuanceSet } from 'xrpl'\nimport { SimpleRow } from '../SimpleRow'\nimport { TransactionSimpleComponent, TransactionSimpleProps } from '../types'\nimport { Account } from '../../Account'\nimport { MPTokenLink } from '../../MPTokenLink'\n\nexport const Simple: TransactionSimpleComponent = ({\n  data,\n}: TransactionSimpleProps<MPTokenIssuanceSet>) => {\n  const { MPTokenIssuanceID, Holder } = data.instructions\n  const { t } = useTranslation()\n\n  return (\n    <>\n      <SimpleRow label={t('mpt_issuance_id')} data-testid=\"mpt-issuance-id\">\n        <MPTokenLink tokenID={MPTokenIssuanceID} />\n      </SimpleRow>\n      {Holder && (\n        <SimpleRow label={t('mpt_holder')} data-testid=\"mpt-holder\">\n          <Account account={Holder} />\n        </SimpleRow>\n      )}\n    </>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/MPTokenIssuanceSet/index.ts",
    "content": "import {\n  TransactionAction,\n  TransactionCategory,\n  TransactionMapping,\n} from '../types'\n\nimport { Simple } from './Simple'\n\nexport const MPTokenIssuanceSetTransaction: TransactionMapping = {\n  Simple,\n  action: TransactionAction.MODIFY,\n  category: TransactionCategory.MPT,\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/MPTokenIssuanceSet/test/MPTokenIssuanceSetSimple.test.jsx",
    "content": "import { createSimpleRenderFactory } from '../../test/createWrapperFactory'\nimport { Simple } from '../Simple'\nimport { expectSimpleRowText, expectSimpleRowNotToExist } from '../../test'\nimport transactionSuccess from './mock_data/MPTokenIssuanceSet.json'\nimport transactionNoHolder from './mock_data/MPTokenIssuanceSet_NoHolder.json'\nimport transactionFail from './mock_data/MPTokenIssuanceSet_Fail.json'\n\nconst renderComponent = createSimpleRenderFactory(Simple)\n\ndescribe('MPTokenIssuanceSet', () => {\n  it('handles MPTokenIssuanceSet simple view ', () => {\n    const { container, unmount } = renderComponent(transactionSuccess)\n\n    expectSimpleRowText(\n      container,\n      'mpt-issuance-id',\n      '00000BED9E4ADA3DCC1BE78683C4B623A74013818160590C',\n    )\n    expectSimpleRowText(\n      container,\n      'mpt-holder',\n      'r9hF4e3e6kLuxLobPwfQa2wzXZMDvBDeUg',\n    )\n    unmount()\n  })\n\n  it('handles MPTokenIssuanceSet simple view w/o holder ', () => {\n    const { container, unmount } = renderComponent(transactionNoHolder)\n\n    expectSimpleRowText(\n      container,\n      'mpt-issuance-id',\n      '000002609BB39CEC721B5AB337B6BD862ACD2811CBBB5F18',\n    )\n    expectSimpleRowNotToExist(container, 'mpt-holder')\n    unmount()\n  })\n\n  it('handles failed MPTokenIssuanceSet simple view ', () => {\n    const { container, unmount } = renderComponent(transactionFail)\n    expectSimpleRowText(\n      container,\n      'mpt-issuance-id',\n      '00000F83146C83112AED215CD345F8E7327459BFCF6B8062',\n    )\n    expectSimpleRowText(\n      container,\n      'mpt-holder',\n      'rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh',\n    )\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/MPTokenIssuanceSet/test/mock_data/MPTokenIssuanceSet.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rERyS9qtwky94UMMjjmbku3uo5aQwAoJ58\",\n    \"Fee\": \"10\",\n    \"Flags\": 1,\n    \"Holder\": \"r9hF4e3e6kLuxLobPwfQa2wzXZMDvBDeUg\",\n    \"MPTokenIssuanceID\": \"00000BED9E4ADA3DCC1BE78683C4B623A74013818160590C\",\n    \"Sequence\": 3054,\n    \"SigningPubKey\": \"EDF73A1C528F5BFBD6FF2B05D0C71760D7D2DF1DE3496935612E47BCB440F28040\",\n    \"TransactionType\": \"MPTokenIssuanceSet\",\n    \"TxnSignature\": \"5BC9ABE91A10F86440E301F17DFADD08D2E55E0699441372BE73D843B4481869BD6224ED461BC4F9894E97F1F99562D3CF2CD1A4E991BD7993DC24EDA63F5B05\",\n    \"ctid\": \"C0000BF100000000\",\n    \"date\": 1711047580000,\n    \"hash\": \"undefined\",\n    \"inLedger\": \"undefined\",\n    \"ledger_index\": \"undefined\",\n    \"meta\": \"undefined\",\n    \"validated\": \"undefined\",\n    \"metaData\": \"undefined\",\n    \"status\": \"undefined\"\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r9hF4e3e6kLuxLobPwfQa2wzXZMDvBDeUg\",\n            \"Flags\": 1,\n            \"MPTokenIssuanceID\": \"00000BED9E4ADA3DCC1BE78683C4B623A74013818160590C\",\n            \"OwnerNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"MPToken\",\n          \"LedgerIndex\": \"DDA698915F22D7CEA45896CB70DCC0DF803E1F573B92B6F0178F1688208EED04\",\n          \"PreviousFields\": {\n            \"Flags\": 0\n          },\n          \"PreviousTxnID\": \"39709CA66D9103354D09070234A14253EC779846BB73477EEB21C5A65144C844\",\n          \"PreviousTxnLgrSeq\": 3056\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rERyS9qtwky94UMMjjmbku3uo5aQwAoJ58\",\n            \"Balance\": \"99999980\",\n            \"Flags\": 0,\n            \"OwnerCount\": 1,\n            \"Sequence\": 3055\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"EDD52DA05DAB16BAF6A3B7D47CCB9FEAB7AAC2BDD9CB007F6A3B8E0DBCE50A45\",\n          \"PreviousFields\": {\n            \"Balance\": \"99999990\",\n            \"Sequence\": 3054\n          },\n          \"PreviousTxnID\": \"41A99F7E107F813C132B105AB930FD8C6960530DDFA5D98FCEF5A5600DA39D38\",\n          \"PreviousTxnLgrSeq\": 3055\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tesSUCCESS\"\n  },\n  \"hash\": \"4993E5B875E0217ABC92EFC395805F1344D8A9A3D75437EEA457C05EDB3AB20B\",\n  \"ledger_index\": 3057,\n  \"date\": 1711047580000\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/MPTokenIssuanceSet/test/mock_data/MPTokenIssuanceSet_Fail.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rpizWPf4g8JLWFUT7143Zn9A1n2Dy9bnji\",\n    \"Fee\": \"10\",\n    \"Flags\": 1,\n    \"Holder\": \"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh\",\n    \"MPTokenIssuanceID\": \"00000F83146C83112AED215CD345F8E7327459BFCF6B8062\",\n    \"Sequence\": 3972,\n    \"SigningPubKey\": \"ED4EC06184C745D99AEAAA16526C900DC181C8546899F462C3D105C11A6677A65A\",\n    \"TransactionType\": \"MPTokenIssuanceSet\",\n    \"TxnSignature\": \"2A9D1795983016A162F05CEBBD35E65B955BD67AB96B8A2DB2E31027EA67DDF082B1C4D67F9219CBF9893520ACB0ACB80E2ED3CE96496AA4668BCCF4A46EAE0A\",\n    \"ctid\": \"C0000F8700000000\",\n    \"date\": 1711048704000,\n    \"hash\": \"undefined\",\n    \"inLedger\": \"undefined\",\n    \"ledger_index\": \"undefined\",\n    \"meta\": \"undefined\",\n    \"validated\": \"undefined\",\n    \"metaData\": \"undefined\",\n    \"status\": \"undefined\"\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rpizWPf4g8JLWFUT7143Zn9A1n2Dy9bnji\",\n            \"Balance\": \"99999980\",\n            \"Flags\": 0,\n            \"OwnerCount\": 1,\n            \"Sequence\": 3973\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"F937A006AB86775D475946D43BA1612F3BC24A2C144550D4EC0266C2F08303D5\",\n          \"PreviousFields\": {\n            \"Balance\": \"99999990\",\n            \"Sequence\": 3972\n          },\n          \"PreviousTxnID\": \"8D322CBF8A965E64FB903551C80A2E1DF9E2480A7AD0B1D98BE56574BC9FE215\",\n          \"PreviousTxnLgrSeq\": 3973\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tecOBJECT_NOT_FOUND\"\n  },\n  \"hash\": \"E47D5242B7E210B9E1DAEFF90DC19DA9310C04CF4444C76F2C76A44533EEC48F\",\n  \"ledger_index\": 3975,\n  \"date\": 1711048704000\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/MPTokenIssuanceSet/test/mock_data/MPTokenIssuanceSet_NoHolder.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rEUGuTqrySk9o1rZSVx8seuvcsEZymeEYM\",\n    \"Fee\": \"10\",\n    \"Flags\": 1,\n    \"MPTokenIssuanceID\": \"000002609BB39CEC721B5AB337B6BD862ACD2811CBBB5F18\",\n    \"Sequence\": 609,\n    \"SigningPubKey\": \"ED92DDE49AA689EC63589623067968B85E4885A9874B3CAB89E07D192EBFA42FF9\",\n    \"TransactionType\": \"MPTokenIssuanceSet\",\n    \"TxnSignature\": \"6678BF017A62360DAA39156112960D934440467D2E4098958F053B6758A2D237DA82CD27FDA3B35BAB610D74669BF6C4DEB12D77984E48158B2D79C8BAEC3303\",\n    \"ctid\": \"C000026400000000\",\n    \"date\": 1711133159000,\n    \"hash\": \"undefined\",\n    \"inLedger\": \"undefined\",\n    \"ledger_index\": \"undefined\",\n    \"meta\": \"undefined\",\n    \"validated\": \"undefined\",\n    \"metaData\": \"undefined\",\n    \"status\": \"undefined\"\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rEUGuTqrySk9o1rZSVx8seuvcsEZymeEYM\",\n            \"Balance\": \"99999980\",\n            \"Flags\": 0,\n            \"OwnerCount\": 1,\n            \"Sequence\": 610\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"1D54D263727856612FC7C7A27D93532ED0C41B74FA651992C125AD19C900669D\",\n          \"PreviousFields\": {\n            \"Balance\": \"99999990\",\n            \"Sequence\": 609\n          },\n          \"PreviousTxnID\": \"CF68A8D929F089F6F53B071250935DD7C3F52F6E175D82E53118265D776D4BF7\",\n          \"PreviousTxnLgrSeq\": 610\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 35,\n            \"Issuer\": \"rEUGuTqrySk9o1rZSVx8seuvcsEZymeEYM\",\n            \"OutstandingAmount\": \"0\",\n            \"OwnerNode\": \"0\",\n            \"Sequence\": 608\n          },\n          \"LedgerEntryType\": \"MPTokenIssuance\",\n          \"LedgerIndex\": \"E8DF796110B1FBD9086A4637491E49843D33D897FBC32F03A33140F76378EE86\",\n          \"PreviousFields\": {\n            \"Flags\": 34\n          },\n          \"PreviousTxnID\": \"CF68A8D929F089F6F53B071250935DD7C3F52F6E175D82E53118265D776D4BF7\",\n          \"PreviousTxnLgrSeq\": 610\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tesSUCCESS\"\n  },\n  \"hash\": \"73C21D8B5DFBF5DE03FCAF0D69C00E9E2918280561E9898C556A1C743A566D47\",\n  \"ledger_index\": 612,\n  \"date\": 1711133159000\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/NFTokenAcceptOffer/Simple.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { Account } from '../../Account'\nimport { SimpleRow } from '../SimpleRow'\nimport { Amount } from '../../Amount'\nimport { NFTokenAcceptOfferInstructions } from './types'\nimport { TransactionSimpleComponent, TransactionSimpleProps } from '../types'\nimport { NFTokenLink } from '../../NFTokenLink'\n\nexport const Simple: TransactionSimpleComponent = ({\n  data,\n}: TransactionSimpleProps<NFTokenAcceptOfferInstructions>) => {\n  const { acceptedOfferIDs, amount, tokenID, seller, buyer } = data.instructions\n  const { t } = useTranslation()\n\n  return (\n    <>\n      {acceptedOfferIDs.map((offer) => (\n        <SimpleRow\n          label={t('offer_index')}\n          className=\"dt\"\n          data-testid=\"offer-id\"\n        >\n          {offer}\n        </SimpleRow>\n      ))}\n      {amount && seller && buyer && tokenID && (\n        <>\n          <SimpleRow label={t('seller')} data-testid=\"seller\">\n            <Account account={seller} />\n          </SimpleRow>\n          <SimpleRow label={t('buyer')} data-testid=\"buyer\">\n            <Account account={buyer} />\n          </SimpleRow>\n          <SimpleRow\n            label={t('token_id')}\n            className=\"dt\"\n            data-testid=\"token-id\"\n          >\n            <NFTokenLink tokenID={tokenID} />\n          </SimpleRow>\n          <SimpleRow label={t('amount')} data-testid=\"amount\">\n            <Amount value={amount} displayIssuer />\n          </SimpleRow>\n        </>\n      )}\n    </>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/NFTokenAcceptOffer/index.ts",
    "content": "import {\n  TransactionAction,\n  TransactionCategory,\n  TransactionMapping,\n} from '../types'\n\nimport { Simple } from './Simple'\nimport { parser } from './parser'\n\nexport const NFTokenAcceptOfferTransaction: TransactionMapping = {\n  Simple,\n  action: TransactionAction.FINISH,\n  category: TransactionCategory.NFT,\n  parser,\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/NFTokenAcceptOffer/parser.ts",
    "content": "import type { NFTokenAcceptOffer } from 'xrpl'\nimport { NFTokenAcceptOfferInstructions } from './types'\nimport { TransactionParser } from '../types'\nimport { formatAmount } from '../../../../../rippled/lib/txSummary/formatAmount'\n\nconst determineIsSellOffer = (flags: number) => (flags & 1) !== 0\n\nexport const parser: TransactionParser<\n  NFTokenAcceptOffer,\n  NFTokenAcceptOfferInstructions\n> = (tx, meta) => {\n  const acceptedOfferNodes = meta.AffectedNodes.filter(\n    (node: any) => node.DeletedNode?.LedgerEntryType === 'NFTokenOffer',\n  )\n\n  const acceptedOfferIDs: string[] = []\n  if (tx.NFTokenBuyOffer) {\n    acceptedOfferIDs.push(tx.NFTokenBuyOffer)\n  }\n  if (tx.NFTokenSellOffer) {\n    acceptedOfferIDs.push(tx.NFTokenSellOffer)\n  }\n\n  // If in brokered mode, we must fetch both of the NFTokenOffer nodes\n  // in order to fetch the seller and buyer from each\n  if (acceptedOfferNodes.length > 1) {\n    const buyOfferNode = acceptedOfferNodes.find(\n      (node: any) =>\n        !determineIsSellOffer(node.DeletedNode?.FinalFields?.Flags),\n    )?.DeletedNode?.FinalFields\n\n    const sellOfferNode = acceptedOfferNodes.find((node: any) =>\n      determineIsSellOffer(node.DeletedNode?.FinalFields?.Flags),\n    )?.DeletedNode?.FinalFields\n\n    return {\n      amount: formatAmount(buyOfferNode.Amount),\n      tokenID: meta.nftoken_id,\n      seller: sellOfferNode.Owner,\n      buyer: buyOfferNode.Owner,\n      acceptedOfferIDs,\n    }\n  }\n\n  const acceptedOfferNode = acceptedOfferNodes[0]?.DeletedNode?.FinalFields\n\n  if (!acceptedOfferNode) {\n    return {\n      acceptedOfferIDs,\n    }\n  }\n\n  const amount = formatAmount(acceptedOfferNode.Amount)\n  const tokenID = meta.nftoken_id\n  const offerer = acceptedOfferNode.Owner\n  const accepter = tx.Account\n  const isSellOffer = determineIsSellOffer(acceptedOfferNode.Flags)\n  const seller = isSellOffer ? offerer : accepter\n  const buyer = isSellOffer ? accepter : offerer\n\n  return {\n    amount,\n    tokenID,\n    seller,\n    buyer,\n    acceptedOfferIDs,\n  }\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/NFTokenAcceptOffer/test/NFTokenAcceptOfferSimple.test.tsx",
    "content": "import { createSimpleRenderFactory } from '../../test/createWrapperFactory'\nimport { Simple } from '../Simple'\nimport transactionBuy from './mock_data/NFTokenAcceptOffer_Buy.json'\nimport transactionSell from './mock_data/NFTokenAcceptOffer_Sell.json'\nimport transactionFailure from './mock_data/NFTokenAcceptOffer_Failure.json'\nimport transactionBroker from './mock_data/NFTokenAcceptOffer_Broker.json'\nimport { expectSimpleRowText, expectSimpleRowNotToExist } from '../../test'\n\nconst renderComponent = createSimpleRenderFactory(Simple)\n\ndescribe('NFTokenAcceptOffer', () => {\n  it('handles NFTokenAcceptOffer Buy simple view ', () => {\n    const { container, unmount } = renderComponent(transactionBuy)\n\n    expectSimpleRowText(\n      container,\n      'token-id',\n      '000800006203F49C21D5D6E022CB16DE3538F248662FC73C29ABA6A90000000D',\n    )\n    expectSimpleRowText(\n      container,\n      'offer-id',\n      '8278760A246D4464EE701D503091B9DB0D9790DD2BBE9CAABCA45B04A1A25B6B',\n    )\n    expectSimpleRowText(container, 'amount', '\\uE9000.0001 XRP')\n    expectSimpleRowText(\n      container,\n      'buyer',\n      'rfFRmXUR1yfxeUfXj7WwKhETrtToYx1hYh',\n    )\n    expectSimpleRowText(\n      container,\n      'seller',\n      'r9AExd6v3keXaXa3nXAMHHcP9nWy9Aef2g',\n    )\n    unmount()\n  })\n\n  it('handles NFTokenAcceptOffer Sell simple view ', () => {\n    const { container, unmount } = renderComponent(transactionSell)\n    expectSimpleRowText(\n      container,\n      'token-id',\n      '000800006203F49C21D5D6E022CB16DE3538F248662FC73C216B9CBF00000023',\n    )\n    expectSimpleRowText(\n      container,\n      'offer-id',\n      '505E7F1E1EA989C0B0196AB7F503ACACAC7A9640C27B58A5E3C9DD31E88848D4',\n    )\n    expectSimpleRowText(container, 'amount', '\\uE9000.000102 XRP')\n    expectSimpleRowText(\n      container,\n      'buyer',\n      'rfFRmXUR1yfxeUfXj7WwKhETrtToYx1hYh',\n    )\n    expectSimpleRowText(\n      container,\n      'seller',\n      'r9AExd6v3keXaXa3nXAMHHcP9nWy9Aef2g',\n    )\n    unmount()\n  })\n\n  it('handles NFTokenAcceptOffer Sell Failure simple view ', () => {\n    const { container, unmount } = renderComponent(transactionFailure)\n\n    expectSimpleRowText(\n      container,\n      'offer-id',\n      '17AFFE8C8D94554EB3A31A517B05C16085777FAEA9ACEDDCDE9D7CFD7B988D01',\n    )\n    expectSimpleRowNotToExist(container, 'token-id')\n    expectSimpleRowNotToExist(container, 'amount')\n    expectSimpleRowNotToExist(container, 'buyer')\n    expectSimpleRowNotToExist(container, 'seller')\n    unmount()\n  })\n\n  it('handles NFTokenAcceptOffer from Broker simple view ', () => {\n    const { container, unmount } = renderComponent(transactionBroker)\n    expectSimpleRowText(\n      container,\n      'token-id',\n      '00081B581189F5687DBB7516339D6CCB5593D96622AD82DF08CFDA8600000A17',\n    )\n    expect(\n      container.querySelectorAll('[data-testid=\"offer-id\"] .value'),\n    ).toHaveLength(2)\n    expectSimpleRowText(container, 'amount', '\\uE9002,500.00 XRP')\n    expectSimpleRowText(\n      container,\n      'buyer',\n      'rNYKGnHrjSnKXQGgACciyCLg4xRcwWZixN',\n    )\n    expectSimpleRowText(\n      container,\n      'seller',\n      'rnp9DA6H2tLH7YFkgpjoVREB2yccYv56Sg',\n    )\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/NFTokenAcceptOffer/test/mock_data/NFTokenAcceptOffer_Broker.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rpZqTPC8GvrSvEfFsUuHkmPCg29GdQuXhC\",\n    \"Fee\": \"12\",\n    \"Flags\": 0,\n    \"LastLedgerSequence\": 76208269,\n    \"NFTokenBuyOffer\": \"A685850D95F9C391CFD2F96DB4D2D70F1C4F23A507F1E195B1D4B50B6F5E9A18\",\n    \"NFTokenSellOffer\": \"7BF2F4616B8AB7BED6002F97D70EBE47C03543A19A60E749C9CFEF5AE01966A8\",\n    \"Sequence\": 75453630,\n    \"SigningPubKey\": \"EDFC78FE5C5F474985678DD821FCDD7F65F2F7CC5029E3D0BEB46C9B0D90C622FF\",\n    \"TransactionType\": \"NFTokenAcceptOffer\",\n    \"TxnSignature\": \"E2FE466B2D7989B04B842937830BC0212CF03E9EE581850211D020CD6251248BD5F01F5865A3283C960451A01741D6D038AACC95B1F4644A7864104D1FD0D905\",\n    \"date\": \"2022-12-04T23:35:41Z\",\n    \"warnings\": [\n      {\n        \"id\": 1004,\n        \"message\": \"This is a reporting server.  The default behavior of a reporting server is to only return validated data. If you are looking for not yet validated data, include \\\"ledger_index : current\\\" in your request, which will cause this server to forward the request to a p2p node. If the forward is successful the response will include \\\"forwarded\\\" : \\\"true\\\"\"\n      }\n    ]\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rNYKGnHrjSnKXQGgACciyCLg4xRcwWZixN\",\n            \"RootIndex\": \"24813BB34553FA893101E9B1FEE53252C2DC31431BB5E41358954933E523AB94\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"24813BB34553FA893101E9B1FEE53252C2DC31431BB5E41358954933E523AB94\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"NFTokens\": [\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"00081B581189F5687DBB7516339D6CCB5593D96622AD82DF098255C20000015B\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"00081B581189F5687DBB7516339D6CCB5593D96622AD82DF283CC552000000CB\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"00081B581189F5687DBB7516339D6CCB5593D96622AD82DF374DF7CC0000015D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"00081B581189F5687DBB7516339D6CCB5593D96622AD82DF4EA91F1A00001293\"\n                }\n              }\n            ]\n          },\n          \"LedgerEntryType\": \"NFTokenPage\",\n          \"LedgerIndex\": \"2C17C88F9BDC90AAFFF9D798A700EAF10DC46829FFFFFFFFFFFFFFFFFFFFFFFF\",\n          \"PreviousFields\": {\n            \"NFTokens\": [\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"00081B581189F5687DBB7516339D6CCB5593D96622AD82DF08CFDA8600000A17\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"00081B581189F5687DBB7516339D6CCB5593D96622AD82DF098255C20000015B\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"00081B581189F5687DBB7516339D6CCB5593D96622AD82DF283CC552000000CB\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"00081B581189F5687DBB7516339D6CCB5593D96622AD82DF374DF7CC0000015D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"00081B581189F5687DBB7516339D6CCB5593D96622AD82DF4EA91F1A00001293\"\n                }\n              }\n            ]\n          },\n          \"PreviousTxnID\": \"E47A58C710B8103A043EB305A04676B027931F984103F6DA545E6D546421AC0D\",\n          \"PreviousTxnLgrSeq\": 75917763\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rnp9DA6H2tLH7YFkgpjoVREB2yccYv56Sg\",\n            \"Balance\": \"77816893445\",\n            \"Flags\": 0,\n            \"OwnerCount\": 55,\n            \"Sequence\": 65701033,\n            \"TicketCount\": 16\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"3E50408AAA1F0A13269A7C8FE93496C88BEE1BDC5C96A8C0CB9003F8FC939F27\",\n          \"PreviousFields\": {\n            \"Balance\": \"75491893445\",\n            \"OwnerCount\": 56\n          },\n          \"PreviousTxnID\": \"119DCCC0037FA2211A9F5007836C19FFC8AF0DD13FCF2F59528D27DBE969EDD0\",\n          \"PreviousTxnLgrSeq\": 75965987\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"4\",\n            \"IndexPrevious\": \"2\",\n            \"Owner\": \"rnp9DA6H2tLH7YFkgpjoVREB2yccYv56Sg\",\n            \"RootIndex\": \"6D52AE70F0C878F8642378A6C026F10BF8909A597E1899C8B5005F538ECD450F\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"66BECB0CDA8C50AD15E19F4E813BC6C85CAC74C9AC6D205477DEE4E9D7AA3FC6\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 2,\n            \"NFTokenID\": \"00081B581189F5687DBB7516339D6CCB5593D96622AD82DF08CFDA8600000A17\",\n            \"RootIndex\": \"71E1F9791E5CC8F018E70DD090F5A3B1F8B2BC13C93A56E5E18C821037D24BD1\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"71E1F9791E5CC8F018E70DD090F5A3B1F8B2BC13C93A56E5E18C821037D24BD1\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Amount\": \"2500000000\",\n            \"Destination\": \"rpZqTPC8GvrSvEfFsUuHkmPCg29GdQuXhC\",\n            \"Flags\": 1,\n            \"NFTokenID\": \"00081B581189F5687DBB7516339D6CCB5593D96622AD82DF08CFDA8600000A17\",\n            \"NFTokenOfferNode\": \"0\",\n            \"Owner\": \"rnp9DA6H2tLH7YFkgpjoVREB2yccYv56Sg\",\n            \"OwnerNode\": \"3\",\n            \"PreviousTxnID\": \"810CAD96FFF00F69CCC20B7D68855DCB388D625E5F5FA9DD47377107BF7001BF\",\n            \"PreviousTxnLgrSeq\": 75965938\n          },\n          \"LedgerEntryType\": \"NFTokenOffer\",\n          \"LedgerIndex\": \"7BF2F4616B8AB7BED6002F97D70EBE47C03543A19A60E749C9CFEF5AE01966A8\"\n        }\n      },\n      {\n        \"CreatedNode\": {\n          \"LedgerEntryType\": \"NFTokenPage\",\n          \"LedgerIndex\": \"9485C5C8C36AA7AF2FAAD8E11245C5033A204061FFFFFFFFFFFFFFFFFFFFFFFF\",\n          \"NewFields\": {\n            \"NFTokens\": [\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"00081B581189F5687DBB7516339D6CCB5593D96622AD82DF08CFDA8600000A17\"\n                }\n              }\n            ]\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Amount\": \"2500000000\",\n            \"Flags\": 0,\n            \"NFTokenID\": \"00081B581189F5687DBB7516339D6CCB5593D96622AD82DF08CFDA8600000A17\",\n            \"NFTokenOfferNode\": \"0\",\n            \"Owner\": \"rNYKGnHrjSnKXQGgACciyCLg4xRcwWZixN\",\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"1C42F9D7C942526AE8B211F8536BF5DBE36743AD5F9DB7B190F14268421A6943\",\n            \"PreviousTxnLgrSeq\": 76208249\n          },\n          \"LedgerEntryType\": \"NFTokenOffer\",\n          \"LedgerIndex\": \"A685850D95F9C391CFD2F96DB4D2D70F1C4F23A507F1E195B1D4B50B6F5E9A18\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rpZqTPC8GvrSvEfFsUuHkmPCg29GdQuXhC\",\n            \"Balance\": \"152567272010\",\n            \"Flags\": 0,\n            \"OwnerCount\": 1,\n            \"Sequence\": 75453631\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"CD3CA85955F9B786BAD89F9125200EB9BCBEE5DCC996CC71A565FAA876CD1ACC\",\n          \"PreviousFields\": {\n            \"Balance\": \"152567272022\",\n            \"Sequence\": 75453630\n          },\n          \"PreviousTxnID\": \"4BE847413014620D5904E3D9FA30C92D1F4E2C178B81F9DB6140D6B8499E86C0\",\n          \"PreviousTxnLgrSeq\": 76208241\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rNYKGnHrjSnKXQGgACciyCLg4xRcwWZixN\",\n            \"Balance\": \"21998970\",\n            \"Flags\": 0,\n            \"OwnerCount\": 2,\n            \"Sequence\": 76057635\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"E534CA7F437D749A11D955FCC94B056DB08A04FA8105C9C2F6FE38C8AF4198A6\",\n          \"PreviousFields\": {\n            \"Balance\": \"2521998970\"\n          },\n          \"PreviousTxnID\": \"1C42F9D7C942526AE8B211F8536BF5DBE36743AD5F9DB7B190F14268421A6943\",\n          \"PreviousTxnLgrSeq\": 76208249\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 1,\n            \"NFTokenID\": \"00081B581189F5687DBB7516339D6CCB5593D96622AD82DF08CFDA8600000A17\",\n            \"RootIndex\": \"EE9EF849B4AB3F45833EAE89B77821729E94CE77A2312D026E41F70644C404D1\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"EE9EF849B4AB3F45833EAE89B77821729E94CE77A2312D026E41F70644C404D1\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rpbjkoncKiv1LkPWShzZksqYPzKXmUhTW7\",\n            \"Balance\": \"147197157182\",\n            \"Domain\": \"68747470733A2F2F6D61726B6574706C6163652D6170692E6F6E7872702E636F6D2F6170692F6D657461646174612F\",\n            \"Flags\": 0,\n            \"MintedNFTokens\": 5859,\n            \"OwnerCount\": 1548,\n            \"Sequence\": 75447037\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"F67A0D5CA164FD7BF50CA0896B50C1C99A0E50EAFF996A4C3BC491FDED8AA296\",\n          \"PreviousFields\": {\n            \"Balance\": \"147022157182\"\n          },\n          \"PreviousTxnID\": \"D95AA7174EDD06CCB0FA5821CF4D37CFFF1DA1016C2FD881EF3C1DD7F48422FD\",\n          \"PreviousTxnLgrSeq\": 76206899\n        }\n      }\n    ],\n    \"TransactionIndex\": 7,\n    \"TransactionResult\": \"tesSUCCESS\",\n    \"nftoken_id\": \"00081B581189F5687DBB7516339D6CCB5593D96622AD82DF08CFDA8600000A17\"\n  },\n  \"hash\": \"E6CE3C3C554BA01891A9D12E89062C34BBEA6282CF8AA4D9AF8BF7D0E7D26B7D\",\n  \"ledger_index\": 76208251,\n  \"date\": \"2022-12-04T23:35:41Z\"\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/NFTokenAcceptOffer/test/mock_data/NFTokenAcceptOffer_Buy.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"r9AExd6v3keXaXa3nXAMHHcP9nWy9Aef2g\",\n    \"Fee\": \"12\",\n    \"Flags\": 0,\n    \"LastLedgerSequence\": 1799514,\n    \"NFTokenBuyOffer\": \"8278760A246D4464EE701D503091B9DB0D9790DD2BBE9CAABCA45B04A1A25B6B\",\n    \"Sequence\": 1166460,\n    \"SigningPubKey\": \"ED475D1452031E8F9641AF1631519A58F7B8681E172E4838AA0E59408ADA1727DD\",\n    \"TransactionType\": \"NFTokenAcceptOffer\",\n    \"TxnSignature\": \"61E42CD0A4FF1D16ADBF57743BE0F6061DED3907C5E4AABF4387EDE08E298A9E694360AC381E2FBD7BB6AD5795E4AD303E0BB0D59EE25F0AF44BE5EA362C9D04\",\n    \"date\": \"2022-05-03T17:14:22Z\"\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rfFRmXUR1yfxeUfXj7WwKhETrtToYx1hYh\",\n            \"Balance\": \"9999998276\",\n            \"Flags\": 0,\n            \"OwnerCount\": 2,\n            \"Sequence\": 1166460\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"471307512702DC1933C63B795519B8BF08BC4EAD840D87BD84AA98A1EB90DDF6\",\n          \"PreviousFields\": {\n            \"Balance\": \"9999998376\",\n            \"OwnerCount\": 3\n          },\n          \"PreviousTxnID\": \"1F0ED931D656F31631BBD186E21DA735EDCDBDC7A68EBD9587C9C1EA5917C4C2\",\n          \"PreviousTxnLgrSeq\": 1799495\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 1,\n            \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C29ABA6A90000000D\",\n            \"RootIndex\": \"4866AEDB883C1F063E54457B0BF5FD031CDE4868A1697C84229FA16BA3D2C198\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"4866AEDB883C1F063E54457B0BF5FD031CDE4868A1697C84229FA16BA3D2C198\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"NFTokens\": [\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"00080000E7F5BAC19E99193969DAC1452B90558C1F9D5C6D0000099B00000000\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"00080000E7F5BAC19E99193969DAC1452B90558C1F9D5C6D16E5DA9C00000001\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"00080000E7F5BAC19E99193969DAC1452B90558C1F9D5C6D2DCBAB9D00000002\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"00080000E7F5BAC19E99193969DAC1452B90558C1F9D5C6D44B17C9E00000003\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C0000099B00000000\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C29ABA6A90000000D\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              }\n            ]\n          },\n          \"LedgerEntryType\": \"NFTokenPage\",\n          \"LedgerIndex\": \"4AC8FAD7D35E374F513CA5A7D12AC2029CBB4944FFFFFFFFFFFFFFFFFFFFFFFF\",\n          \"PreviousFields\": {\n            \"NFTokens\": [\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"00080000E7F5BAC19E99193969DAC1452B90558C1F9D5C6D0000099B00000000\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"00080000E7F5BAC19E99193969DAC1452B90558C1F9D5C6D16E5DA9C00000001\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"00080000E7F5BAC19E99193969DAC1452B90558C1F9D5C6D2DCBAB9D00000002\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"00080000E7F5BAC19E99193969DAC1452B90558C1F9D5C6D44B17C9E00000003\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C0000099B00000000\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              }\n            ]\n          },\n          \"PreviousTxnID\": \"BF21798556EBC55C097A9255CB6C4286CEFEFED8BF09B4F8180921B2F9731FFA\",\n          \"PreviousTxnLgrSeq\": 1799491\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"NFTokens\": [\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C2DCBAB9D00000002\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C3C7172B500000019\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C409177A80000000E\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C44B17C9E00000003\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C577748AB0000000F\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C5B974D9F00000004\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C6E5D19AA00000010\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C727D1EA100000005\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C8542EAAD00000011\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C8962EFA000000006\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C9C28BBAC00000012\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73CA048C0A300000007\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73CB30E8CAF00000013\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73CB72E91A200000008\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73CC9F45DAE00000014\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73CCE1462A500000009\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73CE0DA2EB100000015\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73CE4FA33A40000000A\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73CF7BFFFB000000016\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73CFBE004A70000000B\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              }\n            ]\n          },\n          \"LedgerEntryType\": \"NFTokenPage\",\n          \"LedgerIndex\": \"6203F49C21D5D6E022CB16DE3538F248662FC73CFFFFFFFFFFFFFFFFFFFFFFFF\",\n          \"PreviousFields\": {\n            \"NFTokens\": [\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C29ABA6A90000000D\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C2DCBAB9D00000002\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C3C7172B500000019\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C409177A80000000E\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C44B17C9E00000003\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C577748AB0000000F\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C5B974D9F00000004\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C6E5D19AA00000010\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C727D1EA100000005\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C8542EAAD00000011\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C8962EFA000000006\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C9C28BBAC00000012\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73CA048C0A300000007\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73CB30E8CAF00000013\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73CB72E91A200000008\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73CC9F45DAE00000014\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73CCE1462A500000009\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73CE0DA2EB100000015\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73CE4FA33A40000000A\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73CF7BFFFB000000016\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73CFBE004A70000000B\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              }\n            ]\n          },\n          \"PreviousTxnID\": \"1CB12DE84CD9B989B06D5E062855DCE428A4308DA6762D63F7B78CC500A03024\",\n          \"PreviousTxnLgrSeq\": 1799495\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Amount\": \"100\",\n            \"Flags\": 0,\n            \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C29ABA6A90000000D\",\n            \"NFTokenOfferNode\": \"0\",\n            \"Owner\": \"rfFRmXUR1yfxeUfXj7WwKhETrtToYx1hYh\",\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"1F0ED931D656F31631BBD186E21DA735EDCDBDC7A68EBD9587C9C1EA5917C4C2\",\n            \"PreviousTxnLgrSeq\": 1799495\n          },\n          \"LedgerEntryType\": \"NFTokenOffer\",\n          \"LedgerIndex\": \"8278760A246D4464EE701D503091B9DB0D9790DD2BBE9CAABCA45B04A1A25B6B\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rfFRmXUR1yfxeUfXj7WwKhETrtToYx1hYh\",\n            \"RootIndex\": \"9F6DDE1956BC72B44EFEA1BD742C97B3A63D3FBDBAE139D595D580690399C860\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"9F6DDE1956BC72B44EFEA1BD742C97B3A63D3FBDBAE139D595D580690399C860\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r9AExd6v3keXaXa3nXAMHHcP9nWy9Aef2g\",\n            \"Balance\": \"10000000036\",\n            \"BurnedNFTokens\": 4,\n            \"Flags\": 0,\n            \"MintedNFTokens\": 26,\n            \"OwnerCount\": 2,\n            \"Sequence\": 1166461\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"BE121B82D5812149D633F605EB07265A80B762A365CE94883089FEEE4B955701\",\n          \"PreviousFields\": {\n            \"Balance\": \"9999999948\",\n            \"Sequence\": 1166460\n          },\n          \"PreviousTxnID\": \"3659C5A411DE288820DC8D95F4DE5007BCA9B52D03D3ADD31BE37F0259CA670E\",\n          \"PreviousTxnLgrSeq\": 1799495\n        }\n      }\n    ],\n    \"TransactionIndex\": 4,\n    \"TransactionResult\": \"tesSUCCESS\",\n    \"nftoken_id\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C29ABA6A90000000D\"\n  },\n  \"hash\": \"21C60F255B29D0034B9EBA2ED1F7523635C61DED1D6BDBCFFD67703C45F7072D\",\n  \"ledger_index\": 1799495,\n  \"date\": \"2022-05-03T17:14:22Z\"\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/NFTokenAcceptOffer/test/mock_data/NFTokenAcceptOffer_Failure.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rfFRmXUR1yfxeUfXj7WwKhETrtToYx1hYh\",\n    \"Fee\": \"12\",\n    \"Flags\": 0,\n    \"LastLedgerSequence\": 1888939,\n    \"NFTokenSellOffer\": \"17AFFE8C8D94554EB3A31A517B05C16085777FAEA9ACEDDCDE9D7CFD7B988D01\",\n    \"Sequence\": 1166473,\n    \"SigningPubKey\": \"EDB9A1F05A7A91250ECB784754F3BEC3A76C3DAB34F28FAC570798EC0B0817407D\",\n    \"TransactionType\": \"NFTokenAcceptOffer\",\n    \"TxnSignature\": \"5274111A862BD1E61925DADC7F95DF5FEF0B7B79DFAFBB14B6DF72D01554EBC96150D2503A588AE274E20D965CA15C53181256B765A6A6957FE55404AA01E700\",\n    \"date\": \"2022-05-06T19:59:52Z\"\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rfFRmXUR1yfxeUfXj7WwKhETrtToYx1hYh\",\n            \"Balance\": \"9999998008\",\n            \"Flags\": 0,\n            \"OwnerCount\": 8,\n            \"Sequence\": 1166474\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"471307512702DC1933C63B795519B8BF08BC4EAD840D87BD84AA98A1EB90DDF6\",\n          \"PreviousFields\": {\n            \"Balance\": \"9999998020\",\n            \"Sequence\": 1166473\n          },\n          \"PreviousTxnID\": \"727181396636CDEFBB7D96CD7A86FCCF9F07390360EF1F2E8034384970C0B9DF\",\n          \"PreviousTxnLgrSeq\": 1888920\n        }\n      }\n    ],\n    \"TransactionIndex\": 3,\n    \"TransactionResult\": \"tecINSUFFICIENT_FUNDS\"\n  },\n  \"hash\": \"376D09D2D001116D690B47E5AD21DD2AD33896CD3A99C60D584A711E503652B7\",\n  \"ledger_index\": 1888920,\n  \"date\": \"2022-05-06T19:59:52Z\"\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/NFTokenAcceptOffer/test/mock_data/NFTokenAcceptOffer_Sell.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rfFRmXUR1yfxeUfXj7WwKhETrtToYx1hYh\",\n    \"Fee\": \"12\",\n    \"Flags\": 0,\n    \"LastLedgerSequence\": 1889209,\n    \"NFTokenSellOffer\": \"505E7F1E1EA989C0B0196AB7F503ACACAC7A9640C27B58A5E3C9DD31E88848D4\",\n    \"Sequence\": 1166479,\n    \"SigningPubKey\": \"EDB9A1F05A7A91250ECB784754F3BEC3A76C3DAB34F28FAC570798EC0B0817407D\",\n    \"TransactionType\": \"NFTokenAcceptOffer\",\n    \"TxnSignature\": \"53275DA6103CC8CFFFE014305D9934F317F4DCC0A3472B064F5BFAE58F3136D9C6CD33A568688FE2C490A52025E4466939B749B067B6929CD619C6CE62BA150C\",\n    \"date\": \"2022-05-06T20:13:30Z\"\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rfFRmXUR1yfxeUfXj7WwKhETrtToYx1hYh\",\n            \"Balance\": \"9999997732\",\n            \"Flags\": 0,\n            \"OwnerCount\": 11,\n            \"Sequence\": 1166480\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"471307512702DC1933C63B795519B8BF08BC4EAD840D87BD84AA98A1EB90DDF6\",\n          \"PreviousFields\": {\n            \"Balance\": \"9999997846\",\n            \"Sequence\": 1166479\n          },\n          \"PreviousTxnID\": \"3328F7B354E5CDFEA6AB076740482657BE1A2FE93060B591A5B42846E7667270\",\n          \"PreviousTxnLgrSeq\": 1889190\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"NFTokens\": [\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"00080000E7F5BAC19E99193969DAC1452B90558C1F9D5C6D0000099B00000000\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"00080000E7F5BAC19E99193969DAC1452B90558C1F9D5C6D16E5DA9C00000001\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"00080000E7F5BAC19E99193969DAC1452B90558C1F9D5C6D2DCBAB9D00000002\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"00080000E7F5BAC19E99193969DAC1452B90558C1F9D5C6D44B17C9E00000003\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C0000099B00000000\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C0A85CBBC00000022\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C216B9CBF00000023\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              }\n            ]\n          },\n          \"LedgerEntryType\": \"NFTokenPage\",\n          \"LedgerIndex\": \"4AC8FAD7D35E374F513CA5A7D12AC2029CBB4944FFFFFFFFFFFFFFFFFFFFFFFF\",\n          \"PreviousFields\": {\n            \"NFTokens\": [\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"00080000E7F5BAC19E99193969DAC1452B90558C1F9D5C6D0000099B00000000\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"00080000E7F5BAC19E99193969DAC1452B90558C1F9D5C6D16E5DA9C00000001\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"00080000E7F5BAC19E99193969DAC1452B90558C1F9D5C6D2DCBAB9D00000002\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"00080000E7F5BAC19E99193969DAC1452B90558C1F9D5C6D44B17C9E00000003\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C0000099B00000000\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C0A85CBBC00000022\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              }\n            ]\n          },\n          \"PreviousTxnID\": \"8318D2B2FEF3E2A730BD4FC2DFE471C3766739868778A04E7D80E14F3A3F0E6E\",\n          \"PreviousTxnLgrSeq\": 1889166\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Amount\": \"102\",\n            \"Flags\": 1,\n            \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C216B9CBF00000023\",\n            \"NFTokenOfferNode\": \"0\",\n            \"Owner\": \"r9AExd6v3keXaXa3nXAMHHcP9nWy9Aef2g\",\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"7D78020F85A1781BD4E551790D33E7290D7A0D2072324D65CAE68AD74CD15E45\",\n            \"PreviousTxnLgrSeq\": 1889190\n          },\n          \"LedgerEntryType\": \"NFTokenOffer\",\n          \"LedgerIndex\": \"505E7F1E1EA989C0B0196AB7F503ACACAC7A9640C27B58A5E3C9DD31E88848D4\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"NFTokens\": [\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C38516DBE00000024\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C3C7172B500000019\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C409177A80000000E\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C44B17C9E00000003\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C4F373EC100000025\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C535743B40000001A\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C577748AB0000000F\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C5B974D9F00000004\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C661D0FC000000026\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C6A3D14B70000001B\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C6E5D19AA00000010\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C727D1EA100000005\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C7D02E0C300000027\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C8122E5B60000001C\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C8542EAAD00000011\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              }\n            ],\n            \"NextPageMin\": \"6203F49C21D5D6E022CB16DE3538F248662FC73CFFFFFFFFFFFFFFFFFFFFFFFF\"\n          },\n          \"LedgerEntryType\": \"NFTokenPage\",\n          \"LedgerIndex\": \"6203F49C21D5D6E022CB16DE3538F248662FC73C662FC73C8962EFA000000006\",\n          \"PreviousFields\": {\n            \"NFTokens\": [\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C216B9CBF00000023\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C38516DBE00000024\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C3C7172B500000019\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C409177A80000000E\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C44B17C9E00000003\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C4F373EC100000025\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C535743B40000001A\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C577748AB0000000F\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C5B974D9F00000004\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C661D0FC000000026\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C6A3D14B70000001B\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C6E5D19AA00000010\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C727D1EA100000005\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C7D02E0C300000027\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C8122E5B60000001C\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C8542EAAD00000011\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              }\n            ]\n          },\n          \"PreviousTxnID\": \"8318D2B2FEF3E2A730BD4FC2DFE471C3766739868778A04E7D80E14F3A3F0E6E\",\n          \"PreviousTxnLgrSeq\": 1889166\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 2,\n            \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C216B9CBF00000023\",\n            \"RootIndex\": \"AAD0CD65F5E4B4E54448973E81605DC53F2D063379E5CE5831E6F9220F79638C\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"AAD0CD65F5E4B4E54448973E81605DC53F2D063379E5CE5831E6F9220F79638C\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"r9AExd6v3keXaXa3nXAMHHcP9nWy9Aef2g\",\n            \"RootIndex\": \"AD6F3AF6156005C0482079B801CC331F212FDE722B4F0714B0563173F303C345\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"AD6F3AF6156005C0482079B801CC331F212FDE722B4F0714B0563173F303C345\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r9AExd6v3keXaXa3nXAMHHcP9nWy9Aef2g\",\n            \"Balance\": \"10000000004\",\n            \"BurnedNFTokens\": 6,\n            \"Flags\": 0,\n            \"MintedNFTokens\": 42,\n            \"OwnerCount\": 10,\n            \"Sequence\": 1166489\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"BE121B82D5812149D633F605EB07265A80B762A365CE94883089FEEE4B955701\",\n          \"PreviousFields\": {\n            \"Balance\": \"9999999902\",\n            \"OwnerCount\": 11\n          },\n          \"PreviousTxnID\": \"7D78020F85A1781BD4E551790D33E7290D7A0D2072324D65CAE68AD74CD15E45\",\n          \"PreviousTxnLgrSeq\": 1889190\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tesSUCCESS\",\n    \"nftoken_id\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C216B9CBF00000023\"\n  },\n  \"hash\": \"553922B202932DD500C6E0D6905BA1D8ACC0DF746519DD6AAA724AF70D23F1E6\",\n  \"ledger_index\": 1889191,\n  \"date\": \"2022-05-06T20:13:30Z\"\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/NFTokenAcceptOffer/types.ts",
    "content": "import { ExplorerAmount } from '../../../types'\n\nexport interface NFTokenAcceptOfferInstructions {\n  acceptedOfferIDs: string[]\n  amount?: ExplorerAmount\n  tokenID?: string\n  seller?: string\n  buyer?: string\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/NFTokenBurn/Simple.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport type { NFTokenBurn } from 'xrpl'\nimport { SimpleRow } from '../SimpleRow'\nimport { TransactionSimpleComponent, TransactionSimpleProps } from '../types'\nimport { NFTokenLink } from '../../NFTokenLink'\nimport { Account } from '../../Account'\n\nexport const Simple: TransactionSimpleComponent = ({\n  data,\n}: TransactionSimpleProps<NFTokenBurn>) => {\n  const { NFTokenID, Owner } = data.instructions\n  const { t } = useTranslation()\n\n  return (\n    <>\n      <SimpleRow label={t('token_id')} className=\"dt\" data-testid=\"token-id\">\n        <NFTokenLink tokenID={NFTokenID} />\n      </SimpleRow>\n      {Owner && (\n        <SimpleRow label={t('owner')} data-testid=\"owner\">\n          <Account account={Owner} />\n        </SimpleRow>\n      )}\n    </>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/NFTokenBurn/index.ts",
    "content": "import {\n  TransactionAction,\n  TransactionCategory,\n  TransactionMapping,\n} from '../types'\n\nimport { Simple } from './Simple'\n\nexport const NFTokenBurnTransaction: TransactionMapping = {\n  Simple,\n  action: TransactionAction.CANCEL,\n  category: TransactionCategory.NFT,\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/NFTokenBurn/test/NFTokenBurnSimple.test.tsx",
    "content": "import {\n  createSimpleRenderFactory,\n  expectSimpleRowText,\n  expectSimpleRowNotToExist,\n} from '../../test'\nimport { Simple } from '../Simple'\nimport transaction from './mock_data/NFTokenBurn.json'\nimport transactionByIssuer from './mock_data/NFTokenBurnByIssuer.json'\n\nconst renderComponent = createSimpleRenderFactory(Simple)\n\ndescribe('NFTokenBurn', () => {\n  it('handles NFTokenBurn simple view ', () => {\n    const { container, unmount } = renderComponent(transaction)\n    expectSimpleRowText(\n      container,\n      'token-id',\n      '000800006203F49C21D5D6E022CB16DE3538F248662FC73C29ABA6A90000000D',\n    )\n    expectSimpleRowNotToExist(container, 'owner')\n    unmount()\n  })\n\n  it('handles NFTokenBurn when the burner is not the owner', () => {\n    const { container, unmount } = renderComponent(transactionByIssuer)\n    expectSimpleRowText(\n      container,\n      'token-id',\n      '00090000DF7682C6F61329B887798E2ABB518BF1C923F4010000099B00000000',\n    )\n    expectSimpleRowText(\n      container,\n      'owner',\n      'rH3Jr1zwADrokm2niuJLEAD5NuoVwBvzpk',\n    )\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/NFTokenBurn/test/mock_data/NFTokenBurn.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rfFRmXUR1yfxeUfXj7WwKhETrtToYx1hYh\",\n    \"Fee\": \"12\",\n    \"Flags\": 0,\n    \"LastLedgerSequence\": 1799514,\n    \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C29ABA6A90000000D\",\n    \"Sequence\": 1166460,\n    \"SigningPubKey\": \"EDB9A1F05A7A91250ECB784754F3BEC3A76C3DAB34F28FAC570798EC0B0817407D\",\n    \"TransactionType\": \"NFTokenBurn\",\n    \"TxnSignature\": \"A2D3B290DCE4287F87CC06FBC61D231B74FA9675E272560B6BE375FF571646383617B39311C5A2DDBB5BFC90159670B62387C9737612D1C81BF37E66E1A4B808\",\n    \"date\": \"2022-05-03T17:14:30Z\"\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rfFRmXUR1yfxeUfXj7WwKhETrtToYx1hYh\",\n            \"Balance\": \"9999998264\",\n            \"Flags\": 0,\n            \"OwnerCount\": 2,\n            \"Sequence\": 1166461\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"471307512702DC1933C63B795519B8BF08BC4EAD840D87BD84AA98A1EB90DDF6\",\n          \"PreviousFields\": {\n            \"Balance\": \"9999998276\",\n            \"Sequence\": 1166460\n          },\n          \"PreviousTxnID\": \"21C60F255B29D0034B9EBA2ED1F7523635C61DED1D6BDBCFFD67703C45F7072D\",\n          \"PreviousTxnLgrSeq\": 1799495\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"NFTokens\": [\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"00080000E7F5BAC19E99193969DAC1452B90558C1F9D5C6D0000099B00000000\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"00080000E7F5BAC19E99193969DAC1452B90558C1F9D5C6D16E5DA9C00000001\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"00080000E7F5BAC19E99193969DAC1452B90558C1F9D5C6D2DCBAB9D00000002\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"00080000E7F5BAC19E99193969DAC1452B90558C1F9D5C6D44B17C9E00000003\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C0000099B00000000\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              }\n            ]\n          },\n          \"LedgerEntryType\": \"NFTokenPage\",\n          \"LedgerIndex\": \"4AC8FAD7D35E374F513CA5A7D12AC2029CBB4944FFFFFFFFFFFFFFFFFFFFFFFF\",\n          \"PreviousFields\": {\n            \"NFTokens\": [\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"00080000E7F5BAC19E99193969DAC1452B90558C1F9D5C6D0000099B00000000\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"00080000E7F5BAC19E99193969DAC1452B90558C1F9D5C6D16E5DA9C00000001\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"00080000E7F5BAC19E99193969DAC1452B90558C1F9D5C6D2DCBAB9D00000002\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"00080000E7F5BAC19E99193969DAC1452B90558C1F9D5C6D44B17C9E00000003\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C0000099B00000000\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C29ABA6A90000000D\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              }\n            ]\n          },\n          \"PreviousTxnID\": \"21C60F255B29D0034B9EBA2ED1F7523635C61DED1D6BDBCFFD67703C45F7072D\",\n          \"PreviousTxnLgrSeq\": 1799495\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r9AExd6v3keXaXa3nXAMHHcP9nWy9Aef2g\",\n            \"Balance\": \"10000000036\",\n            \"BurnedNFTokens\": 5,\n            \"Flags\": 0,\n            \"MintedNFTokens\": 26,\n            \"OwnerCount\": 2,\n            \"Sequence\": 1166461\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"BE121B82D5812149D633F605EB07265A80B762A365CE94883089FEEE4B955701\",\n          \"PreviousFields\": {\n            \"BurnedNFTokens\": 4\n          },\n          \"PreviousTxnID\": \"21C60F255B29D0034B9EBA2ED1F7523635C61DED1D6BDBCFFD67703C45F7072D\",\n          \"PreviousTxnLgrSeq\": 1799495\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tesSUCCESS\"\n  },\n  \"hash\": \"0804FB2EA692C6095DD44445262B4D175A2EFCDE8D8F90518C7DC4C34986CB42\",\n  \"ledger_index\": 1799496,\n  \"date\": \"2022-05-03T17:14:30Z\"\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/NFTokenBurn/test/mock_data/NFTokenBurnByIssuer.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rM4ZChGM4VY6dXMgDndBfhwarVngLPhJZZ\",\n    \"Fee\": \"10\",\n    \"Flags\": 0,\n    \"LastLedgerSequence\": 25937903,\n    \"NFTokenID\": \"00090000DF7682C6F61329B887798E2ABB518BF1C923F4010000099B00000000\",\n    \"Owner\": \"rH3Jr1zwADrokm2niuJLEAD5NuoVwBvzpk\",\n    \"Sequence\": 25937877,\n    \"SigningPubKey\": \"ED68F374C09FCE011F3CDF457C7C1D497808C0BC46A06D9A3D383A89D9BEE459DB\",\n    \"TransactionType\": \"NFTokenBurn\",\n    \"TxnSignature\": \"F16DAF30F6E50D2E13708611A39A08FC1218BB1E03EB25C7A8062AE789670C0A1B7A8592DCE971DE9C264B550DF01549D5459CCB8BF82E350AA1C1EC386E2F04\",\n    \"date\": 1675959383000\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"NFTokens\": [\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"00090000DF7682C6F61329B887798E2ABB518BF1C923F4010000099B00000000\",\n                  \"URI\": \"68747470733A2F2F7872706C2E6F7267\"\n                }\n              }\n            ],\n            \"PreviousTxnID\": \"1BADC2BC91690540A45A156BFE60FBE9291019B413CAA4CD7AD821E3BEAB372B\",\n            \"PreviousTxnLgrSeq\": 25937882\n          },\n          \"LedgerEntryType\": \"NFTokenPage\",\n          \"LedgerIndex\": \"B0E320B82A567FB451C6BBB11AB22E620470ACB5FFFFFFFFFFFFFFFFFFFFFFFF\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rM4ZChGM4VY6dXMgDndBfhwarVngLPhJZZ\",\n            \"Balance\": \"309999970\",\n            \"BurnedNFTokens\": 1,\n            \"Flags\": 0,\n            \"MintedNFTokens\": 1,\n            \"OwnerCount\": 0,\n            \"Sequence\": 25937878\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"CF5FF4B703D136DE49F9BEEA686005656FA032A83596C624169D93A99E7A716B\",\n          \"PreviousFields\": {\n            \"Balance\": \"309999980\",\n            \"Sequence\": 25937877\n          },\n          \"PreviousTxnID\": \"1BADC2BC91690540A45A156BFE60FBE9291019B413CAA4CD7AD821E3BEAB372B\",\n          \"PreviousTxnLgrSeq\": 25937882\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rH3Jr1zwADrokm2niuJLEAD5NuoVwBvzpk\",\n            \"Balance\": \"289999990\",\n            \"Flags\": 0,\n            \"OwnerCount\": 0,\n            \"Sequence\": 25937877\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"D34DA06E64E4389D308E0DF4135BB601B3EA434565BD1CDF852474674D8CF52C\",\n          \"PreviousFields\": {\n            \"OwnerCount\": 1\n          },\n          \"PreviousTxnID\": \"1BADC2BC91690540A45A156BFE60FBE9291019B413CAA4CD7AD821E3BEAB372B\",\n          \"PreviousTxnLgrSeq\": 25937882\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tesSUCCESS\"\n  },\n  \"hash\": \"9D9B5483BA1893E9C2767AFAFDE201FF370E9EBDFFD07DA4382D8620823DF872\",\n  \"ledger_index\": 25937884,\n  \"date\": 1675959383000\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/NFTokenCancelOffer/Simple.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { Account } from '../../Account'\nimport { SimpleRow } from '../SimpleRow'\nimport { Amount } from '../../Amount'\nimport { NFTokenCancelOfferInstructions } from './types'\nimport { TransactionSimpleComponent, TransactionSimpleProps } from '../types'\nimport { NFTokenLink } from '../../NFTokenLink'\n\nexport const Simple: TransactionSimpleComponent = ({\n  data,\n}: TransactionSimpleProps<NFTokenCancelOfferInstructions>) => {\n  const { cancelledOffers } = data.instructions\n  const { t } = useTranslation()\n\n  return (\n    <>\n      {cancelledOffers.map(({ amount, offerID, tokenID, offerer }) => (\n        <>\n          <SimpleRow\n            label={t('offer_index')}\n            className=\"dt\"\n            data-testid=\"offer-id\"\n          >\n            {offerID}\n          </SimpleRow>\n          <SimpleRow\n            label={t('token_id')}\n            className=\"dt\"\n            data-testid=\"token-id\"\n          >\n            <NFTokenLink tokenID={tokenID} />\n          </SimpleRow>\n          <SimpleRow label={t('amount')} data-testid=\"amount\">\n            <Amount value={amount} displayIssuer />\n          </SimpleRow>\n          <SimpleRow label={t('offerer')} data-testid=\"offerer\">\n            <Account account={offerer} />\n          </SimpleRow>\n        </>\n      ))}\n    </>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/NFTokenCancelOffer/index.ts",
    "content": "import {\n  TransactionAction,\n  TransactionCategory,\n  TransactionMapping,\n} from '../types'\n\nimport { Simple } from './Simple'\nimport { parser } from './parser'\n\nexport const NFTokenCancelOfferTransaction: TransactionMapping = {\n  Simple,\n  action: TransactionAction.CANCEL,\n  category: TransactionCategory.NFT,\n  parser,\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/NFTokenCancelOffer/parser.ts",
    "content": "import type { NFTokenCancelOffer } from 'xrpl'\nimport { NFTokenCancelOfferInstructions } from './types'\nimport { TransactionParser } from '../types'\nimport { formatAmount } from '../../../../../rippled/lib/txSummary/formatAmount'\n\nexport const parser: TransactionParser<\n  NFTokenCancelOffer,\n  NFTokenCancelOfferInstructions\n> = (_, meta) => {\n  const cancelledOffers = meta.AffectedNodes.filter(\n    (node: any) => node.DeletedNode?.LedgerEntryType === 'NFTokenOffer',\n  ).map((node: any) => ({\n    offerID: meta.offer_id,\n    amount: formatAmount(node.DeletedNode.FinalFields.Amount),\n    tokenID: node.DeletedNode.FinalFields.NFTokenID,\n    offerer: node.DeletedNode.FinalFields.Owner,\n  }))\n\n  return {\n    cancelledOffers,\n  }\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/NFTokenCancelOffer/test/NFTokenCancelOfferSimple.test.tsx",
    "content": "import { BrowserRouter as Router } from 'react-router'\nimport { render } from '@testing-library/react'\nimport { I18nextProvider } from 'react-i18next'\nimport { QueryClientProvider } from 'react-query'\nimport { Simple as NFTokenCancelOffer } from '../Simple'\nimport transaction from './mock_data/NFTokenCancelOffer.json'\nimport summarizeTransaction from '../../../../../../rippled/lib/txSummary'\nimport i18n from '../../../../../../i18n/testConfig'\nimport { queryClient } from '../../../../QueryClient'\n\ndescribe('NFTokenCancelOffer', () => {\n  it('handles NFTokenCancelOffer simple view ', () => {\n    const { container } = render(\n      <QueryClientProvider client={queryClient}>\n        <I18nextProvider i18n={i18n}>\n          <Router>\n            <NFTokenCancelOffer\n              data={summarizeTransaction(transaction, true).details!}\n            />\n          </Router>\n        </I18nextProvider>\n      </QueryClientProvider>,\n    )\n    expect(\n      container.querySelector('[data-testid=\"token-id\"] .value'),\n    ).toHaveTextContent(\n      '000800006203F49C21D5D6E022CB16DE3538F248662FC73C258BA1B200000018',\n    )\n    expect(\n      container.querySelector('[data-testid=\"offer-id\"] .value'),\n    ).toHaveTextContent(\n      '35F3D6D99548FA5F5315580FBF8BA6B15CAA2CAE93023D5CE4FDC130602BC5C3',\n    )\n    expect(\n      container.querySelector('[data-testid=\"amount\"] .value'),\n    ).toHaveTextContent('$100.00 USD.r9AExd6v3keXaXa3nXAMHHcP9nWy9Aef2g')\n    expect(\n      container.querySelector('[data-testid=\"offerer\"] .value'),\n    ).toHaveTextContent('r9AExd6v3keXaXa3nXAMHHcP9nWy9Aef2g')\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/NFTokenCancelOffer/test/mock_data/NFTokenCancelOffer.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"r9AExd6v3keXaXa3nXAMHHcP9nWy9Aef2g\",\n    \"Fee\": \"12\",\n    \"Flags\": 0,\n    \"LastLedgerSequence\": 1799509,\n    \"NFTokenOffers\": [\n      \"35F3D6D99548FA5F5315580FBF8BA6B15CAA2CAE93023D5CE4FDC130602BC5C3\"\n    ],\n    \"Sequence\": 1166455,\n    \"SigningPubKey\": \"ED475D1452031E8F9641AF1631519A58F7B8681E172E4838AA0E59408ADA1727DD\",\n    \"TransactionType\": \"NFTokenCancelOffer\",\n    \"TxnSignature\": \"F144590035403E17E188F0811AC0B29C9722894DB2CF6B947D1766DED10BBAB2EBEB21C286557F215B116A38BAE549EA484590313681C700B7BB32C732943D08\",\n    \"date\": \"2022-05-03T17:14:11Z\"\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Amount\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"r9AExd6v3keXaXa3nXAMHHcP9nWy9Aef2g\",\n              \"value\": \"100\"\n            },\n            \"Flags\": 1,\n            \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C258BA1B200000018\",\n            \"NFTokenOfferNode\": \"0\",\n            \"Owner\": \"r9AExd6v3keXaXa3nXAMHHcP9nWy9Aef2g\",\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"EE7864D17CF77C9BD7F1F9047C8E61F3AC306AFDDE53AB20D6CB6C06B336691B\",\n            \"PreviousTxnLgrSeq\": 1799491\n          },\n          \"LedgerEntryType\": \"NFTokenOffer\",\n          \"LedgerIndex\": \"35F3D6D99548FA5F5315580FBF8BA6B15CAA2CAE93023D5CE4FDC130602BC5C3\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"r9AExd6v3keXaXa3nXAMHHcP9nWy9Aef2g\",\n            \"RootIndex\": \"AD6F3AF6156005C0482079B801CC331F212FDE722B4F0714B0563173F303C345\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"AD6F3AF6156005C0482079B801CC331F212FDE722B4F0714B0563173F303C345\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r9AExd6v3keXaXa3nXAMHHcP9nWy9Aef2g\",\n            \"Balance\": \"9999999896\",\n            \"BurnedNFTokens\": 3,\n            \"Flags\": 0,\n            \"MintedNFTokens\": 25,\n            \"OwnerCount\": 2,\n            \"Sequence\": 1166456\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"BE121B82D5812149D633F605EB07265A80B762A365CE94883089FEEE4B955701\",\n          \"PreviousFields\": {\n            \"Balance\": \"9999999908\",\n            \"OwnerCount\": 3,\n            \"Sequence\": 1166455\n          },\n          \"PreviousTxnID\": \"EE7864D17CF77C9BD7F1F9047C8E61F3AC306AFDDE53AB20D6CB6C06B336691B\",\n          \"PreviousTxnLgrSeq\": 1799491\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 2,\n            \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C258BA1B200000018\",\n            \"RootIndex\": \"F9544E936304C5F72F89E2560ED23CBA2CCB8AA4ACD77B42093ACB86C95E34EB\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"F9544E936304C5F72F89E2560ED23CBA2CCB8AA4ACD77B42093ACB86C95E34EB\"\n        }\n      }\n    ],\n    \"TransactionIndex\": 2,\n    \"TransactionResult\": \"tesSUCCESS\",\n    \"offer_id\": \"35F3D6D99548FA5F5315580FBF8BA6B15CAA2CAE93023D5CE4FDC130602BC5C3\"\n  },\n  \"hash\": \"AF12B2694896ADE0F93C8C3D09602B242F08C50854A0C600E0E7A2E18586C8C3\",\n  \"ledger_index\": 1799491,\n  \"date\": \"2022-05-03T17:14:11Z\"\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/NFTokenCancelOffer/types.ts",
    "content": "export interface NFTokenCancelOfferInstructions {\n  cancelledOffers: {\n    amount: { currency: string; amount: number; issuer: string }\n    offerID: string\n    tokenID: string\n    offerer: string\n  }[]\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/NFTokenCreateOffer/Simple.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { Account } from '../../Account'\nimport { Amount } from '../../Amount'\nimport { SimpleRow } from '../SimpleRow'\nimport { TransactionSimpleComponent, TransactionSimpleProps } from '../types'\nimport { NFTokenCreateOfferInstructions } from './types'\nimport { NFTokenLink } from '../../NFTokenLink'\n\nexport const Simple: TransactionSimpleComponent = ({\n  data,\n}: TransactionSimpleProps<NFTokenCreateOfferInstructions>) => {\n  const { offerID, account, amount, tokenID, isSellOffer, owner, destination } =\n    data.instructions\n  const { t } = useTranslation()\n\n  return (\n    <>\n      {offerID && (\n        <SimpleRow label={t('offer_index')} data-testid=\"offer-id\">\n          {offerID}\n        </SimpleRow>\n      )}\n      <SimpleRow\n        label={isSellOffer ? t('seller') : t('buyer')}\n        data-testid=\"buyer-or-seller\"\n      >\n        <Account account={account} />\n      </SimpleRow>\n      {destination && (\n        <SimpleRow label={t('destination')} data-testid=\"destination\">\n          <Account account={destination} />\n        </SimpleRow>\n      )}\n      {!isSellOffer && owner && (\n        <SimpleRow label={t('owner')} data-testid=\"owner\">\n          <Account account={owner} />\n        </SimpleRow>\n      )}\n      <SimpleRow label={t('token_id')} className=\"dt\" data-testid=\"token-id\">\n        <NFTokenLink tokenID={tokenID} />\n      </SimpleRow>\n      <SimpleRow label={t('amount')} data-testid=\"amount\">\n        <Amount value={amount} displayIssuer />\n      </SimpleRow>\n    </>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/NFTokenCreateOffer/index.ts",
    "content": "import {\n  TransactionAction,\n  TransactionCategory,\n  TransactionMapping,\n} from '../types'\n\nimport { Simple } from './Simple'\nimport { parser } from './parser'\n\nexport const NFTokenCreateOfferTransaction: TransactionMapping = {\n  Simple,\n  action: TransactionAction.CREATE,\n  category: TransactionCategory.NFT,\n  parser,\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/NFTokenCreateOffer/parser.ts",
    "content": "import type { NFTokenCreateOffer } from 'xrpl'\nimport { NFTokenCreateOfferInstructions } from './types'\nimport { TransactionParser } from '../types'\nimport { formatAmount } from '../../../../../rippled/lib/txSummary/formatAmount'\n\nexport const parser: TransactionParser<\n  NFTokenCreateOffer,\n  NFTokenCreateOfferInstructions\n> = (tx, meta) => {\n  const account = tx.Account\n  const amount = formatAmount(tx.Amount)\n  const tokenID = tx.NFTokenID\n  const isSellOffer = ((tx.Flags as number)! & 1) !== 0\n  const owner = tx.Owner\n  const offerID = meta.offer_id\n  const destination = tx.Destination\n\n  return {\n    account,\n    amount,\n    tokenID,\n    isSellOffer,\n    owner,\n    offerID,\n    destination,\n  }\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/NFTokenCreateOffer/test/NFTokenCreateOfferSimple.test.tsx",
    "content": "import { createSimpleRenderFactory, expectSimpleRowText } from '../../test'\nimport { Simple } from '../Simple'\nimport transactionBuy from './mock_data/NFTokenCreateOffer_Buy.json'\nimport transactionSell from './mock_data/NFTokenCreateOffer_Sell.json'\nimport transactionFailed from './mock_data/NFTokenCreateOfferFailed.json'\nimport transactionDestination from './mock_data/NFTokenCreateOfferDestination.json'\n\nconst renderComponent = createSimpleRenderFactory(Simple)\n\ndescribe('NFTokenCreateOffer', () => {\n  it('handles NFTokenCreateOffer buy simple view ', () => {\n    const { container, unmount } = renderComponent(transactionBuy)\n    expectSimpleRowText(\n      container,\n      'token-id',\n      '000800006203F49C21D5D6E022CB16DE3538F248662FC73C2DCBAB9D00000002',\n    )\n    expectSimpleRowText(\n      container,\n      'offer-id',\n      '3D1C297DA5B831267CCF692F8A023688D6A4BD5AFAE9A746D5C4E0B15D256B29',\n    )\n    expectSimpleRowText(\n      container,\n      'owner',\n      'r9AExd6v3keXaXa3nXAMHHcP9nWy9Aef2g',\n    )\n    expectSimpleRowText(container, 'amount', '\\uE9000.0001 XRP')\n    expect(\n      container.querySelector('[data-testid=\"buyer-or-seller\"] .label'),\n    ).toHaveTextContent('buyer')\n    expectSimpleRowText(\n      container,\n      'buyer-or-seller',\n      'rfFRmXUR1yfxeUfXj7WwKhETrtToYx1hYh',\n    )\n    expect(\n      container.querySelector('[data-testid=\"destination\"] .value'),\n    ).not.toBeInTheDocument()\n    unmount()\n  })\n\n  it('handles NFTokenCreateOffer sell simple view ', () => {\n    const { container, unmount } = renderComponent(transactionSell)\n    expectSimpleRowText(\n      container,\n      'token-id',\n      '000800006203F49C21D5D6E022CB16DE3538F248662FC73C29ABA6A90000000D',\n    )\n    expectSimpleRowText(\n      container,\n      'offer-id',\n      'F660CA62E16B8067649052E8FCE947049FC6EF0D8B42EF7E5819997EC5AE45B6',\n    )\n    expect(\n      container.querySelector('[data-testid=\"owner\"] .value'),\n    ).not.toBeInTheDocument()\n    expectSimpleRowText(\n      container,\n      'amount',\n      '$100.00 USD.r9AExd6v3keXaXa3nXAMHHcP9nWy9Aef2g',\n    )\n    expect(\n      container.querySelector('[data-testid=\"buyer-or-seller\"] .label'),\n    ).toHaveTextContent('seller')\n    expectSimpleRowText(\n      container,\n      'buyer-or-seller',\n      'r9AExd6v3keXaXa3nXAMHHcP9nWy9Aef2g',\n    )\n    expect(\n      container.querySelector('[data-testid=\"destination\"] .value'),\n    ).not.toBeInTheDocument()\n    unmount()\n  })\n\n  it('handles failed NFTokenCreateOffer transaction', () => {\n    const { container, unmount } = renderComponent(transactionFailed)\n    expectSimpleRowText(\n      container,\n      'token-id',\n      '00080000AC7377C74DD53E77C8161537F5EBF56B0CE8FD3BD392C2B800001702',\n    )\n    expect(\n      container.querySelector('[data-testid=\"offer-id\"] .value'),\n    ).not.toBeInTheDocument()\n    expect(\n      container.querySelector('[data-testid=\"owner\"] .value'),\n    ).not.toBeInTheDocument()\n    expectSimpleRowText(container, 'amount', '\\uE900500.00 XRP')\n    unmount()\n  })\n\n  it('handles NFTokenCreateOffer with destination', () => {\n    const { container, unmount } = renderComponent(transactionDestination)\n    expectSimpleRowText(\n      container,\n      'destination',\n      'rpdUbED32X3YXRPBGzSv8gMTJE66t3sji9',\n    )\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/NFTokenCreateOffer/test/mock_data/NFTokenCreateOfferDestination.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rpbjkoncKiv1LkPWShzZksqYPzKXmUhTW7\",\n    \"Amount\": {\n      \"currency\": \"5850554E4B000000000000000000000000000000\",\n      \"issuer\": \"rHEL3bM4RFsvF8kbQj3cya8YiDvjoEmxLq\",\n      \"value\": \"0.5\"\n    },\n    \"Destination\": \"rpdUbED32X3YXRPBGzSv8gMTJE66t3sji9\",\n    \"Fee\": \"3200\",\n    \"Flags\": 1,\n    \"LastLedgerSequence\": 75503875,\n    \"NFTokenID\": \"00081B581189F5687DBB7516339D6CCB5593D96622AD82DF0E4C932400000475\",\n    \"Sequence\": 75438831,\n    \"Signers\": [\n      {\n        \"Signer\": {\n          \"Account\": \"rpZqTPC8GvrSvEfFsUuHkmPCg29GdQuXhC\",\n          \"SigningPubKey\": \"EDFC78FE5C5F474985678DD821FCDD7F65F2F7CC5029E3D0BEB46C9B0D90C622FF\",\n          \"TxnSignature\": \"83DFD46E7BCC1ECCA7B90790CA20F1679D01515CD550DC0DB35D2CB58E944FAB7BDF094C3FD97AC96D427938C01548324CB6AB9B7DDA7010710410C2858E8304\"\n        }\n      }\n    ],\n    \"SigningPubKey\": \"\",\n    \"TransactionType\": \"NFTokenCreateOffer\",\n    \"date\": \"2022-11-03T13:52:11Z\",\n    \"warnings\": [\n      {\n        \"id\": 1004,\n        \"message\": \"This is a reporting server.  The default behavior of a reporting server is to only return validated data. If you are looking for not yet validated data, include \\\"ledger_index : current\\\" in your request, which will cause this server to forward the request to a p2p node. If the forward is successful the response will include \\\"forwarded\\\" : \\\"true\\\"\"\n      }\n    ]\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"0\",\n            \"IndexPrevious\": \"49\",\n            \"Owner\": \"rpbjkoncKiv1LkPWShzZksqYPzKXmUhTW7\",\n            \"RootIndex\": \"DF6BE9CA7E98626513B669C0E8A916F5D828A55AF48DEAFE13A2AF7616C1CCAC\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"667B9C412FB987C3C539DD4A5EE74D461A163C9CBF389F8CA2A11DACDAFA2EC8\"\n        }\n      },\n      {\n        \"CreatedNode\": {\n          \"LedgerEntryType\": \"NFTokenOffer\",\n          \"LedgerIndex\": \"9B815A559A5CE9B7BD974F2465E12DACC2FB8CC073D1E7E1529DE84ADAB2CB3C\",\n          \"NewFields\": {\n            \"Amount\": {\n              \"currency\": \"5850554E4B000000000000000000000000000000\",\n              \"issuer\": \"rHEL3bM4RFsvF8kbQj3cya8YiDvjoEmxLq\",\n              \"value\": \"0.5\"\n            },\n            \"Destination\": \"rpdUbED32X3YXRPBGzSv8gMTJE66t3sji9\",\n            \"Flags\": 1,\n            \"NFTokenID\": \"00081B581189F5687DBB7516339D6CCB5593D96622AD82DF0E4C932400000475\",\n            \"Owner\": \"rpbjkoncKiv1LkPWShzZksqYPzKXmUhTW7\",\n            \"OwnerNode\": \"4a\"\n          }\n        }\n      },\n      {\n        \"CreatedNode\": {\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"F2DB05119B3C0256D30618BEB899023E9CFBFFF092F839E564B00B853B4F231A\",\n          \"NewFields\": {\n            \"Flags\": 2,\n            \"NFTokenID\": \"00081B581189F5687DBB7516339D6CCB5593D96622AD82DF0E4C932400000475\",\n            \"RootIndex\": \"F2DB05119B3C0256D30618BEB899023E9CFBFFF092F839E564B00B853B4F231A\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rpbjkoncKiv1LkPWShzZksqYPzKXmUhTW7\",\n            \"Balance\": \"24682484324\",\n            \"Domain\": \"68747470733A2F2F6D61726B6574706C6163652D6170692E6F6E7872702E636F6D2F6170692F6D657461646174612F\",\n            \"Flags\": 0,\n            \"MintedNFTokens\": 4567,\n            \"OwnerCount\": 2155,\n            \"Sequence\": 75438832\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"F67A0D5CA164FD7BF50CA0896B50C1C99A0E50EAFF996A4C3BC491FDED8AA296\",\n          \"PreviousFields\": {\n            \"Balance\": \"24682487524\",\n            \"OwnerCount\": 2154,\n            \"Sequence\": 75438831\n          },\n          \"PreviousTxnID\": \"E28BE8A4BF9E7F8C3E0492A1560CE98C228C3F2F496FAC94CD1E66BFF46CF5D5\",\n          \"PreviousTxnLgrSeq\": 75503864\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"FE217FC0DEF05A99601DDD35F61832DFB299EC845D6BD74EAEDCB82A804DEEB2\",\n          \"PreviousTxnID\": \"BE2ACA9B3CC2D5EF3D826E79690F28C1F8A90ACF6A0F262FD859F154ABE457BF\",\n          \"PreviousTxnLgrSeq\": 75503861\n        }\n      }\n    ],\n    \"TransactionIndex\": 3,\n    \"TransactionResult\": \"tesSUCCESS\"\n  },\n  \"hash\": \"C641C7D195330115AE973F309129F263AF1898F6F98449CAEA0F3E0C07449B33\",\n  \"ledger_index\": 75503866,\n  \"date\": \"2022-11-03T13:52:11Z\"\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/NFTokenCreateOffer/test/mock_data/NFTokenCreateOfferFailed.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rG5qYqxdmDmLkVnPrLcWKE6LYTMeFGhYy9\",\n    \"Amount\": \"500000000\",\n    \"Destination\": \"rpZqTPC8GvrSvEfFsUuHkmPCg29GdQuXhC\",\n    \"Fee\": \"3200\",\n    \"Flags\": 1,\n    \"LastLedgerSequence\": 75482570,\n    \"NFTokenID\": \"00080000AC7377C74DD53E77C8161537F5EBF56B0CE8FD3BD392C2B800001702\",\n    \"Sequence\": 74319468,\n    \"Signers\": [\n      {\n        \"Signer\": {\n          \"Account\": \"rpZqTPC8GvrSvEfFsUuHkmPCg29GdQuXhC\",\n          \"SigningPubKey\": \"EDFC78FE5C5F474985678DD821FCDD7F65F2F7CC5029E3D0BEB46C9B0D90C622FF\",\n          \"TxnSignature\": \"C193905FA6F5731C090147B8E2EB6D96A4B83BCDCEB5845A0D467D351254140C64F5158B7FF87F295FDFC816DB6019351233A26F0042539D908BC9D651274E03\"\n        }\n      }\n    ],\n    \"SigningPubKey\": \"\",\n    \"TransactionType\": \"NFTokenCreateOffer\",\n    \"date\": \"2022-11-02T14:57:11Z\",\n    \"warnings\": [\n      {\n        \"id\": 1004,\n        \"message\": \"This is a reporting server.  The default behavior of a reporting server is to only return validated data. If you are looking for not yet validated data, include \\\"ledger_index : current\\\" in your request, which will cause this server to forward the request to a p2p node. If the forward is successful the response will include \\\"forwarded\\\" : \\\"true\\\"\"\n      }\n    ]\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rG5qYqxdmDmLkVnPrLcWKE6LYTMeFGhYy9\",\n            \"Balance\": \"218159358161\",\n            \"Domain\": \"68747470733A2F2F6D61726B6574706C6163652D6170692E6F6E7872702E636F6D2F6170692F6D657461646174612F\",\n            \"Flags\": 0,\n            \"MintedNFTokens\": 6443,\n            \"OwnerCount\": 745,\n            \"Sequence\": 74319469\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"5707571AF2319C0203A9D25CF498F5672EACB4F38AE02327C3E3608175D91CA6\",\n          \"PreviousFields\": {\n            \"Balance\": \"218159361361\",\n            \"Sequence\": 74319468\n          },\n          \"PreviousTxnID\": \"BE9714F3CB7A97E901953FB850BB58A0A5D2C39B71F30CF6C80DF86C87327283\",\n          \"PreviousTxnLgrSeq\": 75482561\n        }\n      }\n    ],\n    \"TransactionIndex\": 59,\n    \"TransactionResult\": \"tecNO_ENTRY\"\n  },\n  \"hash\": \"2C476AF454BA8D519675B01749A1B76D9E52E2CA6DD7CAA4BD3DBA02E415D528\",\n  \"ledger_index\": 75482561,\n  \"date\": \"2022-11-02T14:57:11Z\"\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/NFTokenCreateOffer/test/mock_data/NFTokenCreateOffer_Buy.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rfFRmXUR1yfxeUfXj7WwKhETrtToYx1hYh\",\n    \"Amount\": \"100\",\n    \"Fee\": \"12\",\n    \"Flags\": 0,\n    \"LastLedgerSequence\": 1888000,\n    \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C2DCBAB9D00000002\",\n    \"Owner\": \"r9AExd6v3keXaXa3nXAMHHcP9nWy9Aef2g\",\n    \"Sequence\": 1166462,\n    \"SigningPubKey\": \"EDB9A1F05A7A91250ECB784754F3BEC3A76C3DAB34F28FAC570798EC0B0817407D\",\n    \"TransactionType\": \"NFTokenCreateOffer\",\n    \"TxnSignature\": \"D9B8E95ACC258F881D423C723985047FB254D37E545684553492E0B5F68A11806EFBDE36E42413C41794E0F587CC0FA07BA728ED478CFAD0DA63311F3DD04E0C\",\n    \"date\": \"2022-05-06T19:12:51Z\"\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"CreatedNode\": {\n          \"LedgerEntryType\": \"NFTokenOffer\",\n          \"LedgerIndex\": \"3D1C297DA5B831267CCF692F8A023688D6A4BD5AFAE9A746D5C4E0B15D256B29\",\n          \"NewFields\": {\n            \"Amount\": \"100\",\n            \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C2DCBAB9D00000002\",\n            \"Owner\": \"rfFRmXUR1yfxeUfXj7WwKhETrtToYx1hYh\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rfFRmXUR1yfxeUfXj7WwKhETrtToYx1hYh\",\n            \"Balance\": \"9999998240\",\n            \"Flags\": 0,\n            \"OwnerCount\": 4,\n            \"Sequence\": 1166463\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"471307512702DC1933C63B795519B8BF08BC4EAD840D87BD84AA98A1EB90DDF6\",\n          \"PreviousFields\": {\n            \"Balance\": \"9999998252\",\n            \"OwnerCount\": 3,\n            \"Sequence\": 1166462\n          },\n          \"PreviousTxnID\": \"339BFFA30E1340CDD22D910AA079FCCD2B9F4614B996C92C248EAE027F64C9CE\",\n          \"PreviousTxnLgrSeq\": 1887921\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rfFRmXUR1yfxeUfXj7WwKhETrtToYx1hYh\",\n            \"RootIndex\": \"9F6DDE1956BC72B44EFEA1BD742C97B3A63D3FBDBAE139D595D580690399C860\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"9F6DDE1956BC72B44EFEA1BD742C97B3A63D3FBDBAE139D595D580690399C860\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 1,\n            \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C2DCBAB9D00000002\",\n            \"RootIndex\": \"CB119C8C6C0F9B3DDB02E330412430D34AD05D984F774E601D82C039DF6EF6CA\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"CB119C8C6C0F9B3DDB02E330412430D34AD05D984F774E601D82C039DF6EF6CA\"\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tesSUCCESS\",\n    \"offer_id\": \"3D1C297DA5B831267CCF692F8A023688D6A4BD5AFAE9A746D5C4E0B15D256B29\"\n  },\n  \"hash\": \"385DC0497AAF8061549A7DC04EB20C2B387A167792796F5806A13E0422125563\",\n  \"ledger_index\": 1887982,\n  \"date\": \"2022-05-06T19:12:51Z\"\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/NFTokenCreateOffer/test/mock_data/NFTokenCreateOffer_Sell.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"r9AExd6v3keXaXa3nXAMHHcP9nWy9Aef2g\",\n    \"Amount\": {\n      \"currency\": \"USD\",\n      \"issuer\": \"r9AExd6v3keXaXa3nXAMHHcP9nWy9Aef2g\",\n      \"value\": \"100\"\n    },\n    \"Fee\": \"12\",\n    \"Flags\": 1,\n    \"LastLedgerSequence\": 1799513,\n    \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C29ABA6A90000000D\",\n    \"Sequence\": 1166458,\n    \"SigningPubKey\": \"ED475D1452031E8F9641AF1631519A58F7B8681E172E4838AA0E59408ADA1727DD\",\n    \"TransactionType\": \"NFTokenCreateOffer\",\n    \"TxnSignature\": \"DAB95285F64A2E0B11E7688755C64CA3C10A638CB4991B02FFF18DF461D2FEE01BC62B4DE3FDEA35ACC82E1C1C5E0879786ED291553525FD4F600F5309B7FA09\",\n    \"date\": \"2022-05-03T17:14:22Z\"\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"CreatedNode\": {\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"01CBC3128E14D214746251242FC47F9144DB82DE05D68CAD5499C577F282430F\",\n          \"NewFields\": {\n            \"Flags\": 2,\n            \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C29ABA6A90000000D\",\n            \"RootIndex\": \"01CBC3128E14D214746251242FC47F9144DB82DE05D68CAD5499C577F282430F\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"r9AExd6v3keXaXa3nXAMHHcP9nWy9Aef2g\",\n            \"RootIndex\": \"AD6F3AF6156005C0482079B801CC331F212FDE722B4F0714B0563173F303C345\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"AD6F3AF6156005C0482079B801CC331F212FDE722B4F0714B0563173F303C345\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r9AExd6v3keXaXa3nXAMHHcP9nWy9Aef2g\",\n            \"Balance\": \"9999999960\",\n            \"BurnedNFTokens\": 4,\n            \"Flags\": 0,\n            \"MintedNFTokens\": 26,\n            \"OwnerCount\": 3,\n            \"Sequence\": 1166459\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"BE121B82D5812149D633F605EB07265A80B762A365CE94883089FEEE4B955701\",\n          \"PreviousFields\": {\n            \"Balance\": \"9999999972\",\n            \"OwnerCount\": 2,\n            \"Sequence\": 1166458\n          },\n          \"PreviousTxnID\": \"1CB12DE84CD9B989B06D5E062855DCE428A4308DA6762D63F7B78CC500A03024\",\n          \"PreviousTxnLgrSeq\": 1799495\n        }\n      },\n      {\n        \"CreatedNode\": {\n          \"LedgerEntryType\": \"NFTokenOffer\",\n          \"LedgerIndex\": \"F660CA62E16B8067649052E8FCE947049FC6EF0D8B42EF7E5819997EC5AE45B6\",\n          \"NewFields\": {\n            \"Amount\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"r9AExd6v3keXaXa3nXAMHHcP9nWy9Aef2g\",\n              \"value\": \"100\"\n            },\n            \"Flags\": 1,\n            \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C29ABA6A90000000D\",\n            \"Owner\": \"r9AExd6v3keXaXa3nXAMHHcP9nWy9Aef2g\"\n          }\n        }\n      }\n    ],\n    \"TransactionIndex\": 1,\n    \"TransactionResult\": \"tesSUCCESS\",\n    \"offer_id\": \"F660CA62E16B8067649052E8FCE947049FC6EF0D8B42EF7E5819997EC5AE45B6\"\n  },\n  \"hash\": \"47DCA082AE5920D672B32E63623B799899B91B77D68365711B07376E5ACFC8DB\",\n  \"ledger_index\": 1799495,\n  \"date\": \"2022-05-03T17:14:22Z\"\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/NFTokenCreateOffer/types.ts",
    "content": "import { ExplorerAmount } from '../../../types'\n\nexport interface NFTokenCreateOfferInstructions {\n  account: string\n  amount: ExplorerAmount\n  tokenID: string\n  isSellOffer: boolean\n  owner?: string\n  offerID: string\n  destination?: string\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/NFTokenMint/Simple.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { SimpleRow } from '../SimpleRow'\nimport { TransactionSimpleComponent, TransactionSimpleProps } from '../types'\nimport { NFTokenMintInstructions } from './types'\nimport { Account } from '../../Account'\nimport { useLanguage } from '../../../hooks'\nimport { localizeNumber } from '../../../utils'\nimport { NFTokenLink } from '../../NFTokenLink'\n\nexport const Simple: TransactionSimpleComponent = ({\n  data,\n}: TransactionSimpleProps<NFTokenMintInstructions>) => {\n  const { tokenID, tokenTaxon, uri, transferFee, issuer } = data.instructions\n  const { t } = useTranslation()\n  const language = useLanguage()\n  const formattedFee =\n    transferFee &&\n    `${localizeNumber((transferFee / 1000).toPrecision(5), language, {\n      minimumFractionDigits: 3,\n    })}%`\n\n  return (\n    <>\n      {tokenID && (\n        <SimpleRow label={t('token_id')} data-testid=\"token-id\">\n          <NFTokenLink tokenID={tokenID} />\n        </SimpleRow>\n      )}\n      <SimpleRow\n        label={t('token_taxon')}\n        className=\"dt\"\n        data-testid=\"token-taxon\"\n      >\n        {tokenTaxon}\n      </SimpleRow>\n      {uri && (\n        <SimpleRow label={t('uri')} className=\"dt\" data-testid=\"token-uri\">\n          {uri}\n        </SimpleRow>\n      )}\n      {transferFee && (\n        <SimpleRow label={t('transfer_fee')} data-testid=\"token-fee\">\n          {formattedFee}\n        </SimpleRow>\n      )}\n      {issuer && (\n        <SimpleRow label={t('issuer')} data-testid=\"token-issuer\">\n          <Account account={issuer} />\n        </SimpleRow>\n      )}\n    </>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/NFTokenMint/index.ts",
    "content": "import {\n  TransactionAction,\n  TransactionCategory,\n  TransactionMapping,\n} from '../types'\n\nimport { Simple } from './Simple'\nimport { parser } from './parser'\n\nexport const NFTokenMintTransaction: TransactionMapping = {\n  Simple,\n  action: TransactionAction.CREATE,\n  category: TransactionCategory.NFT,\n  parser,\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/NFTokenMint/parser.ts",
    "content": "import type { NFTokenMint } from 'xrpl'\nimport { NFTokenMintInstructions } from './types'\nimport { TransactionParser } from '../types'\n\nimport { convertHexToString } from '../../../../../rippled/lib/utils'\n\nexport const parser: TransactionParser<NFTokenMint, NFTokenMintInstructions> = (\n  tx,\n  meta,\n) => ({\n  tokenID: meta.nftoken_id,\n  tokenTaxon: tx.NFTokenTaxon,\n  uri: convertHexToString(tx.URI ?? undefined),\n  transferFee: tx.TransferFee,\n  issuer: tx.Issuer,\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/NFTokenMint/test/NFTokenMintSimple.test.tsx",
    "content": "import { BrowserRouter as Router } from 'react-router'\nimport { render } from '@testing-library/react'\nimport { I18nextProvider } from 'react-i18next'\nimport { Simple as NFTokenMint } from '../Simple'\nimport transactionModified2 from './mock_data/NFTokenMintModified2.json'\nimport transactionModified1Created1 from './mock_data/NFTokenMintModified1Created1.json'\nimport transactionModified2Created1 from './mock_data/NFTokenMintMostModified2Created1.json'\nimport transactionWithIssuer from './mock_data/NFTokenMintWithIssuer.json'\nimport transactionModified4Created1 from './mock_data/NFTokenMintModified4Created1.json'\nimport transactionNullURI from './mock_data/NFTokenMintNullURI.json'\nimport transactionFailed from './mock_data/NFTokenMintFailed.json'\nimport summarizeTransaction from '../../../../../../rippled/lib/txSummary'\nimport i18n from '../../../../../../i18n/testConfig'\nimport { convertHexToString } from '../../../../../../rippled/lib/utils'\nimport { expectSimpleRowText, expectSimpleRowNotToExist } from '../../test'\n\ndescribe('NFTokenMint', () => {\n  it('handles NFTokenMint that modified 2 nodes', () => {\n    const { container } = render(\n      <I18nextProvider i18n={i18n}>\n        <Router>\n          <NFTokenMint\n            data={summarizeTransaction(transactionModified2, true).details!}\n          />\n        </Router>\n      </I18nextProvider>,\n    )\n\n    expectSimpleRowText(\n      container,\n      'token-id',\n      '000800006203F49C21D5D6E022CB16DE3538F248662FC73C535743B40000001A',\n    )\n    expectSimpleRowText(container, 'token-taxon', '1')\n    expectSimpleRowText(container, 'token-uri', 'https://gregweisbrod.com')\n    expectSimpleRowNotToExist(container, 'token-fee')\n    expectSimpleRowNotToExist(container, 'token-issuer')\n  })\n\n  it('handles NFTokenMint that modified 1 node and created 1 node', () => {\n    const { container } = render(\n      <I18nextProvider i18n={i18n}>\n        <Router>\n          <NFTokenMint\n            data={\n              summarizeTransaction(transactionModified1Created1, true).details!\n            }\n          />\n        </Router>\n      </I18nextProvider>,\n    )\n\n    expectSimpleRowText(\n      container,\n      'token-id',\n      '0008000085D33F9C5481D3515029C9904D16F0109414D3A00000099A00000000',\n    )\n    expectSimpleRowText(container, 'token-taxon', '1')\n    expectSimpleRowText(container, 'token-uri', 'https://gregweisbrod.com')\n    expectSimpleRowNotToExist(container, 'token-fee')\n    expectSimpleRowNotToExist(container, 'token-issuer')\n  })\n\n  it('handles NFTokenMint that modified 2 nodes and created 1 node', () => {\n    const { container } = render(\n      <I18nextProvider i18n={i18n}>\n        <Router>\n          <NFTokenMint\n            data={\n              summarizeTransaction(transactionModified2Created1, true).details!\n            }\n          />\n        </Router>\n      </I18nextProvider>,\n    )\n\n    expectSimpleRowText(\n      container,\n      'token-id',\n      '0008000085D33F9C5481D3515029C9904D16F0109414D3A0DCBA29BA00000020',\n    )\n    expectSimpleRowText(container, 'token-taxon', '1')\n    expectSimpleRowText(container, 'token-uri', 'https://gregweisbrod.com')\n    expectSimpleRowNotToExist(container, 'token-fee')\n    expectSimpleRowNotToExist(container, 'token-issuer')\n  })\n\n  it('handles NFTokenMint with issuer', () => {\n    const { container } = render(\n      <I18nextProvider i18n={i18n}>\n        <Router>\n          <NFTokenMint\n            data={summarizeTransaction(transactionWithIssuer, true).details!}\n          />\n        </Router>\n      </I18nextProvider>,\n    )\n\n    expect(\n      container.querySelector('[data-testid=\"token-issuer\"] .value'),\n    ).toBeInTheDocument()\n    expectSimpleRowText(\n      container,\n      'token-id',\n      '000861A8A99B4460C2A4CCC90634FD9C7F51940AD9450BE30000099B00000000',\n    )\n    expectSimpleRowText(container, 'token-taxon', '0')\n    expectSimpleRowText(\n      container,\n      'token-uri',\n      'ipfs://bafybeigdyrzt5sfp7udm7hu76uh7y26nf4dfuylqabf3oclgtqy55fbzdi',\n    )\n    expectSimpleRowText(container, 'token-fee', '25.000%')\n    expectSimpleRowText(\n      container,\n      'token-issuer',\n      'rGToUZ1JjRUdv1wXNXKMFn2o4wTM2DLkpg',\n    )\n  })\n\n  it('handles NFTokenMint that modified 3 nodes', () => {\n    const { container } = render(\n      <I18nextProvider i18n={i18n}>\n        <Router>\n          <NFTokenMint\n            data={\n              summarizeTransaction(transactionModified4Created1, true).details!\n            }\n          />\n        </Router>\n      </I18nextProvider>,\n    )\n\n    expectSimpleRowText(\n      container,\n      'token-id',\n      '000D0000B9BD7D214128A91ECECE5FCFF9BDB0D043567C51CFBEC443000063A7',\n    )\n    expectSimpleRowText(container, 'token-taxon', '1')\n    expectSimpleRowText(\n      container,\n      'token-uri',\n      convertHexToString(\n        '516D5071416B3677777577796A71654C476F64665253375156774677394346736A6D363375485661556438387463',\n      ) as string,\n    )\n  })\n\n  it('handles NFTokenMint that has null URI', () => {\n    const { container } = render(\n      <I18nextProvider i18n={i18n}>\n        <Router>\n          <NFTokenMint\n            data={summarizeTransaction(transactionNullURI, true).details!}\n          />\n        </Router>\n      </I18nextProvider>,\n    )\n\n    expectSimpleRowNotToExist(container, 'token-uri')\n  })\n\n  it('handles NFTokenMint that failed', () => {\n    const { container } = render(\n      <I18nextProvider i18n={i18n}>\n        <Router>\n          <NFTokenMint\n            data={summarizeTransaction(transactionFailed, true).details!}\n          />\n        </Router>\n      </I18nextProvider>,\n    )\n\n    expectSimpleRowNotToExist(container, 'token-id')\n    expectSimpleRowText(container, 'token-taxon', '19')\n    expectSimpleRowText(\n      container,\n      'token-uri',\n      convertHexToString(\n        '516D5071416B3677777577796A71654C476F64665253375156774677394346736A6D363375485661556438387463',\n      ) as string,\n    )\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/NFTokenMint/test/mock_data/NFTokenMintFailed.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rXMART8usFd5kABXCayoP6ZfB35b4v43t\",\n    \"Fee\": \"12\",\n    \"Flags\": 8,\n    \"Issuer\": \"rnth4aXUdfZiMtkctrb1Xu5f6k67yE8FX6\",\n    \"LastLedgerSequence\": 75483624,\n    \"Memos\": [\n      {\n        \"Memo\": {\n          \"MemoData\": \"686474207073616F2F2F206D6E6172742E61722F202F6676696F776D2D6E5374702F622F6E6135656172393366316F393463666533363030696438366E62633230203564463972663662643A316C367037313720343835666F36743239\",\n          \"MemoType\": \"465474746D74696E74\"\n        }\n      }\n    ],\n    \"NFTokenTaxon\": 19,\n    \"Sequence\": 71996319,\n    \"SigningPubKey\": \"ED8BB649713ED492AE35B4B5CA745CCA55ADF8EF4CEDB2CC8BA4E28557E993AD2F\",\n    \"TransactionType\": \"NFTokenMint\",\n    \"TransferFee\": 5000,\n    \"TxnSignature\": \"F73CD6E691ADF5DFA04D736D64D080811320609E22534BDE29EF4A53F48C74F79F999A348AA88EDF5F95FF124A5F51D51EF541C60BBE083662FC21C4D2B6F60E\",\n    \"URI\": \"516D5071416B3677777577796A71654C476F64665253375156774677394346736A6D363375485661556438387463\",\n    \"date\": \"2022-11-02T16:05:10Z\",\n    \"warnings\": [\n      {\n        \"id\": 1004,\n        \"message\": \"This is a reporting server.  The default behavior of a reporting server is to only return validated data. If you are looking for not yet validated data, include \\\"ledger_index : current\\\" in your request, which will cause this server to forward the request to a p2p node. If the forward is successful the response will include \\\"forwarded\\\" : \\\"true\\\"\"\n      }\n    ]\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rXMART8usFd5kABXCayoP6ZfB35b4v43t\",\n            \"Balance\": \"10529594769\",\n            \"Domain\": \"786D6172742E617274\",\n            \"EmailHash\": \"D48190C85BE485DEA4CF4A56A8E93772\",\n            \"Flags\": 0,\n            \"OwnerCount\": 4904,\n            \"Sequence\": 71996320\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"141E89D379C6949CA34BCB244DCBB7A6B2889781B157119CCC05ED19DFB676B0\",\n          \"PreviousFields\": {\n            \"Balance\": \"10529594781\",\n            \"Sequence\": 71996319\n          },\n          \"PreviousTxnID\": \"EAA312672DEB6BFE65B07C50F857E892F16A2E25EC6DC3AC73ECED91F9B6E440\",\n          \"PreviousTxnLgrSeq\": 75483606\n        }\n      }\n    ],\n    \"TransactionIndex\": 65,\n    \"TransactionResult\": \"tecNO_PERMISSION\"\n  },\n  \"hash\": \"04708041CF404E122D76D009CA8F8D0BF5FD47D6784376CDA8FBE89FF59279E4\",\n  \"ledger_index\": 75483606,\n  \"date\": \"2022-11-02T16:05:10Z\"\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/NFTokenMint/test/mock_data/NFTokenMintModified1Created1.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rDUbAKGzBRs3ztKpfMiWUAB5nwtcmrnRVe\",\n    \"Fee\": \"12\",\n    \"Flags\": 8,\n    \"LastLedgerSequence\": 5605248,\n    \"NFTokenTaxon\": 1,\n    \"Sequence\": 5605209,\n    \"SigningPubKey\": \"022DAC45B8CC7B217C47A04957A6DF7FE2C8E4BA485808FCBBFC82E115260E1C32\",\n    \"TransactionType\": \"NFTokenMint\",\n    \"TxnSignature\": \"3045022100CF7620E25E4763FDC8746CEFAB250C2A6DB67FA581B58CAC928331A92C7661BB0220640A34137AC525CDA0D28A0E2B2832A418516C8B9CF1CFE36A8FC3AA966A66F1\",\n    \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\",\n    \"date\": \"2022-09-13T20:44:40Z\"\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rDUbAKGzBRs3ztKpfMiWUAB5nwtcmrnRVe\",\n            \"Balance\": \"9999999988\",\n            \"Flags\": 0,\n            \"MintedNFTokens\": 1,\n            \"OwnerCount\": 1,\n            \"Sequence\": 5605210\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"433D9E7BE08CC6D929AE1AE85150F8FADCE098529C41BD134A47DEA255D0DAAC\",\n          \"PreviousFields\": {\n            \"Balance\": \"10000000000\",\n            \"OwnerCount\": 0,\n            \"Sequence\": 5605209\n          },\n          \"PreviousTxnID\": \"EBCF09070D88E39E9C830355AEDA0F412E14345F08F29ED15EBFF2F4CA4500C2\",\n          \"PreviousTxnLgrSeq\": 5605209\n        }\n      },\n      {\n        \"CreatedNode\": {\n          \"LedgerEntryType\": \"NFTokenPage\",\n          \"LedgerIndex\": \"85D33F9C5481D3515029C9904D16F0109414D3A0FFFFFFFFFFFFFFFFFFFFFFFF\",\n          \"NewFields\": {\n            \"NFTokens\": [\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"0008000085D33F9C5481D3515029C9904D16F0109414D3A00000099A00000000\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              }\n            ]\n          }\n        }\n      }\n    ],\n    \"TransactionIndex\": 1,\n    \"TransactionResult\": \"tesSUCCESS\",\n    \"nftoken_id\": \"0008000085D33F9C5481D3515029C9904D16F0109414D3A00000099A00000000\"\n  },\n  \"hash\": \"B0AAA46053F2570200CA1E12978EFFBB124374276669CC3F68602A6788182172\",\n  \"ledger_index\": 5605230,\n  \"date\": \"2022-09-13T20:44:40Z\"\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/NFTokenMint/test/mock_data/NFTokenMintModified2.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"r9AExd6v3keXaXa3nXAMHHcP9nWy9Aef2g\",\n    \"Fee\": \"12\",\n    \"Flags\": 8,\n    \"LastLedgerSequence\": 1861454,\n    \"NFTokenTaxon\": 1,\n    \"Sequence\": 1166461,\n    \"SigningPubKey\": \"ED475D1452031E8F9641AF1631519A58F7B8681E172E4838AA0E59408ADA1727DD\",\n    \"TransactionType\": \"NFTokenMint\",\n    \"TxnSignature\": \"683F58F1355FD2EB02D3C84244FE76C67337B8E5D3FF496948A4A338880FD651649F8960251A3DC3A24E9F1B7D45EEA32DD06B2FD501B6CF7ED18C1FEB863F0E\",\n    \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\",\n    \"date\": \"2022-05-05T21:01:31Z\"\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"NFTokens\": [\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C2DCBAB9D00000002\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C3C7172B500000019\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C409177A80000000E\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C44B17C9E00000003\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C535743B40000001A\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C577748AB0000000F\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C5B974D9F00000004\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C6E5D19AA00000010\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C727D1EA100000005\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C8542EAAD00000011\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C8962EFA000000006\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C9C28BBAC00000012\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73CA048C0A300000007\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73CB30E8CAF00000013\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73CB72E91A200000008\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73CC9F45DAE00000014\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73CCE1462A500000009\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73CE0DA2EB100000015\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73CE4FA33A40000000A\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73CF7BFFFB000000016\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73CFBE004A70000000B\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              }\n            ]\n          },\n          \"LedgerEntryType\": \"NFTokenPage\",\n          \"LedgerIndex\": \"6203F49C21D5D6E022CB16DE3538F248662FC73CFFFFFFFFFFFFFFFFFFFFFFFF\",\n          \"PreviousFields\": {\n            \"NFTokens\": [\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C2DCBAB9D00000002\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C3C7172B500000019\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C409177A80000000E\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C44B17C9E00000003\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C577748AB0000000F\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C5B974D9F00000004\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C6E5D19AA00000010\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C727D1EA100000005\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C8542EAAD00000011\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C8962EFA000000006\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C9C28BBAC00000012\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73CA048C0A300000007\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73CB30E8CAF00000013\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73CB72E91A200000008\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73CC9F45DAE00000014\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73CCE1462A500000009\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73CE0DA2EB100000015\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73CE4FA33A40000000A\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73CF7BFFFB000000016\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73CFBE004A70000000B\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              }\n            ]\n          },\n          \"PreviousTxnID\": \"21C60F255B29D0034B9EBA2ED1F7523635C61DED1D6BDBCFFD67703C45F7072D\",\n          \"PreviousTxnLgrSeq\": 1799495\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r9AExd6v3keXaXa3nXAMHHcP9nWy9Aef2g\",\n            \"Balance\": \"10000000024\",\n            \"BurnedNFTokens\": 5,\n            \"Flags\": 0,\n            \"MintedNFTokens\": 27,\n            \"OwnerCount\": 2,\n            \"Sequence\": 1166462\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"BE121B82D5812149D633F605EB07265A80B762A365CE94883089FEEE4B955701\",\n          \"PreviousFields\": {\n            \"Balance\": \"10000000036\",\n            \"MintedNFTokens\": 26,\n            \"Sequence\": 1166461\n          },\n          \"PreviousTxnID\": \"0804FB2EA692C6095DD44445262B4D175A2EFCDE8D8F90518C7DC4C34986CB42\",\n          \"PreviousTxnLgrSeq\": 1799496\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tesSUCCESS\",\n    \"nftoken_id\": \"000800006203F49C21D5D6E022CB16DE3538F248662FC73C535743B40000001A\"\n  },\n  \"hash\": \"B9A20167DC30985ABD983912F29DE81CB4579FAF9672C9D68BEC5219C19C7E50\",\n  \"ledger_index\": 1861436,\n  \"date\": \"2022-05-05T21:01:31Z\"\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/NFTokenMint/test/mock_data/NFTokenMintModified4Created1.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rM9VmbyB9KMeZaWHEeDXcnNocvJ48B1eW1\",\n    \"Fee\": \"6854\",\n    \"Flags\": 13,\n    \"Issuer\": \"rHAfrQNDBohGbWuWTWzpJe1LQWyYVnbG2n\",\n    \"LastLedgerSequence\": 6453202,\n    \"NFTokenTaxon\": 1,\n    \"Sequence\": 6418448,\n    \"SigningPubKey\": \"033CE078DDAFF0B97A06F8ABBE7AD25B93634B3DFD3D4205889896C84DB4D15786\",\n    \"TransactionType\": \"NFTokenMint\",\n    \"TransferFee\": 0,\n    \"TxnSignature\": \"3045022100D79246DEFA5EAF939B55822E82665DE298D5D5C9789C3B1887F9BD97E982CB240220763C3F95802DFDD18D10DF67E8C9F56E5FA3E83F479D21F08ECC6A033FAA1483\",\n    \"URI\": \"516D5071416B3677777577796A71654C476F64665253375156774677394346736A6D363375485661556438387463\",\n    \"date\": \"2022-10-13T10:27:50Z\"\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rM9VmbyB9KMeZaWHEeDXcnNocvJ48B1eW1\",\n            \"Balance\": \"11192140712\",\n            \"Flags\": 0,\n            \"OwnerCount\": 660,\n            \"Sequence\": 6418449\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"C13B772A75D9CECF32319D6DF100F00090E638630ABE2F5C755AF03787DB3F9B\",\n          \"PreviousFields\": {\n            \"Balance\": \"11192147566\",\n            \"OwnerCount\": 659,\n            \"Sequence\": 6418448\n          },\n          \"PreviousTxnID\": \"22DCD81B1AACDCE6FDAD39CCAF9D9EFD25C29E13C28F32340673FBAE88D0A619\",\n          \"PreviousTxnLgrSeq\": 6453184\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"NFTokens\": [\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000D0000B9BD7D214128A91ECECE5FCFF9BDB0D043567C51CEE49E170000297B\",\n                  \"URI\": \"516D54367A533666696E6B655077373334684A4445707465697577744654476E46776458586137356E66626E5950\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000D0000B9BD7D214128A91ECECE5FCFF9BDB0D043567C51CEE645B000004616\",\n                  \"URI\": \"516D5445546E697A395864784563616564375147687466745847586A3670575965575A6A74797667616F6B4C3659\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000D0000B9BD7D214128A91ECECE5FCFF9BDB0D043567C51CEE7ED4D000062B1\",\n                  \"URI\": \"516D64455A614D69355542776F413964366F476455756D32587A6448576D7251586D345673474835434268594B59\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000D0000B9BD7D214128A91ECECE5FCFF9BDB0D043567C51CEEE88D100003A35\",\n                  \"URI\": \"516D55696A4D477A4A56377A42534577616772456373647567334D36716E557A33577857784E4274466B34665461\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000D0000B9BD7D214128A91ECECE5FCFF9BDB0D043567C51CEF03069000056D0\",\n                  \"URI\": \"516D65794433554845653477475A62637253744D6D66546466634A375054357475396652374150686E4B4D324C58\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000D0000B9BD7D214128A91ECECE5FCFF9BDB0D043567C51CEF6CBEE00002E54\",\n                  \"URI\": \"516D5639614A6E69665566707948525353383978447668375768524C4878713232686B4661356372786248635057\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000D0000B9BD7D214128A91ECECE5FCFF9BDB0D043567C51CEF8738B00004AEF\",\n                  \"URI\": \"516D544570483566596639716F476F795747693574724C6F317563314E5448377073374D714B7465565968356E71\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000D0000B9BD7D214128A91ECECE5FCFF9BDB0D043567C51CF00B6A800003F0E\",\n                  \"URI\": \"516D58355267784162575A506E41487776765470764B716271373656784B6E33356D474D38563148516A64624D54\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000D0000B9BD7D214128A91ECECE5FCFF9BDB0D043567C51CF025E4500005BA9\",\n                  \"URI\": \"516D627943344871744B6B7A4337653632506E47694C52365A5732577555616B7A7043674473694467364D614233\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000D0000B9BD7D214128A91ECECE5FCFF9BDB0D043567C51CF08F9C90000332D\",\n                  \"URI\": \"516D647674716A424452794B583346595247325432786F76333666387A7968583977626B417A377A66693467624E\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000D0000B9BD7D214128A91ECECE5FCFF9BDB0D043567C51CF0AA16200004FC8\",\n                  \"URI\": \"516D593878777A72787755796637777565534E647A526A5456577131616E7667747761356D783774574631663355\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000D0000B9BD7D214128A91ECECE5FCFF9BDB0D043567C51CF12E483000043E7\",\n                  \"URI\": \"516D4E7664504B57774D4B534D386D674358674861786748467441704A66623137487967344E6E397163474E6270\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000D0000B9BD7D214128A91ECECE5FCFF9BDB0D043567C51CF148C1C00006082\",\n                  \"URI\": \"516D567A765772316D51414D6E664336337346336B736145484B4D6F7334536B72724D6B58694D355A7870326474\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000D0000B9BD7D214128A91ECECE5FCFF9BDB0D043567C51CF1B27A000003806\",\n                  \"URI\": \"516D517A4B754841554B694559446D6E714E3152487455334B74454C696233375665725734355A74436835523536\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000D0000B9BD7D214128A91ECECE5FCFF9BDB0D043567C51CF1CCF3E000054A1\",\n                  \"URI\": \"516D6558696A5A387575755642423238767177383165784C6E58544263736279387235693864795A4E35436D567A\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000D0000B9BD7D214128A91ECECE5FCFF9BDB0D043567C51CF236AC100002C25\",\n                  \"URI\": \"516D5452356651465045597A6B444C31535954657238566D7871416138523641386D6B4E416E434E326555664336\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000D0000B9BD7D214128A91ECECE5FCFF9BDB0D043567C51CF25125A000048C0\",\n                  \"URI\": \"516D594471634C6A3275486E544C6E36584D4A4242726F313462515474383177434B334D3351727042736D324255\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000D0000B9BD7D214128A91ECECE5FCFF9BDB0D043567C51CF2D557B00003CDF\",\n                  \"URI\": \"516D5752556F53706252534C467A48594E4A7975484D31356F583679793854634A343369446B504B58324E547870\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000D0000B9BD7D214128A91ECECE5FCFF9BDB0D043567C51CF2EFD140000597A\",\n                  \"URI\": \"516D5752475150384B6834664564655A3169666858465356486779456F397255554D50477763597A38616E734A36\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000D0000B9BD7D214128A91ECECE5FCFF9BDB0D043567C51CF359898000030FE\",\n                  \"URI\": \"516D50456669586462616E376956547A58587573457A56526F5A754E78513844754D6B504B4D5074784448443752\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000D0000B9BD7D214128A91ECECE5FCFF9BDB0D043567C51CF37403500004D99\",\n                  \"URI\": \"516D637757594D356331704A62384E6E444C61645678424B385877557775514348444451654C7873465A72655945\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000D0000B9BD7D214128A91ECECE5FCFF9BDB0D043567C51CF3F8352000041B8\",\n                  \"URI\": \"516D5771617477566634487A435939445A386144485969473161596E5A5474394763714C596E5355377747636F45\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000D0000B9BD7D214128A91ECECE5FCFF9BDB0D043567C51CF412AEF00005E53\",\n                  \"URI\": \"516D5654637956776F57764276745A626B38456B4750454E4365634734735A68746D3477774D4348756E71633754\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000D0000B9BD7D214128A91ECECE5FCFF9BDB0D043567C51CF47C673000035D7\",\n                  \"URI\": \"516D5748486556723937554A7333635635534A73453876674836644E4E6237566F7944367A484479614C6B466747\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000D0000B9BD7D214128A91ECECE5FCFF9BDB0D043567C51CF496E0F00005272\",\n                  \"URI\": \"516D544A77684761553172666D454A6B326E5A5A424C42737A4A6E774B56794B705767724642365166676B566A72\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000D0000B9BD7D214128A91ECECE5FCFF9BDB0D043567C51CF500990000029F6\",\n                  \"URI\": \"516D6144456732626338645072463268464D546B425677576E5252793738464E4D6F507A444835454B48464B5A41\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000D0000B9BD7D214128A91ECECE5FCFF9BDB0D043567C51CF51B12D00004691\",\n                  \"URI\": \"516D593776675978524B4E4654693535465262314B6B3563343139726B78526D6862337542697335707562654562\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000D0000B9BD7D214128A91ECECE5FCFF9BDB0D043567C51CF5358C60000632C\",\n                  \"URI\": \"516D635458785372395038644652673447594D44475359784B3864444B464673565A414E596E58796F4853433374\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000D0000B9BD7D214128A91ECECE5FCFF9BDB0D043567C51CF59F44A00003AB0\",\n                  \"URI\": \"516D586D537576395036777936534335485566415A33337868625A486E6B387634387A6E597343624D7250616B39\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000D0000B9BD7D214128A91ECECE5FCFF9BDB0D043567C51CF5B9BE40000574B\",\n                  \"URI\": \"516D564C42434B6D7239396D365A785577365545325859734C6F787A56546138367559666D786166504157757042\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000D0000B9BD7D214128A91ECECE5FCFF9BDB0D043567C51CF62376B00002ECF\",\n                  \"URI\": \"516D62365977657962355A50465578487A70326875623537727070466F4A574554664563456263314A384B68686D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000D0000B9BD7D214128A91ECECE5FCFF9BDB0D043567C51CF63DF0400004B6A\",\n                  \"URI\": \"516D547442476D6764626763727A66645564754536463162614332433237416B63616762386F534D436169547944\"\n                }\n              }\n            ],\n            \"NextPageMin\": \"DCFDDBC8EE3BBBA48B175FCBD6606D6AC92CD03843567C51CFB331EC00003652\",\n            \"PreviousPageMin\": \"DCFDDBC8EE3BBBA48B175FCBD6606D6AC92CD03843567C51CEE49E170000297B\"\n          },\n          \"LedgerEntryType\": \"NFTokenPage\",\n          \"LedgerIndex\": \"DCFDDBC8EE3BBBA48B175FCBD6606D6AC92CD03843567C51CF6C222500003F89\",\n          \"PreviousFields\": {\n            \"NextPageMin\": \"DCFDDBC8EE3BBBA48B175FCBD6606D6AC92CD03843567C51CFFA41B700002D1B\"\n          },\n          \"PreviousTxnID\": \"B548CC1B9DE79633D3717DB4D2E0373FEB598F233235228216E5EEA3B748721A\",\n          \"PreviousTxnLgrSeq\": 6453184\n        }\n      },\n      {\n        \"CreatedNode\": {\n          \"LedgerEntryType\": \"NFTokenPage\",\n          \"LedgerIndex\": \"DCFDDBC8EE3BBBA48B175FCBD6606D6AC92CD03843567C51CFB331EC00003652\",\n          \"NewFields\": {\n            \"NFTokens\": [\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000D0000B9BD7D214128A91ECECE5FCFF9BDB0D043567C51CF6C222500003F89\",\n                  \"URI\": \"516D5748635941366F69447043704A413469385065516856355374576A4D725646434E6F69333776384B716B514A\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000D0000B9BD7D214128A91ECECE5FCFF9BDB0D043567C51CF6DC9BE00005C24\",\n                  \"URI\": \"516D5867337737314471764A4D51625251416F6F6B3262544E585344775750697738654A426872553254586B6556\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000D0000B9BD7D214128A91ECECE5FCFF9BDB0D043567C51CF746542000033A8\",\n                  \"URI\": \"516D5451384C66764B316833623334324E6555344D534A4D4C57505848485971526F334A46446E524D6874436248\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000D0000B9BD7D214128A91ECECE5FCFF9BDB0D043567C51CF760CDC00005043\",\n                  \"URI\": \"516D4E7A69336434664E615A6F76484773336F545A6F4C4A3650364161337267484B6A70763561747277616D3157\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000D0000B9BD7D214128A91ECECE5FCFF9BDB0D043567C51CF7E4FFC00004462\",\n                  \"URI\": \"516D5448677A524A4462717234474C6A3470325276556237714C5066337A6B754B334B4B61705138313173526176\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000D0000B9BD7D214128A91ECECE5FCFF9BDB0D043567C51CF7FF799000060FD\",\n                  \"URI\": \"516D57534A7445426F7647387169575072544237666758556F416541415971564838337545426453694D56345354\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000D0000B9BD7D214128A91ECECE5FCFF9BDB0D043567C51CF86931D00003881\",\n                  \"URI\": \"516D50577732776765366E79577A5A4735535A48324A736F4A4C59474442754E6563585941354E324C51624A424C\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000D0000B9BD7D214128A91ECECE5FCFF9BDB0D043567C51CF883AB50000551C\",\n                  \"URI\": \"516D626150426342457A62684B465955345253396F346E51446D3650374E6E52717767425544315A5751466B5273\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000D0000B9BD7D214128A91ECECE5FCFF9BDB0D043567C51CF8ED63A00002CA0\",\n                  \"URI\": \"516D56543573354D4D5A667667644C356A6E3661526F73797A6E67714B475774323338584A576339654563716D5A\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000D0000B9BD7D214128A91ECECE5FCFF9BDB0D043567C51CF907DD70000493B\",\n                  \"URI\": \"516D626D32554A6D6D724A4A63346377664C693834464E7943464A7250744D3559394374526B3146726547454661\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000D0000B9BD7D214128A91ECECE5FCFF9BDB0D043567C51CF98C0F400003D5A\",\n                  \"URI\": \"516D5A387835757353434D645377664C76664A4E6F66384B4A4264795A696B4A765234397369594445436D357455\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000D0000B9BD7D214128A91ECECE5FCFF9BDB0D043567C51CF9A6891000059F5\",\n                  \"URI\": \"516D5337624A3634463166356F4763444170363764596F3956564E62503174486274756163745848375045363774\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000D0000B9BD7D214128A91ECECE5FCFF9BDB0D043567C51CFA1041500003179\",\n                  \"URI\": \"516D563133757764783669616F3951625074677936536B47356A78324E77476D4E72566F574E6E716E6870626566\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000D0000B9BD7D214128A91ECECE5FCFF9BDB0D043567C51CFA2ABAE00004E14\",\n                  \"URI\": \"516D545564545166667A65424D675663355A383672667A506E48737372736D63456668357575463671654E655955\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000D0000B9BD7D214128A91ECECE5FCFF9BDB0D043567C51CFAAEECF00004233\",\n                  \"URI\": \"516D517350473767757541735731377A3348656569534A5175417939716E71706E437454336F4E415732776B5A68\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000D0000B9BD7D214128A91ECECE5FCFF9BDB0D043567C51CFAC966800005ECE\",\n                  \"URI\": \"516D644D3879734E484B754E4B516144464D5A78593767686464586E4A6B734D4A6F4D794346697A377735344B4A\"\n                }\n              }\n            ],\n            \"NextPageMin\": \"DCFDDBC8EE3BBBA48B175FCBD6606D6AC92CD03843567C51CFFA41B700002D1B\",\n            \"PreviousPageMin\": \"DCFDDBC8EE3BBBA48B175FCBD6606D6AC92CD03843567C51CF6C222500003F89\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"NFTokens\": [\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000D0000B9BD7D214128A91ECECE5FCFF9BDB0D043567C51CFB331EC00003652\",\n                  \"URI\": \"516D6332646B6447445A4653343545737834426A6951526A7058326839646148697632444276395A5A4236787457\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000D0000B9BD7D214128A91ECECE5FCFF9BDB0D043567C51CFB4D98A000052ED\",\n                  \"URI\": \"516D647045574E5A55475162414446333742584638316F547136714578534631774A4E4B63464D58465576373770\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000D0000B9BD7D214128A91ECECE5FCFF9BDB0D043567C51CFBB750D00002A71\",\n                  \"URI\": \"516D52767864435554456B67556462486B6E6352696D7A655843434E746373336E52706956414C6F375944573552\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000D0000B9BD7D214128A91ECECE5FCFF9BDB0D043567C51CFBD1CA60000470C\",\n                  \"URI\": \"516D545052783857793156706565456F4A75374C614556685A627A6A61346143766F68614C72704A4D393773746A\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000D0000B9BD7D214128A91ECECE5FCFF9BDB0D043567C51CFBEC443000063A7\",\n                  \"URI\": \"516D5071416B3677777577796A71654C476F64665253375156774677394346736A6D363375485661556438387463\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000D0000B9BD7D214128A91ECECE5FCFF9BDB0D043567C51CFC55FC700003B2B\",\n                  \"URI\": \"516D65714A5734706157457342466176706E396243337A53566D524871676F4B56476A37477A476F43677634707A\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000D0000B9BD7D214128A91ECECE5FCFF9BDB0D043567C51CFC70763000057C6\",\n                  \"URI\": \"516D55626E5635553536436164414559325576364C66315261784744344D575978365A714C544B4439516B713866\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000D0000B9BD7D214128A91ECECE5FCFF9BDB0D043567C51CFCDA2E400002F4A\",\n                  \"URI\": \"516D53447842577250526532586A42365A31796D517336446532597A33727A75754B66556134526D45456144794A\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000D0000B9BD7D214128A91ECECE5FCFF9BDB0D043567C51CFCF4A8100004BE5\",\n                  \"URI\": \"516D534D63464D727A3162634173685333727447584E4B3374366353425834727A3468565A534B7A354644674456\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000D0000B9BD7D214128A91ECECE5FCFF9BDB0D043567C51CFD78D9E00004004\",\n                  \"URI\": \"516D6369736D48475A5A4437684578447752676F5633317066746953716570617757546E4264574E6B6641513158\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000D0000B9BD7D214128A91ECECE5FCFF9BDB0D043567C51CFD9353B00005C9F\",\n                  \"URI\": \"516D66436B315857706E75485655344B6D6A48664E334275784473787954703674386E4638704A52353154485269\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000D0000B9BD7D214128A91ECECE5FCFF9BDB0D043567C51CFDFD0BF00003423\",\n                  \"URI\": \"516D5145756D486F59794B507033705A7371564652523661357151704571364C655A61483863345A664C6A32636B\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000D0000B9BD7D214128A91ECECE5FCFF9BDB0D043567C51CFE1785B000050BE\",\n                  \"URI\": \"516D64567636536F5976577A757668654C51506B513354445671564B586E326F543542783167444A76584C39515A\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000D0000B9BD7D214128A91ECECE5FCFF9BDB0D043567C51CFE9BB79000044DD\",\n                  \"URI\": \"516D63514E78594262444273555A7631486A695032464E766A504665594A65797537524D696A4343423770753462\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000D0000B9BD7D214128A91ECECE5FCFF9BDB0D043567C51CFEB631200006178\",\n                  \"URI\": \"516D576733794E777862477457676466725032444374703966695A564D7474455937363459647157646236616154\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000D0000B9BD7D214128A91ECECE5FCFF9BDB0D043567C51CFF1FE96000038FC\",\n                  \"URI\": \"516D5647684541543972355846686A444E626D764B347465646A3666417661385853767471366A56696D48457A73\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000D0000B9BD7D214128A91ECECE5FCFF9BDB0D043567C51CFF3A63000005597\",\n                  \"URI\": \"516D616444516762673247466433555A356364695A5645706B4335646673554C467170444C323537576E456B7365\"\n                }\n              }\n            ],\n            \"NextPageMin\": \"DCFDDBC8EE3BBBA48B175FCBD6606D6AC92CD03843567C51D081C5C500004329\",\n            \"PreviousPageMin\": \"DCFDDBC8EE3BBBA48B175FCBD6606D6AC92CD03843567C51CFB331EC00003652\"\n          },\n          \"LedgerEntryType\": \"NFTokenPage\",\n          \"LedgerIndex\": \"DCFDDBC8EE3BBBA48B175FCBD6606D6AC92CD03843567C51CFFA41B700002D1B\",\n          \"PreviousFields\": {\n            \"NFTokens\": [\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000D0000B9BD7D214128A91ECECE5FCFF9BDB0D043567C51CF6C222500003F89\",\n                  \"URI\": \"516D5748635941366F69447043704A413469385065516856355374576A4D725646434E6F69333776384B716B514A\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000D0000B9BD7D214128A91ECECE5FCFF9BDB0D043567C51CF6DC9BE00005C24\",\n                  \"URI\": \"516D5867337737314471764A4D51625251416F6F6B3262544E585344775750697738654A426872553254586B6556\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000D0000B9BD7D214128A91ECECE5FCFF9BDB0D043567C51CF746542000033A8\",\n                  \"URI\": \"516D5451384C66764B316833623334324E6555344D534A4D4C57505848485971526F334A46446E524D6874436248\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000D0000B9BD7D214128A91ECECE5FCFF9BDB0D043567C51CF760CDC00005043\",\n                  \"URI\": \"516D4E7A69336434664E615A6F76484773336F545A6F4C4A3650364161337267484B6A70763561747277616D3157\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000D0000B9BD7D214128A91ECECE5FCFF9BDB0D043567C51CF7E4FFC00004462\",\n                  \"URI\": \"516D5448677A524A4462717234474C6A3470325276556237714C5066337A6B754B334B4B61705138313173526176\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000D0000B9BD7D214128A91ECECE5FCFF9BDB0D043567C51CF7FF799000060FD\",\n                  \"URI\": \"516D57534A7445426F7647387169575072544237666758556F416541415971564838337545426453694D56345354\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000D0000B9BD7D214128A91ECECE5FCFF9BDB0D043567C51CF86931D00003881\",\n                  \"URI\": \"516D50577732776765366E79577A5A4735535A48324A736F4A4C59474442754E6563585941354E324C51624A424C\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000D0000B9BD7D214128A91ECECE5FCFF9BDB0D043567C51CF883AB50000551C\",\n                  \"URI\": \"516D626150426342457A62684B465955345253396F346E51446D3650374E6E52717767425544315A5751466B5273\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000D0000B9BD7D214128A91ECECE5FCFF9BDB0D043567C51CF8ED63A00002CA0\",\n                  \"URI\": \"516D56543573354D4D5A667667644C356A6E3661526F73797A6E67714B475774323338584A576339654563716D5A\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000D0000B9BD7D214128A91ECECE5FCFF9BDB0D043567C51CF907DD70000493B\",\n                  \"URI\": \"516D626D32554A6D6D724A4A63346377664C693834464E7943464A7250744D3559394374526B3146726547454661\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000D0000B9BD7D214128A91ECECE5FCFF9BDB0D043567C51CF98C0F400003D5A\",\n                  \"URI\": \"516D5A387835757353434D645377664C76664A4E6F66384B4A4264795A696B4A765234397369594445436D357455\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000D0000B9BD7D214128A91ECECE5FCFF9BDB0D043567C51CF9A6891000059F5\",\n                  \"URI\": \"516D5337624A3634463166356F4763444170363764596F3956564E62503174486274756163745848375045363774\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000D0000B9BD7D214128A91ECECE5FCFF9BDB0D043567C51CFA1041500003179\",\n                  \"URI\": \"516D563133757764783669616F3951625074677936536B47356A78324E77476D4E72566F574E6E716E6870626566\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000D0000B9BD7D214128A91ECECE5FCFF9BDB0D043567C51CFA2ABAE00004E14\",\n                  \"URI\": \"516D545564545166667A65424D675663355A383672667A506E48737372736D63456668357575463671654E655955\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000D0000B9BD7D214128A91ECECE5FCFF9BDB0D043567C51CFAAEECF00004233\",\n                  \"URI\": \"516D517350473767757541735731377A3348656569534A5175417939716E71706E437454336F4E415732776B5A68\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000D0000B9BD7D214128A91ECECE5FCFF9BDB0D043567C51CFAC966800005ECE\",\n                  \"URI\": \"516D644D3879734E484B754E4B516144464D5A78593767686464586E4A6B734D4A6F4D794346697A377735344B4A\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000D0000B9BD7D214128A91ECECE5FCFF9BDB0D043567C51CFB331EC00003652\",\n                  \"URI\": \"516D6332646B6447445A4653343545737834426A6951526A7058326839646148697632444276395A5A4236787457\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000D0000B9BD7D214128A91ECECE5FCFF9BDB0D043567C51CFB4D98A000052ED\",\n                  \"URI\": \"516D647045574E5A55475162414446333742584638316F547136714578534631774A4E4B63464D58465576373770\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000D0000B9BD7D214128A91ECECE5FCFF9BDB0D043567C51CFBB750D00002A71\",\n                  \"URI\": \"516D52767864435554456B67556462486B6E6352696D7A655843434E746373336E52706956414C6F375944573552\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000D0000B9BD7D214128A91ECECE5FCFF9BDB0D043567C51CFBD1CA60000470C\",\n                  \"URI\": \"516D545052783857793156706565456F4A75374C614556685A627A6A61346143766F68614C72704A4D393773746A\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000D0000B9BD7D214128A91ECECE5FCFF9BDB0D043567C51CFC55FC700003B2B\",\n                  \"URI\": \"516D65714A5734706157457342466176706E396243337A53566D524871676F4B56476A37477A476F43677634707A\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000D0000B9BD7D214128A91ECECE5FCFF9BDB0D043567C51CFC70763000057C6\",\n                  \"URI\": \"516D55626E5635553536436164414559325576364C66315261784744344D575978365A714C544B4439516B713866\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000D0000B9BD7D214128A91ECECE5FCFF9BDB0D043567C51CFCDA2E400002F4A\",\n                  \"URI\": \"516D53447842577250526532586A42365A31796D517336446532597A33727A75754B66556134526D45456144794A\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000D0000B9BD7D214128A91ECECE5FCFF9BDB0D043567C51CFCF4A8100004BE5\",\n                  \"URI\": \"516D534D63464D727A3162634173685333727447584E4B3374366353425834727A3468565A534B7A354644674456\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000D0000B9BD7D214128A91ECECE5FCFF9BDB0D043567C51CFD78D9E00004004\",\n                  \"URI\": \"516D6369736D48475A5A4437684578447752676F5633317066746953716570617757546E4264574E6B6641513158\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000D0000B9BD7D214128A91ECECE5FCFF9BDB0D043567C51CFD9353B00005C9F\",\n                  \"URI\": \"516D66436B315857706E75485655344B6D6A48664E334275784473787954703674386E4638704A52353154485269\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000D0000B9BD7D214128A91ECECE5FCFF9BDB0D043567C51CFDFD0BF00003423\",\n                  \"URI\": \"516D5145756D486F59794B507033705A7371564652523661357151704571364C655A61483863345A664C6A32636B\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000D0000B9BD7D214128A91ECECE5FCFF9BDB0D043567C51CFE1785B000050BE\",\n                  \"URI\": \"516D64567636536F5976577A757668654C51506B513354445671564B586E326F543542783167444A76584C39515A\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000D0000B9BD7D214128A91ECECE5FCFF9BDB0D043567C51CFE9BB79000044DD\",\n                  \"URI\": \"516D63514E78594262444273555A7631486A695032464E766A504665594A65797537524D696A4343423770753462\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000D0000B9BD7D214128A91ECECE5FCFF9BDB0D043567C51CFEB631200006178\",\n                  \"URI\": \"516D576733794E777862477457676466725032444374703966695A564D7474455937363459647157646236616154\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000D0000B9BD7D214128A91ECECE5FCFF9BDB0D043567C51CFF1FE96000038FC\",\n                  \"URI\": \"516D5647684541543972355846686A444E626D764B347465646A3666417661385853767471366A56696D48457A73\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000D0000B9BD7D214128A91ECECE5FCFF9BDB0D043567C51CFF3A63000005597\",\n                  \"URI\": \"516D616444516762673247466433555A356364695A5645706B4335646673554C467170444C323537576E456B7365\"\n                }\n              }\n            ],\n            \"PreviousPageMin\": \"DCFDDBC8EE3BBBA48B175FCBD6606D6AC92CD03843567C51CF6C222500003F89\"\n          },\n          \"PreviousTxnID\": \"7D52B90FAB145FF352B630EFD80D91AA2040F183C36782893336A8775643E012\",\n          \"PreviousTxnLgrSeq\": 6453183\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rHAfrQNDBohGbWuWTWzpJe1LQWyYVnbG2n\",\n            \"Balance\": \"8269299100\",\n            \"Flags\": 0,\n            \"MintedNFTokens\": 25512,\n            \"NFTokenMinter\": \"rM9VmbyB9KMeZaWHEeDXcnNocvJ48B1eW1\",\n            \"OwnerCount\": 1,\n            \"Sequence\": 5705984\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"F0E5B41CEBE04809B152C28EC7D6015BB1FE3DD45260FA3D3B4C87981B261ADC\",\n          \"PreviousFields\": {\n            \"MintedNFTokens\": 25511\n          },\n          \"PreviousTxnID\": \"22DCD81B1AACDCE6FDAD39CCAF9D9EFD25C29E13C28F32340673FBAE88D0A619\",\n          \"PreviousTxnLgrSeq\": 6453184\n        }\n      }\n    ],\n    \"TransactionIndex\": 337,\n    \"TransactionResult\": \"tesSUCCESS\",\n    \"nftoken_id\": \"000D0000B9BD7D214128A91ECECE5FCFF9BDB0D043567C51CFBEC443000063A7\"\n  },\n  \"hash\": \"4E0EB5F23D248740CB8FC28D1003CEFE841E21811FE2EA4B195CFE1B0BC54219\",\n  \"ledger_index\": 6453184,\n  \"date\": \"2022-10-13T10:27:50Z\"\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/NFTokenMint/test/mock_data/NFTokenMintMostModified2Created1.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rDUbAKGzBRs3ztKpfMiWUAB5nwtcmrnRVe\",\n    \"Fee\": \"12\",\n    \"Flags\": 8,\n    \"LastLedgerSequence\": 5605307,\n    \"NFTokenTaxon\": 1,\n    \"Sequence\": 5605241,\n    \"SigningPubKey\": \"022DAC45B8CC7B217C47A04957A6DF7FE2C8E4BA485808FCBBFC82E115260E1C32\",\n    \"TransactionType\": \"NFTokenMint\",\n    \"TxnSignature\": \"30440220623FB22FE14ED40690333A9B53DA7547CC38B75128B922B5EDA0FB1E7B8642F30220363B6A61A3B7F2A02F3202A67D97B1635576EBEE8465DD3A72E88DC3DFAE38E1\",\n    \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\",\n    \"date\": \"2022-09-13T20:47:41Z\"\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rDUbAKGzBRs3ztKpfMiWUAB5nwtcmrnRVe\",\n            \"Balance\": \"9999999604\",\n            \"Flags\": 0,\n            \"MintedNFTokens\": 33,\n            \"OwnerCount\": 2,\n            \"Sequence\": 5605242\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"433D9E7BE08CC6D929AE1AE85150F8FADCE098529C41BD134A47DEA255D0DAAC\",\n          \"PreviousFields\": {\n            \"Balance\": \"9999999616\",\n            \"MintedNFTokens\": 32,\n            \"OwnerCount\": 1,\n            \"Sequence\": 5605241\n          },\n          \"PreviousTxnID\": \"44003568EB431E295D741C3FB98EB5525AD5203288FFB23B15DEB46899317D0B\",\n          \"PreviousTxnLgrSeq\": 5605232\n        }\n      },\n      {\n        \"CreatedNode\": {\n          \"LedgerEntryType\": \"NFTokenPage\",\n          \"LedgerIndex\": \"85D33F9C5481D3515029C9904D16F0109414D3A09414D3A08122E5B60000001C\",\n          \"NewFields\": {\n            \"NFTokens\": [\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"0008000085D33F9C5481D3515029C9904D16F0109414D3A00000099A00000000\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"0008000085D33F9C5481D3515029C9904D16F0109414D3A00EA5D0B300000017\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"0008000085D33F9C5481D3515029C9904D16F0109414D3A012C5D5A60000000C\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"0008000085D33F9C5481D3515029C9904D16F0109414D3A016E5DA9D00000001\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"0008000085D33F9C5481D3515029C9904D16F0109414D3A0258BA1B200000018\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"0008000085D33F9C5481D3515029C9904D16F0109414D3A029ABA6A90000000D\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"0008000085D33F9C5481D3515029C9904D16F0109414D3A02DCBAB9C00000002\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"0008000085D33F9C5481D3515029C9904D16F0109414D3A03C7172B500000019\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"0008000085D33F9C5481D3515029C9904D16F0109414D3A0409177A80000000E\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"0008000085D33F9C5481D3515029C9904D16F0109414D3A044B17C9F00000003\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"0008000085D33F9C5481D3515029C9904D16F0109414D3A0535743B40000001A\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"0008000085D33F9C5481D3515029C9904D16F0109414D3A0577748AB0000000F\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"0008000085D33F9C5481D3515029C9904D16F0109414D3A05B974D9E00000004\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"0008000085D33F9C5481D3515029C9904D16F0109414D3A06A3D14B70000001B\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"0008000085D33F9C5481D3515029C9904D16F0109414D3A06E5D19AA00000010\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"0008000085D33F9C5481D3515029C9904D16F0109414D3A0727D1EA100000005\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              }\n            ],\n            \"NextPageMin\": \"85D33F9C5481D3515029C9904D16F0109414D3A0FFFFFFFFFFFFFFFFFFFFFFFF\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"NFTokens\": [\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"0008000085D33F9C5481D3515029C9904D16F0109414D3A08122E5B60000001C\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"0008000085D33F9C5481D3515029C9904D16F0109414D3A08542EAAD00000011\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"0008000085D33F9C5481D3515029C9904D16F0109414D3A08962EFA000000006\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"0008000085D33F9C5481D3515029C9904D16F0109414D3A09808B6B90000001D\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"0008000085D33F9C5481D3515029C9904D16F0109414D3A09C28BBAC00000012\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"0008000085D33F9C5481D3515029C9904D16F0109414D3A0A048C0A300000007\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"0008000085D33F9C5481D3515029C9904D16F0109414D3A0AEEE87B80000001E\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"0008000085D33F9C5481D3515029C9904D16F0109414D3A0B30E8CAF00000013\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"0008000085D33F9C5481D3515029C9904D16F0109414D3A0B72E91A200000008\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"0008000085D33F9C5481D3515029C9904D16F0109414D3A0C5D458BB0000001F\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"0008000085D33F9C5481D3515029C9904D16F0109414D3A0C9F45DAE00000014\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"0008000085D33F9C5481D3515029C9904D16F0109414D3A0CE1462A500000009\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"0008000085D33F9C5481D3515029C9904D16F0109414D3A0DCBA29BA00000020\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"0008000085D33F9C5481D3515029C9904D16F0109414D3A0E0DA2EB100000015\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"0008000085D33F9C5481D3515029C9904D16F0109414D3A0E4FA33A40000000A\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"0008000085D33F9C5481D3515029C9904D16F0109414D3A0F7BFFFB000000016\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"0008000085D33F9C5481D3515029C9904D16F0109414D3A0FBE004A70000000B\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              }\n            ],\n            \"PreviousPageMin\": \"85D33F9C5481D3515029C9904D16F0109414D3A09414D3A08122E5B60000001C\"\n          },\n          \"LedgerEntryType\": \"NFTokenPage\",\n          \"LedgerIndex\": \"85D33F9C5481D3515029C9904D16F0109414D3A0FFFFFFFFFFFFFFFFFFFFFFFF\",\n          \"PreviousFields\": {\n            \"NFTokens\": [\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"0008000085D33F9C5481D3515029C9904D16F0109414D3A00000099A00000000\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"0008000085D33F9C5481D3515029C9904D16F0109414D3A00EA5D0B300000017\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"0008000085D33F9C5481D3515029C9904D16F0109414D3A012C5D5A60000000C\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"0008000085D33F9C5481D3515029C9904D16F0109414D3A016E5DA9D00000001\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"0008000085D33F9C5481D3515029C9904D16F0109414D3A0258BA1B200000018\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"0008000085D33F9C5481D3515029C9904D16F0109414D3A029ABA6A90000000D\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"0008000085D33F9C5481D3515029C9904D16F0109414D3A02DCBAB9C00000002\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"0008000085D33F9C5481D3515029C9904D16F0109414D3A03C7172B500000019\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"0008000085D33F9C5481D3515029C9904D16F0109414D3A0409177A80000000E\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"0008000085D33F9C5481D3515029C9904D16F0109414D3A044B17C9F00000003\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"0008000085D33F9C5481D3515029C9904D16F0109414D3A0535743B40000001A\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"0008000085D33F9C5481D3515029C9904D16F0109414D3A0577748AB0000000F\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"0008000085D33F9C5481D3515029C9904D16F0109414D3A05B974D9E00000004\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"0008000085D33F9C5481D3515029C9904D16F0109414D3A06A3D14B70000001B\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"0008000085D33F9C5481D3515029C9904D16F0109414D3A06E5D19AA00000010\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"0008000085D33F9C5481D3515029C9904D16F0109414D3A0727D1EA100000005\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"0008000085D33F9C5481D3515029C9904D16F0109414D3A08122E5B60000001C\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"0008000085D33F9C5481D3515029C9904D16F0109414D3A08542EAAD00000011\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"0008000085D33F9C5481D3515029C9904D16F0109414D3A08962EFA000000006\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"0008000085D33F9C5481D3515029C9904D16F0109414D3A09808B6B90000001D\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"0008000085D33F9C5481D3515029C9904D16F0109414D3A09C28BBAC00000012\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"0008000085D33F9C5481D3515029C9904D16F0109414D3A0A048C0A300000007\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"0008000085D33F9C5481D3515029C9904D16F0109414D3A0AEEE87B80000001E\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"0008000085D33F9C5481D3515029C9904D16F0109414D3A0B30E8CAF00000013\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"0008000085D33F9C5481D3515029C9904D16F0109414D3A0B72E91A200000008\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"0008000085D33F9C5481D3515029C9904D16F0109414D3A0C5D458BB0000001F\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"0008000085D33F9C5481D3515029C9904D16F0109414D3A0C9F45DAE00000014\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"0008000085D33F9C5481D3515029C9904D16F0109414D3A0CE1462A500000009\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"0008000085D33F9C5481D3515029C9904D16F0109414D3A0E0DA2EB100000015\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"0008000085D33F9C5481D3515029C9904D16F0109414D3A0E4FA33A40000000A\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"0008000085D33F9C5481D3515029C9904D16F0109414D3A0F7BFFFB000000016\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              },\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"0008000085D33F9C5481D3515029C9904D16F0109414D3A0FBE004A70000000B\",\n                  \"URI\": \"68747470733A2F2F677265677765697362726F642E636F6D\"\n                }\n              }\n            ]\n          },\n          \"PreviousTxnID\": \"44003568EB431E295D741C3FB98EB5525AD5203288FFB23B15DEB46899317D0B\",\n          \"PreviousTxnLgrSeq\": 5605232\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tesSUCCESS\",\n    \"nftoken_id\": \"0008000085D33F9C5481D3515029C9904D16F0109414D3A0DCBA29BA00000020\"\n  },\n  \"hash\": \"C4E598099A8B13C5C8D2B8C86385A37B64C2F62BFA1FB87196401BB6ACB67A69\",\n  \"ledger_index\": 5605289,\n  \"date\": \"2022-09-13T20:47:41Z\"\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/NFTokenMint/test/mock_data/NFTokenMintNullURI.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rsbHDfMAdxv1EyAURp8F5txgFesepmCYRY\",\n    \"Fee\": \"250000\",\n    \"Flags\": 8,\n    \"NFTokenTaxon\": 0,\n    \"Sequence\": 75420256,\n    \"SigningPubKey\": \"03D3969BCE7722E4F85DA427C8674D50037A91715B16645ACDCF60BFF478D7B239\",\n    \"TransactionType\": \"NFTokenMint\",\n    \"TxnSignature\": \"3045022100F8E5F9216353EE5E13D7BD894B1F0C982865798F4CBCCFFBCF9855645C42CF3902201863046780FCB1A4355AF55C4D494E176A2C6849312B7BC70406B041D4792A59\",\n    \"date\": \"2022-10-31T20:50:52Z\",\n    \"warnings\": [\n      {\n        \"id\": 1004,\n        \"message\": \"This is a reporting server.  The default behavior of a reporting server is to only return validated data. If you are looking for not yet validated data, include \\\"ledger_index : current\\\" in your request, which will cause this server to forward the request to a p2p node. If the forward is successful the response will include \\\"forwarded\\\" : \\\"true\\\"\"\n      }\n    ]\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"CreatedNode\": {\n          \"LedgerEntryType\": \"NFTokenPage\",\n          \"LedgerIndex\": \"1C6BECB802DFC006F025A13EA940ECBF9FD4909EFFFFFFFFFFFFFFFFFFFFFFFF\",\n          \"NewFields\": {\n            \"NFTokens\": [\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000800001C6BECB802DFC006F025A13EA940ECBF9FD4909E0000099B00000000\"\n                }\n              }\n            ]\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rsbHDfMAdxv1EyAURp8F5txgFesepmCYRY\",\n            \"Balance\": \"14750000\",\n            \"Flags\": 0,\n            \"MintedNFTokens\": 1,\n            \"OwnerCount\": 1,\n            \"Sequence\": 75420257\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"57BCBCEF2CB5956ABB814B26E791899B33716929B3CFA1F77B328659CB65BA17\",\n          \"PreviousFields\": {\n            \"Balance\": \"15000000\",\n            \"OwnerCount\": 0,\n            \"Sequence\": 75420256\n          },\n          \"PreviousTxnID\": \"E1F96EA699BCE5BF881AF10E5452380F2EFE1989948A2207D28DD4CD75D979A5\",\n          \"PreviousTxnLgrSeq\": 75420256\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tesSUCCESS\"\n  },\n  \"hash\": \"465A6EAC412E32CDD6C3D21537AD1C5919987EE162D606480133E1E43FBD14A7\",\n  \"ledger_index\": 75443459,\n  \"date\": \"2022-10-31T20:50:52Z\"\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/NFTokenMint/test/mock_data/NFTokenMintWithIssuer.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rwrk4nxjiJkKoAXFc4h27eD4M8qCxBtApR\",\n    \"Fee\": \"12\",\n    \"Flags\": 8,\n    \"Issuer\": \"rGToUZ1JjRUdv1wXNXKMFn2o4wTM2DLkpg\",\n    \"LastLedgerSequence\": 4997966,\n    \"NFTokenTaxon\": 0,\n    \"Sequence\": 4577828,\n    \"SigningPubKey\": \"ED1D201E4DED96C5B2982A496523A3D94343DEC30C6F755F8F067C25C7C9A12C4B\",\n    \"TransactionType\": \"NFTokenMint\",\n    \"TransferFee\": 25000,\n    \"TxnSignature\": \"7D8BD43D93B059791C6F0A0CC853ADC349D5D2D1E84DCCCF17D6FDAF57728C8490A2D689A17A4BCE43D340D1D7092EEEEE3E507203D5CF6D9CFCE403C638FE07\",\n    \"URI\": \"697066733A2F2F62616679626569676479727A74357366703775646D37687537367568377932366E6634646675796C71616266336F636C67747179353566627A6469\",\n    \"date\": \"2022-08-23T16:18:00Z\"\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rwrk4nxjiJkKoAXFc4h27eD4M8qCxBtApR\",\n            \"Balance\": \"10099999976\",\n            \"Flags\": 0,\n            \"OwnerCount\": 1,\n            \"Sequence\": 4577829\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"0AD887D8A9E69B063E96E9F05DB1B57D4BE524B65BEE8A55DA4CDB715D4DFEFD\",\n          \"PreviousFields\": {\n            \"Balance\": \"10099999988\",\n            \"OwnerCount\": 0,\n            \"Sequence\": 4577828\n          },\n          \"PreviousTxnID\": \"155610402248BC8E40BEAF33996280EBE1EBE44512B6ED4625BE8D04C9DE88BB\",\n          \"PreviousTxnLgrSeq\": 4997761\n        }\n      },\n      {\n        \"CreatedNode\": {\n          \"LedgerEntryType\": \"NFTokenPage\",\n          \"LedgerIndex\": \"62DD5482923E4CC6B49066146DAFE97491F4927EFFFFFFFFFFFFFFFFFFFFFFFF\",\n          \"NewFields\": {\n            \"NFTokens\": [\n              {\n                \"NFToken\": {\n                  \"NFTokenID\": \"000861A8A99B4460C2A4CCC90634FD9C7F51940AD9450BE30000099B00000000\",\n                  \"URI\": \"697066733A2F2F62616679626569676479727A74357366703775646D37687537367568377932366E6634646675796C71616266336F636C67747179353566627A6469\"\n                }\n              }\n            ]\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rGToUZ1JjRUdv1wXNXKMFn2o4wTM2DLkpg\",\n            \"Balance\": \"9899999964\",\n            \"Flags\": 8388608,\n            \"MintedNFTokens\": 1,\n            \"NFTokenMinter\": \"rwrk4nxjiJkKoAXFc4h27eD4M8qCxBtApR\",\n            \"OwnerCount\": 0,\n            \"Sequence\": 4577826\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"77AC8387084CD40B2176E1B5FE0646994226ABFC1C4A4403470E1AACDD540F12\",\n          \"PreviousFields\": {},\n          \"PreviousTxnID\": \"68DAF39F4C95E804315D1C96AEF9F170E9756CE9AC67BE97644FBA29EDE55B8C\",\n          \"PreviousTxnLgrSeq\": 4997929\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tesSUCCESS\",\n    \"nftoken_id\": \"000861A8A99B4460C2A4CCC90634FD9C7F51940AD9450BE30000099B00000000\"\n  },\n  \"hash\": \"73629D3E84AC18C06350A9A4A0B2EF15AB52E5A62AECDAB4A0579DEF342FC61F\",\n  \"ledger_index\": 4997948,\n  \"date\": \"2022-08-23T16:18:00Z\"\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/NFTokenMint/types.ts",
    "content": "export interface NFTokenMintInstructions {\n  tokenID: string\n  tokenTaxon: number\n  uri?: string\n  transferFee?: number\n  issuer?: string\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/OfferCancel/Description.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport type { OfferCancel } from 'xrpl'\n\nimport { TransactionDescriptionProps } from '../types'\n\nexport const Description = ({\n  data,\n}: TransactionDescriptionProps<OfferCancel>) => {\n  const { t } = useTranslation()\n\n  return (\n    <div data-testid=\"cancel-line\">\n      {t('offer_cancel_description')}\n      <b>{data.tx.OfferSequence}</b>\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/OfferCancel/Simple.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport type { OfferCancel } from 'xrpl'\nimport { TransactionSimpleProps } from '../types'\nimport { SimpleRow } from '../SimpleRow'\n\nexport const Simple = ({ data }: TransactionSimpleProps<OfferCancel>) => {\n  const { t } = useTranslation()\n  const { OfferSequence } = data.instructions\n\n  return (\n    <SimpleRow label={t('cancel_offer')} data-testid=\"cancel\">\n      #{OfferSequence}\n    </SimpleRow>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/OfferCancel/TableDetail.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport type { OfferCancel } from 'xrpl'\nimport { TransactionTableDetailProps } from '../types'\n\nexport const TableDetail = ({\n  instructions,\n}: TransactionTableDetailProps<OfferCancel>) => {\n  const { t } = useTranslation()\n  const { OfferSequence } = instructions\n\n  return (\n    <div className=\"offercancel\">\n      <span className=\"label\">{t('cancel_offer')}</span>\n      {` #`}\n      <span className=\"sequence\">{OfferSequence}</span>\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/OfferCancel/index.ts",
    "content": "import {\n  TransactionAction,\n  TransactionCategory,\n  TransactionMapping,\n} from '../types'\n\nimport { Description } from './Description'\nimport { Simple } from './Simple'\nimport { TableDetail } from './TableDetail'\n\nexport const OfferCancelTransaction: TransactionMapping = {\n  Description,\n  Simple,\n  TableDetail,\n  action: TransactionAction.CANCEL,\n  category: TransactionCategory.DEX,\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/OfferCancel/test/OfferCancelDescription.test.tsx",
    "content": "import { createDescriptionRenderFactory } from '../../test'\nimport { Description } from '../Description'\nimport offerCancel from './mock_data/OfferCancel.json'\n\nconst renderComponent = createDescriptionRenderFactory(Description)\n\ndescribe('OfferCancel: Description', () => {\n  it('renders', () => {\n    const { container } = renderComponent(offerCancel)\n\n    expect(\n      container.querySelector('[data-testid=\"cancel-line\"]'),\n    ).toHaveTextContent('offer_cancel_description15239384')\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/OfferCancel/test/OfferCancelSimple.test.tsx",
    "content": "import { createSimpleRenderFactory, expectSimpleRowText } from '../../test'\nimport { Simple } from '../Simple'\nimport offerCancel from './mock_data/OfferCancel.json'\n\nconst renderComponent = createSimpleRenderFactory(Simple)\n\ndescribe('OfferCancel: Simple', () => {\n  it('renders', () => {\n    const { container } = renderComponent(offerCancel)\n\n    expectSimpleRowText(container, 'cancel', '#15239384')\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/OfferCancel/test/OfferCancelTableDetail.test.tsx",
    "content": "import { createTableDetailRenderFactory } from '../../test'\nimport { TableDetail } from '../TableDetail'\nimport offerCancel from './mock_data/OfferCancel.json'\n\nconst renderComponent = createTableDetailRenderFactory(TableDetail)\n\ndescribe('OfferCancel: TableDetail', () => {\n  it('renders', () => {\n    const { container } = renderComponent(offerCancel)\n\n    expect(container).toHaveTextContent('cancel_offer #15239384')\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/OfferCancel/test/mock_data/OfferCancel.json",
    "content": "{\n  \"hash\": \"F4EFFD0C02ECE3ADDE16E320FE08C4D411914ABEEB80861C95EE19589397BB56\",\n  \"ledger_index\": 37478576,\n  \"date\": \"2018-03-25T11:29:01+00:00\",\n  \"tx\": {\n    \"TransactionType\": \"OfferCancel\",\n    \"Flags\": 0,\n    \"Sequence\": 15239390,\n    \"OfferSequence\": 15239384,\n    \"LastLedgerSequence\": 37478579,\n    \"Fee\": \"10500\",\n    \"SigningPubKey\": \"0218E7C9B6D291B8849698BC524CC907962784C4D5423EE2020EF71530440C6E89\",\n    \"TxnSignature\": \"3045022100FA7BDD54480D5B929D81E8261BEB39EF18860C1B76CB28A769D3DE12F6E886F10220442F10B61A503B02941FD021FEBEC2DE46B47ECB00FAD0DE0541AA65E5A9FDB8\",\n    \"Account\": \"rENDnFwR3CPvrsPjD9XXeqVoXeVt2CpPWX\"\n  },\n  \"meta\": {\n    \"TransactionIndex\": 11,\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"14DEA231A078047ACAACEE19534B087DE63AAAE6F7916251638C3C8E60F3B5FC\",\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"000000000000028D\",\n            \"RootIndex\": \"CDE11BB8E6416965C5B88DEA6671D442DA8CD437B20BD98E659EAFA11D3508C3\",\n            \"Owner\": \"rENDnFwR3CPvrsPjD9XXeqVoXeVt2CpPWX\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"90B86A84C7F7843673BCF82E565E69498CAEF463F8055ABA4C0456385DE09800\",\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"ExchangeRate\": \"4C0456385DE09800\",\n            \"RootIndex\": \"90B86A84C7F7843673BCF82E565E69498CAEF463F8055ABA4C0456385DE09800\",\n            \"TakerPaysCurrency\": \"0000000000000000000000004554480000000000\",\n            \"TakerPaysIssuer\": \"06CC4A6D023E68AA3499C6DE3E9F2DC52B8BA254\",\n            \"TakerGetsCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"0000000000000000000000000000000000000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"PreviousTxnLgrSeq\": 37478576,\n          \"PreviousTxnID\": \"6EE3B6D5B6A6C726CCBA47BD8D3165C56C35F67047F53869DCF4A8D5A4F81494\",\n          \"LedgerIndex\": \"BDBFC8F6381C40F63B756F4781D9487B09184EB774D866BC08B0F68E2AC48569\",\n          \"PreviousFields\": {\n            \"Sequence\": 15239390,\n            \"OwnerCount\": 37,\n            \"Balance\": \"19236781263\"\n          },\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Sequence\": 15239391,\n            \"OwnerCount\": 36,\n            \"Balance\": \"19236770763\",\n            \"Account\": \"rENDnFwR3CPvrsPjD9XXeqVoXeVt2CpPWX\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"E64901D63D911B4C27A7DFA8D3691B92F51BEC7525269A8485E07A953A44E01D\",\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Sequence\": 15239384,\n            \"PreviousTxnLgrSeq\": 37478575,\n            \"BookNode\": \"0000000000000000\",\n            \"OwnerNode\": \"000000000000028E\",\n            \"PreviousTxnID\": \"689927F683CB4441C6BB0D594EF361155E5206EDF936500CB0668CF5BEC022E4\",\n            \"BookDirectory\": \"90B86A84C7F7843673BCF82E565E69498CAEF463F8055ABA4C0456385DE09800\",\n            \"TakerPays\": {\n              \"value\": \"3.90624\",\n              \"currency\": \"ETH\",\n              \"issuer\": \"rcA8X3TVMST1n3CJeAdGk1RdRCHii7N2h\"\n            },\n            \"TakerGets\": \"3200000000\",\n            \"Account\": \"rENDnFwR3CPvrsPjD9XXeqVoXeVt2CpPWX\"\n          }\n        }\n      }\n    ],\n    \"TransactionResult\": \"tesSUCCESS\"\n  }\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/OfferCreate/Description.tsx",
    "content": "import { useTranslation, Trans } from 'react-i18next'\nimport { localizeDate } from '../../../utils'\nimport {\n  DATE_OPTIONS,\n  CURRENCY_ORDER,\n  XRP_BASE,\n} from '../../../transactionUtils'\nimport { Account } from '../../Account'\nimport {\n  TransactionDescriptionComponent,\n  TransactionDescriptionProps,\n} from '../types'\nimport { convertRippleDate } from '../../../../../rippled/lib/utils'\nimport Currency from '../../Currency'\nimport { Amount } from '../../Amount'\nimport { formatAmount } from '../../../../../rippled/lib/txSummary/formatAmount'\n\nconst normalize = (amount: any) => amount.value || amount / XRP_BASE\n\nconst Description: TransactionDescriptionComponent = (\n  props: TransactionDescriptionProps,\n) => {\n  const { t, i18n } = useTranslation()\n  const language = i18n.resolvedLanguage\n  const { data } = props\n  const paysCurrency = data.tx.TakerPays.currency || 'XRP'\n  const getsCurrency = data.tx.TakerGets.currency || 'XRP'\n  const paysValue = normalize(data.tx.TakerPays)\n  const getsValue = normalize(data.tx.TakerGets)\n  const invert =\n    CURRENCY_ORDER.indexOf(getsCurrency) > CURRENCY_ORDER.indexOf(paysCurrency)\n\n  let rate = getsValue / paysValue\n  let pair\n\n  if (invert) {\n    rate = 1 / rate\n    pair = (\n      <small>\n        <Currency\n          currency={data.tx.TakerGets.currency || 'XRP'}\n          issuer={data.tx.TakerGets.issuer}\n          displaySymbol={false}\n        />\n        /\n        <Currency\n          currency={data.tx.TakerPays.currency || 'XRP'}\n          issuer={data.tx.TakerPays.issuer}\n          displaySymbol={false}\n        />\n      </small>\n    )\n  } else {\n    pair = (\n      <small>\n        <Currency\n          currency={data.tx.TakerPays.currency || 'XRP'}\n          issuer={data.tx.TakerPays.issuer}\n          displaySymbol={false}\n        />\n        /\n        <Currency\n          currency={data.tx.TakerGets.currency || 'XRP'}\n          issuer={data.tx.TakerGets.issuer}\n          displaySymbol={false}\n        />\n      </small>\n    )\n  }\n\n  const renderLine4 = () => {\n    const unixT = convertRippleDate(data.tx.Expiration)\n    const today = new Date()\n    const transString =\n      unixT - today.getTime() > 0\n        ? 'offer_will_expire_desc'\n        : 'offer_did_expire_desc'\n    const date = `${localizeDate(unixT, language, DATE_OPTIONS)} ${\n      DATE_OPTIONS.timeZone\n    }`\n\n    return (\n      <Trans key=\"line4\" i18nKey={transString}>\n        The offer expires\n        <span className=\"time\">{date}</span>\n        unless cancelled before\n      </Trans>\n    )\n  }\n\n  return (\n    <>\n      <div key=\"line1\">\n        <Trans i18nKey=\"offer_create_desc_line_1\">\n          The account\n          <Account account={data.tx.Account} />\n          offered to pay\n          <b>\n            <Amount value={formatAmount(data.tx.TakerGets)} />\n          </b>\n          in order to receive\n          <b>\n            <Amount value={formatAmount(data.tx.TakerPays)} />\n          </b>\n        </Trans>\n      </div>\n      <div key=\"line2\">\n        {t('offer_create_desc_line_2')}\n        <b>\n          <span> {rate.toPrecision(5)}</span>\n          {pair}\n        </b>\n      </div>\n      {data.tx.OfferSequence && (\n        <div key=\"line3\">\n          {t('offer_create_desc_line_3')}\n          <b> {data.tx.OfferSequence}</b>\n        </div>\n      )}\n      {data.tx.Expiration && renderLine4()}\n      {data.tx.DomainID && (\n        <div key=\"line5\">\n          {t('offer_create_desc_line_5')}\n          <b>: {data.tx.DomainID}</b>\n        </div>\n      )}\n    </>\n  )\n}\n\nexport { Description }\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/OfferCreate/Simple.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { Amount } from '../../Amount'\nimport { TransactionSimpleComponent, TransactionSimpleProps } from '../types'\nimport { SimpleRow } from '../SimpleRow'\nimport Currency from '../../Currency'\n\nconst Simple: TransactionSimpleComponent = (props: TransactionSimpleProps) => {\n  const { t } = useTranslation()\n  const { data } = props\n  const { price, firstCurrency, secondCurrency, pays, gets, cancel, domainID } =\n    data.instructions\n\n  return (\n    <>\n      <SimpleRow label={t('price')}>\n        <div className=\"amount\" data-testid=\"amount\">\n          {`${Number(price)}`}\n          <div className=\"one-line\">\n            <Currency\n              currency={firstCurrency.currency}\n              issuer={firstCurrency.issuer}\n              shortenIssuer\n            />\n            /\n            <Currency\n              currency={secondCurrency.currency}\n              issuer={secondCurrency.issuer}\n              shortenIssuer\n            />\n          </div>\n        </div>\n      </SimpleRow>\n      <SimpleRow label={t('buy')} data-testid=\"amount-buy\">\n        <Amount value={pays} />\n      </SimpleRow>\n      <SimpleRow label={t('sell')} data-testid=\"amount-sell\">\n        <Amount value={gets} />\n      </SimpleRow>\n      {cancel && (\n        <SimpleRow label={t('cancel_offer')} data-testid=\"cancel-id\">\n          #{cancel}\n        </SimpleRow>\n      )}\n      {domainID && (\n        <SimpleRow label={t('domain_id')} data-testid=\"domain-id\">\n          {domainID}\n        </SimpleRow>\n      )}\n    </>\n  )\n}\nexport { Simple }\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/OfferCreate/TableDetail.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { Amount } from '../../Amount'\nimport Currency from '../../Currency'\n\nexport const TableDetail = (props: any) => {\n  const { t } = useTranslation()\n  const { instructions } = props\n  const { gets, pays, price, firstCurrency, secondCurrency, cancel, domainID } =\n    instructions\n\n  return pays && gets ? (\n    <div className=\"offercreate\">\n      <div className=\"price\" data-testid=\"pair\">\n        <span className=\"label\">{t('price')}:</span>\n\n        <span className=\"amount\" data-testid=\"amount\">\n          {`${Number(price)} `}\n          <Currency\n            currency={firstCurrency.currency}\n            issuer={firstCurrency.issuer}\n            shortenIssuer\n          />\n          /\n          <Currency\n            currency={secondCurrency.currency}\n            issuer={secondCurrency.issuer}\n            shortenIssuer\n          />\n        </span>\n      </div>\n      <div>\n        <span className=\"label\">{t('buy')}</span>\n        <Amount value={pays} data-testid=\"amount-buy\" />\n      </div>\n      <div>\n        <span className=\"label\">{t('sell')}</span>\n        <Amount value={gets} data-testid=\"amount-sell\" />\n      </div>\n      {cancel && (\n        <div className=\"cancel\" data-testid=\"cancel-id\">\n          <span className=\"label\">{t('cancel_offer')}</span>\n          {` #`}\n          <span className=\"sequence\">{cancel}</span>\n        </div>\n      )}\n      {domainID && (\n        <div className=\"label\" data-testid=\"domain-id\">\n          <span className=\"label\">{t('domain_id')}: </span>\n          <span className=\"case-sensitive\">{domainID}</span>\n        </div>\n      )}\n    </div>\n  ) : null\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/OfferCreate/index.ts",
    "content": "import {\n  TransactionAction,\n  TransactionCategory,\n  TransactionMapping,\n} from '../types'\n\nimport { Simple } from './Simple'\nimport { Description } from './Description'\nimport { parser } from './parser'\nimport { TableDetail } from './TableDetail'\n\nexport const OfferCreateTransaction: TransactionMapping = {\n  Description,\n  Simple,\n  TableDetail,\n  action: TransactionAction.CREATE,\n  category: TransactionCategory.DEX,\n  parser,\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/OfferCreate/parser.ts",
    "content": "import { CURRENCY_ORDER } from '../../../transactionUtils'\nimport { formatAmount } from '../../../../../rippled/lib/txSummary/formatAmount'\n\nexport function parser(tx: any) {\n  const gets = formatAmount(tx.TakerGets)\n  const base = tx.TakerGets.currency ? tx.TakerGets : { currency: 'XRP' }\n  const counter = tx.TakerPays.currency ? tx.TakerPays : { currency: 'XRP' }\n  const pays = formatAmount(tx.TakerPays)\n  const price = Number(pays.amount) / Number(gets.amount)\n  const invert =\n    CURRENCY_ORDER.indexOf(counter.currency) >\n    CURRENCY_ORDER.indexOf(base.currency)\n\n  return {\n    gets,\n    pays,\n    price: (invert ? 1 / price : price).toPrecision(6),\n    firstCurrency: invert ? counter : base,\n    secondCurrency: invert ? base : counter,\n    cancel: tx.OfferSequence,\n    domainID: tx.DomainID,\n  }\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/OfferCreate/test/OfferCreateDescription.test.tsx",
    "content": "import OfferCreate from './mock_data/OfferCreateWithExpirationAndCancel.json'\nimport OfferCreateInvertedCurrencies from './mock_data/OfferCreateInvertedCurrencies.json'\nimport OfferCreateWithPermissionedDomainID from './mock_data/OfferCreateWithPermissionedDomainID.json'\nimport { Description } from '../Description'\nimport { createDescriptionRenderFactory } from '../../test'\n\nconst renderComponent = createDescriptionRenderFactory(Description)\n\ndescribe('OfferCreate: Description', () => {\n  it('renders description for transaction with cancel and expiration', () => {\n    const { container, unmount } = renderComponent(OfferCreate)\n\n    expect(container.innerHTML).toBe(\n      '<div>The account<a data-testid=\"account\" title=\"rETx8GBiH6fxhTcfHM9fGeyShqxozyD3xe\" class=\"account\" href=\"/accounts/rETx8GBiH6fxhTcfHM9fGeyShqxozyD3xe\" data-discover=\"true\">rETx8GBiH6fxhTcfHM9fGeyShqxozyD3xe</a>offered to pay<b><span class=\"amount\" data-testid=\"amount\"><span class=\"amount-localized\" data-testid=\"amount-localized\">1,080,661.95882</span> <a data-testid=\"currency\" class=\"currency\" href=\"/token/CSC.rCSCManTZ8ME9EoLrSHHYKW8PPwWMgkwr\" data-discover=\"true\">CSC.rCSCManTZ8ME9EoLrSHHYKW8PPwWMgkwr</a></span></b>in order to receive<b><span class=\"amount\" data-testid=\"amount\"><span class=\"amount-localized\" data-testid=\"amount-localized\">1,764.293151</span> <span class=\"currency\" data-testid=\"currency\">XRP</span></span></b></div><div>offer_create_desc_line_2<b><span> 612.52</span><small><span class=\"currency\" data-testid=\"currency\">XRP</span>/<a data-testid=\"currency\" class=\"currency\" href=\"/token/CSC.rCSCManTZ8ME9EoLrSHHYKW8PPwWMgkwr\" data-discover=\"true\">CSC.rCSCManTZ8ME9EoLrSHHYKW8PPwWMgkwr</a></small></b></div><div>offer_create_desc_line_3<b> 44866443</b></div>The offer expires<span class=\"time\">May 18, 2022 at 5:28:16 PM UTC</span>unless cancelled before',\n    )\n    unmount()\n  })\n\n  it('renders description for transaction with inverted currencies', () => {\n    const { container, unmount } = renderComponent(\n      OfferCreateInvertedCurrencies,\n    )\n\n    expect(container.innerHTML).toBe(\n      '<div>The account<a data-testid=\"account\" title=\"rXTZ5g8X7mrAYEe7iFeM9fiS4ccueyurG\" class=\"account\" href=\"/accounts/rXTZ5g8X7mrAYEe7iFeM9fiS4ccueyurG\" data-discover=\"true\">rXTZ5g8X7mrAYEe7iFeM9fiS4ccueyurG</a>offered to pay<b><span class=\"amount\" data-testid=\"amount\"><span class=\"amount-localized\" data-testid=\"amount-localized\">17,588.363594</span> <span class=\"currency\" data-testid=\"currency\">XRP</span></span></b>in order to receive<b><span class=\"amount\" data-testid=\"amount\"><span class=\"amount-localized\" data-testid=\"amount-localized\">$6,101.33033905</span> <a data-testid=\"currency\" class=\"currency\" href=\"/token/USD.rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B\" data-discover=\"true\">USD.rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B</a></span></b></div><div>offer_create_desc_line_2<b><span> 0.34690</span><small><span class=\"currency\" data-testid=\"currency\">XRP</span>/<a data-testid=\"currency\" class=\"currency\" href=\"/token/USD.rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B\" data-discover=\"true\">USD.rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B</a></small></b></div><div>offer_create_desc_line_3<b> 80543309</b></div>',\n    )\n    unmount()\n  })\n\n  it('renders description for transaction with Permissioned Domain ID', () => {\n    const { container, unmount } = renderComponent(\n      OfferCreateWithPermissionedDomainID,\n    )\n\n    expect(container.innerHTML).toBe(\n      '<div>The account<a data-testid=\"account\" title=\"rD7ShWxq6xRYWDSDfzhKbfaJDerxd7nnds\" class=\"account\" href=\"/accounts/rD7ShWxq6xRYWDSDfzhKbfaJDerxd7nnds\" data-discover=\"true\">rD7ShWxq6xRYWDSDfzhKbfaJDerxd7nnds</a>offered to pay<b><span class=\"amount\" data-testid=\"amount\"><span class=\"amount-localized\" data-testid=\"amount-localized\">17,588.363594</span> <span class=\"currency\" data-testid=\"currency\">XRP</span></span></b>in order to receive<b><span class=\"amount\" data-testid=\"amount\"><span class=\"amount-localized\" data-testid=\"amount-localized\">$10.00</span> <a data-testid=\"currency\" class=\"currency\" href=\"/token/USD.rnybsH3BZKKCG7fwPzTeLtGejnq6UQyNCC\" data-discover=\"true\">USD.rnybsH3BZKKCG7fwPzTeLtGejnq6UQyNCC</a></span></b></div><div>offer_create_desc_line_2<b><span> 0.00056856</span><small><span class=\"currency\" data-testid=\"currency\">XRP</span>/<a data-testid=\"currency\" class=\"currency\" href=\"/token/USD.rnybsH3BZKKCG7fwPzTeLtGejnq6UQyNCC\" data-discover=\"true\">USD.rnybsH3BZKKCG7fwPzTeLtGejnq6UQyNCC</a></small></b></div><div>offer_create_desc_line_5<b>: 4A4879496CFF23CA32242D50DA04DDB41F4561167276A62AF21899F83DF28812</b></div>',\n    )\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/OfferCreate/test/OfferCreateSimple.test.tsx",
    "content": "import { Simple } from '../Simple'\nimport mockOfferCreateWithCancel from './mock_data/OfferCreateWithExpirationAndCancel.json'\nimport mockOfferCreate from './mock_data/OfferCreate.json'\nimport mockOfferCreateWithPermissionedDomainID from './mock_data/OfferCreateWithPermissionedDomainID.json'\nimport { createSimpleRenderFactory } from '../../test/createWrapperFactory'\n\nconst renderComponent = createSimpleRenderFactory(Simple)\n\ndescribe('OfferCreate: Simple', () => {\n  it('renders with an expiration and offer', () => {\n    const { container, unmount } = renderComponent(mockOfferCreateWithCancel)\n    expect(\n      container.querySelector('[data-testid=\"amount\"] .one-line'),\n    ).toHaveTextContent('\\uE900 XRP/CSC.rCSC')\n    expect(\n      container.querySelector('[data-testid=\"cancel-id\"] .value'),\n    ).toHaveTextContent('#44866443')\n    expect(\n      container.querySelector('[data-testid=\"amount-buy\"] .value'),\n    ).toHaveTextContent(`\\uE9001,764.293151 XRP`)\n    expect(\n      container.querySelector('[data-testid=\"amount-sell\"] .value'),\n    ).toHaveTextContent(`1,080,661.95882 CSC.rCSCManTZ8ME9EoLrSHHYKW8PPwWMgkwr`)\n    unmount()\n  })\n\n  it('renders', () => {\n    const { container } = renderComponent(mockOfferCreate)\n\n    expect(\n      container.querySelector('[data-testid=\"offer-id\"] .value'),\n    ).not.toBeInTheDocument()\n    expect(\n      container.querySelector('[data-testid=\"amount-buy\"] .value'),\n    ).toHaveTextContent(`\\uE90024,755.081083 XRP`)\n    expect(\n      container.querySelector('[data-testid=\"amount-sell\"] .value'),\n    ).toHaveTextContent(`51.41523894 BCH.rcyS4CeCZVYvTiKcxj6Sx32ibKwcDHLds`)\n  })\n\n  it(`renders offerCreate with a Permissioned Domain ID`, () => {\n    const { container } = renderComponent(\n      mockOfferCreateWithPermissionedDomainID,\n    )\n\n    expect(\n      container.querySelector('[data-testid=\"domain-id\"] .value'),\n    ).toHaveTextContent(\n      '4A4879496CFF23CA32242D50DA04DDB41F4561167276A62AF21899F83DF28812',\n    )\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/OfferCreate/test/OfferCreateTableDetail.test.tsx",
    "content": "import { TableDetail } from '../TableDetail'\nimport mockOfferCreateInvertedCurrencies from './mock_data/OfferCreateInvertedCurrencies.json'\nimport mockOfferCreateWithCancel from './mock_data/OfferCreateWithExpirationAndCancel.json'\nimport mockOfferCreate from './mock_data/OfferCreate.json'\nimport mockOfferCreateWithPermissionedDomainID from './mock_data/OfferCreateWithPermissionedDomainID.json'\nimport { createTableDetailRenderFactory } from '../../test'\n\nconst renderComponent = createTableDetailRenderFactory(TableDetail)\n\ndescribe('OfferCreate: TableDetail', () => {\n  it('renders with an expiration and offer', () => {\n    const { container, unmount } = renderComponent(mockOfferCreateWithCancel)\n\n    expect(container.querySelector('[data-testid=\"pair\"]')).toHaveTextContent(\n      'price:612.518 \\uE900 XRP/CSC.rCSC',\n    )\n    expect(\n      container.querySelector('[data-testid=\"cancel-id\"]'),\n    ).toHaveTextContent('cancel_offer #44866443')\n    // Amount components are rendered in order: price (in pair), buy, sell\n    // Skip the first one (price) and check buy/sell\n    const amounts = container.querySelectorAll('[data-testid=\"amount\"]')\n    expect(amounts[1]).toHaveTextContent(`\\uE9001,764.293151 XRP`)\n    expect(amounts[2]).toHaveTextContent(\n      `1,080,661.95882 CSC.rCSCManTZ8ME9EoLrSHHYKW8PPwWMgkwr`,\n    )\n    unmount()\n  })\n\n  it('renders', () => {\n    const { container, unmount } = renderComponent(mockOfferCreate)\n\n    expect(container.querySelector('[data-testid=\"pair\"]')).toHaveTextContent(\n      'price:0.00207696 \\uE900 XRP/BCH.rcyS',\n    )\n    expect(\n      container.querySelector('[data-testid=\"offer-id\"]'),\n    ).not.toBeInTheDocument()\n    // Amount components are rendered in order: price (in pair), buy, sell\n    // Skip the first one (price) and check buy/sell\n    const amounts = container.querySelectorAll('[data-testid=\"amount\"]')\n    expect(amounts[1]).toHaveTextContent(`\\uE90024,755.081083 XRP`)\n    expect(amounts[2]).toHaveTextContent(\n      `51.41523894 BCH.rcyS4CeCZVYvTiKcxj6Sx32ibKwcDHLds`,\n    )\n    unmount()\n  })\n\n  it('renders inverted currencies', () => {\n    const { container, unmount } = renderComponent(\n      mockOfferCreateInvertedCurrencies,\n    )\n\n    expect(container.querySelector('[data-testid=\"pair\"]')).toHaveTextContent(\n      'price:0.346896 \\uE900 XRP/USD.rvYA',\n    )\n    unmount()\n  })\n\n  it(`renders offerCreate with a Permissioned Domain ID`, () => {\n    const { container, unmount } = renderComponent(\n      mockOfferCreateWithPermissionedDomainID,\n    )\n\n    expect(\n      container.querySelector('[data-testid=\"domain-id\"]'),\n    ).toHaveTextContent(\n      'domain_id: 4A4879496CFF23CA32242D50DA04DDB41F4561167276A62AF21899F83DF28812',\n    )\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/OfferCreate/test/mock_data/OfferCreate.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"r3rhWeE31Jt5sWmi4QiGLMZnY3ENgqw96W\",\n    \"Fee\": \"5176\",\n    \"Flags\": 0,\n    \"LastLedgerSequence\": 71724753,\n    \"Sequence\": 56768893,\n    \"SigningPubKey\": \"03C48299E57F5AE7C2BE1391B581D313F1967EA2301628C07AC412092FDC15BA22\",\n    \"TakerGets\": {\n      \"currency\": \"BCH\",\n      \"issuer\": \"rcyS4CeCZVYvTiKcxj6Sx32ibKwcDHLds\",\n      \"value\": \"51.41523894181696\"\n    },\n    \"TakerPays\": \"24755081083\",\n    \"TransactionType\": \"OfferCreate\",\n    \"TxnSignature\": \"3044022069287DAA493E6C5754D32121408F42034F26BE8C8111EC27D8F9FBD9F01448A60220015FB59A284F388322835F9C4EC3C2C9ABCE763F9327C474D0BA668A8632E922\",\n    \"date\": \"2022-05-18T02:40:11Z\",\n    \"warnings\": [\n      {\n        \"id\": 1004,\n        \"message\": \"This is a reporting server.  The default behavior of a reporting server is to only return validated data. If you are looking for not yet validated data, include \\\"ledger_index : current\\\" in your request, which will cause this server to forward the request to a p2p node. If the forward is successful the response will include \\\"forwarded\\\" : \\\"true\\\"\"\n      }\n    ]\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"CreatedNode\": {\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"33C81D720DBA84863A1510FD5C6C3E9224F0F5778261CF175D111AFA1F573DF6\",\n          \"NewFields\": {\n            \"ExchangeRate\": \"5d111afa1f573df6\",\n            \"RootIndex\": \"33C81D720DBA84863A1510FD5C6C3E9224F0F5778261CF175D111AFA1F573DF6\",\n            \"TakerGetsCurrency\": \"0000000000000000000000004243480000000000\",\n            \"TakerGetsIssuer\": \"06CDAB9869053E0AC7764D9ACB35B182CB195414\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"80a5\",\n            \"Owner\": \"r3rhWeE31Jt5sWmi4QiGLMZnY3ENgqw96W\",\n            \"RootIndex\": \"FDE0DCA95589B07340A7D5BE2FD72AA8EEAC878664CC9B707308B4419333E551\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"9E7DC11BB1D16C2157414F189CB738981C64598711D1FA0F15723FBBC11AD83E\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r3rhWeE31Jt5sWmi4QiGLMZnY3ENgqw96W\",\n            \"Balance\": \"220102267009\",\n            \"Flags\": 0,\n            \"OwnerCount\": 108,\n            \"Sequence\": 56768894\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"B1B9AAC12B56B1CFC93DDC8AF6958B50E89509F377ED4825A3D970F249892CE3\",\n          \"PreviousFields\": {\n            \"Balance\": \"220102272185\",\n            \"OwnerCount\": 107,\n            \"Sequence\": 56768893\n          },\n          \"PreviousTxnID\": \"41336A151E6F8F91852E03A04204F62BB186B486691B5AB27AB00A70C3B26B37\",\n          \"PreviousTxnLgrSeq\": 71724751\n        }\n      },\n      {\n        \"CreatedNode\": {\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"E284EF740006031D49F6EDACA80AD8CC3A7507318ADAAE8781A846CF26351C6F\",\n          \"NewFields\": {\n            \"Account\": \"r3rhWeE31Jt5sWmi4QiGLMZnY3ENgqw96W\",\n            \"BookDirectory\": \"33C81D720DBA84863A1510FD5C6C3E9224F0F5778261CF175D111AFA1F573DF6\",\n            \"OwnerNode\": \"80a6\",\n            \"Sequence\": 56768893,\n            \"TakerGets\": {\n              \"currency\": \"BCH\",\n              \"issuer\": \"rcyS4CeCZVYvTiKcxj6Sx32ibKwcDHLds\",\n              \"value\": \"51.41523894181696\"\n            },\n            \"TakerPays\": \"24755081083\"\n          }\n        }\n      }\n    ],\n    \"TransactionIndex\": 16,\n    \"TransactionResult\": \"tesSUCCESS\"\n  },\n  \"hash\": \"DB244B742B5C4CDD11A53D0F487C616D18E8C0EC60FF38F059E167095506820A\",\n  \"ledger_index\": 71724751,\n  \"date\": \"2022-05-18T02:40:11Z\"\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/OfferCreate/test/mock_data/OfferCreateInvertedCurrencies.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rXTZ5g8X7mrAYEe7iFeM9fiS4ccueyurG\",\n    \"Fee\": \"20\",\n    \"Flags\": 2148007936,\n    \"LastLedgerSequence\": 73246636,\n    \"OfferSequence\": 80543309,\n    \"Sequence\": 80543317,\n    \"SigningPubKey\": \"02AC7FB83A5AC706F0613B3D93F1C361D84F6415D4E539E1A8BC66F2198F8CACE4\",\n    \"TakerGets\": \"17588363594\",\n    \"TakerPays\": {\n      \"currency\": \"USD\",\n      \"issuer\": \"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B\",\n      \"value\": \"6101.330339051342\"\n    },\n    \"TransactionType\": \"OfferCreate\",\n    \"TxnSignature\": \"3044022053255898628BD1FFE4BF4CE3EA3D1547740C4C01E87CCF25399574CCF5D5049C0220100028FD3556C78E09FDFD3037AE8842743BE22BB4C4DF820E845DD96A82A7DC\",\n    \"date\": \"2022-07-25T16:00:21Z\",\n    \"warnings\": [\n      {\n        \"id\": 1004,\n        \"message\": \"This is a reporting server.  The default behavior of a reporting server is to only return validated data. If you are looking for not yet validated data, include \\\"ledger_index : current\\\" in your request, which will cause this server to forward the request to a p2p node. If the forward is successful the response will include \\\"forwarded\\\" : \\\"true\\\"\"\n      }\n    ]\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rXTZ5g8X7mrAYEe7iFeM9fiS4ccueyurG\",\n            \"Balance\": \"18649363494\",\n            \"Flags\": 0,\n            \"OwnerCount\": 10,\n            \"Sequence\": 80543318\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"07400FD4578F4DEFDEF1A5C3EB6F6F149ACADECE9963ACB8B71168F4DB7FE212\",\n          \"PreviousFields\": {\n            \"Balance\": \"18649363514\",\n            \"Sequence\": 80543317\n          },\n          \"PreviousTxnID\": \"DF5843F92F6C5D4A346BC157CDA7F66A3A80A2D8EC3EC322B16DC94E68440EC7\",\n          \"PreviousTxnLgrSeq\": 73246635\n        }\n      },\n      {\n        \"CreatedNode\": {\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"1CAE86BA73B8043E63726781443EF2EA32CD6A9489B1858D1FB78021428BE580\",\n          \"NewFields\": {\n            \"Account\": \"rXTZ5g8X7mrAYEe7iFeM9fiS4ccueyurG\",\n            \"BookDirectory\": \"DFA3B6DDAB58C7E8E5D944E736DA4B7046C30E4F460FD9DE4E0C52FFD72214AE\",\n            \"Flags\": 131072,\n            \"Sequence\": 80543317,\n            \"TakerGets\": \"17588363594\",\n            \"TakerPays\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B\",\n              \"value\": \"6101.330339051342\"\n            }\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"0\",\n            \"IndexPrevious\": \"0\",\n            \"Owner\": \"rXTZ5g8X7mrAYEe7iFeM9fiS4ccueyurG\",\n            \"RootIndex\": \"5F3DA35DF75B05413178A5945C63B06B9489F2EFACF65CF3053638B65B5B8777\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"5F3DA35DF75B05413178A5945C63B06B9489F2EFACF65CF3053638B65B5B8777\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rXTZ5g8X7mrAYEe7iFeM9fiS4ccueyurG\",\n            \"BookDirectory\": \"DFA3B6DDAB58C7E8E5D944E736DA4B7046C30E4F460FD9DE4E0C52FFD72214AD\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"A59445B441B2C2EBDE2EEA8FE7079A6D6631CFAB6A73FC8677DEA7AB48B393C7\",\n            \"PreviousTxnLgrSeq\": 73246632,\n            \"Sequence\": 80543309,\n            \"TakerGets\": \"17588363754\",\n            \"TakerPays\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B\",\n              \"value\": \"6101.330394554676\"\n            }\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"C665813A16DC6539C0F794479516D4DEFD85EDE677C0A5475475D87C443A2228\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"4e0c52ffd72214ad\",\n            \"Flags\": 0,\n            \"RootIndex\": \"DFA3B6DDAB58C7E8E5D944E736DA4B7046C30E4F460FD9DE4E0C52FFD72214AD\",\n            \"TakerGetsCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysCurrency\": \"0000000000000000000000005553440000000000\",\n            \"TakerPaysIssuer\": \"0A20B3C85F482532A9578DBB3950B85CA06594D1\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"DFA3B6DDAB58C7E8E5D944E736DA4B7046C30E4F460FD9DE4E0C52FFD72214AD\"\n        }\n      },\n      {\n        \"CreatedNode\": {\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"DFA3B6DDAB58C7E8E5D944E736DA4B7046C30E4F460FD9DE4E0C52FFD72214AE\",\n          \"NewFields\": {\n            \"ExchangeRate\": \"4e0c52ffd72214ae\",\n            \"RootIndex\": \"DFA3B6DDAB58C7E8E5D944E736DA4B7046C30E4F460FD9DE4E0C52FFD72214AE\",\n            \"TakerPaysCurrency\": \"0000000000000000000000005553440000000000\",\n            \"TakerPaysIssuer\": \"0A20B3C85F482532A9578DBB3950B85CA06594D1\"\n          }\n        }\n      }\n    ],\n    \"TransactionIndex\": 39,\n    \"TransactionResult\": \"tesSUCCESS\"\n  },\n  \"hash\": \"75B818FCF3C74E4A7F0829AE899BDC927191C740E8D37D1451908907AA5C5078\",\n  \"ledger_index\": 73246635,\n  \"date\": \"2022-07-25T16:00:21Z\"\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/OfferCreate/test/mock_data/OfferCreateWithExpiration.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rsG5iLf2gey9e1vVtLBb1R88XskVGWVAw1\",\n    \"Expiration\": 737735327,\n    \"Fee\": \"12\",\n    \"Flags\": 2148007936,\n    \"LastLedgerSequence\": 71735709,\n    \"Sequence\": 71310941,\n    \"SigningPubKey\": \"0328508E495AC91BEA0EA4EC65C7861661C57FF0C45287CB386F4100F1711E8D85\",\n    \"TakerGets\": {\n      \"currency\": \"BPM\",\n      \"issuer\": \"rDBMvpjV6DoWvr3LqMUG8JBgd4QbBoU1E2\",\n      \"value\": \"1\"\n    },\n    \"TakerPays\": \"71420000\",\n    \"TransactionType\": \"OfferCreate\",\n    \"TxnSignature\": \"3045022100A19A1039C367E871F301DDDA5A105201F7A322E293C2749EC34B471E7806356902204CE49171C40BE9279F1293DBDA21FEB1EC55E0ED1760C78F85D1A2EA9E152940\",\n    \"date\": \"2022-05-18T14:30:00Z\",\n    \"warnings\": [\n      {\n        \"id\": 1004,\n        \"message\": \"This is a reporting server.  The default behavior of a reporting server is to only return validated data. If you are looking for not yet validated data, include \\\"ledger_index : current\\\" in your request, which will cause this server to forward the request to a p2p node. If the forward is successful the response will include \\\"forwarded\\\" : \\\"true\\\"\"\n      }\n    ]\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rpwfJxJ9MrRPPstaBSEtuSCzLhDsmUYjaQ\",\n            \"RootIndex\": \"007B86804A6D6F78B3B095B9A00678245069593542D7C60A82EBCBE1D1A1AA85\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"007B86804A6D6F78B3B095B9A00678245069593542D7C60A82EBCBE1D1A1AA85\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rpwfJxJ9MrRPPstaBSEtuSCzLhDsmUYjaQ\",\n            \"BookDirectory\": \"AA9EB97185D32FE5CB61A2AD883F0AAA66507E77DCFE03384D04F94AE6AF8000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"Sequence\": 66239955,\n            \"TakerGets\": \"147170905\",\n            \"TakerPays\": {\n              \"currency\": \"BPM\",\n              \"issuer\": \"rDBMvpjV6DoWvr3LqMUG8JBgd4QbBoU1E2\",\n              \"value\": \"2.060392678\"\n            }\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"4C39E3771FFD78C03F4BD8F7AE111289DCB8C00BDB25181FBB73570EB7EFFA84\",\n          \"PreviousFields\": {\n            \"TakerGets\": \"208392400\",\n            \"TakerPays\": {\n              \"currency\": \"BPM\",\n              \"issuer\": \"rDBMvpjV6DoWvr3LqMUG8JBgd4QbBoU1E2\",\n              \"value\": \"2.9174936\"\n            }\n          },\n          \"PreviousTxnID\": \"AEB07E1D2BE2A2991C5A7951C3E98AF6A743E3D5E688A5BA23B099AEB4F0746A\",\n          \"PreviousTxnLgrSeq\": 71735429\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rpwfJxJ9MrRPPstaBSEtuSCzLhDsmUYjaQ\",\n            \"Balance\": \"164963813\",\n            \"Flags\": 0,\n            \"OwnerCount\": 9,\n            \"Sequence\": 66239956\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"8DFC879437AE0F7C59A44B0BEBA81AB04E1A42FB2BCEF0E15030A9399AF162DE\",\n          \"PreviousFields\": {\n            \"Balance\": \"236392385\",\n            \"OwnerCount\": 10\n          },\n          \"PreviousTxnID\": \"AEB07E1D2BE2A2991C5A7951C3E98AF6A743E3D5E688A5BA23B099AEB4F0746A\",\n          \"PreviousTxnLgrSeq\": 71735429\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"BPM\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"5000099\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"BPM\",\n              \"issuer\": \"rDBMvpjV6DoWvr3LqMUG8JBgd4QbBoU1E2\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"7\",\n            \"LowLimit\": {\n              \"currency\": \"BPM\",\n              \"issuer\": \"rsG5iLf2gey9e1vVtLBb1R88XskVGWVAw1\",\n              \"value\": \"10000000000\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"A2571B11B6DD963EA3A0CFEC43E7C226A2DD621A960460338D95C07CEB73E3B0\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"BPM\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"5000100\"\n            }\n          },\n          \"PreviousTxnID\": \"603978602C11C97206F58B81E0825EBCEEDFB753C9CE62496522B732DB3AD2A2\",\n          \"PreviousTxnLgrSeq\": 71735541\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"4d04f94ae6af8000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"AA9EB97185D32FE5CB61A2AD883F0AAA66507E77DCFE03384D04F94AE6AF8000\",\n            \"TakerGetsCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysCurrency\": \"00000000000000000000000042504D0000000000\",\n            \"TakerPaysIssuer\": \"8597209DD7A086DE4002A5BCF25D25FEB41DD6CD\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"AA9EB97185D32FE5CB61A2AD883F0AAA66507E77DCFE03384D04F94AE6AF8000\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"BPM\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"1\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"BPM\",\n              \"issuer\": \"rDBMvpjV6DoWvr3LqMUG8JBgd4QbBoU1E2\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"31\",\n            \"LowLimit\": {\n              \"currency\": \"BPM\",\n              \"issuer\": \"rpwfJxJ9MrRPPstaBSEtuSCzLhDsmUYjaQ\",\n              \"value\": \"10000000000\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"C2B353479AD0023E8E37F16E468565D6B36189043F3031AFE1409729DF31E0C6\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"BPM\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            }\n          },\n          \"PreviousTxnID\": \"192446F3FACE5A644BCE9535643137DC3F0AF12C0D269E8987D4C4E6DF822336\",\n          \"PreviousTxnLgrSeq\": 71735127\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rpwfJxJ9MrRPPstaBSEtuSCzLhDsmUYjaQ\",\n            \"BookDirectory\": \"AA9EB97185D32FE5CB61A2AD883F0AAA66507E77DCFE03384D04F94AE6AF8000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"3CCF0FA2DD55D6AD65F6BAB659C1E3678C5A85856B8266F68B72C5119C6C9180\",\n            \"PreviousTxnLgrSeq\": 71735213,\n            \"Sequence\": 66239953,\n            \"TakerGets\": \"0\",\n            \"TakerPays\": {\n              \"currency\": \"BPM\",\n              \"issuer\": \"rDBMvpjV6DoWvr3LqMUG8JBgd4QbBoU1E2\",\n              \"value\": \"0\"\n            }\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"E49A1AC62924EC4F29196985632D3C8F35E46F1C1547466E4CDC72861543B2B1\",\n          \"PreviousFields\": {\n            \"TakerGets\": \"10207077\",\n            \"TakerPays\": {\n              \"currency\": \"BPM\",\n              \"issuer\": \"rDBMvpjV6DoWvr3LqMUG8JBgd4QbBoU1E2\",\n              \"value\": \"0.142899078\"\n            }\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rsG5iLf2gey9e1vVtLBb1R88XskVGWVAw1\",\n            \"Balance\": \"99428470\",\n            \"Flags\": 0,\n            \"OwnerCount\": 2,\n            \"Sequence\": 71310942\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"F90B2824129799001E35CCBA4E8583038F9BCFE28B229A082055235594198D69\",\n          \"PreviousFields\": {\n            \"Balance\": \"27999910\",\n            \"Sequence\": 71310941\n          },\n          \"PreviousTxnID\": \"D8BF6CBD4F3C4101808C2401B569E613D30840330AAFE5FF4C1EF68ED7E7FC7A\",\n          \"PreviousTxnLgrSeq\": 71578111\n        }\n      }\n    ],\n    \"TransactionIndex\": 19,\n    \"TransactionResult\": \"tesSUCCESS\"\n  },\n  \"hash\": \"42E717B9936C13DBA659E36AE8AC4D4C51D282AD851E0F068379B2F13E8BD73D\",\n  \"ledger_index\": 71735683,\n  \"date\": \"2022-05-18T14:30:00Z\"\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/OfferCreate/test/mock_data/OfferCreateWithExpirationAndCancel.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rETx8GBiH6fxhTcfHM9fGeyShqxozyD3xe\",\n    \"Expiration\": 706210096,\n    \"Fee\": \"20\",\n    \"Flags\": 2148073472,\n    \"LastLedgerSequence\": 71737504,\n    \"OfferSequence\": 44866443,\n    \"Sequence\": 44866499,\n    \"SigningPubKey\": \"02E729FFD554E5254291CB033D0CC08B32D6A3795A747C5F4F7DFECA20B616B6BF\",\n    \"TakerGets\": {\n      \"currency\": \"CSC\",\n      \"issuer\": \"rCSCManTZ8ME9EoLrSHHYKW8PPwWMgkwr\",\n      \"value\": \"1080661.95882\"\n    },\n    \"TakerPays\": \"1764293151\",\n    \"TransactionType\": \"OfferCreate\",\n    \"TxnSignature\": \"304402205868DB7AA2E00E68BE0E85DEF12257634D4AADCFED65A1B46CABA2FF8147F04D02201384DF6FD397DAA61B4EE7CBEFEDCCF2FC6B5D91679BE5ED6FF1F1691FC4C1BB\",\n    \"date\": \"2022-05-18T16:28:20Z\"\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"651\",\n            \"Owner\": \"rETx8GBiH6fxhTcfHM9fGeyShqxozyD3xe\",\n            \"RootIndex\": \"8D47835C2516C1F8F28A43C140356DA142DEB58CA29EF27212ECE6DCFC4472C7\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"170193B7EFAB8B71E41C8E3A835297E5D0EA1B11C36E60416EBBB4C47E482CA0\"\n        }\n      },\n      {\n        \"CreatedNode\": {\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"B288090D3C8C2DFE50D835DB4C0F09EAF4C1ABF29B1F92DD5805CCD843C9A8EA\",\n          \"NewFields\": {\n            \"ExchangeRate\": \"5805ccd843c9a8ea\",\n            \"RootIndex\": \"B288090D3C8C2DFE50D835DB4C0F09EAF4C1ABF29B1F92DD5805CCD843C9A8EA\",\n            \"TakerGetsCurrency\": \"0000000000000000000000004353430000000000\",\n            \"TakerGetsIssuer\": \"07453A365D565F637A8CB8478AF080F2CE8E0D48\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5805ce7569d293be\",\n            \"Flags\": 0,\n            \"RootIndex\": \"B288090D3C8C2DFE50D835DB4C0F09EAF4C1ABF29B1F92DD5805CE7569D293BE\",\n            \"TakerGetsCurrency\": \"0000000000000000000000004353430000000000\",\n            \"TakerGetsIssuer\": \"07453A365D565F637A8CB8478AF080F2CE8E0D48\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"B288090D3C8C2DFE50D835DB4C0F09EAF4C1ABF29B1F92DD5805CE7569D293BE\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rETx8GBiH6fxhTcfHM9fGeyShqxozyD3xe\",\n            \"BookDirectory\": \"B288090D3C8C2DFE50D835DB4C0F09EAF4C1ABF29B1F92DD5805CE7569D293BE\",\n            \"BookNode\": \"0\",\n            \"Expiration\": 706210036,\n            \"Flags\": 196608,\n            \"OwnerNode\": \"6a8\",\n            \"PreviousTxnID\": \"7C71DA321971CAA5222FC702B2A7F4E7160F0DCD3E22F64D91800CF202D9D949\",\n            \"PreviousTxnLgrSeq\": 71737489,\n            \"Sequence\": 44866443,\n            \"TakerGets\": {\n              \"currency\": \"CSC\",\n              \"issuer\": \"rCSCManTZ8ME9EoLrSHHYKW8PPwWMgkwr\",\n              \"value\": \"1080661.95882\"\n            },\n            \"TakerPays\": \"1766210742\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"C36A1E486775F89E5A2312A0A27913B144623034982B44043F93C0425D9E77C7\"\n        }\n      },\n      {\n        \"CreatedNode\": {\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"E1C174026DED3E3443223915D38045C0B442BE0741BD4E82B6B100A622C819B0\",\n          \"NewFields\": {\n            \"Account\": \"rETx8GBiH6fxhTcfHM9fGeyShqxozyD3xe\",\n            \"BookDirectory\": \"B288090D3C8C2DFE50D835DB4C0F09EAF4C1ABF29B1F92DD5805CCD843C9A8EA\",\n            \"Expiration\": 706210096,\n            \"Flags\": 196608,\n            \"OwnerNode\": \"6a8\",\n            \"Sequence\": 44866499,\n            \"TakerGets\": {\n              \"currency\": \"CSC\",\n              \"issuer\": \"rCSCManTZ8ME9EoLrSHHYKW8PPwWMgkwr\",\n              \"value\": \"1080661.95882\"\n            },\n            \"TakerPays\": \"1764293151\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rETx8GBiH6fxhTcfHM9fGeyShqxozyD3xe\",\n            \"Balance\": \"85999100\",\n            \"Flags\": 0,\n            \"MessageKey\": \"02000000000000000000000000F3AE90A6141CEB9C639BA74FC024278306F6D42E\",\n            \"OwnerCount\": 15,\n            \"Sequence\": 44866500\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"E938FF495007E7C01911CDFDA087111CD0130C8A6FDACCCB34914636A31486C5\",\n          \"PreviousFields\": {\n            \"Balance\": \"85999120\",\n            \"Sequence\": 44866499\n          },\n          \"PreviousTxnID\": \"0CE8053EA958D04400D1930370ECC3FD582CE924110C9B07E83295A6FBAB1E85\",\n          \"PreviousTxnLgrSeq\": 71737504\n        }\n      }\n    ],\n    \"TransactionIndex\": 23,\n    \"TransactionResult\": \"tesSUCCESS\"\n  },\n  \"hash\": \"6FDE7EC0DAC71E7B2684CC2C4A1F2C3DC84B81A87B9172322BC1A8EFB49438F5\",\n  \"ledger_index\": 71737504,\n  \"date\": \"2022-05-18T16:28:20Z\"\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/OfferCreate/test/mock_data/OfferCreateWithMissingPreviousFields.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"ratboJVqeveTRpRvto7G811syRvhgQXBtB\",\n    \"Expiration\": 727237801,\n    \"Fee\": \"18\",\n    \"Flags\": 2148007936,\n    \"LastLedgerSequence\": 69064214,\n    \"Sequence\": 67114055,\n    \"SigningPubKey\": \"03103FED6076D5F3E7ED496A74F3EC5CA04A1AFC3A4FB7E90828EF72DE70386750\",\n    \"TakerGets\": \"529000000000000\",\n    \"TakerPays\": {\n      \"currency\": \"5852534849420000000000000000000000000000\",\n      \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n      \"value\": \"1058000000000000e-3\"\n    },\n    \"TransactionType\": \"OfferCreate\",\n    \"TxnSignature\": \"304402200585B12D8DD376F695DD1F3AD89039A26735770F4A73D64B07D7B71B1B0A95F702202555AB355B1A51788E67F3BA28BBE142CE7F1C53935FEA3510D5FED74A89DACB\",\n    \"date\": \"2022-01-17T02:30:40Z\",\n    \"warnings\": [\n      {\n        \"id\": 1004,\n        \"message\": \"This is a reporting server.  The default behavior of a reporting server is to only return validated data. If you are looking for not yet validated data, include \\\"ledger_index : current\\\" in your request, which will cause this server to forward the request to a p2p node. If the forward is successful the response will include \\\"forwarded\\\" : \\\"true\\\"\"\n      }\n    ]\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rESTNm5GsJf8WQEnEmszRCsiEzHuFAcgQk\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36522354ECBEA090F2\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"6\",\n            \"PreviousTxnID\": \"60E4D345CD33480E2754CAF28FA43CA095E8688966D13570EB4362DC24F9CF9C\",\n            \"PreviousTxnLgrSeq\": 68868327,\n            \"Sequence\": 66677005,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"0025AEB8071D71500CA087333147FCBDD6F9AAEC6634B136D5CEE957A99DFFA3\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7785989866\"\n            },\n            \"TakerPays\": \"77431669\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rfnaFsTkxCWYtenT3MxsFxjjrX4F7itNzd\",\n            \"Balance\": \"1623057702\",\n            \"Flags\": 0,\n            \"OwnerCount\": 252,\n            \"Sequence\": 66195695\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"004EE8ED4AE2A11701BBF2609366B3A43F645BE1BE3D5C42BD3B5D711FA316E6\",\n          \"PreviousFields\": {\n            \"Balance\": \"1584127753\",\n            \"OwnerCount\": 253\n          },\n          \"PreviousTxnID\": \"5C83A59E0EC77E2CFBF9DCF06BD63DBF1C2644FC0D195594142C33649ABCCC10\",\n          \"PreviousTxnLgrSeq\": 69064164\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-290951959.25848\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rEpLbrik9r6KpjVbWXA71SVQnMCkY8BEUK\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"ada\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"00576D745238740783A3DEFF51D2FC6606F577A39FADF76EA8558690FDB2D552\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-76409507595.13332\"\n            }\n          },\n          \"PreviousTxnID\": \"C34BB20F960AD4382D529D218E71BCBB81969568CCD6A82BBFC6AAC78EBF9C08\",\n          \"PreviousTxnLgrSeq\": 69034874\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"b\",\n            \"Owner\": \"rsE3JJ4VxxndQwzRusS99pmAeYN3bEYZmc\",\n            \"RootIndex\": \"2BA630BE21EDA0681F0E98D4441383EE77C77A06851F782EA598B84CDBE04183\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"006028C8ADFCC39CA785003945D6EA95EE3E31743D0C705366BFFA710708BE76\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"5750000000\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"efc\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rpJZ3qkUBb3m68p3YrzJE7onMcswN4XDY8\",\n              \"value\": \"9999610698104576e-1\"\n            },\n            \"LowNode\": \"8\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"006402E81497BD2F2913A6A2F7F72946BDD7ADD86E4CAD7A7E1BEB6C20B8B1BD\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"25750000000\"\n            }\n          },\n          \"PreviousTxnID\": \"29C20A49F2FA1A18054D55087FC2284BBB92F85782982A23AD8CA758C7577D7F\",\n          \"PreviousTxnLgrSeq\": 68990958\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"3\",\n            \"IndexPrevious\": \"1\",\n            \"Owner\": \"rGZkP89rxHSHy1opAagx8cUx4JdMhr9v4\",\n            \"RootIndex\": \"846A7CB5E09802AF1EE9B5B2C96CA9F1862FE77698FEE5728215DD2AB5B9C4AE\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"0069DB26B59B239235E14C7D0AA7390946B8635C15A223738DF748D3D4152595\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rNoN8BUzTSY5oyJmAMiKNGo1k8PSxhyJzc\",\n            \"Balance\": \"412799122\",\n            \"Flags\": 0,\n            \"OwnerCount\": 142,\n            \"Sequence\": 67232094\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"00856884D9892892CD5B6F54BA568146CF6C776B6665F31E95CFD67200C8960F\",\n          \"PreviousFields\": {\n            \"Balance\": \"296009275\",\n            \"OwnerCount\": 143\n          },\n          \"PreviousTxnID\": \"9CD4143710835ED770C1EE5554381657573797150D26AA189B1653CA5D98C9B3\",\n          \"PreviousTxnLgrSeq\": 68989854\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"2da\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rnhFkVQVhLHoMBNc5aUNk5fRvZfXmt16nz\",\n              \"value\": \"1000000000000000\"\n            },\n            \"LowNode\": \"1\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"009C2B988ADF8022EC6A00381C96828E2D9DEA14678EADE1137FF96A909E170E\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"7785989866\"\n            }\n          },\n          \"PreviousTxnID\": \"AFE01AA91FE14CA8DC6D7E3B4BE16EB5684C16A1039A7BE1A336048BF17CA767\",\n          \"PreviousTxnLgrSeq\": 67951474\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rMAWeQvUd5zQpyY9hSdaUMRMTQHcgAXvj5\",\n              \"value\": \"9999999997999989e-1\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"9c8\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"00BB2037F9D0266BE80288560E5402B7FB1E1423E119B22DAA1C11367B20A752\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-61293868439.03283\"\n            }\n          },\n          \"PreviousTxnID\": \"48C140CC2CA353858C4C311A5D146514E8F131DD62F00433B7F510EFA6DD7D2D\",\n          \"PreviousTxnLgrSeq\": 69044256\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-70073908794\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rLkaQPNxjeDmFBqhQ2GszmgT4wxykPCP5K\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"537\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"00D4C120F87FEB629CE72EE760459A7345BCC8D1246F7B5F9F3395537BFAC37B\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-88183309987.39236\"\n            }\n          },\n          \"PreviousTxnID\": \"0A0E0771F6EC02D17D0A6A45E3A03D5E2460B6F3307AB9A2054024828E1F3808\",\n          \"PreviousTxnLgrSeq\": 69023482\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"ebc\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rMhxYNNMAgwGdSciDqnCb8tVqJZ22VCCL\",\n              \"value\": \"1000000000000000e-1\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"00E53A1AA480024150E77841498BAE248742A03721FE7C8354556BEA98B750EF\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"1881122768316515e-4\"\n            }\n          },\n          \"PreviousTxnID\": \"323A1B5D0A3AC9563EA91FDD2DEDD2CE093394F49DF4639C506542428DE296F9\",\n          \"PreviousTxnLgrSeq\": 68940869\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"8565760891.33962\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"d88\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"r3pUPUHoXbK4o5wjfPWjqQe4Xh2wu2KWvq\",\n              \"value\": \"9999999997999990e-1\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"00EC342A4E3EBC371D82BDBF69DF5F28E0C89B68740F095F483E4141C4AB22C7\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"44585839772.10755\"\n            }\n          },\n          \"PreviousTxnID\": \"00C70A0DCA209C7295F5AD94FC7B284A138AD7F80D622CCA946F5B1EE813D2B2\",\n          \"PreviousTxnLgrSeq\": 69044299\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rJ7DCt3RdTywMMwKTq2Pm8srSeU4GvmSiW\",\n            \"Balance\": \"415751859\",\n            \"Flags\": 0,\n            \"OwnerCount\": 144,\n            \"Sequence\": 67713565\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"00F0C469079DBB3EBF352C661E1F82D6DB7FF4ABBF9EBB97BD781425AAD0A1A2\",\n          \"PreviousFields\": {\n            \"Balance\": \"353354280\",\n            \"OwnerCount\": 145\n          },\n          \"PreviousTxnID\": \"4D1D313B5142975FE2A3145838F1017674BD1AAA712BB1497BCE3EE7FBD42AEE\",\n          \"PreviousTxnLgrSeq\": 69063778\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rMGX6LAGxRUHd4g3yW1ukFhThgiCxMioX3\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365208077540DD5B6E\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"9AAFF0D67BD99FA249A98B4B6DBA2257F30228388C5ACB8B94E27D3F92E14F7A\",\n            \"PreviousTxnLgrSeq\": 69044585,\n            \"Sequence\": 68628053,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"1152727648821991e-4\"\n            },\n            \"TakerPays\": \"260516448\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"013374CBB57A02A47E537F589B384AEF18DDC771FB63290ABE931A53F0A90E7A\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rDfGPHrMgjFmWvA3TRkx5rcD85Y9sNizB2\",\n            \"RootIndex\": \"6B73EED7B040E0EB3B9132367495EC6A6F6E2573B7823B38FE4E824F0CE47B7C\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"01476A1DD222ECD72611FB829EC7AA7D4AAD06059135F7BAD5E8C9C8AD46DAB9\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rnMENGbcT6QgrfDGjz7UJvyMryD8YPdi3y\",\n            \"Balance\": \"9920379350\",\n            \"Flags\": 0,\n            \"OwnerCount\": 72,\n            \"Sequence\": 65874420\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"014CBDDF684B031FC0583D59255B6334B65C7336C30E5E44D8A92DEA61140255\",\n          \"PreviousFields\": {\n            \"Balance\": \"161999928\",\n            \"OwnerCount\": 73\n          },\n          \"PreviousTxnID\": \"1A3DE882FF56D5A6DDDC6D669E3D0AA690BFCF88262F5CE09C907ACD94386D8C\",\n          \"PreviousTxnLgrSeq\": 68991027\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"3\",\n            \"IndexPrevious\": \"1\",\n            \"Owner\": \"rnDZQsMj4ttxiiL23S8LEAzhbhNtK3P6ap\",\n            \"RootIndex\": \"0378B0BC7791CCD5B887C038F36A0C47BF7407C8764C3305669B7FAF0C60F3EF\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"0153863EAF9D3D5A50C4A5F6F5D92504E0A7330E511DB53D05B14FBCE997F3D4\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"2\",\n            \"Owner\": \"rB7sr2UvCBewPJXg9My4kjDFWDF9URdRuJ\",\n            \"RootIndex\": \"767DC66E41CB93802611E7E7D770E4EC180A94EDEA10B3B2EC7A57BA45616EA7\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"015A94886F0D80D3CF0A60E710665E9036D67C82AC642F5CA8948465DF08F2E3\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"803\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rpeh8BoXFBaV9nkmRvyHWMt9tGagwWhk5s\",\n              \"value\": \"9999999999999999e-1\"\n            },\n            \"LowNode\": \"1\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"017C4B3C0B91C01AA81F6568E3E1154D25CE4482F9CD4C5EDEC762B25A2ECF10\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"7785989866\"\n            }\n          },\n          \"PreviousTxnID\": \"1503FBEE8ABF735F587ADE3990464B1D45647019BE39F05C037ED5EBCDF6A4C0\",\n          \"PreviousTxnLgrSeq\": 67993303\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"b\",\n            \"Owner\": \"r3mZ69KGMSXXfdFe2xxeNvSkA98mQQ52aF\",\n            \"RootIndex\": \"6D30E557DAD896881F769671001834736F3425E9A87920263677491949B5A151\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"018C22EA13F5D541FB6E4A61AE978790684E7C82C0B663DF9A11B5CA97B33FBA\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"f08\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rfn3KpY6HS6aE1vviRjhHfNn3BfuSrhmzv\",\n              \"value\": \"9999610698094578e-1\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"019AD1D97D34FC4CCC1112E99EC9B155FAFEBD3AF2136C1E7B386658F2427D41\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"8800001000\"\n            }\n          },\n          \"PreviousTxnID\": \"A92B0EB6D2BD0339FDD1044FCA07B6E9A6195129DB9C94E271AEF28DE8998CDC\",\n          \"PreviousTxnLgrSeq\": 69029858\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"d\",\n            \"IndexPrevious\": \"b\",\n            \"Owner\": \"rGMM3Ag2DiYP71uk8mWQi8fafCQczx8ouK\",\n            \"RootIndex\": \"6CFD694ADD9E400E492F218639C9D4327E10F22E0A9F39BBC8E02FE373F93D0E\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"019D8DE73CBEC286FD445D00BFE5170602B2EFBEE222C287C28B5EF5C68CAFCD\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"ede\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rh8TcfXzDZdQBB8R9aQfE2zUUwpd1zbEWv\",\n              \"value\": \"9999999999999990e-1\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"01B27F486CA3CBDE4ACAA56D82FC39F831F14A3A4BB09E8CAD05EA14F1C6B986\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"1999999999999999e-4\"\n            }\n          },\n          \"PreviousTxnID\": \"F1F73F4E6AEBAC69C6551DE27AE748A951C2A4CCE76D7C107DCF13FE5BAB961A\",\n          \"PreviousTxnLgrSeq\": 68898560\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"767\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rwyhjUuEiNmgv4AG4ptie2eAWqN4kfraxv\",\n              \"value\": \"9999999999999999e-1\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"01E7B58F8272F89F2F9CF9C2B5645DE523B35CD0826F770906BE9A92A6D25C15\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"10000000000\"\n            }\n          },\n          \"PreviousTxnID\": \"A2535790B7E8900FBC3EC47C06E3E1AFBD81FC16CB3AA70EF6AF8A42971DC08E\",\n          \"PreviousTxnLgrSeq\": 68902682\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rENubezZP8CRwDNdupJB2J8D1GxukZ7hjv\",\n            \"Balance\": \"357888429\",\n            \"Flags\": 0,\n            \"OwnerCount\": 61,\n            \"Sequence\": 67385257\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"020FD37B8CCA04F2632B5856E12B69C4512409541598AF0E701EDEC5EF032108\",\n          \"PreviousFields\": {\n            \"Balance\": \"337888429\",\n            \"OwnerCount\": 62\n          },\n          \"PreviousTxnID\": \"2911158C391867F6FDC9C550045373855E8718907EE8B4BD9A1CE78687485866\",\n          \"PreviousTxnLgrSeq\": 69061950\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rsdrgJ5xtkPpnWfJeeshHZLWmQEMS3cFzQ\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653038D7EA4C68000\",\n            \"BookNode\": \"0\",\n            \"Expiration\": 722825997,\n            \"Flags\": 131072,\n            \"OwnerNode\": \"4\",\n            \"PreviousTxnID\": \"038BABFE15B6E2EAAD9134953132CC40B1FC72B13466AB6695E7B5325420382B\",\n            \"PreviousTxnLgrSeq\": 67961739,\n            \"Sequence\": 67219914,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"02242D3A2968A901D2657D4BDE9BBD3BC8C76F837AD51713977B249878C595CB\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"5000000000\"\n            },\n            \"TakerPays\": \"50000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rMGXtc2jn88JResx6QRWgyxUvdrXRwmZ7J\",\n            \"Balance\": \"232197593\",\n            \"Flags\": 0,\n            \"OwnerCount\": 39,\n            \"Sequence\": 66730949\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"029CA399728272C05ECFBC2BD18DA11142E4EDA2DC6C40210C72D8069D980C57\",\n          \"PreviousFields\": {\n            \"Balance\": \"89999985\",\n            \"OwnerCount\": 40\n          },\n          \"PreviousTxnID\": \"4D2DF5F52510E75F80F548291F82233717D47B41215398B59F97BB5EE3214209\",\n          \"PreviousTxnLgrSeq\": 69026936\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"c\",\n            \"IndexPrevious\": \"a\",\n            \"Owner\": \"rPhzFvrw8hkGkdzQvSRjuHuESLDqnd6xDg\",\n            \"RootIndex\": \"9FE3D8E47F8AE95559809E2B2408BCB07A48681C059D7EAF51382704171B22D3\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"030C100AC3BA02B469513C24482DF3169E3BFA5A3151CAF21F65CF0498BAA5D3\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"3\",\n            \"Owner\": \"rNirEvsSGiRDGtL68t6MJwfAyU1MExreYv\",\n            \"RootIndex\": \"651B32528BEA8B8A73B48ED10EB3CE11A0C907551EC6E0DAFB9CEF77ECEF1EF8\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"0325B3D2228B862CFE41AA412EC9F8AAA37183C95A4CC6F59BF774C6406831FA\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"r4VjGvXZQwpAy5iqMCt6kbSbFb7Bi8RYEG\",\n              \"value\": \"9999610698104584e-1\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"eda\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"032CEC5A55D5D6FCEE7EF7C33F8A5469E8CB7EE88534DA146CBF6307B29F2673\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-20100012300\"\n            }\n          },\n          \"PreviousTxnID\": \"A20D9847E15FA7A7E506E22A80FE1A1FAEEF11DDA7E4C0E418E0D9C0D9002E87\",\n          \"PreviousTxnLgrSeq\": 68922661\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rs4wbWdssBMJRgn4tJak3eq1JgrJ7Pgfnk\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365210B27184EC2AB6\",\n            \"BookNode\": \"0\",\n            \"Expiration\": 726846407,\n            \"Flags\": 0,\n            \"OwnerNode\": \"4\",\n            \"PreviousTxnID\": \"D0F1D54AF5B9A8A3FF9D400AEA05D4E6E0AA597AC09BF56E2B34164B3C484AB7\",\n            \"PreviousTxnLgrSeq\": 68964741,\n            \"Sequence\": 67390727,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"034A1D79B3937372E4944824FCBA9FCF163A9DEA1F75E4495724B133C36143B9\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"22341375000\"\n            },\n            \"TakerPays\": \"105000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-10000000000.1736\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rMrt91RkHZwmYfUbVX72iwmbiaRxnKXjo9\",\n              \"value\": \"9999999997999991e-1\"\n            },\n            \"HighNode\": \"a\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"d13\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"034D9B521E66A1839566C6387F7C8C9158E65B5057F38ADC9484315554E3EE8E\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-6553287172755202e-4\"\n            }\n          },\n          \"PreviousTxnID\": \"49348E7713B675A0F360B071E2750047DD611BB2E4FF2807955F7F388888E110\",\n          \"PreviousTxnLgrSeq\": 69045371\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"10\",\n            \"IndexPrevious\": \"e\",\n            \"Owner\": \"r4F6d9gkY5JPEkDEmUwcLgGX2NSV6o7DyR\",\n            \"RootIndex\": \"F8EC5BDB08CD19C6618EF1B0E1C0678F34E6541C908D643CDB0F437211813C8C\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"0356513FF37E64A2D845FDBFBD26E2F870D31CF5639281DE0C4E24320DBE4B5F\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2097152,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rGgYjYE7aH7sY7uc9BHpks2NDgVkptYkDh\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"3\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"ee6\",\n            \"PreviousTxnID\": \"7E0820CB80C5347299228CCA5CC3D41616EAD8D1F7F5465D68B7B456A9D3594C\",\n            \"PreviousTxnLgrSeq\": 68898821\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"03911B3D27AFF9C2E0FE6B23323322184EF271D868B4B9B6E0F5003D3CB1AEBD\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-10000000000\"\n            },\n            \"Flags\": 2228224\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r4KDwn1x7ihYbekn13gYAoV9fFnjwFa28R\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36531A5CDA496C4F40\",\n            \"BookNode\": \"0\",\n            \"Flags\": 0,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"030403616ABC48C47A3E211C26C2C3881A225104C0880A3750B6C8283AE58F14\",\n            \"PreviousTxnLgrSeq\": 68865191,\n            \"Sequence\": 61086216,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"03A47396288F4B81A81C27C29BB6E135BFDC408FED7E0E14A4B8D9B5EEEE545A\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"4485520145803172e-4\"\n            },\n            \"TakerPays\": \"33284542077\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"28046783702.39721\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"222\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"raDJvZX8gbRfZ3hUWimZPdVcDRzsZQdhmr\",\n              \"value\": \"1000000000000000\"\n            },\n            \"LowNode\": \"2\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"03C26CA9E5C1D104DD7A57D4B68001B735BBDFAB1D9B127EBAC9E39799B53A24\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"70046793702.39721\"\n            }\n          },\n          \"PreviousTxnID\": \"93F0873BD2CCCC432644192B0CB2068105E2248FC246D9EED7471C300893A9F8\",\n          \"PreviousTxnLgrSeq\": 69049581\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rGQaGNPT8u7Wt1RoqJEhBgAPyc9ek5RfCL\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365208E1BC9BF04000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"6\",\n            \"PreviousTxnID\": \"15A80A6D08A6E004CAB595436E45BBF27FF36B4A8322E0B18473B06A4700CF24\",\n            \"PreviousTxnLgrSeq\": 69035205,\n            \"Sequence\": 65975086,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"03CA86ABE8BB3B42DF726FB35D754E5CB5C0600D7DA96CFC2BCFCFF4FB447E35\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"10000000000\"\n            },\n            \"TakerPays\": \"25000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rfJmPRPCTwt45woergVCBhkHWjxVBevfan\",\n            \"Balance\": \"98748320\",\n            \"Flags\": 0,\n            \"OwnerCount\": 40,\n            \"Sequence\": 66581238\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"03D0C83A9B1FD3B6FF4614320A6EF0679A1608806DE6F152F45165FD7EF41FAD\",\n          \"PreviousFields\": {\n            \"OwnerCount\": 41\n          },\n          \"PreviousTxnID\": \"124F91528EC0DF6A75244C5D1B861B93C0C6178792D1EA5F0F83B775A6464D8A\",\n          \"PreviousTxnLgrSeq\": 69060424\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rJjTUAWDqunqKUB8SgYHV8QNTmvGArX4Lv\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521AD73B83473000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"a\",\n            \"PreviousTxnID\": \"AD0B23017BDBA321F257D4CCD02453737BA34434413D2A9CF84DE27F361D1796\",\n            \"PreviousTxnLgrSeq\": 68904413,\n            \"Sequence\": 67287197,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"10000000000\"\n            },\n            \"TakerPays\": \"75550000\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"041EABCD5A8AE2129C81AA69AB29DE5D53A4FE3B4100C9E1FB384DA98854D8AD\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rHT6EWF9zJzwNtHQsxyrRMSQL4h5GhkcUn\",\n            \"Balance\": \"4393218546\",\n            \"Flags\": 0,\n            \"OwnerCount\": 18,\n            \"Sequence\": 67682153\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"04242CF97ED5ED7107A9491E4F83CE354CF24527A33D1A32FD4CDA5C7488E7D3\",\n          \"PreviousFields\": {\n            \"Balance\": \"3715218546\",\n            \"OwnerCount\": 19\n          },\n          \"PreviousTxnID\": \"736C9642E7CB7BCCAB1D48616D88ACC6CF88A7C9EB78C8436A9BE975A6F97F49\",\n          \"PreviousTxnLgrSeq\": 69056730\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rK4qafqqEtLjM1CRfcgY1H8Z4zGTRATkaV\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521883837089C902\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"3\",\n            \"PreviousTxnID\": \"8E98046882CF2E37F34A33DD82289C0FA22A17EB4F5DB6E3294E3029B9E07FE4\",\n            \"PreviousTxnLgrSeq\": 68899240,\n            \"Sequence\": 66367867,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"04494E12F81AEFF0B6B506510A4642294D3360E08F4AF939019AC27096E953D8\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"74669043263.20191\"\n            },\n            \"TakerPays\": \"515216398\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rQDGBD8WCV3szWgH9rvyhjPHPX66KPGVnd\",\n            \"Balance\": \"332125559\",\n            \"Flags\": 0,\n            \"OwnerCount\": 25,\n            \"Sequence\": 67654267\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"047DDB90A214E3C911E52EEB5902ADBE289A0F7434B44DF3FFDB217A96CC306F\",\n          \"PreviousFields\": {\n            \"Balance\": \"252265699\",\n            \"OwnerCount\": 26\n          },\n          \"PreviousTxnID\": \"3B58740F83B822466599B340C5CAD53BF47B506855EADF1EEC2476BACE937BAF\",\n          \"PreviousTxnLgrSeq\": 69064176\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"3500000000\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"625\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"r91eSWyof8C4aiDL2gM1xTdmc9GJy3rTWb\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"LowNode\": \"4\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"04989A4ACFA7C8DCD5890D1BF6FC69B683211F17F5705692BBA1049494952293\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"7000000000\"\n            }\n          },\n          \"PreviousTxnID\": \"79AE85BCBF5A1DFB052F443DEFE1175A44C406751A4354F09E2061C0C84DC6EF\",\n          \"PreviousTxnLgrSeq\": 68897189\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"1\",\n            \"Owner\": \"rBCw1uH84iKcSRVjY8ALzx66Q9ZVNMgYsn\",\n            \"RootIndex\": \"4F2B185BAA4AB1B9C35680658304FB11BE41F080D55D11B539075A4A5CD53DA9\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"049FDB5F35F4F3684324F4A1BAC613856C9509C330FC68C0324F923F4AB48BB0\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rQDZDYodywYJULXJtv68QyoDbkV5EZgh9s\",\n            \"Balance\": \"2196152987\",\n            \"Flags\": 0,\n            \"OwnerCount\": 152,\n            \"Sequence\": 67424412\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"04B9B4EDE4D521F88B2B1D93E1861AF74D3F3EDFE5712B5789EECC06118E95F1\",\n          \"PreviousFields\": {\n            \"Balance\": \"1308437399\",\n            \"OwnerCount\": 153\n          },\n          \"PreviousTxnID\": \"89D4B056506ECA595285123D7FE08109E839E8AEE53DB7AFB9CD21201FC9368C\",\n          \"PreviousTxnLgrSeq\": 69063370\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rpeh8BoXFBaV9nkmRvyHWMt9tGagwWhk5s\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653071AFD494E4986\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"3\",\n            \"PreviousTxnID\": \"1FA434902C7C5F2F7BDED540D45AC7F87E5B15DED2AF9092DD2C9B7D3BBED4DF\",\n            \"PreviousTxnLgrSeq\": 68999399,\n            \"Sequence\": 67385081,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"0510EE0BBFFB001D3566DB7DF47D4F551184DC474C586150F7A114D20C78CE9B\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7785989866\"\n            },\n            \"TakerPays\": \"155719797\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rExSJvWnn93G5NfnzZ3YKuPgpQnr8wBsrE\",\n              \"value\": \"1000000000\"\n            },\n            \"HighNode\": \"b7\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"e1a\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"054B2C88DB2616036AE283096BDABB641A30C46DE56CCC6F9DE3F3A7CF1AF0B5\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-1598241241885340e-3\"\n            }\n          },\n          \"PreviousTxnID\": \"7D6F23EA47B2851ED6ADE5B73DE47B0C4F5FD850BD8DE31E3FFC9F56C56D4938\",\n          \"PreviousTxnLgrSeq\": 69059543\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rMGX6LAGxRUHd4g3yW1ukFhThgiCxMioX3\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365207CE28EB76D7D3\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"CB354DAED6E268FAE9259928E0B5665F0DF0607FFC11E1DB86D167A1E3E02FAE\",\n            \"PreviousTxnLgrSeq\": 69050997,\n            \"Sequence\": 68628058,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"054C07BCD0C72665A234D9435727409BCD230DA0A2F945ECF59669786DEB9E34\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"34911374032.31382\"\n            },\n            \"TakerPays\": \"76700288\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rUdhzvzWjHpSjP6CGksiit3bdgGLV5DXZv\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521B541CF380C4EC\",\n            \"BookNode\": \"0\",\n            \"Flags\": 0,\n            \"OwnerNode\": \"2\",\n            \"PreviousTxnID\": \"469984C4EF8C5E5B9B5264FFF2E7114F02577ECA24EFD41BC9BF3D975CED7642\",\n            \"PreviousTxnLgrSeq\": 68907356,\n            \"Sequence\": 67546186,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"05699879D8666FC57A1DB142B57C51DD25FB59C1435ADB62D4CDA08F3CB31329\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"13000000000\"\n            },\n            \"TakerPays\": \"100000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-1810329300.17244\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rMBUa2qAaU6K8DRTyQsfmeRUtu6j7m8ovB\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"d76\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"057547C9D5E7C116AC41CFB57B1F2AB5273102208A452E8CBE08CE58401105FB\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-12068862001.14957\"\n            }\n          },\n          \"PreviousTxnID\": \"CBDE7F3153432CD2D2933A66814B200593A5C67D18219C4D5E7A4F7E76A4C260\",\n          \"PreviousTxnLgrSeq\": 67996095\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-1421567855260000e-4\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rLVaKJ42tddq3vJAFiPibubt2HbBpTHuX7\",\n              \"value\": \"1000000000000000\"\n            },\n            \"HighNode\": \"4\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"25d\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"058F43F3F4A7F9B0EBE502C6EF6922F5050D74985B33AD5B3A831A4C5E48878B\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-1500000000000000e-4\"\n            }\n          },\n          \"PreviousTxnID\": \"13DAD17CE8D14EE8F749D023FF6C059152129223E9527DD122CC88D82472CFCF\",\n          \"PreviousTxnLgrSeq\": 68991218\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rnB62vv6d8dQV13A3nHQQ7LEGy8DEWkLuG\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521D94CE37663689\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"4\",\n            \"PreviousTxnID\": \"05A91D401C3028F5C60A5DDB32A88E6586E4512902CF048D6DFF404E20CD5501\",\n            \"PreviousTxnLgrSeq\": 68905044,\n            \"Sequence\": 67267180,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"05B938C3E5C52669A6CF9B8F2259AB9F72B2D5867992AB3B14A0944C621435F5\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"12010010000\"\n            },\n            \"TakerPays\": \"100000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rpWE8DQzMegfBwaPaQhF9EGfxWWxvqRwk5\",\n            \"RootIndex\": \"05D405CDC6AB585B155B17B10DE4DD5C0C2C6CE80C49AF665EB648FDC41354AD\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"05D405CDC6AB585B155B17B10DE4DD5C0C2C6CE80C49AF665EB648FDC41354AD\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rBBS1EhebBUcDs7gDa4ZuoTfmBwsRGqycY\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365308F3ED38D58000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"4\",\n            \"PreviousTxnID\": \"4239630C3C820C95AD603B09EAAEEE4D2FE76CD4E675E693FCF701899389BFFA\",\n            \"PreviousTxnLgrSeq\": 68893233,\n            \"Sequence\": 67855167,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"05E7301E23B4AEC139A1BDD163B8403876873838FD183B4087AF91254B47C6DA\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"10000000000\"\n            },\n            \"TakerPays\": \"252000000\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rJ7kEdYrtovE89yxzJ14DgPYCR58odZYVi\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653071AFD498D0000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"2\",\n            \"PreviousTxnID\": \"8F3203A157F450A05B1D1655FE4E09A3496B96C5D10C9563102509C87B7920C9\",\n            \"PreviousTxnLgrSeq\": 69057902,\n            \"Sequence\": 67712449,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"05EBDDC840621D49BF36C6FDA73EF674B7E9E00C24D0636D6D90F44D6AFAA2DD\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"1734116600\"\n            },\n            \"TakerPays\": \"34682332\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rEpLbrik9r6KpjVbWXA71SVQnMCkY8BEUK\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365215F59634A8EE00\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"532ADE2B36E989BE4EB996A65262F09E1B290B4EC0EEC65C9951A5697A979F20\",\n            \"PreviousTxnLgrSeq\": 69038102,\n            \"Sequence\": 66709822,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"05F30997DEF8B965C52F7C7B541B5A6B8C50F1972634FB16E02980E4C737ADFD\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"38109507595.13332\"\n            },\n            \"TakerPays\": \"235554866\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rPc9ia41Ad7unkvCE7gKKZPovAuCBPt63E\",\n            \"Balance\": \"1887787925\",\n            \"Flags\": 0,\n            \"OwnerCount\": 173,\n            \"Sequence\": 66718336\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"05F797E1AE186521677B7EEE9565D46D7A40D059400525C462ED927E052BDDA9\",\n          \"PreviousFields\": {\n            \"Balance\": \"1437787926\",\n            \"OwnerCount\": 174\n          },\n          \"PreviousTxnID\": \"79719E23F698151223E80320072519233A577400C7FE1FD7C386185725491700\",\n          \"PreviousTxnLgrSeq\": 69063461\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rLPotHoaZNMvAKnTE1xUaVYsHVKKf3SzYY\",\n            \"Balance\": \"365922312\",\n            \"Flags\": 0,\n            \"OwnerCount\": 137,\n            \"Sequence\": 67243913\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"05FF0BFF016291E09E91C0272F17FD9A100CE1E4749D3E70BD95BD72A568D686\",\n          \"PreviousFields\": {\n            \"OwnerCount\": 138\n          },\n          \"PreviousTxnID\": \"0F73B6285F101ADF1B1432E9367E2B1563E1BA7D1416332F2BE50F70F34A10B9\",\n          \"PreviousTxnLgrSeq\": 69064131\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rJDQRE86NN3S8bhRYMZK2cWwdGd7nV7zBc\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652232B168AA1B000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"1\",\n            \"PreviousTxnID\": \"9356CBBC76566624BD9844108E6DF2E30DD1BEDF1BC33D618B813E81AF5ABF60\",\n            \"PreviousTxnLgrSeq\": 68895883,\n            \"Sequence\": 66611015,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"20800000000\"\n            },\n            \"TakerPays\": \"205899200\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"060604DDCC0CEE0C066A93DA6FE91BC1A8C52636019508AB859843F955417B21\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rHm3si5FLgHjXC7E2qXKwNDGAe5khVpEHg\",\n              \"value\": \"9999999997869990e-1\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"d95\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"06545DDF09591B8D61FAAC323A8F2F311AD170C7282F1655EE183EB309366BE0\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-3810005946327354e-4\"\n            }\n          },\n          \"PreviousTxnID\": \"FAF23A42CD9C1CE08E15BBF038562D5A5DA63588B8EE2FC239E6B74CDB1E59C2\",\n          \"PreviousTxnLgrSeq\": 68986599\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r4KVUoogBDoZS9NZAzs37JTgpCoCwbBsSk\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520EEBE0B13C1E42\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"2\",\n            \"PreviousTxnID\": \"42822FCE90C09031A72BC58A0766291F50054C36520944B346438330E094A487\",\n            \"PreviousTxnLgrSeq\": 69021443,\n            \"Sequence\": 67522998,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"06C4115D1E2CEE7286A9250880B222F309903FF56143D6A1031C0D0CCE5A1287\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"6260118880.087294\"\n            },\n            \"TakerPays\": \"26292499\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"dc1\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rnYbiXaSpChddFy4fdVYDtNscUsAfgaA4U\",\n              \"value\": \"9999999997999991e-1\"\n            },\n            \"LowNode\": \"7\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"06E35F4AF7443BD801EDA95AB9048E0D07A838BD6E331D45C2970A63254414F9\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"1011664832151627e-4\"\n            }\n          },\n          \"PreviousTxnID\": \"6F83979B27E767F89398AA84A42DD65591544601710E54C679988BA2F76C1DE7\",\n          \"PreviousTxnLgrSeq\": 69012452\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-2043332912584925e-4\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rK4qafqqEtLjM1CRfcgY1H8Z4zGTRATkaV\",\n              \"value\": \"1000000000000000\"\n            },\n            \"HighNode\": \"1\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"42e\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"0770AD962247116CCF816D25AD57D843EF82A73AAE0DF7D40941A2FC5C22B364\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-2790023345216944e-4\"\n            }\n          },\n          \"PreviousTxnID\": \"E3A646DF5C5EFBF528B56CA795B6DE564D0D7D3B275BE2EF91BB51A5E1B80559\",\n          \"PreviousTxnLgrSeq\": 68995486\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r4zXDbBBSbrguDq5pTzabnMgXY7n5qg2jb\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365311C3793747E980\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"6\",\n            \"PreviousTxnID\": \"B68CCBBC73BA8627F5E584D57F097FBBD4ACD6D91721D89828B29F9DB737F546\",\n            \"PreviousTxnLgrSeq\": 68866269,\n            \"Sequence\": 67256127,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"10000000000\"\n            },\n            \"TakerPays\": \"499999999\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"07ADB65E04854ABAF91EF1070D4FF9E902B6DCBDF107BC0D234938E5C8760336\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rNRaTAdpRUh1YNTBdCu6JXdQZX2pfWo3FU\",\n            \"Balance\": \"429999988\",\n            \"Flags\": 0,\n            \"OwnerCount\": 208,\n            \"Sequence\": 66712733\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"07B9188EC9EF02AABDA7CB272CE1A5D3A9C2C78DB38182FB7B063CD458DE5BA8\",\n          \"PreviousFields\": {\n            \"OwnerCount\": 209\n          },\n          \"PreviousTxnID\": \"E6ABB4E9719BAE6798412E129D66785349CF556021A9FD4B2E81894CE691FD94\",\n          \"PreviousTxnLgrSeq\": 69063864\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"81c\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rsqgHRLHgg1vHi8iA1w1J9amuuUAjwEzwa\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"07C5F6D8EB254F6C4F45852F34DDE407CF288298F8C2015A112F0D849F16BEF7\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"47796284510.95766\"\n            }\n          },\n          \"PreviousTxnID\": \"0461B14818F69CE7E6AA20F32811FC8F65418EA1A3B951E7331BCE052367B5B6\",\n          \"PreviousTxnLgrSeq\": 68996570\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rasT449dxdmpB7Ak1GqwE9TdrkZEty1tAZ\",\n            \"Balance\": \"236235600\",\n            \"Flags\": 0,\n            \"OwnerCount\": 43,\n            \"Sequence\": 67132390\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"07E36661C9E5E7A49D46D1CE960E81C4712C4D5D8B72371368523F514A92E1F6\",\n          \"PreviousFields\": {\n            \"Balance\": \"146235600\",\n            \"OwnerCount\": 44\n          },\n          \"PreviousTxnID\": \"E814FB70400DF52B7414A35635BD6AA6F0F156E59A2A53B6473A270F8A4AF227\",\n          \"PreviousTxnLgrSeq\": 69062135\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rEEmAELYEW2kQQRJEXhN9qJnzZmUnLxhJd\",\n              \"value\": \"9999610698104576e-1\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"ecc\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"0849A787ACABD9596381F4E58F8855D0106342E5F0AB0A47D172E3892DF8E346\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-618459800.4693254\"\n            }\n          },\n          \"PreviousTxnID\": \"FA133884EA54D2C86F9B08A23AD2D8ACD0AA433199C6A57E5EF9C230B0AFBF17\",\n          \"PreviousTxnLgrSeq\": 68954948\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"3\",\n            \"IndexPrevious\": \"1\",\n            \"Owner\": \"rGPEKNaNPYojt4sFbUzodh9SUNxixCwoBC\",\n            \"RootIndex\": \"0A7B4230B73036EFF114716FB5A99349311B598F3A1D8DBFB3455D664C319E35\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"085B6B3762B3D8CFE9E5FD961DA1E280D7FCE335EB67A6E98EA122647C746D0F\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r4oX1kuULiPWPRA2hwV1R7K8kB9gUxqTtv\",\n            \"Balance\": \"685639081\",\n            \"Flags\": 0,\n            \"OwnerCount\": 81,\n            \"Sequence\": 64613025\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"086162970C6670AA30C4F446F7134E3BD99D294CC4A0EC4694BE25A2E053B9F9\",\n          \"PreviousFields\": {\n            \"Balance\": \"180121665\",\n            \"OwnerCount\": 82\n          },\n          \"PreviousTxnID\": \"9FF69C6F7DF53B4D6BDE71AA2D71E10F6E590BC70C04B71130274D8B1CC249AE\",\n          \"PreviousTxnLgrSeq\": 69046704\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rPWjueM7txwURGpJDWF9yQRn8cVmWQTDnE\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652138A3886F4085D\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"9\",\n            \"PreviousTxnID\": \"3702EAEE8722808C4FE4EDCB7A88E0CE9B268C6D1F3653C38178A34266A822E5\",\n            \"PreviousTxnLgrSeq\": 68996477,\n            \"Sequence\": 66692551,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"088605C405BBFE2518FD8023B6B222A92D975F5EA899C8FBAFDB6092624609B5\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"14389666508.9877\"\n            },\n            \"TakerPays\": \"79143165\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"45539951262.589\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"aa\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rsPnG9Kmz7rf9fXRZ7zrVb8tmmjUkUEpin\",\n              \"value\": \"1000000000000000\"\n            },\n            \"LowNode\": \"1\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"088765D8BD49D0EAA2A5E082020DD2843BA2DA0E2DF560F847C5A4BD4DACC9FC\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"5455399512625890e-4\"\n            }\n          },\n          \"PreviousTxnID\": \"E514E794F914C281237FEE472458044DBFDA488AE1DF6C7E0090A0A234B0BFA9\",\n          \"PreviousTxnLgrSeq\": 69043806\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"e\",\n            \"IndexPrevious\": \"c\",\n            \"Owner\": \"rhPNtVD6tfZTrxvebJaquV8Bh5F2Kh8cMa\",\n            \"RootIndex\": \"0B60DE2E48A1708F4C15A73749EFF15C4C28985B9E40B3BF68788C9B99482700\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"0898F40C211A0DF4CF117F39F66F4E047736A27E242F3B21330717284C60AB0C\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rMGX6LAGxRUHd4g3yW1ukFhThgiCxMioX3\",\n            \"Balance\": \"5237123400\",\n            \"Flags\": 0,\n            \"OwnerCount\": 8,\n            \"Sequence\": 68628061\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"089A31D49D110B3E29249F3A8325F348A438D7F0E9D5C9F79925A1D6A7B58F3A\",\n          \"PreviousFields\": {\n            \"Balance\": \"5160423112\",\n            \"OwnerCount\": 11\n          },\n          \"PreviousTxnID\": \"CBD7C383A87922FC550E1170366F06A777BC7418CAEABDAEB07AD1F61183B2A8\",\n          \"PreviousTxnLgrSeq\": 69064080\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"r4KVUoogBDoZS9NZAzs37JTgpCoCwbBsSk\",\n              \"value\": \"9999999999999990e-1\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"d26\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"08BAD6CC14D75C6DE894722B2F73554AFC750857A9E71959F40A4F68632EC60C\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-6260118880.087294\"\n            }\n          },\n          \"PreviousTxnID\": \"06C9F9F8E665D842CF62A17BD8CD61635AEA73F2FBAE9A00CAE8B7C42C0CC5BC\",\n          \"PreviousTxnLgrSeq\": 68972723\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"2500000000\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"c45\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rsMSXmszPAgaY8sipuVq6gfdgUX3zpX6am\",\n              \"value\": \"9999999999999998e-1\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"08C19668824E55DED2D964AFFC4AFFE220B91678EEEF9B227350EA0022AC6368\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"5000000000\"\n            }\n          },\n          \"PreviousTxnID\": \"5A897BC35CB11AFA4FAC976724C40DB8A4E287FAC8031D1AEEA734E2058811DA\",\n          \"PreviousTxnLgrSeq\": 68898843\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"5\",\n            \"Owner\": \"rQ34CimjrmwQA4bz3qCwGRHPFuo8rbnVWv\",\n            \"RootIndex\": \"99E0D97ACF35178150CB8B5011E8302219906DD2E63DEEA9A2C16000E46487FF\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"08CE6692E28A74E71C9265646405DA861158BC1F9BCE15B97EF8961120468EE3\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rG7WNJTTMRQma1eeWs5CDv8LwsLb3QQhvv\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520859500338E000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 0,\n            \"OwnerNode\": \"5\",\n            \"PreviousTxnID\": \"96CC5711C8BE6E83BD64C97012A3975A20A1E3AD68837A386F3D16A1D2A0713A\",\n            \"PreviousTxnLgrSeq\": 69031182,\n            \"Sequence\": 65803309,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"9999999991692810e-4\"\n            },\n            \"TakerPays\": \"2349999998\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"08D44D52140ECDAB2B3BF20DA77E94D22C0F597F02019DFF254C3D97F1B1868A\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"1000000000000000e-3\"\n            },\n            \"TakerPays\": \"2350000000\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rwJECKX27rvudR1C4R2QCUZwatR9zkC4u5\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652138A388A1CDAC6\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"1\",\n            \"PreviousTxnID\": \"84394D8AD0A35A590E668D403CAEC881D63EB792818BE213A29C5F05B8B2B358\",\n            \"PreviousTxnLgrSeq\": 68933538,\n            \"Sequence\": 67403543,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"08E29D249E7804C0FAB6A23ECE393422F61229320A538CA8F5C042A4528F6E42\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"33124787288.07941\"\n            },\n            \"TakerPays\": \"182186330\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rHHviosMrm1hi4Nfm7MTipMw2oeEQRTeod\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652166CBB05D13878\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"b\",\n            \"PreviousTxnID\": \"23F68E50B6B1454D339F07D380D0CF5230006325E0204647BEC7E1C7F0552B94\",\n            \"PreviousTxnLgrSeq\": 68938628,\n            \"Sequence\": 65851879,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"09059CBD69443B2FED5FC23DDAA5E3C15CC778F924ECB63FAA82C1C2350B7CAC\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"4077859898660000e-4\"\n            },\n            \"TakerPays\": \"2573945168\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rhPNtVD6tfZTrxvebJaquV8Bh5F2Kh8cMa\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520D7F2B9D42A180\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"d\",\n            \"PreviousTxnID\": \"BE0EF09F638259CD6AC16061DEAAC5B5BEE925A818F1D01F63F3057F05BC6CF1\",\n            \"PreviousTxnLgrSeq\": 68997647,\n            \"Sequence\": 67342402,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"093D20C90C619E61B66DB787D5538BBF429D074EF472DDF278FC3016803FFDE4\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7982434333.333333\"\n            },\n            \"TakerPays\": \"30325268\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rnpQiciqw8RGKo3NmqAuyZXScNoCNmQSL6\",\n            \"Balance\": \"573080990\",\n            \"Flags\": 0,\n            \"OwnerCount\": 197,\n            \"Sequence\": 67428331\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"0948D017351A93E2C416843731315D8735CAAC55F3D1CE60AB078D54CCC38F77\",\n          \"PreviousFields\": {\n            \"Balance\": \"472310755\",\n            \"OwnerCount\": 198\n          },\n          \"PreviousTxnID\": \"5E94051DCA99D4C07282BD9243952C2F2D1AF703EC443D14971B81AF749583A3\",\n          \"PreviousTxnLgrSeq\": 69063803\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"2457679721703980e-4\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"f02\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rB4BbxNJ7Hv7i63EwPcEZjuP8YHizdkkvd\",\n              \"value\": \"9999610698224570e-1\"\n            },\n            \"LowNode\": \"1\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"09645B41876ECECDD8530FE462EB20DB2C28E1907AA458331CF1BB8E3DA300C0\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"2500000000000001e-4\"\n            }\n          },\n          \"PreviousTxnID\": \"CAE8836EA5152715C60B986F3D9EB5C9339D7F4D5DA7A623E5177F24A985CAF6\",\n          \"PreviousTxnLgrSeq\": 69012697\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rKVDELWvNMyoxDQenRjpToSvsLL7RwR62h\",\n            \"RootIndex\": \"098529106860F2477DEEF3A958AD9574F2FFB199F28F5900CBE6FE74E14EB1C8\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"098529106860F2477DEEF3A958AD9574F2FFB199F28F5900CBE6FE74E14EB1C8\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rNARwAxVp9C26pcBpRbFHdw6P5Sxa4q7kr\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36531FF973CADF102B\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"3\",\n            \"PreviousTxnID\": \"0538C6D836F7BDB2A1ECD52D6D522A7256AC533C4470CD41D441EA2596BF4E7E\",\n            \"PreviousTxnLgrSeq\": 68144901,\n            \"Sequence\": 67347422,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"38929949330\"\n            },\n            \"TakerPays\": \"3503695439\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"0A0EBEA9928DF446DED01525A8EBC7A8F97D303B0547B6E890E09B77401ED38A\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"3\",\n            \"Owner\": \"rxAPteBXbVsr6qvwqA54qERcdkojkjdmC\",\n            \"RootIndex\": \"1D90936DA6D5312BF75287D86424C97917F363D2A6D98EBCA9C497F7F4E28FD0\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"0A3031248606AAD28CC125FFD1366576C1BD901A86421CB8E90CF13F000A4644\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rNH6NhWEAVCRPrcDv9NYJdPKv4YTHn1EgA\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653071AFD498D0000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"3\",\n            \"PreviousTxnID\": \"6E8FDF7AB33BB162EBF723C7E2B5849A3ABBF8F22681E4E85320CE50A0B0B646\",\n            \"PreviousTxnLgrSeq\": 68892118,\n            \"Sequence\": 67414031,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"0A73294726372FC4B278763E56E488DA9B963D76F305E636163383D1C451C377\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"10000000000\"\n            },\n            \"TakerPays\": \"200000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rfTkTBbkD6NFaNLprSDfnC3CJEtNwgqYwy\",\n            \"Balance\": \"220764794\",\n            \"Flags\": 0,\n            \"OwnerCount\": 17,\n            \"Sequence\": 68037582\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"0AB465ED0BDD02A086A9212D6D37C1BF9F126887773D6F55E502A89ECC94E139\",\n          \"PreviousFields\": {\n            \"Balance\": \"63295204\",\n            \"OwnerCount\": 18\n          },\n          \"PreviousTxnID\": \"5480B4E780BDF258CE1EEA7F76AF0ADA97DAC1DB2329F6F6AD5218EB122B3C48\",\n          \"PreviousTxnLgrSeq\": 68998157\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rPG9SrHPEhwbExniY48qKCqDqjGKyVn38w\",\n            \"Balance\": \"524713186\",\n            \"Flags\": 0,\n            \"OwnerCount\": 108,\n            \"Sequence\": 67109685\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"0AF2AD5BB6F7BF9C45954F271C39C1B9BB19AF743A68B026C476C1EF71282A55\",\n          \"PreviousFields\": {\n            \"Balance\": \"410713186\",\n            \"OwnerCount\": 110\n          },\n          \"PreviousTxnID\": \"45727D4C1DE83C7514B36956AF9C54FFF021EB12BA09B3AF983BF5B8645FB687\",\n          \"PreviousTxnLgrSeq\": 69063341\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"5\",\n            \"Owner\": \"r3PYAn9d1DTFzJ9kuvFnhudgwsVZ6pm5hT\",\n            \"RootIndex\": \"70A7D0633F66003A7C5CE50C1518BE549AE989C02017F5E58E4B87BA013871FF\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"0AFEA2B431D9F703D246A4FAF6FA41A3385BF8891C00115DE97F99551D3AB71A\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rBVRpQjDpGqLs588dtthtZhrPJCcM4w3TS\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653038D7EA4C68000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"3\",\n            \"PreviousTxnID\": \"6A16C2849207B085ED095ADE5CADD3B38EA12DC1EFCD88A32BCDA38A5704B49E\",\n            \"PreviousTxnLgrSeq\": 68514589,\n            \"Sequence\": 65828898,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"0B02058CAF31E6CED3EDD3F0D53ECCD77FC82B4F478961203A66904C1E3D5CA8\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"TakerPays\": \"1000000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rEXcziBZ9tEnmNVrcdbQATJPr8JRHuRrZV\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"HighNode\": \"1\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"afd\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"0B09848DAF8247C956A6919F7D8FD1EE5CC7DC4935C9C3FBB5906430F93F4F77\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-50006701881.61506\"\n            }\n          },\n          \"PreviousTxnID\": \"BA207EEF041D076096D2B9C30DBF16003030B8DFF1A556FA60756E3163B81BF9\",\n          \"PreviousTxnLgrSeq\": 68922331\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"e9c\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rhhokxTQGXV3zHGWJqy1SiJ19yYTSFeGHU\",\n              \"value\": \"9999610698224571e-1\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"0B0A027079E5821B58E5D520AB0088A160BEBC7145E39FF00DCF7B69921BF543\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"1015239468014499e-4\"\n            }\n          },\n          \"PreviousTxnID\": \"1EDC50243B49430385F8582632C2FA20EAFD1973B3C52BD97DEF737F606D4D36\",\n          \"PreviousTxnLgrSeq\": 68982497\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rfKEwoau3VsYDkabUXs7KbivzJXUE1iw9W\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36531FF973CAF5ED5C\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"1\",\n            \"PreviousTxnID\": \"B01A07417D543A8FCB7E0CCAE6720BB8C122CB04A293B704D2776640E5B030A2\",\n            \"PreviousTxnLgrSeq\": 68161076,\n            \"Sequence\": 67016663,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"93431878392\"\n            },\n            \"TakerPays\": \"8408869055\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"0B0E60C2CC7BEAE7D13CBC3C0AEF78AA1446E060281DE037C5EA2CF93129ED78\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r87fNs5eU59kPhMXgYHVziF6Q5icW4WHW\",\n            \"Balance\": \"425313969\",\n            \"Flags\": 0,\n            \"OwnerCount\": 9,\n            \"Sequence\": 67324759\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"0B10B5C9C286987A47C91D602E938044E097B49D1E6DE93EF27DAE6AF4ABB0C3\",\n          \"PreviousFields\": {\n            \"Balance\": \"33557972\",\n            \"OwnerCount\": 10\n          },\n          \"PreviousTxnID\": \"65ADBDBA3F406C3F3AB3B90BE7D04743651B301E88FBDF9E26F69C704B889777\",\n          \"PreviousTxnLgrSeq\": 69024131\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"0\",\n            \"IndexPrevious\": \"6\",\n            \"Owner\": \"rnW1sfCjjdMou7RKC2PquXVchHYBMAHqTD\",\n            \"RootIndex\": \"F4D58E4AC9BEE4659315F7B51B12A1A5C579AB918B9F4FD5C9208E1E77094192\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"0B2B72D8D0683C4BD8697F8723D3BA5B5A62E73141B5DA94C908B54EB37B0A23\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rUZdJF5FhJJwrdjrcJ8vjfo7NySmeGRxxa\",\n            \"RootIndex\": \"365830CC27852B3EDDEF0EF6B6EA81A3C5A6C893721A234F383112B0AE0F17E0\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"0B2F2FE329BFE0EAADC028251E795950BAB9337FA76B02A3E21B66BDB5C4D7B9\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rP7b2urRNSZ6dfigtcEaChxF14R3kK8djd\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365211C37937E08000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"3\",\n            \"PreviousTxnID\": \"F9DFE7ADD6A7556FC918C77B2DCCEF80BCE1EB5B726194B54825C405A36EC0B7\",\n            \"PreviousTxnLgrSeq\": 68998127,\n            \"Sequence\": 67293302,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"0B5C9522E506405EA399C4EB0A2921EE698D3C7EDD07E763382B8B2F32EF054E\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"10000000000\"\n            },\n            \"TakerPays\": \"50000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rp6kmTUHj7Q6CeSZDrqNLRbtvhdbb6N5gY\",\n            \"Balance\": \"771519915\",\n            \"Flags\": 0,\n            \"OwnerCount\": 182,\n            \"Sequence\": 66759051\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"0B62334DF34CF3F7E3B8EF904C2302BE5AE16D5E98623AEECA9F6C984687A657\",\n          \"PreviousFields\": {\n            \"Balance\": \"701446007\",\n            \"OwnerCount\": 183\n          },\n          \"PreviousTxnID\": \"58D73569984B250C493BE6205EC66782B08CE8647EF077E3FC1A69D940B93A6E\",\n          \"PreviousTxnLgrSeq\": 68936265\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rDvF12VVLg8CD36Ba9U4HUB5q7AWai6BFi\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520C1448303C8000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"1\",\n            \"PreviousTxnID\": \"DAA18512DA2AC2AF9B2BEED65B557F84062200A413AD686025BD78442E93F3B0\",\n            \"PreviousTxnLgrSeq\": 68998105,\n            \"Sequence\": 64347056,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"0B8901DAB4039F91F9BA7B893AC549845584C4F852776DDEB9F4EEA2345E3DB0\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"20000000000\"\n            },\n            \"TakerPays\": \"68000000\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rGJ5He1dXx78w8pGB7zHH9K7dWd9pF8p39\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521FF973C844EB2F\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"3\",\n            \"PreviousTxnID\": \"B81960D4344588A3E01316BD1260B23D404188604909D8898194F4647322CD00\",\n            \"PreviousTxnLgrSeq\": 68909523,\n            \"Sequence\": 67090006,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"0B9013E68A5A44B94F6BD5D2860AD351EFA139C4E7E41EFC3666CD590C0AD7F0\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"22000000000\"\n            },\n            \"TakerPays\": \"197999999\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rzNhpkxVUc86h9CJyB1qssHYenzkVpyn7\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652138A3887C7F795\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"7\",\n            \"PreviousTxnID\": \"C5E34D918DBFF25B319E175A8703F05F6B5011E787DE9671EB03EE8C052BCF6F\",\n            \"PreviousTxnLgrSeq\": 68923195,\n            \"Sequence\": 66818368,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"0BACA51604C5743D97ECB7D2E174FAC34E600BA4E899C527B6A1704481CC531F\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"24000000000\"\n            },\n            \"TakerPays\": \"131999999\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rLkhJhEaChEegzryMAeps63ghhG1yXzifL\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520FFCB9E57D4000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"59F0DD3529DC21E12B65C960E06E0C2DB32A687709E5918967F17E6B5BA09F27\",\n            \"PreviousTxnLgrSeq\": 68988965,\n            \"Sequence\": 67425992,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"0BCFE9EC95F19626E0C0044E821F3AD3321DADEDD1487A93F64EB4843488B31A\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"9600000000000000e-4\"\n            },\n            \"TakerPays\": \"4320000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-18463481609.31418\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rKycDDwvkpARRr8dccx6mTKBBr6W1GkGjK\",\n              \"value\": \"9999999997999991e-1\"\n            },\n            \"HighNode\": \"4\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"dda\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"0BDA359D8F6D01D138DB7F9ACB752C4AE1CA1724D754D3D4A59919A8CA489B33\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-20463481609.31418\"\n            }\n          },\n          \"PreviousTxnID\": \"285A4D9BE05169EBC350AB7A76635F868BECE13CB1DEA056C8F0691567A4043B\",\n          \"PreviousTxnLgrSeq\": 68891367\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"11\",\n            \"IndexPrevious\": \"f\",\n            \"Owner\": \"raWLEhWafGEFDsN2GWTFcmPc79x11j92as\",\n            \"RootIndex\": \"0A617EA9C3725EDF8F1573A7CEF6E69965E819FA6958D3917B1BDD3446776F86\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"0BF7E25E37DF191538AA372D37D14BA1DC57B3D53048CF8C7A2E7386183D7F47\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rLzgqyEetWAoARj7XcpWExwpRCvYq5zHi6\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521C3E7B96C68CD0\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"2\",\n            \"PreviousTxnID\": \"1892045AC074A7F94CDF995C21F3DD7359E33AC5B48178E811AAC8645FEB5805\",\n            \"PreviousTxnLgrSeq\": 68905441,\n            \"Sequence\": 67630695,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"0C55BA078508B73B4D64052C454F2A2EFA76708ECC43D56413239F538132D264\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"5269682218.30986\"\n            },\n            \"TakerPays\": \"41893973\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"2\",\n            \"Owner\": \"rUdhzvzWjHpSjP6CGksiit3bdgGLV5DXZv\",\n            \"RootIndex\": \"6BF0BB998DBA1FA0A7D6C033B316942EC850FB722B036E378025C55A28005D68\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"0C882F7FAA548E552B8A498251F279B9E64FF4D07DF71EA4183000FCB839C668\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"2\",\n            \"Owner\": \"rJDQRE86NN3S8bhRYMZK2cWwdGd7nV7zBc\",\n            \"RootIndex\": \"FB7896378C203DC3BD6B620F2132E483089DCE642AF0B26FF48923D8E5E2DE2A\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"0CA0ECA9EC13061CE28DE2321F8DBF38FD1AEE29C569C3972E237E37AC727738\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rpBHrwSGdQm3hE3f6988mSgV9LAzuBsx9A\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365217FB16D3ACD435\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"1\",\n            \"PreviousTxnID\": \"7BCB87CAEEAC89B70418EE19667BA5586318ECF12544953DC732C88A0A0A08FA\",\n            \"PreviousTxnLgrSeq\": 68905151,\n            \"Sequence\": 67835800,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7785989866\"\n            },\n            \"TakerPays\": \"52555431\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"0D03E2A77E98FEAE389845DD0DD76F4E07C0CFFFC17809B98C1FA6A1DAF1591D\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rBefpcbGP1mhJhuLmYSbPSj4oDTufciZDH\",\n            \"RootIndex\": \"0D059FDC9B2A3B06C882735F946E349B9E2664EE68A9C1098EF62A54773B1A1D\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"0D059FDC9B2A3B06C882735F946E349B9E2664EE68A9C1098EF62A54773B1A1D\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"5\",\n            \"IndexPrevious\": \"3\",\n            \"Owner\": \"rHQELpjMXco8drUJVmfUq89kCZbDdWBr3A\",\n            \"RootIndex\": \"19927BFC4E7AFAAAA6E903D6B4B83BCF8B4D85295EDD551BF6892F9CAD1BC9C4\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"0D346EF431E0ECC8199BDE89A929E0F40B8695563E583B4FA696F0F67634A97C\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rh1bgyeVNDBauF3vXuASW2L8MWrdq8XYko\",\n            \"Balance\": \"257232732\",\n            \"Flags\": 0,\n            \"OwnerCount\": 5,\n            \"Sequence\": 67364436\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"0D4E9FBF050C963720231D008A4AFEC87A657B152A911466702945A7D514AF4A\",\n          \"PreviousFields\": {\n            \"Balance\": \"23999985\",\n            \"OwnerCount\": 7\n          },\n          \"PreviousTxnID\": \"63FCEAB46FADE9B9B92DE43A738D14DDB5064FDB48A9F3D1A62A0857E0C76D03\",\n          \"PreviousTxnLgrSeq\": 68994748\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r3Tj4vpfRp2r95SM97TwEFGCUZayDqKM4h\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653071AFD4969AA80\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"1\",\n            \"PreviousTxnID\": \"267EDE06C3726A9074F2768CFA0243974E2571A0A28BAD6C5D09F4771C3E3209\",\n            \"PreviousTxnLgrSeq\": 68284059,\n            \"Sequence\": 66932170,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"17864125470.68351\"\n            },\n            \"TakerPays\": \"357282509\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"0D9F4F8B845CD085C18F9D70062FAF69CEC300F37CB977149DFEAE745DCCC26B\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"raf2m8Ki2PVqjTU3YsKK5R62dAhiYXepcz\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521AA535D3D0C000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"5\",\n            \"PreviousTxnID\": \"F6E4AFD96A07B43B10DE403418DA3762FB8A49FE3901505C962C667AFEC227B9\",\n            \"PreviousTxnLgrSeq\": 68905425,\n            \"Sequence\": 66240304,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"0DB65BCFB15C81C88BFD1C36D7111865F1E6A61E67638598CA8E63C6840E7E4E\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"50000000000\"\n            },\n            \"TakerPays\": \"375000000\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rGKv1gHL1ANheQZ4GMCikKaGYoKJC6o6wG\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652138A3886E8497E\",\n            \"BookNode\": \"0\",\n            \"Flags\": 0,\n            \"OwnerNode\": \"21\",\n            \"PreviousTxnID\": \"EAD98C88E86D64960D11B5E1DEA7209385A55227F0FCB5D2F6855AC378D969CA\",\n            \"PreviousTxnLgrSeq\": 69011830,\n            \"Sequence\": 66128550,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"164344590.35237\"\n            },\n            \"TakerPays\": \"903895\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"0DD7B91A93DBF93C8B8558B718259A4E7353DDAE95B867931E9C4B4887716F0A\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"12681332857.14286\"\n            },\n            \"TakerPays\": \"69747330\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rELkNgURGeR4vEFUEYHNATaS9pwPk4KFEm\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365218CB5D0DC89D26\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"3\",\n            \"PreviousTxnID\": \"8964903F1BEC29C70CC69F98AC7AF17494DBAB82B5B407E61BBBEA3AA26CEC61\",\n            \"PreviousTxnLgrSeq\": 68928432,\n            \"Sequence\": 66617430,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"0DFD43A3E0DEAACF7688EEF4C05197629378EE118168687386C673B7BB8B94A7\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7785989866\"\n            },\n            \"TakerPays\": \"54338423\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rLCRC3mUAkWe4R8EwjZ43BGQs7hmpdGrbE\",\n            \"Balance\": \"1288521542\",\n            \"Flags\": 0,\n            \"OwnerCount\": 181,\n            \"Sequence\": 66153728\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"0E143780D5F448EE55221E92E1072BAA723701DD3E9A370F0C872B1228DE4641\",\n          \"PreviousFields\": {\n            \"Balance\": \"1079867036\",\n            \"OwnerCount\": 182\n          },\n          \"PreviousTxnID\": \"F247AB87C15B6965C82BE72F41B0D5C70CF421ECD24A0AB323D69DD36635F846\",\n          \"PreviousTxnLgrSeq\": 69055899\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rGEVM6YhWfikBZiXgWRdcUk7XpAyAnUHZw\",\n            \"Balance\": \"199659720\",\n            \"Flags\": 0,\n            \"OwnerCount\": 53,\n            \"Sequence\": 67349511\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"0E14AE95469D581F5D172E7D75FFF69AF36585433AFBD268B59CB70835ED1737\",\n          \"PreviousFields\": {\n            \"Balance\": \"162559531\",\n            \"OwnerCount\": 54\n          },\n          \"PreviousTxnID\": \"BBFF713B732025905959E4CCE6C7ABE523FF73EA63D84F349B0666DEED69DFEB\",\n          \"PreviousTxnLgrSeq\": 69059223\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rKBxw9iprFx2LgVfPdthKb6oWUYBLVm4Jw\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36530E35FA931A0000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"4\",\n            \"PreviousTxnID\": \"32FF861B5E2CFD8C6CDD7D9B7B4E3AF20B973DBF072186E9A4BD7C62A4F75B86\",\n            \"PreviousTxnLgrSeq\": 68790612,\n            \"Sequence\": 63654623,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7785989900\"\n            },\n            \"TakerPays\": \"311439596\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"0E29FB800EE70EB241DBCB7D91DF87AB72080F86194DAD586D729ACA3E104456\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rUXKKLv8kzkXLnNpe2aGq2PyRKuotFQEPi\",\n            \"Balance\": \"1359935997\",\n            \"Flags\": 0,\n            \"OwnerCount\": 374,\n            \"Sequence\": 67508596\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"0E4627D9EB53ED5F446085EFBF0B445FD6BBAC1EC6F0BAD9A00AB2660D9B8F7A\",\n          \"PreviousFields\": {\n            \"Balance\": \"1294935997\",\n            \"OwnerCount\": 375\n          },\n          \"PreviousTxnID\": \"6FB8F72491A27CA265E545651231856462CF5700CD7FCC9BE40D1229A2D04051\",\n          \"PreviousTxnLgrSeq\": 69064164\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-1135179899765819e-4\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rNqG1shTsAyEcTFcAeBxGsLpmaNAGbcESv\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"HighNode\": \"1\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"31f\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"0E66B7D169343C5ECBEA4BF784DA5024F55D7481563150B451EB64B068D59CBC\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-1490909697085819e-4\"\n            }\n          },\n          \"PreviousTxnID\": \"2075D1A611EE60F8B9310F6E14C38225A758492427BC06028D3CDD72C22C78C0\",\n          \"PreviousTxnLgrSeq\": 68827994\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-10127307826.78187\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rQHveZ6yCKwNSGRiu4QnTSjJbLRfgBr72p\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"HighNode\": \"b\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"ddf\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"0E676D1155E87CEF42CF68CBD09B70EFC9BCEA608F3075549D94BB2C2726DFF5\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-60127307826.78187\"\n            }\n          },\n          \"PreviousTxnID\": \"D924B30E1F2867649649D4B12134C5089862C0260EF95853081A40C8982DA859\",\n          \"PreviousTxnLgrSeq\": 68986376\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rnhFkVQVhLHoMBNc5aUNk5fRvZfXmt16nz\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652221125046F5A60\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"2\",\n            \"PreviousTxnID\": \"8AF0B05D8F4675B47DE0F99056DCD8599DF717801FD6B0BD0530B0E0C552F050\",\n            \"PreviousTxnLgrSeq\": 68897067,\n            \"Sequence\": 66616947,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"0E6DD9EB5C53195B6730FB1BC4C5990D41AB47CB7162245D559D6B35B97EE349\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7785989866\"\n            },\n            \"TakerPays\": \"74659856\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rKzptAtXDpvuPnT8Es2c3Tq8URKvEWYomC\",\n            \"Balance\": \"344294036\",\n            \"Flags\": 0,\n            \"OwnerCount\": 20,\n            \"Sequence\": 68602201\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"0E889FFFFCE2698EA9CF1DC6D8C414BA67E05403D5777DA0D0B449CD6C2F2E04\",\n          \"PreviousFields\": {\n            \"Balance\": \"291997237\",\n            \"OwnerCount\": 21\n          },\n          \"PreviousTxnID\": \"4B45BB55CC272469029436A525D3CA48E6C88D7F9B883B676633CAECECDB0447\",\n          \"PreviousTxnLgrSeq\": 69062756\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"4\",\n            \"Owner\": \"rLVGNfLJYnQtqJDuNWkpu1yaSBnrrSGPdt\",\n            \"RootIndex\": \"40B837F7CA5CFE63E97E19241C37951272F962FC2254B53540BC31F78E4A1DE1\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"0E8DEBC07E6080CC31E2A2ABD7AE4C60A015FB1141DD1133DF9B1D3563CB8E11\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r35RUZ6PjS9JT6pHG6298ES1abD9uv43D4\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521FB87CFD4C2220\",\n            \"BookNode\": \"0\",\n            \"Flags\": 0,\n            \"OwnerNode\": \"1\",\n            \"PreviousTxnID\": \"B8B9A796D62C38B669320C6C5D87ECA38EC67221AB78C973FE5195C4874573DD\",\n            \"PreviousTxnLgrSeq\": 69017586,\n            \"Sequence\": 67194422,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"0E8E5B996F4BC9A409ADA93495AE1AEE7DDCA66F35356CA77EAD82F257E0E4C7\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"6160000127.9529\"\n            },\n            \"TakerPays\": \"55000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rMX68jd5whLXjPmrgvjHYKwZHcbQ3HiYuV\",\n            \"RootIndex\": \"F90867ECC4E94006F8B14B621ED8A8D6D0A943EBC822AB9AD16D6506D13B7B3C\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"0EB4731F5326512473BD010F7F9B495F6813F701B2746E2BAA0B35887D22B257\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"48b\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rUZdJF5FhJJwrdjrcJ8vjfo7NySmeGRxxa\",\n              \"value\": \"1000000000000000\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"0ED47ADB201CA5BC4C7BD200EA07CF4A09279EF55A0DA900D3C9DFBFACD74717\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"7786189866\"\n            }\n          },\n          \"PreviousTxnID\": \"0ED25D91D8DAF3AB358B83FAA55D5BCBB727C52686241E501F6EDEEA5FF98F75\",\n          \"PreviousTxnLgrSeq\": 68057679\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-43831878392\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rEoF1AJrncEkjDkmoQNYxvCp49Wyn6RFvc\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"HighNode\": \"2\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"7a4\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"0ED5F8671BE488656F930607EE27B38B865CA6DDD80AA404858B5FB6E67C0E2B\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-93431878392\"\n            }\n          },\n          \"PreviousTxnID\": \"7240CECAFA90526AB38573D46C46414C322C53222E4E025E8D4386F472CB9108\",\n          \"PreviousTxnLgrSeq\": 68991132\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rBCw1uH84iKcSRVjY8ALzx66Q9ZVNMgYsn\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365218DE7680DDB897\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"2\",\n            \"PreviousTxnID\": \"2FB487F1DC0C61DD0C188BEA3233D9663E994ADBFA7D3E71542957B9E21BB051\",\n            \"PreviousTxnLgrSeq\": 68899016,\n            \"Sequence\": 67605377,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"0EE6FFC2156188E81A951CA7E39451C8059FC6BC3D53FB138BD0580B82997DF6\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"10899881300.38661\"\n            },\n            \"TakerPays\": \"76299169\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r9dgnNCff83iCn4xXUpnLndv4tuCY23b4P\",\n            \"Balance\": \"106656447\",\n            \"Flags\": 0,\n            \"OwnerCount\": 25,\n            \"Sequence\": 67328099\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"0EE8D023A5FCE3175E6CD65BBDAB9CAFDBB18E36DB19C5D75B889CCB6DE71E14\",\n          \"PreviousFields\": {\n            \"OwnerCount\": 26\n          },\n          \"PreviousTxnID\": \"8EA2B5CC7EB7530F858C13D989E44EA5C1254CBAEA651C9C36D39EACF7460378\",\n          \"PreviousTxnLgrSeq\": 69045296\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rJ5v25nqLv1P2Fij67kW1QE6iWqthP89v9\",\n              \"value\": \"9999999999999993e-1\"\n            },\n            \"HighNode\": \"1\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"114\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"0EEB0F8A737E279D51EF3C885933147FF8D3E81531DF35316487053C1A913833\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-7785989866\"\n            }\n          },\n          \"PreviousTxnID\": \"386D6167D9F75E5D05281872A9A60A62F2330BD8CB1636254349E8F2C8A5B59C\",\n          \"PreviousTxnLgrSeq\": 67949125\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"d55\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"raZJeAMN8WHNBRrVCc5RXYfD7mAuKctiwE\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"LowNode\": \"1\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"0EF1FC188A3CDEC4CD92B1BF77BCA0C1C3AB8AF5891C796BBE10AE76E4AA5BC0\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"7785989900\"\n            }\n          },\n          \"PreviousTxnID\": \"D4006962D3344E3734A8FA2D965FC6CE6535331BE6FEB2DB044E263F6F9B438C\",\n          \"PreviousTxnLgrSeq\": 68151683\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"2000000000000000e-4\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"f01\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rBHSrXq2LzGniUp4zypCRk1isLw1ywLPHv\",\n              \"value\": \"9999610698224570e-1\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"0EF5991931265280DF9E4016C1EDB156139B4331E390E3F8A8777ACEF0F8461E\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"1000000000000000e-3\"\n            }\n          },\n          \"PreviousTxnID\": \"A8D3B6427580A92E0650B67F924954F17315D1129F24680F0B9E32D46ADC7CDE\",\n          \"PreviousTxnLgrSeq\": 68986978\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rPDEk87BWPzJVDg22rmwGBu7gxKdkQrJEc\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36530B4EE0E7F53A0D\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"A17AB2E93C15843C7EBC764920F5EEB478092EC6DF6B1C99C4F927C9AAAEA84B\",\n            \"PreviousTxnLgrSeq\": 69026131,\n            \"Sequence\": 67489221,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"0F06FDB75F370FA2427DF39915AE11DE66E2C13FCD07B4B1533CFB19EB1A9886\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7785989864.472159\"\n            },\n            \"TakerPays\": \"247824368\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"cca\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rhft58oDqDyMaUZZCKeBgEY4ewRC5HSpqM\",\n              \"value\": \"9999999999999990e-1\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"0F0F4B44ECC90B2854955FFD2C471B37BF0A85645E73BE7AB0070631F876CC86\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"486618005.0343238\"\n            }\n          },\n          \"PreviousTxnID\": \"8AD6B46103F388F2689406E08CEA22A9CC5EFB59ED714C87219DCB4933E074D2\",\n          \"PreviousTxnLgrSeq\": 69039753\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r36sopaDwMDWZS4XNkCM27TNVkdywisWY4\",\n            \"Balance\": \"1629629918\",\n            \"Flags\": 0,\n            \"OwnerCount\": 34,\n            \"Sequence\": 66335316\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"0F12F22F7FCF6310A964D2A43DA5FAB469BFC885EA30AE21C05765CD79AA6A3B\",\n          \"PreviousFields\": {\n            \"Balance\": \"943606351\",\n            \"OwnerCount\": 35\n          },\n          \"PreviousTxnID\": \"9C64BBFCA78A5EAF306194C5C43E85C9F4459C3484FF102CC7275737B40EBC84\",\n          \"PreviousTxnLgrSeq\": 69058542\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"e92\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"r98DGNQEGR9x2bhRVBbuiHAqxq2aDD6pKa\",\n              \"value\": \"9999610698224583e-1\"\n            },\n            \"LowNode\": \"8\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"0F19FCBBDB3FD111921096408C88DFF7DDF07D2EA0E4541819244A9CD909D8A2\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"1986476167812287e-3\"\n            }\n          },\n          \"PreviousTxnID\": \"D8D8C8F1CD9E76A5EAB4B578595C12BCAEA1D67BDD96D2BA1CBC4D0274789BFE\",\n          \"PreviousTxnLgrSeq\": 69034931\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rBCcUJicoai17VVsbUKJ7BGqDa7dQ3549N\",\n            \"RootIndex\": \"BDEB39D086D51554471B3E2764C150ABC20AA61529B3EA7DD7151802DBF2F57B\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"0F2CF2E772CD501A6A601C9C0C2996166CC2F7382AD14777AD73D6F18917134C\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rUN6cc1UZw3jJRFAQpzYZdwA75aKR6qJE1\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365303B1DFDE1A28C3\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"2\",\n            \"PreviousTxnID\": \"3E9A6BB5BB8BCAD4F1203E6E61EEA9999AB43A0BFF7782961AB16FBC92F61724\",\n            \"PreviousTxnLgrSeq\": 68293464,\n            \"Sequence\": 66466047,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"0F346D02791B41B87DF42F622BF5F71EEF9E738FA7E247477A83A34D9101AB91\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7785989866\"\n            },\n            \"TakerPays\": \"80974294\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rf7hbrdWs2saBvmLubvuzHJuDhDwJf2Fuf\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36522386F26FB3EF51\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"3\",\n            \"PreviousTxnID\": \"35B5E35A7819A783F9A88DEE0C4E60C5F7EC042C031713E1F1A7D6199E0C2765\",\n            \"PreviousTxnLgrSeq\": 68155315,\n            \"Sequence\": 67205568,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"0F46655E16B9ACA262A9F2A766BCFCEDC7462511BF92A4E63F6EAC018109F57D\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"1167898480100000e-4\"\n            },\n            \"TakerPays\": \"1167898480\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rHHviosMrm1hi4Nfm7MTipMw2oeEQRTeod\",\n            \"Balance\": \"6105018044\",\n            \"Flags\": 0,\n            \"OwnerCount\": 273,\n            \"Sequence\": 65851923\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"0F5639D5F49AAE987C5F3255FDA2909D27BAABA043D40AC4B50AFBFE44AD7BDE\",\n          \"PreviousFields\": {\n            \"Balance\": \"1951072877\",\n            \"OwnerCount\": 275\n          },\n          \"PreviousTxnID\": \"A6C1BAA0D395F918AEEC8A8ABE3EF95CD9E8B2F67466F5ADC8D9476E29C24435\",\n          \"PreviousTxnLgrSeq\": 69060575\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"7\",\n            \"Owner\": \"rp6kmTUHj7Q6CeSZDrqNLRbtvhdbb6N5gY\",\n            \"RootIndex\": \"39292EB400C714D8100A8AEE9758AFCA71B691F85DD7D139CEB6E430E211E0F2\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"0F8E335F3E7F3208641CEA156827EE16846226A58FDB661849F2CEA65476F28A\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"r4xMZEgWZaocA566U2xgUqKcTnXKZkBLLi\",\n              \"value\": \"1000000000000000e-1\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"eea\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"0FBA249B1A2C72406A15A83444B5047AAB481945111356C5BDC5B2C298D06646\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-30362565818.18181\"\n            }\n          },\n          \"PreviousTxnID\": \"E870A9D7819919F66D784FD021ACCC36792626536EB6BC6277C48AA39A65A484\",\n          \"PreviousTxnLgrSeq\": 69002463\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"3\",\n            \"IndexPrevious\": \"1\",\n            \"Owner\": \"rB7sr2UvCBewPJXg9My4kjDFWDF9URdRuJ\",\n            \"RootIndex\": \"767DC66E41CB93802611E7E7D770E4EC180A94EDEA10B3B2EC7A57BA45616EA7\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"0FC80B7C9B21E0E2E715BE051450840601F4A5FAB39E0269B9756AB277F0B64F\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rJsM7f8iBRAiXz3bMUaiCsxHujM8UpirwN\",\n            \"Balance\": \"74923258\",\n            \"Flags\": 0,\n            \"OwnerCount\": 31,\n            \"Sequence\": 67366335\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"0FCEEDF6C3256CC715C2A475A265024323274F41A2F3B38E3E7BD2A817BD16C2\",\n          \"PreviousFields\": {\n            \"OwnerCount\": 32\n          },\n          \"PreviousTxnID\": \"11705204AB37C744F166A2B13BB489C9F36F456A0CF7CA16DE6A1FE509680490\",\n          \"PreviousTxnLgrSeq\": 69053620\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rGT6ze5CuPEUzsk92YnLLkEqjv6qqhabrF\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652080FA4B992EEEA\",\n            \"BookNode\": \"0\",\n            \"Flags\": 0,\n            \"OwnerNode\": \"178\",\n            \"PreviousTxnID\": \"A06601DEE13BF3FB02C3B5AE046C9251BEF364786ED5387AA3E3E59D448F084A\",\n            \"PreviousTxnLgrSeq\": 69039469,\n            \"Sequence\": 82778,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"6690171952200000e-4\"\n            },\n            \"TakerPays\": \"1518000000\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"1021312030FFE4E87C35F02DC0509F8CED0240B942E339F549A85BF4325BC446\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rEgSssemRh6cSEJYWAyA6Q9uEm6XjBUZ2H\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365210A987B567EA45\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"5A60738DBDBADF316EAFFBB45F10F35AB132208230A6EA282EA012244CDF815A\",\n            \"PreviousTxnLgrSeq\": 68965212,\n            \"Sequence\": 68766419,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"1035AD17FC65ACAB5ED7956F7560293505AE5E9346054C33A386AD0714BA6636\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"10618837198.62227\"\n            },\n            \"TakerPays\": \"49802346\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"dc9\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rfzxSb2zMhKDqCsD81pZt7Bjkvak4NBwFx\",\n              \"value\": \"1000000000000000e-1\"\n            },\n            \"LowNode\": \"2\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"103992BC2FBB7CAEBC8C74D4E7249DB800C9598D7DC2256B6A32AA767378F74F\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"62287918928\"\n            }\n          },\n          \"PreviousTxnID\": \"C0E965FB598A3F52031BC85F732A3259470329DD7FB457AC38F58D46EA95FDF0\",\n          \"PreviousTxnLgrSeq\": 68502319\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"1\",\n            \"Owner\": \"rLtYxg3QjyCpbY68rJg6XCeecMyCnzBNCt\",\n            \"RootIndex\": \"40A2D4A2CCBAB05E3DDF58AAC552EBD526621C9BAE30DA6DE01ABEEC382C71DE\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"104F8616DFE4E5235154C9F4070A0825B04F9CA5DA3E9798F985B30C299EC526\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rGMM3Ag2DiYP71uk8mWQi8fafCQczx8ouK\",\n            \"Balance\": \"2718793284\",\n            \"Flags\": 0,\n            \"OwnerCount\": 221,\n            \"Sequence\": 66413285\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"10678F6A32C919DE598661889FEC5BCE90C6F77C0AD61FB00A6826076D9BBDAE\",\n          \"PreviousFields\": {\n            \"Balance\": \"468793284\",\n            \"OwnerCount\": 222\n          },\n          \"PreviousTxnID\": \"4DB4B84C22E7808A646C9B49607123398527BF9F0F6C5A02BC6135F88E1FB133\",\n          \"PreviousTxnLgrSeq\": 69046354\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"e\",\n            \"IndexPrevious\": \"c\",\n            \"Owner\": \"rLVaKJ42tddq3vJAFiPibubt2HbBpTHuX7\",\n            \"RootIndex\": \"2FA1CBF832CFCCE5514EDB4DB3E3A6FDFAB22E98B9D0B61CFF72270C49EB45CA\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"106B112F283134CA6CB9FF475A3E9F8F758560E2B717BDF7DA757705EA2C62FA\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-10786484799\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rJeogNqHS69HkL8Le6zZoezAhGwpU4WPsc\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"460\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"10B01DB7E7973052A9A1FCB66DCA9924DF268E5C23BCEDF8E24CE84F9EEC7CA3\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-17572969598\"\n            }\n          },\n          \"PreviousTxnID\": \"33BB5DEEC2392CCE623157B3071AC108CCC903D1D793339B4CAF8710F840F39D\",\n          \"PreviousTxnLgrSeq\": 69038927\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rKKDmfji3MYEAtBZY3AQj8ghcuH1HXYpZC\",\n            \"Balance\": \"1125852829\",\n            \"Flags\": 0,\n            \"OwnerCount\": 126,\n            \"Sequence\": 67520742\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"10D7600D505178494E305F122B331EE048E924BF2169C57936150F1E4DCC72DC\",\n          \"PreviousFields\": {\n            \"Balance\": \"515295620\",\n            \"OwnerCount\": 127\n          },\n          \"PreviousTxnID\": \"3568E719E7F6A7AF74CB41B13ABCCEE1C7F042C42D1E13003ADF79C3E96B93FC\",\n          \"PreviousTxnLgrSeq\": 69063877\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rsHib22BtXCKbRdrodUNNXdxumiaPqZQVk\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365206F9C1F5BCF5EC\",\n            \"BookNode\": \"0\",\n            \"Expiration\": 695702064,\n            \"Flags\": 0,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"E6A6537BA7B409AB7C1162D066057D9CAB61701D331AC4E18F76790CA76B9A79\",\n            \"PreviousTxnLgrSeq\": 69064174,\n            \"Sequence\": 68089119,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"10FDB2D680ED2864AFBDF3C44F725EC0188524E297DC70A81ED808F9E9DE2691\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"35651326434.5712\"\n            },\n            \"TakerPays\": \"70000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"8\",\n            \"IndexPrevious\": \"6\",\n            \"Owner\": \"r3Gqpysb37rsJfn8RTCG6bSmigvzYPbWa4\",\n            \"RootIndex\": \"9DE42192B8AACB2B9EADF8A440F2B9CAB2AB798C1A7B965CD72656B86616855C\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"110702C4B5532DBD17D8DDD7C0C00E860D75D0820E72A927DCD512C1B5F195E7\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"2\",\n            \"Owner\": \"rhASEa6rnfc5WHFbd2ZdExhwyfBu27pitp\",\n            \"RootIndex\": \"19D5DF592B455BF1953D7B938B39CAAEDFDAF3199C37D3F16F87AB334A25E757\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"11242F8C577D0DC0464DFEFAF00F90B1313440B1182C0BB70A05299000E76CA6\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rGR9AifcxWmhBqTR2JWAPooQsR9kW5yzj6\",\n            \"RootIndex\": \"114416FC0F515174B9E33247220FDF44798FCFA284AF80139BE3633ED1CC14E6\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"114416FC0F515174B9E33247220FDF44798FCFA284AF80139BE3633ED1CC14E6\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rPc9ia41Ad7unkvCE7gKKZPovAuCBPt63E\",\n              \"value\": \"1000000000000000\"\n            },\n            \"HighNode\": \"4\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"66c\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"114AB4CC7577B2A1C3DDAD1D30CD63943FFECA50A004223418F115C43FD6AA1D\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-1000000000000000e-4\"\n            }\n          },\n          \"PreviousTxnID\": \"6AE5656AD3C1B5CD84101DA3E418DFA383885382B70D7160E12DAA00D0540915\",\n          \"PreviousTxnLgrSeq\": 68986036\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rEEmAELYEW2kQQRJEXhN9qJnzZmUnLxhJd\",\n            \"RootIndex\": \"116B5AAC1024735555270D3FF24C05430F63B9921DD273D8BEA2C21E41EA39D6\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"116B5AAC1024735555270D3FF24C05430F63B9921DD273D8BEA2C21E41EA39D6\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rKbNu1SDc3i5dWHdp3uLxWVn2tsA4ovDJR\",\n            \"Balance\": \"2673123460\",\n            \"Flags\": 0,\n            \"OwnerCount\": 35,\n            \"Sequence\": 66971941\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"117A222D26942CE0DC871A3DFF1FA606A8317436754736B4E8FF5D75FDCFBFF8\",\n          \"PreviousFields\": {\n            \"Balance\": \"267927406\",\n            \"OwnerCount\": 36\n          },\n          \"PreviousTxnID\": \"65B778731ECE0DCA9E70587CD4D5AAD25437906726C2B75075D8E95F0A554AD2\",\n          \"PreviousTxnLgrSeq\": 69063096\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rqben5VgPyij1hAY4bi4yPyp3vf6GgY3z\",\n            \"Balance\": \"1669477642\",\n            \"Flags\": 0,\n            \"OwnerCount\": 67,\n            \"Sequence\": 67935204\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"118178029D713F95DFBA54E2A06E3A12463F400D3AC3AA99A6FCF4477A79A8F9\",\n          \"PreviousFields\": {\n            \"Balance\": \"1460810978\",\n            \"OwnerCount\": 70\n          },\n          \"PreviousTxnID\": \"3FD1357E4B5D54B1BEE2C24DB6D6728A2B1D5A998358FDE4963228DC80A7DA99\",\n          \"PreviousTxnLgrSeq\": 69062036\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r87fNs5eU59kPhMXgYHVziF6Q5icW4WHW\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520FFCB9E548AAF9\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"EBB3357440EBD8A95C42EF2AFA5FEDA8BB732B60E88118E103D706D60D3EA132\",\n            \"PreviousTxnLgrSeq\": 68981113,\n            \"Sequence\": 67324755,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"118235D090449F04D9DF8285A15F0C8B755DB952EBD9A70CC3612443F3CAD402\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"87056888288.88889\"\n            },\n            \"TakerPays\": \"391755997\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rnYbiXaSpChddFy4fdVYDtNscUsAfgaA4U\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653038D7EA4C68000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"8\",\n            \"PreviousTxnID\": \"EF6DE9F4B88A7575643E71D591B3485681AA7C24EACFC33EE33044A09D10D511\",\n            \"PreviousTxnLgrSeq\": 68789603,\n            \"Sequence\": 66933185,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"43833516784.8373\"\n            },\n            \"TakerPays\": \"438335167\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"1185A25E82E9165CE4749C1C91AC6E8CB68B40F7050930E4F7EFA065E93DE9C3\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"45000000000\"\n            },\n            \"TakerPays\": \"450000000\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rno35bcvBqLMETwksdhSiUuDQquXyoBtem\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365218B3B7771F9000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"7\",\n            \"PreviousTxnID\": \"F701D95160FDD31481B54B786C810CC691A2070A5CEC292212BA747D045EEBCD\",\n            \"PreviousTxnLgrSeq\": 68902685,\n            \"Sequence\": 66320127,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"119CF790FBB1C2014621B28538FDD96B295D4469163371E34B36A25DBF163111\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"28000000000\"\n            },\n            \"TakerPays\": \"194684000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"e20\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"r9N61ut2QDA3sThiawsRjj3A7gvz4ZGM2L\",\n              \"value\": \"9999688558266541e-1\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"11BAF6BC66D8651B93813A18ED2A0702ECC02435B46B07C5056B115E323B6B4C\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"3033952329.40077\"\n            }\n          },\n          \"PreviousTxnID\": \"5C9CE9B2CFF8F87D5170B5BF46BD8F373FF045D31CC4CC1B02A589533548516A\",\n          \"PreviousTxnLgrSeq\": 68899285\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rB7sr2UvCBewPJXg9My4kjDFWDF9URdRuJ\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365305E087F66D6352\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"2\",\n            \"PreviousTxnID\": \"E28F094CAAF2D8E434B0255CAA1E8B9D4A132A9F22A223882C1190D74E0FAC75\",\n            \"PreviousTxnLgrSeq\": 68159677,\n            \"Sequence\": 67712880,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7785989866\"\n            },\n            \"TakerPays\": \"128799694\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"11CD7C806FB47948F92EA3423E43FD68627AA4E57A88F906214C49BAB90E9D5F\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rpcz3Nun3FcRunaTBPPZ6VK8De82hr2DzG\",\n            \"Balance\": \"212187748\",\n            \"Flags\": 0,\n            \"OwnerCount\": 47,\n            \"Sequence\": 66971099\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"11E05863B4C6211385D6DDC25D0C6C49DBA0C06FE1BC9C7DDA303CDEE3C78FA9\",\n          \"PreviousFields\": {\n            \"Balance\": \"156235749\",\n            \"OwnerCount\": 48\n          },\n          \"PreviousTxnID\": \"F4D571B7F685FE1D04218BFA0A2C924BD2E89215A8CA7579745AC918D07D0F98\",\n          \"PreviousTxnLgrSeq\": 68989941\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rNaQPWNXMaNzEWKoidMaJqNskRUFKbKWM2\",\n            \"Balance\": \"251879614\",\n            \"Flags\": 0,\n            \"OwnerCount\": 48,\n            \"Sequence\": 67342487\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"11EB531DFED1AFD9097B1C064570C652FEED388CBA49A1B92DBF3668F18DCCE8\",\n          \"PreviousFields\": {\n            \"Balance\": \"140768503\",\n            \"OwnerCount\": 49\n          },\n          \"PreviousTxnID\": \"3B391B8D2AD67240C79C806EE0D899A255DD0B1E5E4AA7AC468DE099039DA8D7\",\n          \"PreviousTxnLgrSeq\": 69047469\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rsRPHwDyRv18j1hT1wkQEHCvtCpgKYYyGc\",\n            \"RootIndex\": \"1208A96808FB7029B17E7538B1BA4947F37BB152CF645E515FCC7B8D32D2006D\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"1208A96808FB7029B17E7538B1BA4947F37BB152CF645E515FCC7B8D32D2006D\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rGKv1gHL1ANheQZ4GMCikKaGYoKJC6o6wG\",\n              \"value\": \"9999610698224570e-1\"\n            },\n            \"HighNode\": \"20\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"eea\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"12226FB855B3C941CB6DB6D7460D8518EA0181627F6C638FE8DCA13712292E77\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-12516988266.79049\"\n            }\n          },\n          \"PreviousTxnID\": \"E715BA74CF7E73BDD024047361A1DDBDF668AD726370E57905BD54F3A67EADCA\",\n          \"PreviousTxnLgrSeq\": 69053769\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r9ny1UWruE383T7YTyQgiH4re75gzGpKqa\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520B5BA7901040B2\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"8\",\n            \"PreviousTxnID\": \"249D5DE9ED966468146810488DE133CD966EE7A9E2987C313E5A85432F7E7DFE\",\n            \"PreviousTxnLgrSeq\": 68998380,\n            \"Sequence\": 66266409,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"12685D9A06E713141940EEB88FCE81FD0504D5025B1F5F2B4DB89382CA6FDE64\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"15366462099.11738\"\n            },\n            \"TakerPays\": \"49126579\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rKzptAtXDpvuPnT8Es2c3Tq8URKvEWYomC\",\n              \"value\": \"1000000000000000e-1\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"edb\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"1272CB04F4118FC2A32DD8A4CE74EE3AF1152426F1518B9F5F1F59E2768F2E9F\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-5230203000\"\n            }\n          },\n          \"PreviousTxnID\": \"20A049B8223DE9E4E8722A52F737BCF93F446C12AC49BAC78F06E5E74614C1C7\",\n          \"PreviousTxnLgrSeq\": 68891668\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"6\",\n            \"Owner\": \"rEJjxWqDiG1H1PDqXXnwdHjxAUTnVGmrDS\",\n            \"RootIndex\": \"DF6B446A5EDEBF2A5A2665EA849F8757F58F816A37D4CDB1FAFE40AA54271302\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"127819DF620F25E9EEB0E67D85CBBDF31FC5D4BA7C05D2B86F7EA561622CE6CB\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rU7MhPtUbjCow4e3Hoqxv9PVQ7ebo3mLen\",\n            \"RootIndex\": \"127C96792C9D0899072E8311ECDBAFA03938E480C08FE93F62AAAF11FEDF81DC\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"127C96792C9D0899072E8311ECDBAFA03938E480C08FE93F62AAAF11FEDF81DC\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"raLEGx6aGsVshgdT3oGzM2nyv8oAruC8Wf\",\n            \"Balance\": \"142486715\",\n            \"Flags\": 0,\n            \"OwnerCount\": 51,\n            \"Sequence\": 67515320\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"12F01336F08D68163783965263484CB8E9B9C3EBF2F926484CF8BE60DB3800CB\",\n          \"PreviousFields\": {\n            \"Balance\": \"117486715\",\n            \"OwnerCount\": 52\n          },\n          \"PreviousTxnID\": \"60E440CBB8D48599B43A0F5CA7C79EA819335320F1A7CD05E241DFC7645C554F\",\n          \"PreviousTxnLgrSeq\": 69052176\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rKVDELWvNMyoxDQenRjpToSvsLL7RwR62h\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520A569D5C23E278\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"8E2C83F5F98179CA712548909AFC733AFEC622A757083D0CFA036F8C418458D6\",\n            \"PreviousTxnLgrSeq\": 69015670,\n            \"Sequence\": 68633126,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"12F28F9760A78CC8A996B59F26111D9AD62351BDA3420397607ABB1100480166\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"25700144.63779652\"\n            },\n            \"TakerPays\": \"74787\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r3PYAn9d1DTFzJ9kuvFnhudgwsVZ6pm5hT\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520EE99ADC0CA200\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"6\",\n            \"PreviousTxnID\": \"EAED420D9E0CA9D5E769134FD48D43555AC3159E5E575683AEA4DDBF0CA5219B\",\n            \"PreviousTxnLgrSeq\": 68996914,\n            \"Sequence\": 67442312,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"1699075413897170e-4\"\n            },\n            \"TakerPays\": \"713187074\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"1339BE8189112E1F34E2610EFE148272766D63C28D9D6FB425DB6F3F04E3FF91\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"4000000000000000e-4\"\n            },\n            \"TakerPays\": \"1679000400\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rU7MhPtUbjCow4e3Hoqxv9PVQ7ebo3mLen\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521BACF6B65EDA6D\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"20B4D5B59589981B4EC9C02655A4BC8ECFDA60DB1CDD1A9DA15C22F80BA95506\",\n            \"PreviousTxnLgrSeq\": 68898444,\n            \"Sequence\": 67761542,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"134342064041598A7A2D604C7720B6A87D8B335C54A176628DF08B84F01B0A3A\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7785989866\"\n            },\n            \"TakerPays\": \"60652861\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rfXqSEeWLr4MYYLsESHbsyh3CZhAitzYVg\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652132F4573ED3217\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"3\",\n            \"PreviousTxnID\": \"7C593B6EBFDB8DFBADD385AC791E919CB123F08ABB752E473ED0BD15DCA36C53\",\n            \"PreviousTxnLgrSeq\": 68922144,\n            \"Sequence\": 67866272,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"135E9039A81FA8F336408D1AA11DBFB385915203645B8E043E0707C27BE4902B\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"10133845184.51845\"\n            },\n            \"TakerPays\": \"54722763\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"6\",\n            \"IndexPrevious\": \"4\",\n            \"Owner\": \"r4zXDbBBSbrguDq5pTzabnMgXY7n5qg2jb\",\n            \"RootIndex\": \"7701B90FA50AF135326B1DBE0C8B8A71C4E95CA5C6E659E479DEA0D12D2873BB\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"137BC72F601FF0990CBC930457A969597A1B6713AAD17676134B56B87959101A\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"e39\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rUkBkCrKSXyNbUcj7hNC684Z2TrzouvZBr\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"138B64CF78C44EFE0119269D0EB6F3ADD2237D9DF2D8CEB6EE2DB821F066A041\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"26076190543.44082\"\n            }\n          },\n          \"PreviousTxnID\": \"820BEABAADAB392C11C37D65E86AC7B934016559980661AF94D92024FF65A75C\",\n          \"PreviousTxnLgrSeq\": 68911654\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rJd8ipxtKA6u9iXpvCJYQrsES2Q4FsySHR\",\n              \"value\": \"1000000000000000e-1\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"e9b\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"13C94FB63ADDF9C78223F32CACF7392521296797A2EDE621B55FE54FE7E57D68\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-8000000000\"\n            }\n          },\n          \"PreviousTxnID\": \"696F5F87ECAA5D62083B2E12517FFFC0E109997A1E2C091F19874337E2F6E65B\",\n          \"PreviousTxnLgrSeq\": 69004161\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rMq6uX75yyCP9KjWCxYghLf9xsr3rQCbJv\",\n            \"Balance\": \"329096691\",\n            \"Flags\": 0,\n            \"OwnerCount\": 96,\n            \"Sequence\": 67526059\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"13CA3040D4DC05C1D57B8E093EFA6D67FA4F6E602061E435D44876D63BFBF692\",\n          \"PreviousFields\": {\n            \"Balance\": \"266596692\",\n            \"OwnerCount\": 97\n          },\n          \"PreviousTxnID\": \"4E3EE064C019240D636E1D732F0248A6C4EC2470C0FD44710CCB61969B9B701B\",\n          \"PreviousTxnLgrSeq\": 69063977\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"24\",\n            \"Owner\": \"rh9MmnkJaQ1P1Y6ZzmRFpQAc9UdH6pKTiS\",\n            \"RootIndex\": \"BD4BC1790ADA535088B54F5C320B7A0B0D23AAAECCAF1819BFFA3E850C8455D6\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"13CEDF99C2220D0D57091E6E82FB05977413C68104E0AAAEB26C3D12EDDCF12F\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rKU9ca11NtN2HFEaNj3WhV7dS13vpDeS46\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521BE0CE0F610676\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"1\",\n            \"PreviousTxnID\": \"7F366AB4A393DB7A525CA10F4AD2415031B6911E8662E75D8CB00B860BB2F277\",\n            \"PreviousTxnLgrSeq\": 68898126,\n            \"Sequence\": 66579410,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"19458705638.32727\"\n            },\n            \"TakerPays\": \"152692463\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"13E84CDDD22E8B9573D609346F2DCC312A54D181C381BD3D78398141A9121FEF\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"49458705638.32734\"\n            },\n            \"TakerPays\": \"388102463\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"8\",\n            \"Owner\": \"ra1aHhcQxB9sHWm7ppBMKEQWs4FTfRGZAg\",\n            \"RootIndex\": \"A3F6CFCB36517239CD869C18F5C4463E8F6891EDCDBF24A29C719AED42CF02CC\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"13FEF40B873AFBF49985E7F94F1D7781079E1C23068E768FA200AD4012CF39AB\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"raHjNXUyRvwxN5Vr5NtQ5pbFVgbM7kqLrP\",\n            \"Balance\": \"1631809812\",\n            \"Flags\": 0,\n            \"OwnerCount\": 55,\n            \"Sequence\": 66646327\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"1411339E2292D8C681AC3D2940B993F19E9C696D36F8A368AEAA11DA5FD674D0\",\n          \"PreviousFields\": {\n            \"Balance\": \"126194111\",\n            \"OwnerCount\": 56\n          },\n          \"PreviousTxnID\": \"DD6B8DE93A64E4F4F80523487AAD86AC196781750C73FEFA816EEE070ABA4726\",\n          \"PreviousTxnLgrSeq\": 69061616\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"raKfcCtqnoopzuWrRWY88p5hbTBmF7RzTj\",\n            \"Balance\": \"391036831\",\n            \"Flags\": 0,\n            \"OwnerCount\": 28,\n            \"Sequence\": 67579563\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"148BDB9934AB73BDAB451EDCDABDD324BE65FB0C5043C531CB2CD6F8921ABF9A\",\n          \"PreviousFields\": {\n            \"Balance\": \"291036831\",\n            \"OwnerCount\": 29\n          },\n          \"PreviousTxnID\": \"1673903120175841DF64C77E9F242908AD97FA6A035F65F15F104D4995F02DEB\",\n          \"PreviousTxnLgrSeq\": 69053471\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rwsVYq1xyweADXhtBLLfr2X9FL57DnGTk3\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521661D10886FBAB\",\n            \"BookNode\": \"0\",\n            \"Flags\": 0,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"156F1E950F03472F65F98CAFCA239CBF46BAB58C6024783AF16128D775D1817F\",\n            \"PreviousTxnLgrSeq\": 68927305,\n            \"Sequence\": 67647706,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"14980DD3F2920A491D44E68D0AFFDB15FE0DB370883F3475ABB5B90BF66B51EF\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"2098115110.418\"\n            },\n            \"TakerPays\": \"13218125\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"12412553330.92059\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"b06\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rwJECKX27rvudR1C4R2QCUZwatR9zkC4u5\",\n              \"value\": \"9999999997999989e-1\"\n            },\n            \"LowNode\": \"1\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"14B8BDED89BEB4FB62AC72A830CADBF3770C7887DA8D50530107172825696925\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"45537340619\"\n            }\n          },\n          \"PreviousTxnID\": \"82A653E0454F0E2FE654187E035B447BDC13DC546EBC300FCEA7094B2DDD1300\",\n          \"PreviousTxnLgrSeq\": 68995488\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rnpQiciqw8RGKo3NmqAuyZXScNoCNmQSL6\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652132AB9523E86A8\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"9\",\n            \"PreviousTxnID\": \"ADEF9FFE88CE621028C88C5B97648D03213EE03DB516037581D217E1648ADCA0\",\n            \"PreviousTxnLgrSeq\": 68932768,\n            \"Sequence\": 67428288,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"14F2D335706607522AF2E7FBD0961A71D8BF13014CBFCEB5094A903CE40D0CEB\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"18678449508.79754\"\n            },\n            \"TakerPays\": \"100770235\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rhEwjxZkMbARLTQmMsR7N6MxRDUUKLF1RP\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36532386F26F7882D5\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"9\",\n            \"PreviousTxnID\": \"5036040814755CA4A0CFD8C655296D631EFB3709EBBD06C398B933A945AF5F34\",\n            \"PreviousTxnLgrSeq\": 68156028,\n            \"Sequence\": 67389325,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"11023761340.69075\"\n            },\n            \"TakerPays\": \"1102376133\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"14FEB59EC7D827D630F6ADD59EA8D9FCFFA3985AF73FDF8F371AA0B9B27357FF\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"17241379338.19075\"\n            },\n            \"TakerPays\": \"1724137933\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-5000000000\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rHQELpjMXco8drUJVmfUq89kCZbDdWBr3A\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"72f\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"1506F6D2305BA15CCF3AF9406F5D05F048C00AB01FA7EB4A66A5FA44AE4B9D9C\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-7000000000\"\n            }\n          },\n          \"PreviousTxnID\": \"C90E5993C029A0328FE9CEC457C121D64469E203A2A7958185E50EA711A00D72\",\n          \"PreviousTxnLgrSeq\": 68899664\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rHunttX1NcJT4kdqXJZaqjkU7zeMmJuauN\",\n              \"value\": \"1000000000000000e-1\"\n            },\n            \"HighNode\": \"1\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"ea6\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"151D3B28FEE4D8E860AE2FB4EE231A8F5730807D2FB958835ED4FABE0F960204\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-1154462616532678e-4\"\n            }\n          },\n          \"PreviousTxnID\": \"A876CC518EAC8086AD5CFF07F89A0083F8C01AF3EDF1F83A2873FFCA50D8373E\",\n          \"PreviousTxnLgrSeq\": 68956977\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"c\",\n            \"IndexPrevious\": \"a\",\n            \"Owner\": \"rHHviosMrm1hi4Nfm7MTipMw2oeEQRTeod\",\n            \"RootIndex\": \"D328BE27A8ADCB49C5630044BC76FEEF5D15AA7B44CDE83B9594167A145F8DD8\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"15792A8349A395092788AFC8A81C61BA715F1678DB99638EEB84E826F2EE642C\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r3fU9zQRHEWPbnN3r9TcM1d6NSRsBvUjau\",\n            \"Balance\": \"498417249\",\n            \"Flags\": 0,\n            \"OwnerCount\": 92,\n            \"Sequence\": 67522082\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"1583CD276F1C181543B54BD1F94233B6273755B8462204D1733814AC8D7AA59C\",\n          \"PreviousFields\": {\n            \"Balance\": \"477217249\",\n            \"OwnerCount\": 93\n          },\n          \"PreviousTxnID\": \"8BB5F5B9542ABE87FA547B9FD7EAF099C5DC21ECDF7FE766669F20AE4DE7AB83\",\n          \"PreviousTxnLgrSeq\": 69054071\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"2\",\n            \"Owner\": \"r3uzGoy1vgEEdULUkLBRJXaYfww3nzYP27\",\n            \"RootIndex\": \"129E6EF8A8F1BF628EA95D2A94CD08A6672D9B34760E8C911CFA1A47EED92F8D\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"159497FEC9C4E9CB26C84E10EB13BA7ACCFE43FCEF653EB2C9AC1F454AAA1DD2\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"3\",\n            \"Owner\": \"rhrguNtFAs4pp6FD4n2Uz2M5PQACwnWdrC\",\n            \"RootIndex\": \"F8D506185F094CF04D271EA780018165C2D82CE21CA5844760DC0EBE4A9AF1AB\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"15C960DC8446973E27A6A13C906CD8A873235F80F0EA4F2DAB65DF76BAD34418\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rNLPZmai318pizfUNmkebSrtsR5mFvVVWt\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653038D7EA4C68000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"2\",\n            \"PreviousTxnID\": \"7C886A10308F9DB4875E38A81A143EF4A78BE302E10EF23376303C5D2FAA97A0\",\n            \"PreviousTxnLgrSeq\": 68890675,\n            \"Sequence\": 65894134,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"15DB8A587B6405037448FCEC16DB54AB063DC35734E25992CF7BCABA6A54D9BF\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7000000000\"\n            },\n            \"TakerPays\": \"70000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"d\",\n            \"IndexPrevious\": \"b\",\n            \"Owner\": \"rsydLXavwRHUq9TWdwYqPpYViuFBNuYQYs\",\n            \"RootIndex\": \"915A98AAD8D9A9670FA25E5FF703921D59FA22918FFFF2461E7C00232D0FBA5D\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"15E048B55E43909A12879A61155DE4450D7AAB8548112AE921852EEC58823BAF\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"r4A2sUYHaLAGsDxfwUSv7GXTyYRsoBfQin\",\n              \"value\": \"9999610698224576e-1\"\n            },\n            \"HighNode\": \"2\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"e7d\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"15EDAF3359B21F80C7E8799BDDB76BD183B7E1AE97589831B753F9D9C0BCA3D6\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-14866087945.17969\"\n            }\n          },\n          \"PreviousTxnID\": \"516199CA01F6EF24C69DD122DF38068F800E082AE5F4A99320E35BEB6B5D3F6B\",\n          \"PreviousTxnLgrSeq\": 68940525\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-7786973309.70861\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"r48QoxLkkqiwjzhposyFj61op7AtvR5aLq\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"cf2\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"1691FCEDAEAD89B2474FE4001A5FE028D01CDF0AA853750C52DC5284E1658F24\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-23941973309.70861\"\n            }\n          },\n          \"PreviousTxnID\": \"64E93CD6EC69A437B4447E19605284264BEFDF7D4C43727DC21553B42FE1F2B2\",\n          \"PreviousTxnLgrSeq\": 68912329\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"1\",\n            \"Owner\": \"r9MQ7Hek3iMwBnYRuHTuuG3ssJu48PHaxJ\",\n            \"RootIndex\": \"D2DAF9DE64380E0214B3F74212953AFD557A92CCF328266843C22E1572875671\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"1694417E7128CB02A03B57BF15EEB450CCA1F5200568BAE5BD91C93C85F92167\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rHmYEsWRfXC1YbFEKeJRWu9d7tdZ6x1od5\",\n              \"value\": \"9999999997999991e-1\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"b6e\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"169E3B164864340E7F4A0A8C54E74585200DB0DF382834300752B6014B7174AF\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-14000000000\"\n            }\n          },\n          \"PreviousTxnID\": \"481EC438668C04BB9CC8F2DD0093942D152A40408A2EFD40E56303D1BCDF8B9B\",\n          \"PreviousTxnLgrSeq\": 68227200\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"a3c\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rB7bqYSsffBTNfLgyyyXyWL2e1bg2djJq2\",\n              \"value\": \"9999999999999990e-1\"\n            },\n            \"LowNode\": \"6\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"16A70882D5F402DEBC814CC48EBBE7C136E940EE0BC40BB7838FBEE3662620DA\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"7785989866\"\n            }\n          },\n          \"PreviousTxnID\": \"78C01598E586DFFDBFAA1D68D6BD0ACBABC36E42B7E59606AD98A4AC8D54C332\",\n          \"PreviousTxnLgrSeq\": 68057439\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rLgitcbChWYinjw7tiwK6wQw2mN6pEyWzw\",\n            \"RootIndex\": \"16C9FBC6693C492AABE3929A70371E21DA61AC32ACA15C72EA8EF23989C7ECBD\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"16C9FBC6693C492AABE3929A70371E21DA61AC32ACA15C72EA8EF23989C7ECBD\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"9\",\n            \"Owner\": \"rGgjwqb3Lg3yvrb1CRRqcTghWvU4r7fvFX\",\n            \"RootIndex\": \"0993EA29BCB09980B54168F4B391202F77C09534C939B3A4B0F37D7745287714\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"16CCACCF223053932377ED9C29C923F7152827826E2BC4490ED2826986ABF9F0\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rK1QTLhkJgn7zvG8ZcGJea3XzWfj45xhRE\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653038D7EA4C68000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"1\",\n            \"PreviousTxnID\": \"BDE5ED0568DE638AD0C5636D2FDD271727FD7EBA5B76BE0AE321CB7CA23B64F2\",\n            \"PreviousTxnLgrSeq\": 68900131,\n            \"Sequence\": 68264055,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"16DB6E534C6F72A8BEB071ADFC78C0C78FEC1A4F7976DDD176FA10F1F143083C\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"10000000000\"\n            },\n            \"TakerPays\": \"100000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rQpXmMNyGKtsYHwkG7Y3n8sXSXo2cmB1Nt\",\n            \"RootIndex\": \"16E0C156FF84FCA3E23F5D16B0D7E698F6A66097FAD5EB31261809FF6370038C\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"16E0C156FF84FCA3E23F5D16B0D7E698F6A66097FAD5EB31261809FF6370038C\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rGEpUHYXy3Lt8KvmaKG9wGEB51H1nGAcJ\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365217FFA2F2B82AEC\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"B449A16D554A778FB594F0081335A3C5D687A92E0F39D6F767BE40F228C43296\",\n            \"PreviousTxnLgrSeq\": 69040844,\n            \"Sequence\": 68786183,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"16E4CF3B1B816C9AC9B84FC473F676299D41E30036DEF06A375C79D8539FC1B6\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"4555713689.655172\"\n            },\n            \"TakerPays\": \"30773845\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"razceqmpdpjLd5o52i1GiaZJhmB8SEbfCa\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36530AA87BF01D4380\",\n            \"BookNode\": \"0\",\n            \"Expiration\": 723610812,\n            \"Flags\": 0,\n            \"OwnerNode\": \"c\",\n            \"PreviousTxnID\": \"9C0CBDF92855D1220A1816717391FB545B54E697F70E8875E31C3910CE4EFEC3\",\n            \"PreviousTxnLgrSeq\": 68154162,\n            \"Sequence\": 1411,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"1713B2474A54018FA152BCFE706A67F922DBE30C65D06164307708C7D0A98EB1\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"3333333300000000e-4\"\n            },\n            \"TakerPays\": \"10000000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"0\",\n            \"IndexPrevious\": \"7\",\n            \"Owner\": \"r98DGNQEGR9x2bhRVBbuiHAqxq2aDD6pKa\",\n            \"RootIndex\": \"4509AC09B894AB80FB8225E235EA6295D629A8F6A759AA177218DCAD3C19933B\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"172A06873BB83B41B07FFD90E640F37230C5B62C2C315474E5006B1661F6B0DC\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rJKHj2kBpPFHbEu4m2uuSuh5rQEcAYwJ8Z\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521FF973C276AC49\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"c\",\n            \"PreviousTxnID\": \"3BE635A79FB9128A7018B79D1AF3031A1DA4D9D34E0D83B07B3C7797BF180A39\",\n            \"PreviousTxnLgrSeq\": 68897122,\n            \"Sequence\": 67088025,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"1746C58C253F934AF2B953CF32466FAAA717A1A6EDE75F0CF31C1014900FAE28\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7000000000\"\n            },\n            \"TakerPays\": \"62999999\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"3997127386520694e-3\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"ce0\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rpCmDBk3dADpY9cb77D1hA4NHYnn7YbJM1\",\n              \"value\": \"9999999997999900e-2\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"17536D89843338D4A7A5502E58CCB89B963BF68DB0F6B36B7E5D018233657127\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"4210127386520694e-3\"\n            }\n          },\n          \"PreviousTxnID\": \"6125C0759027EEF3E016DF24B55F67B626424E62B6DAE36D07C2B5498B45FEED\",\n          \"PreviousTxnLgrSeq\": 68264001\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"5\",\n            \"Owner\": \"rHAYfZTYakQQ5NJCP8BD21nrQeQmDyst5a\",\n            \"RootIndex\": \"047B99C075CFA917FAD71119725DBDE11B1160DE029036A76B7521E9C4B45EB0\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"175F500472CF2335DF87A4707E5F65EFB429939892EF2153016F2AC694C20757\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-2500000000000000e-4\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rEjghQohwSDxD7d3NbTdrzRLGRRsGf7qwN\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"42f\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"1787282E21035E247DC0B19014EB6AE5B129F750E42FB938D42DE31439F281E5\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-3000000000000000e-4\"\n            }\n          },\n          \"PreviousTxnID\": \"7364DEE751C5B2D714B9C2A3B42FFD41DAF05907BE7CAF3281D1BEC0EF17F148\",\n          \"PreviousTxnLgrSeq\": 68867488\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"5\",\n            \"IndexPrevious\": \"3\",\n            \"Owner\": \"rJWkGGCNuazEf7ch7C9bZkiiYy62Z95SA9\",\n            \"RootIndex\": \"091FA763978758309AC5D8242AFE3FFEB6FE5A5B72D6D9B037C9186F4F55B599\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"17B99F5B9CFE91D1F62175B7514D68248AFBF076D4484C8D6599DD197578DF95\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"razceqmpdpjLd5o52i1GiaZJhmB8SEbfCa\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521FF973CB83D440\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"b\",\n            \"PreviousTxnID\": \"56289B096296D440731D027D320B144AF097FA5140426FFE1275437C38091E98\",\n            \"PreviousTxnLgrSeq\": 67960053,\n            \"Sequence\": 1034,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"180293417D2968D9E3885548364B2347633CF5E3952012E076D7E8D8CC9064D7\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"1111111110000000e-4\"\n            },\n            \"TakerPays\": \"1000000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rHLNuze17yJvjKohtAWTiakAUWFDp81Nbv\",\n            \"RootIndex\": \"1854415E1280BFCAFAC66998B9A37DC80959EF18F49CED094042B51132C5C58A\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"1854415E1280BFCAFAC66998B9A37DC80959EF18F49CED094042B51132C5C58A\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rBCw1uH84iKcSRVjY8ALzx66Q9ZVNMgYsn\",\n            \"Balance\": \"262296646\",\n            \"Flags\": 0,\n            \"OwnerCount\": 87,\n            \"Sequence\": 67605379\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"18A67BB911101B6601D6AC53B2197C8F217C38EDF7E6571C371F0B4CCC4136CA\",\n          \"PreviousFields\": {\n            \"Balance\": \"185997477\",\n            \"OwnerCount\": 88\n          },\n          \"PreviousTxnID\": \"3198D16B3C01A0E75143933DFD9AD154FCEE7A3C53B2EDA8FE5687585892953F\",\n          \"PreviousTxnLgrSeq\": 69027486\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rw2K4HQDujtogHECEi9ubWzeVVHr2bBN16\",\n            \"Balance\": \"369162887\",\n            \"Flags\": 0,\n            \"OwnerCount\": 67,\n            \"Sequence\": 67133437\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"18AC37CB030F3B039F2176F7DBF58953635ABFEF3F6D068E0481C81CC2113D7C\",\n          \"PreviousFields\": {\n            \"Balance\": \"213443090\",\n            \"OwnerCount\": 68\n          },\n          \"PreviousTxnID\": \"6EEAC53B70256EFEBF3AFD71E0343C1ED8E9A4C51C786DD8E8CE9DE72753DB61\",\n          \"PreviousTxnLgrSeq\": 69063536\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rjD7dFqNXSEK4juN3ntGwbYn1P3xjepVf\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36522386F26BA20215\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"1\",\n            \"PreviousTxnID\": \"A4E85BD56A83692AF50894E1BB73C061373B8FC2002AA5C236192B6167D77071\",\n            \"PreviousTxnLgrSeq\": 68059457,\n            \"Sequence\": 67707159,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"18C7B3CEB9E5248D301CC4D1DB57A5627993764C1970CF3F9D33E5360C6FC757\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"3889722226.893519\"\n            },\n            \"TakerPays\": \"38897222\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rNvk1SNQZhU6fsyMuaTeLucyw5x5uxfxQy\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365213B7B21280E000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"2\",\n            \"PreviousTxnID\": \"5554419DFC980FCD8974C177DC530D516450FED5E54C083F030DB5DB0ECBDBE5\",\n            \"PreviousTxnLgrSeq\": 68919955,\n            \"Sequence\": 67175540,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"18D0A42C6A5E27161BA31733CB95250C32D0F1482B193681FD73ED4F9C58D4C3\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"894236036.036037\"\n            },\n            \"TakerPays\": \"4963010\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rLtYxg3QjyCpbY68rJg6XCeecMyCnzBNCt\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365218CB5D0DC89D26\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"2\",\n            \"PreviousTxnID\": \"E0E19EC7AAE78ECA7BCD3D85DEFE79C7D756D09A5AD101DCF713B42349DACBAC\",\n            \"PreviousTxnLgrSeq\": 68928469,\n            \"Sequence\": 66617290,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"18EED4504B4DB8294B8A7E7EF356BA89DF6FF292E5F2DF1C7138E94CFC21306D\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7785989866\"\n            },\n            \"TakerPays\": \"54338423\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rQnNwoWPxGyxMoLogTPHYeK1hGYwJ3b9Sz\",\n              \"value\": \"1000000000000000e-1\"\n            },\n            \"HighNode\": \"2\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"ed3\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"18F17C8FB1C47DEE25DF8696652FB4A71352BE9ADD54FE837C382831482EE46A\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-31784313725.49019\"\n            }\n          },\n          \"PreviousTxnID\": \"D3C0C9D44AE7C4B4A1AFA2CE78BACF5E06723DA75D3FFB31D77BF78D909531C3\",\n          \"PreviousTxnLgrSeq\": 68922926\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rfJ35bQofteAs3h4aCA77V5wSHRsHChttf\",\n            \"Balance\": \"271123542\",\n            \"Flags\": 0,\n            \"OwnerCount\": 94,\n            \"Sequence\": 66166943\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"192F37E4AC5E43751769269E7104B06C3E1AF76F2CC1A9DBE0E9B53916F6B313\",\n          \"PreviousFields\": {\n            \"Balance\": \"214463542\",\n            \"OwnerCount\": 95\n          },\n          \"PreviousTxnID\": \"E7B5D934A360620CFDEB6E8B44A09E2355405739626DD8260532A1B483C92594\",\n          \"PreviousTxnLgrSeq\": 69030968\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rNk5vizuipEGcr9cNVXnh1eBjhaMFqFs42\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36531FF973CAFA8000\",\n            \"BookNode\": \"0\",\n            \"Expiration\": 724402522,\n            \"Flags\": 131072,\n            \"OwnerNode\": \"3\",\n            \"PreviousTxnID\": \"26D081808A21497EDE4B3CA0F91F6E0E979C0028E60E5A60431885EE55A9DEFD\",\n            \"PreviousTxnLgrSeq\": 68348074,\n            \"Sequence\": 67689494,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"1938E34E3586172C47E6281CAD5E2A3B86368C2ADDC346F44512DEA0431549E5\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"1000000000\"\n            },\n            \"TakerPays\": \"90000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rsRPHwDyRv18j1hT1wkQEHCvtCpgKYYyGc\",\n            \"Balance\": \"389155969\",\n            \"Flags\": 0,\n            \"MessageKey\": \"020000000000000000000000004E60D4CEF14D65829B9F2EA13230010E0686261D\",\n            \"OwnerCount\": 17,\n            \"Sequence\": 58601491\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"1949A881B3C84A70EB716DF170EEB540A8C002DE915708E948B3311E94701597\",\n          \"PreviousFields\": {\n            \"Balance\": \"227032370\",\n            \"OwnerCount\": 18\n          },\n          \"PreviousTxnID\": \"E1E9B849387117F3C518CCB9A4BE3AC9F23116F57A12D033DF0CC8A8FB9D3FEE\",\n          \"PreviousTxnLgrSeq\": 69053916\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rDHvd9BAsKFcmRyCA3Y6iYEMi7n3xzR5Uu\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653212BF3B80C09E6\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"a\",\n            \"PreviousTxnID\": \"F28F8A108123B4D924F518ECE81A17674289159F4CD97871565507FB07E605CE\",\n            \"PreviousTxnLgrSeq\": 68289551,\n            \"Sequence\": 66975678,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"15571979732\"\n            },\n            \"TakerPays\": \"1453955747\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"1951F859DEC752C8A8355AD69AC1C65300A0F08E58E1AB02F8194E877B0966CD\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rL92EVWszBA1ZbZADyficMkRFVvpV15sEE\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521E32B4780A2147\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"9\",\n            \"PreviousTxnID\": \"ACF9D5A5F8687CFF0AF796A6B02C34D49460B14D4CED704B144CED778743CBE1\",\n            \"PreviousTxnLgrSeq\": 68899849,\n            \"Sequence\": 67153653,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"1984B8151D30B18DCFE4699C919B30E4771119A39FFD13F5BB49705B053B5C43\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"26034361675.38556\"\n            },\n            \"TakerPays\": \"221292074\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r5EHmNdKr1SRiA1DrtKBo18DYRrE5ncHF\",\n            \"Balance\": \"400777805\",\n            \"Flags\": 0,\n            \"OwnerCount\": 5,\n            \"Sequence\": 67580215\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"199109E9C56836664C315F11860C4E034682A08BE0B7F22DD103F60D98B15673\",\n          \"PreviousFields\": {\n            \"Balance\": \"22747977\",\n            \"OwnerCount\": 6\n          },\n          \"PreviousTxnID\": \"5908D39202A0D8B2F5928B7E6537EFCB3C660F0153DDD6EA4BBBD1F6F1D07C9C\",\n          \"PreviousTxnLgrSeq\": 69039387\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rspLJnfzomVceQKCn6ExME3gJEUuhUZxdV\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36522386F26EBE57EC\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"15\",\n            \"PreviousTxnID\": \"5371AE37E0E1742902E404689D186DFD40CCF35915FDE99B283E02C1E9E91364\",\n            \"PreviousTxnLgrSeq\": 68942879,\n            \"Sequence\": 67373759,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"22122176237.5\"\n            },\n            \"TakerPays\": \"221221762\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"19934C6D6852353DCE48CC6B7CB9D83C32905946333B86BF70E857E1FA9B3A0E\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rhJfzjX6NrYjiR8yGumtJSHuuLxn2JbgvT\",\n            \"Balance\": \"121526754\",\n            \"Flags\": 0,\n            \"OwnerCount\": 21,\n            \"Sequence\": 67761600\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"19B56E16C088C8EE3560F6C4170B1524144E822955F1490AC89DD2C9F967A7E0\",\n          \"PreviousFields\": {\n            \"Balance\": \"60873893\",\n            \"OwnerCount\": 22\n          },\n          \"PreviousTxnID\": \"D0B094EF85CDB4F374E881AA0451298239F739836BE9C6A92BD6911FB59B234D\",\n          \"PreviousTxnLgrSeq\": 69044027\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rsNTEynqepWnCvBMLb8x3tekWQXG2TxfEM\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520B8BDB94BFC03D\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"7C63F1694CD8140D0C5A3EBC88AF5A61C1A7BFF6F5E91B2F245A77DF03668D44\",\n            \"PreviousTxnLgrSeq\": 68999618,\n            \"Sequence\": 67692595,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"8619713969.454317\"\n            },\n            \"TakerPays\": \"28014070\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"19E49F39D0F0C4A0CDAF8FFDB67D2FCC6DE9C7967DA639478B98AD2AB1405FA5\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rGgjwqb3Lg3yvrb1CRRqcTghWvU4r7fvFX\",\n            \"Balance\": \"3627435762\",\n            \"Flags\": 0,\n            \"OwnerCount\": 86,\n            \"Sequence\": 66228561\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"1A98773469D02CF9328DF41309B61FBDE85128E04BDA77C89CF42BE552FD285F\",\n          \"PreviousFields\": {\n            \"Balance\": \"1314996772\",\n            \"OwnerCount\": 87\n          },\n          \"PreviousTxnID\": \"629E9FE84D5E4CAC080426621498BC5D00516C4EDACA94CB08EA7CA0D5271E38\",\n          \"PreviousTxnLgrSeq\": 69060088\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rsWg26FevrM9h2PFcanVpvpaLNuoGpLnrB\",\n            \"Balance\": \"6148244613\",\n            \"Flags\": 0,\n            \"OwnerCount\": 23,\n            \"Sequence\": 67689872\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"1AF68234660EC08CCBDE52361FEF42724B159EDFCCD7A3DFA94D2F2A1E2BF142\",\n          \"PreviousFields\": {\n            \"Balance\": \"5898244613\",\n            \"OwnerCount\": 24\n          },\n          \"PreviousTxnID\": \"1E63D9C71BA5E435C690DDE49C3CC7E4034057BB224CD25F276D0BD856E786F3\",\n          \"PreviousTxnLgrSeq\": 68784970\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"e7e\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rKnBQjFdG2pPCrKiUmeZZZ6YjmuCyWVta\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"1AFF59DA46D633626E64AE3E64DC92BCD669A9987547656708F8CDBC5B90DF92\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"7607438921.424369\"\n            }\n          },\n          \"PreviousTxnID\": \"913BFC867235A7532C957B2914F84E8318CDA1EFB97AAA8436D17CD0B589C22C\",\n          \"PreviousTxnLgrSeq\": 68752885\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"1\",\n            \"Owner\": \"rUdhzvzWjHpSjP6CGksiit3bdgGLV5DXZv\",\n            \"RootIndex\": \"6BF0BB998DBA1FA0A7D6C033B316942EC850FB722B036E378025C55A28005D68\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"1B2E5B143F52A4097994454701E39B9CAC76F7347F20FA20D29DD1581B66367C\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"2\",\n            \"Owner\": \"r4A2sUYHaLAGsDxfwUSv7GXTyYRsoBfQin\",\n            \"RootIndex\": \"5EFD0A90FF4AD5FFD97A0821FF1183192FC13A98174BD184E63638165FB2BF6C\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"1B4B3D5865BD60C8B476AE47E393E881C1AA69B654323D81C4F900DF65602EB8\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rKzptAtXDpvuPnT8Es2c3Tq8URKvEWYomC\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36522386099206BD71\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"70FE7C12628FD71F5FC3340F21520B39E8843062B44691CB7D84B8C54246CB9D\",\n            \"PreviousTxnLgrSeq\": 68893812,\n            \"Sequence\": 68602029,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"1B5A3E1623893589CC83B67E92036830AC5F00786ECC7F336EA02FCFCE866D84\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"5230203000\"\n            },\n            \"TakerPays\": \"52296799\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rMDc7eVhCw5jjCXU5DGpn2tUV9D7aBBFLx\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653038D7EA4C68000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"4\",\n            \"PreviousTxnID\": \"0D26618E261731B91EE2412BA41ABC2B0B07036CF933B1C785203615B44F9B3A\",\n            \"PreviousTxnLgrSeq\": 68150767,\n            \"Sequence\": 66970144,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7000000000\"\n            },\n            \"TakerPays\": \"70000000\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"1B641190A11084B9DC7062F302DB79F9ABFAD12E4BF0576DB8168164A7265BB0\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"22130399.88578\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"e96\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rD5TVx1akARpWNKumsadd69Wask2L69v7E\",\n              \"value\": \"1000000000000000e-1\"\n            },\n            \"LowNode\": \"9\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"1B6E12D4F7C835A898694B4687EE951D42845453A861F38F3004B594F7713E01\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"11579630399.88578\"\n            }\n          },\n          \"PreviousTxnID\": \"202F976F658DEF73049F918F5D60C05DE871BE89E1BC09ED8C3D341EF4D32E64\",\n          \"PreviousTxnLgrSeq\": 68922054\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rpBHrwSGdQm3hE3f6988mSgV9LAzuBsx9A\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520F867DE43305C1\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"1\",\n            \"PreviousTxnID\": \"72A999D4AC1543489AD132EBC19E8B766BB36C7F4E959E3E4C2A9A3AB511AB68\",\n            \"PreviousTxnLgrSeq\": 69002204,\n            \"Sequence\": 67835821,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"1C7E7F20C3196BCA78079FC186CCD857E40C66D01089CA7F6E37F2F2FD85E03C\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7785989866\"\n            },\n            \"TakerPays\": \"34024775\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rh1bgyeVNDBauF3vXuASW2L8MWrdq8XYko\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521C110214914003\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"13B8825F4E2F134933BA769767C16B8A2DD10B498E83CDD2F78566268F3A8390\",\n            \"PreviousTxnLgrSeq\": 68898445,\n            \"Sequence\": 67364431,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"258138076.92307\"\n            },\n            \"TakerPays\": \"2039290\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"1CD36013F87E2FEC079D57D80036EA35680C9CC1695D1B39169A8B5D29F72F37\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"28128427410.9589\"\n            },\n            \"TakerPays\": \"222214576\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rDTDTzVK47KCcGmiywZHhKsDP7323fqGGL\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521C6BF526340000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 0,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"83C3975676540F9094F43911AC5C8E51AB89B80AFF24DC1B4D1A4EE9A00606B6\",\n            \"PreviousTxnLgrSeq\": 68923490,\n            \"Sequence\": 67690769,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"1CD59617A0E0106AAF035E7C7919AA45095F955C6690EFDE7CB8F8A38A230002\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"11000000000\"\n            },\n            \"TakerPays\": \"88000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r9N61ut2QDA3sThiawsRjj3A7gvz4ZGM2L\",\n            \"Balance\": \"38301396\",\n            \"Flags\": 0,\n            \"OwnerCount\": 3,\n            \"Sequence\": 67750590\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"1CE1B379074CAED87EAF1CCDCE4E010A7A96B75A3895E7C9532078E915D25119\",\n          \"PreviousFields\": {\n            \"Balance\": \"19217836\",\n            \"OwnerCount\": 4\n          },\n          \"PreviousTxnID\": \"295F948E361781843BE241B720AC4E49759181DE1DA86E0B3C36F1678D50FF64\",\n          \"PreviousTxnLgrSeq\": 68899294\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rPy5zQthBW1gHiWbdHmbPkGtF9jM5XQGNs\",\n            \"RootIndex\": \"1D4245A55D65057567ED6AB0861703BD897D6A2228973B8F15340B750447FA78\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"1D4245A55D65057567ED6AB0861703BD897D6A2228973B8F15340B750447FA78\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rA1sVxrZ16rSr1SrxUfsHAR592J2X4yVf\",\n            \"RootIndex\": \"472CD4D9A22546D55D5D1EED745A7D35C34B18FF1570C18EA06542F1985D1A9A\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"1D5F30054EF643CD1031BF50B4425C1FA40F7F12A08AAB7E4EB1F9875206C9DC\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"2\",\n            \"Owner\": \"rnZhNn5hFGdBk7UTE5hLjBZFNrYGSs1wHQ\",\n            \"RootIndex\": \"D995383C6B7DDB592B4F0A10CB53903AFFA964BE69A9928483C5513A7C574D90\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"1D68A9E96A158FAB6F2E648EE841D3636114CA461BD60B07B7E347D59D717526\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r3pUPUHoXbK4o5wjfPWjqQe4Xh2wu2KWvq\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520B5ABEBA22641F\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"48B61B3F26CA5A8B030994271FA4F30B0DB59DF7983320DAAFC355D67A18A223\",\n            \"PreviousTxnLgrSeq\": 68998704,\n            \"Sequence\": 67672840,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"1DAE4AE204BE20369F16830C7A4251B4F3B40757A639542FC622E62725092208\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"36020078880.76793\"\n            },\n            \"TakerPays\": \"115120170\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rKeFfq8ZvHbFWbsQBAeTB5Ng7aGtoLN84K\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520C135F5B977000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"9\",\n            \"PreviousTxnID\": \"F6124A49A80B1C86FA74DBFCF32359261F1318E4B91533E248C2443DA2BE5FAA\",\n            \"PreviousTxnLgrSeq\": 68998201,\n            \"Sequence\": 66392600,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"1DBAB9DD65C1897AE98215DE8F2ADDE8BDC4708C7A69022B410E55DBE8BC4580\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"95000000000\"\n            },\n            \"TakerPays\": \"322905000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"ec7\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"r9Bq12mZUmUByGGcnu8tvj2KYAcJQ4zbTL\",\n              \"value\": \"9999610698104599e-1\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"1DC1B00749187BD1BBD95D62ABAE6BB4C67277A5FB9579A680BDC3DF37E19566\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"8518114231.41891\"\n            }\n          },\n          \"PreviousTxnID\": \"D9824679563B6EA473273FFB417F710FC38475816A587B3ADCF03119B70D039D\",\n          \"PreviousTxnLgrSeq\": 69011393\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r3fU9zQRHEWPbnN3r9TcM1d6NSRsBvUjau\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652096A2934A7A000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"3\",\n            \"PreviousTxnID\": \"ACBEA9B450F2FD9E323BAAFCED663AE047ABAEA8F7B5EEC6818DBB6D56BA8FF8\",\n            \"PreviousTxnLgrSeq\": 69019593,\n            \"Sequence\": 67522044,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"1DF2FFED86F4FC4DADF8A956E5C46348D9F9523F5EAF689C6A3B64AEDBFD09F7\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"8000000000\"\n            },\n            \"TakerPays\": \"21200000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r4VjGvXZQwpAy5iqMCt6kbSbFb7Bi8RYEG\",\n            \"Balance\": \"181144549\",\n            \"Flags\": 0,\n            \"OwnerCount\": 27,\n            \"Sequence\": 67388838\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"1E420A04BDAF14BD85F7F5323F0F3678549BD152E26ABB38AB26175090C0EF75\",\n          \"PreviousFields\": {\n            \"Balance\": \"75033545\",\n            \"OwnerCount\": 29\n          },\n          \"PreviousTxnID\": \"5FA79E32931031D8164D13CB652F540F46D95BEA6AEB225C03CCA111A7861B94\",\n          \"PreviousTxnLgrSeq\": 69041286\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"ra5BMHvXy7Y97xhxSLKZWCDPpbqc9fvWdq\",\n            \"Balance\": \"1886066286\",\n            \"Flags\": 0,\n            \"OwnerCount\": 487,\n            \"Sequence\": 66693363\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"1E50496BE33B40F0AF1587C64DF445B16CFFAF95558E9951B62D820EC4CF672F\",\n          \"PreviousFields\": {\n            \"Balance\": \"1379027054\",\n            \"OwnerCount\": 488\n          },\n          \"PreviousTxnID\": \"AEA72183F7C564D41169DEB006506E454BB3505E353846A1F72BA1E4552E3735\",\n          \"PreviousTxnLgrSeq\": 69061749\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rKMLJSbumUE4mnXET6X1DDFF6JsN8wE8x9\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36530D529AE9E86000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"1\",\n            \"PreviousTxnID\": \"7137805819BC88B8B8802D3C7609F664CF5F61332D2D849E86B9A78E985147E2\",\n            \"PreviousTxnLgrSeq\": 69024161,\n            \"Sequence\": 67332287,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"1E6983B54F743E543110BE66FBFC9095AAAB6F037AF79FABD85B39A8CA05FDC0\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"2000000000000000e-4\"\n            },\n            \"TakerPays\": \"7500000000\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rGZkP89rxHSHy1opAagx8cUx4JdMhr9v4\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653044364C5BB0000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"2\",\n            \"PreviousTxnID\": \"1CF2617727BDEF8491177DD1FEA32ABC107ADB2E02B918D1C86DA3E1EDEC9A2D\",\n            \"PreviousTxnLgrSeq\": 68898797,\n            \"Sequence\": 66951132,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"1E702B3E800AFB61479691B910C2AEC5E45EECED43D1D44965536D4F12A0BB95\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"43000000000\"\n            },\n            \"TakerPays\": \"516000000\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rNvk1SNQZhU6fsyMuaTeLucyw5x5uxfxQy\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365211C37937E08000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"2\",\n            \"PreviousTxnID\": \"0F1579B2E692FAFA3A8DCF2FF10EA6614BC9A7F2E6AF2CE6ABE5EB6E576C2FC0\",\n            \"PreviousTxnLgrSeq\": 68964092,\n            \"Sequence\": 67175575,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"1E919F75A82D956940CA2986426F04A0050621E6F0351207925FBD26507887F2\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"18500000000\"\n            },\n            \"TakerPays\": \"92500000\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rMX68jd5whLXjPmrgvjHYKwZHcbQ3HiYuV\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653038D7EA4C68000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"1\",\n            \"PreviousTxnID\": \"5CA941D0A00DC0C8D9AC4E47BC15392F1E65E4DE85B9EF3A33FDF92198735208\",\n            \"PreviousTxnLgrSeq\": 68886178,\n            \"Sequence\": 66684940,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"1E925EBB9521BCB66EC48C5D8C28AC253095ED4DC14B0EDF4104DC4B35AD0D14\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"55100000000\"\n            },\n            \"TakerPays\": \"551000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"98a\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"raentKRvbeEBLCQQUC5vbc8FH6zFuzaNEJ\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"1E9945C7177CFE696EFDB886672F95E72AE88E23C5823E4F2EA646064770048F\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"7785989866\"\n            }\n          },\n          \"PreviousTxnID\": \"3791AAE2422DA08AA5E1AEC6A4C1ACFEB0C757B7F655155D60DC2122C35714A1\",\n          \"PreviousTxnLgrSeq\": 67991591\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rPhzFvrw8hkGkdzQvSRjuHuESLDqnd6xDg\",\n            \"Balance\": \"6750078641\",\n            \"Flags\": 0,\n            \"OwnerCount\": 100,\n            \"Sequence\": 66579287\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"1EBBB74F5C1C807F23550FE73068A521D4931CF9CAF71A7FD668486BD9178753\",\n          \"PreviousFields\": {\n            \"Balance\": \"6000078641\",\n            \"OwnerCount\": 101\n          },\n          \"PreviousTxnID\": \"B30964B6F71044B0F93122AFC56A6324FFBC8FFD8BE0A214495AB13E41D35F28\",\n          \"PreviousTxnLgrSeq\": 69052892\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rGUKHhcBwNpS8WUqpxNsFW6Yhy6ZwEuATq\",\n            \"Balance\": \"121526754\",\n            \"Flags\": 0,\n            \"OwnerCount\": 21,\n            \"Sequence\": 67761610\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"1ECD72AF0B3DAE70F160A6F4752052FAC9D4F68665A9512B7D5BF339A35244A7\",\n          \"PreviousFields\": {\n            \"Balance\": \"60873893\",\n            \"OwnerCount\": 22\n          },\n          \"PreviousTxnID\": \"A93176758759005778DACA00D3A1B1BD5D2C6B8FBD89822B6482599E769729D0\",\n          \"PreviousTxnLgrSeq\": 69044037\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rBMPrNjN4FCHpC3wWAdrorVra71nhSRkuK\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36522386F26DD87DD0\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"1\",\n            \"PreviousTxnID\": \"B247983180E3DB0120413571461DFF28990ED6D79EE7D45BEACEF91CCFA93403\",\n            \"PreviousTxnLgrSeq\": 68895108,\n            \"Sequence\": 67579980,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"1EDF6E16C5D882F0B75CBAFE0E84E68E0B8DE3BC0F699E726A2A347399184B12\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"15253908648.83523\"\n            },\n            \"TakerPays\": \"152539086\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rGFCR192crZ5FBYgZPMAZCeBzTrkqeFXqh\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365207B854FCEA8D40\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"BA4BB119A1FA9FB2DAC355A626C52C5664BBE0F58F9ECB30133765EA181670A7\",\n            \"PreviousTxnLgrSeq\": 69051503,\n            \"Sequence\": 68269307,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"1EE7069AC9BE018001340FA66925A82B80E50628DCB5AF7A508AD7F49A666A37\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"1057712712014134e-4\"\n            },\n            \"TakerPays\": \"229840972\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r4A2sUYHaLAGsDxfwUSv7GXTyYRsoBfQin\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365214401EAA3E7408\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"2\",\n            \"PreviousTxnID\": \"CBD376FFA1853C8F5C2DDF8BD7C17A007169A1A19266F10E348696ABF4DFD83F\",\n            \"PreviousTxnLgrSeq\": 68933255,\n            \"Sequence\": 67453667,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"51589768393.78238\"\n            },\n            \"TakerPays\": \"294061679\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"1EFAC278A8443BF03B204C5669600A31F56656282F7D42859A8000D166AD02AB\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rBnj6UP9thqpSLVq1rEKinhuhmFHmhaC8m\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521239B533B2A000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"13\",\n            \"PreviousTxnID\": \"E0C3A6903ED1DAA2C17AA9706A7B99A3B4BC1A3B5A2F2C936ED1536C94B3C73F\",\n            \"PreviousTxnLgrSeq\": 69013038,\n            \"Sequence\": 67351865,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"1F1155896FCA3377785F40DBB36D1C97CCBF1910FD05BF7797A8163910691ACE\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"5000000000\"\n            },\n            \"TakerPays\": \"25650000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rJ7kEdYrtovE89yxzJ14DgPYCR58odZYVi\",\n            \"Balance\": \"200178747\",\n            \"Flags\": 0,\n            \"OwnerCount\": 58,\n            \"Sequence\": 67712450\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"1F648AC92319E66AB4D0D26296D1A599ACAA47453B54D462B0B2B64C87DF6B53\",\n          \"PreviousFields\": {\n            \"Balance\": \"165496415\",\n            \"OwnerCount\": 59\n          },\n          \"PreviousTxnID\": \"8F3203A157F450A05B1D1655FE4E09A3496B96C5D10C9563102509C87B7920C9\",\n          \"PreviousTxnLgrSeq\": 69057902\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rJQTrHKExfeCjschk5MGwPZuditZ8vdWnD\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521C0C790BBBE1CE\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"5\",\n            \"PreviousTxnID\": \"02E31B69218F1AB1407F0CEC03A2211A26ADE02959713A4C78E97EA490815ACD\",\n            \"PreviousTxnLgrSeq\": 68915809,\n            \"Sequence\": 65794635,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"1F811C76B96AEB6F02644637934930631CCFAD3A0BDF61DC9B4DC6080B976D8B\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"14925373067.5246\"\n            },\n            \"TakerPays\": \"117836020\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rdjYAQLjaChAyFx1sVLn4uy3mrSZy2f24\",\n            \"Balance\": \"726741638\",\n            \"Flags\": 0,\n            \"OwnerCount\": 13,\n            \"Sequence\": 66163705\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"1F9B25892986AA8498C5DB2E32DC72BF80D089FF25B41A8A0700711D4CC71CA2\",\n          \"PreviousFields\": {\n            \"OwnerCount\": 14\n          },\n          \"PreviousTxnID\": \"C0887B0F03DAD920B4FE9A0BCE0BE2017AB18951F2268182CD6AFC1FD14F3DF4\",\n          \"PreviousTxnLgrSeq\": 69049436\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"1\",\n            \"IndexPrevious\": \"1\",\n            \"Owner\": \"rEnJLGTTfay1rUmQqsB9PPMrhNo3sFkT5g\",\n            \"RootIndex\": \"1FA1048EB9886CF62A2D607A75DF617B301B7D483E11DC52645703D18CD0C64F\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"1FA1048EB9886CF62A2D607A75DF617B301B7D483E11DC52645703D18CD0C64F\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rpq5MrSjiQgMj3Rk8Kvf1L3Gzh4xp1CUdZ\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521C07E9BFA2DEB8\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"3\",\n            \"PreviousTxnID\": \"553C23D0D539E8366662E6BC64055F97CBCF29CD2C23D1D7D208BCAB4AD47149\",\n            \"PreviousTxnLgrSeq\": 68900173,\n            \"Sequence\": 67528326,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"1FB02BFD56B3497008148E40A7A335CE1838A4353EB010814CDAD1AAD0F44FE8\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7800000000\"\n            },\n            \"TakerPays\": \"61541999\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rLaYDDZDLBvzSGxKhxDEKovMrQ3CoDXQV\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365218CB5D0DC89D26\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"3\",\n            \"PreviousTxnID\": \"355F3DE4D10B011775D56E4A072FD36B28B32D425D5DBFEA5836BD4EC800786C\",\n            \"PreviousTxnLgrSeq\": 68928764,\n            \"Sequence\": 66614069,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"1FB5FAAE0B551C8F4213B629C4CC35C44C037B1A8499B0331272D97761B31B58\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7785989866\"\n            },\n            \"TakerPays\": \"54338423\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rBzk3TdhfdbidCHeKWfmQ5dy9AuAtGbXeY\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521168861D612556\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"2\",\n            \"PreviousTxnID\": \"9BAEE34021D631EE7FF7825774A33A67EBDCAFF96177FDCC03A1C29551F0DE6F\",\n            \"PreviousTxnLgrSeq\": 68968110,\n            \"Sequence\": 67686290,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"1FD96549A07DDD635D11553F15A59A214B4F651B828970819D04E6A66552EEF1\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"4948149965.676937\"\n            },\n            \"TakerPays\": \"24245934\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rE2zUmDvH8vtBsGPBTdLSJW8rDLNVy8g4V\",\n            \"Balance\": \"132670391\",\n            \"Flags\": 0,\n            \"OwnerCount\": 23,\n            \"Sequence\": 67407795\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"2012C65D1B2539CA69359DB61211B5158E40C0CAD3A0BA9F4ABF16D437FB74E4\",\n          \"PreviousFields\": {\n            \"Balance\": \"61805566\",\n            \"OwnerCount\": 24\n          },\n          \"PreviousTxnID\": \"ED0D9427327AF4A41060266802D47544E003ABB90E3103F3727BE4EE9E12C7B2\",\n          \"PreviousTxnLgrSeq\": 68946094\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r9Bq12mZUmUByGGcnu8tvj2KYAcJQ4zbTL\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520AA87BE977DAAD\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"E318B29740460A2B1A7DD6FF3EAB04324157D50BF72914B035125B8E2820B6B0\",\n            \"PreviousTxnLgrSeq\": 69019282,\n            \"Sequence\": 67987238,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"201BDC0D7B8A03BE8C3ACC73E23C5AEE14C59F3AA4E1DBA24E77AFB8607DBDF5\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"8518114231.41891\"\n            },\n            \"TakerPays\": \"25554342\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rGtD3bMYvE4snnRuTS2n3CBfSLeUMBpSyM\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652096EB55A2F4B0D\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"F1186343C4E0EDD135C610EB81CD4DC9F66A5770082BAE40317A9286A09CB5AA\",\n            \"PreviousTxnLgrSeq\": 69019433,\n            \"Sequence\": 67428673,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"203AD400560ED551B674B42BB6AB34BF7FCDEA84DAADC1CCCCF2023CE4E60CF7\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"14128771526\"\n            },\n            \"TakerPays\": \"37511888\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rA1sVxrZ16rSr1SrxUfsHAR592J2X4yVf\",\n            \"Balance\": \"932040653\",\n            \"Flags\": 0,\n            \"OwnerCount\": 52,\n            \"Sequence\": 67344730\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"203D6B212658AF0984146E9A9A12A6B03A096F92C66EAF0C6ABBF9FDA6B96DC2\",\n          \"PreviousFields\": {\n            \"OwnerCount\": 53\n          },\n          \"PreviousTxnID\": \"DDA0BDD9AF8D1F85A7505011DBA4D7C40A50B08D462921D501C756DBADDCE31F\",\n          \"PreviousTxnLgrSeq\": 68741952\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r9UmfXWeEUHZ9nUzywkmpHorhBLB9uhjpc\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36532386F26FBC61BA\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"a\",\n            \"Sequence\": 66690404,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"70360051902.12952\"\n            },\n            \"TakerPays\": \"7036005190\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"20542AC4CAB42D09ECFB776D1A59B82B7EEAFE982D1A73AF72DB60C7B6E6B384\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"88230878382.67041\"\n            },\n            \"TakerPays\": \"8823087838\"\n          },\n          \"PreviousTxnID\": \"C5F9771EC0ED121C13A668957B2689B8F2F042E7F0217CE74CC373C17B127E62\",\n          \"PreviousTxnLgrSeq\": 68178811\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rUs2aUqfDfjTN9HWdhXzRZZJkHm5rGUUdS\",\n            \"RootIndex\": \"20BB09FF4F59DC8D6D18A8AD0A68096BF2038D23C4F82505AEE9748D5A69F8B6\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"20BB09FF4F59DC8D6D18A8AD0A68096BF2038D23C4F82505AEE9748D5A69F8B6\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rpzdffxTgRvMawxbRSs9c26T1FTEjfgznz\",\n            \"Balance\": \"674597796\",\n            \"Flags\": 0,\n            \"OwnerCount\": 265,\n            \"Sequence\": 67340365\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"20F80D6DE16DA7E2CC163E881D98BB50F5A8ACE1376139B39A787867EEBAE378\",\n          \"PreviousFields\": {\n            \"Balance\": \"569205959\",\n            \"OwnerCount\": 266\n          },\n          \"PreviousTxnID\": \"E0B906F8F0136C2FB4C0964571E0046EB038DD92E4F716D1B96DC84F50B5D243\",\n          \"PreviousTxnLgrSeq\": 69063769\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"3000000000\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"e98\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"r3BA8VZ9TV8U5qgd72SX4Ct2iAgQGwcfZ6\",\n              \"value\": \"1000000000000000e-1\"\n            },\n            \"LowNode\": \"2\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"20F93831CAA830D46C90C51D07D44B313437BDF74B9AC0D4BA5467CF9572242D\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"5000000000\"\n            }\n          },\n          \"PreviousTxnID\": \"5B1D22AC5EFA3009FD8236F7833BF03FBB10438D70DE548DBD8F2F9F864CBEEA\",\n          \"PreviousTxnLgrSeq\": 69009994\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"2\",\n            \"Owner\": \"rGgYjYE7aH7sY7uc9BHpks2NDgVkptYkDh\",\n            \"RootIndex\": \"97A576D21439D455DE5877D950AD921F9783B7F1F98B39CA0A504AB9CD3C6232\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"2107C7AEC5BB7223F87048EDB23A9A6A4C352961DC8EF209D491F2DC96831A93\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"r4KDwn1x7ihYbekn13gYAoV9fFnjwFa28R\",\n            \"RootIndex\": \"2113BFF4DBD2F72BEBF6389F2E0ABB84FBD7EDDB8DD1C4918EB249716AF17618\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"2113BFF4DBD2F72BEBF6389F2E0ABB84FBD7EDDB8DD1C4918EB249716AF17618\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rGhP8A7jhRj3qkYPUR35bRvLCJyxh7xmGq\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521717B72F0A4000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"8\",\n            \"PreviousTxnID\": \"3FFDCA8F6EEDD7688EFD62074C68995E8BCB57B8E29B93E6343F0AB4A8696852\",\n            \"PreviousTxnLgrSeq\": 68900976,\n            \"Sequence\": 66928922,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"211BFE58D57153DB29CDFC3236CC5D29D71B06B70881A9AB46DBF3E31B5BE19A\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"30000000000\"\n            },\n            \"TakerPays\": \"195000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"7\",\n            \"IndexPrevious\": \"5\",\n            \"Owner\": \"rGQaGNPT8u7Wt1RoqJEhBgAPyc9ek5RfCL\",\n            \"RootIndex\": \"7F01E74706516AC43C1C1D253E6887968B43326AE119A44CD7F7F2493FA1840C\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"213002C4D9C91EA46A6B2F0E9077F8B5AC8ABD768BB910617A19F41F6B7C8584\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"raBj3rXVSVdcA66ge5mMyS1iWzMFSyxmB6\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521C6B0C5020E93F\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"a\",\n            \"PreviousTxnID\": \"CFA015DC86218ADB42AB123D69679356615FBC40753D685BBBF3CEFB73D33734\",\n            \"PreviousTxnLgrSeq\": 68901703,\n            \"Sequence\": 66229726,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"21514145F905595196AFE9F182F93AAFD48612905ABBFA26027C67A29DC94868\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"25900393251.8185\"\n            },\n            \"TakerPays\": \"207177245\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r9dgnNCff83iCn4xXUpnLndv4tuCY23b4P\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36522386F26AB38C66\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"85A63376BB3F2BE1CB557E66313EFC554A25733070AA1216A8673DA15EEC3D33\",\n            \"PreviousTxnLgrSeq\": 67983367,\n            \"Sequence\": 67328049,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7785989866\"\n            },\n            \"TakerPays\": \"77859898\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"216A60E1C974ED0E69CDDE56C8674A946F686254C400751D3BA9BA2413805F00\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"b\",\n            \"IndexPrevious\": \"9\",\n            \"Owner\": \"r91eSWyof8C4aiDL2gM1xTdmc9GJy3rTWb\",\n            \"RootIndex\": \"53F876712808EBFE41AD321F65DDB7042D17317BF1FA60284C12A510C70484A8\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"217C9FFF75D95ACB8A3574279FCC6E9054DBB96C64779AD7BE000650D52A8562\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rHNNQAEvRxzWoi2ukxZ371fsjJjxRva3pd\",\n              \"value\": \"1000000000000000e-1\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"ebb\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"21831FD7739747FD7BC4C3D91A9B4104FDB6DB626E172567F44F096BEA9E5798\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-2000000000\"\n            }\n          },\n          \"PreviousTxnID\": \"74664E20BFF89820C7ED324B74D04AC4D03E490FFA9AF71DF7B91E69820D6C0C\",\n          \"PreviousTxnLgrSeq\": 69016490\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rGPEKNaNPYojt4sFbUzodh9SUNxixCwoBC\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365218DE76816D8000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"2\",\n            \"PreviousTxnID\": \"5FB2F64D7E90376D1B16365D4BA2A7D5DD83B62FD9CDF99DED46119F7F873BEB\",\n            \"PreviousTxnLgrSeq\": 68899284,\n            \"Sequence\": 67759693,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"21AE830A858BAEAE7CC3F52B833BBEB4FCB7C481AE9266E652C6E7A6B9B41A7E\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"20000000000\"\n            },\n            \"TakerPays\": \"140000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"24271357729.88059\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"d84\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rwhKYMZGMmf9zeLdZWq4rs31DQeaxn65R2\",\n              \"value\": \"9999999999999990e-1\"\n            },\n            \"LowNode\": \"2\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"21CA87A36E6A2D83122994227199951934F7C06CC1D3B38F40D204EACB922856\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"37971357729.88059\"\n            }\n          },\n          \"PreviousTxnID\": \"277B29CE8CD51C21EDEF0DF622CB891C481FE62B8C6F6D2C027B07FEE90D8259\",\n          \"PreviousTxnLgrSeq\": 68999038\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"1\",\n            \"Owner\": \"rnG1UdmTmDXHaQp1vVp4jsH5ZhJKp97TjH\",\n            \"RootIndex\": \"DC17208D789059BB0F2F9959711B0D0CF09EAB60C60B42D97C413BFA5010EA85\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"21CCA9FE71D970C67F22EE9107CE5C44FB0DB793490D9156675FB2D6BA5B2FA4\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rPfw6T9Nu154bW5Yqyd351rebEphbe3Fhm\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520D252161A9790F\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"2FC6B9CFE2309EE69F4C042584734F75723B57B578D1FECBB93B957088D46D3B\",\n            \"PreviousTxnLgrSeq\": 69018804,\n            \"Sequence\": 67371477,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"220303F74E2F4A42224ECA40E551D50BD6085048F7640B797CFA0C4F702578C4\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"1052737689222326e-3\"\n            },\n            \"TakerPays\": \"3895129450\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"e0b\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"r9dqJno4U42mpcjAymrrUS11q5rAWazGfP\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"LowNode\": \"1\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"221A6703C5EE2DF8D00824E0324D53AFA6F09A4478428B44C313AD1F44A362A9\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"52708748895.93176\"\n            }\n          },\n          \"PreviousTxnID\": \"149752F31AD36FCAB9759917357C376437939341B60BD526646FECD2DF8185D1\",\n          \"PreviousTxnLgrSeq\": 68878412\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"raWLEhWafGEFDsN2GWTFcmPc79x11j92as\",\n            \"Balance\": \"717829115\",\n            \"Flags\": 0,\n            \"OwnerCount\": 329,\n            \"Sequence\": 66825490\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"22355CB1593B5F8371A918E737D52FC00E5ADB25BB38657B191DA76279D5B937\",\n          \"PreviousFields\": {\n            \"OwnerCount\": 330\n          },\n          \"PreviousTxnID\": \"28885DFD8BAB24243BC38E0427176959BD34111EF362F01B45AC7158B40C7B5B\",\n          \"PreviousTxnLgrSeq\": 69063617\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"a\",\n            \"Owner\": \"rJxQUBBc7qcHrGcjrb265KwXeZrVio5Eri\",\n            \"RootIndex\": \"7A92326C2120E27B82D8A465FCDD494708A1307E0F80D93839A3291D4DB2278B\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"2256460DDA0264BACE893EB194ACB181EDAC9FAAC980FE8A21F1B184D1648D0C\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rfe2f8LznaFRfwdoiZGPxej6zbdYAYe4Rq\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652138A388A43C000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"6\",\n            \"PreviousTxnID\": \"C6704763C2CCD8A331CE29653C244B792E3F7FE4B2CFA6097DDB853982D0810A\",\n            \"PreviousTxnLgrSeq\": 69015349,\n            \"Sequence\": 66686310,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"226EF34E611B81BC3C1A5188C3A9B0905FCBCFCE5FE4969CF7C253E9C905E785\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"TakerPays\": \"550000000\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r98DGNQEGR9x2bhRVBbuiHAqxq2aDD6pKa\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652166B5DCCC05505\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"8\",\n            \"PreviousTxnID\": \"5FA843247C57F5B8B6337CEAEB4C23DD34008B589E5EDA2C4DF3918A3D3431B5\",\n            \"PreviousTxnLgrSeq\": 68943466,\n            \"Sequence\": 67202687,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"4951685744427229e-4\"\n            },\n            \"TakerPays\": \"3124761338\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"2274EDB26DA4DDE1256853C1F3243319E28EFF4BAEB33FA54934EF2CFC9FCAE0\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"8203834320333173e-4\"\n            },\n            \"TakerPays\": \"5177029729\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"21022172638.2\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"318\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rsF1oN5xbuJQ3wPD87jjDvEde3VKwSrAue\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"LowNode\": \"4\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"22CAE9D0152D6447918705AB84A667BA749671F8506B52C9D26D7AD42838281F\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"46715939196\"\n            }\n          },\n          \"PreviousTxnID\": \"5AD9BB0684FD03207D2D58C2355D4E49409653D72D7F5E539186ACE47255D28B\",\n          \"PreviousTxnLgrSeq\": 68005716\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r3oDrfWCL4zZRGoUNRd8Ywu9PJWFZXc764\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652082F79CD900000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"4\",\n            \"PreviousTxnID\": \"09F5C119C383119EF339B905DCE8A6D42874FBFDE5A4A5FA58C228381848D4D6\",\n            \"PreviousTxnLgrSeq\": 69054951,\n            \"Sequence\": 67440528,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"22F075132AD3FC12E4CEFBEAEA0D627EE379812EA4307FA86579A8FE67299F65\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"TakerPays\": \"230400000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"3\",\n            \"Owner\": \"rBBS1EhebBUcDs7gDa4ZuoTfmBwsRGqycY\",\n            \"RootIndex\": \"B3F6EBD353C36298281EB4A734AB01C585D6DBEAA1D8FA66E5B3F66F645545E1\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"23081AB18979CF365605C89F4D45ECAF1A09A9F3868EFDBEFEB0408492F30001\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"5\",\n            \"IndexPrevious\": \"3\",\n            \"Owner\": \"rJqAwcpzstjreWoBc7wGXRtWoxSeXTUzf9\",\n            \"RootIndex\": \"C7E3DBF1D4EF2F55A08C767A73BD0D4866547EAC0AB554E724F31AA9A8BE1C22\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"2330602EE88593C5C80AFD48FAC37E1A651A822FCD89B94C9CAC0773B1E61D98\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"1701415593270816e-4\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"de6\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rnYFf4DWQj3Eip1R5mVvocQxtcBcvTvRo7\",\n              \"value\": \"9999999999999990e-1\"\n            },\n            \"LowNode\": \"a\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"2395D3DEC3A9E25F94B4CD2B47BAF09F50E9A55EE005B3EE898BCC58E669E4F5\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"2501415593270816e-4\"\n            }\n          },\n          \"PreviousTxnID\": \"5681245E9E203AE3274E8F9FFA41ACC87101654B550E2AE83A004BCFC0367523\",\n          \"PreviousTxnLgrSeq\": 69000049\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r33yXJH6HkJc128VKpjvrcdC89M4zDaP9f\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521BACF6B65EDA6D\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"31C9FBB6C153528AB070425F85C65412620E18838F60E8189E0F1DB8E31F268F\",\n            \"PreviousTxnLgrSeq\": 68898709,\n            \"Sequence\": 67761592,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"239F95F164783976BDE5F43E1B0CE0442D93639454E745DDD6FACA0310D7B8DD\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7785989866\"\n            },\n            \"TakerPays\": \"60652861\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rjD7dFqNXSEK4juN3ntGwbYn1P3xjepVf\",\n            \"RootIndex\": \"3B310A5F77E2506C0F0711092668E84A10CB5ED5E61B6F886D3C83F65DE008B4\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"23A06EF5F4AC1BC12BF3ED8411C9F44BB9DCFFCDC431DA2CC76B5122F987C50F\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rMhxYNNMAgwGdSciDqnCb8tVqJZ22VCCL\",\n            \"RootIndex\": \"23A7042FFFEB5E5D799813F35CCE4011A4D10DBAA5C03A22D8E9C05EA1C9E601\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"23A7042FFFEB5E5D799813F35CCE4011A4D10DBAA5C03A22D8E9C05EA1C9E601\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"70360051902.12952\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"1e\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"r9UmfXWeEUHZ9nUzywkmpHorhBLB9uhjpc\",\n              \"value\": \"1000000000000000\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"23AEF96D519B25ADD46D46FE5637528E3954BC84AA786E1AFC28AD322A4B1253\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"88230878382.67041\"\n            }\n          },\n          \"PreviousTxnID\": \"76A1E30FF669BD2CD8AFD2DCC1ABE89D4328116CA85E22CA6852A7C8489B0566\",\n          \"PreviousTxnLgrSeq\": 68117921\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rwFqpfxexbDa1fUuG87ceDdbe1JnugjWUV\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36530E35FA929C930B\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"6\",\n            \"PreviousTxnID\": \"20C8EA979F36EF87A916CC728B80F514B2645F7BAD49ED5E95F869A95C1E4F28\",\n            \"PreviousTxnLgrSeq\": 68152620,\n            \"Sequence\": 66775772,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"23B441085CE429F2D210CACFF030B98B77C2526B2640076168A9D0EDBF9EF9B6\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7785989866\"\n            },\n            \"TakerPays\": \"311439594\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"2\",\n            \"Owner\": \"rENubezZP8CRwDNdupJB2J8D1GxukZ7hjv\",\n            \"RootIndex\": \"FDAAA7A62195393D5AD21177C835075AF55B81B163395FE07D23F2766896845F\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"23CAC39F4C167685A431EFB332C4CBAC6B1352C6686FE840833CE266ACFECF0B\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rKVDELWvNMyoxDQenRjpToSvsLL7RwR62h\",\n            \"Balance\": \"36674391\",\n            \"Flags\": 0,\n            \"OwnerCount\": 5,\n            \"Sequence\": 68633127\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"2411698F2C1906FDB08B568905A601A7A6A6341F4EC1ABA3ADF10CC29AE125A2\",\n          \"PreviousFields\": {\n            \"Balance\": \"36599604\",\n            \"OwnerCount\": 6\n          },\n          \"PreviousTxnID\": \"8E2C83F5F98179CA712548909AFC733AFEC622A757083D0CFA036F8C418458D6\",\n          \"PreviousTxnLgrSeq\": 69015670\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"93288847549.8484\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"e75\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rp9kJTnnfXrjwVFxGRWfjUbJdmxkGP4cif\",\n              \"value\": \"9999999999999000e-3\"\n            },\n            \"LowNode\": \"4\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"2479F46EE5E081EAAD1F009667C84B94EDE0DCE20197ECA157D356327F8DF797\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"2500000002327955e-4\"\n            }\n          },\n          \"PreviousTxnID\": \"3383089ECC13A35204D62969EC7518EBC065646542A5041B4C8BF58C4A739BE1\",\n          \"PreviousTxnLgrSeq\": 69034815\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"raWLEhWafGEFDsN2GWTFcmPc79x11j92as\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521CC6E8361B3181\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"10\",\n            \"PreviousTxnID\": \"5DFC897676597741F6964108867935D9A5189E740F25171DB2B1B39D365F46F7\",\n            \"PreviousTxnLgrSeq\": 68199860,\n            \"Sequence\": 66824794,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"62287918963\"\n            },\n            \"TakerPays\": \"504532143\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"24C3BF511AECC11CEC65C609E9C816E83D9A4F05C406147EB1DC9781555C1A07\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"e70\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rh2ExLW6MJMJdoX7386pzfkNbhHSjqVWtC\",\n              \"value\": \"1000000000000000e-1\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"24CB7E518452547AABAE37643501B1B0D5FE8CB2B7AD1263F935179C4158E85A\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"21000000128.28504\"\n            }\n          },\n          \"PreviousTxnID\": \"D38AF4801A76F29A2932D6C143E27494BED7645D77D4C0827D81C873E6E4CC95\",\n          \"PreviousTxnLgrSeq\": 68633549\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rK3ctAQ3dxZmdQZ7JJt2PZBU7GZPwAkK1P\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365217CD9D4D6AE4CB\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"7\",\n            \"PreviousTxnID\": \"259F1AE7686B6A6674E8B9A2F5CF5954277604DFB6089FC43F184A7DF4933D85\",\n            \"PreviousTxnLgrSeq\": 68915033,\n            \"Sequence\": 67101499,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"25292B3277D5BF53030B60A594007A30054229111EAFC6C55FF9D16A988F1307\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"15571979802\"\n            },\n            \"TakerPays\": \"104332264\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rwsVYq1xyweADXhtBLLfr2X9FL57DnGTk3\",\n            \"RootIndex\": \"252DEB1A1BEAE012386BAA026026C4B05220FDE1161D1D7715C78D80B1EC77B3\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"252DEB1A1BEAE012386BAA026026C4B05220FDE1161D1D7715C78D80B1EC77B3\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"5\",\n            \"IndexPrevious\": \"3\",\n            \"Owner\": \"rLkaQPNxjeDmFBqhQ2GszmgT4wxykPCP5K\",\n            \"RootIndex\": \"5B7EA164867C8884CBC9759820ED1BB7DD3E72985A9C8EC92B75B9132C6A7B6F\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"2552C6166706B60B262D31BB58B5D6FB1957F438239A99F02926B9CE84A12501\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rGtD3bMYvE4snnRuTS2n3CBfSLeUMBpSyM\",\n            \"Balance\": \"144388070\",\n            \"Flags\": 0,\n            \"OwnerCount\": 14,\n            \"Sequence\": 67428708\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"257E20958695ECBE04642E455D58A416E990E0197F9F9875C1F349CB85131B53\",\n          \"PreviousFields\": {\n            \"Balance\": \"106876182\",\n            \"OwnerCount\": 15\n          },\n          \"PreviousTxnID\": \"E3F43F07AD69032914ABF169395FBC5615466324A8C7E89021EBF7424D5D9FEF\",\n          \"PreviousTxnLgrSeq\": 69062556\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rKso7KmktCCYBfe79sNAFnfKffvansBBRz\",\n            \"Balance\": \"780387977\",\n            \"Flags\": 0,\n            \"OwnerCount\": 187,\n            \"Sequence\": 67328616\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"25A5E744BD7DF95F174696A0E29964C2D9919C7547783F404C76B770873FBC6A\",\n          \"PreviousFields\": {\n            \"Balance\": \"480387977\",\n            \"OwnerCount\": 191\n          },\n          \"PreviousTxnID\": \"0E8D46F16F7AB53C1F9E49396C027C1C083A41F65DD4CD76ACB31356AA3194CE\",\n          \"PreviousTxnLgrSeq\": 69063224\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"3\",\n            \"IndexPrevious\": \"1\",\n            \"Owner\": \"rPBCCKXYaB9eBeVKenvGeGKywHUVHFQmSS\",\n            \"RootIndex\": \"C5871FAAA3D662ABE72DF923E70F1B30B4F0582F0F1F6374B7BC42CEFFABD22A\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"25AE6C5D3394079D8E8021F4C33905248EA574B78C04CAD8E7B59D00EC51F596\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"70000000000.5145\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"e8e\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"r3yLxRMK4K5z8UzzYC9tQASyFZ7p6EQDwz\",\n              \"value\": \"9999610698224570e-1\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"25F554F7441B712F3CD34C55F9853CD10EA32A8BE33330C64C73C5B3B54C1583\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"2900000000005145e-4\"\n            }\n          },\n          \"PreviousTxnID\": \"48C140CC2CA353858C4C311A5D146514E8F131DD62F00433B7F510EFA6DD7D2D\",\n          \"PreviousTxnLgrSeq\": 69044256\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"ee7\",\n            \"IndexPrevious\": \"ee5\",\n            \"Owner\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n            \"RootIndex\": \"21631664938D4CC6734C2E4172D601193743662C234F1CDDC89B7502A0B62C68\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"26016DE6CF1ACFCC0EBD508CC7C3FB404C3B3ABC7C4BCBA5233A349780D74439\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rNNzeaYd4nSmhTirshmVBdK1zfHApVy7Hy\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652138A3888E0ECCC\",\n            \"BookNode\": \"0\",\n            \"Flags\": 0,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"C14F090175900E0371FA068CFC8BF422D4F398D74A993CA2915B1DAD7362F2AA\",\n            \"PreviousTxnLgrSeq\": 68942432,\n            \"Sequence\": 67492521,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"15000717154.33161\"\n            },\n            \"TakerPays\": \"82503944\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"2605B6CF1EBC7ACDBA20AD52BEDD3F609413EB20CDC373E24F41789A6548AC4F\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rfJYknVqAa2EmEKkKsR2CjJVBKedFU9DNZ\",\n            \"Balance\": \"1575120860\",\n            \"Flags\": 0,\n            \"OwnerCount\": 39,\n            \"Sequence\": 65823004\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"2608DA4EFDC2D0C82173CAD63F83D782685345B586B1AB168DFB609723D2B26F\",\n          \"PreviousFields\": {\n            \"Balance\": \"1107961469\",\n            \"OwnerCount\": 40\n          },\n          \"PreviousTxnID\": \"0D6A7E9CF6539057446CAAAEB1811AAD97AFD04279B517FD83F3355F241F31A7\",\n          \"PreviousTxnLgrSeq\": 69047917\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"e84\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rfTkTBbkD6NFaNLprSDfnC3CJEtNwgqYwy\",\n              \"value\": \"9999610698224564e-1\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"2609AF69C26128D738F60B75F3444B42E3EE8DCA705B6F0841276D6A92A04931\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"20188409096.34552\"\n            }\n          },\n          \"PreviousTxnID\": \"36DAE2626D68C0420659901BB069D4BC875305DE83A499A275C8AC0DBD65C833\",\n          \"PreviousTxnLgrSeq\": 68898367\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"3\",\n            \"IndexPrevious\": \"1\",\n            \"Owner\": \"rQKYm7pcdeXMPEgGTRUAAuoziWwhhW3DC2\",\n            \"RootIndex\": \"43CD72508A29365217D82C64770360A5A7EF5D73235637EA39360BBC99FFADCF\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"2621C83F3178A230D4BD2F5874D37A55B79BFA574233D7408B34430A7F993017\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"2\",\n            \"Owner\": \"rpBHrwSGdQm3hE3f6988mSgV9LAzuBsx9A\",\n            \"RootIndex\": \"0963FCEE10CDDADE279639F4A6B9CBF350D2FF4DEE0BE1A3FDDD4EBA33E279E8\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"2625525A0FF17FE2CB9AE08418DC1DF86089D5AA5DFE08DD45A34D24BE1A8F23\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"ec7\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"raANwNJ9aqncwhGT1Eh9mksqTvAMm3WZG3\",\n              \"value\": \"9999610698104599e-1\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"2648819C6BEF4FF12F48663826D717ACF7FAAE43E919BF3ED96F1F32D01D6E74\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"4500000000\"\n            }\n          },\n          \"PreviousTxnID\": \"17EEA99EF212BDA2A59F02E22D63EE95BD21430EFF033DFEE530994E5A9092B3\",\n          \"PreviousTxnLgrSeq\": 68872215\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rDWTpV5omq7rh5Wnro4noWmWFEFcRx17ma\",\n            \"Balance\": \"399761714\",\n            \"Flags\": 0,\n            \"OwnerCount\": 22,\n            \"Sequence\": 68039701\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"2658AB780CF7DD69DAC2D903928947353BC057D30DDCBB12B2AD6B1A95DFF9AD\",\n          \"PreviousFields\": {\n            \"Balance\": \"135373146\",\n            \"OwnerCount\": 23\n          },\n          \"PreviousTxnID\": \"F0AFC95BE0356DEA4FFB536D9DC986DAE496D4D6646A93857E51C0F50889C3D2\",\n          \"PreviousTxnLgrSeq\": 69060223\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rhASEa6rnfc5WHFbd2ZdExhwyfBu27pitp\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365211C37937E08000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"3\",\n            \"PreviousTxnID\": \"994EB136D861D0CD5E6EB0BBEBEA1D90693F2E52B7F7A828E396B0E4DB70369B\",\n            \"PreviousTxnLgrSeq\": 69048862,\n            \"Sequence\": 67430937,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"2659D3EDECDEBBA318041413BD7849E75A2797BB172E42BF693F57A376B8E1D0\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"2225000000\"\n            },\n            \"TakerPays\": \"11125000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"razceqmpdpjLd5o52i1GiaZJhmB8SEbfCa\",\n            \"Balance\": \"38645586617\",\n            \"Flags\": 0,\n            \"MessageKey\": \"020000000000000000000000004C72BFC9C19A94868D26BAD1567078C708DF8888\",\n            \"OwnerCount\": 377,\n            \"Sequence\": 2015\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"26A8898D814259251A332134B9F84B57E5174DDC3221547067BED9AA55C8CA4B\",\n          \"PreviousFields\": {\n            \"Balance\": \"2645586617\",\n            \"OwnerCount\": 384\n          },\n          \"PreviousTxnID\": \"A14D0A8AE79A1C01438C21136603535AA8C25F57926C3097FA75362BC65F4AE0\",\n          \"PreviousTxnLgrSeq\": 69059646\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rBE6UN87gwvyAuud7dSn2d6zdBUWCjgqRG\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521DFC22A1E78000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"1\",\n            \"PreviousTxnID\": \"D3FA9F052F9A7E50E297D0E52AD2B6E7F053CDE8F30233A59F67C199DFDA8C3E\",\n            \"PreviousTxnLgrSeq\": 68901785,\n            \"Sequence\": 67882079,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"26AC27CD1C02571C1E3883A918BE447E7CE2DA57120945270AF39F4A9E1E779D\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"27951950000\"\n            },\n            \"TakerPays\": \"235914458\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-9223344420.93548\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rGEVM6YhWfikBZiXgWRdcUk7XpAyAnUHZw\",\n              \"value\": \"1000000000000000e-1\"\n            },\n            \"HighNode\": \"5\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"ea2\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"26B16ACAA4EEF1ED67057331BAC817E02A9DD64A15A155B0A56E02419921111B\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-13345587741.93548\"\n            }\n          },\n          \"PreviousTxnID\": \"203AFDFD5E0BEBA65E6C7D03037AE3D3DCDEA4455709C752BFBC2E5A20AD9A06\",\n          \"PreviousTxnLgrSeq\": 69049470\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"884\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"r36sopaDwMDWZS4XNkCM27TNVkdywisWY4\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"26B559FAB7D30EFFE1CB70D26859D40F1CE9ECEAF68EDA2DE959EFF9F5E599E3\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"85645888526\"\n            }\n          },\n          \"PreviousTxnID\": \"D50405B61E4B332185CB559B4D036D87A4C6262A9B7B4D3CC4BB892911EE5390\",\n          \"PreviousTxnLgrSeq\": 68794962\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rHQELpjMXco8drUJVmfUq89kCZbDdWBr3A\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365218AD59A69C2000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"4\",\n            \"PreviousTxnID\": \"D519192488D5942B332D6EC0FF7F52020DA347762821C57AFA845EE7290D9631\",\n            \"PreviousTxnLgrSeq\": 68900006,\n            \"Sequence\": 67416808,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"26BB45746F8856EC3FBC16EF55EBB58428A946BC3D24FC6622B2375802D5B7B3\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"2000000000\"\n            },\n            \"TakerPays\": \"13892000\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r9vQtUmSgHmDFpc6K7BKLj5JvGBEbvwP9Q\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521BB60F04E2021E\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"3\",\n            \"PreviousTxnID\": \"1C64EE7C01D76CDE52971D42CA14CCF409729927FB8A4179913BB1BD7F23A6A1\",\n            \"PreviousTxnLgrSeq\": 68899243,\n            \"Sequence\": 67374023,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"26C0870AFC229519A54C281E690C4C792CD70202DB56535B05C68B1FD0A40B1E\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"40051845672.48726\"\n            },\n            \"TakerPays\": \"312404396\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rUrv5jwSUrmeGJa5Uj6DB3mBGojLFsRg7L\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365304625103A6F78E\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"12\",\n            \"PreviousTxnID\": \"F45720AE21C4ED7BC3C306A18675D00256DAA1975EC5C630DB0EB92FC6390175\",\n            \"PreviousTxnLgrSeq\": 69051376,\n            \"Sequence\": 66532153,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"26E530C4792D7E44EBC1FF9A03933765504C2DEB24E244AA0D235A91A973832D\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"1919157614683850e-3\"\n            },\n            \"TakerPays\": \"23682404965\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rpFYhEoT7AeTuaAZYwU25Gjn3i2VygsMnP\",\n            \"Balance\": \"268000000\",\n            \"Flags\": 0,\n            \"OwnerCount\": 102,\n            \"Sequence\": 67371922\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"26FBFF4686D5B358E3246D850FF8DC53C0EED54C5AE361291FD5EDC6162AEE99\",\n          \"PreviousFields\": {\n            \"Balance\": \"218000000\",\n            \"OwnerCount\": 103\n          },\n          \"PreviousTxnID\": \"96EA1450140558153915443528B63537B0CD1B86763F2BD0E3EA18AFF67E9E8E\",\n          \"PreviousTxnLgrSeq\": 69054481\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"1\",\n            \"IndexPrevious\": \"1\",\n            \"Owner\": \"r3NPSAnK3n8wx7pdeCje64yvei4xLBrgd\",\n            \"RootIndex\": \"2703769F01574F9679F0607476A79F30CD013D2BE5476B2B99745284B6D996C7\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"2703769F01574F9679F0607476A79F30CD013D2BE5476B2B99745284B6D996C7\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rMQGzm5niy3VzeWEqokwb28toV137fbiYJ\",\n              \"value\": \"9999922137971320e-1\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"dbe\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"2721148850AD777A7D1C8B8EAA4BCF611FF265218BE84F2CF0F822373CD8D872\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-9316406834.806797\"\n            }\n          },\n          \"PreviousTxnID\": \"2C9A60217C753BE6F8BE2F5745931B80D0A62E88CC2B88B765125971E37A5FE5\",\n          \"PreviousTxnLgrSeq\": 68897459\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"47372755454.80939\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"a5d\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rxAPteBXbVsr6qvwqA54qERcdkojkjdmC\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"LowNode\": \"2\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"276ADDC1E2826C8C3FDD232678DEED600A0E91A375657E8D2DC0032DA6B40D17\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"67372755454.80939\"\n            }\n          },\n          \"PreviousTxnID\": \"34EEC2B5C7963F9EFA5DBA466DF7CF40A6F9C8601DCD9673ADBE2E91B30AD40D\",\n          \"PreviousTxnLgrSeq\": 69034828\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"d1\",\n            \"Owner\": \"rExSJvWnn93G5NfnzZ3YKuPgpQnr8wBsrE\",\n            \"RootIndex\": \"D981BA49AC1C7F251814582EC50FF0706B329412FF323379321FC9FA4657E836\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"276EA0610087B36C3D6CC79BC1DC6F1E0070E0AA77E29A6F47D8CE8D5EADBD20\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"12\",\n            \"IndexPrevious\": \"10\",\n            \"Owner\": \"raKckiVpb6sE7hq7y1VGpF9YdGAVSbJJLu\",\n            \"RootIndex\": \"C664ADC4725AFCC1EDF164434D29C14FAF0DCC4764916ABAC8828F8918BFA17F\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"27725CDBDFC98E0127D8F11F0E597A559D270EFB339B911E1EC03423C70BEC50\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rBHSrXq2LzGniUp4zypCRk1isLw1ywLPHv\",\n            \"Balance\": \"27809718651\",\n            \"Flags\": 0,\n            \"OwnerCount\": 7,\n            \"Sequence\": 68976418\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"27935817A68BC6D4AB013E255D1896AA2A7A77734BE9A896484B8A45F1179A8D\",\n          \"PreviousFields\": {\n            \"Balance\": \"134718651\",\n            \"OwnerCount\": 11\n          },\n          \"PreviousTxnID\": \"242CD55427BF531C2721635F236B13C8D295664C8890E1E20427B71FE1353246\",\n          \"PreviousTxnLgrSeq\": 68998561\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rJd8ipxtKA6u9iXpvCJYQrsES2Q4FsySHR\",\n            \"Balance\": \"88368906\",\n            \"Flags\": 0,\n            \"OwnerCount\": 22,\n            \"Sequence\": 68739610\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"27CE1342A600FC2183F6870845FAA28517A78A5B1CDD52DC2142958D1334D8CE\",\n          \"PreviousFields\": {\n            \"Balance\": \"56368906\",\n            \"OwnerCount\": 23\n          },\n          \"PreviousTxnID\": \"821BA9E33BCA17910B8A5BCFE292E411180D468D8EEA325B0B5581EDCBEFEC8A\",\n          \"PreviousTxnLgrSeq\": 69046062\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-1187859898660000e-4\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rMRX7LEEzj9s3Hm3fysfBXnkNzAaRbDawT\",\n              \"value\": \"1000000000000000\"\n            },\n            \"HighNode\": \"6\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"5bf\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"27D3C31049E45B52D0867E9C86C8F5D56830E49049EE6E31AB719331273747EC\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-1287859898660000e-4\"\n            }\n          },\n          \"PreviousTxnID\": \"34EEC2B5C7963F9EFA5DBA466DF7CF40A6F9C8601DCD9673ADBE2E91B30AD40D\",\n          \"PreviousTxnLgrSeq\": 69034828\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"raZJeAMN8WHNBRrVCc5RXYfD7mAuKctiwE\",\n            \"RootIndex\": \"6532EE3BDD8C440E04066C79B503CADF8E836685E8F7B98B907C47500F9841AC\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"27E01FFD5AF4DB2D5A9A27D58B710ADE9637B812EC1B611056C627B2F9748E73\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"ra4q61eeGoZx4cAJKPHQdyukvugrB2jhgW\",\n            \"Balance\": \"18277239\",\n            \"Flags\": 0,\n            \"OwnerCount\": 2,\n            \"Sequence\": 68759781\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"27EBC60053D366042F7603D7A970B2009FB2866A43527EC618D05CC7A78A133D\",\n          \"PreviousFields\": {\n            \"Balance\": \"17959372\",\n            \"OwnerCount\": 3\n          },\n          \"PreviousTxnID\": \"B3C8DA1903D7796F6952252A120299058DC4A1CE9E7105657A7DAE0DE3805E43\",\n          \"PreviousTxnLgrSeq\": 68981171\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rHyR27TRJ73Eu8bqe5wBxX64hJ9Xf2c5XQ\",\n            \"Balance\": \"276296308\",\n            \"Flags\": 0,\n            \"OwnerCount\": 40,\n            \"Sequence\": 68895671\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"27ECD3E477998CAA7A2CFFA073CE12A57A2EC754DACDC13ACD3F726EA576D1BB\",\n          \"PreviousFields\": {\n            \"Balance\": \"166296309\",\n            \"OwnerCount\": 41\n          },\n          \"PreviousTxnID\": \"A1A42F0DCA18CE78BE8CBA904E4B99514A38E1DC984C0AE74B07A09D54806A94\",\n          \"PreviousTxnLgrSeq\": 69060028\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rwJrcmU1fHLmHgWcKC1D4bZQNkUGJs165m\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521F9E80B451ED76\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"5\",\n            \"PreviousTxnID\": \"57564CF96225E27069DBD85717B476991BCBF8E1BF0AB2D701935FA35F4C68BF\",\n            \"PreviousTxnLgrSeq\": 68868297,\n            \"Sequence\": 66648096,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7785989866\"\n            },\n            \"TakerPays\": \"69295309\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"27EE732CEE031AB9592AFF0F765763EFC78F6078B0F5311A3D79537847E6257B\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"r87fNs5eU59kPhMXgYHVziF6Q5icW4WHW\",\n            \"RootIndex\": \"281B896F3DEA2AFCB3D804F94F8B12F36DFD023CD84CC13A21040C0BA2070F09\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"281B896F3DEA2AFCB3D804F94F8B12F36DFD023CD84CC13A21040C0BA2070F09\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rBHSrXq2LzGniUp4zypCRk1isLw1ywLPHv\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521C6BF526340000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 0,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"199D3BBB23E73F015D1C4560B4A19DCF5548E3D756F38F16B9CB8AA410396604\",\n            \"PreviousTxnLgrSeq\": 68998238,\n            \"Sequence\": 68976408,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"2833DFE4CFEB9A43292611AD2C27C861EA6243839563448965FCCAEDE9C29B2C\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"2500000000000000e-4\"\n            },\n            \"TakerPays\": \"2000000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rfn3KpY6HS6aE1vviRjhHfNn3BfuSrhmzv\",\n            \"Balance\": \"71559160\",\n            \"Flags\": 0,\n            \"OwnerCount\": 9,\n            \"Sequence\": 68449368\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"2835B3956AC9E8B85C2281A0EA921722E898F363AD4ED2B7337FCFBFFA9E3384\",\n          \"PreviousFields\": {\n            \"Balance\": \"44103157\",\n            \"OwnerCount\": 10\n          },\n          \"PreviousTxnID\": \"99BFD48B77283E8C0FDFDD597F87F07EDEB4AC883C75469CB8A23DB9B165E5A7\",\n          \"PreviousTxnLgrSeq\": 69050455\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"2\",\n            \"Owner\": \"rNVK54FFqQPyc5jFNayw1WrW2m54SRAMWv\",\n            \"RootIndex\": \"9E1557F1ABDEDF78D8A81A0E0D87E8974EB4F1D3CD2A37D606DA2EC271A83C2C\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"283CFDDA3C9401C7AE85D93CF4F6E671AB5BCDE802463FCDE679443D5D158142\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rMAWeQvUd5zQpyY9hSdaUMRMTQHcgAXvj5\",\n            \"RootIndex\": \"DF574BF4AF4B10F42E5F385FF14CFF59A61AA0C75C1EE688668E5A49AB2836D6\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"289B627B35964B46F2C4D8C3B542D3D9783EDCC93D9AFEB34C1473AA03B56957\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"5\",\n            \"IndexPrevious\": \"3\",\n            \"Owner\": \"rnB62vv6d8dQV13A3nHQQ7LEGy8DEWkLuG\",\n            \"RootIndex\": \"CABB5C6F0F0DFD993B47105A363276F87CC9E63DFAEB06D01FF2B1C2E237CD0F\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"28BB070FA902B21BBD45060DF79EE6E02418BEF25303162461DF9AE0EEF88C89\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rLC5cTyVFPDTN4nuTcM9F2MAzhbkS7a78Q\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521BACF6B65EDA6D\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"20338B3EBA8302188BB1D078BD7D9FA3ED4ACDFA3DB43E9382C1FBC997C82EF2\",\n            \"PreviousTxnLgrSeq\": 68898394,\n            \"Sequence\": 67761537,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"28ED6AF797986BEA1E96EFD03E7EE52F6C520FCFA12F55BC7C1948F7B8E7B3F4\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7785989866\"\n            },\n            \"TakerPays\": \"60652861\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rpq5MrSjiQgMj3Rk8Kvf1L3Gzh4xp1CUdZ\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365304879B1216B000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"3\",\n            \"PreviousTxnID\": \"B3013F07118AFA88E47774F30AC064BB5D3C1C08AAE6AF34C06D188CEB8D5BCF\",\n            \"PreviousTxnLgrSeq\": 68889001,\n            \"Sequence\": 67528317,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"2934CC65BA5DB855C31E6C03A4223E89683FBDD99DC295218FFF7E53EAE2898E\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7800000000\"\n            },\n            \"TakerPays\": \"99450000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rHAYfZTYakQQ5NJCP8BD21nrQeQmDyst5a\",\n            \"Balance\": \"438222345\",\n            \"Flags\": 0,\n            \"OwnerCount\": 113,\n            \"Sequence\": 66939998\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"295684EC1191BC986E034EAF5F6CD80BCB97B78B6EF29EC17A555FF0D33E917F\",\n          \"PreviousFields\": {\n            \"Balance\": \"238222346\",\n            \"OwnerCount\": 114\n          },\n          \"PreviousTxnID\": \"AF08C551478F6C2D594388D4C0D4394D7B56C5B7BEF7284EFA50862188A65EA0\",\n          \"PreviousTxnLgrSeq\": 69028532\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rzNhpkxVUc86h9CJyB1qssHYenzkVpyn7\",\n            \"Balance\": \"351979290\",\n            \"Flags\": 0,\n            \"OwnerCount\": 59,\n            \"Sequence\": 66818389\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"295DED70A140326C7045354A716BC2AAF6373A6870669CDDB2B7D7FA332CA163\",\n          \"PreviousFields\": {\n            \"Balance\": \"219979291\",\n            \"OwnerCount\": 61\n          },\n          \"PreviousTxnID\": \"9FD4675F9FDC4098F449CD01A8658EB76F6F312BED860199E3452601E8599098\",\n          \"PreviousTxnLgrSeq\": 69063398\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rDjnNyWymW4pUzukDcEtmySixuXR4RLsKV\",\n            \"Balance\": \"133140574\",\n            \"Flags\": 0,\n            \"OwnerCount\": 44,\n            \"Sequence\": 67708022\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"29B0BB1C91B59D76FEDCAF704A2E76236C9FC674836EA77A96A8A3462EC74D12\",\n          \"PreviousFields\": {\n            \"OwnerCount\": 45\n          },\n          \"PreviousTxnID\": \"EDB955273533F7A539AC11A1B11E520AC2B7745592161B2DE0B618C12425DA21\",\n          \"PreviousTxnLgrSeq\": 69018269\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rGQaGNPT8u7Wt1RoqJEhBgAPyc9ek5RfCL\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520775F05A074000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"7\",\n            \"PreviousTxnID\": \"BDB8B6155CA0720553E3723134CC1A88C0F2DFE8F9D0FB6989711A3B42A45845\",\n            \"PreviousTxnLgrSeq\": 69053340,\n            \"Sequence\": 65975096,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"2A65FBF06799E24E5A1A82AE4A3CFF3411C609F117B28B79303839FEC6C89EAC\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"10000000000\"\n            },\n            \"TakerPays\": \"21000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"d0e\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rwCDD5H9MDWdQE4y15hzipJWXjZpoZWPgL\",\n              \"value\": \"1000000000000000e-1\"\n            },\n            \"LowNode\": \"4\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"2A8498F88030EB5F98C104210A925448C4AE5CD9C9E52788C44CBEE559CDC7F3\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"2000000000000003e-4\"\n            }\n          },\n          \"PreviousTxnID\": \"EFB15A64951D16E6E2FFFBB7AD70FB36A546F3F08C72B9B55FEC84E985F495A7\",\n          \"PreviousTxnLgrSeq\": 68878357\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"5\",\n            \"Owner\": \"rfh8snfXUdwqc25vUfwxJxJnVM1n1dJvoh\",\n            \"RootIndex\": \"CE1ED6CA4B62FD462ABD4857F454A2159B022F143AE65E805D818C117F7D1670\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"2A908EF7C95D71DFD33E5121BBDDCD3108F75F2D412CE8D8F638C3C6B825298F\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rUqaUzkL9NU9wp7BReWWPJQddAErF45hkE\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36532386F26F4B69DB\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"EC738CAC268337C0CA7FA4C390E2C03CD14334571F1DBAA51601B78080675651\",\n            \"PreviousTxnLgrSeq\": 68264874,\n            \"Sequence\": 67136325,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7785989866\"\n            },\n            \"TakerPays\": \"778598986\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"2ABDF03CBDFAD71E9CAC64D052C580BB01A4FEA187822A37DA072BA3BC46074F\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rH5oQKTQ5VaFHC8MFN912377XMG5EH3vTB\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36531FF973CA4247F9\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"5\",\n            \"PreviousTxnID\": \"A09868E91C151464FA7974616AAC0C94B338AD540548CE37CF32E27FF2D6BB41\",\n            \"PreviousTxnLgrSeq\": 68948371,\n            \"Sequence\": 59805856,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"2AC5617C9953A48E2868D9588612002E40355C64344D023E1AD0448F1CD84847\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7785989866\"\n            },\n            \"TakerPays\": \"700739087\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r4KDwn1x7ihYbekn13gYAoV9fFnjwFa28R\",\n            \"Balance\": \"33358676840\",\n            \"Flags\": 0,\n            \"OwnerCount\": 22,\n            \"Sequence\": 61086238\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"2B0DC79C9EBE1CACB5E5ED776D73D2ED2BE02C938556F5E161783DCC63F99E48\",\n          \"PreviousFields\": {\n            \"Balance\": \"74134763\",\n            \"OwnerCount\": 23\n          },\n          \"PreviousTxnID\": \"13C33504BEA155191D964DF9112CD8162D85FAF4AB38DE63E1365A0981D1D087\",\n          \"PreviousTxnLgrSeq\": 69040742\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r3mZ69KGMSXXfdFe2xxeNvSkA98mQQ52aF\",\n            \"Balance\": \"1588203395\",\n            \"Flags\": 0,\n            \"OwnerCount\": 134,\n            \"Sequence\": 67138998\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"2B1BE194F04C2B6CF5C6A19121AA275887F38C4B4B7B4E78BC8910F3F8ECC95B\",\n          \"PreviousFields\": {\n            \"Balance\": \"776962495\",\n            \"OwnerCount\": 136\n          },\n          \"PreviousTxnID\": \"6942C90E200D896734DE6BFF324C0DB64774CABEC7FBDB31081CD556CB07A611\",\n          \"PreviousTxnLgrSeq\": 69063914\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"raA94X4CEVD8GVTSQWjafELaah67aqrvjG\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365214ECEC7DBA2000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"06845EF291A015B98CBA8F169B6ADA49C9426DB716DE3C089127EEABCF99F967\",\n            \"PreviousTxnLgrSeq\": 68922999,\n            \"Sequence\": 67107686,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"2B1C22EA132D85ABC7C29CCE118A206964017A16A4E797767F963415CEEB7A49\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"10000000000\"\n            },\n            \"TakerPays\": \"58900000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rPvqZW8q9bpYrAKjGhtL7AZAq8bvqEQDuq\",\n            \"Balance\": \"433587552\",\n            \"Flags\": 0,\n            \"OwnerCount\": 164,\n            \"Sequence\": 66726811\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"2B2D3230A0ED38E338663779825D602684627EEB62D4B4351FB9BDD1E129FF33\",\n          \"PreviousFields\": {\n            \"Balance\": \"393038560\",\n            \"OwnerCount\": 165\n          },\n          \"PreviousTxnID\": \"83847C961BE852656E1E21D167E712830BD8988F1CFB54650C8DA231EEC5EAB5\",\n          \"PreviousTxnLgrSeq\": 69063297\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rpCmDBk3dADpY9cb77D1hA4NHYnn7YbJM1\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36530500FA7BE8B448\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"3\",\n            \"PreviousTxnID\": \"435BD0B34F1386288BE68678E591C355CDAED0A70A27D91F373885801A09AA4C\",\n            \"PreviousTxnLgrSeq\": 68827775,\n            \"Sequence\": 67930071,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"2B3662310EBE83CA0DBFDACC92C464E56458996C98DB1942B0EA1ED4B8D82045\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"2130000000000000e-4\"\n            },\n            \"TakerPays\": \"3000000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"r4VjGvXZQwpAy5iqMCt6kbSbFb7Bi8RYEG\",\n            \"RootIndex\": \"AC4237EFB432D594C12215F48B2A648F4C6EB9EDCFED17C73C167A59F06052E2\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"2B58062CA93BCDCA289246A380603B77112F6B10FE55B2DB705524E805D06D3B\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rDsyrKqgbAuWUu1fmJx84Vgm3X4H53rztM\",\n            \"RootIndex\": \"2BAE8B017DE80F82BB24E22038520FE054AF25FD4DEB044E2B5846EA5522B406\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"2BAE8B017DE80F82BB24E22038520FE054AF25FD4DEB044E2B5846EA5522B406\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-1.527841\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rPDEk87BWPzJVDg22rmwGBu7gxKdkQrJEc\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"600\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"2BD2095845250E37D28D5EE4039C9DE2AC06805A0C4C4CC8E767E8A60FE25271\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-7785989866\"\n            }\n          },\n          \"PreviousTxnID\": \"F599016CB6F2425F3CC644B9099B22A365883D799C825F8A8AEFAABDE693C2A1\",\n          \"PreviousTxnLgrSeq\": 67999867\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"a\",\n            \"Owner\": \"ra76UpbMwxu2GePpQeV7dogXZUxvn8upup\",\n            \"RootIndex\": \"47E05475890E16A1F86C2F822BC976DFE15A295681A17C2269C5BB93E955676B\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"2BDA2C48CD5A6D8635164142F2596F29DF8D270CE919D977F5BB7593AE8A0F28\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rGFCR192crZ5FBYgZPMAZCeBzTrkqeFXqh\",\n            \"RootIndex\": \"2BE7105FAD8D982344635BFDD4597EAB7A60C1CBA7EF880B63A963BF19506C4E\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"2BE7105FAD8D982344635BFDD4597EAB7A60C1CBA7EF880B63A963BF19506C4E\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rh2ExLW6MJMJdoX7386pzfkNbhHSjqVWtC\",\n            \"Balance\": \"173694894\",\n            \"Flags\": 0,\n            \"OwnerCount\": 10,\n            \"Sequence\": 68087684\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"2C0DA53B53916B260A10C537EAD63ECEE8E927380D846EE59BA6DB71AF7D9200\",\n          \"PreviousFields\": {\n            \"Balance\": \"32994894\",\n            \"OwnerCount\": 11\n          },\n          \"PreviousTxnID\": \"8A4C572BAC84A91ED8F4922E55A1E86EAA0308713FAAEBEDC2C2CAAFE387792C\",\n          \"PreviousTxnLgrSeq\": 69020687\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rLV3c2Bymn4fq7kyrqysEd1ddizDxvwS1m\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521550F7DCA70000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"1\",\n            \"PreviousTxnID\": \"953E523933B6B488FF4D3C7F751DEDF2BD01C46B1FB9356F705399FE8A393D75\",\n            \"PreviousTxnLgrSeq\": 68899404,\n            \"Sequence\": 67840001,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"2C1518CF38FEC4D5EDBB797FE678147813DDF6A48FC994AD1ADB5C2DC3C1C3CF\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"4000000000\"\n            },\n            \"TakerPays\": \"24000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rnhd3RdnLUZY4sYxS2p5zTJk24zHB7VyUo\",\n            \"Balance\": \"27726032\",\n            \"Flags\": 0,\n            \"OwnerCount\": 4,\n            \"Sequence\": 67654186\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"2C37E8B65A7D10B63A49119287CCDB01E3FE622D0F2A0D09E38824D9D38A36A2\",\n          \"PreviousFields\": {\n            \"Balance\": \"20974446\",\n            \"OwnerCount\": 5\n          },\n          \"PreviousTxnID\": \"387B6506959224B09CE7CEB4421CC335F242E07C18A25A5B87CA04BD48F32189\",\n          \"PreviousTxnLgrSeq\": 69044815\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rqben5VgPyij1hAY4bi4yPyp3vf6GgY3z\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365218DE767B78B070\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"2\",\n            \"PreviousTxnID\": \"2D93E86E695E066B16342E5DE5C0D1DCD0FF436013E24DAEAF976D633FDEF1BA\",\n            \"PreviousTxnLgrSeq\": 68966854,\n            \"Sequence\": 67935101,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"2C4717CB0979873209DD2334977C725D2714122F9AFBF9FEF88E29F24D067056\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"9999999999.9\"\n            },\n            \"TakerPays\": \"69999999\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rJd8ipxtKA6u9iXpvCJYQrsES2Q4FsySHR\",\n            \"RootIndex\": \"2C4E28FA354BCBE5F7312E9D40068C95EC1249AAB58548E806015CD4B40B05F9\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"2C4E28FA354BCBE5F7312E9D40068C95EC1249AAB58548E806015CD4B40B05F9\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"5\",\n            \"Owner\": \"raqKMtQVnQPuQpPLBoeyPbjYHSokvu1R1z\",\n            \"RootIndex\": \"EF52A1E1AF43D94286ECACF8C1A0DD001AD1B2E07D095C441565CF93BD1AD677\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"2C5575D638837ADE7B895846901C3DADC5155B356145EBDFE3CBE77F0721782F\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rJNmHPHrMr649at3SBHakJ38mRAQZA9pvs\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653063B9AD03CCE98\",\n            \"BookNode\": \"0\",\n            \"Expiration\": 724074927,\n            \"Flags\": 0,\n            \"OwnerNode\": \"8\",\n            \"PreviousTxnID\": \"B4479D907D1109FEA4B7F1308C300AABD4932BE7A3CFB992B579FF1538AFEC67\",\n            \"PreviousTxnLgrSeq\": 68267446,\n            \"Sequence\": 66004276,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"2C7AABC2B23E48161E4A86885DAE9778880D900404058B91A680EEDD6609D41B\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"1140000000\"\n            },\n            \"TakerPays\": \"20000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"147898568\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"e30\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rUyceekfg9mU133ecSKptNTpj4nYnFMi58\",\n              \"value\": \"1000000000000000e-1\"\n            },\n            \"LowNode\": \"6\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"2C7BE253B94D0A5472EA96B1E5C8C4F95A4F685FABD53833A6EA6F6F1452AE15\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"1147898568\"\n            }\n          },\n          \"PreviousTxnID\": \"2806A5A8C0C6B54FEBFC6300F00CF2D16A695C5CF4B6E3C90EB36D4DDF1CBAD0\",\n          \"PreviousTxnLgrSeq\": 68899592\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rJ5v25nqLv1P2Fij67kW1QE6iWqthP89v9\",\n            \"Balance\": \"515123993\",\n            \"Flags\": 0,\n            \"OwnerCount\": 151,\n            \"Sequence\": 66614797\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"2C8ADA64551A5C7DA0E56E5FEC43B629D82BCD8D65F3673AD8D026D7A00F8F3A\",\n          \"PreviousFields\": {\n            \"Balance\": \"424027912\",\n            \"OwnerCount\": 152\n          },\n          \"PreviousTxnID\": \"37CE68BF30231A977D7FA6A537956F4DDD5D9F63375834E60D85CEECB05C6DAC\",\n          \"PreviousTxnLgrSeq\": 69064028\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rDWTpV5omq7rh5Wnro4noWmWFEFcRx17ma\",\n            \"RootIndex\": \"2C996C9E04E4747F70F3D2D873D609EB63BA67789A2FB6A67AD250E74B833B23\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"2C996C9E04E4747F70F3D2D873D609EB63BA67789A2FB6A67AD250E74B833B23\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r35RUZ6PjS9JT6pHG6298ES1abD9uv43D4\",\n            \"Balance\": \"1077953061\",\n            \"Flags\": 0,\n            \"OwnerCount\": 37,\n            \"Sequence\": 67194424\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"2CA3DAD91C732D4EBFB6B02578876779411053D7B2E5B25DFC406F3EE7C9005B\",\n          \"PreviousFields\": {\n            \"Balance\": \"1022953061\",\n            \"OwnerCount\": 38\n          },\n          \"PreviousTxnID\": \"D4D0852ED4D8E2CFE9A3BFE5895C24B95195F91175D869EE75B0F5F6168942F3\",\n          \"PreviousTxnLgrSeq\": 69045862\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r3PWgfzUbXKYDoLD6p49JqiabjfQCj14AZ\",\n            \"Balance\": \"2005485429\",\n            \"Flags\": 0,\n            \"OwnerCount\": 616,\n            \"Sequence\": 65987229\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"2CB344B13C83D8E8A9E5352203B1BE37E8F929F8378CD19307E1C7D0261AC23F\",\n          \"PreviousFields\": {\n            \"Balance\": \"1886037420\",\n            \"OwnerCount\": 617\n          },\n          \"PreviousTxnID\": \"FC829BF0D448BD3442BDE680A4E188D94DD957D9795DA95E746187F197320B72\",\n          \"PreviousTxnLgrSeq\": 69059958\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r9TcqWtCqzG7xnhLcYPUbKsV691wNPzMMw\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36530AE5DC6DAAB62F\",\n            \"BookNode\": \"0\",\n            \"Expiration\": 726020521,\n            \"Flags\": 0,\n            \"OwnerNode\": \"a\",\n            \"PreviousTxnID\": \"B79A078C7DE8BF5F74124442DB1267766453F32B03C1BE4204074ABF7186060D\",\n            \"PreviousTxnLgrSeq\": 68754629,\n            \"Sequence\": 67460726,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"2CCE5270C1E3BF119B0924CFC5417F5319B9015BE0F7A62716A0E72E7AC23291\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"9780000000\"\n            },\n            \"TakerPays\": \"300000000\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rh1bgyeVNDBauF3vXuASW2L8MWrdq8XYko\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520FFCB9DE60F32C\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"63FCEAB46FADE9B9B92DE43A738D14DDB5064FDB48A9F3D1A62A0857E0C76D03\",\n            \"PreviousTxnLgrSeq\": 68994748,\n            \"Sequence\": 67364435,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"2CD87E346176CA539FAEE8D4B46FB2CDABBF331285074E9126C8A858E9A9D55F\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"2901658076.923077\"\n            },\n            \"TakerPays\": \"13057461\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rs9woHiJb73K8uqmCAUx7hRfW2a2WR5cwi\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653038D7EA7607D3B\",\n            \"BookNode\": \"0\",\n            \"Expiration\": 723092961,\n            \"Flags\": 131072,\n            \"OwnerNode\": \"1\",\n            \"PreviousTxnID\": \"D8D5EE8C9DF8C53A561D214511DE6DF2C9F3CE16006943CA8E1C11B4A058CD5A\",\n            \"PreviousTxnLgrSeq\": 68027886,\n            \"Sequence\": 67697632,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"778989866\"\n            },\n            \"TakerPays\": \"7789899\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"2CFC8E23F939200CC97B93893FA9C9D7FFCE5782C50D228BB2066027ED19AC20\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rHNNQAEvRxzWoi2ukxZ371fsjJjxRva3pd\",\n            \"Balance\": \"91833121\",\n            \"Flags\": 0,\n            \"OwnerCount\": 23,\n            \"Sequence\": 67949465\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"2D03DD3A90D97592CE73E2EB3CC99243619AA852B310DD6216BC1C3364AC5384\",\n          \"PreviousFields\": {\n            \"Balance\": \"86333121\",\n            \"OwnerCount\": 24\n          },\n          \"PreviousTxnID\": \"20AEDB7930E0E08BD4B81DB58CC8235360FFB64F55C3A66F27F530E5BC19DC25\",\n          \"PreviousTxnLgrSeq\": 69063435\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"2d6\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rah3AgBTwgnCvR5aJfj4p6Gy98hZt57gXD\",\n              \"value\": \"1000000000000000\"\n            },\n            \"LowNode\": \"1\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"2D219CB52C44C0FF809993A9FCCB276A31FC31CE4F4114A32BD8669CE6B9F071\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"7785989866\"\n            }\n          },\n          \"PreviousTxnID\": \"1887F9417EDB3B0EE057075015D38E1471F0E73714AA72DC6494B1D0FF6939F5\",\n          \"PreviousTxnLgrSeq\": 67951451\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rBzk3TdhfdbidCHeKWfmQ5dy9AuAtGbXeY\",\n            \"Balance\": \"599184766\",\n            \"Flags\": 0,\n            \"OwnerCount\": 60,\n            \"Sequence\": 67686309\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"2D230793C470EA9E169F14E3BCBE2A8A55C8DD310301F6B59DFCEAD275131750\",\n          \"PreviousFields\": {\n            \"Balance\": \"140637564\",\n            \"OwnerCount\": 63\n          },\n          \"PreviousTxnID\": \"DF796D4FFFD8216C70D04847E9BF4A143758937A7C6AA6797FAC641AE6E6F5BE\",\n          \"PreviousTxnLgrSeq\": 69030898\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rNRoroUiCSQM3hcrEkwV5p6uCx8WSm3Mjy\",\n            \"Balance\": \"386758224\",\n            \"Flags\": 0,\n            \"OwnerCount\": 136,\n            \"Sequence\": 66470083\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"2D7B08AE91F57C88635D6C6AA05EC458ED7DA5B7A4DA0B7561C37A32A5BFB776\",\n          \"PreviousFields\": {\n            \"Balance\": \"350758224\",\n            \"OwnerCount\": 137\n          },\n          \"PreviousTxnID\": \"07EE9A32ADFCB265FBC6B936C82F4A83A1AFA99E25D3A816EAA18B82B7EFDD5F\",\n          \"PreviousTxnLgrSeq\": 69063579\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"1\",\n            \"Owner\": \"rQnNwoWPxGyxMoLogTPHYeK1hGYwJ3b9Sz\",\n            \"RootIndex\": \"B2F6DB427F0FC8ED27135509CC7EAB6064F5848FF44E2A4609A8EF055FF616CA\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"2DA12DEA8824CB89B2350B54493090810C7935682B7F466CF4A6DBC37B03F8EE\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rMGX6LAGxRUHd4g3yW1ukFhThgiCxMioX3\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365207CF11C11B6F58\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"059A77218204BA7209A92305FD06BBA31B4235770075CB99419626E1F78B1F7E\",\n            \"PreviousTxnLgrSeq\": 69050922,\n            \"Sequence\": 68628057,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"36675913373.39329\"\n            },\n            \"TakerPays\": \"80613658\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"2DA9EC67C159A3D3CE3FCAADE3A0304B164C57AFCE4A1B54A66D33957EF7E529\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rK3ctAQ3dxZmdQZ7JJt2PZBU7GZPwAkK1P\",\n              \"value\": \"1000000000000000\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"12\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"2DB45C82B283C3EB7C761F594C5027E7EE46E6629F783EFA8B601339BA227248\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-15571979802\"\n            }\n          },\n          \"PreviousTxnID\": \"3FB972053C03A48A247DAD36DD4408D3260FC2D32DB5B3CB4722ECB2314FC0E8\",\n          \"PreviousTxnLgrSeq\": 68140468\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"dfa\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rDrVDF6etbhSYtnBoqxbRd4CyGHQ5YNR4z\",\n              \"value\": \"9999999999999990e-1\"\n            },\n            \"LowNode\": \"3\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"2DB4C0CEB8239539B2F5968F18645F925E605A51CDDFE9C3759B2B67A9A1C9DF\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"25000000000\"\n            }\n          },\n          \"PreviousTxnID\": \"808483DE8C02BB3297A29B4BECB913C6DC226D403087E9AFA8A0E7947CD351A3\",\n          \"PreviousTxnLgrSeq\": 68991025\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"9036317942.10513\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"76b\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rDDmwBnxoXcq7PLUXTvsfVHhEqGpNCS138\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"LowNode\": \"2\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"2DBCDE67CE0374CA007C2BA17A374A1A2B4DF6F9FDA0BEE713B7644578139F78\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"10036317942.10513\"\n            }\n          },\n          \"PreviousTxnID\": \"34EEC2B5C7963F9EFA5DBA466DF7CF40A6F9C8601DCD9673ADBE2E91B30AD40D\",\n          \"PreviousTxnLgrSeq\": 69034828\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"b58\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rfXqSEeWLr4MYYLsESHbsyh3CZhAitzYVg\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"LowNode\": \"1\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"2DCD6F9A44D6727A80208EA37B8C79E4A18A44E56642A1D1299739556DBDE2BA\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"10133845184.51845\"\n            }\n          },\n          \"PreviousTxnID\": \"3DD37A7F33CA3313EB5E02BB2B8DF02567EE26F42B760B0A3526561BC2AF9344\",\n          \"PreviousTxnLgrSeq\": 68468161\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"10\",\n            \"IndexPrevious\": \"e\",\n            \"Owner\": \"rPCYDR6z5MW5EvxVzPhVa6cfLyckEDWs5T\",\n            \"RootIndex\": \"D8365414EDBF06893B6D1AA08E8C50EB19A922772B8B1EEF93C951621675541E\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"2DE908B83BD4DE7B085AF2F49F9E3024DBED37C495B1094FF7347671142354B7\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rBYvQ1bajMk5CQ8MTa6whA9MZ4uuJGwtEh\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653038D7EA4C68000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"7\",\n            \"PreviousTxnID\": \"A9EA55C15AB886F7FCC5FE3E155490050FA554DA86106BF768478AFB4FF8AE72\",\n            \"PreviousTxnLgrSeq\": 68896306,\n            \"Sequence\": 66621819,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"10000000000\"\n            },\n            \"TakerPays\": \"100000000\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"2DF3B46893D270568E50E084E7E0A4C6F41EA7AA0AE1B8E321D0126CF9B5D322\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-2218056090106409e-4\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rGPEKNaNPYojt4sFbUzodh9SUNxixCwoBC\",\n              \"value\": \"9999610698104603e-1\"\n            },\n            \"HighNode\": \"2\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"ed3\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"2E2E2C2CBB961AD482CDBA759AC4C593D1118DD7D103E716A76B234781FC8529\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-2918056090106409e-4\"\n            }\n          },\n          \"PreviousTxnID\": \"93EDB1CEC8C7D9E69551DDF54BE5AF5D1E84FB03C17BEECA6F5E2DE328A64F95\",\n          \"PreviousTxnLgrSeq\": 68992388\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r3XYRBp1PnkL2JesUDNw5zo4yxmkYQD9dK\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653049E57D602B014\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"B0A7B22F2D427F621DFCE942F5A78E8E63C02B42C61157FF6CF6DA4B83A11A61\",\n            \"PreviousTxnLgrSeq\": 68152167,\n            \"Sequence\": 67819048,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7785989866\"\n            },\n            \"TakerPays\": \"101217868\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"2E3007C0A7E65200703B528739476AD2982C8A9DBF893BE15F97392A8BA953E4\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rBefpcbGP1mhJhuLmYSbPSj4oDTufciZDH\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521BB52622F29071\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"2DF9FBB3214E5913732341046D5EE97BAABE8D55479D95992C0FD621991EACE8\",\n            \"PreviousTxnLgrSeq\": 68898345,\n            \"Sequence\": 67337573,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"2E39A7EA374F910F9A28D90DEA0A9C62346551C178A12E04020F3E438493E4F7\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"3951941647.058824\"\n            },\n            \"TakerPays\": \"30821192\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rn9Yx4G5KM8ie2sm6Qaju7xPbvQPFiUu2f\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365218289060790000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"4\",\n            \"PreviousTxnID\": \"0CCBE78F6BFEB9FCA7E85330F90B1B09F4D81D7B73AC053DA5A84ADE04498D6B\",\n            \"PreviousTxnLgrSeq\": 68899294,\n            \"Sequence\": 67611638,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"2E3C69F32AB53CE9866ED03EC740A8BCA7C302D0D88DF025ABAE29D5BF8CD8AE\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"10000000000\"\n            },\n            \"TakerPays\": \"68000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rHXRGGkmL2bGwkbsz9mnpVi3eAZt5bThdo\",\n            \"Balance\": \"72768139\",\n            \"Flags\": 0,\n            \"OwnerCount\": 3,\n            \"Sequence\": 66754972\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"2E437C5FAAAC788A0A0E5E8D17DB0A79683F4A495F8521466376419377FF4A35\",\n          \"PreviousFields\": {\n            \"Balance\": \"18499790\",\n            \"OwnerCount\": 4\n          },\n          \"PreviousTxnID\": \"387764D69FE7A46C47F7D554E4F14BB1A0984F8C180A5F22E35CE8C3613D26BC\",\n          \"PreviousTxnLgrSeq\": 68899246\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rPpC3LrzwLjh2qU7XtQKFb4GCZyAUHz7Ss\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521E32B478974000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"2\",\n            \"PreviousTxnID\": \"79305D4B1DC75E15B8B9EE877D15D8F47C626405F96E7422030D57D7CD13048F\",\n            \"PreviousTxnLgrSeq\": 68897510,\n            \"Sequence\": 66167436,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"2E53DE06F1BDB8E6F0DF200317065AA548900D3E357D9E2FE5E7E6FFCA5448C9\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"12500000000\"\n            },\n            \"TakerPays\": \"106250000\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rLVGNfLJYnQtqJDuNWkpu1yaSBnrrSGPdt\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521BE3888D7CA000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"5\",\n            \"PreviousTxnID\": \"EE88FF24E6EA03619B81F6650D9F5C1545A20D1DB261D7738642F6D8D5B2ED3C\",\n            \"PreviousTxnLgrSeq\": 68898671,\n            \"Sequence\": 67363381,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"2E5B457B89E72BD160F55407A08B78938267544AB5B68E39A436A07E7D029D16\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"9000000000\"\n            },\n            \"TakerPays\": \"70650000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rPy5zQthBW1gHiWbdHmbPkGtF9jM5XQGNs\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"a51\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"2EA65814C2EF6CD244AF297A9D076BB86B08ED628BB84A3147CACBD89BD0EA09\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-21206537461.53846\"\n            }\n          },\n          \"PreviousTxnID\": \"9AA87618582175A162AA221373DEB907D849BB9B16A93F5023A63ACF9BBC2930\",\n          \"PreviousTxnLgrSeq\": 69002813\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rjuBmfDDfaXxXRPhcGsGb3qSjdrEUwMGT\",\n            \"Balance\": \"1084564672\",\n            \"Flags\": 0,\n            \"OwnerCount\": 38,\n            \"Sequence\": 67439660\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"2EA96E990F6E3214F9DC4EF037E9A905E39D079CFB86A76724827072F5FBFC88\",\n          \"PreviousFields\": {\n            \"OwnerCount\": 39\n          },\n          \"PreviousTxnID\": \"7419BDA747FBC6A3CE53355853C21EAA178F0C13031C02B36EB34A98635B9114\",\n          \"PreviousTxnLgrSeq\": 69063408\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"r33yXJH6HkJc128VKpjvrcdC89M4zDaP9f\",\n            \"RootIndex\": \"2EC0BC3928CCFF88C70A2B0309F8FE95AEDC385248083AFF9F1B2F11552C8253\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"2EC0BC3928CCFF88C70A2B0309F8FE95AEDC385248083AFF9F1B2F11552C8253\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rNWUPV44ECUZNuemMektfAsccCmYRnZXK5\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653049E57D6354000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"C8C5423DBDB8D7204DB660E6002F6A93D0A1217DE848D5EE4A7FAAC6AD7319B7\",\n            \"PreviousTxnLgrSeq\": 69053693,\n            \"Sequence\": 67770366,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"2EC9D2252A883425788C0A6B5AB6BB2E7C3159B9178885823EBE643294034515\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"9000000000\"\n            },\n            \"TakerPays\": \"117000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-87.6206\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rHHviosMrm1hi4Nfm7MTipMw2oeEQRTeod\",\n              \"value\": \"1000000000000000\"\n            },\n            \"HighNode\": \"4\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"2ce\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"2ED3C9A16A3838B5341FD2EDF7591EDF4D274A12F40764C09F7A3849C9E622F3\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-8077859899536206e-4\"\n            }\n          },\n          \"PreviousTxnID\": \"4CC219CFE4E4E6E29E152A45B270B9DFF5BAB8D4FF056EB200FF58AD34779CC1\",\n          \"PreviousTxnLgrSeq\": 68995313\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rKB9EELQpLTeDNb3H5HJT7QbCPdA1NzDQ7\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365221C0331CB28F20\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"d\",\n            \"PreviousTxnID\": \"1B9DA4F1F41A8A65CD08108526CCAF1734822C1F7A587139BAEFB356DD42A8A7\",\n            \"PreviousTxnLgrSeq\": 68903599,\n            \"Sequence\": 67528555,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"2EE1DB5A8FEC45277EDE257B23C30085F835E0ED34A7C37D32C454F571225465\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"86829360313.06876\"\n            },\n            \"TakerPays\": \"824878922\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rs4wbWdssBMJRgn4tJak3eq1JgrJ7Pgfnk\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520D7DC0FE0610C5\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"4\",\n            \"PreviousTxnID\": \"ED75D46C2B67D1FD123E6138C0C08EF375A37B9E2D68D1F59A9CA14B2167D7E4\",\n            \"PreviousTxnLgrSeq\": 68997801,\n            \"Sequence\": 67390751,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"2F002EBDDEAE544ECF8589CCCDF182AFBAEE744F1673E63FDD68D706B3FFA713\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"26333512300\"\n            },\n            \"TakerPays\": \"100000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"2\",\n            \"Owner\": \"rMWLJFUZZk4ueZuy4yiLPJa23dGih6phUa\",\n            \"RootIndex\": \"19C4B2B83EE66310005478D8E31E6B6C7FDFB8B21BAE3D3413D3EE7A8C6A4476\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"2F05F18CA9FC00314DD788298BF1C90F7E17688BDAA7AF60ADEFB464152F6E95\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"5400000000000006e-4\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"df2\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rwLffu7VZ4rMMa5thTQppfL9g4FMB1sNys\",\n              \"value\": \"1000000000000000e-2\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"2F3A2A9C9B7B82A1B01EE9AD131F261E3353CCB5B0968B64515153325128DB5D\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"8987395559615390e-4\"\n            }\n          },\n          \"PreviousTxnID\": \"80CD6EC1E9D4EB842148311C17936A5736CEC03B227AF02F840039E01E293CB9\",\n          \"PreviousTxnLgrSeq\": 68945547\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rJRfgew5k5b2Qgj5r9gn2L6w66hE5vwYnH\",\n            \"Balance\": \"217601208\",\n            \"Flags\": 0,\n            \"OwnerCount\": 80,\n            \"Sequence\": 67406199\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"2F5B70F8451C2D8A422B52F7E8B3BFA1659ED3DCD7BEF2E6EE817519A3367194\",\n          \"PreviousFields\": {\n            \"Balance\": \"193286208\",\n            \"OwnerCount\": 81\n          },\n          \"PreviousTxnID\": \"123B9C58B38DEE62E97D8C1620DC86CEFA0B9E0B0E89562715A0AA710DD39254\",\n          \"PreviousTxnLgrSeq\": 69052978\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r4izcArVy7Ccp9j1VEwnbso67AsYhaEjdJ\",\n            \"Balance\": \"165749879\",\n            \"Flags\": 0,\n            \"OwnerCount\": 48,\n            \"Sequence\": 66579210\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"2F91A5502CCD74CA55AD26FF27B789D12E6B56301E8855BCFD04296717E9EECF\",\n          \"PreviousFields\": {\n            \"Balance\": \"113999880\",\n            \"OwnerCount\": 49\n          },\n          \"PreviousTxnID\": \"EBCF3836A7B7ACC8FECC9DA4C4272E6F6266092083FFA959ECA01D962F6F5194\",\n          \"PreviousTxnLgrSeq\": 68996076\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rBdANmzNNUu3sSPo15TR5eY2s43hPH9yFG\",\n            \"RootIndex\": \"3079F0EE47FE60D4BD322D42362A3AFF50A26C342CB99C6C154AC2E56C087FD0\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"3079F0EE47FE60D4BD322D42362A3AFF50A26C342CB99C6C154AC2E56C087FD0\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r43hxvGDZqmKmLugK8oJ32r2f4rxuvUntb\",\n            \"Balance\": \"1465435580\",\n            \"Flags\": 0,\n            \"MessageKey\": \"02000000000000000000000000D1188832FB86BF4E2B1D10CCB0CE740B60CE1122\",\n            \"OwnerCount\": 455,\n            \"Sequence\": 59395120\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"309F5E03D894218F00289070357D326A575E0A03C5D5BC4BF5FFE0B5A027CC3E\",\n          \"PreviousFields\": {\n            \"Balance\": \"1445435580\",\n            \"OwnerCount\": 457\n          },\n          \"PreviousTxnID\": \"18A3A8FA64C226D2F7AADFC1223108B379230883079DC8A82F508D55A6F575F5\",\n          \"PreviousTxnLgrSeq\": 69063753\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"10\",\n            \"IndexPrevious\": \"e\",\n            \"Owner\": \"rC4M78e2ktZz8QwB5SUSEeeeSi5rcnxrJ\",\n            \"RootIndex\": \"35E481FF021EB94C809B1D4A952A1AE9563777CCB354A61030354C2CEF3080EE\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"30AAA8E0C661481428DF58E6B12329B642C295201DBAF2DF2917B99A60E00167\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"1995960136522766e-4\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"d7e\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rpf1wWbuPjafvAgD4f9vtX88Ut9qurPRHS\",\n              \"value\": \"1000000000000000\"\n            },\n            \"LowNode\": \"1\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"30AD07EA17EEB836E2AB328FB7F5CE1EC90CB65274F46EFAF519763E5D5B22A1\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"3295960136522766e-4\"\n            }\n          },\n          \"PreviousTxnID\": \"D913546BE47A1E1AE28EE0C3334CB4261105DCA1F525825FDF9F55CEB56A20CF\",\n          \"PreviousTxnLgrSeq\": 69024497\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"396\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rDqBWAYNudfa8rBsr7YDsdDxeAoNRsxfPV\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"30B319F2E6008FA0BAB83918821AA9A07C38323300BF509DA3961F2B2F234975\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"38929949330\"\n            }\n          },\n          \"PreviousTxnID\": \"9F8B22D2928CF33951231980AB44775FFFAF61525F79C8C29965FA28E3F80530\",\n          \"PreviousTxnLgrSeq\": 68246086\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r4LzF7yH5ewjqEVaTpufYTzwH8KyimRrrq\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652218F2CED8BE9A6\",\n            \"BookNode\": \"0\",\n            \"Expiration\": 722876948,\n            \"Flags\": 0,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"44A9AAA1B6C0DA28B7D0ADAEE31E06F91BB31253624C79A9A79B749B8D9B2FF1\",\n            \"PreviousTxnLgrSeq\": 67974335,\n            \"Sequence\": 67717880,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"30CF07B124040E6D869C366E70431A687EEAE16FA02924B2FF7F946026EA675E\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7728059.243109986\"\n            },\n            \"TakerPays\": \"73000\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r9TcqWtCqzG7xnhLcYPUbKsV691wNPzMMw\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653056C8AA1AC1F44\",\n            \"BookNode\": \"0\",\n            \"Expiration\": 725659570,\n            \"Flags\": 0,\n            \"OwnerNode\": \"a\",\n            \"PreviousTxnID\": \"67F188C5689579094FB4286DD4D83C2CCBCF96D77ACA895BAB7311891F1246B5\",\n            \"PreviousTxnLgrSeq\": 68662575,\n            \"Sequence\": 67460660,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"3116FF8DD0F1D142BCDFAD668C40D7337F4A7FDFDD91E49531C6A0F04A3B1BF8\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"6484500000\"\n            },\n            \"TakerPays\": \"99000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"raentKRvbeEBLCQQUC5vbc8FH6zFuzaNEJ\",\n            \"Balance\": \"139557704\",\n            \"Flags\": 0,\n            \"OwnerCount\": 16,\n            \"Sequence\": 67761116\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"311DBA218000BD6B4EA2A5F778BCA7EB0BA3015B69B9B752E295A36C2AB36C5D\",\n          \"PreviousFields\": {\n            \"Balance\": \"82719978\",\n            \"OwnerCount\": 17\n          },\n          \"PreviousTxnID\": \"D757E0F1A3DC2F5808CF00CDA39CF15C0D0FC40C948D6CB1E5ECEA46564CECBF\",\n          \"PreviousTxnLgrSeq\": 69044023\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rhMycFXh1AtyNRL2JeLJmhps2ufxBKY3Wy\",\n            \"Balance\": \"326269725\",\n            \"Flags\": 0,\n            \"OwnerCount\": 157,\n            \"Sequence\": 67131748\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"312CF8F18C49B50133AC81732CD0D86AAF045797DB72E08103A2D986BAF605AC\",\n          \"PreviousFields\": {\n            \"OwnerCount\": 158\n          },\n          \"PreviousTxnID\": \"761D12C84ED05D82B8709B6AFABDC2F4346A93663DBFB1E4F40BA710F447FE07\",\n          \"PreviousTxnLgrSeq\": 68953175\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"22\",\n            \"IndexPrevious\": \"20\",\n            \"Owner\": \"r43hxvGDZqmKmLugK8oJ32r2f4rxuvUntb\",\n            \"RootIndex\": \"CC1F170977F938874418B74EFA4CADE426A50A337BC3FE9C2A800D4BD7F67127\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"31427284B4A04C1A2A9075225DD74F77CC98B351F471CE1F6B7C669B841031B9\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"raHjNXUyRvwxN5Vr5NtQ5pbFVgbM7kqLrP\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520CB032035736DB\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"4\",\n            \"PreviousTxnID\": \"35A35BF67C2103B846338F72BD912987747339945D27620CF7A11B933F82539F\",\n            \"PreviousTxnLgrSeq\": 69027789,\n            \"Sequence\": 66646314,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"316EEB4D7D38972F8F61C3BCF6EF4DC2E83DEF735C5D7BB42D980AF23DD4BF5A\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"4215723962800000e-4\"\n            },\n            \"TakerPays\": \"1505615701\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r4o8fw9WzkMQTvfvxZFVhkY8Txt3eN8Wct\",\n            \"Balance\": \"1317355027\",\n            \"Flags\": 0,\n            \"OwnerCount\": 4,\n            \"Sequence\": 67794280\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"31AACA49165E02A08B84F36FEFD4F2C32CA357B7BBC1EB6B3AFEA97623A27FF7\",\n          \"PreviousFields\": {\n            \"Balance\": \"19997492\",\n            \"OwnerCount\": 5\n          },\n          \"PreviousTxnID\": \"427CFF8FCC7EFADA5E33FA9CDFBB38FC5CB672C9021BA1FFC9CB0926A8D06ED6\",\n          \"PreviousTxnLgrSeq\": 68898281\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rJWkGGCNuazEf7ch7C9bZkiiYy62Z95SA9\",\n            \"Balance\": \"261341955\",\n            \"Flags\": 0,\n            \"OwnerCount\": 124,\n            \"Sequence\": 67239609\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"31EAE3BE043D422E1632B4E606BA6336657BC4135391321CD0DA50D569E615B7\",\n          \"PreviousFields\": {\n            \"OwnerCount\": 125\n          },\n          \"PreviousTxnID\": \"228AAB1DA2BB45485A022A07AD1E491B2C81D18448BA5E57DFBAEA511CCC82CC\",\n          \"PreviousTxnLgrSeq\": 68984170\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r9MQ7Hek3iMwBnYRuHTuuG3ssJu48PHaxJ\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653038D7EA4C68000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"2\",\n            \"PreviousTxnID\": \"414828D1EEA4A7A6A12639230924371F50A749E2BCF5EADAE5AAA7B1C741DA75\",\n            \"PreviousTxnLgrSeq\": 68364039,\n            \"Sequence\": 67390511,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"31F19B8D934D7FA630E99AEA905CB0DA4C461EE53A94DE1F1A0941B33BD1FB2F\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"10000000000\"\n            },\n            \"TakerPays\": \"100000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rQpXmMNyGKtsYHwkG7Y3n8sXSXo2cmB1Nt\",\n            \"Balance\": \"155872784\",\n            \"Flags\": 0,\n            \"OwnerCount\": 28,\n            \"Sequence\": 67709971\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"31F3BC30DF885F36A864565CE4ABFD94CF39A24A6BA010081E9749846F8767F0\",\n          \"PreviousFields\": {\n            \"Balance\": \"113872784\",\n            \"OwnerCount\": 29\n          },\n          \"PreviousTxnID\": \"7509A5E2343CBD58F19D70DC20FB819C52C8866F792C55B72A78A2669947EE75\",\n          \"PreviousTxnLgrSeq\": 68897310\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"r4xMZEgWZaocA566U2xgUqKcTnXKZkBLLi\",\n            \"RootIndex\": \"32298EC78896480064883C20BD203E919AE73A775474829A2966BE2C05E66A77\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"32298EC78896480064883C20BD203E919AE73A775474829A2966BE2C05E66A77\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rK699XAUEcMK6msaRDV46mATmAqNN9nj24\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365313566130B7C9B1\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"0371F06E2E0E74F5D997FC44D48A038D825FA0876C4E68E1A31EB6778BCB1D73\",\n            \"PreviousTxnLgrSeq\": 68948327,\n            \"Sequence\": 64217429,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"6924386366.397586\"\n            },\n            \"TakerPays\": \"376894349\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"3262164AEC94B2165DABCDA2B30E7DDA860F9B333CE0828C18B16BCC8871F576\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rJ72ZDPTsPvQBUxDvaQd9t2mbD8BrogpBS\",\n            \"Balance\": \"374537326\",\n            \"Flags\": 0,\n            \"OwnerCount\": 8,\n            \"Sequence\": 67691003\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"3288D99867BC8D616D0932ABFCA37174DD833829F94D96DF789FE9B307A8AF5C\",\n          \"PreviousFields\": {\n            \"Balance\": \"228490722\",\n            \"OwnerCount\": 9\n          },\n          \"PreviousTxnID\": \"B370CDBCE97D514F7B5C954C6EF2E575AC12EC8545262DB0340FA3353B71632B\",\n          \"PreviousTxnLgrSeq\": 69059418\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"c01\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rfc7iQscNnWECTgwfRg4T6MExyVTCiTWTV\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"328DED236F66E9D8982EF51B80346E15213879835669ABDE1B268CF87D66CFD1\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"93431878392\"\n            }\n          },\n          \"PreviousTxnID\": \"D48F641BA568AE214C1CF626EC15517E19166DE9F1629AD955D995478CD548D6\",\n          \"PreviousTxnLgrSeq\": 68015398\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"2\",\n            \"Owner\": \"raLEGx6aGsVshgdT3oGzM2nyv8oAruC8Wf\",\n            \"RootIndex\": \"13523ED3B75624DDAD43C86F5E745EEEE8D74C60D863A52CF9D783B05C9D425D\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"32D232D4E4084B552305AAEB22E3412D90D8B7E5BC72D905ABA556D6760BB6E5\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rLCKThc3nyrBN63QzPHKoHHPA2iN8RH9gp\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365211C37937E08000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"5\",\n            \"PreviousTxnID\": \"E4BD1109870C39DA34F5D362ECF8541FC87BC72476B534560414B1BB94E51829\",\n            \"PreviousTxnLgrSeq\": 68975087,\n            \"Sequence\": 67704218,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"32E8F26320B6B9EA1027D26796A3BD6518A8965BB1BFD53A0A4DBC95943F8C5A\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"12000000000\"\n            },\n            \"TakerPays\": \"60000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"e6b\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rpVr26FVpK1G1u8vyMwsKnpXn7iycrYise\",\n              \"value\": \"9999610698224590e-1\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"3300F250113E6E9DE80D75EFEFF4E076DA82E341D58389DD84D1097E45981DD2\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"2239826471.975726\"\n            }\n          },\n          \"PreviousTxnID\": \"4764518ACD64A6F10BDBB9BE3589ADA0312F0493F0AA0D51540768E84357CFC7\",\n          \"PreviousTxnLgrSeq\": 68884252\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rKjRbDnEwfSRjozGgD1M2dBU54xVtv57aQ\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36531550F7DCA70000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"2\",\n            \"PreviousTxnID\": \"05E02BB8F32C6B81564FCADED6419F207D545023FBB44203B1DEA46D615EDECC\",\n            \"PreviousTxnLgrSeq\": 68883822,\n            \"Sequence\": 63167743,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"3359E918C33C8975ED5C1C858DEC6134CEA9B7D6E5A5BE6F729E629D59E6C0DA\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"5000000000\"\n            },\n            \"TakerPays\": \"300000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"1835698004287651e-3\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"42e\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"razceqmpdpjLd5o52i1GiaZJhmB8SEbfCa\",\n              \"value\": \"1000000000000000\"\n            },\n            \"LowNode\": \"2\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"343FA5022B2468EAC06DEA06652981CDF3934204EA0798B8A6D2126F8BA25DC0\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"2978907871287651e-3\"\n            }\n          },\n          \"PreviousTxnID\": \"2DF8A2FE1F6962DBA117F34104091F76B7B0D7B5973D5FB74FDDD4FFD166533E\",\n          \"PreviousTxnLgrSeq\": 68897069\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rBVauSrW9MhaNcszTL125KttqSixQmUDuK\",\n            \"Balance\": \"121438330\",\n            \"Flags\": 0,\n            \"OwnerCount\": 24,\n            \"Sequence\": 67761586\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"348F495C9A1055B39EDDE6169141D0D0E84976DFAF33CD270810094434FA2D60\",\n          \"PreviousFields\": {\n            \"Balance\": \"60785469\",\n            \"OwnerCount\": 25\n          },\n          \"PreviousTxnID\": \"19E789000D7B0627D33585A721EC822550F91AA4711C48411A8C57766984BA31\",\n          \"PreviousTxnLgrSeq\": 69044001\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"raANwNJ9aqncwhGT1Eh9mksqTvAMm3WZG3\",\n            \"Balance\": \"158094654\",\n            \"Flags\": 0,\n            \"OwnerCount\": 36,\n            \"Sequence\": 67554136\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"3491E150DBFC5A9373C500689FFE1F1C5A3761F9119405A10807626D06CA07D6\",\n          \"PreviousFields\": {\n            \"Balance\": \"135594654\",\n            \"OwnerCount\": 37\n          },\n          \"PreviousTxnID\": \"A0E4373D4648B121F1F8244ACDE4443452FE60916FD123FF69AF54FAC42DA865\",\n          \"PreviousTxnLgrSeq\": 69059677\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r9edE9m7sNZEwgT6foU8ahfA1ocrNify92\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520E9004CEE310DE\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"1\",\n            \"PreviousTxnID\": \"EDA524EF8CEA48D24836861E2C7EC79BD662AA787FD0DDF54105273F9ADCCFA7\",\n            \"PreviousTxnLgrSeq\": 68997637,\n            \"Sequence\": 67529715,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"1158243266760922e-3\"\n            },\n            \"TakerPays\": \"4747639149\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"3498D7083D22154CD67B549D9BE4602FE09C086498DEDDC5083C1B316FA535A5\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"1159149885074611e-3\"\n            },\n            \"TakerPays\": \"4751355378\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"7\",\n            \"Owner\": \"r9guPT5E5ZDd4hPpLJC6UnXCGoRB8tZ2Jr\",\n            \"RootIndex\": \"FF1632262D5EE66AC3F4AC627288D38E7C565B39D4C05F5722F4C468445CC1A8\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"34BC769BF6CFF709F0F2890ADBCBC99CC261E529B737CCEB484D775A4FCB8FA3\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"raDJvZX8gbRfZ3hUWimZPdVcDRzsZQdhmr\",\n            \"Balance\": \"2090263532\",\n            \"Flags\": 0,\n            \"MessageKey\": \"020000000000000000000000003DB4BD44D6AF755BC4C4659E85E070BF00B22815\",\n            \"OwnerCount\": 588,\n            \"Sequence\": 63094242\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"34F4D028DE429203466CEDE16B37E746DDCA4636291C0AFD84C39C469A78DD2A\",\n          \"PreviousFields\": {\n            \"Balance\": \"1890263532\",\n            \"OwnerCount\": 590\n          },\n          \"PreviousTxnID\": \"A1531C2E47013B297142023F136F9C0EA33305F4B175EA3A8D8C4C0769E96DC2\",\n          \"PreviousTxnLgrSeq\": 69064094\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rNk5vizuipEGcr9cNVXnh1eBjhaMFqFs42\",\n            \"Balance\": \"17082053193\",\n            \"Flags\": 0,\n            \"OwnerCount\": 162,\n            \"Sequence\": 67689580\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"3512809FC0F5BD40D11DD304481AD61B33423A8689298031DA769CE4773693E6\",\n          \"PreviousFields\": {\n            \"Balance\": \"16992053193\",\n            \"OwnerCount\": 163\n          },\n          \"PreviousTxnID\": \"5329C39ACE75EA7141E7650141DCFC5D575EEBAFA5A54F6EC507942A6DDBAE03\",\n          \"PreviousTxnLgrSeq\": 69057833\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rPfw6T9Nu154bW5Yqyd351rebEphbe3Fhm\",\n            \"RootIndex\": \"35453FBF6BEA29FC95F598D196825A011D68A23D85A2509D90DAF9C02A1A7262\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"35453FBF6BEA29FC95F598D196825A011D68A23D85A2509D90DAF9C02A1A7262\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"3\",\n            \"IndexPrevious\": \"1\",\n            \"Owner\": \"rnhFkVQVhLHoMBNc5aUNk5fRvZfXmt16nz\",\n            \"RootIndex\": \"1B1AC455FA19BA9056546A5552C78046F3720AD8F648D59F17EB86A6777B50CB\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"35510CBA6FE7359ED8928BFE2D8363F2DACA84863910F4591DDD0C48B7C43496\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rBHSrXq2LzGniUp4zypCRk1isLw1ywLPHv\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36531C6BF526340000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 0,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"538C8026D2791193094972A9F87032199CE10EB602E2C706268553F32B656F0A\",\n            \"PreviousTxnLgrSeq\": 68998288,\n            \"Sequence\": 68976410,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"3554ED296313AC462096713728AA6FBF09ED5AE5AB6F87C0C6E6C6821B3E0788\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"50000000000\"\n            },\n            \"TakerPays\": \"4000000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rnhd3RdnLUZY4sYxS2p5zTJk24zHB7VyUo\",\n            \"RootIndex\": \"357D4447B4656DBE99D38DAE94198FAA8D003993BD75253C02C8292D55FC4B2C\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"357D4447B4656DBE99D38DAE94198FAA8D003993BD75253C02C8292D55FC4B2C\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-2459239618536001e-4\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rKMLJSbumUE4mnXET6X1DDFF6JsN8wE8x9\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"a80\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"359C720C68A4FC1A2840FFF62F1EF4EFA4E946E0CF9A05AC63FFD04DE5F6C5A6\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-4459239618536001e-4\"\n            }\n          },\n          \"PreviousTxnID\": \"56E3A8FC6124E1B37100E9FEEADB7BB28DB30C2DEC93957E85C6C9AA8DF7CA31\",\n          \"PreviousTxnLgrSeq\": 69048812\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"6\",\n            \"Owner\": \"rno35bcvBqLMETwksdhSiUuDQquXyoBtem\",\n            \"RootIndex\": \"0E1B1783E006D11D441B6ACD97226A2821D329C78EAEF5A35F7BAC5DDD1777F1\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"35ADD7FC447868673CBCEA0E9997FC110120D82DE23341F1794F424D8A725129\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"2d5\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rDwdy5963o51eDFKzgJ23VJUy44AX3QrS6\",\n              \"value\": \"1000000000000000\"\n            },\n            \"LowNode\": \"1\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"35B7C29DCF857B0F26454DA183D189C8A7E9D900D72EE075DECC179F23B05586\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"7785989866\"\n            }\n          },\n          \"PreviousTxnID\": \"F1C1411336FDFCA202457CE456579FC11EED4D5082FCFC0717E09CE64CA9BED4\",\n          \"PreviousTxnLgrSeq\": 67951443\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"3\",\n            \"Owner\": \"rPVXceb6wrQp9apSTtyZmWcxKmYRBnCsdt\",\n            \"RootIndex\": \"5FD3FE72869B748A67BCA2E1EEF95480080E23C9D9CFC33AFDF58AA02D82E93D\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"35C930D8EA842F3C67EA707593BC46D76037D63E96DF560C38DE753FA5AB1C6F\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rp9kJTnnfXrjwVFxGRWfjUbJdmxkGP4cif\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365212795F58AD955E\",\n            \"BookNode\": \"0\",\n            \"Flags\": 0,\n            \"OwnerNode\": \"7\",\n            \"PreviousTxnID\": \"EE2B8A727FABC68DF29D7302B85C37D7E6A9247229655EC4EFD9DC8D1AE4F569\",\n            \"PreviousTxnLgrSeq\": 68971394,\n            \"Sequence\": 65950481,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"366CE3869B3979BE2BC732D0DBFF3C88C55CC772CF186D216369B1D58D232AFD\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"1003886481267931e-4\"\n            },\n            \"TakerPays\": \"522020970\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rB3bSANCCKpiQa4aMd7b4vQZ3pMTh8UXZh\",\n            \"Balance\": \"5916763306\",\n            \"Flags\": 0,\n            \"OwnerCount\": 6,\n            \"Sequence\": 67122275\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"3677FB81FC7F2E06B59908F869D64F71C4767DC9CB961948863CA5C535F64DDE\",\n          \"PreviousFields\": {\n            \"Balance\": \"26722923\",\n            \"OwnerCount\": 7\n          },\n          \"PreviousTxnID\": \"92124DB0EE6FC777F0F53CEB778D5B15A3D11D0B286DAA1A42F09B2BAC5E8F14\",\n          \"PreviousTxnLgrSeq\": 69004726\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"ra76UpbMwxu2GePpQeV7dogXZUxvn8upup\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653038D7EA4C68000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"b\",\n            \"PreviousTxnID\": \"B919B73FF44A7A6780DF0F4C44419052D6F870BD88F3D4F99F64D8E6365031EB\",\n            \"PreviousTxnLgrSeq\": 68968639,\n            \"Sequence\": 67417514,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"36A801BED7018F447260FF99C5330C36326B773AB5C94C4EB5C8BA9C93281FBD\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"4000000000\"\n            },\n            \"TakerPays\": \"40000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"c7e\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"r9ma91EcMDXDCLQZDvceT9tDwHRT41gumt\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"LowNode\": \"1\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"36B637EAC2C6E3C04AF0BAD04A618F9F9B7E30523A92375238429E3412DB17A5\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"7786389866\"\n            }\n          },\n          \"PreviousTxnID\": \"482E5B69208C60845C39D333ACBC222CB4AEAA7B5463553680D6CEC5A10D5540\",\n          \"PreviousTxnLgrSeq\": 68783250\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rEjghQohwSDxD7d3NbTdrzRLGRRsGf7qwN\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36530886C98B760000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"4\",\n            \"PreviousTxnID\": \"5A53C44B1272FBFA83F536C3E9EE5E6C3C056F82DB99225A4F0C41E76571C5A6\",\n            \"PreviousTxnLgrSeq\": 68898286,\n            \"Sequence\": 67416501,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"36CBEE605B80FC44A33D1EB767F3D302497181C4EBD05F0799459F0D787E2F25\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"50000000000\"\n            },\n            \"TakerPays\": \"1200000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rwJrcmU1fHLmHgWcKC1D4bZQNkUGJs165m\",\n            \"Balance\": \"254839044\",\n            \"Flags\": 0,\n            \"OwnerCount\": 82,\n            \"Sequence\": 66648184\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"36F509580B6867321DD80528AC594F0249F80C001BEAE10BD01232C3C4A7D169\",\n          \"PreviousFields\": {\n            \"OwnerCount\": 83\n          },\n          \"PreviousTxnID\": \"E5ADEF07D1BC485105108C689C4B85EA60DFA5A43E68CB80960DFD1F81315A2E\",\n          \"PreviousTxnLgrSeq\": 69049168\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rBCS9nAyaFuM8LDym5gJGRxEqmmH9mRhxW\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36531C6BF526297A08\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"6\",\n            \"PreviousTxnID\": \"7CDEE8CE18B6F82C6FD071899C5B9716D3699029497DD1F4528155D4A43193FF\",\n            \"PreviousTxnLgrSeq\": 68897571,\n            \"Sequence\": 66613799,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"372073DB25588502757B6C4FB1E3796DA335D70E729CE6632B1D06A7D9A4D104\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"1160000000100000e-4\"\n            },\n            \"TakerPays\": \"9280000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rG7WNJTTMRQma1eeWs5CDv8LwsLb3QQhvv\",\n            \"Balance\": \"83073296\",\n            \"Flags\": 0,\n            \"OwnerCount\": 9,\n            \"Sequence\": 65803332\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"37294041C758143D17F6FE565ECA238CFE6BAA4829F1BC705D86C8AB9BF89D3C\",\n          \"PreviousFields\": {\n            \"Balance\": \"83073294\",\n            \"OwnerCount\": 10\n          },\n          \"PreviousTxnID\": \"D313BE6AB77AEFD855AF91C8D43F0224C040213C0CF6B81E51FF19901DBB6BC8\",\n          \"PreviousTxnLgrSeq\": 69058925\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rshXc1NnrPiNRvKbbmnfgQpiSGYugiFUG7\",\n            \"Balance\": \"174584346\",\n            \"Flags\": 0,\n            \"OwnerCount\": 21,\n            \"Sequence\": 68652679\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"375E17027669463A8D2902A408D862B08F6D4AFEF275F85ADB76833B596E4DBF\",\n          \"PreviousFields\": {\n            \"Balance\": \"54584346\",\n            \"OwnerCount\": 22\n          },\n          \"PreviousTxnID\": \"1278A29C7D1F23A47D5E6E05B85425CA638DDF8D3FE5B6A01D62D55666926C8C\",\n          \"PreviousTxnLgrSeq\": 69044441\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-22217969598\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rJNmHPHrMr649at3SBHakJ38mRAQZA9pvs\",\n              \"value\": \"9999999999999999e-1\"\n            },\n            \"HighNode\": \"5\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"7fe\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"378BE16FA5CAD961450095B8675E2CE5C78D5841A5FB449B73FF228DC1337AB1\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-23357969598\"\n            }\n          },\n          \"PreviousTxnID\": \"9F3466E05B9BCA757F65A3FC5F336674F6A24BC1E7040F7F7DB69BC607960496\",\n          \"PreviousTxnLgrSeq\": 68983839\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rHyR27TRJ73Eu8bqe5wBxX64hJ9Xf2c5XQ\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365207D0E369505300\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"1\",\n            \"PreviousTxnID\": \"27F6E4A95B8EC6202B7089D3D770C03DF3477F152A9790D2B8B0974BEF4ED823\",\n            \"PreviousTxnLgrSeq\": 69059675,\n            \"Sequence\": 68895669,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"379CB700213CFD41AC4CB3E297B79E074B9CF0EE7E43E10DA751598B1BDFACE2\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"50000000000\"\n            },\n            \"TakerPays\": \"109999999\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"raxn3rqqdW28ZVrFAQ33AUrvdaTSv34DSX\",\n            \"Balance\": \"304479087\",\n            \"Flags\": 0,\n            \"OwnerCount\": 117,\n            \"Sequence\": 66385982\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"37E74ED11B4CCC317350459D6811CBF6447CB692FF139982C273C9E50739C49C\",\n          \"PreviousFields\": {\n            \"Balance\": \"249977158\",\n            \"OwnerCount\": 119\n          },\n          \"PreviousTxnID\": \"34D01B5B063282F1BE3AD1E0B237C09836D3141DC37E458A4F06DA7C215DF1B0\",\n          \"PreviousTxnLgrSeq\": 69032062\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rh9MmnkJaQ1P1Y6ZzmRFpQAc9UdH6pKTiS\",\n            \"Balance\": \"6176844903\",\n            \"Flags\": 0,\n            \"OwnerCount\": 855,\n            \"Sequence\": 66703893\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"380CB21754B74991B3CEDFCE3BF09F0BB9A6E4B3C4D5B38D985F323B9E793357\",\n          \"PreviousFields\": {\n            \"Balance\": \"5768292903\",\n            \"OwnerCount\": 856\n          },\n          \"PreviousTxnID\": \"4C4A4C213ED8A6E15C0DB296DD3297CC7CD1ECA10F00AC35A6984D46100319C4\",\n          \"PreviousTxnLgrSeq\": 69064166\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r9Bq12mZUmUByGGcnu8tvj2KYAcJQ4zbTL\",\n            \"Balance\": \"45665719\",\n            \"Flags\": 0,\n            \"OwnerCount\": 3,\n            \"Sequence\": 67987245\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"382806442C620866CE07AF63D4F5379D06F2DA2396EB8002E9339C2E1BABE519\",\n          \"PreviousFields\": {\n            \"Balance\": \"20111377\",\n            \"OwnerCount\": 4\n          },\n          \"PreviousTxnID\": \"1EEAD6B80071AD27F40D538959A67C30FF7C4AC6984A9630F7C851EA1256215D\",\n          \"PreviousTxnLgrSeq\": 69024498\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"b\",\n            \"IndexPrevious\": \"9\",\n            \"Owner\": \"rpRWz81LgJfwcxBFMMxwnMttsHr8VoMZeR\",\n            \"RootIndex\": \"73815C0BF6187B3A7D4124647C6F5850F8897D70DA13A17A02C9783120AFFF80\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"382DB5BD62B8B07F972833037B078B552565A80188BA251FB205C4CD92F41CB3\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rJxQUBBc7qcHrGcjrb265KwXeZrVio5Eri\",\n            \"Balance\": \"887258312\",\n            \"Flags\": 0,\n            \"OwnerCount\": 74,\n            \"Sequence\": 67219951\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"382EDB603C36AD25AEAFCDF978A4569E84C45203EE496DB9E2C75E719B420761\",\n          \"PreviousFields\": {\n            \"Balance\": \"585161975\",\n            \"OwnerCount\": 76\n          },\n          \"PreviousTxnID\": \"E4850422EBE6F47D2D564BD3F89A4F7E4218FEB68D6B764FB52AD50F822B2728\",\n          \"PreviousTxnLgrSeq\": 69062810\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rGCr7TstZbRvToumrTKaUcTX9JGKVLsCVB\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365218DE7655B5EF72\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"7\",\n            \"PreviousTxnID\": \"B66403357ECCB9B67CE2603B4E3C0B3E308FA55F2C9CB7243C6B6A309BD49896\",\n            \"PreviousTxnLgrSeq\": 68927042,\n            \"Sequence\": 67407740,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"3845206F7C2CE62098FDCCF572B69FC0ADDF99352170D80F27B2F92A27C5E64F\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"1079467827.39087\"\n            },\n            \"TakerPays\": \"7556274\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rpq5MrSjiQgMj3Rk8Kvf1L3Gzh4xp1CUdZ\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365222FE85D709A000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"3\",\n            \"PreviousTxnID\": \"F5162A9D8043DEB1E2188917E38549177D8BBD44D83910F8DB7D8E96D5C3D5AA\",\n            \"PreviousTxnLgrSeq\": 68888983,\n            \"Sequence\": 67528315,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"3853B0652F5B819099B5612580F0861CDB1F67020F684AA738E66EE822BB8912\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7800000000\"\n            },\n            \"TakerPays\": \"76830000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"7\",\n            \"Owner\": \"r9ny1UWruE383T7YTyQgiH4re75gzGpKqa\",\n            \"RootIndex\": \"556D277A7E0323C2C5C8464B98717FE842BB5233833B666B51AEE761ADF7D55E\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"3894F5BCCCB75490787EEA1061F49E9B2165E7F2E5D20E908F5A18B39D733978\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"2\",\n            \"Owner\": \"rKnBQjFdG2pPCrKiUmeZZZ6YjmuCyWVta\",\n            \"RootIndex\": \"6766479642E25EFBCC51417BFC1F19E6A52F36DC3960CAF93371EF91CF0E9647\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"389750B46C6C7A55D6EEA7639E2E3762863B551865DC39E60D85A0CDA46E4C90\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"3\",\n            \"Owner\": \"rhw4L75RKqQwheqkwPMM7sQYti6hmLWUni\",\n            \"RootIndex\": \"1CC9934F3EDB91CB64C5440A8A35F4A4DEE1825C9A67162BA67C3F229B1949A4\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"38DD15D05DEE165F57AF01391105AFCF45497285F8443ECE239730A01096BDD3\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"5\",\n            \"IndexPrevious\": \"3\",\n            \"Owner\": \"raxn3rqqdW28ZVrFAQ33AUrvdaTSv34DSX\",\n            \"RootIndex\": \"02D86EA2A8285DAA5E91B63BC2954A5B009A46FEFE0EC79D7E7F156E34E33A03\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"38F1DA21F50DC376CA189F3399606391F9D9703C5B7CA0B69CF7857F16891BDB\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"4\",\n            \"Owner\": \"rNoN8BUzTSY5oyJmAMiKNGo1k8PSxhyJzc\",\n            \"RootIndex\": \"B34A4E63D0AD73600B4D08C86ACA9A1100442DC13674F78E2029B00697973C9B\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"391645D68C9EA330E2944A0FC09947FB09CE035D66446DACF60AF5961F535098\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-30147865322.1396\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rNCESwgSpY1pUyhQGzGd7T38zXXzxUCLLj\",\n              \"value\": \"1000000000000000e-1\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"ea2\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"395BDFAC537942B952150F922FCE2FA01C753FC3BA9A07CF4783321477C891B5\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-1507393266106982e-4\"\n            }\n          },\n          \"PreviousTxnID\": \"A3A49BA56F58691FDFD4F098579EEEAC4501C061E8F953C2E5FC4AFF1F35DE07\",\n          \"PreviousTxnLgrSeq\": 68997438\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r4zXDbBBSbrguDq5pTzabnMgXY7n5qg2jb\",\n            \"Balance\": \"650224018\",\n            \"Flags\": 0,\n            \"OwnerCount\": 153,\n            \"Sequence\": 67256161\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"397497360EF1D9D1B1EFBD7F857C0B66FEEEC8B92807D6C4A1BDF68A2E3D9186\",\n          \"PreviousFields\": {\n            \"OwnerCount\": 155\n          },\n          \"PreviousTxnID\": \"DDE62909D482F96A31DEF6E3CD3D24C41B8F400289054DABCACAC41195D0ABFC\",\n          \"PreviousTxnLgrSeq\": 69061661\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"r3Xud98xTUTiXxGp2LbmFtFTWRWeaZSCad\",\n            \"RootIndex\": \"397D669A2C93ABFD206376DDB58FF394D4AC0E718882E8D528018B1872CB3444\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"397D669A2C93ABFD206376DDB58FF394D4AC0E718882E8D528018B1872CB3444\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"f1\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"raxn3rqqdW28ZVrFAQ33AUrvdaTSv34DSX\",\n              \"value\": \"1000000000000000\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"39B795BD4A769BE5C2C03CF8A416B62671AF8A8B0FB356326688FC80A7FCAD8E\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"7785989866\"\n            }\n          },\n          \"PreviousTxnID\": \"B0024ACBC897D271593DB39D52FD162B89F22BB66291C008387C69E03338E53C\",\n          \"PreviousTxnLgrSeq\": 67948956\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"c\",\n            \"IndexPrevious\": \"a\",\n            \"Owner\": \"rUEnyBAH4xxjS4ZkMrki8GnNvsvysjSuZy\",\n            \"RootIndex\": \"8DC41A53F94F2624AF80BB59B57FDCC68C069F704552E53600F7C9CC86046299\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"39F35E57D387E2427360B0B1971624504B299123BA8B00D0A5AA50D68C779851\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rJCvziKjUwgoNgwNNcy2SwqVMwPFxqBjvn\",\n            \"RootIndex\": \"39F43F1315D3BFCDE1F85476AADE48D3252FE92344ED68A031A933F4603012AB\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"39F43F1315D3BFCDE1F85476AADE48D3252FE92344ED68A031A933F4603012AB\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r4AXMmLxiAtMf5yvyqqCZeHVhswjdmNgBx\",\n            \"Balance\": \"1129171297\",\n            \"Flags\": 0,\n            \"OwnerCount\": 55,\n            \"Sequence\": 66594836\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"39F4E2867CC7B45858C10E431F0A9A40E3AD39C9B1910059526F3BA21B0532A7\",\n          \"PreviousFields\": {\n            \"Balance\": \"127997432\",\n            \"OwnerCount\": 56\n          },\n          \"PreviousTxnID\": \"FB794FF231053A4B66DA9324803E165F882D0A8BF6F0CA9F53A5300F63A0F709\",\n          \"PreviousTxnLgrSeq\": 69063852\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rGcsBzn4XYzjM7nAXBUU163LfyStL1PZsA\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520B5E620E7DB231\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"2\",\n            \"PreviousTxnID\": \"188F8177BC40136BE45B0CF9267CF6450A70DE108153E9FEC57C9E860C51B36E\",\n            \"PreviousTxnLgrSeq\": 69007789,\n            \"Sequence\": 67544523,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"38049133595.14459\"\n            },\n            \"TakerPays\": \"121757227\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"3A0D77E635D5089BA67624F9C9A1EE2A20A31E15124D87CBA8BC9417E900708F\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rJQe5K8Fxn2ktEMbwaWibo9LEYKHjqDzzw\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652126E7561184000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"17\",\n            \"PreviousTxnID\": \"732EE1A4CF16BAAE08806421A9B656DA890441372EAA88FA5B0713575546BB55\",\n            \"PreviousTxnLgrSeq\": 68999984,\n            \"Sequence\": 66694101,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"3A0E42C7D8212638340A9DBF86D666A39FBA143EFA5F93798520B1EA32E0B1F0\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"10000000000\"\n            },\n            \"TakerPays\": \"51880000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"7\",\n            \"Owner\": \"rhMycFXh1AtyNRL2JeLJmhps2ufxBKY3Wy\",\n            \"RootIndex\": \"DE24D095136B94CEA3BB840A3B096E199560C67829EA2C0480A95604884D1269\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"3A30DEE57712782C8FCBA6660CFA945F79810C0BB5BCAE8626D42EBD74DF77E5\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"d\",\n            \"IndexPrevious\": \"b\",\n            \"Owner\": \"rJKHj2kBpPFHbEu4m2uuSuh5rQEcAYwJ8Z\",\n            \"RootIndex\": \"0DF3691A44BF6069F191C640E51333717CAB481B573621B2287E5E6B69E5AEA4\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"3A330762922907368E14B55B9F1E43606857E67228B3BFF2BCA9C5C383EE115A\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rNARwAxVp9C26pcBpRbFHdw6P5Sxa4q7kr\",\n            \"Balance\": \"80267371\",\n            \"Flags\": 0,\n            \"OwnerCount\": 31,\n            \"Sequence\": 67347513\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"3A33219C632686BE51B056BBD30C4BE23CC61A7297125AC680ACD0669885109C\",\n          \"PreviousFields\": {\n            \"OwnerCount\": 32\n          },\n          \"PreviousTxnID\": \"849D1952DF39889CF0502ECF389386E5BA2C0D4F82BAF91B758617D14BA71CAE\",\n          \"PreviousTxnLgrSeq\": 69006437\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"raZrDVYBJ5whjdgJ1V6FtiYixKesEfDyKJ\",\n            \"Balance\": \"32485664450\",\n            \"Flags\": 0,\n            \"MessageKey\": \"0200000000000000000000000094E2CCA8C5430C24EB02A86DBB4F42BC5896D081\",\n            \"OwnerCount\": 562,\n            \"Sequence\": 58008910\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"3A42F2419F212115B3D02C834E481045496F517044FC64602A2D8CFD14C50940\",\n          \"PreviousFields\": {\n            \"Balance\": \"31880148019\",\n            \"OwnerCount\": 563\n          },\n          \"PreviousTxnID\": \"77389E14149B623A9B4A0B4028EA2F3C7243D34828C150A03C551C33CEC97091\",\n          \"PreviousTxnLgrSeq\": 69059832\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"5\",\n            \"IndexPrevious\": \"3\",\n            \"Owner\": \"rMDc7eVhCw5jjCXU5DGpn2tUV9D7aBBFLx\",\n            \"RootIndex\": \"538D3642C1D106AB920C3EA40313AEBC4D95C5B870A96109ABC83FD42E359D7C\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"3A8085792BB941DC06C8A0571C6BE67AAA843B7822FCBE69B2FC92607D29E467\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"9113032894.7\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"586\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rnpQiciqw8RGKo3NmqAuyZXScNoCNmQSL6\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"LowNode\": \"3\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"3A89202A005FFD6EC3586A9705E3E3D9E5CC01637C5119252C6B41556D0181A5\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"27791482403.49754\"\n            }\n          },\n          \"PreviousTxnID\": \"181DA9D348F1C67DF01074FEB07826CB4D748F7846C543E95947860DFC4224B7\",\n          \"PreviousTxnLgrSeq\": 69052947\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"6\",\n            \"Owner\": \"rGCr7TstZbRvToumrTKaUcTX9JGKVLsCVB\",\n            \"RootIndex\": \"125CAE2FAA187FB7F957C39D75BEE2639F45E0CBC1998B2EBB75D38C6D8F1CD9\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"3A985F3013C5170F8CCB63DEB8CAD244D977C3D5DB8DFFFD1A758FF676B9C3AD\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-98135766.0049721\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"r4LzF7yH5ewjqEVaTpufYTzwH8KyimRrrq\",\n              \"value\": \"9999999999999990e-1\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"90f\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"3A9C1F693453C8896BFC78E24B6FF9811D7323903451848B05128F531F0AA6C9\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-105863825.248082\"\n            }\n          },\n          \"PreviousTxnID\": \"99A8717E6896F088193B992735E7478B0CFDCE04294DFA558D5C80F0D088ECB4\",\n          \"PreviousTxnLgrSeq\": 67974219\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rEkvHXE15kSe5Vh1b7RQrDqKrMUqAzsjGW\",\n            \"Balance\": \"267427559\",\n            \"Flags\": 0,\n            \"OwnerCount\": 58,\n            \"Sequence\": 67132159\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"3AA578E27806254ECAD0080963DA8954E9E5D2CB510D3EF4537B97DEA2C35FE7\",\n          \"PreviousFields\": {\n            \"Balance\": \"182851722\",\n            \"OwnerCount\": 59\n          },\n          \"PreviousTxnID\": \"D53F6602300E9E12C00E1DACDDB767893785801A5206F0338007A326DEB90229\",\n          \"PreviousTxnLgrSeq\": 69056718\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rPy5zQthBW1gHiWbdHmbPkGtF9jM5XQGNs\",\n            \"Balance\": \"125565629\",\n            \"Flags\": 0,\n            \"OwnerCount\": 27,\n            \"Sequence\": 67541002\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"3B08A1CB0D4A0F84E3889BFF7AAD28205095DA6FBAE56C99F521CAF19EA893B4\",\n          \"PreviousFields\": {\n            \"Balance\": \"66187325\",\n            \"OwnerCount\": 28\n          },\n          \"PreviousTxnID\": \"6F44D727E773BF79A844B972B21D82AF1336DEBBC657A7B678B6CF58B5EA4F08\",\n          \"PreviousTxnLgrSeq\": 69053384\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r31dxSZgmArpDtwoLPAftYtU8bHauuxwA5\",\n            \"Balance\": \"56978474\",\n            \"Flags\": 0,\n            \"OwnerCount\": 5,\n            \"Sequence\": 68766345\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"3B482058938F96D3C1373BD0B0382DBF718351187F51955865FA9D1004E67C6A\",\n          \"PreviousFields\": {\n            \"Balance\": \"25887579\",\n            \"OwnerCount\": 6\n          },\n          \"PreviousTxnID\": \"E05B0BBA53D7211EB6AF7876209F249B18CB7AC9BD1271A2BF511DCDF998F020\",\n          \"PreviousTxnLgrSeq\": 69026209\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rUEnyBAH4xxjS4ZkMrki8GnNvsvysjSuZy\",\n            \"Balance\": \"1429216663\",\n            \"Flags\": 0,\n            \"OwnerCount\": 303,\n            \"Sequence\": 66504749\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"3B7337AFBD86F9BF2CDB02DD212D14C9AC008CC99B5016AC7951DD11A6B357A3\",\n          \"PreviousFields\": {\n            \"Balance\": \"1403170888\",\n            \"OwnerCount\": 304\n          },\n          \"PreviousTxnID\": \"3A6CC361AFA82874FE1A534D2BD6EB84F15787B27FF56D94E4D093AD288AF2F6\",\n          \"PreviousTxnLgrSeq\": 69063393\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rfzG9eLEj6jZUbign4K98pmLSQt717FVaj\",\n            \"Balance\": \"64663507\",\n            \"Flags\": 0,\n            \"OwnerCount\": 9,\n            \"Sequence\": 68887829\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"3B9A52DEC6C6C30591ECFF175EDB3CA15232DC751B8E3D2A253CF1F96FB32AC6\",\n          \"PreviousFields\": {\n            \"Balance\": \"31715616\",\n            \"OwnerCount\": 10\n          },\n          \"PreviousTxnID\": \"25C30A7F8A64636EEDF0C39ACB2F735E701A560729027F80A4A529BB579F7963\",\n          \"PreviousTxnLgrSeq\": 69007450\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rUkBkCrKSXyNbUcj7hNC684Z2TrzouvZBr\",\n            \"Balance\": \"185003120\",\n            \"Flags\": 0,\n            \"OwnerCount\": 6,\n            \"Sequence\": 67458716\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"3BA2AA4A0FB49E543CED096FD31CE4E3E1CD7C965E8AC19E48B6071E7BC25E14\",\n          \"PreviousFields\": {\n            \"Balance\": \"28545977\",\n            \"OwnerCount\": 7\n          },\n          \"PreviousTxnID\": \"B12E639C3D165CB56C840F7A8CEEE8F5126232672F53C44566429C891AB77BC0\",\n          \"PreviousTxnLgrSeq\": 68911732\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"f\",\n            \"IndexPrevious\": \"d\",\n            \"Owner\": \"rpzdffxTgRvMawxbRSs9c26T1FTEjfgznz\",\n            \"RootIndex\": \"34462DA9C9AE1247915240AF40DD5D4D7A0EB387151B892062B71DF45EE49138\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"3BAFE1B8690FB7D7A4326A7DA0E932243381F9978751480E915F4980AC38B390\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rJMPwHXPwcnQCNmNbaRq2Lf5nbsivkCJrH\",\n            \"Balance\": \"341619473\",\n            \"Flags\": 0,\n            \"OwnerCount\": 141,\n            \"Sequence\": 67216411\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"3BB1B482C5D0C2E3BF026D3B6507FABCA73F455FFC7DC5C59122AB89DA534E99\",\n          \"PreviousFields\": {\n            \"OwnerCount\": 142\n          },\n          \"PreviousTxnID\": \"01580243FCF422F17903FA905A6ECCBCFFE5807AC61C9F6A96CEE5563988ECB2\",\n          \"PreviousTxnLgrSeq\": 69040905\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r98DGNQEGR9x2bhRVBbuiHAqxq2aDD6pKa\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521144995DE0F31C\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"8\",\n            \"PreviousTxnID\": \"C63619F313EE594CE542ACA3C1A3120F6CC5A9AE4BE30B6D4CFA781766220328\",\n            \"PreviousTxnLgrSeq\": 68976750,\n            \"Sequence\": 67202745,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"3BBB37AE9D62FD277B105FF1A170945D550C8036A552928FE6B13B5D65173C5C\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"4841200573376926e-4\"\n            },\n            \"TakerPays\": \"2353065587\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r3pJZNxQwVRMyeohSyy5C9ZCJzvRWVAXLg\",\n            \"Balance\": \"299655605\",\n            \"Flags\": 0,\n            \"OwnerCount\": 72,\n            \"Sequence\": 67434618\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"3BCF443355E98B4529C8ED16299D3FF6AB66A7EB0FC8470F02297F746EBC9145\",\n          \"PreviousFields\": {\n            \"Balance\": \"159024730\",\n            \"OwnerCount\": 73\n          },\n          \"PreviousTxnID\": \"3D430682971BEB67F6E19CE13E4DA7F98129B10E6BADC09F7E521CB650E2ABD2\",\n          \"PreviousTxnLgrSeq\": 69063131\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r3VQGy3EVus3nKJz33du7UqZDMFEnVmHLL\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521264D1E0C0AD70\",\n            \"BookNode\": \"0\",\n            \"Expiration\": 726771908,\n            \"Flags\": 0,\n            \"OwnerNode\": \"6d\",\n            \"PreviousTxnID\": \"00CB001DA986E663228737910E461C510C0079BCB6A53C331A2E8A9F4F1AFA04\",\n            \"PreviousTxnLgrSeq\": 68945821,\n            \"Sequence\": 68248234,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"19072058.823\"\n            },\n            \"TakerPays\": \"98743\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"3BE2070FBEF55BACE1B41055C398DF3933F1236323F7ED26F9A3A175EF03A100\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"9724954411.5183\"\n            },\n            \"TakerPays\": \"50350000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"8\",\n            \"Owner\": \"rKeFfq8ZvHbFWbsQBAeTB5Ng7aGtoLN84K\",\n            \"RootIndex\": \"58A8C15F8CC7918E70D676CAE346D516C526A39F891659E227CD5E3A3E605221\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"3C066125508FB9207CDDA41A7C930C95DA2035DB4AA51650FD2FF012A36479C5\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r92aDr7NzvcY9DSKLE8V5q7dvnu7LvVjWB\",\n            \"Balance\": \"1045607581\",\n            \"Flags\": 0,\n            \"OwnerCount\": 12,\n            \"Sequence\": 67564135\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"3CB655F4ACF27546038CF034CB2DCA0703B7783B729C9A5D044F7ADA9F37C34C\",\n          \"PreviousFields\": {\n            \"OwnerCount\": 13\n          },\n          \"PreviousTxnID\": \"4528134A74154FAF4A435B612F5A1AFE3D824D90D42A6C4F1643D323191F421E\",\n          \"PreviousTxnLgrSeq\": 69051030\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rfc7iQscNnWECTgwfRg4T6MExyVTCiTWTV\",\n            \"RootIndex\": \"3C129B878FB44E2055C3C0E05026BC761694C10C2B0255B9B6FB70012D43555E\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"3CDB39F9E02F79CA82186E23ACE57A3C1260FDF2B33A9A292EBCE997A3A818F5\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r3pDCAfw2nB715iBJVMix9M8adFpHyfGRN\",\n            \"Balance\": \"479390728\",\n            \"Flags\": 0,\n            \"OwnerCount\": 38,\n            \"Sequence\": 68179464\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"3CEFA7472FBCE0A2A50CEB492426DC09ED7D0BF8DCA297673E79ED30D0C60D80\",\n          \"PreviousFields\": {\n            \"Balance\": \"215390728\",\n            \"OwnerCount\": 40\n          },\n          \"PreviousTxnID\": \"107D9347E7502E436A0A5370B0A4F8D419C4B80CDFADFCC3ABB3017B6DCECA4E\",\n          \"PreviousTxnLgrSeq\": 69063680\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"2d4\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rLaYDDZDLBvzSGxKhxDEKovMrQ3CoDXQV\",\n              \"value\": \"1000000000000000\"\n            },\n            \"LowNode\": \"1\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"3CF18443D636F681249A125BFE3362B66A8D8D41DEDD0BD61CC5FB9C23130DD7\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"7785989866\"\n            }\n          },\n          \"PreviousTxnID\": \"51995FB803845C35768F4812BF22BD523E1BF2035C6443824E0F3A1F28DB0D2E\",\n          \"PreviousTxnLgrSeq\": 67951438\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rNPZ49ucC4zKoBPgyAsSC7oMSSoh1icnZK\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520E35FA92DF12D2\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"8\",\n            \"PreviousTxnID\": \"80FB9B27D39D324D4486AE832D7B4A65D5E12672BC73B9E1BCE07C295189D494\",\n            \"PreviousTxnLgrSeq\": 68998519,\n            \"Sequence\": 67158824,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"3D0557EB58D7BF07B6432C4C9423152813249D8BFE3FFB416DB787F60E6435D2\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"1277712118733569e-4\"\n            },\n            \"TakerPays\": \"511084847\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rNRoroUiCSQM3hcrEkwV5p6uCx8WSm3Mjy\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520FFCB9E57D4000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"b\",\n            \"PreviousTxnID\": \"7CC1DC1F311D944CEDE487BA9F5474A7A3AF2C782F3D728306A913A94D3E1BA8\",\n            \"PreviousTxnLgrSeq\": 68996564,\n            \"Sequence\": 66470072,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"3D0FBC6EDAF332D372A5E3906F7DFA02837AA523CB54D5AE261E841DF71DC549\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"8000000000\"\n            },\n            \"TakerPays\": \"36000000\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rMrt91RkHZwmYfUbVX72iwmbiaRxnKXjo9\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521FF973CAEF31E3\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"b\",\n            \"PreviousTxnID\": \"7A2BCDD33BC5C0869B16414F408A73D3929671C2653D30CC93C235CEE90341BE\",\n            \"PreviousTxnLgrSeq\": 68964605,\n            \"Sequence\": 65789702,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"3D1AAC59A2FDD1419379E015150D037836D2507A171B789CD2A95239B83E7B94\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"6453287172753466e-4\"\n            },\n            \"TakerPays\": \"5807958455\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"e95\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rh1bgyeVNDBauF3vXuASW2L8MWrdq8XYko\",\n              \"value\": \"9999610698224583e-1\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"3D33FBBE6208B8622D1B873D6BA729BC66790E84B135065CF3734768C3C209B1\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"30771947410.9589\"\n            }\n          },\n          \"PreviousTxnID\": \"888E8581E66F46458CC4D61AFF548E9DE8565B21035F8F94F6DBD640666A2DFF\",\n          \"PreviousTxnLgrSeq\": 68994737\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"1\",\n            \"Owner\": \"rGRyfRcJ7cSYSu6rw5VpNJReEZt9Gzy9a7\",\n            \"RootIndex\": \"A84E96499A7672D22BBC809E15BE6C7AF5F5754462DBE246FCA564DE0499D669\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"3D4389AA9A0C292C55B4DE713250B791776C994D1BFB371509D72C37A59557F3\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rUdhzvzWjHpSjP6CGksiit3bdgGLV5DXZv\",\n            \"Balance\": \"23350710025\",\n            \"Flags\": 0,\n            \"OwnerCount\": 57,\n            \"Sequence\": 67546192\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"3D8A9D72E8D20B9319ABC3339E8EBAE43CA61FA8C2A8C0E02C40302403211C05\",\n          \"PreviousFields\": {\n            \"Balance\": \"22750710025\",\n            \"OwnerCount\": 61\n          },\n          \"PreviousTxnID\": \"2B6F49331D45A7EB98EAED58E7A9F0545B7F7467FD588A2B24D3E60E071075A3\",\n          \"PreviousTxnLgrSeq\": 69031362\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"4\",\n            \"Owner\": \"rwSQqB6yNHd2tiXUhJ2wkULgq3dFua1r41\",\n            \"RootIndex\": \"CE6352F3CE91F872B5D403EBC3ED991F2E309EBFDCBA87F4273CA93E344E695A\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"3D8F602397870D60AA32F742F6182D2A5DBAB5FE452F59C846DDF9E2C20C358B\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rHvia9Ti9HmM9QGixKxxKf9kYS9LUxTrjq\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652097A88283040DC\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"B5AD7E28E35B322ED65F04F6B50C0A16CB42937AF8340BD185AAA76023BDA3F6\",\n            \"PreviousTxnLgrSeq\": 69025849,\n            \"Sequence\": 67121142,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"3DB43519524539905FF0FC66DB6973E4932FAFBD631F8A29C5B45A6A473217C0\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"2446244798712641e-4\"\n            },\n            \"TakerPays\": \"652658112\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rJyPfhC1DLsG22KEG4jS5mDrGtoDcwZDty\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36530498E2D91E9F1D\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"1\",\n            \"PreviousTxnID\": \"D90DA6502BBA6534E18F46F32C739F6EBE6B50719F9A65A3F6130B5425337DA3\",\n            \"PreviousTxnLgrSeq\": 68153641,\n            \"Sequence\": 67175991,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"4282294426.3\"\n            },\n            \"TakerPays\": \"55412889\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"3DCEB085A260B46D2F797EFDCD9A8E5C77B590DB1AC6078D60AA41E9059311E2\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"2\",\n            \"Owner\": \"rfXqSEeWLr4MYYLsESHbsyh3CZhAitzYVg\",\n            \"RootIndex\": \"43F6B52E4C07481E02B9C2573351D31C4CA312B6ED70E1C11A3AB101BA9A2980\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"3DD2888693AAEB79946D5C2817D4847802E93FF3D4B2AE3C672133EE9AE427F1\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"161537611.0459\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"54e\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rHwM7GiRubuut3pJW2ycC4e6vaarV5xp7\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"3DEA06F30B8A72C0C796AF04782A1A33DA0063F6A21C76AE698F1BF5C93E9275\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"94783576292.6939\"\n            }\n          },\n          \"PreviousTxnID\": \"CEF5CBBBED4ABAAA6FF6A8DA8347862A3E389A63C8D6A1897D88545C68B7A920\",\n          \"PreviousTxnLgrSeq\": 68883633\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"1\",\n            \"Owner\": \"rEkvHXE15kSe5Vh1b7RQrDqKrMUqAzsjGW\",\n            \"RootIndex\": \"C2C984AB11E70690A2D4C53BAB0AFA414775BC226B99BC9EF7829CA2D47E4C2B\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"3DFE2B257E5F9B633AD2FD3A9C57F6DD82DF0E55381FDF1BE6BF98DC50159F81\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rpcz3Nun3FcRunaTBPPZ6VK8De82hr2DzG\",\n            \"RootIndex\": \"324B0F4AC27D871A33DA4F27ECEC6CD9612E5F65D525E9549ED360D8F84427C1\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"3E06256A6A22BE6D4C17C811DBF5EF26E1520D4461D2F350075BF2F05D202CC1\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rh9MmnkJaQ1P1Y6ZzmRFpQAc9UdH6pKTiS\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365208577E59EEC000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"25\",\n            \"PreviousTxnID\": \"D277A3539CE1420C19C5F9D3DA02B8BAD70BFFB5C694479AC10EC42A29E0C176\",\n            \"PreviousTxnLgrSeq\": 69038589,\n            \"Sequence\": 66703759,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"3E2343D9FC4FEF4B9FCCD5BA5FEB3B3A3364BFD8C550EE2004D557F1A64B5237\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"1740000000000000e-4\"\n            },\n            \"TakerPays\": \"408552000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rExSJvWnn93G5NfnzZ3YKuPgpQnr8wBsrE\",\n            \"Balance\": \"106708836005\",\n            \"Flags\": 0,\n            \"OwnerCount\": 258,\n            \"Sequence\": 63810446\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"3E48570B16D412B9A14DF0544C463E64379C51D42C7C4A10D5EDE81F4CD0E6D9\",\n          \"PreviousFields\": {\n            \"Balance\": \"102930975239\",\n            \"OwnerCount\": 260\n          },\n          \"PreviousTxnID\": \"6CBF760ED0E3A6F950EE97458A6F9A735DD3217463EF69D4B749DA8495418288\",\n          \"PreviousTxnLgrSeq\": 69064082\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rJFmgWo13y1o6C42H1LC7qDWcu7Z38QaAd\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521C6BF526340000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"4\",\n            \"PreviousTxnID\": \"EB20D0C490FF834EE159D2F49171E1276216D29E230C2B4127516E85DCD12BD2\",\n            \"PreviousTxnLgrSeq\": 68897699,\n            \"Sequence\": 66550662,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"3E50AA5003041D593CD5C40533289B5B2E40D2429C55133D8B41095160225166\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"40000000000\"\n            },\n            \"TakerPays\": \"320000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rMDc7eVhCw5jjCXU5DGpn2tUV9D7aBBFLx\",\n            \"Balance\": \"509530431\",\n            \"Flags\": 0,\n            \"OwnerCount\": 113,\n            \"Sequence\": 66970290\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"3EAC03A78BFB672F3E9B7ECD730F269DD5B9F294FD7B48E3FEE56A69F598C535\",\n          \"PreviousFields\": {\n            \"OwnerCount\": 115\n          },\n          \"PreviousTxnID\": \"2ACEDE5F970DB0B0AAF3478FBA6D1AE44B770855B4A4863C03B69554C4B4B808\",\n          \"PreviousTxnLgrSeq\": 69045551\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rPc9ia41Ad7unkvCE7gKKZPovAuCBPt63E\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520FFCB9E4E4A980\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"6\",\n            \"PreviousTxnID\": \"DBA2005B081D693B0AA0119EA1F03FF96471C9FC3FE582E78110B32CD5A2EB33\",\n            \"PreviousTxnLgrSeq\": 68986215,\n            \"Sequence\": 66718055,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"3EAD99F9EB55A550444875D6A12F5A0A46309A6C617EDE91E02C85C68E1BA2DE\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"TakerPays\": \"449999999\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"f05\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rUqgMfiCKp2L5Y1zobkQTgSdVYLp1PASt5\",\n              \"value\": \"1000000000000000e-1\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"3EC41271221820336D64EEA56C48153D52D760A58B078A151DC179A7AD4C63EC\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"4223866751872249e-4\"\n            }\n          },\n          \"PreviousTxnID\": \"AF0FA5F6924B70D611931AFA16296A8A9A4FBC0A48749D2F33FDFB070FF7E25A\",\n          \"PreviousTxnLgrSeq\": 69021100\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rPCYDR6z5MW5EvxVzPhVa6cfLyckEDWs5T\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365305A618B886FDFE\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"f\",\n            \"PreviousTxnID\": \"852C7441C19B7AFBDA6D1D519EB7321CEF9C4DD8A890D0F51A31CD4E0FC4D2C5\",\n            \"PreviousTxnLgrSeq\": 68915408,\n            \"Sequence\": 67105315,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"3EDB314E340D01087B75854EAD6DCC88B559D031AA798DBD13ABBDDD2F3C2A26\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7785989866\"\n            },\n            \"TakerPays\": \"123797238\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rJNmHPHrMr649at3SBHakJ38mRAQZA9pvs\",\n            \"Balance\": \"612032230\",\n            \"Flags\": 0,\n            \"OwnerCount\": 284,\n            \"Sequence\": 66004548\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"3EDEA9C0AEE2A95DA55851558428B56EC3962B0C11C202BB0336E86C1E09135F\",\n          \"PreviousFields\": {\n            \"Balance\": \"592032230\",\n            \"OwnerCount\": 285\n          },\n          \"PreviousTxnID\": \"701185994EB20326D5698429D9F045C0B540CF84221E26773189EA3CCE013E73\",\n          \"PreviousTxnLgrSeq\": 69062790\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"9\",\n            \"Owner\": \"rJjTUAWDqunqKUB8SgYHV8QNTmvGArX4Lv\",\n            \"RootIndex\": \"D98CD6748A45C1154A0D6C7F78EE70B37CDF8627B89AA865F3955BE0A64F320F\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"3F0250BA8C7F5CD78022624C13859BB1E814529FDE563151BD0EB1C7A85474E4\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rQnNwoWPxGyxMoLogTPHYeK1hGYwJ3b9Sz\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652149B11BA8EB0E4\",\n            \"BookNode\": \"0\",\n            \"Flags\": 0,\n            \"OwnerNode\": \"2\",\n            \"PreviousTxnID\": \"6D9B0CDB3B4F1476C6F8E28C13B2467C5C3BAA44015B9D19A26083A7C5C29FCB\",\n            \"PreviousTxnLgrSeq\": 68923053,\n            \"Sequence\": 67671641,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"3F57960ABFD7B6C036B6582196FFBFEA7752CE77AE13CB38B04F789D7E186E6D\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"31784313725.49019\"\n            },\n            \"TakerPays\": \"184349019\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rHv2LE2MKKrQ83NMbQ2vv1DUDjByosxthL\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520F581B8BABF205\",\n            \"BookNode\": \"0\",\n            \"Flags\": 0,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"C9F9D99911988F5E21D13BC564A501C62EDDE959F2CA2B6CDA03ADB184D4E2C5\",\n            \"PreviousTxnLgrSeq\": 68983986,\n            \"Sequence\": 68499488,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"35262773016.58055\"\n            },\n            \"TakerPays\": \"152299916\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"3F98D05931905BDA1D031395CEE082A83FD430674178B4637FB867711FBD2097\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rHv2LE2MKKrQ83NMbQ2vv1DUDjByosxthL\",\n              \"value\": \"9999610698224570e-1\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"e8a\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"3FCA2553700CE5EAF5FC76F098CF2B3ABEDD367C59D8ED11B482E43097311A86\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-279913459.29345\"\n            }\n          },\n          \"PreviousTxnID\": \"E417C9DE099FA7843976A7600F48E096AF8E0B781CF41A3082F1E8169F00044F\",\n          \"PreviousTxnLgrSeq\": 69059893\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rsHib22BtXCKbRdrodUNNXdxumiaPqZQVk\",\n            \"Balance\": \"291661726\",\n            \"Flags\": 0,\n            \"OwnerCount\": 5,\n            \"Sequence\": 68089120\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"3FCF06331A7D0D81CB551E946EBEEB272BB0AB6F229133A4C3EF568E047FA48A\",\n          \"PreviousFields\": {\n            \"Balance\": \"221661726\",\n            \"OwnerCount\": 6\n          },\n          \"PreviousTxnID\": \"E6A6537BA7B409AB7C1162D066057D9CAB61701D331AC4E18F76790CA76B9A79\",\n          \"PreviousTxnLgrSeq\": 69064174\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"a26\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rpBHrwSGdQm3hE3f6988mSgV9LAzuBsx9A\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"3FCFF2C36753AA9801B5BDAB527E57F5AEE90F88DE36EEAF40E05557EEF858D9\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"7785989866\"\n            }\n          },\n          \"PreviousTxnID\": \"A43BAAC12674166364EB5EBCF7C39B6CB4E7F5AB3EE7A0E60049DE3E86452ADA\",\n          \"PreviousTxnLgrSeq\": 68898851\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rHwM7GiRubuut3pJW2ycC4e6vaarV5xp7\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365210251A9C6B398E\",\n            \"BookNode\": \"0\",\n            \"Flags\": 0,\n            \"OwnerNode\": \"3\",\n            \"PreviousTxnID\": \"1F9417BC9D8CC0DFEC6C84EB6CC29EF5D3FE33286AD76224495A10B9FCB156CC\",\n            \"PreviousTxnLgrSeq\": 68987580,\n            \"Sequence\": 67173377,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"3FF7DD8C4008CD1E45CA73383AD018FA5CE244069C05863A3DA7D3FD9CFB2D54\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"94622038681.648\"\n            },\n            \"TakerPays\": \"430000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rHwM7GiRubuut3pJW2ycC4e6vaarV5xp7\",\n            \"Balance\": \"644591328\",\n            \"Flags\": 0,\n            \"OwnerCount\": 96,\n            \"Sequence\": 67173394\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"3FFB2F904137D89D329C055F6DACFEBA947D6622D40284407665575547979CF3\",\n          \"PreviousFields\": {\n            \"Balance\": \"214591328\",\n            \"OwnerCount\": 97\n          },\n          \"PreviousTxnID\": \"BAF5AE1028D4901BA70683FB3EE3731BCD79E71C5849ADB60C839B3237A2A1A1\",\n          \"PreviousTxnLgrSeq\": 69062643\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rwhKYMZGMmf9zeLdZWq4rs31DQeaxn65R2\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520EEBE0B40E8000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"6\",\n            \"PreviousTxnID\": \"1A8461A0502B98A0CED1BE9D049A3E8C394B06E90BE7A8161F6DE7F9E6193235\",\n            \"PreviousTxnLgrSeq\": 68999070,\n            \"Sequence\": 67373555,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"400F307AB9C3D69174B06AA94922B1838676CC8273EC55B3CF3B05E50BB37A61\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"6500000000\"\n            },\n            \"TakerPays\": \"27300000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rsZ4iqWpnTmdfE4nDDEiaGAn8z97ZV4Zm2\",\n            \"RootIndex\": \"401B71FBC28C9ADC161A6D14C584C3B9C7B0BB4BB6C59A35A17559E5CAAA422B\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"401B71FBC28C9ADC161A6D14C584C3B9C7B0BB4BB6C59A35A17559E5CAAA422B\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rNdfpBhUB1ygnu4z7ebbqLBQH5K8zejbu6\",\n            \"Balance\": \"6383347939\",\n            \"Flags\": 0,\n            \"OwnerCount\": 45,\n            \"Sequence\": 67194496\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"401C2A10B0DD1CD72762BA66B0B94EC68C3A1F1464A586CF1C188053021E9052\",\n          \"PreviousFields\": {\n            \"Balance\": \"154556047\",\n            \"OwnerCount\": 46\n          },\n          \"PreviousTxnID\": \"E374DF7BF00C304396407592BFA738F1006CF4A2BD0482E9F20840F6739604DC\",\n          \"PreviousTxnLgrSeq\": 69045336\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-2225708790\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"r4DDKcQaxRVhr17DMzNSrAYBvarHRXBJg5\",\n              \"value\": \"9999999999999999e-1\"\n            },\n            \"HighNode\": \"3\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"758\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"401C62E908889BB9D485383F8BC653AB78E24D6D8DD3B69BFB4444C7B7F90C12\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-6139277172.004735\"\n            }\n          },\n          \"PreviousTxnID\": \"D0B8A8A92C2BB260410FC71278BEEB806FFC524AD157D37E64903522C5B9B93B\",\n          \"PreviousTxnLgrSeq\": 68990978\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"raxn3rqqdW28ZVrFAQ33AUrvdaTSv34DSX\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365218DE7680F3FE73\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"5\",\n            \"PreviousTxnID\": \"A983A4525293DB762BB415D97787ABF69E6C0B86D5A5E89D476903B8CD3D6524\",\n            \"PreviousTxnLgrSeq\": 68900282,\n            \"Sequence\": 66385964,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"40249B1AA4C530A08A372F9EED3E81DC390FF562424636E9AC55FC12A994405F\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7785989866\"\n            },\n            \"TakerPays\": \"54501929\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rLFVckNbciXAqgedJM92yZX7653rXcn4JZ\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365311C37937B9A90D\",\n            \"BookNode\": \"0\",\n            \"Expiration\": 725900449,\n            \"Flags\": 131072,\n            \"OwnerNode\": \"2\",\n            \"PreviousTxnID\": \"00282453105F44AA900624EEFD88707D8E2A3BA01EA543A4EC331AE4C20EC9CD\",\n            \"PreviousTxnLgrSeq\": 68724066,\n            \"Sequence\": 65356284,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"403C46371D9D6CDA49A309939242D7FFE64D639C85D658C342AC7B859381D411\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"11785989866\"\n            },\n            \"TakerPays\": \"589299493\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"2\",\n            \"Owner\": \"rah3AgBTwgnCvR5aJfj4p6Gy98hZt57gXD\",\n            \"RootIndex\": \"93F9F6AF2DDABD7559F4DFA5B2579FAC06CCDB9C82DDF7925B360FCB0F9B41C2\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"4076F33DE286AB35B6C36E1FDCC0DFC9AB1F1FF56AD45A5AFF00AD0CAEFB43AF\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rLgitcbChWYinjw7tiwK6wQw2mN6pEyWzw\",\n            \"Balance\": \"31437026868\",\n            \"Flags\": 0,\n            \"OwnerCount\": 14,\n            \"Sequence\": 68303395\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"4077A3EC0C92AF2F54AD2D323B7A3DF8A74E32C59170A2532507C25035F94779\",\n          \"PreviousFields\": {\n            \"Balance\": \"20761267830\",\n            \"OwnerCount\": 15\n          },\n          \"PreviousTxnID\": \"5BFC5AE78C283665A537E5E8F23C0374A6258BEFB6EF2EE3FED9E13C4863F18E\",\n          \"PreviousTxnLgrSeq\": 69064022\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rBVauSrW9MhaNcszTL125KttqSixQmUDuK\",\n            \"RootIndex\": \"40B5021548C24CD8915E0AF6ACD84367EF690FC6720E67396ABD150F7BA30E6F\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"40B5021548C24CD8915E0AF6ACD84367EF690FC6720E67396ABD150F7BA30E6F\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"1223344117964717e-4\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"dc9\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rsHib22BtXCKbRdrodUNNXdxumiaPqZQVk\",\n              \"value\": \"9999844278072650e-1\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"40DFA787DFD0D4F215F65A2F4DDD2C82DB18E108239817B61C5C510BD8317A80\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"1579857382310429e-4\"\n            }\n          },\n          \"PreviousTxnID\": \"C585DE9EFC655D44508F2D2F70B1B8E51A298DB5B652C32AAB4C4215A52AA71A\",\n          \"PreviousTxnLgrSeq\": 69064076\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rh2ExLW6MJMJdoX7386pzfkNbhHSjqVWtC\",\n            \"RootIndex\": \"40F288A40D9B7CC2F9DEACEDE64CD9F9C4E501DFC1C88AEFACB7A823A40DDA69\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"40F288A40D9B7CC2F9DEACEDE64CD9F9C4E501DFC1C88AEFACB7A823A40DDA69\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rBCcUJicoai17VVsbUKJ7BGqDa7dQ3549N\",\n            \"Balance\": \"3351610618\",\n            \"Flags\": 0,\n            \"OwnerCount\": 50,\n            \"Sequence\": 60850431\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"40FDEA6F82435EC4BE9691961302348A6BCC912019F6974A42FE6AB39BDD4654\",\n          \"PreviousFields\": {\n            \"Balance\": \"3098401432\",\n            \"OwnerCount\": 51\n          },\n          \"PreviousTxnID\": \"39081772BA21556F706D1311B1EFDCE7A35CCDAB3388AF767B68D2AFDC8CDD7B\",\n          \"PreviousTxnLgrSeq\": 69059173\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-3836844060741216e-3\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rMDVXgBGXnNiVt8b9uXXwhQC5W2xZXPweh\",\n              \"value\": \"1000000000000000\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"43b\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"411C37CCBC68FE18CA42515E19B0A93C99228460D70ABBD497554EA5112B22AD\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-4036844060741216e-3\"\n            }\n          },\n          \"PreviousTxnID\": \"383364AA21EE5026DD631B0A111DECB5777BC47C7C0261F83B458AFF267E2D2A\",\n          \"PreviousTxnLgrSeq\": 68883373\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rspLJnfzomVceQKCn6ExME3gJEUuhUZxdV\",\n            \"Balance\": \"2852702772\",\n            \"Flags\": 0,\n            \"OwnerCount\": 227,\n            \"Sequence\": 67373864\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"41554F0E7ED13739F6ED665299CACAA020FF640062C052743DB4CE8A724D33B8\",\n          \"PreviousFields\": {\n            \"Balance\": \"1802655238\",\n            \"OwnerCount\": 229\n          },\n          \"PreviousTxnID\": \"4D5B655449BE049C4A9E814BE2A014D5373964BB8126FA816C0C5D9895F50000\",\n          \"PreviousTxnLgrSeq\": 69062676\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r4VjGvXZQwpAy5iqMCt6kbSbFb7Bi8RYEG\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365213BCBC4C8A7050\",\n            \"BookNode\": \"0\",\n            \"Expiration\": 726681314,\n            \"Flags\": 0,\n            \"OwnerNode\": \"1\",\n            \"PreviousTxnID\": \"573B05743FF228C76D45A3E5EE570F30B3FF353FD9B89C7605CDFA7E17D465CA\",\n            \"PreviousTxnLgrSeq\": 68922725,\n            \"Sequence\": 67388818,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"16900062250\"\n            },\n            \"TakerPays\": \"93888996\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"41645688F463DDB09DA06C22571DB726F3F45B882D392180991F2CF53B9D6684\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"27000068400\"\n            },\n            \"TakerPays\": \"150000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rGBMsWXEYwQCyqK6QsrivTQsACXbfL1735\",\n            \"Balance\": \"202249019\",\n            \"Flags\": 0,\n            \"OwnerCount\": 54,\n            \"Sequence\": 67792811\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"41CC22596F5DB845677D35E307201E1B41D00387A93FF63E205FEC2ED1194EBB\",\n          \"PreviousFields\": {\n            \"Balance\": \"122249019\",\n            \"OwnerCount\": 55\n          },\n          \"PreviousTxnID\": \"B0AED90B0582F9831ABA7079B1087946EB0A728398CA064ECB77B0332CD7DCDB\",\n          \"PreviousTxnLgrSeq\": 69055562\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rEq5qRY3MvKgqLUDbPF81FQQe9iEfS4xPs\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520FFCB9E53F8CFB\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"2\",\n            \"PreviousTxnID\": \"74C9EA25DFE4DF056A0B9B34A9A3FD0863202504802C9470E3EBEFE228764C26\",\n            \"PreviousTxnLgrSeq\": 69032728,\n            \"Sequence\": 67431667,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"41F47B6919AA62812A71C85A5F012076538E68F3644FB7FA4341662107D4E29B\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"1137995447689225e-4\"\n            },\n            \"TakerPays\": \"512097951\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rJfV6qTHdF774uGTdRHQMxb8NSF6TWu4uR\",\n            \"RootIndex\": \"420253B840E1FF7CEDB7B989FF087F45F6484E817058D442D630ED0F858DDA49\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"420253B840E1FF7CEDB7B989FF087F45F6484E817058D442D630ED0F858DDA49\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rN57KF6tqiqqc4agjC6nvZeQzovWYEPDCT\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521C41361BE61000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"b\",\n            \"PreviousTxnID\": \"F5DD6000A26133E8C56EE29F87EA56B33F3147BF2DD677BDAC5BD9DD0A8EA98D\",\n            \"PreviousTxnLgrSeq\": 68897697,\n            \"Sequence\": 66619024,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"4221A7164097BFAE3D437F0893CFC89C1FD4ECC4AF758EBF6472FA2320FB78E4\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"10000000000\"\n            },\n            \"TakerPays\": \"79530000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rPKNCAkooJFM3LJ17zG3wJyxrjnNuHkkYh\",\n            \"Balance\": \"649003848\",\n            \"Flags\": 0,\n            \"OwnerCount\": 47,\n            \"Sequence\": 67345100\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"4266C10F3125384D6382973152A97446ED604384F34C0B2D34168C915BF51944\",\n          \"PreviousFields\": {\n            \"Balance\": \"109704355\",\n            \"OwnerCount\": 48\n          },\n          \"PreviousTxnID\": \"E0CF338773D92F7B3A1873161FA4D8A9B27F4473544DCEC2A40B156CBDDB1214\",\n          \"PreviousTxnLgrSeq\": 69033321\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rfq8N8xR3stwknY7Smup425CUFCjsTwcWP\",\n            \"Balance\": \"302094631\",\n            \"Flags\": 0,\n            \"OwnerCount\": 89,\n            \"Sequence\": 67058233\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"42AACE71F94CD570757FBADEC3F883EE310D143BC17311C5308F1A3C5874BC90\",\n          \"PreviousFields\": {\n            \"OwnerCount\": 90\n          },\n          \"PreviousTxnID\": \"0F804F750501754C2762FCB8416A7B0E089C143CA0D54928200DDA962308C819\",\n          \"PreviousTxnLgrSeq\": 69062108\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"raZJeAMN8WHNBRrVCc5RXYfD7mAuKctiwE\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36532386F26EFD05C2\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"1\",\n            \"PreviousTxnID\": \"3EFF777C44B30FC741D3EA4810B6F66A95ADF68F194D104696A7F490E0E749F1\",\n            \"PreviousTxnLgrSeq\": 68892805,\n            \"Sequence\": 67450374,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"42C36791DB8A284739FF1E0C0B6F3F526A8213FDE1431F8228273474720F9A76\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7785989900\"\n            },\n            \"TakerPays\": \"778598989\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"25000000000\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"ee3\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"r9vQtUmSgHmDFpc6K7BKLj5JvGBEbvwP9Q\",\n              \"value\": \"1000000000000000e-1\"\n            },\n            \"LowNode\": \"3\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"42EE357291E384AA7DAF6B8F604F4C536C7569369A481AD6422FFD4739B376C7\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"65051845672.48726\"\n            }\n          },\n          \"PreviousTxnID\": \"E85100D7D28974D43CC85801527E745F139C70DA00C905A3AAA8A9E9B12DB4C9\",\n          \"PreviousTxnLgrSeq\": 68922338\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rEm8Pg6dKSuFWvEJK2Fnv8EvmkSTuNFJew\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521BACF6B65EDA6D\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"0D73060D27C751E34F142118ADE47E94C7C9087DB43753F1EEECD12E6E68AD41\",\n            \"PreviousTxnLgrSeq\": 68898503,\n            \"Sequence\": 67761558,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"42F8DC08657188881789F809CB00D5BF0CB83A0837E410B2D110025FA4172B1B\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7785989866\"\n            },\n            \"TakerPays\": \"60652861\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"9\",\n            \"Owner\": \"r4YqG4eX9uskEYbdZVejyRmkBgM9pSo8q5\",\n            \"RootIndex\": \"2B92635D6FBEB0B0ADD7B4A53C3C278BB763383142F889F71BD25BFCAE9D641F\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"4300CFCE635ED5EC35506305A4F4B5183338AD533F890899392B4D0B7389DA2E\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"1963937061140000e-4\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"5e3\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rpq5MrSjiQgMj3Rk8Kvf1L3Gzh4xp1CUdZ\",\n              \"value\": \"9999999999999990e-1\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"4356E2C63A62AFFA982456E139C2046729AA6BF8A3111CB743752DFA2689C732\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"2503937061140000e-4\"\n            }\n          },\n          \"PreviousTxnID\": \"C0979582A99968A0BAFF23B63046649B992A6345AB8B892D891FE5B60F727EE5\",\n          \"PreviousTxnLgrSeq\": 69031084\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"d\",\n            \"IndexPrevious\": \"b\",\n            \"Owner\": \"rPvqZW8q9bpYrAKjGhtL7AZAq8bvqEQDuq\",\n            \"RootIndex\": \"7CE92CB8321AA7D751ACFFDFA2859B616098A007419237F182BE91B34724F79F\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"43778649A9821ED6AF613F46424E2B3EEEAF855FF2440C3A14DD0BC9226F791C\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"5\",\n            \"Owner\": \"rasT449dxdmpB7Ak1GqwE9TdrkZEty1tAZ\",\n            \"RootIndex\": \"654FDFFA8EEF6C4BF65DD5CA7898A39066C444D2C935E530452CCD81B683D8A2\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"437920AA7DD1D9ABFBC30056C0C788E3CF35ADE840E4E33853389DF0555D4636\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rLN2tJYrH11YA3EqyNw6csgsBEnZ9TeaWF\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36531FF973CAFA8000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"2\",\n            \"PreviousTxnID\": \"5212E616793BD21E5999A32312AB56A6BB09EDC22F6CADC6D749127E15E19002\",\n            \"PreviousTxnLgrSeq\": 68654466,\n            \"Sequence\": 60035720,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"43827EE3752409C5429C59DC7E716709573142589ADDF0399A07AEFCA20BB88E\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"10000000000\"\n            },\n            \"TakerPays\": \"900000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"24596927696.24683\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"db3\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rBMPrNjN4FCHpC3wWAdrorVra71nhSRkuK\",\n              \"value\": \"9999922137971320e-1\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"43D20AE025050FBC035862C3235ACFD18B10C5A4DD9220F57B6B7C32E0399816\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"55104744993.91729\"\n            }\n          },\n          \"PreviousTxnID\": \"688D763E4B789FE7334F6033430C5C5B81C5FBB506A2A7452DB221A67DA19A60\",\n          \"PreviousTxnLgrSeq\": 68990605\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rng5s7vNgzx4BPJzacK2YWUqR5u1aygzWw\",\n            \"Balance\": \"1236631477\",\n            \"Flags\": 0,\n            \"OwnerCount\": 253,\n            \"Sequence\": 66390043\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"43DB95322735A8D186323BE789E3D3C3AD0D1F0AA1C027EDA6FFED1363AC1A07\",\n          \"PreviousFields\": {\n            \"OwnerCount\": 254\n          },\n          \"PreviousTxnID\": \"3BB7CB4526FDFB1ED40E76C3840ACCF91B3035D1E26AB87E13624C2AE1D77E28\",\n          \"PreviousTxnLgrSeq\": 69062985\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rwEP45SodNayAXhoEQeJmXaky391SxGRZz\",\n            \"Balance\": \"24000000\",\n            \"Flags\": 0,\n            \"OwnerCount\": 7,\n            \"Sequence\": 67338133\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"43E8BC6EEAE7521F93FDE76D3B92D60B999759B05146A8D1658D24CFE089EBA9\",\n          \"PreviousFields\": {\n            \"OwnerCount\": 8\n          },\n          \"PreviousTxnID\": \"7E2F30911A74C52DDF7EC21AEA442C80FE45591975DB74DA8FC59783F1750E3F\",\n          \"PreviousTxnLgrSeq\": 69056674\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"41595659804.925\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"e0f\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rs4wbWdssBMJRgn4tJak3eq1JgrJ7Pgfnk\",\n              \"value\": \"9999688558266541e-1\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"4400E414AA33A2BF1C337F1DEE04CA059C6790AE66F6EDEA20FD5DF8D8C42CF6\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"1303186471049250e-4\"\n            }\n          },\n          \"PreviousTxnID\": \"34EEC2B5C7963F9EFA5DBA466DF7CF40A6F9C8601DCD9673ADBE2E91B30AD40D\",\n          \"PreviousTxnLgrSeq\": 69034828\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"e2f\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"r3VQGy3EVus3nKJz33du7UqZDMFEnVmHLL\",\n              \"value\": \"9999688558266523e-1\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"44288A74E1742748E2604D78AE1690453237E67E555FBC58EC0DF78C23FE5001\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"9705882352.6953\"\n            }\n          },\n          \"PreviousTxnID\": \"A815BC460615D7E28A7B11F98EE1B23D3134E74AA1C460BD8592E602707BF14E\",\n          \"PreviousTxnLgrSeq\": 68945813\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rNLPZmai318pizfUNmkebSrtsR5mFvVVWt\",\n            \"Balance\": \"4644852511\",\n            \"Flags\": 0,\n            \"OwnerCount\": 85,\n            \"Sequence\": 65894241\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"446035CC41F0CC3D213898A6892E36BDCA662F0B7C4937E1F6E50532BD2516CC\",\n          \"PreviousFields\": {\n            \"Balance\": \"4574852511\",\n            \"OwnerCount\": 86\n          },\n          \"PreviousTxnID\": \"DF81ADCB2EA506F974116933762452B39AFAC246C624161F0FEF180A9D97631A\",\n          \"PreviousTxnLgrSeq\": 69052733\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r48QoxLkkqiwjzhposyFj61op7AtvR5aLq\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521717B72F0A4000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"ED542BB8AABF500A270637C12C4DBA01F6C028506420D5C7E4794FC0091FD2AF\",\n            \"PreviousTxnLgrSeq\": 68912437,\n            \"Sequence\": 67928318,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"446E5FEDE0ED829B8C7E78EFAC8B32E41055FE87C35BA87E3150FAF563BACA26\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"16155000000\"\n            },\n            \"TakerPays\": \"105007500\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rLhtdRdeGcT6UeQivqPu9DBXWHZ1SDpsar\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521717B72E0D7063\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"5\",\n            \"PreviousTxnID\": \"DDF60FEA029E9D73CF0D7141B037895D936DD8CCEBA23575B2EDC93C449B00FD\",\n            \"PreviousTxnLgrSeq\": 69051376,\n            \"Sequence\": 67537008,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"449B8E9989920AECD1F0AE9CE23F4349AAF52F7C87F40EE5E68D169AD36F5E3F\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7785989866\"\n            },\n            \"TakerPays\": \"50608934\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rf4YQSYpheUvWxMx5rmSgr4vdyvu7tWUp4\",\n            \"Balance\": \"719075998\",\n            \"Flags\": 0,\n            \"OwnerCount\": 78,\n            \"Sequence\": 66770783\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"44C227ADC68B2E4C465574C022AD438BA223C621CD07E7401E956F11FB00E04F\",\n          \"PreviousFields\": {\n            \"Balance\": \"574493186\",\n            \"OwnerCount\": 79\n          },\n          \"PreviousTxnID\": \"0F8DADAD6CFB2CC755AC8AF9B22C5DDD74826BDB4C26487665E7DC001F6729E0\",\n          \"PreviousTxnLgrSeq\": 69060173\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rsPnG9Kmz7rf9fXRZ7zrVb8tmmjUkUEpin\",\n            \"Balance\": \"4232134595\",\n            \"Flags\": 0,\n            \"OwnerCount\": 139,\n            \"Sequence\": 66616050\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"44F2C14394BF3A1A0D1FE04FFD105D2CD668D6C546B17D08A90882CE0E9E62B9\",\n          \"PreviousFields\": {\n            \"Balance\": \"1232134595\",\n            \"OwnerCount\": 140\n          },\n          \"PreviousTxnID\": \"D13B8E9D35264E2DBCA4A7040AA414FB49C3A819BD99F4C4814CBB24DF1D79C7\",\n          \"PreviousTxnLgrSeq\": 69050223\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r3LLQmhVJiQ3r5e3QCo15yaDumDNp7Gn1r\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521C6BF51F195426\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"2\",\n            \"PreviousTxnID\": \"213551F5874F0FF8B7EEC34EE14E793F59ADDD7928C1C9948F1BFF02B0D854A2\",\n            \"PreviousTxnLgrSeq\": 68155562,\n            \"Sequence\": 67712563,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"4529206E5B9CE24592708139DAF822B4509998592E01963871FE5A51C10A41F5\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"3892994933\"\n            },\n            \"TakerPays\": \"31143959\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"e37\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"raA94X4CEVD8GVTSQWjafELaah67aqrvjG\",\n              \"value\": \"9999688558266536e-1\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"452BD091A52731D4F5D6CCF8740BB387336466C2DB08FC35FFDB5883650DEA49\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"10000000000\"\n            }\n          },\n          \"PreviousTxnID\": \"E644339C3577108557CE43BC89F2FD81B5D0250CA56B9E05C6B9B24CD0C6CFA0\",\n          \"PreviousTxnLgrSeq\": 68922765\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"a\",\n            \"IndexPrevious\": \"8\",\n            \"Owner\": \"rNRaTAdpRUh1YNTBdCu6JXdQZX2pfWo3FU\",\n            \"RootIndex\": \"9098256A5DEEA0F5D5C994D730FBC32CC7236986BDA78E4AC0AA970E60489392\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"4597089783E8E9BB77A583B190265A6CDDBE31B3B04541DACD6651A32DC0F834\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rGzfdR9pNTEgc3qiShH9q3zp7KpVXgVUq8\",\n              \"value\": \"9999766418165223e-1\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"dfc\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"45C1748293055A7C2AF915BCB156732FEA8690439977C393C55F3291B884578F\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-6133123803798006e-4\"\n            }\n          },\n          \"PreviousTxnID\": \"97FE6E520473447D0DABD446F445E5214896753CDB3CD1F20856556862E64395\",\n          \"PreviousTxnLgrSeq\": 69014749\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"2371724461875721e-4\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"971\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"r9MQ7Hek3iMwBnYRuHTuuG3ssJu48PHaxJ\",\n              \"value\": \"1000000000000000\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"45D8D388CA2B140369FDBD1FF354F0D749165D97011D7DB90263B14C8F4FB287\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"2571724461875721e-4\"\n            }\n          },\n          \"PreviousTxnID\": \"3532A72678C9AA10F7CC68612C82AFE3FF9B04531039B345465867FE31D32891\",\n          \"PreviousTxnLgrSeq\": 68898845\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"1\",\n            \"IndexPrevious\": \"1\",\n            \"Owner\": \"rNNzeaYd4nSmhTirshmVBdK1zfHApVy7Hy\",\n            \"RootIndex\": \"4612233145B490B4E804E9FEA67B0920580CC3208735ED64609843255DACCEBF\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"4612233145B490B4E804E9FEA67B0920580CC3208735ED64609843255DACCEBF\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rpiGc7vb6vr5hWMxqK2NgEVpQkYhBXreac\",\n            \"Balance\": \"70000000\",\n            \"Flags\": 0,\n            \"OwnerCount\": 29,\n            \"Sequence\": 65841671\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"46129DB98683CEF4CAE8CBA8A5F83BD22256180268B0FE7EFCCF70FE2DF14C71\",\n          \"PreviousFields\": {\n            \"OwnerCount\": 30\n          },\n          \"PreviousTxnID\": \"EC63CDF8C58052DD9392595C5830D6D5FE55DAD88CE58547D504836179737145\",\n          \"PreviousTxnLgrSeq\": 68789701\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"f05\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"r9ny1UWruE383T7YTyQgiH4re75gzGpKqa\",\n              \"value\": \"1000000000000000e-1\"\n            },\n            \"LowNode\": \"8\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"46295C586016E6BF2C977A2A273C0CB4AF65531084D033F08F13BFCC1A44542D\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"15366462099.11738\"\n            }\n          },\n          \"PreviousTxnID\": \"249D5DE9ED966468146810488DE133CD966EE7A9E2987C313E5A85432F7E7DFE\",\n          \"PreviousTxnLgrSeq\": 68998380\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"raqKMtQVnQPuQpPLBoeyPbjYHSokvu1R1z\",\n            \"Balance\": \"1772958759\",\n            \"Flags\": 0,\n            \"OwnerCount\": 69,\n            \"Sequence\": 63203977\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"4651F4BCD70769E66B9C89EE0B47933CFA03F068A63A877B6375C3A1BAEE51EA\",\n          \"PreviousFields\": {\n            \"Balance\": \"1741328759\",\n            \"OwnerCount\": 70\n          },\n          \"PreviousTxnID\": \"5515AD5102254770E1F5116B2480702FA982D7B7EC04CD411AE2DFE20DDFB92C\",\n          \"PreviousTxnLgrSeq\": 69047993\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"raqKMtQVnQPuQpPLBoeyPbjYHSokvu1R1z\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652167976A6D96000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"6\",\n            \"PreviousTxnID\": \"2DCEFFF824013D1F973CE963518127E9A05EEC2B0EDB2D37F151F1AF56B2EE9E\",\n            \"PreviousTxnLgrSeq\": 69032117,\n            \"Sequence\": 63203970,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"46529BBA74B19566E314A38BB66347A6C130831630428A43F69C55E1261B53ED\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"5000000000\"\n            },\n            \"TakerPays\": \"31630000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rBBS1EhebBUcDs7gDa4ZuoTfmBwsRGqycY\",\n            \"Balance\": \"511506036\",\n            \"Flags\": 0,\n            \"OwnerCount\": 83,\n            \"Sequence\": 67855206\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"46674EF605C230646F82AB3F586DA9F21CE8C64CC84EFD426E565E575A51CFE7\",\n          \"PreviousFields\": {\n            \"Balance\": \"259506036\",\n            \"OwnerCount\": 84\n          },\n          \"PreviousTxnID\": \"ED38ECE5C30E080FFB953A7798A43024119E842FBF3F332DDFB8282FAC7FB128\",\n          \"PreviousTxnLgrSeq\": 69061251\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rKso7KmktCCYBfe79sNAFnfKffvansBBRz\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521AA535D3D0C000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"7\",\n            \"PreviousTxnID\": \"1E0DEACD6A19BD3039922C1548ED9B4A346369FCFA0E83BD2C6661C764DFEA75\",\n            \"PreviousTxnLgrSeq\": 68902155,\n            \"Sequence\": 67328568,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"30000000000\"\n            },\n            \"TakerPays\": \"225000000\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"46796EBBF32BA7E44D4E48280415EA5792FB29B7B62086E839CBF3875690D8DD\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"70000000000\"\n            },\n            \"TakerPays\": \"525000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rPCYDR6z5MW5EvxVzPhVa6cfLyckEDWs5T\",\n              \"value\": \"1000000000000000\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"285\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"46E45EF010B9E3989AE4BA7B7BABF245835E5D89F21C9A07120903B51004120A\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-7785989866\"\n            }\n          },\n          \"PreviousTxnID\": \"631A05073785C1C84CC0DEE5F2F336F2B6F363094011360A13F415F2AB18E235\",\n          \"PreviousTxnLgrSeq\": 67951007\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rwLffu7VZ4rMMa5thTQppfL9g4FMB1sNys\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521717B72F0A4000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"BB2D3141D7E6D4E504AB361697C1E6FC0811A913546A1A7ED627036922DBC881\",\n            \"PreviousTxnLgrSeq\": 68926256,\n            \"Sequence\": 67708646,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"46F8F4F471922C3F207E57DBA4F1F8AA9006B63967636AB9B31F441CDAFC380D\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"2700000000000000e-4\"\n            },\n            \"TakerPays\": \"1755000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"a\",\n            \"IndexPrevious\": \"8\",\n            \"Owner\": \"rhEwjxZkMbARLTQmMsR7N6MxRDUUKLF1RP\",\n            \"RootIndex\": \"E1E11D5BE84E0A02540797FDFB7974852AC4411932D9CE7091665DEBD5AE1988\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"471DCACB6DD84F57B8A4D40B734D0747DC515F9FBBCDE533519EDD249F6B4FC0\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rM4cm11HCu1riLq9BwfzciDUZqfX2Phq52\",\n            \"Balance\": \"487153276\",\n            \"Flags\": 0,\n            \"OwnerCount\": 159,\n            \"Sequence\": 67380536\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"4722F91B16CC9165FF1A9F84623778D174459E5B277D1C0801792150F44F7730\",\n          \"PreviousFields\": {\n            \"Balance\": \"477343276\",\n            \"OwnerCount\": 160\n          },\n          \"PreviousTxnID\": \"61B54E913ADBA95E9E48589C53A60D9D793864A6CACA41CD0D55F0D1D483EBE8\",\n          \"PreviousTxnLgrSeq\": 69064115\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"3\",\n            \"IndexPrevious\": \"1\",\n            \"Owner\": \"rwuaSP5dsGLmc6gNnv3bWEjmtkexmA4H3G\",\n            \"RootIndex\": \"964A381F0461CF85145D1EBB52588ADACF9F135FBFF41A6E0201F524CC6B0619\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"473FB07F1E6E36C74FA7B9BF613FD13BB6743544EF0F1656877A9645AF6A605C\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r4AXMmLxiAtMf5yvyqqCZeHVhswjdmNgBx\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521D8B5BA1A7A5F6\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"8\",\n            \"PreviousTxnID\": \"81465FDACF594537BAB0FE3ADD626EB1948DB71EBFA7AA6738DFE7077054F5C5\",\n            \"PreviousTxnLgrSeq\": 68984288,\n            \"Sequence\": 66594825,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"476F993E4C031918571A30CAC430422BF7A0A562DD925F7A2527C3451C19BE9E\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"1203912777297306e-4\"\n            },\n            \"TakerPays\": \"1001173865\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-24597395601.47615\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"r4izcArVy7Ccp9j1VEwnbso67AsYhaEjdJ\",\n              \"value\": \"9999688558266540e-1\"\n            },\n            \"HighNode\": \"2\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"e0a\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"477EE29267290B77EAB5532B2A2A91C426F7FC6DAF4EDCEA53913D4671F337D7\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-36097395601.47615\"\n            }\n          },\n          \"PreviousTxnID\": \"A830CA632AAF8C0884CF524610631D7FFF6BDC514A17D451BB33C2DB15E3525E\",\n          \"PreviousTxnLgrSeq\": 68992849\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rfKEwoau3VsYDkabUXs7KbivzJXUE1iw9W\",\n            \"Balance\": \"396563329\",\n            \"Flags\": 0,\n            \"OwnerCount\": 52,\n            \"Sequence\": 67016780\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"4799CAEB5E14DB419DCF01D386F0D13F14F4E73F5E1005F184A216436748C66B\",\n          \"PreviousFields\": {\n            \"OwnerCount\": 53\n          },\n          \"PreviousTxnID\": \"387070A0D6D633345D4C2EACE13985596B4864BDC4E90DCF6E1245AF02231600\",\n          \"PreviousTxnLgrSeq\": 69046295\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rDvF12VVLg8CD36Ba9U4HUB5q7AWai6BFi\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36522374C1D28416E2\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"1\",\n            \"PreviousTxnID\": \"12B63AC69F8F2491BEAF743651CE1A905F5CC7600364B73876173D31B1EC011A\",\n            \"PreviousTxnLgrSeq\": 68904301,\n            \"Sequence\": 64346992,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"479AF52A537315086038FC7E3EE90D46BF4322ACA8AE28F9FF9D2514E4142CAF\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"51178984798.99995\"\n            },\n            \"TakerPays\": \"510766268\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rBefpcbGP1mhJhuLmYSbPSj4oDTufciZDH\",\n            \"Balance\": \"53180298\",\n            \"Flags\": 0,\n            \"OwnerCount\": 5,\n            \"Sequence\": 67337575\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"47A1320EFB85F5B24832F339080B4BE26740E0249813ACEDDA15BDBFF5C62BEC\",\n          \"PreviousFields\": {\n            \"Balance\": \"22359106\",\n            \"OwnerCount\": 6\n          },\n          \"PreviousTxnID\": \"07D3D67D3EDF315B18BBA927A8ED09ED3DF28DDB57CBD7D255E2E61207AFB105\",\n          \"PreviousTxnLgrSeq\": 69000345\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rxAPteBXbVsr6qvwqA54qERcdkojkjdmC\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653038D7EA4C68000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"4\",\n            \"PreviousTxnID\": \"409AFFE3FFB4B199CCC34B28F9D084A2873B9DFB2DB68D86D46CFF66629AB525\",\n            \"PreviousTxnLgrSeq\": 68898827,\n            \"Sequence\": 66533122,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"47B162C4049F095F13046F957DB6563301D9141721E17A3B4D1989A73C0EAED0\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"20000000000\"\n            },\n            \"TakerPays\": \"200000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rBVRpQjDpGqLs588dtthtZhrPJCcM4w3TS\",\n            \"Balance\": \"2478679017\",\n            \"Flags\": 0,\n            \"OwnerCount\": 86,\n            \"Sequence\": 65828951\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"47DB49EAB2E575C9A1866B507500D5D499F445944E78F5B1EADEF4F2C0CB4F42\",\n          \"PreviousFields\": {\n            \"Balance\": \"1478679017\",\n            \"OwnerCount\": 87\n          },\n          \"PreviousTxnID\": \"666F271B171C71C5498E9F0A2B82853364E140C51832310D0FB483ACDFA88118\",\n          \"PreviousTxnLgrSeq\": 69059690\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"22\",\n            \"IndexPrevious\": \"20\",\n            \"Owner\": \"rGKv1gHL1ANheQZ4GMCikKaGYoKJC6o6wG\",\n            \"RootIndex\": \"9B85DCA279361327B6D3207A5E1E4942FC42DCF2CD820BD76421DBC1502F414C\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"480FEFAEAED8060A52EAB6BCB8E3DC8D761524A69857D0C12A555EF080F1C936\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rQKYm7pcdeXMPEgGTRUAAuoziWwhhW3DC2\",\n            \"Balance\": \"4426279002\",\n            \"Flags\": 0,\n            \"OwnerCount\": 53,\n            \"Sequence\": 67340134\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"483E2A16172DC49C4972165FAD4761D54AFFE548B9693A86DAD0BB5EDD32A280\",\n          \"PreviousFields\": {\n            \"Balance\": \"922583563\",\n            \"OwnerCount\": 54\n          },\n          \"PreviousTxnID\": \"33755612739532DF5292A0E0355926BA844141B1388A36492733B144309FFD0D\",\n          \"PreviousTxnLgrSeq\": 69052237\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rHm3si5FLgHjXC7E2qXKwNDGAe5khVpEHg\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520EEBE0B3FC2D8C\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"A58FC7813AFC9DB58BF50CBE26E5151FD1AA6552F5B560453AA7911556EDDE30\",\n            \"PreviousTxnLgrSeq\": 68986618,\n            \"Sequence\": 67647502,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"48631088694DB8D61D070B70CD4954AE20D7DA6C1BD63758C5B86B958D065B80\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"3810005946327354e-4\"\n            },\n            \"TakerPays\": \"1600202497\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"984\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"r33yXJH6HkJc128VKpjvrcdC89M4zDaP9f\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"489DA6DFEA4DAF6592C99C25069F6F3BE5509829DF4F937984FB25A1D6E0DDD0\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"7785989866\"\n            }\n          },\n          \"PreviousTxnID\": \"F9F76D516BF1935EB2C10110A2963A38A11CBCB44971F577AA2E8AB2F5D56C1A\",\n          \"PreviousTxnLgrSeq\": 67991922\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rGgjwqb3Lg3yvrb1CRRqcTghWvU4r7fvFX\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652232BFF5F1937C8\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"a\",\n            \"PreviousTxnID\": \"50F6208030AA879EC4FDCC4AFE83AC9909075E1C05904E46B076E8E9AD8FF449\",\n            \"PreviousTxnLgrSeq\": 68892659,\n            \"Sequence\": 66228534,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"48B667164D5F52B02FFF28496FB80A7AB19232B70E212344B8428F44E4F1768B\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"2335796960300000e-4\"\n            },\n            \"TakerPays\": \"2312438990\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rQHTzMfwiuyHEaGpCTUE68vbkTR6tXahXr\",\n              \"value\": \"1000000000000000\"\n            },\n            \"HighNode\": \"4\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"213\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"48FE715EE7A0075D3FE57443067FBACC5AE78C6A9724ABEBA3C8DDF4F69B3919\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-10294850770.45\"\n            }\n          },\n          \"PreviousTxnID\": \"D459DBC36D225EBFFD32B0092F8AD3BF4F8E86AB7CA7E12454532AB9023341ED\",\n          \"PreviousTxnLgrSeq\": 67962530\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"10\",\n            \"IndexPrevious\": \"e\",\n            \"Owner\": \"raZrDVYBJ5whjdgJ1V6FtiYixKesEfDyKJ\",\n            \"RootIndex\": \"8F15310ADF42F6B0A2399DF68DE09CDD703BC88D41D804DAEC79CF628720D4C2\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"4911E3FA71ACAAE4DDFD34BE2A886C8EA1ED481C875E03F6710F1E77687BA070\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rBHSrXq2LzGniUp4zypCRk1isLw1ywLPHv\",\n            \"RootIndex\": \"4926917EAFC7AB01C49E48AB5A409A91B1CB5321B6D797FEECBBD903E42B39C1\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"4926917EAFC7AB01C49E48AB5A409A91B1CB5321B6D797FEECBBD903E42B39C1\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rpiGc7vb6vr5hWMxqK2NgEVpQkYhBXreac\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36522386F26AB38C66\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"0ECF66AC86F7964E076F0F9ED7A694E7888FEE268E61DEA12954C988DBB4014F\",\n            \"PreviousTxnLgrSeq\": 68001098,\n            \"Sequence\": 65841605,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7785989866\"\n            },\n            \"TakerPays\": \"77859898\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"496177104A1374E7A941C0CB21D9939CF783AC80736343A19D7D057390AA226E\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"c\",\n            \"IndexPrevious\": \"a\",\n            \"Owner\": \"rKBwHqR3S55CpYFoX1bucD2PFMgSjPAFvu\",\n            \"RootIndex\": \"6F077ABB3B7731F2A7E7617CACA64E33B4378B3A2B968CC99920A844B092BEF3\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"496EAF1F15E1E87CE6F8DCEB87D8F44F88B9A31111C7F5A685DCAC4B20CA4F37\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rPBCCKXYaB9eBeVKenvGeGKywHUVHFQmSS\",\n            \"Balance\": \"1921911594\",\n            \"Flags\": 0,\n            \"OwnerCount\": 97,\n            \"Sequence\": 67544565\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"497A6B5A0BC60C9F3172EF793EBA323687E5AA11F07E3866653AA5C0E3F2A9A3\",\n          \"PreviousFields\": {\n            \"Balance\": \"1822911595\",\n            \"OwnerCount\": 98\n          },\n          \"PreviousTxnID\": \"B2355A18F142850A5245B8177A9193E5EA25274AF4EE13E1A75ED9CA8338E8E1\",\n          \"PreviousTxnLgrSeq\": 69063608\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rwLffu7VZ4rMMa5thTQppfL9g4FMB1sNys\",\n            \"Balance\": \"3067005969\",\n            \"Flags\": 0,\n            \"OwnerCount\": 24,\n            \"Sequence\": 67708656\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"49A9AC74C788E462179C7079972F202CC4FDA7CDCA60049F8884789AAE02B647\",\n          \"PreviousFields\": {\n            \"Balance\": \"850560278\",\n            \"OwnerCount\": 26\n          },\n          \"PreviousTxnID\": \"92B523A8E14B39FDF6B12C2DB139C0A684FE3328AFC4284816D0BB03408D343F\",\n          \"PreviousTxnLgrSeq\": 69037003\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"3\",\n            \"Owner\": \"rsPnG9Kmz7rf9fXRZ7zrVb8tmmjUkUEpin\",\n            \"RootIndex\": \"0B1726BBF0395A3738D3D2B9E648D661AC987625B70539C098BB2EC701A544C6\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"49BFF89D316AD338B5769E8B0A5F9CB239396194673B49569F772909051851E1\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"4\",\n            \"Owner\": \"rLhtdRdeGcT6UeQivqPu9DBXWHZ1SDpsar\",\n            \"RootIndex\": \"819524B5D5170FE01E874038237ADBB1373C43B820BA33D4344091A4F16A372B\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"49C32B27FD73AC5AF17E30525013B600964663CB2AE64FC25F79DC00D102E6CB\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rPVXceb6wrQp9apSTtyZmWcxKmYRBnCsdt\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521FF9738EC434DA\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"4\",\n            \"PreviousTxnID\": \"F2454167CD6EEFF5E4418A049E418A18213F7173CFE06ADB0D290EB97CC8BA8E\",\n            \"PreviousTxnLgrSeq\": 68891294,\n            \"Sequence\": 66622440,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"49FC05D91F63E70E885F6172C43D382DC0C208F8BE8EF49C0BFD5CD6E2933854\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"785989866\"\n            },\n            \"TakerPays\": \"7073908\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rpJZ3qkUBb3m68p3YrzJE7onMcswN4XDY8\",\n            \"Balance\": \"152000000\",\n            \"Flags\": 0,\n            \"OwnerCount\": 16,\n            \"Sequence\": 67512249\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"4A00B99AEAFCF5A25FD64FD9D770C90E5749F2C66DF3C4EAD3AD8EC612FAB4ED\",\n          \"PreviousFields\": {\n            \"Balance\": \"44000000\",\n            \"OwnerCount\": 17\n          },\n          \"PreviousTxnID\": \"E85A7296D57B33DF2147B5D636DDF38E2A966CDC32CADFD49372919CC7B13124\",\n          \"PreviousTxnLgrSeq\": 69061191\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rnhd3RdnLUZY4sYxS2p5zTJk24zHB7VyUo\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365207D0E358EB049A\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"387B6506959224B09CE7CEB4421CC335F242E07C18A25A5B87CA04BD48F32189\",\n            \"PreviousTxnLgrSeq\": 69044815,\n            \"Sequence\": 67654185,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"4A18EF698D71DC2C87FF0551884136984FD4512B6F30DF9E0957CCFBB0701C92\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"3068903138.888889\"\n            },\n            \"TakerPays\": \"6751586\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r3ccw1UCPwayXhAVmy6oC4yQTSPeG71bx\",\n            \"Balance\": \"87141204\",\n            \"Flags\": 0,\n            \"OwnerCount\": 20,\n            \"Sequence\": 66775166\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"4A48268166A0DFEB96C5549876AD7AD7CD2891E24A2A7F7AE550CE8593C103E6\",\n          \"PreviousFields\": {\n            \"Balance\": \"67141204\",\n            \"OwnerCount\": 21\n          },\n          \"PreviousTxnID\": \"15302716AB5A8DE67F89E7C7DD7939677DA98C29AA7415181442573D3F19447D\",\n          \"PreviousTxnLgrSeq\": 69063989\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r9MQ7Hek3iMwBnYRuHTuuG3ssJu48PHaxJ\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36532386F26F286980\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"2\",\n            \"PreviousTxnID\": \"A9626A2BE2F46D093CFBCCAE0041EDE3847A9077384C242E5FCD80EE4399C05A\",\n            \"PreviousTxnLgrSeq\": 68003874,\n            \"Sequence\": 67390416,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"4A4A92EFAC53D2294B990200D860DA32D42E1CC6D521AA10940A10C57DEC1A00\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"10000000000\"\n            },\n            \"TakerPays\": \"999999999\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rabF4KeYghT7RWidbkeS75fLWQzrDixwpH\",\n            \"RootIndex\": \"4A79BBEF8D725F8255F407C41FEBD3F8239FBD468B13E36F568F4B8E6C2B5382\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"4A79BBEF8D725F8255F407C41FEBD3F8239FBD468B13E36F568F4B8E6C2B5382\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rBMPrNjN4FCHpC3wWAdrorVra71nhSRkuK\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36532386F26F689E93\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"1\",\n            \"PreviousTxnID\": \"D1EA05734846F516E188995ED2E66E26B95CA3CC3822F06F2C00B84D33E40095\",\n            \"PreviousTxnLgrSeq\": 68895125,\n            \"Sequence\": 67579981,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"4A977EC80BED9564BCDB5634C1104BF4EB7D4410A4D31B511AF5A1DFFF6C549B\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"15253908648.83523\"\n            },\n            \"TakerPays\": \"1525390864\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"6\",\n            \"Owner\": \"rp9kJTnnfXrjwVFxGRWfjUbJdmxkGP4cif\",\n            \"RootIndex\": \"9818A0E9F8B2E4FD17CE73D3763A1878DFE404B32FC8BA5DCC913038A3133760\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"4AA7891201D2228103E79DB9BC63C4BD05A05220591BBECD7704A2799983458D\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"3\",\n            \"IndexPrevious\": \"1\",\n            \"Owner\": \"r4A2sUYHaLAGsDxfwUSv7GXTyYRsoBfQin\",\n            \"RootIndex\": \"5EFD0A90FF4AD5FFD97A0821FF1183192FC13A98174BD184E63638165FB2BF6C\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"4ABD26C15F24C8DCE9527B60A1AEA9B1FA424E6C3CD70A84FE5FD4D0F3A65046\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"1\",\n            \"Owner\": \"rNvk1SNQZhU6fsyMuaTeLucyw5x5uxfxQy\",\n            \"RootIndex\": \"FBF78B62F4B918982A3BE4E93BD211976B210B4D2C75A82824C4A406842DA574\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"4ACC3D0BD5C7D54B896341A64F3576C19DFF91A9133A160681333C171A7C552A\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rUqaUzkL9NU9wp7BReWWPJQddAErF45hkE\",\n            \"RootIndex\": \"4ADA68FFFB87B0F17745B3D95CFE0038883C0A8E14E1761BC46C690DFC7B94E2\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"4ADA68FFFB87B0F17745B3D95CFE0038883C0A8E14E1761BC46C690DFC7B94E2\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"5c6\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rBLh3SrV1ALEEfJiHKYiaSxoRxG7R9SuEh\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"LowNode\": \"5\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"4B0D5B4463C5D3D1B5F4AAA78A1F7D0EB1CB11B256631851A4555EFAA0249CA1\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"93431878392\"\n            }\n          },\n          \"PreviousTxnID\": \"8FB40638327699C7B8F24E57D9847D12A3B91AE8B4C8225F542FFAEC291B1AE4\",\n          \"PreviousTxnLgrSeq\": 68090143\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rNirEvsSGiRDGtL68t6MJwfAyU1MExreYv\",\n            \"Balance\": \"370381812\",\n            \"Flags\": 0,\n            \"OwnerCount\": 58,\n            \"Sequence\": 67544637\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"4B0E4B374B526C54080609F53DB31E03A69028970E5C2B37FA1F1E59586B7919\",\n          \"PreviousFields\": {\n            \"Balance\": \"146499850\",\n            \"OwnerCount\": 59\n          },\n          \"PreviousTxnID\": \"3E30DB711255765C22F8A3962EDD85E05581A011F36EFB7DB3E6484AC8DEB9B1\",\n          \"PreviousTxnLgrSeq\": 69061300\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rfTkTBbkD6NFaNLprSDfnC3CJEtNwgqYwy\",\n            \"RootIndex\": \"4B0F31CD816344C24538F1615958610DA40A8454D4FF64D12DA4215BFF402DA4\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"4B0F31CD816344C24538F1615958610DA40A8454D4FF64D12DA4215BFF402DA4\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rLVGNfLJYnQtqJDuNWkpu1yaSBnrrSGPdt\",\n            \"Balance\": \"260015483\",\n            \"Flags\": 0,\n            \"OwnerCount\": 64,\n            \"Sequence\": 67363445\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"4B13E1FE228BA4846D6E998E8225427430DCEC484A1AC01CAE9186B9BEA11930\",\n          \"PreviousFields\": {\n            \"Balance\": \"189365483\",\n            \"OwnerCount\": 65\n          },\n          \"PreviousTxnID\": \"FA533CAF923F3FF9A80705AF6E792A8616A284511F57C480868BBF901D3D0299\",\n          \"PreviousTxnLgrSeq\": 69059874\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r3Xud98xTUTiXxGp2LbmFtFTWRWeaZSCad\",\n            \"Balance\": \"90859045\",\n            \"Flags\": 0,\n            \"OwnerCount\": 13,\n            \"Sequence\": 67537417\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"4B46C561D787FCE784A8F03C01CC2242A2F0165B1B237672311921D245B3ED2C\",\n          \"PreviousFields\": {\n            \"Balance\": \"76859045\",\n            \"OwnerCount\": 14\n          },\n          \"PreviousTxnID\": \"53149904186436D8AFCCE116B58CABCAC1D0A5A777CE5FCC85F86624A2BD8EBF\",\n          \"PreviousTxnLgrSeq\": 68994565\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rDvF12VVLg8CD36Ba9U4HUB5q7AWai6BFi\",\n            \"Balance\": \"1753159516\",\n            \"Flags\": 0,\n            \"OwnerCount\": 65,\n            \"Sequence\": 64347088\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"4B79D30A801999B679C38CB9A67B24DDE01B137E50ABE8DE69988333E62ED224\",\n          \"PreviousFields\": {\n            \"Balance\": \"1174393248\",\n            \"OwnerCount\": 67\n          },\n          \"PreviousTxnID\": \"BC74D0A9E4EDA5D6E4E11A9DB5410D8367AA0E2F9F34E8312365067BD5A8C814\",\n          \"PreviousTxnLgrSeq\": 69059910\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"ra2BXpvnVUqyCNaxAUf9Co2AxYzuey129Y\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521C6BF526340000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"5\",\n            \"PreviousTxnID\": \"3D5002CBE52C8C8895106E106203B2439D38BD923326986397F35287303BD6C4\",\n            \"PreviousTxnLgrSeq\": 68883712,\n            \"Sequence\": 67609020,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"4B7AA7CE374C513F44EA9EEFFBE942B42583CE17F3325771F43C3676DEF1A666\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"1800000000\"\n            },\n            \"TakerPays\": \"14400000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rGR9AifcxWmhBqTR2JWAPooQsR9kW5yzj6\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"98a\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"4B8296210D50FE257D5E5B5E32EFCF38A75FDE5478CA32D9F5E236281901FEEC\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-7785989866\"\n            }\n          },\n          \"PreviousTxnID\": \"B0C7A92FF510142A86FDF9397B7D65D638E96FD8263E0F33873BF345E223772A\",\n          \"PreviousTxnLgrSeq\": 67991593\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rGZkP89rxHSHy1opAagx8cUx4JdMhr9v4\",\n            \"Balance\": \"1272600839\",\n            \"Flags\": 0,\n            \"OwnerCount\": 74,\n            \"Sequence\": 66951176\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"4BA4C4C256592E5A880B9FC6DC350C29D402EE35438CB528F1B275E85B3E2908\",\n          \"PreviousFields\": {\n            \"Balance\": \"756600839\",\n            \"OwnerCount\": 75\n          },\n          \"PreviousTxnID\": \"C96AF805DA0893DDF5B14F95A229CEB8FCA7D4A906F80C9E94F0A4C70EBA70D4\",\n          \"PreviousTxnLgrSeq\": 69063985\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rjD7dFqNXSEK4juN3ntGwbYn1P3xjepVf\",\n            \"Balance\": \"1304425789\",\n            \"Flags\": 0,\n            \"OwnerCount\": 61,\n            \"Sequence\": 67707161\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"4BB7FA98D2EBD7F97E5F47A70058C826D3F0338C333865EFCCA4E4B717496BB9\",\n          \"PreviousFields\": {\n            \"Balance\": \"1265528567\",\n            \"OwnerCount\": 62\n          },\n          \"PreviousTxnID\": \"4A2C7C22BA14BAC393F9E1E88D5219F15AF82FAB60E95FD7C4E4C8C6278F0B32\",\n          \"PreviousTxnLgrSeq\": 68667171\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rNtB5pUvufMkzs55wL88pVuh3xt7LVW2mR\",\n            \"Balance\": \"293539450\",\n            \"Flags\": 0,\n            \"OwnerCount\": 79,\n            \"Sequence\": 67385936\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"4BE66C0DF1E17EDED170B3319C6F427611D0CB1A8E5C94A1F4D0ADF84D575B51\",\n          \"PreviousFields\": {\n            \"Balance\": \"176739450\",\n            \"OwnerCount\": 80\n          },\n          \"PreviousTxnID\": \"14C3EE2428E7A7830E55F893663F7B688923D198636EEEF4904AEEFAA228EA93\",\n          \"PreviousTxnLgrSeq\": 69064150\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rMMTgtHSock7M74yRKkp4ug6i14nGeCJhW\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"HighNode\": \"5\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"a72\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"4C0950AF58C175F31C4DC4C511ABC9354804565B9FE80C37725D1C7DB1E725B4\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-27000434730.43863\"\n            }\n          },\n          \"PreviousTxnID\": \"2F49AD0AAC90C7B2EAC64E01FB56221BF5E622E30BD743EB8290D9E037020491\",\n          \"PreviousTxnLgrSeq\": 69062242\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rpWE8DQzMegfBwaPaQhF9EGfxWWxvqRwk5\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521C6BF5261A126C\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"CA235A6BB92DD1492486E3F007C23317A46FF4F6A6B8DD6CE28C90840D1AFC1D\",\n            \"PreviousTxnLgrSeq\": 68814473,\n            \"Sequence\": 67603188,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"1527891765324528e-4\"\n            },\n            \"TakerPays\": \"1222313412\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"4C22DE87DAAF9B449F7B612D1465CC9891A6659CEB2975E5F76428835F9A9D2F\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rE2zUmDvH8vtBsGPBTdLSJW8rDLNVy8g4V\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652187152CE99C92A\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"ED0D9427327AF4A41060266802D47544E003ABB90E3103F3727BE4EE9E12C7B2\",\n            \"PreviousTxnLgrSeq\": 68946094,\n            \"Sequence\": 67407794,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"4C57490A81F59085354E592EBA426698F5B9CF39151FFF995B523E140757B9DA\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"10300120049.77974\"\n            },\n            \"TakerPays\": \"70864825\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"razceqmpdpjLd5o52i1GiaZJhmB8SEbfCa\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365306651729AB2880\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"b\",\n            \"PreviousTxnID\": \"558E3042166379EC784E8154E45E316D059B7742C81BDCB0E54C8D5CAEF9B882\",\n            \"PreviousTxnLgrSeq\": 67960095,\n            \"Sequence\": 1036,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"4CB5AF6F93CC1B0C7D78E2DADA32359D0DA48C1C6B290653B4BCFC1A29462F5F\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"1111111100000000e-4\"\n            },\n            \"TakerPays\": \"2000000000\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rJd8ipxtKA6u9iXpvCJYQrsES2Q4FsySHR\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520E35FA931A0000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"C016250EFFD5BAEAF03E6565DE04B559241BF8A11FB33DC67B0CC3C60371CFDC\",\n            \"PreviousTxnLgrSeq\": 69006201,\n            \"Sequence\": 68739604,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"4CB92A8A384214BB975537D73F72C4C8C848A2E0F67D925BE0E52BEDB39F6EBD\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"8000000000\"\n            },\n            \"TakerPays\": \"32000000\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rKWwHEb7RPAjRUVyvtfHVUJ1WZjECFhjbE\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365317AF4C4A1AF100\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"c\",\n            \"PreviousTxnID\": \"D3FE8E97942564B04F1ECCAAF659B242719A4FF9C0E20AD705A28C93C9D1DB1B\",\n            \"PreviousTxnLgrSeq\": 68787903,\n            \"Sequence\": 66665407,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"4CC25120BE89CFD062EEBEA03EAFC3C1A9322BC57D18CF2A085FF67BA16BE8A7\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"15000000000\"\n            },\n            \"TakerPays\": \"999999999\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r9dqJno4U42mpcjAymrrUS11q5rAWazGfP\",\n            \"Balance\": \"2404570042\",\n            \"Flags\": 0,\n            \"OwnerCount\": 30,\n            \"Sequence\": 67682951\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"4CCAAC4CF0D94C077E2F9CA67BDB334159042AB591F690F960A3C5C29EDB8A58\",\n          \"PreviousFields\": {\n            \"Balance\": \"2072504924\",\n            \"OwnerCount\": 31\n          },\n          \"PreviousTxnID\": \"86035DDAEA62CD5174BDF5800B0271EAB6BC3AA9583843BFD84EF15610D39D07\",\n          \"PreviousTxnLgrSeq\": 69046172\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rUyceekfg9mU133ecSKptNTpj4nYnFMi58\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365308E1BC95FA5F00\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"8\",\n            \"PreviousTxnID\": \"061881001F217F9FFC3291E504A2D350554F20EAE3AF0E817ABE28F5992D37C7\",\n            \"PreviousTxnLgrSeq\": 68893756,\n            \"Sequence\": 67404799,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"4D0797FA13DCFB1706691DC869940549FEAD5D9246536A06504313F7AA991EE1\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"1000000000\"\n            },\n            \"TakerPays\": \"24999999\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"6\",\n            \"IndexPrevious\": \"4\",\n            \"Owner\": \"rwJrcmU1fHLmHgWcKC1D4bZQNkUGJs165m\",\n            \"RootIndex\": \"01E34EB3EC1E65D67D914A6A34159F3501A27EDE06C74AE4991535532C4547AB\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"4D3BC5DF909D4C1E362E443C7564F247B627C7185687754F856FC0C07095CFF5\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"3\",\n            \"Owner\": \"rpRu4PM7TpS2K481Ac6ESUDRf5QmAfc6M2\",\n            \"RootIndex\": \"6A5D500F375C617BF499C475923E1C77F57802A6727E94312C931EAEEE17E5FD\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"4D49D79023ED5F7581C9ACE2970C3785E49BD120F43419DC9A3B19A400D1A861\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rMAWeQvUd5zQpyY9hSdaUMRMTQHcgAXvj5\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365212795F57D93AF3\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"1\",\n            \"PreviousTxnID\": \"AAFB91896FF69B856294CBB8FE43AB3288CB226462EF2922E9856E45A3FFC20F\",\n            \"PreviousTxnLgrSeq\": 68996610,\n            \"Sequence\": 67781446,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7952966309.5386\"\n            },\n            \"TakerPays\": \"41355424\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"4D620092B79ADDAD1A6D4FED8B1FB19BC10AFF4AD44D5A93D1B07B548C5F96C8\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"44675377257.14286\"\n            },\n            \"TakerPays\": \"232311961\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rDqBWAYNudfa8rBsr7YDsdDxeAoNRsxfPV\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365319EF4FB2D8B8F0\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"3\",\n            \"PreviousTxnID\": \"5D9B7650015371FF5CD604AA4BCE1B7D2BD79BDE53FAFD0FB0C914099BDA6894\",\n            \"PreviousTxnLgrSeq\": 68246243,\n            \"Sequence\": 67406147,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"4D775ACF02DF5A6CF7AC81C075B36F48C9663981552BB47B1F1A1A9AA6F7F570\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"38929949330\"\n            },\n            \"TakerPays\": \"2841886301\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rMhxYNNMAgwGdSciDqnCb8tVqJZ22VCCL\",\n            \"Balance\": \"1711470059\",\n            \"Flags\": 0,\n            \"OwnerCount\": 10,\n            \"Sequence\": 68815979\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"4D8FC4075BA27E8346A15533D0E1FCCB2CB4FBEF8F4A54EA4A9223978F0CF3C3\",\n          \"PreviousFields\": {\n            \"Balance\": \"735167343\",\n            \"OwnerCount\": 11\n          },\n          \"PreviousTxnID\": \"591AF6843E6CE5467BD8ADE5737482C122DA75BEDCD032595EBECDB808C78752\",\n          \"PreviousTxnLgrSeq\": 69055709\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"6\",\n            \"Owner\": \"rzNhpkxVUc86h9CJyB1qssHYenzkVpyn7\",\n            \"RootIndex\": \"2817F24AED7221724CD05BED3BE3723199992CD9AC95B71F7FF08C542CF79EAA\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"4DBE6DBFBE579FECACA0B37345BDB674B4113368B515B28BB38767B75E284EC0\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r3PYAn9d1DTFzJ9kuvFnhudgwsVZ6pm5hT\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520C65AEC38C6200\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"6\",\n            \"PreviousTxnID\": \"D11C8EAC4351BDB75B8DD49611886F0EE73421821AF335E86B2602825598981A\",\n            \"PreviousTxnLgrSeq\": 69036956,\n            \"Sequence\": 67442364,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"4DC371DD15F3DCEBE1C5EE206C4B5CE46EC6BC9A8A7D3F02688A17D6D8E1F1CF\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"1700000000000000e-4\"\n            },\n            \"TakerPays\": \"593215170\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"9\",\n            \"IndexPrevious\": \"7\",\n            \"Owner\": \"rUyceekfg9mU133ecSKptNTpj4nYnFMi58\",\n            \"RootIndex\": \"CEB5317C13A49202EBDCCCE351F27F8433B69F262723A1CAD1421E08286DD1CD\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"4E1A9C6AD874856F05DDC6671F0035A39D1FF256CB222D200A7CC601E8686804\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rJWkGGCNuazEf7ch7C9bZkiiYy62Z95SA9\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36522386F269EF9228\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"4\",\n            \"PreviousTxnID\": \"2EB0CE7E729CFDF46AC17FE3BFEA1158E9D8D97B98078F11CD0B1D94AC985FF4\",\n            \"PreviousTxnLgrSeq\": 67966759,\n            \"Sequence\": 67239474,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7785989876\"\n            },\n            \"TakerPays\": \"77859898\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"4E1B0844A836CA8857755CC72A5D2F704DA71FE6E1490472D18BF7A5C822771F\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rGdg98Rr24zGwE9rmiPzKi8GkmkhyHyAL1\",\n            \"RootIndex\": \"5A369437417287EDD35070A07CF60A49636B8F5B02220F99E6A9A49AF433CE78\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"4E246605563664359B9C9D007D5C8A6E4B3B6013C389204851B1EBC8247A2357\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rLtYxg3QjyCpbY68rJg6XCeecMyCnzBNCt\",\n              \"value\": \"1000000000000000\"\n            },\n            \"HighNode\": \"1\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"2db\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"4E4BECB56AEE0F9AA0097E7E0EFE6FEF03D24EFC4438512DB0185C5DB64D90F3\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-7785989866\"\n            }\n          },\n          \"PreviousTxnID\": \"9BDA807693B9890BAC18A9C5D5E0B94444CD5AB11D76A41F6CB0A7D1CF7ECD00\",\n          \"PreviousTxnLgrSeq\": 67951481\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rsMSXmszPAgaY8sipuVq6gfdgUX3zpX6am\",\n            \"Balance\": \"130001470\",\n            \"Flags\": 0,\n            \"OwnerCount\": 27,\n            \"Sequence\": 67479734\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"4E669F67DFD47A5552BA8E80BBAECB4A244EA1040D6699517176B510B776EE7A\",\n          \"PreviousFields\": {\n            \"Balance\": \"113751470\",\n            \"OwnerCount\": 28\n          },\n          \"PreviousTxnID\": \"64B14FC4004720E15721394461E16A7F86FCAFE91BF869DBB5C8FFB16B662E70\",\n          \"PreviousTxnLgrSeq\": 69062545\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rN3pszUgbBgf7yZ9jxiHTXwStoE32PDsHm\",\n            \"Balance\": \"574767656\",\n            \"Flags\": 0,\n            \"OwnerCount\": 224,\n            \"Sequence\": 67231722\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"4EB2580B2588F3AF6A7962CD0326D2D5D93C3DFFE99DB1BF9C749DA8F86EBEC5\",\n          \"PreviousFields\": {\n            \"Balance\": \"512479737\",\n            \"OwnerCount\": 225\n          },\n          \"PreviousTxnID\": \"C0EF98655C267249852166FE51ED5BF54659358996455152CDE2419E74CC6A74\",\n          \"PreviousTxnLgrSeq\": 69054945\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"14000000000.07\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"7de\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rwNMX6iAFTsFK2PG8PCNG4AJ5b8UyrSx8p\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"4EC6DE0E6A84B8AAF1102474324438F121D95B2DCBDFA0126C007B169B402F7E\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"15000000000.07\"\n            }\n          },\n          \"PreviousTxnID\": \"B26DC325A1D9E9B83A748A6D7631D27156356D35C839A5C414EC90AAE9D2391E\",\n          \"PreviousTxnLgrSeq\": 68885942\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"504\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rGZkP89rxHSHy1opAagx8cUx4JdMhr9v4\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"4ECC9C9E4762D87C13BC514737767686BBCAC84A31603379DA6F419A83711CF5\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"43000000000\"\n            }\n          },\n          \"PreviousTxnID\": \"CFC95D9C93F4541AA703BCE9A6C735C7CFA64E3B8276A2D37CAA3780386047A3\",\n          \"PreviousTxnLgrSeq\": 68898713\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r3pUPUHoXbK4o5wjfPWjqQe4Xh2wu2KWvq\",\n            \"Balance\": \"310927167\",\n            \"Flags\": 0,\n            \"OwnerCount\": 19,\n            \"Sequence\": 67672856\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"4EDFD2A9087989FA1AD241ABA85238E331CC9D66184ED8A54CDEF4F765938CB7\",\n          \"PreviousFields\": {\n            \"Balance\": \"195806997\",\n            \"OwnerCount\": 20\n          },\n          \"PreviousTxnID\": \"59B05A5F63B90A03B9C7AA79C60C372E02A3E5466469AEA8EA899460A6CDFC4B\",\n          \"PreviousTxnLgrSeq\": 69063609\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rBqYpFjv2TLUiwx2Lr5vgGxoEgjhq1XnB5\",\n            \"RootIndex\": \"4EF58F2E451042038788FF67528BE45B3D79C528B53126910288A332095FD950\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"4EF58F2E451042038788FF67528BE45B3D79C528B53126910288A332095FD950\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rNYRNtrFPumPwsB7zbi3VjZLg6WLWBUJvy\",\n              \"value\": \"9999688558266538e-1\"\n            },\n            \"HighNode\": \"2\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"e19\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"4F26B8F8DA9F2B268A2C2D5F306DA2DD7D0D683F4D74972EB29F0F867CC0039A\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-88997878564\"\n            }\n          },\n          \"PreviousTxnID\": \"F943A48993EECEF3E07DE71DB0539CB3D4D3B65E1DE835917F1762F979C4AC07\",\n          \"PreviousTxnLgrSeq\": 69030176\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"c\",\n            \"IndexPrevious\": \"a\",\n            \"Owner\": \"rQHTzMfwiuyHEaGpCTUE68vbkTR6tXahXr\",\n            \"RootIndex\": \"0BBEE197AC5093D5305EA586C019C4E1CC9B89AFDF5B68BCBC4AA0F62455020E\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"4F39574DD11CC4486D0301C30C84206666AC1BA4DAA13E9A78D2F432D8BB8912\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"2\",\n            \"Owner\": \"r3Tj4vpfRp2r95SM97TwEFGCUZayDqKM4h\",\n            \"RootIndex\": \"EFBAA4BC6C4607A926A936E8BF420AB3BFDB602F725917A7702229AE08351CE5\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"4F3B9F22D5173020B2D6ABA24819F93FA9F6F6296A56DC56ED3748F22A93C96E\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rGEpUHYXy3Lt8KvmaKG9wGEB51H1nGAcJ\",\n            \"Balance\": \"87051447\",\n            \"Flags\": 0,\n            \"OwnerCount\": 17,\n            \"Sequence\": 68786199\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"4F7A88421C161B91BEEC4931D86C56F6F8C112619CFFEB50C7E875ED693688C9\",\n          \"PreviousFields\": {\n            \"Balance\": \"56277602\",\n            \"OwnerCount\": 18\n          },\n          \"PreviousTxnID\": \"3D65188DD75B5B8B6581DF380E1CA1F0EE5E533D14EEC2BBC58349190CFD8ADE\",\n          \"PreviousTxnLgrSeq\": 69052280\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rpPjK8mxW6UndeHNvtgJPSaQjARCSXGCWY\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365213B7B20FF80987\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"6\",\n            \"PreviousTxnID\": \"0846E46667BDCE728864A5940E56AB1A739C01DFC227A7FE8FD11B8A6B2E705E\",\n            \"PreviousTxnLgrSeq\": 69030835,\n            \"Sequence\": 65071357,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"4F7C25EDE4091BFBD35F5DE9A4517E960859E034DF614CE278E208C81CF21309\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"17785989866\"\n            },\n            \"TakerPays\": \"98712243\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"4\",\n            \"Owner\": \"rDrVDF6etbhSYtnBoqxbRd4CyGHQ5YNR4z\",\n            \"RootIndex\": \"C26BB1FB2C7C120E678C1812EFAB137AAADBF055C2B13ABA2DA8C6403B5047A6\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"4FD56040F39FB63846CD1954B85ACE9054D5E7E8CC0DC3B045BD99C86ED0096C\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rESTNm5GsJf8WQEnEmszRCsiEzHuFAcgQk\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"HighNode\": \"1\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"3f6\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"4FED93C7F9F35DCC1DF9DB3A395B1B81733D7AA4B1267CA7CE4E20EDACB1D296\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-7785989866\"\n            }\n          },\n          \"PreviousTxnID\": \"19B6F0D0816D4C17E3F993EC0217D4357A9731081306CCED2EB90C4845000118\",\n          \"PreviousTxnLgrSeq\": 67975549\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rsMSXmszPAgaY8sipuVq6gfdgUX3zpX6am\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521717B72F0A4000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"B8C3D1E0B275D2A2AA642341AB08EC6A097B40F3A187A0B8F24605CA06EC84C3\",\n            \"PreviousTxnLgrSeq\": 68904147,\n            \"Sequence\": 67479722,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"4FF31B3934B1B8696EC698023257EF425B19119A45D6FCE559AB80AF0A47BAAB\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"2500000000\"\n            },\n            \"TakerPays\": \"16250000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rU7MhPtUbjCow4e3Hoqxv9PVQ7ebo3mLen\",\n            \"Balance\": \"120699265\",\n            \"Flags\": 0,\n            \"OwnerCount\": 24,\n            \"Sequence\": 67761564\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"4FFBBAFBA0DAC877BF7FB14FCDE83B8F9C5BEA1B658948FBB7ECDF8DB7A0B998\",\n          \"PreviousFields\": {\n            \"Balance\": \"60046404\",\n            \"OwnerCount\": 25\n          },\n          \"PreviousTxnID\": \"BEFA8BD15E74719118E9FF63CB192D9A3E34A98B41018AAA9F9CA6EEBD3548E8\",\n          \"PreviousTxnLgrSeq\": 69043963\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"14853116203.45242\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"e93\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rajb91Ucmbfxe1KoUEpAtJi8eo5bQVWeUW\",\n              \"value\": \"9999610698224583e-1\"\n            },\n            \"LowNode\": \"4\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"50BFEDD2E61550FEE607AB898C5310F4E1B8FDF23BED3C84DB42645D3C9E04AD\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"17474254357.00284\"\n            }\n          },\n          \"PreviousTxnID\": \"2DF8A2FE1F6962DBA117F34104091F76B7B0D7B5973D5FB74FDDD4FFD166533E\",\n          \"PreviousTxnLgrSeq\": 68897069\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"20204735610.13077\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"7c0\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rasT449dxdmpB7Ak1GqwE9TdrkZEty1tAZ\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"LowNode\": \"1\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"50CCD437BD26AAFED346E869E7E79E6F00AEC8D6282B50DF11E9FF00C9408693\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"50204735610.13077\"\n            }\n          },\n          \"PreviousTxnID\": \"93A554565DE6A6E9D68CD71CA38842CC0036DA3B444DCB89B45D5A70051AA999\",\n          \"PreviousTxnLgrSeq\": 68999467\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rHycUxo3HpqiVRhve7H8L4y94dvPHTubXw\",\n            \"Balance\": \"216006459\",\n            \"Flags\": 0,\n            \"OwnerCount\": 96,\n            \"Sequence\": 67540349\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"50F4BA1E5E8F856D17577DC9810FBB9D8A262F8E3E1CDAB254D45979F9BBBA64\",\n          \"PreviousFields\": {\n            \"OwnerCount\": 97\n          },\n          \"PreviousTxnID\": \"1C3113321B760B7AAAA1AAEA1AE716891186FDF746A1BC188DA3B87D7B49424F\",\n          \"PreviousTxnLgrSeq\": 69062746\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rT8my4rryyrydKwE4W9LqQNosfNjZQb3r\",\n            \"Balance\": \"468372728\",\n            \"Flags\": 0,\n            \"OwnerCount\": 95,\n            \"Sequence\": 66283086\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"5129055654679FACF46B3CBB4CCE160E253967675B94B791F7B2CBDB261ED21F\",\n          \"PreviousFields\": {\n            \"Balance\": \"231372729\",\n            \"OwnerCount\": 96\n          },\n          \"PreviousTxnID\": \"38A70B8A798A6151E43753BDC6C93C1EE888998C6F920913BAD1426828D54510\",\n          \"PreviousTxnLgrSeq\": 69061892\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rPvqZW8q9bpYrAKjGhtL7AZAq8bvqEQDuq\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365217CD9D4E0B01B5\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"c\",\n            \"PreviousTxnID\": \"A7ECE0EAF3D23A92E76E817897E93DAE9A385C51F27E31AFE50837B5D0588243\",\n            \"PreviousTxnLgrSeq\": 68899307,\n            \"Sequence\": 66726717,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"512E5FE7C23AFA5B2250FF3F64E02E02809A3F22600847CE377AE765DA2A9409\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"6052088387.79299\"\n            },\n            \"TakerPays\": \"40548992\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"19466614452.53472\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"ec3\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rsRPHwDyRv18j1hT1wkQEHCvtCpgKYYyGc\",\n              \"value\": \"9999610698224570e-1\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"51351F7BD041B29995F36E180E5CF73753C220238F910BDD0214C8EA59FA2D00\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"39732064390.03472\"\n            }\n          },\n          \"PreviousTxnID\": \"3129C385DDB284EBEC832AE14AB8332EE0D5638C7AE75CC72F34DFBFB036C411\",\n          \"PreviousTxnLgrSeq\": 68993241\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r91eSWyof8C4aiDL2gM1xTdmc9GJy3rTWb\",\n            \"Balance\": \"324196364\",\n            \"Flags\": 0,\n            \"OwnerCount\": 54,\n            \"Sequence\": 67326843\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"518134975C0643509E01AF086AD0D863C4AE27E554E14718E61AE5CCBDBF0260\",\n          \"PreviousFields\": {\n            \"Balance\": \"149196364\",\n            \"OwnerCount\": 55\n          },\n          \"PreviousTxnID\": \"5CB9AA8033C9E8F12C9D5E1AF933849EAC489EAA405BD77925F3D62B31D20975\",\n          \"PreviousTxnLgrSeq\": 69063964\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"1\",\n            \"Owner\": \"raQmxvieBXeCfDzRKXdekiw7qucsszMReU\",\n            \"RootIndex\": \"F46DCA30B7BAB7E35524290031C9B722FCCC4A3E5A8A8C252060452A5FF5194A\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"5198D18EE1F4F95BB01F5C604ADE87568E7AF7BB2619F4465FF7F2C5A0B9184B\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rLK9N8ay11j21CKs3ryC5kp7SYR5piJByc\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"3f0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"51B894CBF7DEB83C69CB3208075C319397A64C3712B02A80E04901E3322E3281\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-7785989866\"\n            }\n          },\n          \"PreviousTxnID\": \"0251C2B8EC5120F6FDCD04D0FE909563DE1CB74606AD7C404C761D2A9076EB1A\",\n          \"PreviousTxnLgrSeq\": 67975483\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rxAPteBXbVsr6qvwqA54qERcdkojkjdmC\",\n            \"Balance\": \"354757820\",\n            \"Flags\": 0,\n            \"OwnerCount\": 33,\n            \"Sequence\": 66533152\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"51C3950ED5304F31AD6F959F9E2013D139B772C6C6C44FFB43F45E186A4B5931\",\n          \"PreviousFields\": {\n            \"Balance\": \"154757820\",\n            \"OwnerCount\": 34\n          },\n          \"PreviousTxnID\": \"10E879069FC939DB2F2B53CDC251501F02E1D0568E67B10995010029E1CCEA77\",\n          \"PreviousTxnLgrSeq\": 69059802\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"65976621524.3744\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"e5d\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rp8YVv74whPGdy9huBZHuPy5D3CRKgFFsj\",\n              \"value\": \"1000000000000000e-1\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"51ED77332C9736D4AE9149D38799E04CFDCFF18E92308BE7FE85E49C141B53A8\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"1009766215243744e-4\"\n            }\n          },\n          \"PreviousTxnID\": \"B3926E1ED48FCB36A84764BCFE5DC548BE48876B46C3FF2AAAB95115986823C8\",\n          \"PreviousTxnLgrSeq\": 68999990\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rJjrokNPSa5xiAbh8N8cqmhVc4ma95FBpt\",\n            \"Balance\": \"1194043675\",\n            \"Flags\": 0,\n            \"OwnerCount\": 54,\n            \"Sequence\": 65343275\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"5222FAC93B4F1FFAC6B0FC4571BBB535C918EC3E438F188C8B0AD3081EF66980\",\n          \"PreviousFields\": {\n            \"Balance\": \"1133858386\",\n            \"OwnerCount\": 55\n          },\n          \"PreviousTxnID\": \"A11C67B7AE58C31529C59735B9D7C21D23534BE1D5F688B8CE0EB4882DC99C4E\",\n          \"PreviousTxnLgrSeq\": 69059772\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"5\",\n            \"IndexPrevious\": \"3\",\n            \"Owner\": \"r3oDrfWCL4zZRGoUNRd8Ywu9PJWFZXc764\",\n            \"RootIndex\": \"66D464CDDDD7F3DC24B0EC5937101EA52CC0AF5FB4540A5943652C56DF458154\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"52336374168545FF11AF982F9CDC207E884316D10C5A28EA9BD56963F50288C4\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r93dgTvDnFJsP2YGRiJvd89D1xLTmgR4fp\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520A981478FCD46A\",\n            \"BookNode\": \"0\",\n            \"Flags\": 0,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"4230C60E87BCF2B65030F8F8FC990ECE435D621587DFC444573EB6BAC6CD0219\",\n            \"PreviousTxnLgrSeq\": 69052046,\n            \"Sequence\": 68599301,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"5238CF1CD1AEF394EF4BF59F942F2B20D9DD096F29D5E66EDA1582815D3E5EA0\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"74715871844.66\"\n            },\n            \"TakerPays\": \"222800000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rGdg98Rr24zGwE9rmiPzKi8GkmkhyHyAL1\",\n            \"Balance\": \"1151220667\",\n            \"Flags\": 0,\n            \"OwnerCount\": 33,\n            \"Sequence\": 67164997\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"527192498CBFF8BD4D498260F18C32D23106005E468CFCB12F89ED2F0728524E\",\n          \"PreviousFields\": {\n            \"Balance\": \"151220667\",\n            \"OwnerCount\": 34\n          },\n          \"PreviousTxnID\": \"F894E92C3482EC09A0716D685675FFA9FFEE33A20982553AB745A28A9E077EFE\",\n          \"PreviousTxnLgrSeq\": 68990525\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rpUjTJzaJN22XoKjav3YSk3GH9t3GZqK8N\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653038D7EA50921E1\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"5D57CCD2EE9D8C7FB7B1C124A5747F3C880C59428C63FC8F25148D391DBEA723\",\n            \"PreviousTxnLgrSeq\": 68890957,\n            \"Sequence\": 67522645,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"528E2D3FE6EF6346B81E173F6C9DED9FA2F22FEDDEE56CA56ACE4114E8848402\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7785989866\"\n            },\n            \"TakerPays\": \"77859899\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rsWg26FevrM9h2PFcanVpvpaLNuoGpLnrB\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365311C37937E08000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 0,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"1E63D9C71BA5E435C690DDE49C3CC7E4034057BB224CD25F276D0BD856E786F3\",\n            \"PreviousTxnLgrSeq\": 68784970,\n            \"Sequence\": 67689871,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"52AD4450C9C569225D443CF0ADEE258DE108BD9434F75360D21B925558F055AD\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"5000000000\"\n            },\n            \"TakerPays\": \"250000000\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rwuaSP5dsGLmc6gNnv3bWEjmtkexmA4H3G\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36531FF973CAF5ED5C\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"2\",\n            \"PreviousTxnID\": \"A4463D7D7DBF76E3A6CB206FB46BC4CDCA4CF94B39291E538F6CE9CD43F37E4F\",\n            \"PreviousTxnLgrSeq\": 68163479,\n            \"Sequence\": 67153717,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"52C5ECD1D67FE0B789CE1DA81BFB02F37A8186B225E93D205E7F0038A7F52F2A\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"93431878392\"\n            },\n            \"TakerPays\": \"8408869055\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"5\",\n            \"Owner\": \"rwhKYMZGMmf9zeLdZWq4rs31DQeaxn65R2\",\n            \"RootIndex\": \"3836C97E94B06D6514DA0DDA5F224B7BF880338C0E321D44E28B3E67B6E1AB44\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"52DC5F364D964273612FC9C795E1460224484731AACAAC164CD0CF466CBA4582\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rHT6EWF9zJzwNtHQsxyrRMSQL4h5GhkcUn\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520C0B2FE1C9E000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"1\",\n            \"PreviousTxnID\": \"8EADD69F2A06AFFE8D2BEC7E5A07BE0F170AAC405E0509809E1DF11FC51EB9A0\",\n            \"PreviousTxnLgrSeq\": 69011679,\n            \"Sequence\": 67682074,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"530A6334C8FE495F7E47CD5FB42ECDF1C9883EAD31047B75DBC2E1CA5AB8CAF9\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"2000000000000000e-4\"\n            },\n            \"TakerPays\": \"678000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r3XYRBp1PnkL2JesUDNw5zo4yxmkYQD9dK\",\n            \"Balance\": \"190353869\",\n            \"Flags\": 0,\n            \"OwnerCount\": 36,\n            \"Sequence\": 67819170\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"53128BD1EBBBC592E0DB4D38A83CD6CA66C19619A4B3CC034AF1330B4461F95C\",\n          \"PreviousFields\": {\n            \"OwnerCount\": 37\n          },\n          \"PreviousTxnID\": \"37D8AFC8414C580CBBFE8C923E409B94D9EEE38C956CF89E0A0C59C7E4CC4DEF\",\n          \"PreviousTxnLgrSeq\": 69047806\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rLHtFMi1ohYj9RynpB1wRfEAaLtjXkdRH9\",\n              \"value\": \"9999844278063876e-1\"\n            },\n            \"HighNode\": \"2\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"dea\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"5314E58AF6DB5ABAD964CAB4564609854A845294FD704B6BD9EC6180A6D6037B\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-44020340038.61044\"\n            }\n          },\n          \"PreviousTxnID\": \"001C79AD997F4EAA594FF866E94549603F902CCF63C7A91A4C707E62EDF37C17\",\n          \"PreviousTxnLgrSeq\": 69034878\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-37182500900\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rKTKekwyDDoxNtZZTwXL9ebqeVYRp47BVq\",\n              \"value\": \"9999999999999990e-1\"\n            },\n            \"HighNode\": \"7\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"d7f\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"5319E699AAF1025DEECE5709CD0A21E2FE2AE4BE788E725543DAA7A97C0A522B\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-49182500900\"\n            }\n          },\n          \"PreviousTxnID\": \"97FE6E520473447D0DABD446F445E5214896753CDB3CD1F20856556862E64395\",\n          \"PreviousTxnLgrSeq\": 69014749\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"30600802112.45234\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"8d9\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"ra1aHhcQxB9sHWm7ppBMKEQWs4FTfRGZAg\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"LowNode\": \"3\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"53267F52A04F5E01907DD011ADC0D5A687607E9F0CE67C9A7DD05EA5E17C2F76\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"44400802112.45234\"\n            }\n          },\n          \"PreviousTxnID\": \"DAC56E9CE200345EA3FA9579F17EF48D644FFE307FAB52A4A8BAB49AA2F49BAB\",\n          \"PreviousTxnLgrSeq\": 68998978\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rQHTzMfwiuyHEaGpCTUE68vbkTR6tXahXr\",\n            \"Balance\": \"1064272262\",\n            \"Flags\": 0,\n            \"OwnerCount\": 366,\n            \"Sequence\": 66480021\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"5326C6BBB57C59ADF30C8524D0F9046255795536BE27D88DEAF49229C0136E51\",\n          \"PreviousFields\": {\n            \"Balance\": \"961323755\",\n            \"OwnerCount\": 367\n          },\n          \"PreviousTxnID\": \"4376A2814CF3AC2C5DFEA95DD318A4D31E6854941635BDBCD82A2D9446B627CE\",\n          \"PreviousTxnLgrSeq\": 69050055\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rshXc1NnrPiNRvKbbmnfgQpiSGYugiFUG7\",\n            \"RootIndex\": \"5371C9F890D7AF078B7B0F50065283D655DC3B5E38232877050FD7CD5BA42E96\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"5371C9F890D7AF078B7B0F50065283D655DC3B5E38232877050FD7CD5BA42E96\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rMGXtc2jn88JResx6QRWgyxUvdrXRwmZ7J\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"HighNode\": \"5\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"93f\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"537C0C76D10BF702CE337FD6CE5DD84CD0785E9FA9F14F0246A84572C659382E\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-45870196148.47777\"\n            }\n          },\n          \"PreviousTxnID\": \"58732A21CF85D8615C1DE685C3393865723F1B0D329D7EAC8110A7C8654D4EA6\",\n          \"PreviousTxnLgrSeq\": 69018517\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"9\",\n            \"IndexPrevious\": \"7\",\n            \"Owner\": \"rGhP8A7jhRj3qkYPUR35bRvLCJyxh7xmGq\",\n            \"RootIndex\": \"222749D87615438C32FA8B74492200C6F6C356D8E5283B7A8AE2028C137969CC\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"5384FC6610187967B8B7901BB7586DBE2C31187313BA9D428E3583B409B9B3C6\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rJeogNqHS69HkL8Le6zZoezAhGwpU4WPsc\",\n            \"Balance\": \"837875193\",\n            \"Flags\": 0,\n            \"OwnerCount\": 176,\n            \"Sequence\": 67482353\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"538BFAE6F3EF6C63D785C5BBC35EDC5846B9B08CF3AD6FBD4E0BC5AE84A92D99\",\n          \"PreviousFields\": {\n            \"Balance\": \"430686106\",\n            \"OwnerCount\": 177\n          },\n          \"PreviousTxnID\": \"EC896F1685107751C100CB7038A38A35E6C58E776B189206F9299E102DEC73D1\",\n          \"PreviousTxnLgrSeq\": 69061757\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rjuBmfDDfaXxXRPhcGsGb3qSjdrEUwMGT\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652128B8FF5B1A999\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"2\",\n            \"PreviousTxnID\": \"1FA10D85CB20F3FB21D6536A0C809D0A0C48B7DEAA3D1E81D0C9D0B546F66ECC\",\n            \"PreviousTxnLgrSeq\": 69003586,\n            \"Sequence\": 67439598,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"5068318489052185e-4\"\n            },\n            \"TakerPays\": \"2645662251\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"53DD464690B4C0F4332C69C640434B305F8FFE5594E1258AC4CF24BF0E70B7CD\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r4DDKcQaxRVhr17DMzNSrAYBvarHRXBJg5\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36522386F26343AE24\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"4\",\n            \"PreviousTxnID\": \"6F182E5A2A2634EC3308E58C12348DEA3DC552908A53F6D828D74B6F2377C54C\",\n            \"PreviousTxnLgrSeq\": 68897430,\n            \"Sequence\": 67317094,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"5400AD1F59D710095F69294C1C012076F89992B53CE8B62234E8D79FEDD20A9E\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"3913568382.004735\"\n            },\n            \"TakerPays\": \"39135683\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rw4M6hoNYisxYmeppD3bkmf1TuTcQrdsit\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521E32B478974000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 0,\n            \"OwnerNode\": \"a\",\n            \"PreviousTxnID\": \"348BDB29FF6A501E24CBA369B5EC28B4F1E2A8781B1D808BA8356292E6C8D426\",\n            \"PreviousTxnLgrSeq\": 68892627,\n            \"Sequence\": 66943991,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"5447E40FC0127E4BD60A061E206EB2E3F01C1B13375D78513EE6B4FA3E8658DC\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"10000000000\"\n            },\n            \"TakerPays\": \"85000000\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"ra1aHhcQxB9sHWm7ppBMKEQWs4FTfRGZAg\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520EEBE0B40E8000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"9\",\n            \"PreviousTxnID\": \"3697D406C815E63469505CD737CDFA86C91FD9237F095341CB288EA276E35DFB\",\n            \"PreviousTxnLgrSeq\": 68999005,\n            \"Sequence\": 66996681,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"544D271A1E6B97E226E8FE04F7C3888618CE660AD8773D414B81517584EE52A5\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"6500000000\"\n            },\n            \"TakerPays\": \"27300000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rKeFfq8ZvHbFWbsQBAeTB5Ng7aGtoLN84K\",\n            \"Balance\": \"1146089545\",\n            \"Flags\": 0,\n            \"OwnerCount\": 143,\n            \"Sequence\": 66392609\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"5450075C7864EA7D257DD5DA4A2B5BD082771A4656C945BC5FD2B75EFD0D186E\",\n          \"PreviousFields\": {\n            \"Balance\": \"823184545\",\n            \"OwnerCount\": 144\n          },\n          \"PreviousTxnID\": \"E62BB85BAA0DA3A2048374FB0FDFF3232341366BFF0479EE581B4B25EE87E1E4\",\n          \"PreviousTxnLgrSeq\": 69039110\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-76466058.394161\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rJmWpXLdftZbNdPMYkezgKmEya6R6cAt7T\",\n              \"value\": \"1000000000000000e-1\"\n            },\n            \"HighNode\": \"7\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"eeb\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"545C374CB66C75E415BE7FFFAA388414E2D1D8A508E25E29391208343FF839FD\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-9076466058.394161\"\n            }\n          },\n          \"PreviousTxnID\": \"25F9D815597E02DA7DD3007F40F176BF8FD0F7A24BC3B5653A231E44A13B8555\",\n          \"PreviousTxnLgrSeq\": 68991117\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rwBDva3asfNrXQeBmnkV3xbMnw7xi5A3dE\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36522386F26E726166\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"3\",\n            \"PreviousTxnID\": \"7D5E7B1FEBEBC77792F2BEA0E3DD4772E1153B5B60A55E70EFE8207277D7040C\",\n            \"PreviousTxnLgrSeq\": 69005360,\n            \"Sequence\": 67471067,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"5460B845E939FB47E7BBC044CAB10318788A6AEEF8FE1DC4D242CDF3D2956C9E\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"37614271082.48669\"\n            },\n            \"TakerPays\": \"376142710\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"raQmxvieBXeCfDzRKXdekiw7qucsszMReU\",\n            \"Balance\": \"2820245447\",\n            \"Flags\": 0,\n            \"OwnerCount\": 54,\n            \"Sequence\": 67458273\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"5492FC825D6A7EC4456646F79B48E2CA28C772B1232087DE7BEF779AC4CC76FD\",\n          \"PreviousFields\": {\n            \"Balance\": \"120245447\",\n            \"OwnerCount\": 55\n          },\n          \"PreviousTxnID\": \"886E6DBCC54947370EB5A2C8E66661F6CF831BE70F34C27FD6C75051285515B9\",\n          \"PreviousTxnLgrSeq\": 69055705\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rsqgHRLHgg1vHi8iA1w1J9amuuUAjwEzwa\",\n            \"Balance\": \"303777399\",\n            \"Flags\": 0,\n            \"OwnerCount\": 24,\n            \"Sequence\": 67757363\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"54AB2CAE916654E3A300C857D5B5617F3EFAB2A3316FFA47892FEAAF91E379D1\",\n          \"PreviousFields\": {\n            \"Balance\": \"62406163\",\n            \"OwnerCount\": 25\n          },\n          \"PreviousTxnID\": \"A5B73FBA7EE7D865CD4C95DEA517DCD0E4B9CE2E7FDBEF415FB6045CAE5B4C27\",\n          \"PreviousTxnLgrSeq\": 69020500\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"218\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"raKckiVpb6sE7hq7y1VGpF9YdGAVSbJJLu\",\n              \"value\": \"1000000000000000\"\n            },\n            \"LowNode\": \"3\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"54C862B6DFC3465BC0D9FE3570C6D2B0B04048DE3E87A44106AB4DFB71C3CF27\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"7785989866\"\n            }\n          },\n          \"PreviousTxnID\": \"D6F0BA3F9BE663BF601CF4748AE37B91ABBA711D173CE1343904D27344DFBDAD\",\n          \"PreviousTxnLgrSeq\": 67950397\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rHv2LE2MKKrQ83NMbQ2vv1DUDjByosxthL\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520F5904616287F9\",\n            \"BookNode\": \"0\",\n            \"Flags\": 0,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"360FDEF594EE00214774ADA86DF70782C047E7F844799405216A580F02EA739A\",\n            \"PreviousTxnLgrSeq\": 68983541,\n            \"Sequence\": 68499481,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"2771014299093231e-4\"\n            },\n            \"TakerPays\": \"1197078177\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"54E485B2F00403F6C75CD27498F4E75E1120A3140B212D197F2A8CC031D530FA\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rHXRGGkmL2bGwkbsz9mnpVi3eAZt5bThdo\",\n            \"RootIndex\": \"551CED7A60E875E6C1EA375C44A9ED46D17D7FE47D56F7B75BAF7CE4193B14E6\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"551CED7A60E875E6C1EA375C44A9ED46D17D7FE47D56F7B75BAF7CE4193B14E6\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rJ72ZDPTsPvQBUxDvaQd9t2mbD8BrogpBS\",\n            \"RootIndex\": \"5525B77252E339AA4D8E9945A8CD8C662F6A25140E5C86EA9A567338DA48BB67\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"5525B77252E339AA4D8E9945A8CD8C662F6A25140E5C86EA9A567338DA48BB67\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rNvk1SNQZhU6fsyMuaTeLucyw5x5uxfxQy\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521087E0FC23D000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"2\",\n            \"PreviousTxnID\": \"8E4B49A0F348EEEB606881444DA8027E310EC3A92AAE7BD078026BE5F7FA0325\",\n            \"PreviousTxnLgrSeq\": 68967943,\n            \"Sequence\": 67175580,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"5525CA7A1F6D40DF239C96D3F029E3014A9A6993343934B131601FEA4D29AB9D\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"5000000000\"\n            },\n            \"TakerPays\": \"23265000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"18\",\n            \"IndexPrevious\": \"16\",\n            \"Owner\": \"rphnh8aG8oBCdrBcgxYgNY8yVqi3b3XqbT\",\n            \"RootIndex\": \"F2BB8A5F4368D2D144DC15771F84601A2E2479FE8FE94437BFB57598407A5CC8\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"554808AD50DD4A54936FA08A96000F988B310BD6BC533F250736A263A88251E3\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rhMycFXh1AtyNRL2JeLJmhps2ufxBKY3Wy\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365305543DF6C9B894\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"8\",\n            \"PreviousTxnID\": \"6ED68E76A38025A066EF7790CD58A28966A484CB5721E976C5928FFF623B706D\",\n            \"PreviousTxnLgrSeq\": 68152669,\n            \"Sequence\": 67131649,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"15571979732\"\n            },\n            \"TakerPays\": \"233579695\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"5548BCD23C467981D0B117F894DC2A07FF3E9B66D778575307A24B8B84BDCF0A\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rBR21hAWPJuTd1btLDfunkJUeRSWsEaLpb\",\n            \"RootIndex\": \"5579D6BE4B30C16217FB379825F02E501E11FFF601C2ECB80C6B91B2AD79AF4C\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"5579D6BE4B30C16217FB379825F02E501E11FFF601C2ECB80C6B91B2AD79AF4C\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r9ma91EcMDXDCLQZDvceT9tDwHRT41gumt\",\n            \"Balance\": \"423589999\",\n            \"Flags\": 0,\n            \"OwnerCount\": 159,\n            \"Sequence\": 67518301\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"55B1C1C31815D2E269C2FCE3F1569CE490F52F1ACF216519A03A2DD49D470AD3\",\n          \"PreviousFields\": {\n            \"Balance\": \"345726101\",\n            \"OwnerCount\": 160\n          },\n          \"PreviousTxnID\": \"AB457CBFA27B38A510E50696108F353D1DD46B4E634A6680B9AA60D72CFF79C0\",\n          \"PreviousTxnLgrSeq\": 69062420\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rnfuLKZgLhpw1UJorfJH8G1ukEyA7JLf3n\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521FF973C4E67046\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"2\",\n            \"PreviousTxnID\": \"7DABBFD23C91B23097A02E5AE0C10C540C5A460F9AE181AECA9F35D2DD1F251D\",\n            \"PreviousTxnLgrSeq\": 68790847,\n            \"Sequence\": 67152415,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"55C69CE840994089C769E6DC9E29606FB8F7090325D8AB6FB674199200FDA3B3\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7785989866\"\n            },\n            \"TakerPays\": \"70073908\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rDAsQhHKNqg4ueKpzLPYbR7bzmjDve6dVF\",\n            \"RootIndex\": \"55E0D6DFFD6693781CC1FBC766C9DD5210B434F4969E7D58623C106EAF981B95\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"55E0D6DFFD6693781CC1FBC766C9DD5210B434F4969E7D58623C106EAF981B95\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rJw1L2RZTiPTQJSF7KmstuGrdNrTmdvAjb\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365308E1BC8811FCAA\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"10\",\n            \"PreviousTxnID\": \"7C3BC7A50FEAF9833DC6ED2B16D1F356B012A67DCFDDAC47EADE442DEA40AB28\",\n            \"PreviousTxnLgrSeq\": 68896666,\n            \"Sequence\": 66304744,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"55EC08E86D9E3208EF45B63291181D07B8B9B3FAEC61F6C727D4CF23AA4BDDD1\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"300000000\"\n            },\n            \"TakerPays\": \"7499999\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rG7WNJTTMRQma1eeWs5CDv8LwsLb3QQhvv\",\n              \"value\": \"9999610698224570e-1\"\n            },\n            \"HighNode\": \"5\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"e92\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"55EE335C6A896E3151F77B37CA676522A90D41D1ACE1C7ED39091733A5CF11A8\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-830.7192\"\n            }\n          },\n          \"PreviousTxnID\": \"E30918B56B543B285E2C3E074B179F4CDA562D2635E1C0385CD631231D586585\",\n          \"PreviousTxnLgrSeq\": 69041261\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"8\",\n            \"Owner\": \"rnpQiciqw8RGKo3NmqAuyZXScNoCNmQSL6\",\n            \"RootIndex\": \"3BAE5382ECF21938C83A0CF16589FEA1A9FC7295B48D3681E479ECFBFBED2C7A\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"5632091CE8EB509E65002759539D2E764BDD861EE881AC2C5A1C91CB240E47AF\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"7\",\n            \"IndexPrevious\": \"5\",\n            \"Owner\": \"rpPjK8mxW6UndeHNvtgJPSaQjARCSXGCWY\",\n            \"RootIndex\": \"99AF7B99261FF23F60A67CE18698CE7475AAC67BD8BB447EB1D20564B0134CA9\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"5671FFE431E1136F1FF4B4EC6E724B8E1C74D291654BCCF3E55FBD4A056A4F5B\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-52288918928\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rHa9ikQjRRPKoFgcqN3dwTb27vvL1Ezo6D\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"380\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"56D58ADE427A8A55CAE5918E567B4F5113183C6535A0EA7AA731EC7F24A971FD\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-62288918928\"\n            }\n          },\n          \"PreviousTxnID\": \"2CBED246A79872FEA3384473165FE0C1677689B7B473D8370F7B7A6B2148E054\",\n          \"PreviousTxnLgrSeq\": 68898941\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rsGTbAufvBkkN5xpaKZtEMCagAW5SkJEUL\",\n            \"Balance\": \"1343827294\",\n            \"Flags\": 0,\n            \"OwnerCount\": 400,\n            \"Sequence\": 65899782\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"56E4E6216CF3C87059552EF851E894E8336A20276FC04DC237EE235A7D0B6E30\",\n          \"PreviousFields\": {\n            \"Balance\": \"1263908002\",\n            \"OwnerCount\": 401\n          },\n          \"PreviousTxnID\": \"D21FBFC20EAD2CA2A0DD23749B7C760648441C34A63238BE25709C7908D72378\",\n          \"PreviousTxnLgrSeq\": 69063962\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rMMTgtHSock7M74yRKkp4ug6i14nGeCJhW\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365207AB995C11F000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"8\",\n            \"PreviousTxnID\": \"A4D8A02FCE983488B325B7927A17930B434CE8BC8EE056960B34461641D10DE7\",\n            \"PreviousTxnLgrSeq\": 69062416,\n            \"Sequence\": 66483832,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"5999565269.56137\"\n            },\n            \"TakerPays\": \"12953061\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"56E67A2C29A1B6361C3D773BB1A29DF6522167B155D2C5B541ADAF2C066CE15A\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"33000000000\"\n            },\n            \"TakerPays\": \"71247000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rUHsUfjv1Ai9KiT6R3WzLcAKvvPLao6fiK\",\n            \"Balance\": \"2344386676\",\n            \"Flags\": 0,\n            \"OwnerCount\": 34,\n            \"Sequence\": 67546038\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"56E8FCA1E9174CD5F3FAD773A50BA159741E33B81F77E45FA26775F49541EE51\",\n          \"PreviousFields\": {\n            \"Balance\": \"242169413\",\n            \"OwnerCount\": 35\n          },\n          \"PreviousTxnID\": \"52425D867B045998AA8AB676C818D7626C542ECCD3D8FD7B28352875798F43D8\",\n          \"PreviousTxnLgrSeq\": 69063174\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rH5oQKTQ5VaFHC8MFN912377XMG5EH3vTB\",\n            \"Balance\": \"2373673994\",\n            \"Flags\": 0,\n            \"OwnerCount\": 74,\n            \"Sequence\": 59805865\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"5701B833079E17C6DD81EC5E3B52543F768C35E649CADE9CFFD6B7F442C05274\",\n          \"PreviousFields\": {\n            \"Balance\": \"1672934907\",\n            \"OwnerCount\": 75\n          },\n          \"PreviousTxnID\": \"FB1D04FE2805BE1DCDB6145399A9B596625B962DFEE33839F9B6B71B8553EA8C\",\n          \"PreviousTxnLgrSeq\": 69013114\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"3\",\n            \"Owner\": \"r3pJZNxQwVRMyeohSyy5C9ZCJzvRWVAXLg\",\n            \"RootIndex\": \"78CBD081AF7E6C1B921632E0BAB9DCF2EFF3182214530373A7B80E94AAC434A1\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"5757AD9C1584F8A09CFBB1E59F21AD30EBF6BFB7B4D772F219923B7D8B1DBC62\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r3oDrfWCL4zZRGoUNRd8Ywu9PJWFZXc764\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652082E90F8EAF000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"4\",\n            \"PreviousTxnID\": \"128A9895BFE89D20E9ADD5562E39571EB7297BB1A35B2103C965476116913ADC\",\n            \"PreviousTxnLgrSeq\": 69054947,\n            \"Sequence\": 67440527,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"579C0F424D74034B0B936A7502630D5E80EB4FAB1D6904A23FE867BD7EE64A4D\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"TakerPays\": \"230300000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rJ72ZDPTsPvQBUxDvaQd9t2mbD8BrogpBS\",\n              \"value\": \"9999688558266544e-1\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"e0c\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"57B445E88A6D6122D24CA35BAE19E42B9B59AA35BB5DB478DAA48789E45312FB\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-18486911984.01258\"\n            }\n          },\n          \"PreviousTxnID\": \"D2A5F5FF65BD43467BA37C85551751B2A0BE6CF806C236588602E36898A3DCDE\",\n          \"PreviousTxnLgrSeq\": 68898357\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rnfs5ayanPy2X7aQERUoayaokxjuH361V8\",\n            \"Balance\": \"481026137\",\n            \"Flags\": 0,\n            \"OwnerCount\": 199,\n            \"Sequence\": 66388648\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"57B899CC1CFAF4E7B42A0AA68D9BAEC45C87095000D92C3D81C56F5C2F746A96\",\n          \"PreviousFields\": {\n            \"Balance\": \"421026137\",\n            \"OwnerCount\": 200\n          },\n          \"PreviousTxnID\": \"C384940E7821A53AA10117FC011AF3E6D00C2F76695D9E36DD7DF3CB5980B838\",\n          \"PreviousTxnLgrSeq\": 69064107\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"raZrDVYBJ5whjdgJ1V6FtiYixKesEfDyKJ\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36531BA123E9BED563\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"f\",\n            \"PreviousTxnID\": \"D6237430901199F6D6CF5A5DABEDE2A521A62E9DA81A77B98D49C9E9E87CBE2B\",\n            \"PreviousTxnLgrSeq\": 68244830,\n            \"Sequence\": 58008817,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"57EFBABCB1DE594D5949511FE21A9CFFC87547B1934726815E14F58D06D6DEBA\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7785989866\"\n            },\n            \"TakerPays\": \"605516431\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"2\",\n            \"Owner\": \"rDvF12VVLg8CD36Ba9U4HUB5q7AWai6BFi\",\n            \"RootIndex\": \"4FFE7D1F9644F106891D5B975BA035F2208D2A54722F844DF8EC86BE38AA4C59\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"58099AB338C45AEBE656623A84B428CDF343F94B9F40D1F22D4E15BB43608BB0\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r3PYAn9d1DTFzJ9kuvFnhudgwsVZ6pm5hT\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520AA8F09440D200\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"6\",\n            \"PreviousTxnID\": \"B6833536FCAD011B885A6C25FBCB456017E22B52B1A35DA56817720EC004E856\",\n            \"PreviousTxnLgrSeq\": 69051350,\n            \"Sequence\": 67442398,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"581F8E42E84AB3176014D76515A93632DDB4802B90E4806D6014E30A5DAED929\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"1700000000000000e-4\"\n            },\n            \"TakerPays\": \"510085170\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"3\",\n            \"Owner\": \"rGx2XhvjUKvW7Wkz67b5ERSKhb7m4fZmrj\",\n            \"RootIndex\": \"09225BF2C508B65A0FFA23B6E4498C3941EA7B44250905AC032AFE23833714CB\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"5823E6BEC0E4B20A168546DC933DC9BBFA6BE78C290C980380F43AD949B878BD\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"5\",\n            \"Owner\": \"rGEVM6YhWfikBZiXgWRdcUk7XpAyAnUHZw\",\n            \"RootIndex\": \"B1045716CDA5F99BADD0318E448E5E76C61DD6396B53000B7E795C15D98D831C\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"5835DF5DC2F9BBED84E9BA590926A3C1F2AA9478DD723C22BD2F1FBDEA9E23C3\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rEXcziBZ9tEnmNVrcdbQATJPr8JRHuRrZV\",\n            \"Balance\": \"405030363\",\n            \"Flags\": 0,\n            \"OwnerCount\": 57,\n            \"Sequence\": 67346396\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"584C0D9BD9D093A09DE72B5D7F7DFCAEEB6C159EB84A34669BAF76097C95C844\",\n          \"PreviousFields\": {\n            \"Balance\": \"135244207\",\n            \"OwnerCount\": 58\n          },\n          \"PreviousTxnID\": \"69668FD1EE8F5BAF3D32665D87C6E7AAEC96FEAD39CFA4CFF20CB1F3B90C22A8\",\n          \"PreviousTxnLgrSeq\": 69050089\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rHm3si5FLgHjXC7E2qXKwNDGAe5khVpEHg\",\n            \"Balance\": \"1618202482\",\n            \"Flags\": 0,\n            \"OwnerCount\": 3,\n            \"Sequence\": 67647503\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"585CC24C0F3927FD82A91CD2089BC69D35C3D31A383DCC0D1CC2C682C2B5F579\",\n          \"PreviousFields\": {\n            \"Balance\": \"17999985\",\n            \"OwnerCount\": 4\n          },\n          \"PreviousTxnID\": \"A58FC7813AFC9DB58BF50CBE26E5151FD1AA6552F5B560453AA7911556EDDE30\",\n          \"PreviousTxnLgrSeq\": 68986618\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"88.65468\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"5f3\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rBZXb3rXDo251L4ZJdQCa8AUjP7kc9ifCT\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"58751980262694F1C7E529BED65BB4BFD9108DEE713E430D3F144C9EAF360031\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"25258903885.65865\"\n            }\n          },\n          \"PreviousTxnID\": \"C1002ECF311684424992B98550304F6B8ADBE3FF43CC0089574A618228B2DE28\",\n          \"PreviousTxnLgrSeq\": 69048549\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"5\",\n            \"Owner\": \"rESTNm5GsJf8WQEnEmszRCsiEzHuFAcgQk\",\n            \"RootIndex\": \"6C045C15ECB589291DD16E5D78CB16805A235EF820D705342B201395585A8431\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"589C75E473C4146F90B53F22A3673741C8B451F09B24824DA539C284F655F059\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"2\",\n            \"Owner\": \"rHwM7GiRubuut3pJW2ycC4e6vaarV5xp7\",\n            \"RootIndex\": \"24721651BF8787E2B69BF5D5E620A00BCBB5DDFC82952D4B754F4A255D053406\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"58BD142B0118B421682172C88FDDED9C31E08CEC996889263CEEBF35E55BC51C\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"r5EHmNdKr1SRiA1DrtKBo18DYRrE5ncHF\",\n            \"RootIndex\": \"58CDB2F7E8857D61B216B3B9D86476A9383504379078D157C6124995CC070665\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"58CDB2F7E8857D61B216B3B9D86476A9383504379078D157C6124995CC070665\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rGBdiULuYdTBGGX2JWzmjRXscUacAHsm3i\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521AA535CF88C59A\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"7\",\n            \"PreviousTxnID\": \"5FE9577A1A7F6DD8E02AFB3DE747C8C9D4038C68619054B041AAF89BD3E02E42\",\n            \"PreviousTxnLgrSeq\": 68913833,\n            \"Sequence\": 67472001,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"58FDBB5769B51C4BD538A5071650A39695F7966BC3510587AA00F66B6EBDCAFF\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"9673050892.636902\"\n            },\n            \"TakerPays\": \"72547881\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rHv2LE2MKKrQ83NMbQ2vv1DUDjByosxthL\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520F581B8C572843\",\n            \"BookNode\": \"0\",\n            \"Flags\": 0,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"BE790D120D7B7E8B4B95D8FACEDA9C93D164E3F0A43C1BB693A25136A283448F\",\n            \"PreviousTxnLgrSeq\": 68983929,\n            \"Sequence\": 68499487,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"52836228616.34266\"\n            },\n            \"TakerPays\": \"228199671\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"5905F01E76FDC7FD2F66E3E0409BF469D6688945570857C330A326354D440130\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rJjTUAWDqunqKUB8SgYHV8QNTmvGArX4Lv\",\n            \"Balance\": \"198985102\",\n            \"Flags\": 0,\n            \"OwnerCount\": 59,\n            \"Sequence\": 67287290\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"5921643A2E106669012B98B045967A157D92B79B333ABB30F79984C3ED8AE3F9\",\n          \"PreviousFields\": {\n            \"OwnerCount\": 60\n          },\n          \"PreviousTxnID\": \"E48EB544CB03CB704F3466A27F8C4C2F322367955C8852D4A5923D3EA6CB5E5E\",\n          \"PreviousTxnLgrSeq\": 69058439\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"e02\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rUMbRuiufkSUvwXG6HBXYHTW9TpioNBKjo\",\n              \"value\": \"9999999999999990e-1\"\n            },\n            \"LowNode\": \"1\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"592CBB41581458D589DA0573318DEA2B789EA60D846D698CC08D102052703EE0\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"7785989866\"\n            }\n          },\n          \"PreviousTxnID\": \"750B386214D8A46A8DCC77F80C1D72929FFCC110A10469B6E49768D2E23116E7\",\n          \"PreviousTxnLgrSeq\": 68085363\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rGCr7TstZbRvToumrTKaUcTX9JGKVLsCVB\",\n              \"value\": \"9999999999999999e-1\"\n            },\n            \"HighNode\": \"1\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"44c\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"5967A5DE9EF81B00E98FEDA248A8E4AB260417252B20CD88C24B42A8AD3FB472\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-1079467827.39087\"\n            }\n          },\n          \"PreviousTxnID\": \"84E16E67AD7ABB661A6781C9F20DBB8EA73CD7CE76207803D9E23B373DFE0E7F\",\n          \"PreviousTxnLgrSeq\": 68898799\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"aa4\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"r3NPSAnK3n8wx7pdeCje64yvei4xLBrgd\",\n              \"value\": \"9999999999999990e-1\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"5995C30B6B918990349B965D9707AFB5B001E7E1712905B511DC19722219C448\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"23357969598\"\n            }\n          },\n          \"PreviousTxnID\": \"72515FAF306BBC816B1220004C67E03A27899E592D4822C6D194039C2C7F903C\",\n          \"PreviousTxnLgrSeq\": 68664162\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"eca\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"r7ouMSA1S6pggGmsYRZewYQzCP7XgLiEx\",\n              \"value\": \"1000000000000000e-1\"\n            },\n            \"LowNode\": \"6\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"59D605E229028D55B81B79C62502F59C0BF8979A1387AF70F5B24A8150F548A3\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"6500000000\"\n            }\n          },\n          \"PreviousTxnID\": \"3D5F06E17BD07B74C4DA10E175D327B577E56ECE0780547B1AF520834E814B3A\",\n          \"PreviousTxnLgrSeq\": 68874064\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rsj4wU1Tv93ES5J3AZrWVcgaKXV9b5aNKc\",\n            \"Balance\": \"9491596132\",\n            \"Flags\": 0,\n            \"OwnerCount\": 354,\n            \"Sequence\": 66179898\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"5A0BABA4B362A652ADAB5817130F7101C6ADF07A3CA0BFFAD86299AB8DE9C2EE\",\n          \"PreviousFields\": {\n            \"Balance\": \"9091596132\",\n            \"OwnerCount\": 355\n          },\n          \"PreviousTxnID\": \"3E52048F141D9B0B50F954058D618F45110DA36BF9D8CA80C2AE0C4345DECC91\",\n          \"PreviousTxnLgrSeq\": 69059835\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rnZj4CQouegP4s5Hu2LxBbjCfGSWQuzRAp\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521C35634F844000\",\n            \"BookNode\": \"0\",\n            \"Expiration\": 726830421,\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"B3638F0294BAD3383C8E8D78792565DA81E89EFBF58439E1932091830C950283\",\n            \"PreviousTxnLgrSeq\": 68960703,\n            \"Sequence\": 58648415,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"5A12E4AB483D7951BF03379EB3B143CC5BA7A3A87FE01201663E26D07F4A3CEF\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"1290000000000000e-4\"\n            },\n            \"TakerPays\": \"1024260000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rEX4EMcBRESCnk2kKB1Yhzc5KSCib7Qh1W\",\n            \"Balance\": \"298470079\",\n            \"Flags\": 0,\n            \"OwnerCount\": 86,\n            \"Sequence\": 66347424\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"5A228EA6953C00782C6627757121488FCC366D8FA9D6AB76BE4A804A3F674E72\",\n          \"PreviousFields\": {\n            \"Balance\": \"204192846\",\n            \"OwnerCount\": 88\n          },\n          \"PreviousTxnID\": \"8680F759DAEFE043ABB5E07F1B1649EA88F1E6D7DB085ECDF60E8C831035889C\",\n          \"PreviousTxnLgrSeq\": 69063645\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rT8my4rryyrydKwE4W9LqQNosfNjZQb3r\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521C110213BD1FAB\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"6\",\n            \"PreviousTxnID\": \"358D701CC129B7D4A82FCC60586D296A34DDB70B1803DC2E6B1E542FE2FCF8F8\",\n            \"PreviousTxnLgrSeq\": 68898182,\n            \"Sequence\": 66283045,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"5A31BA94B1973C262DF530F3096710A50C358346974B6BC95AF8E39038615844\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"30000000000\"\n            },\n            \"TakerPays\": \"236999999\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rPSYhGCFb4y7ntd2VaJzTS4eqiw91wynZn\",\n            \"Balance\": \"1000440305\",\n            \"Flags\": 0,\n            \"OwnerCount\": 179,\n            \"Sequence\": 66692750\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"5A4650BBAB37FF90D2D1EA576D55087D3193DDB96481BC29DF7FB8D58C7EA834\",\n          \"PreviousFields\": {\n            \"Balance\": \"923940305\",\n            \"OwnerCount\": 180\n          },\n          \"PreviousTxnID\": \"1BE91702B500B35789B6EE211361185CCC7E475BCAB4D229399F557A2CCDF83A\",\n          \"PreviousTxnLgrSeq\": 69062056\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"72786189866\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"c0e\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rpFYhEoT7AeTuaAZYwU25Gjn3i2VygsMnP\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"5A5DB84C18200C607BAB32B17EB2AB9208D44DB2DF98CD1F8B8A7B4C6AF6421A\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"77786189866\"\n            }\n          },\n          \"PreviousTxnID\": \"4CC29E5F72326E675D729AB100A4EC8FC2F102042515ED8C233DD11F40979446\",\n          \"PreviousTxnLgrSeq\": 68129455\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rUATLa1awouAR8jS1DwtsXuy8EXCjdktgU\",\n            \"Balance\": \"1044373994\",\n            \"Flags\": 0,\n            \"OwnerCount\": 265,\n            \"Sequence\": 66417126\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"5A8D10108D9995B5C85BC68AC210DF030C3085870E63F7B471A5912B88E28032\",\n          \"PreviousFields\": {\n            \"Balance\": \"969373994\",\n            \"OwnerCount\": 266\n          },\n          \"PreviousTxnID\": \"AD7F0277D6DA73EFCE42959232ACB2110A68CC16CEE697E3CB69875DD6C730A9\",\n          \"PreviousTxnLgrSeq\": 69064158\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rLBBX2NYwmoiRB68BQP3eo15BbaYtR8qdK\",\n            \"RootIndex\": \"5A96B9D4912C38778B67037F2162083266E2BB39493040126D7BD46328685FCA\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"5A96B9D4912C38778B67037F2162083266E2BB39493040126D7BD46328685FCA\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rUV7WQGpjkPJNuAuggRRFLYVoaegHzuxoy\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520822BE2BCE35C3\",\n            \"BookNode\": \"0\",\n            \"Flags\": 0,\n            \"OwnerNode\": \"3\",\n            \"PreviousTxnID\": \"6D7F359D759EFA286A4A2EB4B325A134DAE6E966B961FEA082D567AC30FA5E12\",\n            \"PreviousTxnLgrSeq\": 69034242,\n            \"Sequence\": 66502072,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"55013829115.2405\"\n            },\n            \"TakerPays\": \"125981668\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"5A9748CD6324AAF1DA5B77B8D17DF4451A58E5660B737BF8680C2EAC650E6F95\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"10121816808.56715\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"e15\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"r3fU9zQRHEWPbnN3r9TcM1d6NSRsBvUjau\",\n              \"value\": \"9999688558266531e-1\"\n            },\n            \"LowNode\": \"2\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"5AC40AC71C985B1A50EF819D771233D0F22258869FC7F47CBE83A160C1A14805\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"18121816808.56715\"\n            }\n          },\n          \"PreviousTxnID\": \"D0AF1D10D96F5290BC1B5E4FAFF70301A8FF552AD3E10BE9AB8743CDEB733929\",\n          \"PreviousTxnLgrSeq\": 69019381\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"acd\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rnu8qs15n6d9Xj21aBXxjdgyWz5cqNXqkf\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"LowNode\": \"1\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"5ACE3BD2FA006E00822C16F2966ACB627D9149C93E0FF64CC5CA7AA739260F82\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"10000000000\"\n            }\n          },\n          \"PreviousTxnID\": \"1C741B2524125CF6DC6B88A971D376378847CC8047464782765FD3C025E2639A\",\n          \"PreviousTxnLgrSeq\": 69030154\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-225989866\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rGx2XhvjUKvW7Wkz67b5ERSKhb7m4fZmrj\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"HighNode\": \"2\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"60d\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"5AE7490BC6B51FC082E359885AE0485FDE3268DF0703938E58E9FB0867C2EF8D\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-7785989866\"\n            }\n          },\n          \"PreviousTxnID\": \"073493880F8302CCC77C8D5E9179D2412CABE6B1122342F3015013C416FE39C2\",\n          \"PreviousTxnLgrSeq\": 67998761\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-7586289866\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rNk5vizuipEGcr9cNVXnh1eBjhaMFqFs42\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"93c\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"5AEAF5FE5F9CFC48C12BFF66E95535D1F0CDB7C234501BB34D5D4EEA867DAA32\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-8586289866\"\n            }\n          },\n          \"PreviousTxnID\": \"9D8C8C469059F979C797CFA232E225A59A685F7040F279DB0DB01972E46E732E\",\n          \"PreviousTxnLgrSeq\": 68348032\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rEJjxWqDiG1H1PDqXXnwdHjxAUTnVGmrDS\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652168F4A8FAA9085\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"7\",\n            \"PreviousTxnID\": \"E0E0C7E9AC57D620B05F97E35A1929BD6FEE3E004944CCF8F62CA84B975CC94C\",\n            \"PreviousTxnLgrSeq\": 68914826,\n            \"Sequence\": 66994164,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"5B423F81DC1F2A7E9CEB2B495B4ED52D35C15F42FB5DC3B2AB472E4509CEA154\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"6343856961.979338\"\n            },\n            \"TakerPays\": \"40283491\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rfBvZMQKX3gxybSQAt116zqUxXKu7a8BmY\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365218DE767A76687C\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"2\",\n            \"PreviousTxnID\": \"C560E237906573699477296898FD68CCA336FC010E7CACC757E6D1679053BF76\",\n            \"PreviousTxnLgrSeq\": 68900875,\n            \"Sequence\": 67523724,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"5B5F24F7C45D7CF2117246244353F777324C62FA1CDE5C5E44E41D86B86C5C06\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"8484865427.359063\"\n            },\n            \"TakerPays\": \"59394057\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-20000000000\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rMq6uX75yyCP9KjWCxYghLf9xsr3rQCbJv\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"HighNode\": \"2\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"681\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"5B6F60A6D309D1F090F70F4E4CF74C3E052B4B3A6E0DC8F1A5C97450472A099F\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-30000000000\"\n            }\n          },\n          \"PreviousTxnID\": \"BB0829C3A2F5A368833AD7400289B072203DFFDC1442819F2AAD3A6EA8EA278B\",\n          \"PreviousTxnLgrSeq\": 69056325\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rUg2bKuyZzQLPopT6uNZK7w4zvJHLB5LV\",\n            \"Balance\": \"120788529\",\n            \"Flags\": 0,\n            \"OwnerCount\": 24,\n            \"Sequence\": 67761591\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"5B6F87B542DFE1639B211DB808910B105114B9542EF203234E5B869612F26B54\",\n          \"PreviousFields\": {\n            \"Balance\": \"60135668\",\n            \"OwnerCount\": 25\n          },\n          \"PreviousTxnID\": \"1D1E511C96E6BFA2227E3EE2DF59E1516CD4897DD770BDD2678D38EFE7B9F00E\",\n          \"PreviousTxnLgrSeq\": 69044018\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rs4wbWdssBMJRgn4tJak3eq1JgrJ7Pgfnk\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365208DF0180B023FE\",\n            \"BookNode\": \"0\",\n            \"Expiration\": 727079302,\n            \"Flags\": 0,\n            \"OwnerNode\": \"4\",\n            \"PreviousTxnID\": \"D49B8156F4278396E5B8FD416D2DEB91B3AC4F601FAD93A18EAA18BC24855804\",\n            \"PreviousTxnLgrSeq\": 69023879,\n            \"Sequence\": 67390766,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"5BB79A4C83DD409C4E3ACB31E35BCBCD3F0E5DC48BE246956BBFCA0C5F402BD7\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"40048100000\"\n            },\n            \"TakerPays\": \"100000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rKU9ca11NtN2HFEaNj3WhV7dS13vpDeS46\",\n            \"RootIndex\": \"BEF85A853C42B021D826AAD6C42D40F1BE784663EFD594507B927A4D8E782818\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"5BBFBD4CCD0E87358B079FEFD8281BBFB7A229CC195138024A51236DAD2A9BAC\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"4\",\n            \"Owner\": \"raf2m8Ki2PVqjTU3YsKK5R62dAhiYXepcz\",\n            \"RootIndex\": \"41525F45DEF6E2E8D39EBFBD63DEC532EB4E7B61705DF8E51D1A9601DB8D6FA2\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"5BC174388B1640F0ED80C00855C20E27DF71C8D80EF03F2D4B3AF39633B477C5\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"6\",\n            \"Owner\": \"rUrtZA3gFTbfu9vkdygv2jzgBoFRYMNv5L\",\n            \"RootIndex\": \"05F1DCC4EFD3E83FF10B0E8CF7236652AA877A8594CBDC241A45CEDA73CD867A\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"5BC8A0D5DF767CFFA089A01F77A259EB0729EED839167789024A0A22866C160A\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rfzxSb2zMhKDqCsD81pZt7Bjkvak4NBwFx\",\n            \"Balance\": \"20267277794\",\n            \"Flags\": 0,\n            \"MessageKey\": \"0200000000000000000000000034FD3666475676CB7BFAE4E97B21344A0AB70815\",\n            \"OwnerCount\": 90,\n            \"Sequence\": 462\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"5BCF66C7B4E584C4DE10D6FD6EE12B9C3ED22142714FFC8F6A54015B911E46CD\",\n          \"PreviousFields\": {\n            \"Balance\": \"19650627396\",\n            \"OwnerCount\": 91\n          },\n          \"PreviousTxnID\": \"A62122A176F72CE081CF2433ED195021BBBB2ED7AF38DB0BE373F6AC34ABB29B\",\n          \"PreviousTxnLgrSeq\": 69051325\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"1967564523398910e-4\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"e41\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rnMENGbcT6QgrfDGjz7UJvyMryD8YPdi3y\",\n              \"value\": \"1000000000000000e-1\"\n            },\n            \"LowNode\": \"2\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"5C2C5C77432792B2BB45604F19C7F97C6C1ED3CB9D8C90406250BD9E67B73BF1\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"2527394002524802e-3\"\n            }\n          },\n          \"PreviousTxnID\": \"808483DE8C02BB3297A29B4BECB913C6DC226D403087E9AFA8A0E7947CD351A3\",\n          \"PreviousTxnLgrSeq\": 68991025\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rphnh8aG8oBCdrBcgxYgNY8yVqi3b3XqbT\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652164FA070E876B7\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"16\",\n            \"PreviousTxnID\": \"27AB9D6349662DC8F53E4CD2615F83CCA6A4F04A3F570A3DFE4053103E20E85C\",\n            \"PreviousTxnLgrSeq\": 68910115,\n            \"Sequence\": 66157558,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"5C346EC12ED9BEAFF75E429B3E19886BAF7252571165670C88C0EB20DCC58494\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"45888888888\"\n            },\n            \"TakerPays\": \"288182222\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rDfGPHrMgjFmWvA3TRkx5rcD85Y9sNizB2\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521C6BF526340000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"1\",\n            \"PreviousTxnID\": \"8FD8CBE2A181BE8E12B9B9457BE4AE1503FA0090DF27A6A61526262A814AF767\",\n            \"PreviousTxnLgrSeq\": 68913256,\n            \"Sequence\": 67704666,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"5C9435AFB0879AE8E584666986371405B6C7175574924D8299DE3ADEF056D1D2\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"10000000000\"\n            },\n            \"TakerPays\": \"80000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"4\",\n            \"Owner\": \"rBZXb3rXDo251L4ZJdQCa8AUjP7kc9ifCT\",\n            \"RootIndex\": \"16F46DA771BDA4EBCDA7F4B003022DCA7C535694D53FE00128BB583064393B9D\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"5CBF86BDD4E232A7A7E427E14F74E2145523AD9DFE51AEF462D7A81F77C52F2A\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"1010510358.76\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"eff\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rsz7uAUXWXXeEfR55mUHFiWbdTomtXqdcv\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"LowNode\": \"2\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"5D46BB26BA48FD71E3198D0E5D5A2BAD45FF17474F0420C0FE1FC9872D39869F\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"3666010358.76\"\n            }\n          },\n          \"PreviousTxnID\": \"B37E2D9B367BB41978656FF34304ECD6D498B5A3801038C364744F8BC3A411F3\",\n          \"PreviousTxnLgrSeq\": 69052938\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"2\",\n            \"Owner\": \"rhxWqi4kQsADuck5wUsbXCcR2Pq44kbjZs\",\n            \"RootIndex\": \"BBB08F79F963AF6B4C516719878E6EBE29C60FF1A4A16406714BE58FB9AB4CEB\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"5D57B69DC00B62AB8F0AD9BFB6EE68E732375CA83B2522E4F4DCFFE04AD7DB07\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rXEUqWCmmyBxf2PUjPFAj5b5DuydWyRe4\",\n            \"Balance\": \"1344254296\",\n            \"Flags\": 0,\n            \"OwnerCount\": 469,\n            \"Sequence\": 67494369\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"5D5A83F4F61408125C30C771ED507D7969625321A8D6E9A8B50FE06B16414058\",\n          \"PreviousFields\": {\n            \"Balance\": \"1291004296\",\n            \"OwnerCount\": 470\n          },\n          \"PreviousTxnID\": \"62408E6825CDA85B1780AAE5FBC02E99956FBEFE8954BABF41D59B4BDF0F4741\",\n          \"PreviousTxnLgrSeq\": 69063890\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"edf\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rfzG9eLEj6jZUbign4K98pmLSQt717FVaj\",\n              \"value\": \"1000000000000000e-1\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"5D611AA4DD5CEA87E00C112C407E3C0A3BDF0ADDE50FDDF35A724B970B9C9B71\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"3450040988.952056\"\n            }\n          },\n          \"PreviousTxnID\": \"B20592FBA6913E38EEBE9A40AAE74A042EC5328B5E4AE6E347AA9B3DE489742A\",\n          \"PreviousTxnLgrSeq\": 68897428\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"r35RUZ6PjS9JT6pHG6298ES1abD9uv43D4\",\n            \"RootIndex\": \"21DDD8D6E58359D2128337D5775CFEAF2254A2568CF0259BCCEF54386755E27D\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"5D835312EDEC37923A5B2709D5E63E6B36FD91CDFB3FA7CE6B0B36D44F19792C\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"1\",\n            \"IndexPrevious\": \"1\",\n            \"Owner\": \"r3XYRBp1PnkL2JesUDNw5zo4yxmkYQD9dK\",\n            \"RootIndex\": \"5D8CC11278E5FEB2763C28AC51C6FBE52875DD2B64A13FF8AE490ABD4CDFB37B\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"5D8CC11278E5FEB2763C28AC51C6FBE52875DD2B64A13FF8AE490ABD4CDFB37B\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rMDc7eVhCw5jjCXU5DGpn2tUV9D7aBBFLx\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521FF973C773B26B\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"5\",\n            \"PreviousTxnID\": \"FC9B48A77A7B8BF081904BC1C1C877A8670659CC821A9EB1F23EEAB83A56C5C3\",\n            \"PreviousTxnLgrSeq\": 68790599,\n            \"Sequence\": 66970267,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"2802956351.76\"\n            },\n            \"TakerPays\": \"25226607\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"5DBF569F9A8163B65EF6F8C1E3C99B2A1A85CC6F5E32FC217D24DF8EFC1D42D5\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rJqAwcpzstjreWoBc7wGXRtWoxSeXTUzf9\",\n            \"Balance\": \"216975438\",\n            \"Flags\": 0,\n            \"OwnerCount\": 76,\n            \"Sequence\": 66945455\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"5DF8A7C885CEA369B09EE89CA46FF8C14D5496B76CB947D61C63042654347BB4\",\n          \"PreviousFields\": {\n            \"OwnerCount\": 77\n          },\n          \"PreviousTxnID\": \"30B598BA8D89AA5DC3128057255C5F2A298F2D212E25C931BC84B1ACE95C5BBD\",\n          \"PreviousTxnLgrSeq\": 69061763\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rMrFWesXLbeMANpexJkZdYYtCwhqot4x6B\",\n            \"Balance\": \"233454516\",\n            \"Flags\": 0,\n            \"OwnerCount\": 58,\n            \"Sequence\": 67169694\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"5E49A960325597FD80AA1444C3BBABEEF25CF63BA0425836FC335D5A1EC28FF8\",\n          \"PreviousFields\": {\n            \"Balance\": \"132236648\",\n            \"OwnerCount\": 59\n          },\n          \"PreviousTxnID\": \"81958D59B62C1B5F8D078BE6C8156E32C4970195F5B0F8028E616A6F59D0DE1B\",\n          \"PreviousTxnLgrSeq\": 69063407\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rKnBQjFdG2pPCrKiUmeZZZ6YjmuCyWVta\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365304DD19260B3894\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"1\",\n            \"PreviousTxnID\": \"E08EB20092A1808696B2689CEF5BC90F152A6158E2C9AE916D6EB3BFCA9BA170\",\n            \"PreviousTxnLgrSeq\": 68996871,\n            \"Sequence\": 67618627,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"5E4E162F93BCAA99E3252B7CC56BB57081FF7DD4539A22CCDE260A66A8A72721\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7607438921.424369\"\n            },\n            \"TakerPays\": \"104145838\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rMQF7GUuJQHvrEkXkcySkEvb4fbsGoqGqC\",\n            \"Balance\": \"93765771\",\n            \"Flags\": 0,\n            \"OwnerCount\": 20,\n            \"Sequence\": 67874802\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"5E6A48EE8FA911ADD44ACC1465F0602A57A1317A0469331C1ABFDDF93A4EAA6C\",\n          \"PreviousFields\": {\n            \"Balance\": \"53994864\",\n            \"OwnerCount\": 21\n          },\n          \"PreviousTxnID\": \"7EB09A168D9C693AC60BB3E1A2172B5A174E80AAA0C8972F417CEC1F3DE15408\",\n          \"PreviousTxnLgrSeq\": 69056398\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r9guPT5E5ZDd4hPpLJC6UnXCGoRB8tZ2Jr\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520F46D3C47B7E57\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"8\",\n            \"PreviousTxnID\": \"13A0BC1E6B6DC82737F8D0567CB6F710AB37B5A80D2D2A10ABCF283A23D06C60\",\n            \"PreviousTxnLgrSeq\": 68995349,\n            \"Sequence\": 66262546,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"5E84449038336BF94D98C75EA3F03E2CDEE40DD6A75DC37E008DD312D5F0C21A\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"69459496293.10345\"\n            },\n            \"TakerPays\": \"298675834\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"30000000000.00001\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"119\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rw4M6hoNYisxYmeppD3bkmf1TuTcQrdsit\",\n              \"value\": \"9999999997999993e-1\"\n            },\n            \"LowNode\": \"2\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"5EA8E30B92890C13EB1C73227C831330D522783DE93567FECBE06917E2CBB7B5\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"40000000000.00001\"\n            }\n          },\n          \"PreviousTxnID\": \"BC0F15BA00DEDA07EFFBA3E1DAFC052DA2F7392487E9FFD5452155207B66C7A1\",\n          \"PreviousTxnLgrSeq\": 68898795\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-19587476070.79549\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rPpC3LrzwLjh2qU7XtQKFb4GCZyAUHz7Ss\",\n              \"value\": \"1000000000000000\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"f\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"5EACB38897EE45CFB760AF48EE19325BFD7BAF04CD362541E8B97E0EBB42D11A\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-39587476070.79549\"\n            }\n          },\n          \"PreviousTxnID\": \"35DAD3D0D11A733E488EFFF538CE3DC2966C83B7337D72004954AD0B15CB1BA6\",\n          \"PreviousTxnLgrSeq\": 68911170\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rHv2LE2MKKrQ83NMbQ2vv1DUDjByosxthL\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520C6E526BD31DD9\",\n            \"BookNode\": \"0\",\n            \"Flags\": 0,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"9F47BFFC0BD06F16BFBF47071CF2592955DC41460608AECCA8C740159CC96F32\",\n            \"PreviousTxnLgrSeq\": 68997825,\n            \"Sequence\": 68499498,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"2023211571390819e-4\"\n            },\n            \"TakerPays\": \"707921728\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"5EAE5045091A22E077098C1F389A470BCD63F0D0C9C2682C7AB39984089ACCAB\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r3oDrfWCL4zZRGoUNRd8Ywu9PJWFZXc764\",\n            \"Balance\": \"4042182496\",\n            \"Flags\": 0,\n            \"OwnerCount\": 56,\n            \"Sequence\": 67440552\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"5EAE79BB92CF47C3D201FA254C316350ABF1645BA8A02CFB40989C6E60B90A12\",\n          \"PreviousFields\": {\n            \"Balance\": \"1564232791\",\n            \"OwnerCount\": 65\n          },\n          \"PreviousTxnID\": \"A96B3E08E70DF94456BFFE1E41142A2BDC7B5F502DC3ED521B740FB11536C58A\",\n          \"PreviousTxnLgrSeq\": 69064170\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"1c\",\n            \"IndexPrevious\": \"1a\",\n            \"Owner\": \"rXEUqWCmmyBxf2PUjPFAj5b5DuydWyRe4\",\n            \"RootIndex\": \"C2718000B71B3F14AD3AB69A2DF9E90EB9388E89585E06471C80CEF064ECB87A\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"5ED024B8375A469FE964BF598723E4030D28BDB2C98EBC474C68208B7FF9160D\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rMQGzm5niy3VzeWEqokwb28toV137fbiYJ\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36532386F26ECE7CFE\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"1\",\n            \"PreviousTxnID\": \"76B7361BD0BA084A3E812C66432C5BE7C63F8337B827176B70500F489EDB3DF7\",\n            \"PreviousTxnLgrSeq\": 68897474,\n            \"Sequence\": 67388241,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"5EDFE008A895A2D5154753EC4ED49FFFAEAFD166909D658E0C5C1CAA9A6EB877\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"4658203417.403399\"\n            },\n            \"TakerPays\": \"465820341\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"2\",\n            \"Owner\": \"rnu8qs15n6d9Xj21aBXxjdgyWz5cqNXqkf\",\n            \"RootIndex\": \"7E67DB50F68702F824C2AF5F07783547A5B3F50A8AB812EB8534B9A01400D0F1\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"5EE396E4E68949A98C10191C7C03E6EF6C95ECB4FD3E836AB070F7713A5946CA\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rHvia9Ti9HmM9QGixKxxKf9kYS9LUxTrjq\",\n            \"Balance\": \"679550538\",\n            \"Flags\": 0,\n            \"OwnerCount\": 7,\n            \"Sequence\": 67121143\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"5F2F00F49C4626E9A2972DD9F5E4D3B944F06A5432D5ADDE93CAEDD6EB333874\",\n          \"PreviousFields\": {\n            \"Balance\": \"26892426\",\n            \"OwnerCount\": 8\n          },\n          \"PreviousTxnID\": \"B5AD7E28E35B322ED65F04F6B50C0A16CB42937AF8340BD185AAA76023BDA3F6\",\n          \"PreviousTxnLgrSeq\": 69025849\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rHv2LE2MKKrQ83NMbQ2vv1DUDjByosxthL\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520B5D793A6F0E26\",\n            \"BookNode\": \"0\",\n            \"Flags\": 0,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"2C74AC18FA0A06F46BB657186737975CE45597015683142258F65E67AE010B7E\",\n            \"PreviousTxnLgrSeq\": 68998336,\n            \"Sequence\": 68499499,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"2020412436797885e-4\"\n            },\n            \"TakerPays\": \"646329937\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"5F6BD955706940FB7EACCA6C3CA4A91D8C8658716EECA663EDC3B3BA1F1A791A\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"2023211571390819e-4\"\n            },\n            \"TakerPays\": \"647225381\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"40000000000.00001\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"769\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rUXKKLv8kzkXLnNpe2aGq2PyRKuotFQEPi\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"LowNode\": \"3\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"5F79BE61D868C19EC7A83534C96179BF00CC350542025EACE12D9301A7AD9EEA\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"50000000000.00001\"\n            }\n          },\n          \"PreviousTxnID\": \"F8643A8CF4717DF4F2E8940EBD1F7382475163645FE34F2019B4A152FF8C779F\",\n          \"PreviousTxnLgrSeq\": 68950640\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rBYvQ1bajMk5CQ8MTa6whA9MZ4uuJGwtEh\",\n            \"Balance\": \"1360812448\",\n            \"Flags\": 0,\n            \"OwnerCount\": 77,\n            \"Sequence\": 66621836\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"5F807AFD302BCA639AC0985E6E829D320EBB22B8E39BCCEEF08E50CED6BA1D0B\",\n          \"PreviousFields\": {\n            \"OwnerCount\": 78\n          },\n          \"PreviousTxnID\": \"4880294E99996ED6C3EE34F35B5B444725283F01E814324778B81B2A535AFDC1\",\n          \"PreviousTxnLgrSeq\": 69046030\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"4500000000000001e-4\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"832\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rzHXP1zuBviNtiogFMnNDcoUg88bprjNy\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"5F9277456B02B6A000677A7FFC73E6A421B1BC7768C5D6E81A5BE637D8512C9B\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"5577859898660001e-4\"\n            }\n          },\n          \"PreviousTxnID\": \"9A0B213036969F296F3A02A010008C62A181BCF515FB0A0586C8247AF61BB86F\",\n          \"PreviousTxnLgrSeq\": 68872762\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-16850856281.4153\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rJ7DCt3RdTywMMwKTq2Pm8srSeU4GvmSiW\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"HighNode\": \"2\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"dbc\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"5FEBD555741477119CACD0914F16056FB5C7EC8B7EE3562FFB1A566B5CDDD409\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-28405963602.8653\"\n            }\n          },\n          \"PreviousTxnID\": \"E6D608C37C8E78239295015C2996EC4FA6FAF38E00B36855AA5F50EA9BDCA869\",\n          \"PreviousTxnLgrSeq\": 69030724\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rsE3JJ4VxxndQwzRusS99pmAeYN3bEYZmc\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521BE3888733A87B\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"c\",\n            \"PreviousTxnID\": \"9A82302BA34AD3C3BE6B4715D6007F162C3A163A5196DFB6D469875891EF9CFA\",\n            \"PreviousTxnLgrSeq\": 68898113,\n            \"Sequence\": 926,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"6001A6F2994F882A3ABE57CACD4E8B47E71BF7D13C044A3A5F3A446B23A7CD6A\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"6557705056.239346\"\n            },\n            \"TakerPays\": \"51477984\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rsydLXavwRHUq9TWdwYqPpYViuFBNuYQYs\",\n            \"Balance\": \"1325153503\",\n            \"Flags\": 0,\n            \"OwnerCount\": 118,\n            \"Sequence\": 1353\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"600275321B3DFD7C412262F8D90C4338C970017E1EFE949B5F79049CD3ABF37A\",\n          \"PreviousFields\": {\n            \"Balance\": \"550525372\",\n            \"OwnerCount\": 119\n          },\n          \"PreviousTxnID\": \"E394176B24A0465C6D4C6309A645591A50A1950E484C38E6C2FCED06A922E78F\",\n          \"PreviousTxnLgrSeq\": 69055523\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r7ouMSA1S6pggGmsYRZewYQzCP7XgLiEx\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652138A388A43C000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"7\",\n            \"PreviousTxnID\": \"166C59DA7D3EB25A3360ED42A7AFB1E9D725A98B22CB49A46AC35368FD0ED203\",\n            \"PreviousTxnLgrSeq\": 68944629,\n            \"Sequence\": 67326978,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"600B5914D558DDC5A3D1E6F97C1E5BDAE6E5A7AF3E82B2796D818EF1CCC37D81\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"6500000000\"\n            },\n            \"TakerPays\": \"35750000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rNdfpBhUB1ygnu4z7ebbqLBQH5K8zejbu6\",\n              \"value\": \"1000000000000000\"\n            },\n            \"HighNode\": \"4\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"736\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"6049BAD7E42287A6AC379816E740920C4E48AC5F89279EFE64F28451B30A0B5C\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-62287918928\"\n            }\n          },\n          \"PreviousTxnID\": \"D23FF4FA46F90D809C120AA95FF188314EE3265AD1605D3125AC6E2C47E60868\",\n          \"PreviousTxnLgrSeq\": 68176004\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rsNTEynqepWnCvBMLb8x3tekWQXG2TxfEM\",\n            \"Balance\": \"1971297482\",\n            \"Flags\": 0,\n            \"OwnerCount\": 28,\n            \"Sequence\": 67692617\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"6049DE89D3C23841EC03A3A2EC37B199706FB559A6F6B1631E660BF81660B84C\",\n          \"PreviousFields\": {\n            \"OwnerCount\": 29\n          },\n          \"PreviousTxnID\": \"80A013F5F5A63595E10C9823F258AAD52ADB3E8470788A8271AA2049B9262BA5\",\n          \"PreviousTxnLgrSeq\": 69054102\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rLkaQPNxjeDmFBqhQ2GszmgT4wxykPCP5K\",\n            \"Balance\": \"421110966\",\n            \"Flags\": 0,\n            \"OwnerCount\": 55,\n            \"Sequence\": 67329984\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"607A3964FA2345D3ABEBF418300C29FDAEE190955C257734F6348D919EBA509C\",\n          \"PreviousFields\": {\n            \"Balance\": \"375873682\",\n            \"OwnerCount\": 56\n          },\n          \"PreviousTxnID\": \"9D56C4199266C91697B49CBD057756D5ACEFE373B63DDCE2BACEEB61D80F8CD4\",\n          \"PreviousTxnLgrSeq\": 69061277\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rGgtpbT9ffSEHApdNkRC4Mu9tsYPRMKx6D\",\n            \"Balance\": \"761031456\",\n            \"Flags\": 0,\n            \"OwnerCount\": 237,\n            \"Sequence\": 66749151\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"6091CB3554A765885B657EC10E485278487739FBA1698D0FF63FDA49F4E9324A\",\n          \"PreviousFields\": {\n            \"Balance\": \"488521811\",\n            \"OwnerCount\": 238\n          },\n          \"PreviousTxnID\": \"FF5B3425509EDE7EB17F082A2E5370FBB7CE505101C760D4F85043B3C975D93A\",\n          \"PreviousTxnLgrSeq\": 69063853\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r3BA8VZ9TV8U5qgd72SX4Ct2iAgQGwcfZ6\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521550F7DCA70000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"3\",\n            \"PreviousTxnID\": \"9F740DA744A681155ADAA74B8332D9405DDCB7A888029B75CAE7E0296DDC4C96\",\n            \"PreviousTxnLgrSeq\": 69025110,\n            \"Sequence\": 67759030,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"60D28AD0A19D3770E30D2E823059FADD053DAF46D7993FF1486AC97656DA5A5F\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"2000000000\"\n            },\n            \"TakerPays\": \"12000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rNwUjKvVAQ9nhmVW9gF5Hn5414X637aY4U\",\n            \"RootIndex\": \"60E0430D6852673CBEFF9C18F3E285A089AB525447D5FE7E4CEA5614DC4AFF36\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"60E0430D6852673CBEFF9C18F3E285A089AB525447D5FE7E4CEA5614DC4AFF36\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r3pJZNxQwVRMyeohSyy5C9ZCJzvRWVAXLg\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520775F059D6CF3C\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"4\",\n            \"PreviousTxnID\": \"3D430682971BEB67F6E19CE13E4DA7F98129B10E6BADC09F7E521CB650E2ABD2\",\n            \"PreviousTxnLgrSeq\": 69063131,\n            \"Sequence\": 67434617,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"60F6B7057B2D97DE4CB448DE1C87DA8C912516EAB993BF68574607935FA92F5F\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"66967083434.5683\"\n            },\n            \"TakerPays\": \"140630875\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rBnj6UP9thqpSLVq1rEKinhuhmFHmhaC8m\",\n            \"Balance\": \"313859645\",\n            \"Flags\": 0,\n            \"OwnerCount\": 121,\n            \"Sequence\": 67351919\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"60FA7CADC60E869A6E81A5A9D816361D1432D28B754DA10841259C8CBE0A9742\",\n          \"PreviousFields\": {\n            \"Balance\": \"288209645\",\n            \"OwnerCount\": 122\n          },\n          \"PreviousTxnID\": \"1A9ECD7019C6EDAE8775315CE26C95A204C09A488D846D9CDC9F210CAF6DB84F\",\n          \"PreviousTxnLgrSeq\": 69060811\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rEgSssemRh6cSEJYWAyA6Q9uEm6XjBUZ2H\",\n            \"RootIndex\": \"60FB2DC16D2F719EC16B27D9032E9D030828153511216DC4921E3324CDD5ECA9\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"60FB2DC16D2F719EC16B27D9032E9D030828153511216DC4921E3324CDD5ECA9\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rnEA5VmDp13iDZdcGUg2X2nzYkaKKDrf86\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520F4F033E564FFF\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"2\",\n            \"PreviousTxnID\": \"B6A36A57C6B27FB5A8FD14C2ED79E90C6D0C6C654BC8EAAF0EDAB530C00BD5F6\",\n            \"PreviousTxnLgrSeq\": 68984656,\n            \"Sequence\": 67525841,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"611CF799EFEBBDDAF4BB1DC7EF0B6934241472F8D3CE4328D587E4073AE81C7E\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"45000000000.00001\"\n            },\n            \"TakerPays\": \"193905000\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rHa9ikQjRRPKoFgcqN3dwTb27vvL1Ezo6D\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365218DE76816D8000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"a\",\n            \"PreviousTxnID\": \"92F52B390378160D94A5ACC8F3F3B64E17F409F6527D6A0426D29C71A7A5A17C\",\n            \"PreviousTxnLgrSeq\": 68899398,\n            \"Sequence\": 66151073,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"6120E9F41A1BBE124E5A8EEC8883D29D5426B340BB55F9A68E451DEA24E74F31\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"10000000000\"\n            },\n            \"TakerPays\": \"70000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rK699XAUEcMK6msaRDV46mATmAqNN9nj24\",\n            \"RootIndex\": \"613794F00661A31D8D903013256064E384B2DE4E19DBC3A9E7C2CF77175951F4\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"613794F00661A31D8D903013256064E384B2DE4E19DBC3A9E7C2CF77175951F4\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r3NPSAnK3n8wx7pdeCje64yvei4xLBrgd\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365219EF4FB2B186E3\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"82EA0D0B018BB7193B74190129360056942D7F89354F9EECFBF7F3D67370A229\",\n            \"PreviousTxnLgrSeq\": 68919858,\n            \"Sequence\": 65010496,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"6147E5930EB98814D31EF8B6D293E3C933042C05F01F7CBC8164010DAB8A9BA8\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"23357969598\"\n            },\n            \"TakerPays\": \"170513178\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"0\",\n            \"IndexPrevious\": \"1\",\n            \"Owner\": \"rjuBmfDDfaXxXRPhcGsGb3qSjdrEUwMGT\",\n            \"RootIndex\": \"3EBD0269886564ECFADEA9BF8E2DBA5273B4856E73D2471EA83285030CA72701\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"615F86D468853A22DBA3EDD12E004984AB1A65E8B12E291D793C713520A3A22A\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"1a\",\n            \"Owner\": \"rDYvWkTQaaoWiWYo2r5fKuqEoop8WK9crS\",\n            \"RootIndex\": \"E1DE01C4AFE3D247DC9BB884A93C70E2712C759B255FEE34EAB1B5DB398531BF\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"616BE2B44A069CA81CF805D5FC4094424A8EC406922E79ED9738C1E295B4C8F8\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rah3AgBTwgnCvR5aJfj4p6Gy98hZt57gXD\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365217ED725CD6FC6C\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"3\",\n            \"PreviousTxnID\": \"03BCB26DD5732200E0577A909B35115B6CD8B7A0E14399C6871A083083850CAF\",\n            \"PreviousTxnLgrSeq\": 68920426,\n            \"Sequence\": 66615315,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"61ACB6C3C396C3EFEF432109E35B7632FABC30AE7DBF44D4CD84A466BD853403\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7785989866\"\n            },\n            \"TakerPays\": \"52438641\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-11447985419.683\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"r4KDwn1x7ihYbekn13gYAoV9fFnjwFa28R\",\n              \"value\": \"9999610698224570e-1\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"e86\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"61CAB811C063DAD305D02D6A4627B2EBA8791BCD9D8CF57AB019442D7B656B4A\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-4600000000000002e-4\"\n            }\n          },\n          \"PreviousTxnID\": \"91E342A8852B6ED049D382E1DD4D616BE4AE6F2166752A5FE3C7B0661493FCF6\",\n          \"PreviousTxnLgrSeq\": 68909670\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rCeRsWQYvZrkA8s3jZYXBYw7gXH7cbVNF\",\n            \"Balance\": \"201891605\",\n            \"Flags\": 0,\n            \"OwnerCount\": 46,\n            \"Sequence\": 67345644\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"61CCA504FA44331DBF5CEC814C836B0A9C0F8143ADCFDFD300076FF6F2117CB2\",\n          \"PreviousFields\": {\n            \"Balance\": \"104399955\",\n            \"OwnerCount\": 47\n          },\n          \"PreviousTxnID\": \"6E5AF323268538D46B0CFAE9737463B70FF76B098CCB2BC0788A9B0D45A6C075\",\n          \"PreviousTxnLgrSeq\": 69062807\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rHvia9Ti9HmM9QGixKxxKf9kYS9LUxTrjq\",\n            \"RootIndex\": \"61F41F70C38D78E9D61D1E60EEB4DF6FE10AA9A1EEBC792F3B9928FA778C3FD8\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"61F41F70C38D78E9D61D1E60EEB4DF6FE10AA9A1EEBC792F3B9928FA778C3FD8\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rGpBZrDTpimasSJEWV5hxH75LsivV5Hz4v\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36531FF973CAF14706\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"4\",\n            \"PreviousTxnID\": \"8D6A1051EC7443D08A63149E81293345DDB1D969EBB354BCD3A941E879194F17\",\n            \"PreviousTxnLgrSeq\": 68780815,\n            \"Sequence\": 67162902,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"6206482B798B78B73D84EC654DCE8236198376B6173CCE5EEBC15F60B888EC68\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"34936388591.2351\"\n            },\n            \"TakerPays\": \"3144274973\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"5\",\n            \"Owner\": \"rBhRwsAuVFJ3VY37rd5R9YzqrCRjVXQggX\",\n            \"RootIndex\": \"6FC9EF6C5004916ACE8FBE87BFA8A5686F116A5545BFD52C690AAA553BE7EF29\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"620D58A5DDBA8707EF052EB82812BAC77D372F81967C6385ED07864339DCA243\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rsVD9Hdd3p4LMC7vUwvx75uNLY3d3eiE2b\",\n            \"Balance\": \"813318409\",\n            \"Flags\": 0,\n            \"OwnerCount\": 48,\n            \"Sequence\": 60707300\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"62766A76113728F27B9341FC8F96AA5D5453DB0B615C61C6764BCE5D0E6E86D2\",\n          \"PreviousFields\": {\n            \"Balance\": \"713318409\",\n            \"OwnerCount\": 49\n          },\n          \"PreviousTxnID\": \"29EA85AD8B0AF86D3CA0F08CBEF55238CB460011BDCD6BFE6FB9BE1364985C41\",\n          \"PreviousTxnLgrSeq\": 69060035\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rp8YVv74whPGdy9huBZHuPy5D3CRKgFFsj\",\n            \"Balance\": \"284997457\",\n            \"Flags\": 0,\n            \"OwnerCount\": 5,\n            \"Sequence\": 68428937\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"627EDA43F754398ECF002908FFA4E6A75AF6A2349F4814F7B58B233812223A5C\",\n          \"PreviousFields\": {\n            \"Balance\": \"22497457\",\n            \"OwnerCount\": 6\n          },\n          \"PreviousTxnID\": \"794C5B85C86C382EC0FAF16F5FE152D0D0D8D32933C25BE62071ED915F93E6FA\",\n          \"PreviousTxnLgrSeq\": 69000033\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rDTDTzVK47KCcGmiywZHhKsDP7323fqGGL\",\n            \"Balance\": \"209000005\",\n            \"Flags\": 0,\n            \"OwnerCount\": 5,\n            \"Sequence\": 67690772\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"6287446C7AD0E616C670ABADDE667D8605A86A9821A3CEA39AB96B38C2F1A56B\",\n          \"PreviousFields\": {\n            \"Balance\": \"121000005\",\n            \"OwnerCount\": 6\n          },\n          \"PreviousTxnID\": \"36FB0260067CA051B5B727AE5BBA623F748C876A8D4F247B06AA6533A856FF0E\",\n          \"PreviousTxnLgrSeq\": 69026477\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rh8TcfXzDZdQBB8R9aQfE2zUUwpd1zbEWv\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521C6BF525E7B4C4\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"0F63EFF163C7F4DB4C33397A1CBB5A494B585BFB5F82555FC75F42D7FD61FF4C\",\n            \"PreviousTxnLgrSeq\": 68966721,\n            \"Sequence\": 64540127,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"630DA31978E1C92B0E8FC5D4B8FCF8F2BFA56C185CD1003247DC9390BC1BD76F\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"1999999999999999e-4\"\n            },\n            \"TakerPays\": \"1599999999\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-95154275776.6183\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rNLPZmai318pizfUNmkebSrtsR5mFvVVWt\",\n              \"value\": \"9999999997999990e-1\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"a87\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"6319D24DE547B9BB8B5D18A923F6940306E393A40F33061EC81FCFF69D86D53B\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-1021542757766183e-4\"\n            }\n          },\n          \"PreviousTxnID\": \"34EEC2B5C7963F9EFA5DBA466DF7CF40A6F9C8601DCD9673ADBE2E91B30AD40D\",\n          \"PreviousTxnLgrSeq\": 69034828\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rNd3R5EaqkBC3EguG1mmwhjpKqLDTjBNwQ\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365219945C964845C8\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"3\",\n            \"PreviousTxnID\": \"8686590E91E2FF5608EEAA7CE440C573186B69ECB2BCB63C6CD52E32DD86FC6F\",\n            \"PreviousTxnLgrSeq\": 68899484,\n            \"Sequence\": 67165961,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"632703F92C45F65D170D0FF6B3B11A9FF9895D822B41A6508237C431082160DB\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"4282294426.3\"\n            },\n            \"TakerPays\": \"30832519\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rnW1sfCjjdMou7RKC2PquXVchHYBMAHqTD\",\n            \"Balance\": \"722360146\",\n            \"Flags\": 0,\n            \"OwnerCount\": 148,\n            \"Sequence\": 67671028\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"633669723E2A7510394D053F1121267DE2CB45C67BED9A6429F168B5CBFFC9FA\",\n          \"PreviousFields\": {\n            \"OwnerCount\": 150\n          },\n          \"PreviousTxnID\": \"5831DA125A74766867F409F1CE3819AA5F6058F98AE53FE47A41C631CB713D3C\",\n          \"PreviousTxnLgrSeq\": 69064154\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rPvqZW8q9bpYrAKjGhtL7AZAq8bvqEQDuq\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"HighNode\": \"2\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"4b5\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"636A4745BBB8A8CE50C1582236A66E53DBA6A459DACC4700655DE1769BC4B3FF\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-6052088387.79299\"\n            }\n          },\n          \"PreviousTxnID\": \"0E0548E23D1C6188ED7AFA3B100ACDAB6E3F1A66D1ACC1E775CB4F23C70FA6BF\",\n          \"PreviousTxnLgrSeq\": 68899240\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rhdw3T1ko64kaipD1T8uJmSkV3mUtRWqiY\",\n            \"RootIndex\": \"636DF6DBBA54E903896FB59E376FD4E72E2346AA454C10B77F23ABE9B79DFAFC\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"636DF6DBBA54E903896FB59E376FD4E72E2346AA454C10B77F23ABE9B79DFAFC\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rabF4KeYghT7RWidbkeS75fLWQzrDixwpH\",\n            \"Balance\": \"245427965\",\n            \"Flags\": 0,\n            \"OwnerCount\": 4,\n            \"Sequence\": 68100910\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"63A8DF4E002A586E5D39C36D6A3099A36BD8A2121284E7B788EB9E55095B4FDA\",\n          \"PreviousFields\": {\n            \"Balance\": \"25297991\",\n            \"OwnerCount\": 5\n          },\n          \"PreviousTxnID\": \"C7DCD6CF47787E7C14D4D80D67786538B80237E0B22217E1DB70A21FA013CB6A\",\n          \"PreviousTxnLgrSeq\": 69004265\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"16\",\n            \"IndexPrevious\": \"14\",\n            \"Owner\": \"rspLJnfzomVceQKCn6ExME3gJEUuhUZxdV\",\n            \"RootIndex\": \"AD218E1062EA54E07D8608504C3D1CA576AC3AE053FF09FB69944F0B26F56EDE\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"63B8F3EEB9BD5634EFDC2571031A24B926EACE4CE8637C262DBBA327A98FEDB1\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rJmWpXLdftZbNdPMYkezgKmEya6R6cAt7T\",\n            \"Balance\": \"349576322\",\n            \"Flags\": 0,\n            \"OwnerCount\": 114,\n            \"Sequence\": 66802001\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"63C696E11A82417535D9DEF21F7B87E95161EE8F3A7EEA624A52DBC636842BD8\",\n          \"PreviousFields\": {\n            \"Balance\": \"307076322\",\n            \"OwnerCount\": 116\n          },\n          \"PreviousTxnID\": \"3FC10F3206E39BB2D06765B4E92D0276431F260186F662A39335FA8D81CD6B42\",\n          \"PreviousTxnLgrSeq\": 69064056\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"790\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rpRfuSRwU9nUefy8T4z4RXUEDU2baW1qhk\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"LowNode\": \"1\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"640F03396D985F44A62DD1D252A2796A5F8DB87F5F12BEE708281DED03B66EC7\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"1490974072105691e-4\"\n            }\n          },\n          \"PreviousTxnID\": \"DCF554102D3055F9BCC255CD927D0AC5A22A5BF3F4DF81158C8920277DC01C2F\",\n          \"PreviousTxnLgrSeq\": 69000160\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"2\",\n            \"Owner\": \"r3fU9zQRHEWPbnN3r9TcM1d6NSRsBvUjau\",\n            \"RootIndex\": \"96F453737F99FE5B7EFA37F51C9FB5123F9BECD5C130EB44E85246057E3D9B8E\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"64142FC3EF1EEB56AED9F79A1C01518BD1ECB8C395C95946F90F7AB3BEFCC1D2\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"22042659578.51898\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"789\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"r35RUZ6PjS9JT6pHG6298ES1abD9uv43D4\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"642563ED975C1490D83B12887700F5701878FC58CAB05129FCE3CDEF59C00849\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"28202659706.47188\"\n            }\n          },\n          \"PreviousTxnID\": \"DBA0AC828B31A14291AD91D928ED52729D6ED45696933EA879F0E87DBC9B5D03\",\n          \"PreviousTxnLgrSeq\": 69017533\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"raDJvZX8gbRfZ3hUWimZPdVcDRzsZQdhmr\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520BD7A5E3062101\",\n            \"BookNode\": \"0\",\n            \"Flags\": 0,\n            \"OwnerNode\": \"15\",\n            \"PreviousTxnID\": \"6D37CC9B08F3904D9AEDBE269795FF86C4391745171F89B997727074DB6DA2BF\",\n            \"PreviousTxnLgrSeq\": 69044376,\n            \"Sequence\": 63094222,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"646BDC32EC84EA5E96D30C9934A7161CA66647805C2C22E16B263BFCCE3E9125\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"30000010000\"\n            },\n            \"TakerPays\": \"100000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"5ae\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rUATLa1awouAR8jS1DwtsXuy8EXCjdktgU\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"LowNode\": \"a\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"6480BDACBA8BF8F6C87E1CE4B5E05D9077AD3E0DA5A5D36DA70FCEA7BE521435\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"15000000000\"\n            }\n          },\n          \"PreviousTxnID\": \"59C7FB4099E0280FB860A84591990A6BC5F6414C64AE0868DD0A8A71E13DDE01\",\n          \"PreviousTxnLgrSeq\": 68963775\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"4900000000000000e-4\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"768\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rUs2aUqfDfjTN9HWdhXzRZZJkHm5rGUUdS\",\n              \"value\": \"1000000000000000e-3\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"64A8E2CD4AE9ADE4139A32C296855F8F089B0B5C041286D33299906D146D3AB6\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"5000000000000000e-4\"\n            }\n          },\n          \"PreviousTxnID\": \"7D299457B7D992D572AFF954F09B1E4D3053853436BAEEBED020E590BEE2F0CA\",\n          \"PreviousTxnLgrSeq\": 68240127\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"9\",\n            \"IndexPrevious\": \"7\",\n            \"Owner\": \"rNPZ49ucC4zKoBPgyAsSC7oMSSoh1icnZK\",\n            \"RootIndex\": \"ACE3C7274FA617F4C91C8FBC01DF140279E5380DBEAE2064592E9CFF7B8EBF42\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"64BC844065CBAEF4C64DE8535D52609DDE461C09E8C09832405F4D1A3889FC5D\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"1022222224\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"e9f\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rphnh8aG8oBCdrBcgxYgNY8yVqi3b3XqbT\",\n              \"value\": \"9999610698224573e-1\"\n            },\n            \"LowNode\": \"15\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"65264BBE95E1F0172A7C121F4BF93680DFBE9CF61D92B04E5F4F22EB8E90B3FF\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"91800000000\"\n            }\n          },\n          \"PreviousTxnID\": \"9BDA787FF19D4ABD1832FC7895A5237B42F5198A9034265C6093C7AEBD551635\",\n          \"PreviousTxnLgrSeq\": 68915922\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rdjYAQLjaChAyFx1sVLn4uy3mrSZy2f24\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36530CCA2E512C0002\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"DB6DDD93313449331077B45EBFDDF458F0038E9BA2A35903B5CF576BB6E5B2B6\",\n            \"PreviousTxnLgrSeq\": 68790526,\n            \"Sequence\": 66163698,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"2856458885260000e-4\"\n            },\n            \"TakerPays\": \"10283251986\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"65280C235F73F514C0022970BC815A1E7889C8636025699A23158DD2E85C0F95\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rfFFmdT4f2Qj6gSS7daVrQDpJw4tF62Ke2\",\n            \"Balance\": \"1335413975\",\n            \"Flags\": 0,\n            \"OwnerCount\": 20,\n            \"Sequence\": 67946821\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"653F2822726898FF1B577C5B9DFA21E1713812E417BE5191002389A9CBCF3FD9\",\n          \"PreviousFields\": {\n            \"Balance\": \"1002083975\",\n            \"OwnerCount\": 21\n          },\n          \"PreviousTxnID\": \"5B8FC9F2CD85A59E4062E822E9132C2ED18796EF7579892E65C16C9FD047A572\",\n          \"PreviousTxnLgrSeq\": 69028614\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-8092318979.92423\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rENubezZP8CRwDNdupJB2J8D1GxukZ7hjv\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"HighNode\": \"1\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"5c2\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"654CF717DE0BFD62BD7CE1CA892FD0248CC172DE0F9DC717E1CC54346548ED58\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-10092318979.92423\"\n            }\n          },\n          \"PreviousTxnID\": \"EED6D7C512E7C36E4BA157FF239CE9A8341118ECE893D5577113A63865C20486\",\n          \"PreviousTxnLgrSeq\": 68892094\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"razceqmpdpjLd5o52i1GiaZJhmB8SEbfCa\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36531FF973D057CA81\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"b\",\n            \"PreviousTxnID\": \"A7A37662FDDEFABC9514176B3C91655C0918B81A6A2221C1B58EB28F5CA4C5F1\",\n            \"PreviousTxnLgrSeq\": 67960040,\n            \"Sequence\": 1033,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"65922A01F3CD5229CBA1F5279A1CEF39B84BFD4DD56DCC7EDDBFB7D3EBD53795\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"1111111100000000e-4\"\n            },\n            \"TakerPays\": \"10000000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r9vQtUmSgHmDFpc6K7BKLj5JvGBEbvwP9Q\",\n            \"Balance\": \"1159375906\",\n            \"Flags\": 0,\n            \"OwnerCount\": 89,\n            \"Sequence\": 67374381\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"65A67937DE564E805EFB294623E5D535993A1CA8E0C9D9B50B4B70D13B7E3919\",\n          \"PreviousFields\": {\n            \"Balance\": \"846971510\",\n            \"OwnerCount\": 90\n          },\n          \"PreviousTxnID\": \"1E3C22C30CD28413A8BA2981C55A4241CF4B8DB4FB082CAE91F428C58AB032F2\",\n          \"PreviousTxnLgrSeq\": 69057997\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rPy5zQthBW1gHiWbdHmbPkGtF9jM5XQGNs\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365209F295CADCF4AE\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"DAAF0C99509DF89D19140EAB3B637EBF44CA59A597F50E4F4C646FAD332C1552\",\n            \"PreviousTxnLgrSeq\": 69053358,\n            \"Sequence\": 67541000,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"663596AE07BF5903566B7EF23C9AB5473EA58ACB3A418338F7E2A1B96532ACD2\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"21206537461.53846\"\n            },\n            \"TakerPays\": \"59378304\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rNCESwgSpY1pUyhQGzGd7T38zXXzxUCLLj\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520B7092AC0111E7\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"57E70C36009EE1DFC23A6C0A65E9AFE86FD4B84F75E8AAA03448C4B230C316A1\",\n            \"PreviousTxnLgrSeq\": 69047568,\n            \"Sequence\": 68401370,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"667E1D7EE4448F15DE6CFADA7D20582939DA8B0E2F4CA41734B14378A6B285E4\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"1205914612885586e-4\"\n            },\n            \"TakerPays\": \"388304505\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"10\",\n            \"Owner\": \"rM4cm11HCu1riLq9BwfzciDUZqfX2Phq52\",\n            \"RootIndex\": \"4CAB8979C4DC13C79115E4C8A1B15ACDCB1CCC26283D38D0BEA94FB6885F1E91\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"6684E48CC6091E12A6981827DD713807B5FE004CF0723BF2C38D819438C49F79\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rEcDGbmwatAptdvR3tfMRJqfm6taVzHAYP\",\n            \"Balance\": \"66255293\",\n            \"Flags\": 0,\n            \"OwnerCount\": 24,\n            \"Sequence\": 66780419\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"66904DD8BE98633678D501DCE58B4905ABB2B0591D4B7AD95E22F06572CAD85A\",\n          \"PreviousFields\": {\n            \"OwnerCount\": 25\n          },\n          \"PreviousTxnID\": \"BEFF2904452962076C60AD851A28DCD1E55E3883801C4F456E4E79F8DB8CC883\",\n          \"PreviousTxnLgrSeq\": 69061642\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rHXRGGkmL2bGwkbsz9mnpVi3eAZt5bThdo\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"d20\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"6694402DF26A4CB45CBEE40147B298F11350B2A204E3DADC49A1F92AF08BB94B\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-7785989866\"\n            }\n          },\n          \"PreviousTxnID\": \"1D4F185771E3EAC49FE67081FE1104F22B6531FCDE5033BE24AAC443E2F2F542\",\n          \"PreviousTxnLgrSeq\": 67961302\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rfzG9eLEj6jZUbign4K98pmLSQt717FVaj\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365221EDAC9DECFB5F\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"DCB34F7374BECAE32F24BD578FAB3D5CED922D29B6F583D894E040CFD068B5CF\",\n            \"PreviousTxnLgrSeq\": 68897461,\n            \"Sequence\": 68887819,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"66AD778B02684197F8816FB143849BE6E6589C43FBD14E32F9301B9B03D5829B\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"3450040988.952056\"\n            },\n            \"TakerPays\": \"32947891\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"ddb\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rXEUqWCmmyBxf2PUjPFAj5b5DuydWyRe4\",\n              \"value\": \"9999999999999990e-1\"\n            },\n            \"LowNode\": \"a\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"66BDB2646BDB456670654A4B5674568412E107969FCBFEFE016F31E7EFBFE2BA\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"7100000000\"\n            }\n          },\n          \"PreviousTxnID\": \"5714BB309949AB8BDBEA106B04A8D817897BFCEE1EAC1C49CAFD463539E1550C\",\n          \"PreviousTxnLgrSeq\": 69036855\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rnYbiXaSpChddFy4fdVYDtNscUsAfgaA4U\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520A4D88DDD94000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"9\",\n            \"PreviousTxnID\": \"BD80532DA173919846D0B6D193D598B0800A8AE32C0DA870EC6DDFA7BF799AC2\",\n            \"PreviousTxnLgrSeq\": 69001870,\n            \"Sequence\": 66933286,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"66C8DA4CACFE590A30DFDF2BBDFCE0F936246732A054D8556EB5207BD341917E\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"TakerPays\": \"290000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"0\",\n            \"IndexPrevious\": \"9\",\n            \"Owner\": \"rN5wcyJZjT6Qd7sJZiQg2SHVtjnmqiq7W2\",\n            \"RootIndex\": \"AC1C2122603D517DA5B0E93F6AA6F318948548D896759590525371C276913B96\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"66CBB310173875873C771C999D1B5B615EB319FAF08E35871CBB782B4BA8A4C2\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rGdg98Rr24zGwE9rmiPzKi8GkmkhyHyAL1\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36530625E354F030E8\",\n            \"BookNode\": \"0\",\n            \"Flags\": 0,\n            \"OwnerNode\": \"1\",\n            \"PreviousTxnID\": \"57509ECC5D9BD7559E10F2C2BA985E730F042880A32882E3F88858AAE6A7A36D\",\n            \"PreviousTxnLgrSeq\": 68934524,\n            \"Sequence\": 67164991,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"66DE46BDF19F053CCC55BE5E6331BC4CCC0DF7F009B31B3922216E31E73502DF\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"57786493906.667\"\n            },\n            \"TakerPays\": \"1000000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rpGhnBcEyRdDNyy4AD2BwyZgWE4ERu8eqC\",\n            \"Balance\": \"138863547\",\n            \"Flags\": 0,\n            \"OwnerCount\": 53,\n            \"Sequence\": 67343101\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"66EBA59928574265178EAA0735330AAC046BE0E334FCE88B20D551A34D201850\",\n          \"PreviousFields\": {\n            \"Balance\": \"120863547\",\n            \"OwnerCount\": 54\n          },\n          \"PreviousTxnID\": \"A4F41D5399FE145DCAB34939817AE0F544D1BA94FB33802BF9ED6C1A16DAFC61\",\n          \"PreviousTxnLgrSeq\": 69060091\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rGPEKNaNPYojt4sFbUzodh9SUNxixCwoBC\",\n            \"Balance\": \"4888165532\",\n            \"Flags\": 0,\n            \"OwnerCount\": 87,\n            \"Sequence\": 67759758\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"66FCE29FEF9AC7E6865C4C2A81BB582DD28600B1BE7BD0C32E1F90A0636BD43D\",\n          \"PreviousFields\": {\n            \"Balance\": \"3938165533\",\n            \"OwnerCount\": 91\n          },\n          \"PreviousTxnID\": \"C084BA4A0C0330562CE0978F1406224609D1107807D7EAA4DECA56C5320F9752\",\n          \"PreviousTxnLgrSeq\": 69060047\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r9MQ7Hek3iMwBnYRuHTuuG3ssJu48PHaxJ\",\n            \"Balance\": \"6240657936\",\n            \"Flags\": 0,\n            \"OwnerCount\": 33,\n            \"Sequence\": 67390595\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"671ECC60E276BF948FD6EF76113CB88F65B1DBE3D121E0883641FCABA6A96125\",\n          \"PreviousFields\": {\n            \"Balance\": \"5140657937\",\n            \"OwnerCount\": 35\n          },\n          \"PreviousTxnID\": \"96EA1450140558153915443528B63537B0CD1B86763F2BD0E3EA18AFF67E9E8E\",\n          \"PreviousTxnLgrSeq\": 69054481\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-2613413885313101e-4\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rHT6EWF9zJzwNtHQsxyrRMSQL4h5GhkcUn\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"HighNode\": \"1\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"780\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"6752DDA57EDD9DCEE7582210B9966BA8766DDFF45AE5FE4E2D28E349A4C7D8E9\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-4613413885313101e-4\"\n            }\n          },\n          \"PreviousTxnID\": \"165AC428DFDBFCFC0A814C518B40503B4BC4B07A0548096DA1C198ABC5A7BD97\",\n          \"PreviousTxnLgrSeq\": 69035473\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"ra4q61eeGoZx4cAJKPHQdyukvugrB2jhgW\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365214401C59CFC0F4\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"780E34E13E5FEF85CD15699419598ED7F774BB1A7E6DBF18B7EF62B53B6614D2\",\n            \"PreviousTxnLgrSeq\": 68916364,\n            \"Sequence\": 68759779,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"67559494572EA930E71DCE8E365DF701F6CFF56BA3DEE8628758897593481C69\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"55766237.75333621\"\n            },\n            \"TakerPays\": \"317867\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"c87\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rwSQqB6yNHd2tiXUhJ2wkULgq3dFua1r41\",\n              \"value\": \"9999999997999991e-1\"\n            },\n            \"LowNode\": \"3\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"67605178B68165A686D31BB87F921DB56E2C733CE2A11789C717499F837F7892\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"7785989866\"\n            }\n          },\n          \"PreviousTxnID\": \"378E136ABC2268FEC046C606BC7390D8E0D554508109D82E3665E64BEEC8591E\",\n          \"PreviousTxnLgrSeq\": 67980720\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rEkvHXE15kSe5Vh1b7RQrDqKrMUqAzsjGW\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521C6BF5216083D0\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"2\",\n            \"PreviousTxnID\": \"A899AF0C68558E077F4F68FCEF94F988368AFE130FCF8072E0BA1E07563E6EDA\",\n            \"PreviousTxnLgrSeq\": 68900035,\n            \"Sequence\": 67132137,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"67A2641BC84C3BB910193F5B92147CC5B6F43047545CD9766B78EDAA59EA5856\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"10571979732\"\n            },\n            \"TakerPays\": \"84575837\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rEpLbrik9r6KpjVbWXA71SVQnMCkY8BEUK\",\n            \"RootIndex\": \"67DA852CEEA5CF72AC059074116DAA72295B70EC317168C1A63BE6D554AC81DE\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"67DA852CEEA5CF72AC059074116DAA72295B70EC317168C1A63BE6D554AC81DE\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rJfV6qTHdF774uGTdRHQMxb8NSF6TWu4uR\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521C6BF514E44B95\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"153E788B54D8A9BDF5D8FC57252BFB7F681BDF2AB124E9DB270CFBAADAF76A1B\",\n            \"PreviousTxnLgrSeq\": 68918504,\n            \"Sequence\": 63563010,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"67EC8633A7E982B58F57B3FD46E8BDBEA2C4100613022905F933261EC132E7DB\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"2335796959.8\"\n            },\n            \"TakerPays\": \"18686375\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"284128133.14\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"e7a\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"r93dgTvDnFJsP2YGRiJvd89D1xLTmgR4fp\",\n              \"value\": \"9999610698222767e-1\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"67F51238B7B0B99887E7FAFED2E845B0E1C89D3807FF5AF7A6BAA155107C36D2\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"74999999977.8\"\n            }\n          },\n          \"PreviousTxnID\": \"33BB5DEEC2392CCE623157B3071AC108CCC903D1D793339B4CAF8710F840F39D\",\n          \"PreviousTxnLgrSeq\": 69038927\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rLC5cTyVFPDTN4nuTcM9F2MAzhbkS7a78Q\",\n            \"RootIndex\": \"6833052DA6D4052358878DD9FD2276CEABD39CACA5C7A8A6BA29D03FFC91F0FE\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"6833052DA6D4052358878DD9FD2276CEABD39CACA5C7A8A6BA29D03FFC91F0FE\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"6447726607220657e-4\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"e41\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rDzBkddc4AVrm4RWuXJRhH1rrkDpKNFwTg\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"683E951D60F1AB3DC1BD246CFC8EA2E8C1338446078B7B869EE492C130DB2B80\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"7947726607220657e-4\"\n            }\n          },\n          \"PreviousTxnID\": \"48C140CC2CA353858C4C311A5D146514E8F131DD62F00433B7F510EFA6DD7D2D\",\n          \"PreviousTxnLgrSeq\": 69044256\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"2325000000\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"e7c\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rhASEa6rnfc5WHFbd2ZdExhwyfBu27pitp\",\n              \"value\": \"1000000000000000e-1\"\n            },\n            \"LowNode\": \"2\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"684202B97A548A8F1F5EFD00C286FAA875064297046DE38AB66C953D0A7A6A7D\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"4550000000\"\n            }\n          },\n          \"PreviousTxnID\": \"0B17BFA781F574C5E75C6C07C12AE515D9D8B8BFECE4115F51802E83A6139037\",\n          \"PreviousTxnLgrSeq\": 69033800\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rfXqSEeWLr4MYYLsESHbsyh3CZhAitzYVg\",\n            \"Balance\": \"256771648\",\n            \"Flags\": 0,\n            \"OwnerCount\": 95,\n            \"Sequence\": 67866274\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"68774683D6ECEEC1D2472B830E55C4844590E58EFDB63AADBA246E79E17B00ED\",\n          \"PreviousFields\": {\n            \"Balance\": \"202048885\",\n            \"OwnerCount\": 96\n          },\n          \"PreviousTxnID\": \"6F4920CFAF2D651A8E73B46B788147BC19D65395D7C64F110B46D12504097340\",\n          \"PreviousTxnLgrSeq\": 68931851\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rDSSG7NwYYV545mfcRdVExpAU6ys9CqoCk\",\n            \"Balance\": \"3353942747\",\n            \"Flags\": 0,\n            \"OwnerCount\": 551,\n            \"Sequence\": 63855064\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"688FCA6C84FE95CFC1F9B398FCD8C906A2D2AECDAC05520E2FAF79CDB29DDA48\",\n          \"PreviousFields\": {\n            \"Balance\": \"3276082848\",\n            \"OwnerCount\": 552\n          },\n          \"PreviousTxnID\": \"E0F02138B65B1A577DE909B7368844C3E974EC7AEF5807BB7E74982D49224EC5\",\n          \"PreviousTxnLgrSeq\": 69060034\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r9bsFjjrcnmfwEe83kG4LNhBUAcL3af2Bf\",\n            \"Balance\": \"217806645\",\n            \"Flags\": 0,\n            \"OwnerCount\": 86,\n            \"Sequence\": 67373419\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"68B2BF8B9E9E743EC32EC8D56BE7F1260DA7361A16C435721AEE31D79168B2E6\",\n          \"PreviousFields\": {\n            \"OwnerCount\": 87\n          },\n          \"PreviousTxnID\": \"D1A4D846D1475FC67E6A353EE7ECE50C8C27DBB33655647CC0240EEB5AE71293\",\n          \"PreviousTxnLgrSeq\": 69061950\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rqben5VgPyij1hAY4bi4yPyp3vf6GgY3z\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652110D9312F37AD5\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"2\",\n            \"PreviousTxnID\": \"4570CF185E03AE6CAB826F7A9DDA38442F875F2AE625292CB1611517E6181646\",\n            \"PreviousTxnLgrSeq\": 68967298,\n            \"Sequence\": 67935105,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"68C3B8D9F77D0F3DCD605E7A8F46C3E3518DAA2F240C5ED06D0CAE0360DEE736\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"14999999999.85\"\n            },\n            \"TakerPays\": \"71999999\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rnYFf4DWQj3Eip1R5mVvocQxtcBcvTvRo7\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365218289060790000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"e\",\n            \"PreviousTxnID\": \"F6C1B89D445C92E0CCAE5E8F7FF40FD64A50BE8262A3D398106C9E073924D45E\",\n            \"PreviousTxnLgrSeq\": 68899272,\n            \"Sequence\": 66696414,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"68F019DF04C05A0E18B68092F2BFC8C154122D74880892A3F47BB0463EE2C97D\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"80000000000\"\n            },\n            \"TakerPays\": \"544000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"ecf\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rBefpcbGP1mhJhuLmYSbPSj4oDTufciZDH\",\n              \"value\": \"9999610698104608e-1\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"68F2C9396DE930BFC347BECA8FDEC673C28AF50869679937FC9BE9D491E273F6\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"3951941647.058824\"\n            }\n          },\n          \"PreviousTxnID\": \"E684B8F98BFFE435832AE40AB4478EC3415499193F29FAF1C8F2463590853A61\",\n          \"PreviousTxnLgrSeq\": 68898333\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rsSog5gEY6GuTeCP4TAgdK7HkUHiSNxZqL\",\n            \"Balance\": \"1438283131\",\n            \"Flags\": 0,\n            \"OwnerCount\": 57,\n            \"Sequence\": 64558158\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"69160660C75B23CC248CDCD61304597E107A6091EBB055889E08EDE448AEF24E\",\n          \"PreviousFields\": {\n            \"Balance\": \"1381283131\",\n            \"OwnerCount\": 58\n          },\n          \"PreviousTxnID\": \"0CA95010A8E06EA13AEFFE56EBB3DFD58DA40887849D9BD7A28178EC4D2E1151\",\n          \"PreviousTxnLgrSeq\": 69062745\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r4LzF7yH5ewjqEVaTpufYTzwH8KyimRrrq\",\n            \"Balance\": \"170423284\",\n            \"Flags\": 0,\n            \"OwnerCount\": 79,\n            \"Sequence\": 67717947\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"6926F8BB2E845351B585195B18647ED90D282BBDC9BF593C74499C9D2281BBB7\",\n          \"PreviousFields\": {\n            \"Balance\": \"170350284\",\n            \"OwnerCount\": 80\n          },\n          \"PreviousTxnID\": \"EA0391A838002567887C398D38FEA95C787F816A65D7E44758BC1CA0A80B0B37\",\n          \"PreviousTxnLgrSeq\": 68747509\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-10685999940.9528\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rKjRbDnEwfSRjozGgD1M2dBU54xVtv57aQ\",\n              \"value\": \"9999999999999990e-1\"\n            },\n            \"HighNode\": \"2\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"ccd\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"69310530B582A1FD37A87261F6D3A677EAD5CA714C13025C829BC4640D5E52F5\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-15685999940.9528\"\n            }\n          },\n          \"PreviousTxnID\": \"FFF9F1A17DBE7551391C8766ADBFBED35CB0CCD595368649E9AA542A48DF4EBE\",\n          \"PreviousTxnLgrSeq\": 68883780\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rD3MRnTt6tvvtt7o7F5p8B49toAUWnoLmu\",\n            \"Balance\": \"1233471878\",\n            \"Flags\": 0,\n            \"OwnerCount\": 206,\n            \"Sequence\": 61714010\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"6931B54157A53A9399319445CA748CC74454F59D41D6687CA7DE605B469BB48B\",\n          \"PreviousFields\": {\n            \"Balance\": \"1094871878\",\n            \"OwnerCount\": 207\n          },\n          \"PreviousTxnID\": \"A48542544864D946B9452E52C29C0979AF478B2021ADF69510659B17CA9148FE\",\n          \"PreviousTxnLgrSeq\": 69059519\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"1260000000000000e-4\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"3e\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rh9MmnkJaQ1P1Y6ZzmRFpQAc9UdH6pKTiS\",\n              \"value\": \"1000000000000000\"\n            },\n            \"LowNode\": \"6\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"69353C86A3B3BD9049988DBDE5F05B178670173D2A5FDA7A1A2FB808E86F0BD0\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"3000000000000000e-4\"\n            }\n          },\n          \"PreviousTxnID\": \"34EEC2B5C7963F9EFA5DBA466DF7CF40A6F9C8601DCD9673ADBE2E91B30AD40D\",\n          \"PreviousTxnLgrSeq\": 69034828\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rnW1sfCjjdMou7RKC2PquXVchHYBMAHqTD\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365211BA60E96DE000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"7\",\n            \"PreviousTxnID\": \"FA1A6D1BCAB18D715A95741AE430DEE7804231654DB5EE256035CA78593E8010\",\n            \"PreviousTxnLgrSeq\": 68979201,\n            \"Sequence\": 67670931,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"8000000000\"\n            },\n            \"TakerPays\": \"39920000\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"697C767F4180E0E0353249D1DC23B1E7B0E2DEFB5A3FBFA32C549B751F349DCF\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rEqtQj662PMqja6Cb3pyK5V6xi2RGbcFxD\",\n            \"Balance\": \"8134218822\",\n            \"Flags\": 0,\n            \"OwnerCount\": 118,\n            \"RegularKey\": \"r92rqNabrq4AXQnJF8aveTnYJAvmhoU4MU\",\n            \"Sequence\": 63323954\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"69B5B02A16D0F9233CF64BABE0DC02290B6DFCA89F034F486B6E504B87DF384B\",\n          \"PreviousFields\": {\n            \"Balance\": \"860565809\",\n            \"OwnerCount\": 119\n          },\n          \"PreviousTxnID\": \"3AC4B7EFF8AD1051D38C353154EED9F03502786E4CCCE55B47B7581D80C6F463\",\n          \"PreviousTxnLgrSeq\": 69058503\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"2\",\n            \"Owner\": \"rfKEwoau3VsYDkabUXs7KbivzJXUE1iw9W\",\n            \"RootIndex\": \"26667297A5FBE6705D3476B3393D6010EF27E466B9543C1F12BC7E2B1C4656FB\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"69C94A0A1F7D95010481A7398D9920057A62DED8D4C155B7E6CCC9FA9BB35585\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rLCKThc3nyrBN63QzPHKoHHPA2iN8RH9gp\",\n            \"Balance\": \"598340872\",\n            \"Flags\": 0,\n            \"OwnerCount\": 79,\n            \"Sequence\": 67704275\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"69D3902A4A4F72694820C115AE488C6C9E2BCA7131D2703FCE62E04201C2C358\",\n          \"PreviousFields\": {\n            \"Balance\": \"538340872\",\n            \"OwnerCount\": 80\n          },\n          \"PreviousTxnID\": \"C6D113DCE7A4DF29197DACA42E1C297C54C68AE5469991535B844935EA1244B2\",\n          \"PreviousTxnLgrSeq\": 69063194\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rh8MNcxKuDcaMRuSj6P2rcMGxDiBqyZJJT\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365207741EB09897CE\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"1\",\n            \"PreviousTxnID\": \"CA76B05CA68830AE0056C64E53023A31C460203542E3D40D44C49F99F62E4D2F\",\n            \"PreviousTxnLgrSeq\": 69064150,\n            \"Sequence\": 67381323,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"6A1484ECD49A42CAC0DE456C26D1ADE32054FC8917B3738B174CE619F030C858\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"2241619378153860e-4\"\n            },\n            \"TakerPays\": \"470291745\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rfzG9eLEj6jZUbign4K98pmLSQt717FVaj\",\n            \"RootIndex\": \"6A321A71A1B5F55229FF516A16B0A34F7A2E74E047769CB3FA9BC8618D239565\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"6A321A71A1B5F55229FF516A16B0A34F7A2E74E047769CB3FA9BC8618D239565\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rEnJLGTTfay1rUmQqsB9PPMrhNo3sFkT5g\",\n            \"Balance\": \"238808259\",\n            \"Flags\": 0,\n            \"OwnerCount\": 34,\n            \"Sequence\": 67815719\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"6A3C769525AB288A19C7ED7D593821453067B20AEE6DBF5D872D5360C2FDB52B\",\n          \"PreviousFields\": {\n            \"Balance\": \"82531221\",\n            \"OwnerCount\": 35\n          },\n          \"PreviousTxnID\": \"370E39F81B730F2EB30C145D39419240D1CA7ADE6004E89828EF7DBA8E40920D\",\n          \"PreviousTxnLgrSeq\": 69054463\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rsPnG9Kmz7rf9fXRZ7zrVb8tmmjUkUEpin\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521550F7DCA70000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"4\",\n            \"PreviousTxnID\": \"A68616BFFAD5D355673A9355884E76BC0CEF94D7BF2151AEACA4E22A38CC105C\",\n            \"PreviousTxnLgrSeq\": 69043654,\n            \"Sequence\": 66616043,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"6A578C206D336F5FB06102C51A61D4B8AC4EB77DBC4615BF7178CA88B660E090\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"5000000000000000e-4\"\n            },\n            \"TakerPays\": \"3000000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-10337704892.96638\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rLVGNfLJYnQtqJDuNWkpu1yaSBnrrSGPdt\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"45b\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"6A9C6468E8C51345124F244105A992A94A1AB1F0ECB05A613F3F260BABA99558\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-19337704892.96638\"\n            }\n          },\n          \"PreviousTxnID\": \"D6433B40E73E3EF29BB3A5ECAFDFD0BE7FAE583BD9AE3CC6A69E16DD69D0E89C\",\n          \"PreviousTxnLgrSeq\": 68898383\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rpq6ooRTok73Udp4D58zesfDJeYM1t5s8C\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653060A241807135E\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"d\",\n            \"PreviousTxnID\": \"D7F6DFFBC279ED6121930AED15D80800564E80556F14A1E15BE8386EB8165D2C\",\n            \"PreviousTxnLgrSeq\": 68156360,\n            \"Sequence\": 66716681,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"31143959469\"\n            },\n            \"TakerPays\": \"529447310\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"6AA18CDFFDE14A5217993060A8036AFE365D9B91CA1F7D6F379CF2F50E45632C\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"62287918938\"\n            },\n            \"TakerPays\": \"1058894621\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rNvk1SNQZhU6fsyMuaTeLucyw5x5uxfxQy\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520925F2E84BF000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"2\",\n            \"PreviousTxnID\": \"B8BFD91CD9F3082A69B09B197FDDAABD5FAF51D74D12DCD0CFFD597ABF777EB0\",\n            \"PreviousTxnLgrSeq\": 69035316,\n            \"Sequence\": 67175629,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"6ABC4E8529B35250F115C264C55151DA6D9E7BD654FD415E2074ED12E5922A5A\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"29100000000\"\n            },\n            \"TakerPays\": \"74932500\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r48QoxLkkqiwjzhposyFj61op7AtvR5aLq\",\n            \"Balance\": \"161007410\",\n            \"Flags\": 0,\n            \"OwnerCount\": 21,\n            \"Sequence\": 67928324\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"6AC56FB8AD2E9D76935D5764A71F5BD75953E46FBF3D794AF92E9C8C105292C7\",\n          \"PreviousFields\": {\n            \"Balance\": \"55999910\",\n            \"OwnerCount\": 22\n          },\n          \"PreviousTxnID\": \"33D52B94E3BA532EC59F78CE04F1101488B5A07A0A33DA64530A584230861DB7\",\n          \"PreviousTxnLgrSeq\": 69030108\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"3892994933\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"781\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"r3LLQmhVJiQ3r5e3QCo15yaDumDNp7Gn1r\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"6AFB49A72EA7AC3234E5CDE93AE7FC0C1D0FE24039F77564A15727EFBE0DB26F\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"7785989866\"\n            }\n          },\n          \"PreviousTxnID\": \"B1F4D84EAF91BE5AF8809B7A2E12FF6D9329B231D6840BE7E50A5965AA32DD32\",\n          \"PreviousTxnLgrSeq\": 67996444\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rB4BbxNJ7Hv7i63EwPcEZjuP8YHizdkkvd\",\n            \"RootIndex\": \"D431FA5CCED016A40E3A7282CAA6051122AC68AEE0C6A0246FBF4B542EE46595\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"6B0448749419022B8FBEBCF449A4D5F1845A9AA31782F84215951EED892B8CDE\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"raKckiVpb6sE7hq7y1VGpF9YdGAVSbJJLu\",\n            \"Balance\": \"1201225243\",\n            \"Flags\": 0,\n            \"OwnerCount\": 380,\n            \"Sequence\": 66680949\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"6B0FC9EFB9C71771937B41648FB233E0E88EB5C4BF0FBC304FF192C993337A35\",\n          \"PreviousFields\": {\n            \"Balance\": \"1144543237\",\n            \"OwnerCount\": 381\n          },\n          \"PreviousTxnID\": \"B6C19E03E942C9F85970DEF1F58A37CF707F62CBBA9B9038F0246DC8D9C3035F\",\n          \"PreviousTxnLgrSeq\": 69060783\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"9\",\n            \"IndexPrevious\": \"7\",\n            \"Owner\": \"rnYbiXaSpChddFy4fdVYDtNscUsAfgaA4U\",\n            \"RootIndex\": \"152B711B52510B654637BFE18671A971ABFCBC75AE22A96810BEE51E9554D656\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"6B1434ECC6E83B670CAF4D278ED7A8697885EDEFA18B92856D3867E4B5C9FF43\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rGEpUHYXy3Lt8KvmaKG9wGEB51H1nGAcJ\",\n            \"RootIndex\": \"6B246A6A492C99BDD253671B20EC0A68B1F6BE69F70AF586BA20B57A8A839839\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"6B246A6A492C99BDD253671B20EC0A68B1F6BE69F70AF586BA20B57A8A839839\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rfB3HqBHHTi5TCaXxjo9yMh4r2kfuC3pbz\",\n            \"RootIndex\": \"9E4478D670B47B148749C69D0620068BB3D8982BFBE077E9BC60A7ED6D76B954\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"6B407541C3B31A798B6F3619A8570576DE1B856327D1114B59223889E7A8F83E\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-3107820999421803e-3\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rLgitcbChWYinjw7tiwK6wQw2mN6pEyWzw\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"e59\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"6B42309ECDD74F8825971FFB8338C03680CF44DFBB111363DA4354FB06F314CB\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-5201107085316804e-3\"\n            }\n          },\n          \"PreviousTxnID\": \"453E8F20B0562FE34F105FCEC41787E0353B355F6206A3F237C2D450A195648B\",\n          \"PreviousTxnLgrSeq\": 69057854\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rBdANmzNNUu3sSPo15TR5eY2s43hPH9yFG\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520E90EDA38BAF0F\",\n            \"BookNode\": \"0\",\n            \"Flags\": 0,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"B34365158B1E56DB6F9024727525365EBA67FA4635A457FBD5A1F306D74F1CA8\",\n            \"PreviousTxnLgrSeq\": 68991133,\n            \"Sequence\": 67499172,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"1305027537495764e-3\"\n            },\n            \"TakerPays\": \"5350612903\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"6B57A05A5E079F887E971B91ABFCCB3E6A353D779457CAE6D2DC2806BDD62276\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"ef2\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"ra4q61eeGoZx4cAJKPHQdyukvugrB2jhgW\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"6B5F189AAD3BE961A92CD5BFEFA446B90910D42239EE13D0CFA5C1A76A0B9197\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"55766237.75333621\"\n            }\n          },\n          \"PreviousTxnID\": \"5169F8A2A58227889BC7FD2F237A947D27882ED3A61448CFA2894EB6241594E4\",\n          \"PreviousTxnLgrSeq\": 68916017\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rfFFmdT4f2Qj6gSS7daVrQDpJw4tF62Ke2\",\n            \"RootIndex\": \"6B86B5ACBF75649A472974F6B3A1035B7A1B81406B8A1CD51A8285DE8D3F6DAB\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"6B86B5ACBF75649A472974F6B3A1035B7A1B81406B8A1CD51A8285DE8D3F6DAB\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r4VjGvXZQwpAy5iqMCt6kbSbFb7Bi8RYEG\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365211C3788097C0A3\",\n            \"BookNode\": \"0\",\n            \"Expiration\": 726800511,\n            \"Flags\": 0,\n            \"OwnerNode\": \"1\",\n            \"PreviousTxnID\": \"8DCFF0FC7AF26FB37604C52FBF1179040D3108AC4E7F0307871ED75E029AB80D\",\n            \"PreviousTxnLgrSeq\": 68953081,\n            \"Sequence\": 67388822,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"6C3A2FF0CF08DAFC4B9BBD1BCB38AA22C50E1572A8DD4B1A10B6A1D5B0D8D5F2\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"10000006150\"\n            },\n            \"TakerPays\": \"50000000\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rJqAwcpzstjreWoBc7wGXRtWoxSeXTUzf9\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36522386F26AB38C66\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"4\",\n            \"PreviousTxnID\": \"7C789F0BF122E6C3467FB0AF54B0D9DC7362FAC30EAE8E1EA6AA68E9B109F6ED\",\n            \"PreviousTxnLgrSeq\": 68790316,\n            \"Sequence\": 66945436,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7785989866\"\n            },\n            \"TakerPays\": \"77859898\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"6C67C9B5B753D00979831829F5F757DBDF823519866D4344A7EA1682A9F48FDA\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"2\",\n            \"Owner\": \"rpFYhEoT7AeTuaAZYwU25Gjn3i2VygsMnP\",\n            \"RootIndex\": \"69400FA06D625B6350459C2B5DF74C0C76A59CC29DFAE6CFDDC3ABF74954B6EB\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"6C74341F407E17C69850AD443D08C11674A112768DB79790254A8BE0A0EE851E\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"d\",\n            \"IndexPrevious\": \"b\",\n            \"Owner\": \"rKWwHEb7RPAjRUVyvtfHVUJ1WZjECFhjbE\",\n            \"RootIndex\": \"A5F836F8900235B3CB951574D43741D3DEF032AF351B24A8F224D5A0FCE7A242\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"6D0AF77E78E2B1FFE0902CA7157CCA0E17D045892ECD7166A428A3A0D3198B19\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"ee8\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rGEpUHYXy3Lt8KvmaKG9wGEB51H1nGAcJ\",\n              \"value\": \"9999999999999990e-1\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"6D2DB78FFA3F5FD3B08EC3ADDD45479BAD94D930287D060220CFB586E354D9D6\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"4555713689.655172\"\n            }\n          },\n          \"PreviousTxnID\": \"28B813CCD15A308933E4C3C46BE26FD14310A535E0FC50553135AB7F054C75EE\",\n          \"PreviousTxnLgrSeq\": 68899328\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rJMPwHXPwcnQCNmNbaRq2Lf5nbsivkCJrH\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653071AFD493F3645\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"5\",\n            \"PreviousTxnID\": \"06FB52AF1C4864C6DDEAA840CC39E13420034F655786C8FF3E94E6E98F3558C2\",\n            \"PreviousTxnLgrSeq\": 68155838,\n            \"Sequence\": 67216328,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"5060893412.900001\"\n            },\n            \"TakerPays\": \"101217868\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"6D5EE6505D0C89738CB62FE778844283A2286D648A6F57D6DA1488CA6F85694E\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rhASEa6rnfc5WHFbd2ZdExhwyfBu27pitp\",\n            \"Balance\": \"153119804\",\n            \"Flags\": 0,\n            \"OwnerCount\": 64,\n            \"Sequence\": 67430949\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"6D9AD70F1A52E78AC9EAD2AEFFDB86FF1A37D27A82C7D15E453C09C152BED654\",\n          \"PreviousFields\": {\n            \"Balance\": \"141994804\",\n            \"OwnerCount\": 65\n          },\n          \"PreviousTxnID\": \"58051584F401B268AD9E0B2530E23734EADB6AF13AB045452CE58CDAA6696E21\",\n          \"PreviousTxnLgrSeq\": 69062343\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rfBvZMQKX3gxybSQAt116zqUxXKu7a8BmY\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652093CAFAC6A8000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"2\",\n            \"PreviousTxnID\": \"08982A2D43153FE20CCD0AF3DC0D51A16C1101D6143FE5E1E862277C2EDDFF53\",\n            \"PreviousTxnLgrSeq\": 69053280,\n            \"Sequence\": 67523779,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"6DB50FF7374B6F0937441E6BE7B2B4CCDAAD821AD32ECE8990AE62D2FAC5D2F7\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"14000000000\"\n            },\n            \"TakerPays\": \"36400000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"3\",\n            \"Owner\": \"rajb91Ucmbfxe1KoUEpAtJi8eo5bQVWeUW\",\n            \"RootIndex\": \"9E832999199458B73CF9879A9E057FF7C9A03FA7123D9173857BAB7076E3663E\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"6DC0EE8EBA6B09ED36B47CDC5CAA93E80317F88F8C6F318E7301EF1F3DD0BA44\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"2\",\n            \"Owner\": \"rBzk3TdhfdbidCHeKWfmQ5dy9AuAtGbXeY\",\n            \"RootIndex\": \"C7D98479E3BDF2F01C7F49643BA7AC13D7E365C9AE6B30C241ABE52700AABD01\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"6DEC784124AC59EA1A0E6BC0A4B38706C8CDF01AA6F51310C797EFC2F427AEED\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rLCRC3mUAkWe4R8EwjZ43BGQs7hmpdGrbE\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521E8CBEB2C6A41F\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"10\",\n            \"PreviousTxnID\": \"9EA59A4C2591D5C59C3935546ED42621A2958576710C4B6CFECBF376A0A01A6B\",\n            \"PreviousTxnLgrSeq\": 68901075,\n            \"Sequence\": 66153654,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"6DFE81EE2582C8BA4B84462E8F4AEE42889EFC9B56D451111F5EEB30BDE6211B\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"24264973447\"\n            },\n            \"TakerPays\": \"208654506\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rHSPavv1zYMxcqPUHEeQqwMSQgSzadAjM4\",\n              \"value\": \"1000000000000000\"\n            },\n            \"HighNode\": \"4\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"214\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"6E183DAC81FB48B845E861EDBA39F859A1047760A9811437A0BC867DF8F44829\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-8001600000\"\n            }\n          },\n          \"PreviousTxnID\": \"40E76D634D370CA7865BBEB85D53D891900F6E86E0C2B7A90AFB45E41BC76818\",\n          \"PreviousTxnLgrSeq\": 68898848\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"7\",\n            \"Owner\": \"rnfs5ayanPy2X7aQERUoayaokxjuH361V8\",\n            \"RootIndex\": \"B2BEFF6BFED4415F30EF0E72FE72BFD41503DD6570CDF9668285A862AD28A5EF\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"6E3E45F30E3EAA8EA22FD39581AB0D3897A97C65FE9D9B091A1EEEE3A09938C6\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"983\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rBVauSrW9MhaNcszTL125KttqSixQmUDuK\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"6E473C81B0E1DF1B3DCC86D0460F158F07EE7278EA4E0F6C5B1F3E13B74F6238\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"7785989866\"\n            }\n          },\n          \"PreviousTxnID\": \"BDB1E6A3BA1575C9312E6877ED88612D47B2FF4617B77A88E60E5D506846C0E0\",\n          \"PreviousTxnLgrSeq\": 67991913\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rKycDDwvkpARRr8dccx6mTKBBr6W1GkGjK\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365318DE76816D8000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"5\",\n            \"PreviousTxnID\": \"4A3FDD868A85D49B293A8ACBF045B3017DBA0FDB6E1260B1C42470454856C1A9\",\n            \"PreviousTxnLgrSeq\": 68803251,\n            \"Sequence\": 67284830,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"6E62D9123507CFC58BDC9B614C37EE512DF2195382594FB4306564A253B6F4B4\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"2000000000\"\n            },\n            \"TakerPays\": \"140000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"55310179829.91486\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"73d\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rsE3JJ4VxxndQwzRusS99pmAeYN3bEYZmc\",\n              \"value\": \"9999999999999999e-1\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"6EC04CB3286D90048557DDE79D5C3CEF3E682A8CE17E94C4031C3DCEC765AE92\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"1208872303923083e-4\"\n            }\n          },\n          \"PreviousTxnID\": \"436154BAEA9CA9756228BD045A1B3F9107125E0CFB054C6D017BA67C660376F7\",\n          \"PreviousTxnLgrSeq\": 68966795\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-35573129284.06597\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rGpBZrDTpimasSJEWV5hxH75LsivV5Hz4v\",\n              \"value\": \"1000000000000000\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"248\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"6EDD224DE476D8355CFA18DEC3085901B46EA8D11B1FCC806982A67AEE423E3C\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-70509517875.30107\"\n            }\n          },\n          \"PreviousTxnID\": \"7E8E72D93BD6E071C60F2CBDAD0457B3F2C8822DA630148ADFF31D08BEB86CCE\",\n          \"PreviousTxnLgrSeq\": 68993672\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rPG9SrHPEhwbExniY48qKCqDqjGKyVn38w\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521550F7DCA70000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"d\",\n            \"PreviousTxnID\": \"4CEED23F8A3F6996F2E7DB38DD16004D7FB577DF5F3F1B314020F0C748392622\",\n            \"PreviousTxnLgrSeq\": 68899367,\n            \"Sequence\": 67109444,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"6F0190DAE6F59C4E9D5A1CB8B349C562E2B8BB014B36A07419E580F204AC5DE8\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"10000000000\"\n            },\n            \"TakerPays\": \"60000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rBZXb3rXDo251L4ZJdQCa8AUjP7kc9ifCT\",\n            \"Balance\": \"216307241\",\n            \"Flags\": 0,\n            \"OwnerCount\": 66,\n            \"Sequence\": 67536213\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"6F0FF7E3753DBF46EB2E0FC1E6D00837796AAA6FAD569BAEE112483AB86ECD7F\",\n          \"PreviousFields\": {\n            \"Balance\": \"161612550\",\n            \"OwnerCount\": 67\n          },\n          \"PreviousTxnID\": \"D88A6A365E36DA1EB42A907CF75683184B68EC4A8E73895CCEA6148C839A3C5D\",\n          \"PreviousTxnLgrSeq\": 69062470\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-1650000000000000e-4\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN8rfe7hU4CCkmEiDkj9fg8pgBp5fa8p2j\",\n              \"value\": \"1000000000000000\"\n            },\n            \"HighNode\": \"1\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"626\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"6F117A3BB50A37286B3B640CE1965D64B2703F0E57C90793EF560AD57CC8C4D0\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-2150000000000000e-4\"\n            }\n          },\n          \"PreviousTxnID\": \"001C79AD997F4EAA594FF866E94549603F902CCF63C7A91A4C707E62EDF37C17\",\n          \"PreviousTxnLgrSeq\": 69034878\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rET8MUZc1VEcHkQqQWeRmvbWZcrtHy24iB\",\n            \"Balance\": \"206894982\",\n            \"Flags\": 0,\n            \"OwnerCount\": 24,\n            \"Sequence\": 59759824\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"6F233F3405943EC24EA471AC6F1E27B376B4C66AC4E706EAD7B68322F6AFFBB2\",\n          \"PreviousFields\": {\n            \"Balance\": \"188208607\",\n            \"OwnerCount\": 25\n          },\n          \"PreviousTxnID\": \"7FD1979025AC60864F12C3EBCE606FE29E3D5EC13F1270A1CEAD8ED1152D2CB0\",\n          \"PreviousTxnLgrSeq\": 69063498\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rhoYhs7WCmQKMPR22kQ5DhXw3pXQsjUsmi\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652121553F9BA6A14\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"b\",\n            \"PreviousTxnID\": \"F64D5D25A3F1297F513C06BE52235DA5FDEF4C96BDE207A27611FAE45FB1A513\",\n            \"PreviousTxnLgrSeq\": 68997760,\n            \"Sequence\": 66912762,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"84365223821.75485\"\n            },\n            \"TakerPays\": \"429418989\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"6F4113641CC97924147D096DC6D75ABA81081286F057BDBCBC5C203668D04007\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"2\",\n            \"Owner\": \"rpeh8BoXFBaV9nkmRvyHWMt9tGagwWhk5s\",\n            \"RootIndex\": \"B073EC6C2768F994C5455EB4C115936827172A56C38FC7FCA0D7F3D3F78146D5\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"6F4CAA16C43EE37AE2F2C4DDFA68782CC91BA40C40611496BA34F48EDAA791FD\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-1190605514080986e-4\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rPG9SrHPEhwbExniY48qKCqDqjGKyVn38w\",\n              \"value\": \"9999999997999991e-1\"\n            },\n            \"HighNode\": \"3\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"a35\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"6F5019B040EE62F9604AB6998AB7E9E8C44E508B05566996853ADD723EA32CCF\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-1390605514080986e-4\"\n            }\n          },\n          \"PreviousTxnID\": \"808483DE8C02BB3297A29B4BECB913C6DC226D403087E9AFA8A0E7947CD351A3\",\n          \"PreviousTxnLgrSeq\": 68991025\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rGcsBzn4XYzjM7nAXBUU163LfyStL1PZsA\",\n              \"value\": \"1000000000000000e-1\"\n            },\n            \"HighNode\": \"2\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"ee7\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"6F5E4E03254213D49687510AC6EFA9EFC3E3788909000D7B639670B2B9B223D2\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-38049133595.14459\"\n            }\n          },\n          \"PreviousTxnID\": \"F3CBABE5339DD833CE01D9A8D348F1985A5CD3CCDAA961C8DB52B2AF3B8AE4E7\",\n          \"PreviousTxnLgrSeq\": 69000185\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"6ad\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rnfuLKZgLhpw1UJorfJH8G1ukEyA7JLf3n\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"6F86F71142AEFA3E8A835136853C843BE2C55D6AA544D8F181B60E17A59D40B2\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"7785989866\"\n            }\n          },\n          \"PreviousTxnID\": \"D02B73DDFE174DAA22062702DBA03D4833F558DC66CADDB9475A03F2712505CD\",\n          \"PreviousTxnLgrSeq\": 68000148\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"3\",\n            \"Owner\": \"rn9Yx4G5KM8ie2sm6Qaju7xPbvQPFiUu2f\",\n            \"RootIndex\": \"114AF222D2F86ABC1BD7FAAD8A4A1799C87B04A644333C7554EC673709A47A42\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"6F8AE73CF7A14934F3FDAFB05BAC94D2B9CB1F48672A658EAB6CECA1E98D3C18\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rGT6ze5CuPEUzsk92YnLLkEqjv6qqhabrF\",\n            \"Balance\": \"36449651155\",\n            \"Flags\": 0,\n            \"OwnerCount\": 202,\n            \"Sequence\": 82867\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"6FBA665E0EB2633A6007080596D5F2E449DEB386D25E91EB97E2A91CE185E266\",\n          \"PreviousFields\": {\n            \"Balance\": \"36099086061\",\n            \"OwnerCount\": 204\n          },\n          \"PreviousTxnID\": \"EA29A8A9A4B9956A10BF3A164D4508196E628641780E3143FC8FD29D2E0B770B\",\n          \"PreviousTxnLgrSeq\": 69063739\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"1\",\n            \"IndexPrevious\": \"2\",\n            \"Owner\": \"r4LzF7yH5ewjqEVaTpufYTzwH8KyimRrrq\",\n            \"RootIndex\": \"6FC994FEC547EACA8EC3EDF9E9DAD45B9E5F4CA1359C07982857E8477889CFBE\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"6FC994FEC547EACA8EC3EDF9E9DAD45B9E5F4CA1359C07982857E8477889CFBE\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rEq5qRY3MvKgqLUDbPF81FQQe9iEfS4xPs\",\n              \"value\": \"9999688558266524e-1\"\n            },\n            \"HighNode\": \"2\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"e27\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"6FC9B2744313A41445385A975B074CC4DD32220B5D814AA4EEFD946EDDE6EF2A\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-1137995447689225e-4\"\n            }\n          },\n          \"PreviousTxnID\": \"C7A184DDC8B7DAD511A8AC0B69F9365C142F8B3A9075D03C66D46ABC0DAE9B67\",\n          \"PreviousTxnLgrSeq\": 68996703\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rKB9EELQpLTeDNb3H5HJT7QbCPdA1NzDQ7\",\n            \"Balance\": \"1522226280\",\n            \"Flags\": 0,\n            \"OwnerCount\": 151,\n            \"Sequence\": 67528783\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"6FEA86A43F385AB36163AE78438E3BE042B03816E597AE0EAA0F85A52C947D3F\",\n          \"PreviousFields\": {\n            \"Balance\": \"697347358\",\n            \"OwnerCount\": 152\n          },\n          \"PreviousTxnID\": \"992BF755326FA2FDE48C327185E8BC1A5821393FD587BA81125CD202BC7FDB52\",\n          \"PreviousTxnLgrSeq\": 69047372\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"3\",\n            \"Owner\": \"rNtB5pUvufMkzs55wL88pVuh3xt7LVW2mR\",\n            \"RootIndex\": \"E91A334F6A2597D0DFCCC2ECFCC5C0AB959E62A57F719C4734BDA123F9940F9B\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"700CDA826D29516B88CE366265311FDBFAF632C8C712C5C1FCB37B19D8CB2171\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"b\",\n            \"IndexPrevious\": \"9\",\n            \"Owner\": \"rw4M6hoNYisxYmeppD3bkmf1TuTcQrdsit\",\n            \"RootIndex\": \"B586125DCE895C5DC6986542080DFE7CFE1F5AD351B0EC8501BACD4C23B77003\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"701F2158D1D86162D320757256C526C412F6F4827DF122BBD289DCC23EF8A05A\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rhw4L75RKqQwheqkwPMM7sQYti6hmLWUni\",\n            \"Balance\": \"240282356\",\n            \"Flags\": 0,\n            \"OwnerCount\": 75,\n            \"Sequence\": 66981513\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"703034F73B7DA3169A55838796F2037FB90C7C7F33CA65BB7B55E3948D1C4CBE\",\n          \"PreviousFields\": {\n            \"Balance\": \"177994438\",\n            \"OwnerCount\": 76\n          },\n          \"PreviousTxnID\": \"6AF9C5E8546627FC91E90953B4535F070B98B205DF5920215453B0D3512EE185\",\n          \"PreviousTxnLgrSeq\": 69050053\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"8052382742854580e-4\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"509\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"r3mZ69KGMSXXfdFe2xxeNvSkA98mQQ52aF\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"LowNode\": \"2\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"707C3F46A9A27190D9EF9B0F7C51F78B325DCD2EAB24BF6CAB03ECF81CA1DF67\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"1203108284768164e-3\"\n            }\n          },\n          \"PreviousTxnID\": \"E7EAD1870F80793443B24B458B003896E207AB7B24CDE9C2766373A7FE5864AF\",\n          \"PreviousTxnLgrSeq\": 69062949\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rHmYEsWRfXC1YbFEKeJRWu9d7tdZ6x1od5\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521FF973C6B89625\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"4E0110B7EEFC3AA8E55C664BB613D4342548340EFA0F0711005F4A66BD746CB3\",\n            \"PreviousTxnLgrSeq\": 68895634,\n            \"Sequence\": 67441236,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"7112F3D73AABF3CF3563CFA7DA4C4B892D74B050E6E0B2AA0C350D3FB290322E\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"14000000000\"\n            },\n            \"TakerPays\": \"125999999\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rK699XAUEcMK6msaRDV46mATmAqNN9nj24\",\n            \"Balance\": \"17999970\",\n            \"Flags\": 0,\n            \"OwnerCount\": 2,\n            \"Sequence\": 64217434\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"714CE2E276548B1FEC7B1B063435FFFE608593DB80DDAB9CBCA4E407681457FC\",\n          \"PreviousFields\": {\n            \"OwnerCount\": 3\n          },\n          \"PreviousTxnID\": \"C15641B5B16AB5B9930A9B95B7C1BAFD7B7ED9DC9BDB0CD9B401523073F76E66\",\n          \"PreviousTxnLgrSeq\": 68973407\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-26\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rJ7kEdYrtovE89yxzJ14DgPYCR58odZYVi\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"73b\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"71607AB8E7660ACA44F92D8889015F95F18A906C332C2756262E01D389182D68\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-1734116626\"\n            }\n          },\n          \"PreviousTxnID\": \"D273FF3FD32364ADC757161B0C6099A36A6FD87B6AB11538F7DB81DC8D3D8311\",\n          \"PreviousTxnLgrSeq\": 68233139\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"7\",\n            \"IndexPrevious\": \"5\",\n            \"Owner\": \"rp9kJTnnfXrjwVFxGRWfjUbJdmxkGP4cif\",\n            \"RootIndex\": \"9818A0E9F8B2E4FD17CE73D3763A1878DFE404B32FC8BA5DCC913038A3133760\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"7178E21819C392285EB2CFE071FD8C3E6E08025D89D4599960650E2F773D28F0\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"2\",\n            \"Owner\": \"rNARwAxVp9C26pcBpRbFHdw6P5Sxa4q7kr\",\n            \"RootIndex\": \"F60DDE8BBB749FBF5681513B29ABCD5E2DAD11319E7F35249CDAEDB3578891C2\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"71A5C0FEB9DD341F0D49890645793BD2B34BDC4A724F9340AE426CB35D753CC8\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"7785989866\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"4ea\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rpRWz81LgJfwcxBFMMxwnMttsHr8VoMZeR\",\n              \"value\": \"1000000000000000\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"71C953C88D2BBB607F6194E0CA68F211FD67B020A3982B3C35E4AD2D30EC3F2B\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"22785989866\"\n            }\n          },\n          \"PreviousTxnID\": \"147FEE90BE9A6CC7583EAD653F2111AE1BB23677683E20A01763AC9C863BE21E\",\n          \"PreviousTxnLgrSeq\": 69026899\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-10789996000\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rEkvHXE15kSe5Vh1b7RQrDqKrMUqAzsjGW\",\n              \"value\": \"1000000000000000\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"168\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"71E50F19D341701CB6F88AD1FFAADA2BBD388851C313F4120E27611400B22437\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-21361975732\"\n            }\n          },\n          \"PreviousTxnID\": \"808483DE8C02BB3297A29B4BECB913C6DC226D403087E9AFA8A0E7947CD351A3\",\n          \"PreviousTxnLgrSeq\": 68991025\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"raA94X4CEVD8GVTSQWjafELaah67aqrvjG\",\n            \"Balance\": \"699977610\",\n            \"Flags\": 0,\n            \"OwnerCount\": 24,\n            \"Sequence\": 67107713\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"71F191292990EDE424B2E01336E1F1D1B8BFD32D5EDFED52400D74385BCA0F05\",\n          \"PreviousFields\": {\n            \"Balance\": \"641077610\",\n            \"OwnerCount\": 25\n          },\n          \"PreviousTxnID\": \"6B6CAF5F81622D45086503FD33571F6FBBC7CB58081DB8DB18708484AB4B6F9F\",\n          \"PreviousTxnLgrSeq\": 69059689\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-20015213305.23436\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rQ34CimjrmwQA4bz3qCwGRHPFuo8rbnVWv\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"HighNode\": \"1\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"a62\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"723398A36EFE9A53B8911B0C4FBFFCAF06CA4D971D20E7D1A1F827F05616EE19\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-30015213305.23436\"\n            }\n          },\n          \"PreviousTxnID\": \"6EADCCDDF9793F04A515942A418682FB277BA688962D0F9F2E3EE1975BF3C8FC\",\n          \"PreviousTxnLgrSeq\": 68941355\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rESTNm5GsJf8WQEnEmszRCsiEzHuFAcgQk\",\n            \"Balance\": \"354101657\",\n            \"Flags\": 0,\n            \"OwnerCount\": 88,\n            \"Sequence\": 66677076\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"72384BFD4E86CCD693177D4FF18224CFA82C41800CA74E708247622D9363C5F2\",\n          \"PreviousFields\": {\n            \"Balance\": \"276669988\",\n            \"OwnerCount\": 89\n          },\n          \"PreviousTxnID\": \"32DAEDEE82BA0E1F0A853F02A8CCCF877AD723312E30E64F24B88450C9E34D1D\",\n          \"PreviousTxnLgrSeq\": 69063887\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rpcz3Nun3FcRunaTBPPZ6VK8De82hr2DzG\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365218D9017E1BC6C0\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"1\",\n            \"PreviousTxnID\": \"669DC83EE13E4D214DEF26406BD0D5830734669D03139E304A49A312FDA45E2F\",\n            \"PreviousTxnLgrSeq\": 68900820,\n            \"Sequence\": 66971096,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"724136825A68BB4EEB56077668FB3A007299743A69C6EF15EE60D63254A544A7\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"8000000000\"\n            },\n            \"TakerPays\": \"55951999\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rnfuLKZgLhpw1UJorfJH8G1ukEyA7JLf3n\",\n            \"Balance\": \"339230029\",\n            \"Flags\": 0,\n            \"OwnerCount\": 85,\n            \"Sequence\": 67152473\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"725D88270316B1C2FE6FB957393680ADCAEF0157DC2F50E6B864336EA30DE7E0\",\n          \"PreviousFields\": {\n            \"Balance\": \"269156121\",\n            \"OwnerCount\": 86\n          },\n          \"PreviousTxnID\": \"31601F03D0E696F235DC95B645D3202F4146126AC6487B93AB98CED1B07B81C3\",\n          \"PreviousTxnLgrSeq\": 69052150\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rEnJLGTTfay1rUmQqsB9PPMrhNo3sFkT5g\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653071AFD4908585C\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"82491D13E1DF657FADF4A3FE420527A34EACDA85287C12141B5D2D966BE67EE5\",\n            \"PreviousTxnLgrSeq\": 68893019,\n            \"Sequence\": 67815701,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"726E71A9710259A50C571BDD355F6DC48F4C446923E2F3C0EA1DA03427D6E2BF\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7813851933.965517\"\n            },\n            \"TakerPays\": \"156277038\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r3yLxRMK4K5z8UzzYC9tQASyFZ7p6EQDwz\",\n            \"Balance\": \"1807707037\",\n            \"Flags\": 0,\n            \"OwnerCount\": 9,\n            \"Sequence\": 68723103\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"72B7C6B982DBC92595A5610369CF0D0EE73ED4DE9AB4D16AB571B61F71D198C6\",\n          \"PreviousFields\": {\n            \"Balance\": \"47707037\",\n            \"OwnerCount\": 10\n          },\n          \"PreviousTxnID\": \"48C140CC2CA353858C4C311A5D146514E8F131DD62F00433B7F510EFA6DD7D2D\",\n          \"PreviousTxnLgrSeq\": 69044256\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"5\",\n            \"Owner\": \"r4zXDbBBSbrguDq5pTzabnMgXY7n5qg2jb\",\n            \"RootIndex\": \"7701B90FA50AF135326B1DBE0C8B8A71C4E95CA5C6E659E479DEA0D12D2873BB\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"7343EA475AB28C653F0FF622EC32896DBF990DD84CE4E124B091E4354F986AFD\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rMAWeQvUd5zQpyY9hSdaUMRMTQHcgAXvj5\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652110D9314988D96\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"1\",\n            \"PreviousTxnID\": \"E142BB3F18896B94F8B2DAFB4ABD4B239B57E99409A70BBEB94C114E48DBA623\",\n            \"PreviousTxnLgrSeq\": 68996600,\n            \"Sequence\": 67781445,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"73550653FA272E7AB7EA433B1D63678FCE36E84523B9817C6D91AC62A1FF87A7\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"24571457491.42857\"\n            },\n            \"TakerPays\": \"117942995\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-15623452549.18812\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"r43hxvGDZqmKmLugK8oJ32r2f4rxuvUntb\",\n              \"value\": \"9999688558266545e-1\"\n            },\n            \"HighNode\": \"18\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"de0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"736D02E12B0A2B624080B8430B722EF5949130227A812EF08B08322A8455EBE0\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-22623452549.18812\"\n            }\n          },\n          \"PreviousTxnID\": \"34EEC2B5C7963F9EFA5DBA466DF7CF40A6F9C8601DCD9673ADBE2E91B30AD40D\",\n          \"PreviousTxnLgrSeq\": 69034828\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rUATLa1awouAR8jS1DwtsXuy8EXCjdktgU\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365211C37937E08000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"13\",\n            \"PreviousTxnID\": \"1358850657A6B3F2077CBC160AF62E22D7C18FF3494C4EFCB50E848CAB58B5B2\",\n            \"PreviousTxnLgrSeq\": 69001393,\n            \"Sequence\": 66416971,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"73AE017A37DB0BA93EE66880F47F107DA9046FB80F5D6DCDB91158358DC8B3A0\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"15000000000\"\n            },\n            \"TakerPays\": \"75000000\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rPSYhGCFb4y7ntd2VaJzTS4eqiw91wynZn\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653056F86E281A000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"6\",\n            \"PreviousTxnID\": \"CFC7EE8314D386FCE75D466229842902E0DD45B686BC1B0D24961DA604745236\",\n            \"PreviousTxnLgrSeq\": 68161757,\n            \"Sequence\": 66692714,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"73D5BE8EE4DBDD4C07F14675CAC804C563E2B9B0EC12039481CC8E194E9062CA\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"5000000000\"\n            },\n            \"TakerPays\": \"76500000\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rLPotHoaZNMvAKnTE1xUaVYsHVKKf3SzYY\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521FF973CAFA8000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"8\",\n            \"PreviousTxnID\": \"3678FE2F7710251F66B53D9E22FEA7F45E938ADA897857B1F3D22C5445F93207\",\n            \"PreviousTxnLgrSeq\": 67963531,\n            \"Sequence\": 67243573,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7800000000\"\n            },\n            \"TakerPays\": \"70200000\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"73D6D492646E8BCA03146200DBB64B9E2C2B3D84BBCF386085C0B6E782BD048E\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rpq5MrSjiQgMj3Rk8Kvf1L3Gzh4xp1CUdZ\",\n            \"Balance\": \"812672879\",\n            \"Flags\": 0,\n            \"OwnerCount\": 84,\n            \"Sequence\": 67528382\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"741ADD8FF8E160352F742F6456A2263EE612EF1E388915881BA8EF51AC32FD3C\",\n          \"PreviousFields\": {\n            \"Balance\": \"238330880\",\n            \"OwnerCount\": 92\n          },\n          \"PreviousTxnID\": \"56CCFA47B8FFE18287032B90BC0FADAA7C96AFC6BB687F31DF7FCABF5B861A08\",\n          \"PreviousTxnLgrSeq\": 69047015\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"raA94X4CEVD8GVTSQWjafELaah67aqrvjG\",\n            \"RootIndex\": \"747530E895B533D4235B360BB1C6EEE7FAA50741FC94754B01148198B95E234D\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"747530E895B533D4235B360BB1C6EEE7FAA50741FC94754B01148198B95E234D\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rELkNgURGeR4vEFUEYHNATaS9pwPk4KFEm\",\n            \"Balance\": \"424134322\",\n            \"Flags\": 0,\n            \"OwnerCount\": 73,\n            \"Sequence\": 66617441\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"74C50B79B937BBDC1A3332905769143C92405ED35214932822E7A2DBD036A2F2\",\n          \"PreviousFields\": {\n            \"Balance\": \"369795899\",\n            \"OwnerCount\": 74\n          },\n          \"PreviousTxnID\": \"49AD33DB8375ECB48BA9886B8B7A014AD67AE1BFFD4EF905D347D50819C94BF8\",\n          \"PreviousTxnLgrSeq\": 69042991\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rEgSssemRh6cSEJYWAyA6Q9uEm6XjBUZ2H\",\n              \"value\": \"9999610698104599e-1\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"ee5\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"75110EF1ADEF0B1B639825E31EC75B0D3ABEA94267C8EADAB956586AC8F4CA1B\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-10618837198.62227\"\n            }\n          },\n          \"PreviousTxnID\": \"0BBAD2F76CBB3DF0110393E17C1B5F34C6F0E5732EC76B4DFB936D29F1488048\",\n          \"PreviousTxnLgrSeq\": 68965200\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rnG1UdmTmDXHaQp1vVp4jsH5ZhJKp97TjH\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521550F7DCA70000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"2\",\n            \"PreviousTxnID\": \"73BAABCDD08503A8D225A788DE49CA9365F7E4E536CDA51481FFD90FCB519E6A\",\n            \"PreviousTxnLgrSeq\": 69006307,\n            \"Sequence\": 67436924,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"7514565BA333EF7F0878A3F7E52824974993520B0807AD38242EBA822587EC0E\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"15000000000\"\n            },\n            \"TakerPays\": \"90000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r3BA8VZ9TV8U5qgd72SX4Ct2iAgQGwcfZ6\",\n            \"Balance\": \"211832417\",\n            \"Flags\": 0,\n            \"OwnerCount\": 86,\n            \"Sequence\": 67759033\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"751CF572DAEAC96A9FBB505759C8478604824C9BE610F0D5AD6153DBBF5680B4\",\n          \"PreviousFields\": {\n            \"Balance\": \"199832417\",\n            \"OwnerCount\": 87\n          },\n          \"PreviousTxnID\": \"F0B1D136DE7521C65E25EDDEF2967D44AC513950F559636E5DA070270783DEA5\",\n          \"PreviousTxnLgrSeq\": 69046497\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"1\",\n            \"Owner\": \"rJ7kEdYrtovE89yxzJ14DgPYCR58odZYVi\",\n            \"RootIndex\": \"8347945E60697A8732B603AF820BE3A1FAC0EDA5DC36E0509C963480B9E3806D\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"759A575EF5DF8A17C0F49F0A980DF0C94CBB3EDE37F169296367629155113512\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"11\",\n            \"Owner\": \"rUrv5jwSUrmeGJa5Uj6DB3mBGojLFsRg7L\",\n            \"RootIndex\": \"7158D5C041A634E75B206384DB0ECB69970DBEC4A266AC2C694B821EB74C935C\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"75A40FA729DC38A2FA15D0BA8E312638329A78E4C2C243822F47BC1F0DB9C952\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rKHBZ7opA2ryRMocKk5wEW85wXpUNGNV4Z\",\n            \"Balance\": \"100726158\",\n            \"Flags\": 0,\n            \"OwnerCount\": 38,\n            \"Sequence\": 67431702\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"75A50BD9DA26A8DDF3AEE8C9E84D86A596E8E8893C76950FB8383C78FB867CEE\",\n          \"PreviousFields\": {\n            \"OwnerCount\": 39\n          },\n          \"PreviousTxnID\": \"BF4699C503483EDD9DD41B491B12F030B962FCA643ADABE431B739528FFD1BE7\",\n          \"PreviousTxnLgrSeq\": 69048699\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rwyhjUuEiNmgv4AG4ptie2eAWqN4kfraxv\",\n            \"Balance\": \"308091588\",\n            \"Flags\": 0,\n            \"OwnerCount\": 76,\n            \"Sequence\": 67423810\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"75A8A75CDDF13FF49C051D71634CED84661CD904A7A3B82EEF413C3899643E69\",\n          \"PreviousFields\": {\n            \"Balance\": \"248091588\",\n            \"OwnerCount\": 77\n          },\n          \"PreviousTxnID\": \"32A39C8D8049A5C4D37019698BBE8CD4B1CCE76834D2E08E6C883792BE1FBAFF\",\n          \"PreviousTxnLgrSeq\": 69051864\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"a16\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rfB3HqBHHTi5TCaXxjo9yMh4r2kfuC3pbz\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"75CFBC951171E18A7A88B5FA0BABBC2BB967040B59801C282EF4931200CD58D6\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"7785989866\"\n            }\n          },\n          \"PreviousTxnID\": \"4AB61DD85D413F344C743897C37B4AD274C47B17928F8D8A3DF39F010E2BD6C4\",\n          \"PreviousTxnLgrSeq\": 68056536\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rnB62vv6d8dQV13A3nHQQ7LEGy8DEWkLuG\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365210E6594DD97A8E\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"5\",\n            \"PreviousTxnID\": \"F9D43823B3DBA2F170CFED4129C427F733D21F961F8EDA574BD9D617FFFF32FE\",\n            \"PreviousTxnLgrSeq\": 69015693,\n            \"Sequence\": 67267235,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"7601AB28D26CAE9613BF7732F4E3BED6B4F71E9C54237009A723B3C5C0F79341\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"21022223000\"\n            },\n            \"TakerPays\": \"100000000\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rGRyfRcJ7cSYSu6rw5VpNJReEZt9Gzy9a7\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521BB60F0237F86A\",\n            \"BookNode\": \"0\",\n            \"Flags\": 0,\n            \"OwnerNode\": \"1\",\n            \"PreviousTxnID\": \"BF93F4B94907A61AD9EECC9FBEB5D4302701CE5FC5ABCD66A53A14E66AF52E76\",\n            \"PreviousTxnLgrSeq\": 68945021,\n            \"Sequence\": 67157705,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"7612C1D53057B2205AE8169E3C66B0F8E6845BA19E37C97D10901F63FA025692\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"4696497466.5\"\n            },\n            \"TakerPays\": \"36632680\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-8227743808.16774\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rJKHj2kBpPFHbEu4m2uuSuh5rQEcAYwJ8Z\",\n              \"value\": \"1000000000000000\"\n            },\n            \"HighNode\": \"1\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"6\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"7628D277681B33176825AF975ACC4B2F7EC9DE4FB947260E3FDF75C1A2821600\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-15227743808.16774\"\n            }\n          },\n          \"PreviousTxnID\": \"F025E6AEE40190DBE2EF37B72D79E510C669FAFE8D2282152D92ED790E7D26BC\",\n          \"PreviousTxnLgrSeq\": 69048358\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rpBHrwSGdQm3hE3f6988mSgV9LAzuBsx9A\",\n            \"Balance\": \"303340867\",\n            \"Flags\": 0,\n            \"OwnerCount\": 52,\n            \"Sequence\": 67835829\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"764F77A14312808A5816BE903E890A31B006FF1E75382CE289DB988FE7F9D304\",\n          \"PreviousFields\": {\n            \"Balance\": \"269316092\",\n            \"OwnerCount\": 54\n          },\n          \"PreviousTxnID\": \"8A066FFCD1C7253A584AF0465D4767F39333458035330276E18C0383032C50AE\",\n          \"PreviousTxnLgrSeq\": 69061301\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"0\",\n            \"IndexPrevious\": \"0\",\n            \"Owner\": \"rGcsBzn4XYzjM7nAXBUU163LfyStL1PZsA\",\n            \"RootIndex\": \"DF602990F43B7FB67389C7BFE7856720D77BF1C6F6B79E5C296ADD20B56E72C4\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"765556B8754B0C7791CC758AD9C8619BEA9A4DBEBCFA9BA9C87C277C6080A75A\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"r31dxSZgmArpDtwoLPAftYtU8bHauuxwA5\",\n            \"RootIndex\": \"7666D9CFD3C006C701B811909B864EA98D6DAC81451576E716405E44A98BF2BB\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"7666D9CFD3C006C701B811909B864EA98D6DAC81451576E716405E44A98BF2BB\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rKWwHEb7RPAjRUVyvtfHVUJ1WZjECFhjbE\",\n            \"Balance\": \"4991894065\",\n            \"EmailHash\": \"477423F6C713212926D91233DFB4CC7A\",\n            \"Flags\": 0,\n            \"OwnerCount\": 284,\n            \"Sequence\": 66665473\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"766E40F9AFAC5858914C400153A015084A20B45A857A0BAB815881783432619B\",\n          \"PreviousFields\": {\n            \"Balance\": \"3991894066\",\n            \"OwnerCount\": 285\n          },\n          \"PreviousTxnID\": \"415A476CF196EC0B8262FED8308C6A8E0671CFB0D5B4AC0C3F691611C75D608B\",\n          \"PreviousTxnLgrSeq\": 69063013\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rUrbD1rAAkr84UER2ZUxTP5ohhSKzvC8tc\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520DF6506DF6EBA9\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"11\",\n            \"PreviousTxnID\": \"9427EE6D1C51FDBE8E3AD044704C77AD91703D8E1FC8A5E069E4E095E1D5D2C2\",\n            \"PreviousTxnLgrSeq\": 69017065,\n            \"Sequence\": 65999123,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"76966322D4BBB7657E0F2C87F0B91C0ACE3EAD65A9F9F2B09FD881CE3AF023A7\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"2994999114539000e-4\"\n            },\n            \"TakerPays\": \"1177034652\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rEnJLGTTfay1rUmQqsB9PPMrhNo3sFkT5g\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"a0a\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"76AD5A21D6ACEFA23C05D781C9156731C94BCB3FF78F9CBC67E31F2AF8C0F618\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-7813851933.965517\"\n            }\n          },\n          \"PreviousTxnID\": \"0122A9BAAFC20EBA66EB9AF5E9E2368A6B9BF465E0589881CE7FD5F4FBB8D367\",\n          \"PreviousTxnLgrSeq\": 68651778\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"657\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rn9Yx4G5KM8ie2sm6Qaju7xPbvQPFiUu2f\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"76C9B4587C37D2C54D16354B002BB98588FF9B28104E83B7C7A1F1391AC04EEA\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"10000000000\"\n            }\n          },\n          \"PreviousTxnID\": \"F6CC9A5BE062A0E8A6258FD605804A964193B9A8BE13149AF207C3253BC68477\",\n          \"PreviousTxnLgrSeq\": 68898727\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"17\",\n            \"IndexPrevious\": \"15\",\n            \"Owner\": \"rphnh8aG8oBCdrBcgxYgNY8yVqi3b3XqbT\",\n            \"RootIndex\": \"F2BB8A5F4368D2D144DC15771F84601A2E2479FE8FE94437BFB57598407A5CC8\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"771A50227A76D0A8940D031C6BD9AA54B0C13AB03184D54952E2589D07FD0CB2\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"b\",\n            \"IndexPrevious\": \"9\",\n            \"Owner\": \"rEr5Zbwd9Lurx4VHEvWWZFQb3owfVABck7\",\n            \"RootIndex\": \"0CF2D53ABB32D420D9441E4A9BB61ABCF2E0D777F95842B333AEE141E38AA6AD\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"777E1D3C566222B190BE82113A0B309E0649937EE57B8B917D316671AE81AD07\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rGJ5He1dXx78w8pGB7zHH9K7dWd9pF8p39\",\n            \"Balance\": \"322464761\",\n            \"Flags\": 0,\n            \"OwnerCount\": 55,\n            \"Sequence\": 67090027\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"77854B19E45F3127FE88D2F9163BFC1C343238337B09C47F090C3326F81FFBD3\",\n          \"PreviousFields\": {\n            \"Balance\": \"124464762\",\n            \"OwnerCount\": 57\n          },\n          \"PreviousTxnID\": \"737A7F3655D7791A13A854BF11C7CC76E13743750BF44842ED8A24F938610ED0\",\n          \"PreviousTxnLgrSeq\": 69044008\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rnGd8yRrg47RWDTtRdVRDJvjXHtqgL5yNW\",\n            \"Balance\": \"499983679\",\n            \"Flags\": 0,\n            \"OwnerCount\": 82,\n            \"Sequence\": 67584542\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"778C058A704ADFA52FE2CD40810E780EF3A3FFCCBA35C1CECCAFA8EF32A77376\",\n          \"PreviousFields\": {\n            \"Balance\": \"244983679\",\n            \"OwnerCount\": 83\n          },\n          \"PreviousTxnID\": \"9FDD780531927E1D433FE4FFC7FF85084AB4A3D7DDB0B58AD644F667121E6094\",\n          \"PreviousTxnLgrSeq\": 69052459\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rUNU8n4sX1Wo1ksPNPQheA5s6nZCe88iPW\",\n            \"Balance\": \"249468612\",\n            \"Flags\": 0,\n            \"OwnerCount\": 84,\n            \"Sequence\": 67719901\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"77C0B3EC9C116F3EB7B1705259752B9225C73F53870DAB0781E830536E58D765\",\n          \"PreviousFields\": {\n            \"Balance\": \"230782237\",\n            \"OwnerCount\": 85\n          },\n          \"PreviousTxnID\": \"D6D8F4A51E2D68D9D0798C79A454E8B2A8154D25380C1F37CC42B3540C99BD0B\",\n          \"PreviousTxnLgrSeq\": 69057041\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rNYRNtrFPumPwsB7zbi3VjZLg6WLWBUJvy\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520A200F55008CDB\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"2\",\n            \"PreviousTxnID\": \"BA9D4C6B1A425B3142A30240A63F02DADA1B2B8F11F574EB3016F8687431D7EF\",\n            \"PreviousTxnLgrSeq\": 69032311,\n            \"Sequence\": 67349213,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"77F2B6D66150E5F18FC171EB3E4A1557713E934F8EFADCDDF1F4238410A52B74\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"88997878564\"\n            },\n            \"TakerPays\": \"253643953\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rHAYfZTYakQQ5NJCP8BD21nrQeQmDyst5a\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36532386F26CC60F80\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"6\",\n            \"PreviousTxnID\": \"EAE0A7FDB30C2E48C449C4ACD7899A03DC753685289FC97AF2BA4F40982DD218\",\n            \"PreviousTxnLgrSeq\": 68900339,\n            \"Sequence\": 66939972,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"782D6FA1B1835A15F04C6A341AC8759A487DB4CE4A96FDF894D57F36E0A835F9\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"2000000000\"\n            },\n            \"TakerPays\": \"199999999\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"102\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rUrv5jwSUrmeGJa5Uj6DB3mBGojLFsRg7L\",\n              \"value\": \"1000000000000000\"\n            },\n            \"LowNode\": \"2\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"783874E55D556B30B0C49A286EDC6DF1542CADAFE2616781E13673E8E1079CCF\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"1919157614683850e-3\"\n            }\n          },\n          \"PreviousTxnID\": \"5DD6E87D20912C7ED949A85BDF26D5FDF13EAD57064BC337B7BCD663A8353858\",\n          \"PreviousTxnLgrSeq\": 68997590\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rKBxw9iprFx2LgVfPdthKb6oWUYBLVm4Jw\",\n            \"Balance\": \"256964674\",\n            \"Flags\": 0,\n            \"OwnerCount\": 114,\n            \"Sequence\": 63654658\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"785807E7C59A18FEE80687641ECE40CC580A51A4520E32AD9E18D1EBA07444C0\",\n          \"PreviousFields\": {\n            \"OwnerCount\": 115\n          },\n          \"PreviousTxnID\": \"2F5320822DAA0EEB163FFAEF8288EFCCFAC4E48BA6180074403DBD0E5E25612A\",\n          \"PreviousTxnLgrSeq\": 69032240\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r3oDrfWCL4zZRGoUNRd8Ywu9PJWFZXc764\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652082CBF4F083980\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"4\",\n            \"PreviousTxnID\": \"F59FF0C91F2B2880FE785BF365D7E90E5183302B92E74A7753DF09EEA6069786\",\n            \"PreviousTxnLgrSeq\": 69054939,\n            \"Sequence\": 67440525,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"787192DD6FFD8F911FC344941124428331367C7B27A91AD36A05DB215C34D9B6\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"TakerPays\": \"230099999\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"10\",\n            \"IndexPrevious\": \"e\",\n            \"Owner\": \"rpq6ooRTok73Udp4D58zesfDJeYM1t5s8C\",\n            \"RootIndex\": \"F6C1A9A92D2C7D9C2BD5ABE956113762015D91AABDC214A09E7CD9FD9E0E6AB6\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"788453A22BCCCA8BE9D2A7C7157DA4C2A21633EA79965732C489B399CB22C485\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"aea\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rnEA5VmDp13iDZdcGUg2X2nzYkaKKDrf86\",\n              \"value\": \"9999999999999990e-1\"\n            },\n            \"LowNode\": \"2\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"78A98DB0B65F6BD633ED7064F9960235A62FC187666704D1551FD293BA0B2D30\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"67893772307.69231\"\n            }\n          },\n          \"PreviousTxnID\": \"BE193169BEA1B9BBDD7F7085C706ADB3744C821C219F146D0AC588457B9417DA\",\n          \"PreviousTxnLgrSeq\": 69021401\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"812\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rDsyrKqgbAuWUu1fmJx84Vgm3X4H53rztM\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"78AF1B7A89B3A3656078063366E5688C559409C1F06121FB80140D98180E7989\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"23357969598\"\n            }\n          },\n          \"PreviousTxnID\": \"C2F23DAEBAEFFA5AABC0C8CAF2BD281966760C7AA834ECBA569114ABFA61E42A\",\n          \"PreviousTxnLgrSeq\": 68722542\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"raentKRvbeEBLCQQUC5vbc8FH6zFuzaNEJ\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365219EF4FB2B186E3\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"DAF4886479CD0EEE98F672614A751A326E4DC8F47DA52A1CBC0D27E9E59A320C\",\n            \"PreviousTxnLgrSeq\": 68899331,\n            \"Sequence\": 67761103,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"78B04B7DE40644E054EC85595C290F21A320E039AEDCFEE4D0B8B8996F1FE868\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7785989866\"\n            },\n            \"TakerPays\": \"56837726\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-9537368080951350e-4\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rJCvziKjUwgoNgwNNcy2SwqVMwPFxqBjvn\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"e13\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"78E3399E66ABC371AD2AE251ED7C1D549209D32D9FA683FD82EBB4E3ABC7EB35\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-1053736808095135e-3\"\n            }\n          },\n          \"PreviousTxnID\": \"0027456DECEAFE17BCC3A5D112CBDBC038D33C4A2F008F17919D308A3896405E\",\n          \"PreviousTxnLgrSeq\": 68896658\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rwVWFLRidfTH7DD1LgcTg4gunGXVos3zVD\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652232BFF5950DF00\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"1\",\n            \"PreviousTxnID\": \"CAB8C787FABD6B410529C350DB4A5C6E783495739B9F367C6B73902CAFA6E118\",\n            \"PreviousTxnLgrSeq\": 68152463,\n            \"Sequence\": 67374396,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"10000000000\"\n            },\n            \"TakerPays\": \"98999999\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"7932385822531804DD5F2E42F8BCFEBCB9F9BBA40A5477FA8AB49D4E8A569067\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"6\",\n            \"Owner\": \"rKso7KmktCCYBfe79sNAFnfKffvansBBRz\",\n            \"RootIndex\": \"16079EB94DDBB6FE7530302438BA31C473A6838AC7E1AE6CCEF6D1F2F1E20535\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"795B5A991DA670B08110E6E5E39D7F01493FFA216269BA47C7DED4E46D4C74A9\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rs9woHiJb73K8uqmCAUx7hRfW2a2WR5cwi\",\n            \"Balance\": \"51181468\",\n            \"Flags\": 0,\n            \"OwnerCount\": 14,\n            \"Sequence\": 67697702\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"7983DE528B09B80E4970EEC0F7BC18E6E23EF2AC3A3AB7B819F08668032DFA31\",\n          \"PreviousFields\": {\n            \"OwnerCount\": 15\n          },\n          \"PreviousTxnID\": \"5AA9C99C9543F7F578A26896936B7142E84EBF343CF3ACECACB02DAFA8DBBB6F\",\n          \"PreviousTxnLgrSeq\": 69061753\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"4\",\n            \"Owner\": \"rPKNCAkooJFM3LJ17zG3wJyxrjnNuHkkYh\",\n            \"RootIndex\": \"B6A91DEF09FBF8A924167A6E2F93134904B4D16A38925AB9261AA4FFA6326A62\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"79C91AA1E14953A34F6713B4A8347F507AB4493AE8ECDB2427C8D7C1726597C7\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rhhokxTQGXV3zHGWJqy1SiJ19yYTSFeGHU\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652138A388A43C000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"1\",\n            \"PreviousTxnID\": \"00735EB4D7A8D877833091398A4482B298CF53DE2E763ABFDB427124BE94174A\",\n            \"PreviousTxnLgrSeq\": 68935436,\n            \"Sequence\": 67971467,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"79E4BDE324A1E592F413002A2D96628EF0AA85B32556B44CC8A8478C00A4BE13\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"31000000000\"\n            },\n            \"TakerPays\": \"170500000\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rhdw3T1ko64kaipD1T8uJmSkV3mUtRWqiY\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521BACF6B65EDA6D\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"B5C0B40831AB5AD3C20F77C970B2631776F2B5795DB4799059D26D9DEED98CD5\",\n            \"PreviousTxnLgrSeq\": 68898367,\n            \"Sequence\": 67761533,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"79E8C7BEAC8187802BE3EBE6325B3E51ED5458B44360F68E19A7ECC686EA93CA\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7785989866\"\n            },\n            \"TakerPays\": \"60652861\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rh4Vn8BNfpDZecwkh39GQvYJ7b7osZfML2\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521FF973BAB167B5\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"1\",\n            \"PreviousTxnID\": \"9C76EBA6F7669A420CCB7EED18AF92BCF3BC5D40A4CA8D463DA17F136DC15463\",\n            \"PreviousTxnLgrSeq\": 68030654,\n            \"Sequence\": 55497883,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"3503695439.7\"\n            },\n            \"TakerPays\": \"31533258\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"79ED33233BB472B288020E3B46F7E90BEDF5E4B2C7C09F64301E746B0E69398E\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rJQTrHKExfeCjschk5MGwPZuditZ8vdWnD\",\n            \"Balance\": \"1067129868\",\n            \"Flags\": 0,\n            \"OwnerCount\": 126,\n            \"Sequence\": 65794778\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"7A04E58647BBAEE34D9D8E93B165F200C0135A4801DC7EFF9A13DF23296C0B2C\",\n          \"PreviousFields\": {\n            \"Balance\": \"949293848\",\n            \"OwnerCount\": 127\n          },\n          \"PreviousTxnID\": \"4BDFAB54A720546BEA410BC6307B54B228120922BE57C0E130E68156C13F5AA3\",\n          \"PreviousTxnLgrSeq\": 69057309\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rNwUjKvVAQ9nhmVW9gF5Hn5414X637aY4U\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521BACF6B65EDA6D\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"3C4E13A2A268B8586BBB7B94B0D368BA1F68B97D80099F8F1780C6D2D757F021\",\n            \"PreviousTxnLgrSeq\": 68898480,\n            \"Sequence\": 67761546,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"7A1F574F498D63D2D6AFF4517BD89053EB4FC17D523F5FDCF92B8400E1C26273\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7785989866\"\n            },\n            \"TakerPays\": \"60652861\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rLxd1PUJT8xrZ59tUuPANfL87xkBXnkeKi\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"a34\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"7A56906489BC0209B86EDD364FB14CCB6831A69844ED690775C415E80CD4B2E7\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-2000000000\"\n            }\n          },\n          \"PreviousTxnID\": \"78CE36F7364C65340D3E19565BE48E67C832B95CEEF98DEFC0D456302E078BB6\",\n          \"PreviousTxnLgrSeq\": 68901632\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"7\",\n            \"IndexPrevious\": \"5\",\n            \"Owner\": \"rNdfpBhUB1ygnu4z7ebbqLBQH5K8zejbu6\",\n            \"RootIndex\": \"9EB7953F11C36BF90CDE8F39E7CAE7BD3A72A8B205F5373E8D6910EDDCDD5B45\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"7A77A42B2465D5445FE9A4CA334A2E0B8846AC91ABE8CDAFDDBEAF49E1F44633\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rMGX6LAGxRUHd4g3yW1ukFhThgiCxMioX3\",\n              \"value\": \"9999688558266535e-1\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"ead\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"7A958B9F93228247CC9E258B52137D88FF159AC0C8D07BF2847B0AA2A4AAADAA\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-34911374032.31382\"\n            }\n          },\n          \"PreviousTxnID\": \"CB354DAED6E268FAE9259928E0B5665F0DF0607FFC11E1DB86D167A1E3E02FAE\",\n          \"PreviousTxnLgrSeq\": 69050997\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"73c\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rsydLXavwRHUq9TWdwYqPpYViuFBNuYQYs\",\n              \"value\": \"9999999999999999e-1\"\n            },\n            \"LowNode\": \"6\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"7A990387B33C77B112E1BBC77FD424328E7AE55AA70212E31439A190521DAEA1\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"7785989866\"\n            }\n          },\n          \"PreviousTxnID\": \"9D81F64D573F6E381DB1CC6536CE1AFB0951E86BBEA12D7C73A3AA573281FD9B\",\n          \"PreviousTxnLgrSeq\": 67996814\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rEX4EMcBRESCnk2kKB1Yhzc5KSCib7Qh1W\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653071AFD49724577\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"d\",\n            \"PreviousTxnID\": \"5CDE33FAB2025DBD47939D993851ED4E64B04734DA2F4C8672C5148F0414E8F4\",\n            \"PreviousTxnLgrSeq\": 68854810,\n            \"Sequence\": 66347319,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"32000000028.02702\"\n            },\n            \"TakerPays\": \"640000000\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"7AA08CD01EEB6AD1C3CA097FA5982D07C2A5A1520FDCC5D71019CBE4BBA34E89\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rfFFmdT4f2Qj6gSS7daVrQDpJw4tF62Ke2\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365307E514419EB000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"68B7E52EDE61BDD0888E76E806FCD8432BBA48A1A79790D2BA7EC73D29B57185\",\n            \"PreviousTxnLgrSeq\": 69008532,\n            \"Sequence\": 67946809,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"7AB7B5292B4DD71477BE24A0D29FF04F689C769BB45873534B23DCE6F703D393\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"15000000000\"\n            },\n            \"TakerPays\": \"333330000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rn9Yx4G5KM8ie2sm6Qaju7xPbvQPFiUu2f\",\n            \"Balance\": \"318130072\",\n            \"Flags\": 0,\n            \"OwnerCount\": 92,\n            \"Sequence\": 67611663\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"7AC649661C0AE3CBD80F770C99D8DA0CB3EF26EF991E40F3102777F894FC6611\",\n          \"PreviousFields\": {\n            \"Balance\": \"250130072\",\n            \"OwnerCount\": 93\n          },\n          \"PreviousTxnID\": \"2F2DDC0246C28EFE51CFFE0DE408F3EB2831DBC6AF91A8352EF4522AE28FA43B\",\n          \"PreviousTxnLgrSeq\": 69059960\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rEXcziBZ9tEnmNVrcdbQATJPr8JRHuRrZV\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652132AB951C972F9\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"2\",\n            \"PreviousTxnID\": \"D4A1F942A5140D2AC861065183AD3596A61B18B2D27A05985AF57C29A6BAAF82\",\n            \"PreviousTxnLgrSeq\": 68929476,\n            \"Sequence\": 67346294,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"7ACA943D5C449D3663DAD99F88079CAAFAD040C1FC60E4BE17FFC7260C4C5974\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"50006701881.61506\"\n            },\n            \"TakerPays\": \"269786156\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"6228791892.8\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"743\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rUNU8n4sX1Wo1ksPNPQheA5s6nZCe88iPW\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"7B46C36AE3B09BC9A21C0C69A912BFFE924A34F1CEE000F39D016C19C5D0DD8E\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"7785989866\"\n            }\n          },\n          \"PreviousTxnID\": \"D66E446D2BC157BA05283C14CEE44095864ACCCF7D60072D2698292FF94D99E9\",\n          \"PreviousTxnLgrSeq\": 67996891\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rNvk1SNQZhU6fsyMuaTeLucyw5x5uxfxQy\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520F195A3C4BA000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"2\",\n            \"PreviousTxnID\": \"D3D446E8178C5AFDDDD7AE21775D0E6AFC922F195A6F22C2FB244B3AF6501615\",\n            \"PreviousTxnLgrSeq\": 68997192,\n            \"Sequence\": 67175602,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"7B4D4DE74D566D7E8B7AE1998485B7F47B19D10845A20FF78BBB0B021BFBF776\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"20000000000\"\n            },\n            \"TakerPays\": \"85000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rGpBZrDTpimasSJEWV5hxH75LsivV5Hz4v\",\n            \"Balance\": \"3434702462\",\n            \"Flags\": 0,\n            \"OwnerCount\": 120,\n            \"Sequence\": 67162978\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"7B66F60C05D431F17461943665B89289E30DD0FEDEA13C5CBC3C71A493EF48E3\",\n          \"PreviousFields\": {\n            \"Balance\": \"290427489\",\n            \"OwnerCount\": 121\n          },\n          \"PreviousTxnID\": \"2AC93156DD0F70A6A68FEF6846F14F71693757D14AFCF1672036C33A03B5AF83\",\n          \"PreviousTxnLgrSeq\": 69062573\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rMrFWesXLbeMANpexJkZdYYtCwhqot4x6B\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"HighNode\": \"2\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"4f9\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"7B683DA9ACC91D0688D4CD54623FD084F3D03BA06615899FFC6B7475B91B2D28\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-15571979732\"\n            }\n          },\n          \"PreviousTxnID\": \"2B231DDAACC71E9DD8E8EF3FF50AAB2C96EDF14AFAE9C33E44E24CB9ADA48AE2\",\n          \"PreviousTxnLgrSeq\": 67978331\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rHjXAcTNUKjFvrozV8KizwezuEk9tnhqwF\",\n            \"Balance\": \"8488878489\",\n            \"Flags\": 0,\n            \"OwnerCount\": 29,\n            \"Sequence\": 67016855\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"7BB0FF0CC3F0275CF7BD11D5EEDF9645543DE4AC8874BA26A35CD1BE8024409F\",\n          \"PreviousFields\": {\n            \"Balance\": \"80009434\",\n            \"OwnerCount\": 30\n          },\n          \"PreviousTxnID\": \"DAD0204DA133A7E8720D43991E07D32B83300BFDF703307EDCAB2C196CCFCBF7\",\n          \"PreviousTxnLgrSeq\": 69046304\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"1\",\n            \"Owner\": \"r4izcArVy7Ccp9j1VEwnbso67AsYhaEjdJ\",\n            \"RootIndex\": \"AA82B46213CA15B706EAD293B0FAD436615E74187D0D68F2C6F15D10DD0DB148\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"7BB30BA7BC9516FF00EB096190587D66F95C57CE830A820298332AB46F770645\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"2\",\n            \"Owner\": \"rLHtFMi1ohYj9RynpB1wRfEAaLtjXkdRH9\",\n            \"RootIndex\": \"6D33CFBB7310E0D2037FA2FA806D026ADC75C59B8E7ED1E2C08EAC26908C2ADD\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"7C14A35CC4324D87FCC0D2960BBDE2C48946E00632445197733E362DFE5D74D5\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"1000039373124402e-4\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"e35\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rUsSyZqiqCSZoqNqjd6PqcEQ3BBaXyS7wF\",\n              \"value\": \"9999999999999990e-1\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"7C4D7A3E9D9D19318514774C238D7CEE84CE3BB7F110B84BAFA05EC5D76B824B\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"2261386282538256e-4\"\n            }\n          },\n          \"PreviousTxnID\": \"9F737FD5CDB18A91EE93FEBF05F11FF1F9480D821BE86C141F37C862DC375E86\",\n          \"PreviousTxnLgrSeq\": 69032307\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rEX4EMcBRESCnk2kKB1Yhzc5KSCib7Qh1W\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"HighNode\": \"9\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"771\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"7C5BFB3EC1F8FACB7FDA3FDDDDC3B5DD947F41D687625428F32BD7ABD450BCC5\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-9620125742.31273\"\n            }\n          },\n          \"PreviousTxnID\": \"ADBCEF93D68B05B5EB99A7C29EDDD27784943F2B14AC63E3382649662727D498\",\n          \"PreviousTxnLgrSeq\": 68994702\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"8\",\n            \"IndexPrevious\": \"6\",\n            \"Owner\": \"rw2K4HQDujtogHECEi9ubWzeVVHr2bBN16\",\n            \"RootIndex\": \"757018D77A04F7302FEEE0EAFB04D594BB60FF68FE0F8E54F22B14F6B7EC8D3D\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"7C63A9095A1355F8D181E7EE85314BC9D01BF70EF85B526DF8DEB37D2819EA3B\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"2\",\n            \"Owner\": \"r9vQtUmSgHmDFpc6K7BKLj5JvGBEbvwP9Q\",\n            \"RootIndex\": \"CDA8F570986694DFE278D8997A252089A5415C798C141695C00C72BA00BCCC6E\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"7C6A27186787D89FA95FFCA1B5736A0CFCD7A311F031D515A850A3755002E5E1\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"c\",\n            \"IndexPrevious\": \"a\",\n            \"Owner\": \"rng5s7vNgzx4BPJzacK2YWUqR5u1aygzWw\",\n            \"RootIndex\": \"505B13F06252F6E2CB16363706654A775E84B41B5B66D1C212AFFAD829BB573D\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"7C7F8C10BBE35E63306AA495059D623F5B52623050E9EFCC481278DD0634DC78\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rNvk1SNQZhU6fsyMuaTeLucyw5x5uxfxQy\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521385AC630A7000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"2\",\n            \"PreviousTxnID\": \"4594C1D77CD4671DF1FC0812C44F34FD03BD773CEE43ACACC7D300C2FBA804F0\",\n            \"PreviousTxnLgrSeq\": 68920014,\n            \"Sequence\": 67175542,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"7C9626090ED078B581E8D9AA3051C4B2C24F03066EA70C353EE2AA4E988A3A71\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"2000000000\"\n            },\n            \"TakerPays\": \"10990000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r9TcqWtCqzG7xnhLcYPUbKsV691wNPzMMw\",\n            \"Balance\": \"1254006737\",\n            \"Flags\": 0,\n            \"OwnerCount\": 257,\n            \"Sequence\": 67460885\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"7CA1379D839C95CA45AE6DBF8F0908B21AE1A39D7A84B9A9DDABF23714008A51\",\n          \"PreviousFields\": {\n            \"Balance\": \"855006737\",\n            \"OwnerCount\": 259\n          },\n          \"PreviousTxnID\": \"8875C660A1DCAA5002AAE8FBBB319F461AD4502067D5CA03320A4C4A2D6BD32C\",\n          \"PreviousTxnLgrSeq\": 69059911\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rGQaGNPT8u7Wt1RoqJEhBgAPyc9ek5RfCL\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"9da\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"7CAD8F7249A03D3F22F4893551847F82979428D6153A09B1D1922E517599A750\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-30000000000\"\n            }\n          },\n          \"PreviousTxnID\": \"34EEC2B5C7963F9EFA5DBA466DF7CF40A6F9C8601DCD9673ADBE2E91B30AD40D\",\n          \"PreviousTxnLgrSeq\": 69034828\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rfB3HqBHHTi5TCaXxjo9yMh4r2kfuC3pbz\",\n            \"Balance\": \"195576992\",\n            \"Flags\": 0,\n            \"OwnerCount\": 38,\n            \"Sequence\": 67353737\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"7CB32092794AD7D5592550B4A1C310B304052EC4C18AE3EAADA210F6C23CD1E3\",\n          \"PreviousFields\": {\n            \"Balance\": \"94359124\",\n            \"OwnerCount\": 39\n          },\n          \"PreviousTxnID\": \"C2A487AEC0FD28A28EC69A709051ED5F1A224697564534EE9EFFCD8F1006EB20\",\n          \"PreviousTxnLgrSeq\": 69054837\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rNqG1shTsAyEcTFcAeBxGsLpmaNAGbcESv\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652237DDA206E2CC9\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"7\",\n            \"PreviousTxnID\": \"590855290BFE6680695DD6107B7ED83D556C7B89A321178DCAE5BEF21C9CB129\",\n            \"PreviousTxnLgrSeq\": 67965711,\n            \"Sequence\": 65794870,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"7CD98F82BC64599B88E992E447FC54581104E7AB650A716D79391687617F2E65\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"35572979732\"\n            },\n            \"TakerPays\": \"355374067\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rng5s7vNgzx4BPJzacK2YWUqR5u1aygzWw\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652232BFF5F398DDF\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"b\",\n            \"PreviousTxnID\": \"C721EEC9FD9D0BD58F8250DFAA1D90566E210EDAF07774F3D947D12A195C5A42\",\n            \"PreviousTxnLgrSeq\": 67957214,\n            \"Sequence\": 66389327,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"46715939196\"\n            },\n            \"TakerPays\": \"462487798\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"7CE0EC88CC0A56B877AEAC0F1FFBAD241168A1B7FA1486BCFD65CDCD9709318B\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r9ny1UWruE383T7YTyQgiH4re75gzGpKqa\",\n            \"Balance\": \"1848835550\",\n            \"Flags\": 0,\n            \"OwnerCount\": 128,\n            \"Sequence\": 66266574\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"7D1D8FA99B496B2B483C3EDA24F24284F864ACFA5E29C560CBE25A3F26C926BF\",\n          \"PreviousFields\": {\n            \"Balance\": \"1799708971\",\n            \"OwnerCount\": 129\n          },\n          \"PreviousTxnID\": \"9B070D2AD40EC365BBD09FEF950A3F03437DD908B8BDC13C967018056BF18EA8\",\n          \"PreviousTxnLgrSeq\": 69063666\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"127\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rwFqpfxexbDa1fUuG87ceDdbe1JnugjWUV\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"7D439994609798B6ECCFA934DF08FF9402E182B3089480A65B43DF18D30B3C6D\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"7785989866\"\n            }\n          },\n          \"PreviousTxnID\": \"A277B76710F2B0FBEE56A4F25E76154317487B09E70512F8812C472C3036C42D\",\n          \"PreviousTxnLgrSeq\": 67949212\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rf7hbrdWs2saBvmLubvuzHJuDhDwJf2Fuf\",\n            \"Balance\": \"1289408093\",\n            \"Flags\": 0,\n            \"OwnerCount\": 54,\n            \"Sequence\": 67205587\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"7D6F31C765F369B9B96F3120951DC77C7F99FB2F5F8EAC2A351A0C1C49D6F6C8\",\n          \"PreviousFields\": {\n            \"Balance\": \"121509613\",\n            \"OwnerCount\": 55\n          },\n          \"PreviousTxnID\": \"64A9122B715030FC427A0A7A4FEDE976A1F0799D4D9812B85182BE1112CF6355\",\n          \"PreviousTxnLgrSeq\": 69043417\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rwLffu7VZ4rMMa5thTQppfL9g4FMB1sNys\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365212795F58D50000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"80CD6EC1E9D4EB842148311C17936A5736CEC03B227AF02F840039E01E293CB9\",\n            \"PreviousTxnLgrSeq\": 68945547,\n            \"Sequence\": 67708645,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"7DB3B665270D15BA51A67A4BECDAC195804958CE1AE9CA4B2CF5641ED4DBAF88\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"88739555961.5384\"\n            },\n            \"TakerPays\": \"461445691\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rKHBZ7opA2ryRMocKk5wEW85wXpUNGNV4Z\",\n            \"RootIndex\": \"86DF7C6A79719A6A410BB255EE019BAC195118ACAF1DD7E435A4F2527BC84590\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"7DC17439405299B422EBDBC8673C53575E96600BA24BDBAF821760E11D3E8380\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rDrVDF6etbhSYtnBoqxbRd4CyGHQ5YNR4z\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520AA87BEE538000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"5\",\n            \"PreviousTxnID\": \"85E0103CCB26C8E7C61023E21572C85A9E8AEA176750DD9EC6C29F0904F276FC\",\n            \"PreviousTxnLgrSeq\": 69042278,\n            \"Sequence\": 67610497,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"7DD9D50FE157E29A9C5CB8ED6DB2190F7824767A904A218C33A7C3C18DC44237\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"25000000000\"\n            },\n            \"TakerPays\": \"75000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"d69\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"r5EHmNdKr1SRiA1DrtKBo18DYRrE5ncHF\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"7DF873D150D2B5B4ECB09207CDBBA3F2F96244A0F159A831DC6AA72027BF42DD\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"80431878392\"\n            }\n          },\n          \"PreviousTxnID\": \"90A65424FAADE0A2AFFB6AA617486FD4804CD0979DE80CD1267CB313461560B2\",\n          \"PreviousTxnLgrSeq\": 68003120\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rp8YVv74whPGdy9huBZHuPy5D3CRKgFFsj\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521AA535D3D0C000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"8FFFBCEF36E7189B5C78D7C6A35612743A878EA78B2F3C8FC1F6E646D8360365\",\n            \"PreviousTxnLgrSeq\": 68912672,\n            \"Sequence\": 68428927,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"7E19C1D571DAD309D5A480BFFBD7643AE41F2CBBBE53152156DDCB197753296F\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"35000000000\"\n            },\n            \"TakerPays\": \"262500000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"97c\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rhdw3T1ko64kaipD1T8uJmSkV3mUtRWqiY\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"7E44B7A9C1A173147A47E79A298AEB4090C6A3FCDD542C8A0ADEA148DFB3C360\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"7785989866\"\n            }\n          },\n          \"PreviousTxnID\": \"2FD9A5A7126F8376ACC800347D96EC12CE0555D205B295FD97A4D1F4952C87CD\",\n          \"PreviousTxnLgrSeq\": 67991835\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rEcDGbmwatAptdvR3tfMRJqfm6taVzHAYP\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36530AA87BEE0967B6\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"96F244B6803BA3C8C22AE73D0D26C0031512C5D1235EC378F7918CF810BFCA5C\",\n            \"PreviousTxnLgrSeq\": 68216510,\n            \"Sequence\": 66780299,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"19357969598\"\n            },\n            \"TakerPays\": \"580739087\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"7E4E5EE322023E9506C8002FBFFC704162F3DC338E4BB68D03D219E0B3266903\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rHkAKrt7sjtM7vfLuUmVeJ98jp42mstkTU\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365218DE7680F3FE73\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"06A29CD004246F8EEDF1025BDCC2E985BF19B42DEDB68DADF6097B0755D684AB\",\n            \"PreviousTxnLgrSeq\": 68929600,\n            \"Sequence\": 67553391,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"7E4F024443F1DF0D9CB8CE87356B3A0BC08523421025B576AB68E15B379B0DDB\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7785989866\"\n            },\n            \"TakerPays\": \"54501929\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rwJECKX27rvudR1C4R2QCUZwatR9zkC4u5\",\n            \"Balance\": \"223282259\",\n            \"Flags\": 0,\n            \"OwnerCount\": 6,\n            \"Sequence\": 67403550\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"7E8184DA79C9C039951B43EA1487614F91860DBF649CD517D3A87326168CEAE7\",\n          \"PreviousFields\": {\n            \"Balance\": \"41095929\",\n            \"OwnerCount\": 7\n          },\n          \"PreviousTxnID\": \"A0D5D4CEA466D342E8079DA176CDDE29C34489AF0517C96A7B253A1275E2EFFA\",\n          \"PreviousTxnLgrSeq\": 68995535\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rGcsBzn4XYzjM7nAXBUU163LfyStL1PZsA\",\n            \"Balance\": \"143317830\",\n            \"Flags\": 0,\n            \"OwnerCount\": 18,\n            \"Sequence\": 67544557\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"7E8B6CD964678C3F4A97FD68EDF65B8985C04090E4E3CE09A9C899BC0686B492\",\n          \"PreviousFields\": {\n            \"Balance\": \"51999910\",\n            \"OwnerCount\": 20\n          },\n          \"PreviousTxnID\": \"83AE629DCEAC1D31D70F84A446557F73B16AC91722D58B356BC41B1515FFC8CF\",\n          \"PreviousTxnLgrSeq\": 69056297\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rUMbRuiufkSUvwXG6HBXYHTW9TpioNBKjo\",\n            \"Balance\": \"897137153\",\n            \"Flags\": 0,\n            \"OwnerCount\": 123,\n            \"Sequence\": 67543023\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"7EFC42EDA28E88CFF0E4E019EFC04F8D3447EE486FBC09E28E62FA5CC0BA4470\",\n          \"PreviousFields\": {\n            \"Balance\": \"344331873\",\n            \"OwnerCount\": 124\n          },\n          \"PreviousTxnID\": \"A53182EE247BEB68152FFDFE278E99C59E10920F29BF35503D25387AF3B73052\",\n          \"PreviousTxnLgrSeq\": 69064104\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"1\",\n            \"IndexPrevious\": \"1\",\n            \"Owner\": \"rG9EpCkxGBXowufUGyrVF8tT7ovkHBdMb4\",\n            \"RootIndex\": \"7F26F6481D7ED7FF15D4E0C01A8DF34D9CC9C9483AE7DD1BC60B6096E2EF79B5\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"7F26F6481D7ED7FF15D4E0C01A8DF34D9CC9C9483AE7DD1BC60B6096E2EF79B5\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"14\",\n            \"IndexPrevious\": \"12\",\n            \"Owner\": \"rUATLa1awouAR8jS1DwtsXuy8EXCjdktgU\",\n            \"RootIndex\": \"3F5FF4445C04C9BB107724C4C5AFA2F49088FF2A0E8023C45CA4C1C5D99DF9D1\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"7F34926CEEB4485D3B128095D340085E38583A023A2BCC0EBD76A50951927812\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rfJYknVqAa2EmEKkKsR2CjJVBKedFU9DNZ\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653071AFD494E4985\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"7\",\n            \"PreviousTxnID\": \"26405877333708CA625E51E689F96934A113ACFD5103AC13B67C5889DF810EFF\",\n            \"PreviousTxnLgrSeq\": 68863238,\n            \"Sequence\": 65822918,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"7F362D1523DDEE7308CA78F10958A72B8C46A58FC3B5FFD27AE5C31EBC8FA01A\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"23357969598\"\n            },\n            \"TakerPays\": \"467159391\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"r3yLxRMK4K5z8UzzYC9tQASyFZ7p6EQDwz\",\n            \"RootIndex\": \"7F4122E7EFD9DE68953AA21B58BB1B9C777E0EF91FD13251FD22DA1513CD32B1\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"7F4122E7EFD9DE68953AA21B58BB1B9C777E0EF91FD13251FD22DA1513CD32B1\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"ragafgjLrLnN1rYkR4FpKXjmiTqDQqDio3\",\n            \"Balance\": \"1086030668\",\n            \"Flags\": 0,\n            \"OwnerCount\": 26,\n            \"Sequence\": 67291868\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"7F4623A177DCBAF070EF54E07254F506B8960FC502C8DF30971D03084FE020F5\",\n          \"PreviousFields\": {\n            \"Balance\": \"321639926\",\n            \"OwnerCount\": 27\n          },\n          \"PreviousTxnID\": \"C406A605ABE6694B9F1F882BDCCD9D7420BBAB7F35B9B0AF545E29FE7EA8F351\",\n          \"PreviousTxnLgrSeq\": 69055957\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rNwUjKvVAQ9nhmVW9gF5Hn5414X637aY4U\",\n            \"Balance\": \"120734026\",\n            \"Flags\": 0,\n            \"OwnerCount\": 24,\n            \"Sequence\": 67761568\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"7F6A1E507E759C5CDF3E30223703698279832635D429855B952AED141715680B\",\n          \"PreviousFields\": {\n            \"Balance\": \"60081165\",\n            \"OwnerCount\": 25\n          },\n          \"PreviousTxnID\": \"19D8692061DBBC8CB91464E9FD11F35C2E706096BE807DCE59AAE763CBCD451D\",\n          \"PreviousTxnLgrSeq\": 69043974\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rMBUa2qAaU6K8DRTyQsfmeRUtu6j7m8ovB\",\n            \"RootIndex\": \"7F7428ED50097606393BDD06F33774D550D2BEF20DDA71EEE15302F8911B4C1D\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"7F7428ED50097606393BDD06F33774D550D2BEF20DDA71EEE15302F8911B4C1D\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rGgtpbT9ffSEHApdNkRC4Mu9tsYPRMKx6D\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36532386F26E010D29\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"8\",\n            \"PreviousTxnID\": \"5952EF0FE41A55DD416380613536CA4BADF7D9B48F52D2548BC46293FF2B1DB8\",\n            \"PreviousTxnLgrSeq\": 68892689,\n            \"Sequence\": 66749100,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"7F82F32469E119FCDB42458B82E16085C71FCEF7D6738F13D0E5E2DED8D8588E\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"2725096458\"\n            },\n            \"TakerPays\": \"272509645\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rKso7KmktCCYBfe79sNAFnfKffvansBBRz\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365314401EAB384000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"7\",\n            \"PreviousTxnID\": \"BAFCD4A98A40E354CB29AA35D50583F8A6B151C63622FFCC05D8E486AE525F4A\",\n            \"PreviousTxnLgrSeq\": 68908246,\n            \"Sequence\": 67328571,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7000000000\"\n            },\n            \"TakerPays\": \"399000000\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"7F8D96C8DB3CD843709B298CAE9635F1FB49FEF39F3203FB5E162B8453FFD3D7\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rGcsBzn4XYzjM7nAXBUU163LfyStL1PZsA\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520886C98A7A03D0\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"2\",\n            \"PreviousTxnID\": \"4DA8C60A7F154630197334D463B6B17333BA85B9EA0044E6AD267B7886827A23\",\n            \"PreviousTxnLgrSeq\": 69049191,\n            \"Sequence\": 67544554,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"7F998251B8048A336786F899A0BFA676ACF2B97B8B66B546AA87A49A50DB2B87\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"38049133595.14459\"\n            },\n            \"TakerPays\": \"91317920\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"865\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rfh8snfXUdwqc25vUfwxJxJnVM1n1dJvoh\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"LowNode\": \"1\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"7FBC6DF91B50A991466EE892A7DFC3383DE4B4C1FBB2A6D96ECF2CEE3938AB6A\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"55366778430.76617\"\n            }\n          },\n          \"PreviousTxnID\": \"F28B11E71CEE69D3F8A468D0B62C1CEE006B9077B486FA2FC86820226F573C9B\",\n          \"PreviousTxnLgrSeq\": 68992400\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-45000000000\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rPSYhGCFb4y7ntd2VaJzTS4eqiw91wynZn\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"HighNode\": \"1\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"330\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"7FD85B313984BD8AE5608DB7F5B97C816BC9BAAAF1C3411EE64714A6A33E0F47\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-50000000000\"\n            }\n          },\n          \"PreviousTxnID\": \"695B1FB9A346CCB8CA3DDD3A34278B072B4FA94AA3ECD4308A0857AAC3FDB4AD\",\n          \"PreviousTxnLgrSeq\": 68864694\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rQpXmMNyGKtsYHwkG7Y3n8sXSXo2cmB1Nt\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"6f6\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"7FFCC308B23928B8DB2DE501C2146B2E9727996520B162BD93CFBB9D2FEEAC84\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-4200000000\"\n            }\n          },\n          \"PreviousTxnID\": \"0B014FD8B59B84832E9E745332EF326EC196AA924A4C62F400497B650EF61039\",\n          \"PreviousTxnLgrSeq\": 68897291\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"razceqmpdpjLd5o52i1GiaZJhmB8SEbfCa\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36530398DD06E53B14\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"b\",\n            \"PreviousTxnID\": \"D1823B7676DFAC0B0096ADDF64D95F555315927B27C8E1620359E8CA8891D734\",\n            \"PreviousTxnLgrSeq\": 67960068,\n            \"Sequence\": 1035,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"8045B44E45B9728571CE7AB49B565A786B522881610943403A7863F075AFFCE9\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"98765432000\"\n            },\n            \"TakerPays\": \"1000000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rwCDD5H9MDWdQE4y15hzipJWXjZpoZWPgL\",\n            \"Balance\": \"2584999915\",\n            \"Flags\": 0,\n            \"OwnerCount\": 158,\n            \"Sequence\": 66575925\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"805BF930A067AD08F4392673D3B6C7138F8AA3ECEAD17BB22E400A55D52B3BB4\",\n          \"PreviousFields\": {\n            \"Balance\": \"1834999915\",\n            \"OwnerCount\": 159\n          },\n          \"PreviousTxnID\": \"D8C6511F207339C5CEE27E775CF84EC16C2F19A4C00A1F8DAEB57D2D264B3D3F\",\n          \"PreviousTxnLgrSeq\": 69061957\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"5\",\n            \"IndexPrevious\": \"3\",\n            \"Owner\": \"rQDZDYodywYJULXJtv68QyoDbkV5EZgh9s\",\n            \"RootIndex\": \"C687A17AB679EAD7A3113AB4C76E18D263AF25FAF0801D234F6C8FC386C6EA4C\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"8065D87766E864BD8684659B24667BD9ECDBD27EC4E80962BB74AAF74F969E82\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"5d0\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rhPNtVD6tfZTrxvebJaquV8Bh5F2Kh8cMa\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"LowNode\": \"2\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"80AA807BFC1960FE2BB37FC9B6D2124417D74ED12259DA91B921810FF669905C\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"7982434333.333333\"\n            }\n          },\n          \"PreviousTxnID\": \"5A897BC35CB11AFA4FAC976724C40DB8A4E287FAC8031D1AEEA734E2058811DA\",\n          \"PreviousTxnLgrSeq\": 68898843\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rLBBX2NYwmoiRB68BQP3eo15BbaYtR8qdK\",\n            \"Balance\": \"875989992\",\n            \"Flags\": 0,\n            \"MessageKey\": \"02000000000000000000000000BCB153A85FA710C009011C6121EAFE56005DE94E\",\n            \"OwnerCount\": 16,\n            \"Sequence\": 57721432\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"80C5D0CC2C3AE510B6C050003C607B4D8BEE4904A486F43C3FBF874DDF38D449\",\n          \"PreviousFields\": {\n            \"Balance\": \"97391006\",\n            \"OwnerCount\": 17\n          },\n          \"PreviousTxnID\": \"F36C7B7BA543B234B3F0D158058767201F9AA9DED5CAD83717CB4C41901F465F\",\n          \"PreviousTxnLgrSeq\": 68917036\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"e1d\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rhEwjxZkMbARLTQmMsR7N6MxRDUUKLF1RP\",\n              \"value\": \"9999610698224573e-1\"\n            },\n            \"LowNode\": \"9\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"80C9FE569674D8637000BCD7913F2C733FA3360A615966993966ECC81CEC6DD3\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"6217617997.5\"\n            }\n          },\n          \"PreviousTxnID\": \"4B839DACC05ECDDE78293722AAE3A688426A91BE29975654572646ADE8A91962\",\n          \"PreviousTxnLgrSeq\": 68900449\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rMQF7GUuJQHvrEkXkcySkEvb4fbsGoqGqC\",\n            \"RootIndex\": \"80DDFC72E77B84862203F72FBFC8E36E77067ABA54C9858FA0F09212D548F54C\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"80DDFC72E77B84862203F72FBFC8E36E77067ABA54C9858FA0F09212D548F54C\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rJRfgew5k5b2Qgj5r9gn2L6w66hE5vwYnH\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521146DF6B8AF000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"8\",\n            \"PreviousTxnID\": \"94490BDCD4E41D740A342CE4DAE16A13C1BC6CFB9D152F786B81DD0909938F58\",\n            \"PreviousTxnLgrSeq\": 68963722,\n            \"Sequence\": 67406172,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"80DF51EA094A5FCF15DD41CB4FB883C7060ADE2E1810EF293EF97665085E49BF\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"5000000000\"\n            },\n            \"TakerPays\": \"24315000\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rEpLbrik9r6KpjVbWXA71SVQnMCkY8BEUK\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520F45EAEF101030\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"10143FF79F62E270C5824A4D3DC37DBE544F8B840AF2D83B93E69A3D7F5FC296\",\n            \"PreviousTxnLgrSeq\": 69033409,\n            \"Sequence\": 66709819,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"8187AC2256CD8352BE5783A86B236B708B6147167250EFD3F536E26DB6C49669\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"38009048040.74152\"\n            },\n            \"TakerPays\": \"163400897\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rUqaUzkL9NU9wp7BReWWPJQddAErF45hkE\",\n            \"Balance\": \"2496602453\",\n            \"Flags\": 0,\n            \"OwnerCount\": 5,\n            \"Sequence\": 67136334\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"819A88F54C170951E4C8241B2F21E816EA9A25894B7D4DE721AE6BB9BFFF9C2E\",\n          \"PreviousFields\": {\n            \"OwnerCount\": 6\n          },\n          \"PreviousTxnID\": \"A36DC976F26B77DACF7014CCAEA917C9B47E9E06EB190E7304E1BE849C1C0368\",\n          \"PreviousTxnLgrSeq\": 68872572\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rCeRsWQYvZrkA8s3jZYXBYw7gXH7cbVNF\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365214F51BF3FF5BDF\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"3\",\n            \"PreviousTxnID\": \"09B304270FA8C1E9CE62CB10243DCF3E279FA63936C1374EA257A0DD0853A7C7\",\n            \"PreviousTxnLgrSeq\": 68915434,\n            \"Sequence\": 67345641,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"819B3A705BDB51750701F1313F4F658E1B8F2A91E95EE9406A927E5F0508BFC5\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"16526809794.79221\"\n            },\n            \"TakerPays\": \"97491650\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-15000000000.00001\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rKWwHEb7RPAjRUVyvtfHVUJ1WZjECFhjbE\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"HighNode\": \"8\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"ab4\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"81FDC9492186D80109269682F51453AFAC4795913F0DAC329A8EE57A838D7961\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-30000000000.00001\"\n            }\n          },\n          \"PreviousTxnID\": \"944EE0B29A27A0CE7E2524FF19A4355D10A1D6B025887496BE736AF39E9AB821\",\n          \"PreviousTxnLgrSeq\": 68156008\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-8000000000\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rNRoroUiCSQM3hcrEkwV5p6uCx8WSm3Mjy\",\n              \"value\": \"1000000000000000\"\n            },\n            \"HighNode\": \"1\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"21a\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"82099AA0E08B9B3D9D30F7DFA49F767E741E76E6BE6C0680A5E3CFC5F0127DCD\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-16000000000\"\n            }\n          },\n          \"PreviousTxnID\": \"808483DE8C02BB3297A29B4BECB913C6DC226D403087E9AFA8A0E7947CD351A3\",\n          \"PreviousTxnLgrSeq\": 68991025\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"8\",\n            \"Owner\": \"rpf1wWbuPjafvAgD4f9vtX88Ut9qurPRHS\",\n            \"RootIndex\": \"31CE1877F3B4F67708C9EE7C271B150FDA1A6ED7BE46B6E8DBC5C3E81EFE0EA7\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"822FE3C241F3FCCA17AA22511EEC4329DE4F53D9750E4306BA7DC085F5A041D0\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"ra1aHhcQxB9sHWm7ppBMKEQWs4FTfRGZAg\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365211BA60E96DE000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"9\",\n            \"PreviousTxnID\": \"492DA9B66DEF0BE2A0B8FE189DC4C46B5B79372757270A2A4088A0E997EAE032\",\n            \"PreviousTxnLgrSeq\": 68977699,\n            \"Sequence\": 66996671,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"8252964656CCC80EF99EB80976891A0486375B447258860EF46BC8099A5CC3A1\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"4700000000\"\n            },\n            \"TakerPays\": \"23453000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"c\",\n            \"IndexPrevious\": \"a\",\n            \"Owner\": \"raPCjF9ftTRB7LYgehLYKBtzf8Eg4qp8Kv\",\n            \"RootIndex\": \"A7960A534522E4BCDB4C30980E365099588C49DBE83951DE28A21AD227BE00CC\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"825A247D4A1F08927A3FEA3B8639A216D4A61D49D8B98ABC33B0AD4E209995CA\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rhhokxTQGXV3zHGWJqy1SiJ19yYTSFeGHU\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521FF973CACD0C69\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"1\",\n            \"PreviousTxnID\": \"4159DDE08CBFCD9DA3C2690393212E5DF630959C7AB2E966A8F0DB9CB0CD1DE7\",\n            \"PreviousTxnLgrSeq\": 68908066,\n            \"Sequence\": 67971447,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"1000000000.00001\"\n            },\n            \"TakerPays\": \"9000000\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"826E7A377913EAE49998D26BA231A7CECD2BE3C35B6B443B6DC5481030E7AFBD\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"71523946801.44991\"\n            },\n            \"TakerPays\": \"643715521\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"55\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rpq6ooRTok73Udp4D58zesfDJeYM1t5s8C\",\n              \"value\": \"1000000000000000\"\n            },\n            \"LowNode\": \"3\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"82748DCDC6F0AA1962E688C862F788EBE37939AE5144C727759A586F2A7A1D36\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"62287918938\"\n            }\n          },\n          \"PreviousTxnID\": \"97746552002BA699CF12EAC5091836C075243E8420AFA432FEE4B13267380E53\",\n          \"PreviousTxnLgrSeq\": 67951707\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"1100000000.60139\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"50a\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"r3Xud98xTUTiXxGp2LbmFtFTWRWeaZSCad\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"82869352DC95874AC0466D989D5F4E67E1FDA7F9DBD3AD1713C6DCBB64E4F45B\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"3100000000.60139\"\n            }\n          },\n          \"PreviousTxnID\": \"186B85B812A2352491A19436FB3A2107F0D70A499D217B42A2CCC78FACD6D3FF\",\n          \"PreviousTxnLgrSeq\": 68991727\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"6\",\n            \"IndexPrevious\": \"4\",\n            \"Owner\": \"raxn3rqqdW28ZVrFAQ33AUrvdaTSv34DSX\",\n            \"RootIndex\": \"02D86EA2A8285DAA5E91B63BC2954A5B009A46FEFE0EC79D7E7F156E34E33A03\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"829CA83608D6E69E957C5C6DD82C58844BB463667DAAEB227700717F1641893A\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rHLNuze17yJvjKohtAWTiakAUWFDp81Nbv\",\n            \"Balance\": \"191107345\",\n            \"Flags\": 0,\n            \"OwnerCount\": 8,\n            \"Sequence\": 67600409\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"82D3DB9F92A9F0580715E6F6BBD355007923E0DD90F5EEBF8C9B5A2734FC8DE4\",\n          \"PreviousFields\": {\n            \"Balance\": \"32111688\",\n            \"OwnerCount\": 9\n          },\n          \"PreviousTxnID\": \"79181504B0F5C539876518664B5255CD2128A97D822D9858ADCF7EC39A2E958F\",\n          \"PreviousTxnLgrSeq\": 68976059\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rpRfuSRwU9nUefy8T4z4RXUEDU2baW1qhk\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520A8B615973FF05\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"6\",\n            \"PreviousTxnID\": \"36198BECE1E2A83261A761E496FE1DF9A426AA5082A3B325A98CAB89046E80EE\",\n            \"PreviousTxnLgrSeq\": 69000219,\n            \"Sequence\": 67425371,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"82F3142D0435D536AF8875C5D1225C7B9F85040C0C84D8698F41319293D0D837\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"1490974072105691e-4\"\n            },\n            \"TakerPays\": \"442521104\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"2\",\n            \"Owner\": \"rnMENGbcT6QgrfDGjz7UJvyMryD8YPdi3y\",\n            \"RootIndex\": \"B57F3AF80428C52158504EA9D04C53ABD6428548C31854742B1FDE8268E4B7DA\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"82F583404FA632F15A8A369E3C16502EEAEF3BE11041841B859C2113473BA7D8\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rLV3c2Bymn4fq7kyrqysEd1ddizDxvwS1m\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"c15\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"82F6B221A8D16A489867BD4021F1775A0321B232DD2C268E52526C93482FE713\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-4000000000\"\n            }\n          },\n          \"PreviousTxnID\": \"2AC3F37B10B166412364C8CDDB3268B1E2A04EC25B21EBC71C71F67F84B66CF2\",\n          \"PreviousTxnLgrSeq\": 68889039\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rUs2aUqfDfjTN9HWdhXzRZZJkHm5rGUUdS\",\n            \"Balance\": \"2526000014\",\n            \"Flags\": 0,\n            \"MessageKey\": \"02000000000000000000000000FFE94AB4BF5CE179FF2025AC6F903765B3473674\",\n            \"OwnerCount\": 7,\n            \"Sequence\": 305\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"832718468229563ED6807FB6DEF71A67BA08D485CA7FC983FDE6B5D062CB10F1\",\n          \"PreviousFields\": {\n            \"Balance\": \"2026000014\",\n            \"OwnerCount\": 8\n          },\n          \"PreviousTxnID\": \"51DFA167541535AB6EBC7A1AEEC9403A16663EC6EC1C3634D67C481FBBEF08F8\",\n          \"PreviousTxnLgrSeq\": 68896673\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rJyPfhC1DLsG22KEG4jS5mDrGtoDcwZDty\",\n            \"Balance\": \"164217340\",\n            \"Flags\": 0,\n            \"OwnerCount\": 75,\n            \"Sequence\": 67176130\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"834578D2E90D35892E83098EC37C284A2ED10240E6BCFEF26A568815956239A9\",\n          \"PreviousFields\": {\n            \"OwnerCount\": 76\n          },\n          \"PreviousTxnID\": \"80677E853ED7C6D13B9359DD7D38FC44F43CC88B94D62CAD74CB074570956226\",\n          \"PreviousTxnLgrSeq\": 69047865\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rs9woHiJb73K8uqmCAUx7hRfW2a2WR5cwi\",\n            \"RootIndex\": \"36AB760CF003A8D07EB6C8B0F9440F476A1973BD64C45107C2414434B6C002DF\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"836FA34D61D7DB07D2CE525B3BE4603942CBD67A7F20D671C9664438B9BA9EF2\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"7\",\n            \"IndexPrevious\": \"5\",\n            \"Owner\": \"rfe2f8LznaFRfwdoiZGPxej6zbdYAYe4Rq\",\n            \"RootIndex\": \"2A4B85379B845F7F383582E27CD8430960B518B4B2CD8A480CF98E3540081D27\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"8370DC1BD87256B701E5F5ECB13590DA9F66A1D12547ECD37D1AFB9533C28DAD\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"10\",\n            \"Owner\": \"rUrbD1rAAkr84UER2ZUxTP5ohhSKzvC8tc\",\n            \"RootIndex\": \"2E290E48C7A786F18B6FAFED5F9AFCBF8782742E78D855EFE4A70296B8E7D431\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"8375557C868738896F8AC99588FA4D715AB965136E595F440F1E22C974BBAD70\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rN3pszUgbBgf7yZ9jxiHTXwStoE32PDsHm\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521C6BF5249C5DE5\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"a\",\n            \"PreviousTxnID\": \"53B9FA58BF0539F3AF9F2846F088F29AA60539BAD38383DB95E9873DA42E8473\",\n            \"PreviousTxnLgrSeq\": 69005187,\n            \"Sequence\": 67231709,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"839C646DFA0BD084DE9A91F8FB4AEE21F120EBCEEA2F1FA237DBC452784C2DE7\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7785989901\"\n            },\n            \"TakerPays\": \"62287919\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rwxKxP668nq2w99VM8SpeaXBwUVkcpcV3m\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653071AFD494E4986\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"5\",\n            \"PreviousTxnID\": \"C3171E8717F6895516BA8AFD1E35A092CB81D80332DA4236294715A516387792\",\n            \"PreviousTxnLgrSeq\": 68789750,\n            \"Sequence\": 67089663,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7785989866\"\n            },\n            \"TakerPays\": \"155719797\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"83B110863CCB1421D65B9261EC769C0ABA26D16AC5556D5C9F9445A4268C5EEE\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rnYbiXaSpChddFy4fdVYDtNscUsAfgaA4U\",\n            \"Balance\": \"568929483\",\n            \"Flags\": 0,\n            \"OwnerCount\": 99,\n            \"Sequence\": 66933320\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"83F08097E3816A191D59AC1E68B52E839EB2C00CEA7CDFF89D1DCB862387371F\",\n          \"PreviousFields\": {\n            \"Balance\": \"267264650\",\n            \"OwnerCount\": 101\n          },\n          \"PreviousTxnID\": \"1210263D7E0F4EAA7B660FB1ECDE34E586C441B7E5158590BFBD04D553BE86B1\",\n          \"PreviousTxnLgrSeq\": 69047090\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"raKfcCtqnoopzuWrRWY88p5hbTBmF7RzTj\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653038D7EA4C68000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"5214C9EBF8555E675A69E17976FADEAEEC78B968A55C6B84D7D855B282AEED1C\",\n            \"PreviousTxnLgrSeq\": 68896932,\n            \"Sequence\": 67579508,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"83FFBCB0C9342FEE0127B164C4696ED930BE3E3B1F3A531C1089693B911F22FC\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"10000000000\"\n            },\n            \"TakerPays\": \"100000000\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rNoN8BUzTSY5oyJmAMiKNGo1k8PSxhyJzc\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365305543DF667BB76\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"5\",\n            \"PreviousTxnID\": \"32889A27618BF2DEF78ACBE128C257BE32949B3ABF425B86727BE90D9C4AC01B\",\n            \"PreviousTxnLgrSeq\": 68989814,\n            \"Sequence\": 67232090,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"84081C05B0EB4D1F8591DE68B6DD7378D1205B6B83145F884223BC9F8FF85752\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7785989866\"\n            },\n            \"TakerPays\": \"116789847\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rLVaKJ42tddq3vJAFiPibubt2HbBpTHuX7\",\n            \"Balance\": \"700316587\",\n            \"Flags\": 0,\n            \"OwnerCount\": 194,\n            \"Sequence\": 66153452\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"840CBCC7F5DF512533C7694C8F0CC91E501860758C450A655F4D8726940EEAF9\",\n          \"PreviousFields\": {\n            \"Balance\": \"425804081\",\n            \"OwnerCount\": 195\n          },\n          \"PreviousTxnID\": \"2A60A1C7F35738A18BB24D1B26979F06CA2E949BCDF0F132757C22D3C5790B7A\",\n          \"PreviousTxnLgrSeq\": 69054761\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"286\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"raZrDVYBJ5whjdgJ1V6FtiYixKesEfDyKJ\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"LowNode\": \"6\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"8422632F10E09E4D583E4B1CEE79BB0800D50B2651B40C474DBF6F77231CCD8D\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"7785989866\"\n            }\n          },\n          \"PreviousTxnID\": \"910FD11A4E65611A5EBFF1B41726DA7178043A810B90755223F7BF2776E86DB0\",\n          \"PreviousTxnLgrSeq\": 67951015\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rLV3c2Bymn4fq7kyrqysEd1ddizDxvwS1m\",\n            \"Balance\": \"137462107\",\n            \"Flags\": 0,\n            \"OwnerCount\": 39,\n            \"Sequence\": 67840013\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"8456D9CE776766DEC4402055CA7E26F015A26E946A19C7C23FF6155553C12CB6\",\n          \"PreviousFields\": {\n            \"Balance\": \"113462107\",\n            \"OwnerCount\": 40\n          },\n          \"PreviousTxnID\": \"71C7E352A8EB9DF81C9A6AEBDEE17AA302AD274F1B3CED616B9BA266F1D27C68\",\n          \"PreviousTxnLgrSeq\": 69044091\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rMAWeQvUd5zQpyY9hSdaUMRMTQHcgAXvj5\",\n            \"Balance\": \"402899532\",\n            \"Flags\": 0,\n            \"OwnerCount\": 39,\n            \"Sequence\": 67781451\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"847DF98C3CB0D7A12ED29CCBCCC6C75BA73DEEF924D28D2044B12C2B136A0057\",\n          \"PreviousFields\": {\n            \"Balance\": \"94000000\",\n            \"OwnerCount\": 41\n          },\n          \"PreviousTxnID\": \"48C140CC2CA353858C4C311A5D146514E8F131DD62F00433B7F510EFA6DD7D2D\",\n          \"PreviousTxnLgrSeq\": 69044256\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rsE3JJ4VxxndQwzRusS99pmAeYN3bEYZmc\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652197913B6C1F5DB\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"c\",\n            \"PreviousTxnID\": \"E111061D3A118C6C8FF3D7CC7657E0DCE980EABA927A47AC9E792083768855E3\",\n            \"PreviousTxnLgrSeq\": 68898533,\n            \"Sequence\": 930,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"847ED804A83382F7ECA02A429768814081A85384F369B2E4BEB0C8334C6709B7\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"59019345506.15411\"\n            },\n            \"TakerPays\": \"423168707\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rnZj4CQouegP4s5Hu2LxBbjCfGSWQuzRAp\",\n            \"Balance\": \"1048860160\",\n            \"Flags\": 0,\n            \"MessageKey\": \"02000000000000000000000000B82A5EE17A6F59E28353C69D4ABFFD82A49F6CF5\",\n            \"OwnerCount\": 5,\n            \"Sequence\": 58648416\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"848CF9354D2FB1A5D71789482D18F1370B3E93EF0FE5B5E650F1D5A358AB1DB1\",\n          \"PreviousFields\": {\n            \"Balance\": \"24600160\",\n            \"OwnerCount\": 6\n          },\n          \"PreviousTxnID\": \"B3638F0294BAD3383C8E8D78792565DA81E89EFBF58439E1932091830C950283\",\n          \"PreviousTxnLgrSeq\": 68960703\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r3PYAn9d1DTFzJ9kuvFnhudgwsVZ6pm5hT\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520E5AD072D1D200\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"6\",\n            \"PreviousTxnID\": \"CC75D9CF2D09DFA5969BAEED8AE384BDA381C92F3001D440C4E6FE68D6BD0AFE\",\n            \"PreviousTxnLgrSeq\": 68998256,\n            \"Sequence\": 67442320,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"84916C9E9E0016004F870DAFE0FCC72EACE465E4F0F9081657B48E7A177F7001\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"4000000000000000e-4\"\n            },\n            \"TakerPays\": \"1616200400\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rHNNQAEvRxzWoi2ukxZ371fsjJjxRva3pd\",\n            \"RootIndex\": \"8499563283A0131C4FA7C01EACDF2B957751C9A3EFDC7B5082684968A3A8DE24\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"8499563283A0131C4FA7C01EACDF2B957751C9A3EFDC7B5082684968A3A8DE24\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"0\",\n            \"IndexPrevious\": \"0\",\n            \"Owner\": \"ragafgjLrLnN1rYkR4FpKXjmiTqDQqDio3\",\n            \"RootIndex\": \"84E22F5D4D00F5706F0B2BB3572C89842EF0F3EADFDC609C01B7DE2CE627C4E2\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"84E22F5D4D00F5706F0B2BB3572C89842EF0F3EADFDC609C01B7DE2CE627C4E2\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rUkBkCrKSXyNbUcj7hNC684Z2TrzouvZBr\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521550F7DC0E7B06\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"B12E639C3D165CB56C840F7A8CEEE8F5126232672F53C44566429C891AB77BC0\",\n            \"PreviousTxnLgrSeq\": 68911732,\n            \"Sequence\": 67458715,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"84E9B716AEE608212F5234E4C55F7064B619E58F2FE56CA6E863CE6F3B682A69\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"26076190543.44082\"\n            },\n            \"TakerPays\": \"156457143\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"9\",\n            \"Owner\": \"rN3pszUgbBgf7yZ9jxiHTXwStoE32PDsHm\",\n            \"RootIndex\": \"9431555908FE08280B63758C2D040DFB9247E35910D3000079F501258E5CD504\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"85019A2578D910C9CE7ADFABDCEA0AE0FF678A1D591D8F8D56505DDB2D4990B5\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rBhRwsAuVFJ3VY37rd5R9YzqrCRjVXQggX\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365218DE76816D8000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"6\",\n            \"PreviousTxnID\": \"20C7463ADBF11D083F8EEA8782D5F2F7FB5829C2DEEEF833BD5D366A42E9200E\",\n            \"PreviousTxnLgrSeq\": 68899109,\n            \"Sequence\": 66546612,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"85053725FE4EE14EAD15029B232A6CD61270D1BC3E766CC6BEA081DBDBC480B3\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"5000000000\"\n            },\n            \"TakerPays\": \"35000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-4696497466.5\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rGRyfRcJ7cSYSu6rw5VpNJReEZt9Gzy9a7\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"58c\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"8514F86C52743D78568BE8327439DC9E77CB0B4E0E4BE283F9A93B8E93F3E392\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-28789492399.5\"\n            }\n          },\n          \"PreviousTxnID\": \"D4B463265A37414CB5564AF7E8478CA2E15E6F11BAFD1EA5A0D72F3BAFC66951\",\n          \"PreviousTxnLgrSeq\": 68993144\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"569\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rCeRsWQYvZrkA8s3jZYXBYw7gXH7cbVNF\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"8534ABC91D7F948E7A91F34F85B47D72B7A6810CE21D4CF3B96878D441C023EF\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"16526809794.79221\"\n            }\n          },\n          \"PreviousTxnID\": \"F02DBBA33986BAFAA9A845E690E22C993A6C716CBA6FA555D3E18D86ABEED40A\",\n          \"PreviousTxnLgrSeq\": 68915427\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rfJ35bQofteAs3h4aCA77V5wSHRsHChttf\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521421326D4C2000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"3\",\n            \"PreviousTxnID\": \"E7663EEF35618A4117F92C1848A4ADB47EAB187C05D2ED9D7686BE89E1BAB83E\",\n            \"PreviousTxnLgrSeq\": 68918819,\n            \"Sequence\": 66166926,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"8559F96A91C29DBEC63189C99A51928AD9FCC12724B973E9D0F2B69C2BDD6423\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"10000000000\"\n            },\n            \"TakerPays\": \"56660000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"10533676354.1841\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"e11\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rfe2f8LznaFRfwdoiZGPxej6zbdYAYe4Rq\",\n              \"value\": \"9999688558266539e-1\"\n            },\n            \"LowNode\": \"5\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"8571A9910ED75F7EDB89390872671C83FD2975E7DC72476D42713BACF9664C84\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"1105336763541841e-4\"\n            }\n          },\n          \"PreviousTxnID\": \"5A71BEE13C8413F9AF852DEDCBBFB34BBC8AD9D54DC60DCE9371DD120C17C1C2\",\n          \"PreviousTxnLgrSeq\": 69002433\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rhdw3T1ko64kaipD1T8uJmSkV3mUtRWqiY\",\n            \"Balance\": \"155228739\",\n            \"Flags\": 0,\n            \"OwnerCount\": 30,\n            \"Sequence\": 67761561\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"85947F25D833C07EE55F3441EF69ACA4F8951A338256AB010B1843719308AF18\",\n          \"PreviousFields\": {\n            \"Balance\": \"94575878\",\n            \"OwnerCount\": 31\n          },\n          \"PreviousTxnID\": \"FFEAD34A4246978A8B98A5B078BC93286105F3C6A0AB1ECAC4DD9D4FC574DAE2\",\n          \"PreviousTxnLgrSeq\": 69043939\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rno35bcvBqLMETwksdhSiUuDQquXyoBtem\",\n            \"Balance\": \"508671965\",\n            \"Flags\": 0,\n            \"OwnerCount\": 110,\n            \"Sequence\": 66320194\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"85C6C4D5582A83E1D32FF14824F9F9C5991D50C5F402D8CB530E99E8415B0C67\",\n          \"PreviousFields\": {\n            \"Balance\": \"237588965\",\n            \"OwnerCount\": 112\n          },\n          \"PreviousTxnID\": \"800E5DB33332BA6307BEA14A1B67F5F3814CD384E6173E1047E0C975127EAA9F\",\n          \"PreviousTxnLgrSeq\": 69061453\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rE2zUmDvH8vtBsGPBTdLSJW8rDLNVy8g4V\",\n              \"value\": \"1000000000000000\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"e46\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"85CC9612F9B6B6EAE748E04AC4B5E5A649C2DDC945FC13038D341FA3721788BB\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-10300120049.77974\"\n            }\n          },\n          \"PreviousTxnID\": \"6B24E83CE005A22EFC422D5F8F5EB0CE12EB013E31A37AB639FAFBBEA6CC7001\",\n          \"PreviousTxnLgrSeq\": 68945962\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rnB62vv6d8dQV13A3nHQQ7LEGy8DEWkLuG\",\n            \"Balance\": \"571507151\",\n            \"Flags\": 0,\n            \"OwnerCount\": 125,\n            \"Sequence\": 67267248\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"860B107B649B37A4A1C06211AFCBAB6D9EA743970E70932FEA2D067F9C227E40\",\n          \"PreviousFields\": {\n            \"Balance\": \"311507151\",\n            \"OwnerCount\": 128\n          },\n          \"PreviousTxnID\": \"252532292EE765FDEB1B512DC1A33AB3E680D25D5228A47608F5AB27F5C9B90D\",\n          \"PreviousTxnLgrSeq\": 69062643\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rHv2LE2MKKrQ83NMbQ2vv1DUDjByosxthL\",\n            \"Balance\": \"83742140\",\n            \"Flags\": 0,\n            \"OwnerCount\": 16,\n            \"Sequence\": 68499511\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"860D050668EFAFB1B3E3496528EDC356FA5F74F4699913C35940340F0BCC00FA\",\n          \"PreviousFields\": {\n            \"Balance\": \"82846696\",\n            \"OwnerCount\": 24\n          },\n          \"PreviousTxnID\": \"E417C9DE099FA7843976A7600F48E096AF8E0B781CF41A3082F1E8169F00044F\",\n          \"PreviousTxnLgrSeq\": 69059893\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rLC5cTyVFPDTN4nuTcM9F2MAzhbkS7a78Q\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"97c\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"86236DF3510F1D51819E8FAE1AD46FD1EAED78E601B0805C7905BF2BB18E7DFE\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-7785989866\"\n            }\n          },\n          \"PreviousTxnID\": \"FA449661B456829E2C4A43794792CD293F247E1BA35825AE64ED714D4B80064C\",\n          \"PreviousTxnLgrSeq\": 67991835\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rLzgqyEetWAoARj7XcpWExwpRCvYq5zHi6\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"HighNode\": \"1\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"a1d\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"8635942E1AFE2416BAA12D6E349C45253888D4958AEA3445B8B56F66226C43BD\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-5269682218.30986\"\n            }\n          },\n          \"PreviousTxnID\": \"21D877D2DC69DE6BD82E20DC9E35FB68BC05233C03BF102B48F9EDC1E97C2FD7\",\n          \"PreviousTxnLgrSeq\": 68905410\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rGa2XHaY793GMxMeexFcabjrc4w5vyrmPJ\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520E35FA926C20E0\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"2\",\n            \"PreviousTxnID\": \"7E74DB20F0FFC6D7C679F858493C8C7312B86E0100E452243770C6E626AFE68E\",\n            \"PreviousTxnLgrSeq\": 69030733,\n            \"Sequence\": 68329269,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"40122950364.29873\"\n            },\n            \"TakerPays\": \"160491801\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"863B3F22C11D66E6A65038C38327CA5DB8A199F7D5D9D540A841BEDD213327A5\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rhxWqi4kQsADuck5wUsbXCcR2Pq44kbjZs\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520AA87BEB9338FA\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"3\",\n            \"PreviousTxnID\": \"6EBF48A1E63A155AAFE6D05B1FE88CE966ADB702765137BE5A47B7EED70BB203\",\n            \"PreviousTxnLgrSeq\": 69030312,\n            \"Sequence\": 67431411,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"863F47399AF73290B43A5EE1D753A4CAF0E9D1E62AB3AD53B7BA74603A84C30F\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"17796971607.14286\"\n            },\n            \"TakerPays\": \"53390914\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rfBvZMQKX3gxybSQAt116zqUxXKu7a8BmY\",\n            \"Balance\": \"301190272\",\n            \"Flags\": 0,\n            \"OwnerCount\": 71,\n            \"Sequence\": 67523781\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"867BA5F0CD204D856470B06A4FCE5266D9AB8081FAF2C36680B078DA555248D5\",\n          \"PreviousFields\": {\n            \"Balance\": \"205396215\",\n            \"OwnerCount\": 73\n          },\n          \"PreviousTxnID\": \"2D54418111A8DC318E8F0AD8C15271DA134FAF2CA97FFCAD795638AAFD0A3345\",\n          \"PreviousTxnLgrSeq\": 69055872\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"6\",\n            \"Owner\": \"rK3ctAQ3dxZmdQZ7JJt2PZBU7GZPwAkK1P\",\n            \"RootIndex\": \"D2689873B8ACA42E1A4604F10FC3C663F623BFD2C84AC17B6197EC559A740086\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"8685E9B25619DB6065EFB28795F249E8E399BC8C306F49A9D7B731FDCE6A7BDA\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rp8YVv74whPGdy9huBZHuPy5D3CRKgFFsj\",\n            \"RootIndex\": \"868E54E8A65BB2C7FF4E79BBCE20741C77C54AEDE82EB60F8D88D98C0E147585\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"868E54E8A65BB2C7FF4E79BBCE20741C77C54AEDE82EB60F8D88D98C0E147585\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rBqYpFjv2TLUiwx2Lr5vgGxoEgjhq1XnB5\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653044364C4981A17\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"6AB5075304315CF845F71EE85F34298FEF2C3403DA8AC09BC6E8BA9D6EE85B50\",\n            \"PreviousTxnLgrSeq\": 68897281,\n            \"Sequence\": 67575738,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"86C9ADA7563DE9C86B507639D89C74687722BA3AC0F101F105F78D6B71549B49\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"5015645579.68313\"\n            },\n            \"TakerPays\": \"60187746\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rPEfUi18WaHNarXbyX5UCcVACd1ZZhxAig\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653038D7EA4C68000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"3\",\n            \"PreviousTxnID\": \"AB3026534174EA55615CF7A6BA32FB46D42BE7EF139EE5A1CB2949452856775A\",\n            \"PreviousTxnLgrSeq\": 68900301,\n            \"Sequence\": 67880199,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"86D29CE4BBEA1555F7016FA2D47762F8A756281C71ADBDB8A0A0EA9C41F8C7DC\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7000000000\"\n            },\n            \"TakerPays\": \"70000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"3\",\n            \"IndexPrevious\": \"1\",\n            \"Owner\": \"rsz7uAUXWXXeEfR55mUHFiWbdTomtXqdcv\",\n            \"RootIndex\": \"6B1A8966F63AE3E365D4667F939E0C3217E9F5EB0AD711A4B4BD227C2033D772\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"86E44DF94A15B8F3ED773B4A917761BD204AAE543491B1E9CC6A3657D4102E2B\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-93931878392\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rKKDmfji3MYEAtBZY3AQj8ghcuH1HXYpZC\",\n              \"value\": \"9999844278063879e-1\"\n            },\n            \"HighNode\": \"1\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"dee\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"86E64FAF0D2AD1701FF3BCFF499F3054EFD9BAE56E3B4C7B690D20010DC4A489\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-1878637567840000e-4\"\n            }\n          },\n          \"PreviousTxnID\": \"72677DBC7314391985E9B04A91511477181CCB34E3602FEBAAC1B4DE5C0B35D6\",\n          \"PreviousTxnLgrSeq\": 68300957\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"39605283980\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"d79\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rsSog5gEY6GuTeCP4TAgdK7HkUHiSNxZqL\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"86EA9B02F2E2C3B4753F322B6137E97708EE634C4A099BEC4F133F15BEC55435\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"46616283980\"\n            }\n          },\n          \"PreviousTxnID\": \"7240CECAFA90526AB38573D46C46414C322C53222E4E025E8D4386F472CB9108\",\n          \"PreviousTxnLgrSeq\": 68991132\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rUqgMfiCKp2L5Y1zobkQTgSdVYLp1PASt5\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520A7EA5B89873A8\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"A88BDE5802B04335FBFA0FE8B9454D1C21E0E60A0499C93813BF31302F2224EE\",\n            \"PreviousTxnLgrSeq\": 69022227,\n            \"Sequence\": 68911099,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"4223866751872249e-4\"\n            },\n            \"TakerPays\": \"1247730238\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"871DA06C6E14187FB2DD123794433720565AD2AE51138BB730688FE6FE7B8CE9\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"7\",\n            \"IndexPrevious\": \"5\",\n            \"Owner\": \"r4szgdizaCzaf1H9hBme8BYyQPhf2CbvXC\",\n            \"RootIndex\": \"0D22EFCA118613C39DA5B28B851BF0A1E8EBB55EEDBD607D12F348CB747DADD3\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"87424BE758AACD23A4790CB004E064C751F9237B5AB90531738FEDFB43576375\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rh8MNcxKuDcaMRuSj6P2rcMGxDiBqyZJJT\",\n            \"RootIndex\": \"913268632F4A3E6A5B9454E6FE3F13666EFACB1D6A9A4A191E2A0FE4C4B0C81A\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"8765FB8150C0C410DBCF5A22E2E544958A19E20986AA63EA7D7E8FBF03B6EAA3\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rUZdJF5FhJJwrdjrcJ8vjfo7NySmeGRxxa\",\n            \"Balance\": \"153161594\",\n            \"Flags\": 0,\n            \"OwnerCount\": 38,\n            \"Sequence\": 67514543\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"8784B17391838ED62133AA32CDCA0550D1518B4A229979CACB06A3DD34035F03\",\n          \"PreviousFields\": {\n            \"Balance\": \"100994122\",\n            \"OwnerCount\": 39\n          },\n          \"PreviousTxnID\": \"E69B3B4230393A676295E6565203205AB800F2A0EF38C3594A2AC14D7AB1604C\",\n          \"PreviousTxnLgrSeq\": 69059734\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"8\",\n            \"Owner\": \"rnYbiXaSpChddFy4fdVYDtNscUsAfgaA4U\",\n            \"RootIndex\": \"152B711B52510B654637BFE18671A971ABFCBC75AE22A96810BEE51E9554D656\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"878582434173CD65A843015D1C6CC4D1CF4BBF47ED0E220D5A0415DF64B3924B\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"4\",\n            \"IndexPrevious\": \"2\",\n            \"Owner\": \"rDqBWAYNudfa8rBsr7YDsdDxeAoNRsxfPV\",\n            \"RootIndex\": \"4CB1DAEE1D7D97E751FBBABF16B30C68868C3C4244711D396885A266F2F94586\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"87C5FE100D6C54EAEC1AF2251FBB068EDFEA580B7641FAAE486D5F39B896F18C\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"6674878755\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"2b7\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rNaQPWNXMaNzEWKoidMaJqNskRUFKbKWM2\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"87CC9A3B26E79B8852CEE7B1EB303EAFBCCBBF04AE67E9C6689BB6775610282D\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"7785989866\"\n            }\n          },\n          \"PreviousTxnID\": \"DACDAD389A410CFBB5924928897DB266E68DA71FFD58FD18DCFD78D18625ACEB\",\n          \"PreviousTxnLgrSeq\": 67951283\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r3oDrfWCL4zZRGoUNRd8Ywu9PJWFZXc764\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652083062A19C7980\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"4\",\n            \"PreviousTxnID\": \"681D48844F978B4024393C6CBBB0E04224C32858E20A112660ED744DEA0137B3\",\n            \"PreviousTxnLgrSeq\": 69054955,\n            \"Sequence\": 67440529,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"87E300A8B48E83199DC4B727C48E24A458DA4ECA2D2D6D1FA1F22BE7CB99C5B1\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"TakerPays\": \"230499999\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"c\",\n            \"IndexPrevious\": \"a\",\n            \"Owner\": \"rN57KF6tqiqqc4agjC6nvZeQzovWYEPDCT\",\n            \"RootIndex\": \"1DCC68268A7A870DCA81274691F301FB726081AD3A7170228907117D0396B6AE\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"87E9C8BADE36FF3CCC278023F1D39B4CBCE164B1F0114C0B3C273D0F7B0D0E44\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"a\",\n            \"Owner\": \"rNRoroUiCSQM3hcrEkwV5p6uCx8WSm3Mjy\",\n            \"RootIndex\": \"56F60B4F769FC14452A80F52D16A02B10E336AB237D09646305DD4391D2EA5D0\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"87FDBAA893AE7D8F5912B8547D9C77EA1FFF32534F27DCCF6A3659CF40B0A63E\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"6\",\n            \"IndexPrevious\": \"4\",\n            \"Owner\": \"rJMPwHXPwcnQCNmNbaRq2Lf5nbsivkCJrH\",\n            \"RootIndex\": \"9FD2F72C0A5A9F055E703ED269845D5AFFCBD636254479210E616CF71A4C76C6\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"880027D54033FFAA829C0D39BC98CA43E2214DBD7C9E44F063338DA715FE7541\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"r9pfHFFyEEhtaDaMgVNtZZ8Ks7YL98ziRB\",\n            \"RootIndex\": \"CFD3A32EDC18870A02CFD9305B7F13DDB32BD7EC94A7D002F599C866AB73B9B3\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"8811449595C6934ABB4778A69A152CEA19997C7E6D772C9490920AAC04FD4162\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"882A4C42FCA1F3055E308EBF7C0F3B7A3AB1E85BB7A8B95D99935DA131C8AAA4\",\n          \"PreviousTxnID\": \"0F80DCB7411CCFC171B51C7A608592E5525355A45084E2B341D56976F1FB9FF6\",\n          \"PreviousTxnLgrSeq\": 69064099\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rnSxpc5YM8agfwsEHN3F3EKN9WQ8yyTcAf\",\n            \"RootIndex\": \"35876A279C896F0CD345A1FDFA956BE85B33848369E57B552C9689C3BE88D58D\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"8865360868D8A199EF359A60B94F9EA22DD43172FDF01B1273B0B48CFF37F9AD\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"5\",\n            \"Owner\": \"rBCS9nAyaFuM8LDym5gJGRxEqmmH9mRhxW\",\n            \"RootIndex\": \"FDE97CE583D1CC3FE574513FB53B62A12747B92A843FE66F53B697BF997AC2E0\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"8896191552FE76CAD254C5E11172246F47203B8F30532B5A6B8BF4D7BFBD2EF4\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rGzfdR9pNTEgc3qiShH9q3zp7KpVXgVUq8\",\n            \"RootIndex\": \"88B7EF612DE2A1B4CEFF2D6A0D902153A178A99FD5C9286BD24FEBDD27EC2C6F\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"88B7EF612DE2A1B4CEFF2D6A0D902153A178A99FD5C9286BD24FEBDD27EC2C6F\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rPEfUi18WaHNarXbyX5UCcVACd1ZZhxAig\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"b3d\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"88F6AC142F4E27B323FFA6B27F77068F293F92B87DCCF510A6C78A401AABD1B3\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-7000000000\"\n            }\n          },\n          \"PreviousTxnID\": \"4AEDD7751B0232B279503041CE1B19E166CC6371BB7231F160322D800F326A8E\",\n          \"PreviousTxnLgrSeq\": 68896658\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rG9EpCkxGBXowufUGyrVF8tT7ovkHBdMb4\",\n              \"value\": \"1000000000000000e-1\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"ea2\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"88FC01BA8DEAB2EA4DD057513E4F29DD913B5216C73C698C09BEDAA5C1112220\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-5000484098.059855\"\n            }\n          },\n          \"PreviousTxnID\": \"9E4433C194C444E0085D3BA061B98A3510BD1B870DBF755876C2B75EFD32BC5B\",\n          \"PreviousTxnLgrSeq\": 68826636\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"4f8\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rzNhpkxVUc86h9CJyB1qssHYenzkVpyn7\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"LowNode\": \"3\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"891ADF0559484D08CEC06E3E2E73F7FC847C3ACE1F63E7EBF9E614893EE6B1D9\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"24000000000\"\n            }\n          },\n          \"PreviousTxnID\": \"9260FDAC058C2890C9674AB53AE6CF6B4D9491A4B6876DAB1F3C7C461FF87B03\",\n          \"PreviousTxnLgrSeq\": 68922656\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"6\",\n            \"Owner\": \"rfBJiQAjbS9cyzVGKRxbde3eV4Sr5xeC8u\",\n            \"RootIndex\": \"5928A0484E51AF53259A51A045404251E44460EF455087FD87F2A12DDE20DDED\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"8925581CCC9FE857D6C9B1CE510A7874ED884B85A0CA43F1CEEBE414DAE6D200\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rJeogNqHS69HkL8Le6zZoezAhGwpU4WPsc\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36531550F7DBD3A64D\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"9\",\n            \"PreviousTxnID\": \"0473C7A8F3DFBEF0A70256CF8A11549A4A3C91D2CB962A33C84A66DC78176164\",\n            \"PreviousTxnLgrSeq\": 68893782,\n            \"Sequence\": 67482258,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"8926AD74285397F1EAC70A2CFA5E38E2AE748676F010E5EF8B0939C981A777C7\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"6786484799\"\n            },\n            \"TakerPays\": \"407189087\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rLMqPYdzd1JeWQ6PsjxFt4jXMZo8vDgJrS\",\n            \"Balance\": \"664595546\",\n            \"Flags\": 0,\n            \"OwnerCount\": 205,\n            \"Sequence\": 67313187\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"892B1ABFD267DBE881333A3150915EDDBA49954E144F95DE2B2FCF73891D975E\",\n          \"PreviousFields\": {\n            \"OwnerCount\": 206\n          },\n          \"PreviousTxnID\": \"245A80CF3EA784328D18EE9179529021EBB9303C49BED4B5AEC78B0177D2BC09\",\n          \"PreviousTxnLgrSeq\": 69062235\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"e\",\n            \"IndexPrevious\": \"c\",\n            \"Owner\": \"rsF1oN5xbuJQ3wPD87jjDvEde3VKwSrAue\",\n            \"RootIndex\": \"7B23157E8DC0899570B1F4E9D7C4E4A516A0E980392CDF2FE45FCE6D033CA58B\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"892E483C1DC20143827F8A7B6F14F8E2747634FB4420FF9B909CB021C6B225CE\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rQHTzMfwiuyHEaGpCTUE68vbkTR6tXahXr\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36522386F26BACCE73\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"b\",\n            \"PreviousTxnID\": \"7394D2B21158D9B35478FA56A4A695C659B493B399BF03FEAEE0439EB3423290\",\n            \"PreviousTxnLgrSeq\": 68006033,\n            \"Sequence\": 66479762,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"893481062AAB185C694E2EC4DFE8396D3B2FEBE7907B04A5B01FEBAD3D698D21\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"10294850770.45\"\n            },\n            \"TakerPays\": \"102948507\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"1\",\n            \"Owner\": \"rGa2XHaY793GMxMeexFcabjrc4w5vyrmPJ\",\n            \"RootIndex\": \"FCE92AC28CC9019A6E1459DE331C9059643F6DA22439C6248BAA6A5DBB9AE592\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"89B5EFF641A4A18CB75417B731ED94D455390044E1430465291DF8F126384D4A\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"10\",\n            \"IndexPrevious\": \"e\",\n            \"Owner\": \"rHSPavv1zYMxcqPUHEeQqwMSQgSzadAjM4\",\n            \"RootIndex\": \"297A635A0AB0922FE2A5CCDA560BA80D2E6E2210EEFF005AE361D519B20AAE41\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"89F51E0731B5E013EAFD9B0EBBC73C17D072596605E46BC4BB41C4E98C55A0AB\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rPhzFvrw8hkGkdzQvSRjuHuESLDqnd6xDg\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521AA535D3D0C000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"b\",\n            \"PreviousTxnID\": \"A022EFF24BF32D9958F06055075FA2DAD97275339C07CEEB3F557C9CB9F2393F\",\n            \"PreviousTxnLgrSeq\": 68898865,\n            \"Sequence\": 66579244,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"8A121CA58272C19B18E151B34ADD107F66E894C0C3AC4EC50E6D2D7444F34E0D\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"TakerPays\": \"750000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"1\",\n            \"Owner\": \"rsSog5gEY6GuTeCP4TAgdK7HkUHiSNxZqL\",\n            \"RootIndex\": \"B2291B76ED4C844B1CE294C9B015E0019F5A207C29D406EA0BCD8D5DD2831C05\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"8A136E5F2DF65608CBFE73158E60E890DBD2B31898983DFEFE4377080145D27F\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rfFmXF3uT3Qc76CAH2cVExQXN6t7KFERu6\",\n            \"Balance\": \"533675667\",\n            \"Flags\": 0,\n            \"OwnerCount\": 67,\n            \"Sequence\": 66750625\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"8A23808A8390B0354479BBBA3C13BADBE785B4258E3E4B0BF1A855B8514750B6\",\n          \"PreviousFields\": {\n            \"Balance\": \"323675667\",\n            \"OwnerCount\": 68\n          },\n          \"PreviousTxnID\": \"3E242503E6183410AA6BB739EB75BBB1A4ED88EF97ACD384EA2BF351064249A6\",\n          \"PreviousTxnLgrSeq\": 69061831\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rMQGzm5niy3VzeWEqokwb28toV137fbiYJ\",\n            \"RootIndex\": \"EFA6610BBABD663B21AFE7873CE5471AF3890518000784C17D02786B2A373F9E\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"8A2607C6BBD3355B45919C3235AB40DD46461DBAA66EA87132F4A0F2F1BF2809\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"3e0\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rDSSG7NwYYV545mfcRdVExpAU6ys9CqoCk\",\n              \"value\": \"10000000000\"\n            },\n            \"LowNode\": \"5\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"8A5D4BFDFCF76B1D8FAB3B1D69D5ABD623E4926F37A3CC8C8BBA147D16A72F23\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"7785989866\"\n            }\n          },\n          \"PreviousTxnID\": \"99EE605FC6ABB4514BAC6C3D644160D34C6F127E91B8F75D250C7B0E782CFC89\",\n          \"PreviousTxnLgrSeq\": 67975429\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rshXc1NnrPiNRvKbbmnfgQpiSGYugiFUG7\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521550F7DCA70000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"B035BAB85F286AB483CED796BCF07393BCD4FDF24FF802BB9F92D918C24AD026\",\n            \"PreviousTxnLgrSeq\": 69013489,\n            \"Sequence\": 68652658,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"8A9460AB9A4851BAD956745BE60C9E7B3B1A0C025A6957A1B75BFBA58BE25DA2\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"20000000000\"\n            },\n            \"TakerPays\": \"120000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rHLNuze17yJvjKohtAWTiakAUWFDp81Nbv\",\n              \"value\": \"9999688558266536e-1\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"e1f\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"8A9F76BBCC87868C9CE8F332ADF384365C8109D4E6ED13241160D3201244455C\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-20126032579.61783\"\n            }\n          },\n          \"PreviousTxnID\": \"9780B7D2E906D67428496565FE2AF60C2A4F47408DBA9A9A3DE477DC67652717\",\n          \"PreviousTxnLgrSeq\": 68897717\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rszRAoxvAYy352HATq5bx3YGKpMBjeW1L7\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521E31CBA1CC3078\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"a\",\n            \"PreviousTxnID\": \"003DCF455112328F0E9FC49E8D8A39638300F298A6571DA1F2CABE3C3AD4E5B6\",\n            \"PreviousTxnLgrSeq\": 68897755,\n            \"Sequence\": 66950901,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"8AC73984EC36E252149F55CDAF18D774505C5844F820DC076DE8CD8FD8AEA0CB\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"21481866193\"\n            },\n            \"TakerPays\": \"182574380\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"12\",\n            \"IndexPrevious\": \"10\",\n            \"Owner\": \"rMRX7LEEzj9s3Hm3fysfBXnkNzAaRbDawT\",\n            \"RootIndex\": \"39A4AB7B883B53EA6C4EB60BD48C7A448D85D4AE2D233BCD0E3DCD995CA633F3\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"8B31778ADE46838C5C420390D9560238F710B4C8B444E13C7C816947FE9AF83F\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"f\",\n            \"IndexPrevious\": \"d\",\n            \"Owner\": \"rN9HGJaVB4wFwWcj5tTqzkWtHjxxCZiHA7\",\n            \"RootIndex\": \"822DAE42C141FBF63DDD163252EF9D5036D48DE0657E692DF45149A6AE4B9056\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"8B4C8E645A1BD6ED4F1DD03742270B19BE3682FDF7C6F5353648E2F1506EF4BC\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"a\",\n            \"IndexPrevious\": \"8\",\n            \"Owner\": \"rN8rfe7hU4CCkmEiDkj9fg8pgBp5fa8p2j\",\n            \"RootIndex\": \"29319BA089997650595D4CC417AA8C13A285061CF448C6EAC54550D3B3AF010B\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"8B4CBA396D004AB680970E33DB1DA74247CC9A3C2BBDF9E0D7B8066D085B1839\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rMQGzm5niy3VzeWEqokwb28toV137fbiYJ\",\n            \"Balance\": \"659971687\",\n            \"Flags\": 0,\n            \"OwnerCount\": 40,\n            \"Sequence\": 67388282\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"8B867D35BC96DE01DF14DAE5796EBBE4BA57CFF0DFED34B2A8B7E6BD645CEAD5\",\n          \"PreviousFields\": {\n            \"Balance\": \"93999973\",\n            \"OwnerCount\": 42\n          },\n          \"PreviousTxnID\": \"E0CD6355792E4552EB5D98BD0BB0C6A44E8BF580F6FE881DE4F7B92AA303D934\",\n          \"PreviousTxnLgrSeq\": 69015120\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rKKDmfji3MYEAtBZY3AQj8ghcuH1HXYpZC\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521717B72EB13AE1\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"3\",\n            \"PreviousTxnID\": \"8D49E8F83AC72530FA22131C8EA5B5D6AF0502CBE36BDB79CE576626E381DC62\",\n            \"PreviousTxnLgrSeq\": 68901392,\n            \"Sequence\": 67520685,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"8B8D8F8F42E1FF80FAA4587C1FC8FFBAB971E106F90027EAAE98E7BBEA1F3DAF\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"93931878392\"\n            },\n            \"TakerPays\": \"610557209\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"c46\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rUHsUfjv1Ai9KiT6R3WzLcAKvvPLao6fiK\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"8BB77FAEC89C7554884EE7FD0B37D74431208754A4682986158567B9CDB73BFC\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"23357969598\"\n            }\n          },\n          \"PreviousTxnID\": \"6607AA8B47C5A09703328966E4927134A00FE7D8885B444A13056980C5C28219\",\n          \"PreviousTxnLgrSeq\": 68037331\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"e\",\n            \"IndexPrevious\": \"c\",\n            \"Owner\": \"rpq6ooRTok73Udp4D58zesfDJeYM1t5s8C\",\n            \"RootIndex\": \"F6C1A9A92D2C7D9C2BD5ABE956113762015D91AABDC214A09E7CD9FD9E0E6AB6\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"8BE5BFE77F3685C37CDCE09721109C400B880C8277F19EE7646028FF798E78CA\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rJ72ZDPTsPvQBUxDvaQd9t2mbD8BrogpBS\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521C1102138DB094\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"7E2BE5B6405D855D4F2D5513F091672FA5AE73C61D02376CE36E832BECD14C16\",\n            \"PreviousTxnLgrSeq\": 68898385,\n            \"Sequence\": 67690999,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"8BF23735D3443BDF3E5AA7D1ABA2255ADE16A82C94D44BF681AB2597FBA57529\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"18486911984.01258\"\n            },\n            \"TakerPays\": \"146046604\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rNRaTAdpRUh1YNTBdCu6JXdQZX2pfWo3FU\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653038D7EA50921E1\",\n            \"BookNode\": \"0\",\n            \"Expiration\": 722773776,\n            \"Flags\": 131072,\n            \"OwnerNode\": \"9\",\n            \"PreviousTxnID\": \"C7E72DBC181B92CF27855A6CC85AFBEB92509A36B2C1A5DAA05443C7365417C2\",\n            \"PreviousTxnLgrSeq\": 67956978,\n            \"Sequence\": 66712392,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"4594452384.39426\"\n            },\n            \"TakerPays\": \"45944524\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"8C1483697D24A7FBF6FDE4B55B8864FF2DF00F68111FC8B3029897A6AF8AD3B3\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"ra1aHhcQxB9sHWm7ppBMKEQWs4FTfRGZAg\",\n            \"Balance\": \"497558237\",\n            \"Flags\": 0,\n            \"OwnerCount\": 187,\n            \"Sequence\": 66996722\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"8C90372D6DB0365FE7ED337653D6EB2EEF5CF2047C3D3A722C45B7EC3D7689C5\",\n          \"PreviousFields\": {\n            \"Balance\": \"421585238\",\n            \"OwnerCount\": 190\n          },\n          \"PreviousTxnID\": \"7EC6F3D6D4BBC32FD55EA7C6000870115DE6EDE068BC51D17815B75AD4205206\",\n          \"PreviousTxnLgrSeq\": 69064134\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"e7c\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rnhd3RdnLUZY4sYxS2p5zTJk24zHB7VyUo\",\n              \"value\": \"9999610698224578e-1\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"8C9BF9E020CB909E4D14AD041AD58987B6C89951271AFF4F5E5DDF9AE6F6AC67\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"3068903138.888889\"\n            }\n          },\n          \"PreviousTxnID\": \"9C14B9C58E532284B858272D5667323B8AA6C95E2DEEF0AC61A6338E0AA70391\",\n          \"PreviousTxnLgrSeq\": 69044783\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r4xMZEgWZaocA566U2xgUqKcTnXKZkBLLi\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365218838370809FAB\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"A6EDF3153C643918A17F2499D422F7D94FB1B774876122BB1567F9BC5CE342BA\",\n            \"PreviousTxnLgrSeq\": 68987190,\n            \"Sequence\": 68654325,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"8CBFA863AEA59F688B763BA6C6C0B6BC88DB59C1ACEDE517889AD1BD30F16F77\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"19362565818.18181\"\n            },\n            \"TakerPays\": \"133601704\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"1\",\n            \"IndexPrevious\": \"1\",\n            \"Owner\": \"r9dgnNCff83iCn4xXUpnLndv4tuCY23b4P\",\n            \"RootIndex\": \"8CE812238140B6B595CADE333259D8A0841974062BA3A453D8C0D1C9B904C324\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"8CE812238140B6B595CADE333259D8A0841974062BA3A453D8C0D1C9B904C324\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"2d8\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"r3uzGoy1vgEEdULUkLBRJXaYfww3nzYP27\",\n              \"value\": \"1000000000000000\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"8CED23452B605752FA85A849A96E94D64627C7DC9DDECE2EBA5144DB8D0A331F\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"7785989866\"\n            }\n          },\n          \"PreviousTxnID\": \"3C11F606F47ECC87332393BE1EB6C14B9F4F6D43076BC5B18039680F9178B199\",\n          \"PreviousTxnLgrSeq\": 67951466\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r9N61ut2QDA3sThiawsRjj3A7gvz4ZGM2L\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521658B8BCA70338\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"295F948E361781843BE241B720AC4E49759181DE1DA86E0B3C36F1678D50FF64\",\n            \"PreviousTxnLgrSeq\": 68899294,\n            \"Sequence\": 67750589,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"8CEE3776B78F8A70DCBFEC5F0DB7D358FB7CF2F9D2F5C041975E365631D39D60\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"3033952329.40077\"\n            },\n            \"TakerPays\": \"19083560\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rszRAoxvAYy352HATq5bx3YGKpMBjeW1L7\",\n            \"Balance\": \"465753428\",\n            \"Flags\": 0,\n            \"OwnerCount\": 124,\n            \"Sequence\": 66950961\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"8D04C98DC1B2E0B97A5E40C6D7D946AB3560572B36127A29250679DAC3F05E9F\",\n          \"PreviousFields\": {\n            \"Balance\": \"283179048\",\n            \"OwnerCount\": 125\n          },\n          \"PreviousTxnID\": \"7DD92C5AD42CBE0DE25E4060F637A1C45C79DF52B7FE6C27827B00EBAB81E286\",\n          \"PreviousTxnLgrSeq\": 69051610\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rpVr26FVpK1G1u8vyMwsKnpXn7iycrYise\",\n            \"RootIndex\": \"8ADEF44B796026E475DAE5AA81BEEC7626F4A38334479937A63C4357851DFDE3\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"8D075886A0361A596F66E24EF123B6B3D164B2BDE5F1FCB10341B43934EC8C3A\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"4\",\n            \"IndexPrevious\": \"2\",\n            \"Owner\": \"rpq5MrSjiQgMj3Rk8Kvf1L3Gzh4xp1CUdZ\",\n            \"RootIndex\": \"DAE42822BBC8D9446224B0B3E53894A733650689371B860F29D7E9E0A7FA8F93\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"8D3199661AC9CB3F7C87D09BEA1C0E852843E3A1EAB8434200739DAFE5398A98\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rD5TVx1akARpWNKumsadd69Wask2L69v7E\",\n            \"Balance\": \"410867584\",\n            \"Flags\": 0,\n            \"OwnerCount\": 96,\n            \"Sequence\": 66269678\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"8D5D1646D76E4A68E16A80CA2DC64633A97EECA440F486B63E59A16B017BEFAC\",\n          \"PreviousFields\": {\n            \"Balance\": \"377367584\",\n            \"OwnerCount\": 97\n          },\n          \"PreviousTxnID\": \"E29BEBE65EFB01F04F2CD7CB0040055A0E1954F4E725278619BE8E480199C94F\",\n          \"PreviousTxnLgrSeq\": 69050021\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rMQF7GUuJQHvrEkXkcySkEvb4fbsGoqGqC\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520C6F3B4077238D\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"63E8C55B83ACBD791A5AA523742EA23C1678A71D5DF48C42C66E75512E98F71F\",\n            \"PreviousTxnLgrSeq\": 69016825,\n            \"Sequence\": 67874792,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"8D7CFF0C7D38324E823F8F360B039258AA43A694142A90D96F9009A3C5C8DCA7\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"11363116299.24879\"\n            },\n            \"TakerPays\": \"39770907\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r4YqG4eX9uskEYbdZVejyRmkBgM9pSo8q5\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365210B0CE5D27A000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"a\",\n            \"PreviousTxnID\": \"1520050B0B4709A81B5283D0ACA3EF45086FC7F3F600ECF89D6BCAC7D123056D\",\n            \"PreviousTxnLgrSeq\": 68968010,\n            \"Sequence\": 66712890,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"8DAB0437ACC31CC6FDA4F3E22CD83AA5616CD44BD0ED296995EF641CA907644E\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"1150000000000000e-4\"\n            },\n            \"TakerPays\": \"540270000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"3\",\n            \"Owner\": \"rJFmgWo13y1o6C42H1LC7qDWcu7Z38QaAd\",\n            \"RootIndex\": \"C72A94BAD2392E314FD33F4CBEC4BABDCDB843A045D21A7466319730886A6ABC\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"8DAD8B2CA755F6F8EC5C1FE855CB7005ED76C828B5A611FB0DF64FCE08BBBAD6\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rDDmwBnxoXcq7PLUXTvsfVHhEqGpNCS138\",\n            \"Balance\": \"121063052\",\n            \"Flags\": 0,\n            \"OwnerCount\": 45,\n            \"Sequence\": 67491463\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"8DD6CD17EB2465E85E28661A73E05D2E20585FB90223D831662670C594045D7B\",\n          \"PreviousFields\": {\n            \"Balance\": \"112063052\",\n            \"OwnerCount\": 46\n          },\n          \"PreviousTxnID\": \"34EEC2B5C7963F9EFA5DBA466DF7CF40A6F9C8601DCD9673ADBE2E91B30AD40D\",\n          \"PreviousTxnLgrSeq\": 69034828\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rnu8qs15n6d9Xj21aBXxjdgyWz5cqNXqkf\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520E35FA931A0000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"1\",\n            \"PreviousTxnID\": \"E7BD2BB3D90389AD6C2B245CDED88A9A3AEBDC13653F03A1E889FE044CE40B2E\",\n            \"PreviousTxnLgrSeq\": 69034075,\n            \"Sequence\": 65843928,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"8E12430D1D0505781E08ED9C20107C8E04FAD1EB8786B7724A62769AA968074A\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"10000000000\"\n            },\n            \"TakerPays\": \"40000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rPWjueM7txwURGpJDWF9yQRn8cVmWQTDnE\",\n              \"value\": \"1000000000000000e-1\"\n            },\n            \"HighNode\": \"8\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"e85\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"8E12FEC126E3F9A8D8329228DBA8D32AB0030BA3806360F97E0A7AD769FE04CA\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-14389666508.9877\"\n            }\n          },\n          \"PreviousTxnID\": \"C089CBB86E6B11FC075BD5B440D012BF7BD82B006EAEC586B292293F817DD3ED\",\n          \"PreviousTxnLgrSeq\": 68764399\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rPCYDR6z5MW5EvxVzPhVa6cfLyckEDWs5T\",\n            \"Balance\": \"1903875184\",\n            \"Flags\": 0,\n            \"OwnerCount\": 452,\n            \"Sequence\": 67105346\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"8E2D61BC636AF10B44C218A2244434C5DA671C39E91964F18273A00760B63691\",\n          \"PreviousFields\": {\n            \"Balance\": \"1780077946\",\n            \"OwnerCount\": 453\n          },\n          \"PreviousTxnID\": \"B85477204508E4DF79AFE567FF78AD205DC4D6B21EAB0CC3FAF110C293CC8370\",\n          \"PreviousTxnLgrSeq\": 69063937\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rGFCR192crZ5FBYgZPMAZCeBzTrkqeFXqh\",\n            \"Balance\": \"266813611\",\n            \"Flags\": 0,\n            \"OwnerCount\": 8,\n            \"Sequence\": 68269308\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"8E445B71D47D118CA0556D76C6495CEF414F97BE6B558F89E3FCBEDD3AA797D6\",\n          \"PreviousFields\": {\n            \"Balance\": \"36972639\",\n            \"OwnerCount\": 9\n          },\n          \"PreviousTxnID\": \"BA4BB119A1FA9FB2DAC355A626C52C5664BBE0F58F9ECB30133765EA181670A7\",\n          \"PreviousTxnLgrSeq\": 69051503\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"8\",\n            \"IndexPrevious\": \"6\",\n            \"Owner\": \"r7ouMSA1S6pggGmsYRZewYQzCP7XgLiEx\",\n            \"RootIndex\": \"5B0234A08B0BAEC66DF1010AA5B53F83613F75D1E0DE932093290E8D886277F9\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"8E4475FC008DEEC090A198432AA80462AD2D48759ED86A570031FEB73F523018\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"96.888\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"e52\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"raHjNXUyRvwxN5Vr5NtQ5pbFVgbM7kqLrP\",\n              \"value\": \"9999610698359899e-1\"\n            },\n            \"LowNode\": \"2\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"8E4DAAF3BAAC6F7304C22A1AE48F2430B12E5902FF093AA34562E6D2B1E7F7AC\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"4215723963768880e-4\"\n            }\n          },\n          \"PreviousTxnID\": \"02E4E599E593D70FFC488B55C8380965951235055DC8B814C324EC7670D07507\",\n          \"PreviousTxnLgrSeq\": 69025909\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"3\",\n            \"Owner\": \"rG7WNJTTMRQma1eeWs5CDv8LwsLb3QQhvv\",\n            \"RootIndex\": \"E13AABA1FCD0DC872BE8B14C112C1DB85B441745E3A0795FCAE47C3BF53FA1AA\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"8E51FDB1AA650991645977F670AC664FF9F40B3B06F5534FABEB8CE319AA4017\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rdjYAQLjaChAyFx1sVLn4uy3mrSZy2f24\",\n            \"RootIndex\": \"8E8236388A2E99B8D577AB0340D86082C0EACC6A7CABC290976AD2A9E58E4419\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"8E8236388A2E99B8D577AB0340D86082C0EACC6A7CABC290976AD2A9E58E4419\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"2\",\n            \"Owner\": \"rpCmDBk3dADpY9cb77D1hA4NHYnn7YbJM1\",\n            \"RootIndex\": \"102FCB13221B1FA7DBC279908C881637EC908E7CFC9002AB945E38628851B30F\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"8EC9FF1230C493D2FECE02C6BA5A7684C74210A863C3214CA5254755F098FFCB\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rsz7uAUXWXXeEfR55mUHFiWbdTomtXqdcv\",\n            \"Balance\": \"189526572\",\n            \"Flags\": 0,\n            \"OwnerCount\": 74,\n            \"Sequence\": 67858764\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"8F22FF94B8C9738548F7AE7A8A697F784B1CC7302F451CF6332ED1D7D0749FF7\",\n          \"PreviousFields\": {\n            \"Balance\": \"174390223\",\n            \"OwnerCount\": 75\n          },\n          \"PreviousTxnID\": \"06381B33EE4B3D61BABE3C6AF2CA3933AC63AC21ED6D0EA30EFF6CF2188E39D2\",\n          \"PreviousTxnLgrSeq\": 69063826\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"raxn3rqqdW28ZVrFAQ33AUrvdaTSv34DSX\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36522386F26AB38C66\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"4\",\n            \"PreviousTxnID\": \"FDB80739A2E6E0CFEF0753FBAD11F4E0944C70E51DBF77000D455F02502B529F\",\n            \"PreviousTxnLgrSeq\": 67971771,\n            \"Sequence\": 66385850,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7785989866\"\n            },\n            \"TakerPays\": \"77859898\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"8F34A5485D6A6FF2569181DF6393526FC7A7FEC8CEDB31741ACB385C65B239CE\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"ee0\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rh8MNcxKuDcaMRuSj6P2rcMGxDiBqyZJJT\",\n              \"value\": \"1000000000000000e-1\"\n            },\n            \"LowNode\": \"1\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"8F6D83ECFF6AC96D378CEEF3FCAD43BF3BB2D1D63450E137460B5FA5BF3854AB\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"2241619378153860e-4\"\n            }\n          },\n          \"PreviousTxnID\": \"669A0EE9EE4902211601661BFA84B651F4FE399E98089349002242BA3BE2E0D3\",\n          \"PreviousTxnLgrSeq\": 69053203\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rnEA5VmDp13iDZdcGUg2X2nzYkaKKDrf86\",\n            \"Balance\": \"461056355\",\n            \"Flags\": 0,\n            \"OwnerCount\": 25,\n            \"Sequence\": 67525877\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"8F86D31780CC8598B47FEDAE66D116C2D36741FB86D372EBC3541574F19298EB\",\n          \"PreviousFields\": {\n            \"Balance\": \"86290553\",\n            \"OwnerCount\": 27\n          },\n          \"PreviousTxnID\": \"EBF38113476922BF5BA289940F1027132C7C63950F87B6BCB010666188546340\",\n          \"PreviousTxnLgrSeq\": 69063697\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"13244028037.43416\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"835\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rC4M78e2ktZz8QwB5SUSEeeeSi5rcnxrJ\",\n              \"value\": \"9999999999999999e-1\"\n            },\n            \"LowNode\": \"9\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"8FC8CAEC43FDB7D05FE0F882BFC25B68DC1F078433F7A770FA6A12DC48579D46\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"54488056074.86833\"\n            }\n          },\n          \"PreviousTxnID\": \"808483DE8C02BB3297A29B4BECB913C6DC226D403087E9AFA8A0E7947CD351A3\",\n          \"PreviousTxnLgrSeq\": 68991025\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rNdfpBhUB1ygnu4z7ebbqLBQH5K8zejbu6\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36532386F26FAD66FA\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"6\",\n            \"PreviousTxnID\": \"AA0224E4EFB45ED6D563E06971CBF6F0B8283D89B8025C802D230D821E528F14\",\n            \"PreviousTxnLgrSeq\": 68198420,\n            \"Sequence\": 67194292,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"8FEFDF70C04F4A464A40F28CE9099FC44FBB2D88106B42CB9B9762B0F1046351\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"62287918928\"\n            },\n            \"TakerPays\": \"6228791892\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"e\",\n            \"IndexPrevious\": \"c\",\n            \"Owner\": \"rfq8N8xR3stwknY7Smup425CUFCjsTwcWP\",\n            \"RootIndex\": \"C9B0218036E7A5B704E0BEFC8D5439F67D44ECED18963082896AF65D15B592EA\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"8FF429FE29E036AF74AD3DC6A130EF06875D79CDAEF8B249B199AFD98AD22EB2\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"11\",\n            \"IndexPrevious\": \"f\",\n            \"Owner\": \"rJw1L2RZTiPTQJSF7KmstuGrdNrTmdvAjb\",\n            \"RootIndex\": \"5D4B721E3B76FE2E0C14041755528E25EBBB73DF149D73622C0E7A024CC0EB64\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"90014A87370B98AE491643529966A9D4B4A7566F30FEE3E586E7956D6FB0CD8A\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"6\",\n            \"IndexPrevious\": \"4\",\n            \"Owner\": \"rJQTrHKExfeCjschk5MGwPZuditZ8vdWnD\",\n            \"RootIndex\": \"02462BE928A166B37F37B65644E7812B423EFA3A719D16843C93395E577601F7\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"902B1B5AA65BB76588C0504E372312140AC838CEB9BFE88F3279972AD463D4EB\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"ra1aHhcQxB9sHWm7ppBMKEQWs4FTfRGZAg\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365222761927657C27\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"8\",\n            \"PreviousTxnID\": \"45D4ED30B65E2110D25338EA6644B9ACC19CE6AEF589C9AB2D0BC43F17554D59\",\n            \"PreviousTxnLgrSeq\": 68897156,\n            \"Sequence\": 66996590,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"902CAA2A22E92E3831B22A3D6B06BE8F81C718B54D76995A124F836BE8B7BE73\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"2600000000\"\n            },\n            \"TakerPays\": \"25219999\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rEJjxWqDiG1H1PDqXXnwdHjxAUTnVGmrDS\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"HighNode\": \"7\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"e21\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"9066C6B5865670FAA951BF0737EC7147A03C93F42E77B65FF8A23B303DC5A77F\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-6343856961.979338\"\n            }\n          },\n          \"PreviousTxnID\": \"D0A839E1B9D5B1A150C4B07F1B39E7D501953279E19F512ED5AD33D494B947EA\",\n          \"PreviousTxnLgrSeq\": 68899027\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"2\",\n            \"Owner\": \"rDwdy5963o51eDFKzgJ23VJUy44AX3QrS6\",\n            \"RootIndex\": \"0CD447767BB3C0A3D243BA94388B837204C6852387EAFF4B9A44A0A48C80C5CD\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"9078B56B66F334C0268F806D7E9B889D5FA9CC2D9EEE25E0A031CE2F3CAC4440\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rLBBX2NYwmoiRB68BQP3eo15BbaYtR8qdK\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"5c5\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"907A824516AE3E05C26B9840906A35FE583440DDB29D6955D983EFCAE97880E4\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-7785989866\"\n            }\n          },\n          \"PreviousTxnID\": \"9E0FDE600D96D3A7FD8CC4F2E9A4F8112D7454008FA2C312BF96F37F1E9613FE\",\n          \"PreviousTxnLgrSeq\": 68000502\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rNCESwgSpY1pUyhQGzGd7T38zXXzxUCLLj\",\n            \"RootIndex\": \"90ACB709A496171CD81FFBDB666F63DE3FD1FBC6269F7A9E5F77A2BA51EA5E95\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"90ACB709A496171CD81FFBDB666F63DE3FD1FBC6269F7A9E5F77A2BA51EA5E95\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"7\",\n            \"Owner\": \"rJmWpXLdftZbNdPMYkezgKmEya6R6cAt7T\",\n            \"RootIndex\": \"0A887E6C4C421FD4F584746E5932C3025BEBA2E192D8324A0EEA33EBC4EDBD6B\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"90BC8F9E74CA0FD6BC40433A2AD516FB56A9879DDFC0E83560D9F7223714725D\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"b\",\n            \"Owner\": \"rHHviosMrm1hi4Nfm7MTipMw2oeEQRTeod\",\n            \"RootIndex\": \"D328BE27A8ADCB49C5630044BC76FEEF5D15AA7B44CDE83B9594167A145F8DD8\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"90D3DCE2DEB33AB44424764DF2E008B78A19FAFFD62349422D26132241A574A0\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"eeb\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rDTDTzVK47KCcGmiywZHhKsDP7323fqGGL\",\n              \"value\": \"9999610698224570e-1\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"911124D021EF469698FF1C1ACD8B52413C8703EDDF43E5537B9DB954F4F6CD6B\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"11000000000\"\n            }\n          },\n          \"PreviousTxnID\": \"E644339C3577108557CE43BC89F2FD81B5D0250CA56B9E05C6B9B24CD0C6CFA0\",\n          \"PreviousTxnLgrSeq\": 68922765\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rGRyfRcJ7cSYSu6rw5VpNJReEZt9Gzy9a7\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652110D9316EC0000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 0,\n            \"OwnerNode\": \"2\",\n            \"PreviousTxnID\": \"D7AF23B03AAD8D8801BD8B1200D65E7A132D5936C895ECB91B93F0207535CD41\",\n            \"PreviousTxnLgrSeq\": 68990951,\n            \"Sequence\": 67157738,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"9143CDC59F5331B73E9CB8C3D35BB4721AD4567F9B290396EBB942A50F435A51\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"4700000000\"\n            },\n            \"TakerPays\": \"22560000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"3\",\n            \"IndexPrevious\": \"1\",\n            \"Owner\": \"rLFVckNbciXAqgedJM92yZX7653rXcn4JZ\",\n            \"RootIndex\": \"C8327D5445C44DCB81098FC212E068E5256E06DE1F6B3D91B2C54E3A3A49629D\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"9160C72A389C43454DD96628309622BAB1DAC3420F651664770A5E9B015D94B2\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r4DDKcQaxRVhr17DMzNSrAYBvarHRXBJg5\",\n            \"Balance\": \"169734298\",\n            \"Flags\": 0,\n            \"OwnerCount\": 59,\n            \"Sequence\": 67317148\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"916311337B94228EB104F9CB7DA0FD22EB3BF6C44CF6C040BF26747F78EF82FC\",\n          \"PreviousFields\": {\n            \"Balance\": \"130598615\",\n            \"OwnerCount\": 60\n          },\n          \"PreviousTxnID\": \"71DA9DA69E4D326252F42FD26963C499CA75F4963BE4EE027496D288195FBA73\",\n          \"PreviousTxnLgrSeq\": 69063539\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"razceqmpdpjLd5o52i1GiaZJhmB8SEbfCa\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653049159B00C8AA4\",\n            \"BookNode\": \"0\",\n            \"Expiration\": 723610848,\n            \"Flags\": 0,\n            \"OwnerNode\": \"c\",\n            \"PreviousTxnID\": \"799B6BE0F830A026BBB49806F9092AE5FA3826A62E7FBE8AAECBEFAEC0312CB0\",\n            \"PreviousTxnLgrSeq\": 68154171,\n            \"Sequence\": 1412,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"919A80E2A54ACE706274991FEF8315F5E19DB913BE6DE1FF87A205A98F5E68C7\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"1555555540000000e-4\"\n            },\n            \"TakerPays\": \"2000000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rpUjTJzaJN22XoKjav3YSk3GH9t3GZqK8N\",\n            \"RootIndex\": \"919A94F94235AB5BD99971FA41095BA95FA3E89503A417650FB6A12FF2BFC102\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"919A94F94235AB5BD99971FA41095BA95FA3E89503A417650FB6A12FF2BFC102\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"ecd\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rshXc1NnrPiNRvKbbmnfgQpiSGYugiFUG7\",\n              \"value\": \"1000000000000000e-1\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"919D5CAE5C652CA11EA1D2203CA59EEA018B7473BBADF1DC3820A109264E9C2C\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"20000000000\"\n            }\n          },\n          \"PreviousTxnID\": \"9260FDAC058C2890C9674AB53AE6CF6B4D9491A4B6876DAB1F3C7C461FF87B03\",\n          \"PreviousTxnLgrSeq\": 68922656\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"4282294426.3\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"1e8\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rsGTbAufvBkkN5xpaKZtEMCagAW5SkJEUL\",\n              \"value\": \"1000000000000000\"\n            },\n            \"LowNode\": \"3\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"91E441E3B42DC84C570950E2A99CFA8181150D71832E20A6FE351BA18BB756AD\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"7785989866\"\n            }\n          },\n          \"PreviousTxnID\": \"13354149C4A4F58B8F896F37A14B9C5D638BF3762182FB18A729E90B5BD74E61\",\n          \"PreviousTxnLgrSeq\": 68000941\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rPBCCKXYaB9eBeVKenvGeGKywHUVHFQmSS\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652232BFF5950DF00\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"2\",\n            \"PreviousTxnID\": \"D592CC5B0A72F16D6AE93B2EC7688651A87BD79A0090816A7D195ADB05BDBCD1\",\n            \"PreviousTxnLgrSeq\": 68897310,\n            \"Sequence\": 67544539,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"92079FE6B2192331C0AF6AF63A7E953807B1807B251D60447B1985276D5AA2F3\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"10000000000\"\n            },\n            \"TakerPays\": \"98999999\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"d\",\n            \"IndexPrevious\": \"b\",\n            \"Owner\": \"rC4M78e2ktZz8QwB5SUSEeeeSi5rcnxrJ\",\n            \"RootIndex\": \"35E481FF021EB94C809B1D4A952A1AE9563777CCB354A61030354C2CEF3080EE\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"92086C0FAA586D21483CDCF40C6B51A1578EFED9B29FE40EFC04EBBE721FC8F1\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"6\",\n            \"Owner\": \"rLMqPYdzd1JeWQ6PsjxFt4jXMZo8vDgJrS\",\n            \"RootIndex\": \"35ECD189742E7DD941ED19DCBCEAEF9F6EB3B0FBCD808AB016BB4AF60C450C73\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"920FA960F27604DCFD59498902F4AD179541853CF064800A043BB28D82F2AD64\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rA1sVxrZ16rSr1SrxUfsHAR592J2X4yVf\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36522386F26F41D1BF\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"1\",\n            \"PreviousTxnID\": \"E88BB803B4AFDAD373C05447312D91DDBD44DDB07AD1F276761C2CEB00AFC589\",\n            \"PreviousTxnLgrSeq\": 68155502,\n            \"Sequence\": 67344711,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"79184989866\"\n            },\n            \"TakerPays\": \"791849898\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"9249BCFBB196AD755BB464AF08D9FCB5C682157CE3059195F9F6BF89D6C18237\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"7\",\n            \"IndexPrevious\": \"5\",\n            \"Owner\": \"rPSYhGCFb4y7ntd2VaJzTS4eqiw91wynZn\",\n            \"RootIndex\": \"646052D076294C36B492BF0EC95E7B772400818712A8359B9AF4ACCEFD64520B\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"9255C41DD68271203C4642857456BF845D2BFCE9B49AA1BC2651992B314B66F8\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rhEwjxZkMbARLTQmMsR7N6MxRDUUKLF1RP\",\n            \"Balance\": \"1457879430\",\n            \"Flags\": 0,\n            \"OwnerCount\": 386,\n            \"Sequence\": 67389570\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"92A9E2244C25C6575A8A190C70E026839E87D546661810815EBA0AAD661D9EC9\",\n          \"PreviousFields\": {\n            \"Balance\": \"836117630\",\n            \"OwnerCount\": 387\n          },\n          \"PreviousTxnID\": \"CCDDE6CAB175FE323E92982D6CECD8E16AB1A401426433AFFF06BFD1C18F0D44\",\n          \"PreviousTxnLgrSeq\": 69062660\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"1\",\n            \"IndexPrevious\": \"1\",\n            \"Owner\": \"rzHXP1zuBviNtiogFMnNDcoUg88bprjNy\",\n            \"RootIndex\": \"9301032EEFBFA85B0DC8595A1F5F8CF18CCEDCEF79BD9492DFDB8FF49927596E\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"9301032EEFBFA85B0DC8595A1F5F8CF18CCEDCEF79BD9492DFDB8FF49927596E\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rGgYjYE7aH7sY7uc9BHpks2NDgVkptYkDh\",\n            \"Balance\": \"229406384\",\n            \"Flags\": 0,\n            \"OwnerCount\": 80,\n            \"Sequence\": 67480751\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"9304B837C1754EBA6E88B3E1764EA4A07D2BA9044AB93024852E05C17B7F10DC\",\n          \"PreviousFields\": {\n            \"Balance\": \"174406384\",\n            \"OwnerCount\": 82\n          },\n          \"PreviousTxnID\": \"B1B56A1D184D85814FA0054EACB5EE5EA4549CF137E01227597259FD3A06BFEB\",\n          \"PreviousTxnLgrSeq\": 69044856\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-31039046763.62662\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"r4F6d9gkY5JPEkDEmUwcLgGX2NSV6o7DyR\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"HighNode\": \"1\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"97\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"9327C09BBF37F75EE8AE4716DBB97CFFA9DA48E6B7BFD3B06A75AA9A2BEA6E42\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-52815511103.62662\"\n            }\n          },\n          \"PreviousTxnID\": \"6BC19370431EAFA2D1FFE741C0B7BED3D3858CD4AADF5B6D7C3A5AF73D5148A3\",\n          \"PreviousTxnLgrSeq\": 68899329\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rQDZDYodywYJULXJtv68QyoDbkV5EZgh9s\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"HighNode\": \"1\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"4fc\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"934A31616874C89536E2303D8F46CD7AA1D00A856E0C165DF489DE476EEC867F\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-88771558812.8656\"\n            }\n          },\n          \"PreviousTxnID\": \"82573BAB4354466C679F0B35F488861B2CFB2C244907229E05E76C15D35DC191\",\n          \"PreviousTxnLgrSeq\": 68943397\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"1\",\n            \"Owner\": \"rUN6cc1UZw3jJRFAQpzYZdwA75aKR6qJE1\",\n            \"RootIndex\": \"CA453E2FFF0E501AEC3B4107651F9B86D9B639E2D060D2F4914252D88D6BFE2A\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"934AF0C5D050E8991E13DFE10FC6ABBEF2EE44C03C4A3D548B6DCAD3D95FDED3\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rqben5VgPyij1hAY4bi4yPyp3vf6GgY3z\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521C6BF5203F5780\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"2\",\n            \"PreviousTxnID\": \"0CA439269500896934E2A54594889A2557C95248020B1EC0F631A1D22C8B3AD9\",\n            \"PreviousTxnLgrSeq\": 68966843,\n            \"Sequence\": 67935100,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"1666666666.65\"\n            },\n            \"TakerPays\": \"13333333\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"936E83C62FF02F3C06AA8C3212C6FE0E8D1699A25E6B975C51AD0BE41EAB7770\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"9999999999.9\"\n            },\n            \"TakerPays\": \"79999999\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"2\",\n            \"Owner\": \"rsVD9Hdd3p4LMC7vUwvx75uNLY3d3eiE2b\",\n            \"RootIndex\": \"EC9547207E43DF1A900D61C038EC301960A5207C188041B2F544A5122E56D8D5\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"939AED08E4C535E088A6B559E89B9E8E814F6CD56CAC6ACE791BEC2FD8B22248\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rDjnNyWymW4pUzukDcEtmySixuXR4RLsKV\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521C6BF526340000\",\n            \"BookNode\": \"0\",\n            \"Expiration\": 723722272,\n            \"Flags\": 131072,\n            \"OwnerNode\": \"1\",\n            \"PreviousTxnID\": \"D6BF189A67B22328859061BB42BFE663CF74485CDBA408B27FF3C03B199E6FE2\",\n            \"PreviousTxnLgrSeq\": 68181227,\n            \"Sequence\": 67708007,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7785000000\"\n            },\n            \"TakerPays\": \"62280000\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"93AA9A62BFF21C35FF1ABDB5157EC3A120B78CB7CDF4D0838AE4FF647E2DEF31\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rwCzLwdFp6DLPMfZRTUN67UB79XbbmYt2o\",\n            \"Balance\": \"1306985341\",\n            \"Flags\": 0,\n            \"OwnerCount\": 28,\n            \"Sequence\": 67150583\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"93C73C5D1F627738BA38ACA7A02F35D044806D3B7AC6CA5433B5D365DA750DA6\",\n          \"PreviousFields\": {\n            \"Balance\": \"506985341\",\n            \"OwnerCount\": 30\n          },\n          \"PreviousTxnID\": \"653636FD029FF6A3620E6BD82B418A9E43310B41015D22FA3E21896C708CB5AE\",\n          \"PreviousTxnLgrSeq\": 69059990\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"3\",\n            \"Owner\": \"r9bsFjjrcnmfwEe83kG4LNhBUAcL3af2Bf\",\n            \"RootIndex\": \"69F140EA77614B7B841610309B586AE7A0CB3AD0F2CB745A7E58C197ACBFC5F6\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"944CAE81374047E51BA3367DC4D499F12D508A04DA759249B31F1DEAEAEC35D4\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-93432078395.2398\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rEay1pxUyiL4ru86hJLv4bKCzwm8EL4Mzw\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"38a\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"948DFAB6CC809B3D558C128B998D5ADD9FD58AB68332B76C5471FA7104088192\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-1902670783952398e-4\"\n            }\n          },\n          \"PreviousTxnID\": \"2BB96DD689AFCE2E32AA99C1DFEDBD9B58E5519471F251591F02E07DCBE96264\",\n          \"PreviousTxnLgrSeq\": 68899342\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"3\",\n            \"Owner\": \"rpGhnBcEyRdDNyy4AD2BwyZgWE4ERu8eqC\",\n            \"RootIndex\": \"A1780603D2E9336F99886893CA98C7CE6D392E960F3F4E5A5857558BC2359694\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"94C597C44370A412A14C057EDCF14D8768A0844D54208DCAFFD3558F4E7A8B27\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-10000000000\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rGBMsWXEYwQCyqK6QsrivTQsACXbfL1735\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"92d\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"94C8059F56E24652176CC82847785B1F82D469C8C9D326AC1EF3B2ACF32B90FF\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-18000000000\"\n            }\n          },\n          \"PreviousTxnID\": \"20431A60B0E053A70C6756B4BBADEF5E600E86C214481A81FF4853DAC6CB63DB\",\n          \"PreviousTxnLgrSeq\": 69044755\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rEX4EMcBRESCnk2kKB1Yhzc5KSCib7Qh1W\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365222D10C4DFAF288\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"d\",\n            \"PreviousTxnID\": \"C7FE316A4199CF549AC2AF21FAAA652329EFFD7136697CF76A64C79591287656\",\n            \"PreviousTxnLgrSeq\": 68893616,\n            \"Sequence\": 66347337,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"10379874285.71429\"\n            },\n            \"TakerPays\": \"101722767\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"94D4C8513842EEA02FFEB4C46C146A6BA41D71A8DE49DFDCB070CF0743414BC0\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"20000000028.02702\"\n            },\n            \"TakerPays\": \"196000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r3LLQmhVJiQ3r5e3QCo15yaDumDNp7Gn1r\",\n            \"Balance\": \"261258148\",\n            \"Flags\": 0,\n            \"OwnerCount\": 96,\n            \"Sequence\": 67712627\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"94E775542858A07F1738DEE32FE0995B874FA42A04C91F39FAA5797BF4ED7663\",\n          \"PreviousFields\": {\n            \"Balance\": \"230114189\",\n            \"OwnerCount\": 97\n          },\n          \"PreviousTxnID\": \"FA574AFBC02737EC092414A0450818391304DC48E13EE6E3954D2B8C945B21E0\",\n          \"PreviousTxnLgrSeq\": 68931794\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rNd3R5EaqkBC3EguG1mmwhjpKqLDTjBNwQ\",\n            \"Balance\": \"243217443\",\n            \"Flags\": 0,\n            \"OwnerCount\": 93,\n            \"Sequence\": 67165982\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"94F506D0B3736425AB5EFEC62706D517D44A8178A04C40FD16BF441F2C57D3EC\",\n          \"PreviousFields\": {\n            \"Balance\": \"212384924\",\n            \"OwnerCount\": 94\n          },\n          \"PreviousTxnID\": \"85BE0D0C16A38ACF9DEE3916CEC2FA1AB095EFAC97EF90C3186B41B04623A27F\",\n          \"PreviousTxnLgrSeq\": 69041987\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"11\",\n            \"IndexPrevious\": \"f\",\n            \"Owner\": \"rUrbD1rAAkr84UER2ZUxTP5ohhSKzvC8tc\",\n            \"RootIndex\": \"2E290E48C7A786F18B6FAFED5F9AFCBF8782742E78D855EFE4A70296B8E7D431\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"94FE7889AEBB155E78418A93E7538F936323B6E122D62C47F158DE88951A8DC2\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"9\",\n            \"IndexPrevious\": \"7\",\n            \"Owner\": \"rGgtpbT9ffSEHApdNkRC4Mu9tsYPRMKx6D\",\n            \"RootIndex\": \"0883E16B78022D74DB60B47419958512856D653369DAA24FA8FC34C555DE1EB0\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"9523F6313DF8EF1C22648D40137466A7596C05131185A88919681531994FCADE\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"r92aDr7NzvcY9DSKLE8V5q7dvnu7LvVjWB\",\n            \"RootIndex\": \"954F697E3FB5849BD3C39C9599DD08FAD9B82BBFB818268AA5C43D09E57540BB\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"954F697E3FB5849BD3C39C9599DD08FAD9B82BBFB818268AA5C43D09E57540BB\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rMQGzm5niy3VzeWEqokwb28toV137fbiYJ\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365307A369E1A90D10\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"1\",\n            \"PreviousTxnID\": \"FC632F710DC2D8DA027DDCD0054A531A5DA89C3E583DB0DD997423F1661BB1D5\",\n            \"PreviousTxnLgrSeq\": 68988365,\n            \"Sequence\": 67388262,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"9555EF4180859DB6C70622285B55DAB22629990685FB217306259F1937F871AE\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"4658203417.403399\"\n            },\n            \"TakerPays\": \"100151373\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rQnNwoWPxGyxMoLogTPHYeK1hGYwJ3b9Sz\",\n            \"Balance\": \"246697559\",\n            \"Flags\": 0,\n            \"OwnerCount\": 25,\n            \"Sequence\": 67671655\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"9579B24648F90EC091D3C7475635E759E26AF5A224C0B612CF0849656E3C0984\",\n          \"PreviousFields\": {\n            \"Balance\": \"62348540\",\n            \"OwnerCount\": 26\n          },\n          \"PreviousTxnID\": \"D951CA8640C0507AB3A3C2D234822601E3F8A4D9EF2C9CBC8BF2286A76F7FD4B\",\n          \"PreviousTxnLgrSeq\": 69045719\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"a\",\n            \"IndexPrevious\": \"8\",\n            \"Owner\": \"rL92EVWszBA1ZbZADyficMkRFVvpV15sEE\",\n            \"RootIndex\": \"D5D0C8099CD01562CFCBE8898E941B29B2113B8C1B2E1EE2866D72652B49FCAC\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"95A0001F1DF5CC0FA204CE64CDBECB020A6639B8EFE937D50D18FB2C9C9CBF55\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rUqgMfiCKp2L5Y1zobkQTgSdVYLp1PASt5\",\n            \"RootIndex\": \"95FD43EFCFAB57F3215722595C919358CE09EA214E56AB90D3077D9F0CE91A43\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"95FD43EFCFAB57F3215722595C919358CE09EA214E56AB90D3077D9F0CE91A43\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rnZj4CQouegP4s5Hu2LxBbjCfGSWQuzRAp\",\n            \"RootIndex\": \"9609C8EBCC4605ACC569C7CD2DD72AE8B16E5AF521552A4A55C3C68D6C08F7B7\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"9609C8EBCC4605ACC569C7CD2DD72AE8B16E5AF521552A4A55C3C68D6C08F7B7\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rsF1oN5xbuJQ3wPD87jjDvEde3VKwSrAue\",\n            \"Balance\": \"2662627254\",\n            \"Flags\": 0,\n            \"OwnerCount\": 224,\n            \"Sequence\": 66174095\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"96245166AA6BFE2DB05BF6FA4D3DC87F85EA309E1D51DB685F1499F421BE0AB1\",\n          \"PreviousFields\": {\n            \"Balance\": \"1121001261\",\n            \"OwnerCount\": 225\n          },\n          \"PreviousTxnID\": \"92698924CBBC0BB712378F662BFF74D811CD8339A24C4B7815CB2CE1FE296D52\",\n          \"PreviousTxnLgrSeq\": 69061627\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rNqG1shTsAyEcTFcAeBxGsLpmaNAGbcESv\",\n            \"Balance\": \"829374067\",\n            \"Flags\": 0,\n            \"OwnerCount\": 231,\n            \"Sequence\": 65795242\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"962F7231B19544370AF777A8EA4F0A4D39957DA9F903BDDDAB5BE0E336880EA0\",\n          \"PreviousFields\": {\n            \"Balance\": \"474000000\",\n            \"OwnerCount\": 232\n          },\n          \"PreviousTxnID\": \"F4DF0A62AD26DA05F81AE6E514DBBB509B624AEEC6374EB275D832B2D1B2DBEC\",\n          \"PreviousTxnLgrSeq\": 69061696\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rpFYhEoT7AeTuaAZYwU25Gjn3i2VygsMnP\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653038D7EA4C68000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"1\",\n            \"PreviousTxnID\": \"9D788653D29AE5B70877217B97E02949CF62447FE1A6ED96A64CB558120A631D\",\n            \"PreviousTxnLgrSeq\": 68148387,\n            \"Sequence\": 67371826,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"9635B3718CA312A35EE2F58CF2427FC9CB536C86C293E9B373C81D2A6D34A6C3\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"5000000000\"\n            },\n            \"TakerPays\": \"50000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"eee\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rwBDva3asfNrXQeBmnkV3xbMnw7xi5A3dE\",\n              \"value\": \"1000000000000000e-1\"\n            },\n            \"LowNode\": \"3\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"96404B44CFE3431E4B56CF16873DB1CF79BDB2FB976CB9F509B6F00BAD4939AB\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"37614271082.48669\"\n            }\n          },\n          \"PreviousTxnID\": \"8AF462F67C22FD41ABE8B62B47362827D6F581EEF8D066CB190FB8BE0E501BF6\",\n          \"PreviousTxnLgrSeq\": 69005311\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"raPCjF9ftTRB7LYgehLYKBtzf8Eg4qp8Kv\",\n            \"Balance\": \"876293123\",\n            \"Flags\": 0,\n            \"OwnerCount\": 409,\n            \"Sequence\": 67504932\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"9662775CA7B01A70BC23367A94C8DB860922DEE5ACCAFC9FEE176C725F065A62\",\n          \"PreviousFields\": {\n            \"OwnerCount\": 410\n          },\n          \"PreviousTxnID\": \"A7A644A2C1BBA75B452E110A717BC3CD33B89F20676DAD330EA43EB00A5BC0F1\",\n          \"PreviousTxnLgrSeq\": 69018808\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rGUKHhcBwNpS8WUqpxNsFW6Yhy6ZwEuATq\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"984\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"966823C5C97A693AC4EC66CB0328D38A294F42D816C0BBB9F0B8D1E00E997803\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-7785989866\"\n            }\n          },\n          \"PreviousTxnID\": \"6B73FFE2B19658B848FE5C3D42FBDE14E43C9FFF55903687B68378F4FE40848E\",\n          \"PreviousTxnLgrSeq\": 67991927\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rpq5MrSjiQgMj3Rk8Kvf1L3Gzh4xp1CUdZ\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365304D4E9ACE50000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"3\",\n            \"PreviousTxnID\": \"C36B2B1D5595DDF0B6BD7C8871C11439908323E675F3BC0E3D76FFBF49CCAE42\",\n            \"PreviousTxnLgrSeq\": 68889017,\n            \"Sequence\": 67528318,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"967B7F95D0E4CCFBF5E78781F4FC2DC0D1A51321722460CBC409E9E45CC0C5E7\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"5000000000\"\n            },\n            \"TakerPays\": \"68000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rphnh8aG8oBCdrBcgxYgNY8yVqi3b3XqbT\",\n            \"Balance\": \"2309245316\",\n            \"Flags\": 0,\n            \"OwnerCount\": 191,\n            \"Sequence\": 66157881\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"9681CD5A7800ACF9B405D76027D4A7A84148C40E060EF0D89EF12CB4EA1ED308\",\n          \"PreviousFields\": {\n            \"Balance\": \"1756757317\",\n            \"OwnerCount\": 193\n          },\n          \"PreviousTxnID\": \"C5375CE0975CE0C4996065F9B2113E4830C461DFB6EAAAE34C7EC8782B76EC0A\",\n          \"PreviousTxnLgrSeq\": 69063669\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rLxd1PUJT8xrZ59tUuPANfL87xkBXnkeKi\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365211C37937E08000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"3\",\n            \"PreviousTxnID\": \"61AD844E51164912D0BDE0962AB8DDE81A70761F543C724600AFC13BE9809CB8\",\n            \"PreviousTxnLgrSeq\": 69006510,\n            \"Sequence\": 67646644,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"96B500C2B70F292FD3273F75797086BB92C3765AF2BB4A2618B610FE138D57E7\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"2000000000\"\n            },\n            \"TakerPays\": \"10000000\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rUrtZA3gFTbfu9vkdygv2jzgBoFRYMNv5L\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653074876D147C837\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"7\",\n            \"PreviousTxnID\": \"CD7A9DD0366FFFC9936758787B6336800F7A7F8EB166FF790AC3488751850E09\",\n            \"PreviousTxnLgrSeq\": 68942739,\n            \"Sequence\": 67387659,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"96C0827547DA2A3A37744EE2529D9A4C748C935472F9F4E9292134A03E9DE40C\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"10827596337.80048\"\n            },\n            \"TakerPays\": \"221965724\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rGMM3Ag2DiYP71uk8mWQi8fafCQczx8ouK\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36531AA535D3D0C000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"c\",\n            \"PreviousTxnID\": \"C1801D52079FF0BBC2778F4864854C7C48EDC1E1D0EDA5E65EAEF9E5730A4E4F\",\n            \"PreviousTxnLgrSeq\": 68899493,\n            \"Sequence\": 66413129,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"96C4D7EBBD6665BC93142EB680EAADA44C24D3D91F61F8CA8F3164FB70B26962\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"30000000000\"\n            },\n            \"TakerPays\": \"2250000000\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rsdrgJ5xtkPpnWfJeeshHZLWmQEMS3cFzQ\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36531550F7DCA70000\",\n            \"BookNode\": \"0\",\n            \"Expiration\": 722826231,\n            \"Flags\": 131072,\n            \"OwnerNode\": \"4\",\n            \"PreviousTxnID\": \"7F793704F8B164E18821AD14096E8734BD1DAAE6A6DFFCB85F8B44827429E359\",\n            \"PreviousTxnLgrSeq\": 67961797,\n            \"Sequence\": 67219916,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"96CF5B8D5BCFA894D33E413C95355AD07B81D9E226CE55B60CD20805C31A9DA7\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"5000000000\"\n            },\n            \"TakerPays\": \"300000000\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rMWLJFUZZk4ueZuy4yiLPJa23dGih6phUa\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36522386F269000AF9\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"1\",\n            \"PreviousTxnID\": \"D265635453FD4CB02C0B4C8D0602991CA1EE0BC7D0FD4BCA20FD564BA83C23B1\",\n            \"PreviousTxnLgrSeq\": 68154279,\n            \"Sequence\": 67175788,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"3503695439.7\"\n            },\n            \"TakerPays\": \"35036954\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"96DB0A7C3B3620DCA7F215195024D3C073111AE6955BCC1FA19B94D7EEE5B8CC\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rQHveZ6yCKwNSGRiu4QnTSjJbLRfgBr72p\",\n            \"Balance\": \"5113811531\",\n            \"EmailHash\": \"36C976B27D0946011AF72AF219A9D5C7\",\n            \"Flags\": 0,\n            \"OwnerCount\": 349,\n            \"Sequence\": 66308805\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"9700341ABB2B9277846F407BC29EA2028EA821EF45294E3B207D4D800CAC75D5\",\n          \"PreviousFields\": {\n            \"Balance\": \"713811531\",\n            \"OwnerCount\": 350\n          },\n          \"PreviousTxnID\": \"6A2BEDED0DF7C0EB98B4A7060EB16E637027CE1C78BD923A4A9BED0D2D4DFC60\",\n          \"PreviousTxnLgrSeq\": 69059991\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-84765750330.1656\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rNirEvsSGiRDGtL68t6MJwfAyU1MExreYv\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"HighNode\": \"4\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"ea5\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"9708030D0AEDC4CE8566CCAC8A478DF1B240188C810F7E718DDF64DCF86AD27C\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-1096691943831776e-4\"\n            }\n          },\n          \"PreviousTxnID\": \"E5FA059CC9D9E47042AC426F0B89D1EB105E67D8E9DAE407244B1B196B0C50A8\",\n          \"PreviousTxnLgrSeq\": 68996643\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rBLh3SrV1ALEEfJiHKYiaSxoRxG7R9SuEh\",\n            \"Balance\": \"1042161240\",\n            \"Flags\": 0,\n            \"OwnerCount\": 140,\n            \"Sequence\": 66512368\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"9716F9A47F27E835558DA00CD490CD1451E573028C86651537F9C3A058B91656\",\n          \"PreviousFields\": {\n            \"Balance\": \"836611108\",\n            \"OwnerCount\": 141\n          },\n          \"PreviousTxnID\": \"B12353F83B0F7D36442C0E6E1102314EA3003BBD3F2EAFFB6D6F3A1EABCB675A\",\n          \"PreviousTxnLgrSeq\": 69061304\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"e97\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rsRPr4ZrFePB3e3SVXBMHpwLCfc97qZq7p\",\n              \"value\": \"9999610698224583e-1\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"971C375B114CCB84878CE442C4E17F6CBC58271E7FF8A5A7ED3FC81A5793C4DE\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"3500000000\"\n            }\n          },\n          \"PreviousTxnID\": \"202F976F658DEF73049F918F5D60C05DE871BE89E1BC09ED8C3D341EF4D32E64\",\n          \"PreviousTxnLgrSeq\": 68922054\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"e\",\n            \"IndexPrevious\": \"c\",\n            \"Owner\": \"rD3MRnTt6tvvtt7o7F5p8B49toAUWnoLmu\",\n            \"RootIndex\": \"5CF9C55A92529BDDD9DF7B17B697B7FC8E12F711D70E611FD818532D15244F1A\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"971C8B78E2B1CC3F0DE1ACF21C9C7F16579DA0DDA58001903855584BD5C98E9E\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rMrt91RkHZwmYfUbVX72iwmbiaRxnKXjo9\",\n            \"Balance\": \"7700963240\",\n            \"Flags\": 0,\n            \"OwnerCount\": 75,\n            \"Sequence\": 65789738\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"977D5C90FEF5AACECF2B6E2E131B008D9F15BE6CBDF2FB8EAADD275E9A8265C8\",\n          \"PreviousFields\": {\n            \"Balance\": \"1893004785\",\n            \"OwnerCount\": 76\n          },\n          \"PreviousTxnID\": \"38D7E21A60BB649B4847B24A233B21C94D17C4E03E012F3FB58BF483BF420237\",\n          \"PreviousTxnLgrSeq\": 69059678\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rpzdffxTgRvMawxbRSs9c26T1FTEjfgznz\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365213E52B99EB9871\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"e\",\n            \"PreviousTxnID\": \"E151A98FEF531DB12146E3EC960B4A05FEE44EA657B53607351D880FECD666AC\",\n            \"PreviousTxnLgrSeq\": 68932702,\n            \"Sequence\": 67340276,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"981A12891820FE38A57C9991900C3F1B714C35B8B0E468890628DC9A08EDB0F4\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"18819970939.1982\"\n            },\n            \"TakerPays\": \"105391837\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rhJfzjX6NrYjiR8yGumtJSHuuLxn2JbgvT\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521BACF6B65EDA6D\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"39636BB2AE8111D3DEFC20EEF42EA7867106AF1570AD710B97B0FB726990B4A9\",\n            \"PreviousTxnLgrSeq\": 68898584,\n            \"Sequence\": 67761574,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"983E2A84CDBCFAD9E97AD7088FE6C00E59D8C2479E60B6CF75D680F0CF3439DF\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7785989866\"\n            },\n            \"TakerPays\": \"60652861\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rsE3JJ4VxxndQwzRusS99pmAeYN3bEYZmc\",\n            \"Balance\": \"998646691\",\n            \"Flags\": 0,\n            \"MessageKey\": \"0200000000000000000000000029EFB067C9B7D60BC35CA48F813737C5673C3D14\",\n            \"OwnerCount\": 254,\n            \"Sequence\": 1051\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"984E52BE42DF4E96F6F68A67A2D4D1CC03E2FFE10AE13F11D6658E01AEABF169\",\n          \"PreviousFields\": {\n            \"Balance\": \"524000000\",\n            \"OwnerCount\": 256\n          },\n          \"PreviousTxnID\": \"81A8E249B5B4F9D742FD01FC8D74D500EA6870115BD141F1EB64EECC475F8246\",\n          \"PreviousTxnLgrSeq\": 69063917\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"1\",\n            \"Owner\": \"rEq5qRY3MvKgqLUDbPF81FQQe9iEfS4xPs\",\n            \"RootIndex\": \"7787CB610ADB8D1C155B39BB9AC48CF012DA01CD6C45C61962C140939933E099\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"9874767677DB5C63CD9DF2A60672861987EE6E6414652475993C9EC9EDE2F200\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"e\",\n            \"IndexPrevious\": \"c\",\n            \"Owner\": \"rsj4wU1Tv93ES5J3AZrWVcgaKXV9b5aNKc\",\n            \"RootIndex\": \"F0BAF029BC53E4EA7C57BC1A89BB8503E933A24F526AB31DD2B52C45E2C38DA9\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"98769AE6EA290A0A54E8B4FECC6BC16458F2C082D6DADF83C50C6227235ED615\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rUrv5jwSUrmeGJa5Uj6DB3mBGojLFsRg7L\",\n            \"Balance\": \"24330902273\",\n            \"Flags\": 0,\n            \"OwnerCount\": 286,\n            \"Sequence\": 66532154\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"988079068A8068865A1534C87ED025359E16ABC5FF2D46A595EC99A847BBA15B\",\n          \"PreviousFields\": {\n            \"Balance\": \"648497308\",\n            \"OwnerCount\": 287\n          },\n          \"PreviousTxnID\": \"43895DE34E48A8A2AEB743793414D6FA4EA099E71D2782605D2B0B626C9BB109\",\n          \"PreviousTxnLgrSeq\": 69055912\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rhw4L75RKqQwheqkwPMM7sQYti6hmLWUni\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521C6BF51F195426\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"4\",\n            \"PreviousTxnID\": \"86ADE075450F228C7A7CC02400B32F7EE16D11B26CE88231309A9886407AF451\",\n            \"PreviousTxnLgrSeq\": 68901889,\n            \"Sequence\": 66981496,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"98CADF82CD5E8CF1449BC6F95D11A08B9471187B760A4F22FEBEDA82915FDA9B\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7785989866\"\n            },\n            \"TakerPays\": \"62287918\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rLhtdRdeGcT6UeQivqPu9DBXWHZ1SDpsar\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"HighNode\": \"1\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"756\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"990AB02A9D1634BDEDB83F8E730D24ACF520818E0EB556307C354E681A74EA8A\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-7785989866\"\n            }\n          },\n          \"PreviousTxnID\": \"B8216F0AC76D28E1ADE05E50FD241E89F4BEE2C86FB3FF43E2C0FC59E37FC49E\",\n          \"PreviousTxnLgrSeq\": 67996133\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"3\",\n            \"IndexPrevious\": \"1\",\n            \"Owner\": \"rKjRbDnEwfSRjozGgD1M2dBU54xVtv57aQ\",\n            \"RootIndex\": \"B55BDC16459D6B04340E95F9F6499866323CD481D43B98208AFB4BA4CE112D91\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"991A1E71A3EB5F3AC99EEF9BF58BD9EBDEB617F7315E5CA0AEC2AD3239A2C8A2\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"raUCqTN33sgqfhC1KVtqhCVX6iHkHAbUzp\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520FFCB9E57D4000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"1c\",\n            \"PreviousTxnID\": \"70C5C6E5E01F277EE3BBADBCDDCB29F2E3C012B60629B34DC321C1F4FD67DE79\",\n            \"PreviousTxnLgrSeq\": 69043908,\n            \"Sequence\": 66813305,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"9935089D97B6CC89DCCFD1643D433F77C8864C6DD1A9820F4E3643480EE75E85\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"2500000000000000e-4\"\n            },\n            \"TakerPays\": \"1125000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rNwUjKvVAQ9nhmVW9gF5Hn5414X637aY4U\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"982\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"994410FC512FEFCBC252CE72F14EFFA136FAD766D07431E27C59433AADF4CEDF\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-7785989866\"\n            }\n          },\n          \"PreviousTxnID\": \"BB4E731A38255337862A89A8A7FBD89620D2B62C6FE470DB67382A6A309C56B6\",\n          \"PreviousTxnLgrSeq\": 67991902\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"14\",\n            \"IndexPrevious\": \"12\",\n            \"Owner\": \"rBnj6UP9thqpSLVq1rEKinhuhmFHmhaC8m\",\n            \"RootIndex\": \"134B6C0E7D25CA2E7B791BD87B4E37D5170A0C65A730E01FCB43C1BEF419B95F\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"99480949D0EA0487BB1A2E4291A79DC24AA83ECE1510B2F03CA65CD07828E955\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rKbNu1SDc3i5dWHdp3uLxWVn2tsA4ovDJR\",\n            \"RootIndex\": \"5D9E40EDEF763A4AA40AEA25345CFF6688062761CB4CC26A1CD1540B62B6E6A2\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"99738564CE639301422420411DB320B28A64E2EA267322FFBD698CA340F9BD46\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"r3pUPUHoXbK4o5wjfPWjqQe4Xh2wu2KWvq\",\n            \"RootIndex\": \"998707FF17E7F4684004DB112F68AE41338EF5807ECFD8C153A2C0F0114F22B0\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"998707FF17E7F4684004DB112F68AE41338EF5807ECFD8C153A2C0F0114F22B0\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"ragafgjLrLnN1rYkR4FpKXjmiTqDQqDio3\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520D79B6A189ADB4\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"E92391277729DDC276793D8A531C5C181C4EB864F3E7DB114B7FE93D92C4A238\",\n            \"PreviousTxnLgrSeq\": 69011401,\n            \"Sequence\": 67291849,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"998EF00558A8C094E8C1DB99F4783C044C000AC8FBBD54B800A51A4B3253D391\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"2015266918855906e-4\"\n            },\n            \"TakerPays\": \"764390742\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rpRWz81LgJfwcxBFMMxwnMttsHr8VoMZeR\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653038D7EA4C68000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"a\",\n            \"PreviousTxnID\": \"9250907F408C34F67684C860698A1E1070D62D20CDC79DDBEE05C3693476C4AB\",\n            \"PreviousTxnLgrSeq\": 69048287,\n            \"Sequence\": 67502999,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"999E0FFBEF87240409805F454AC97DB836336C8A721DAAFC6C5CC42FB00B7D04\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"15000000000\"\n            },\n            \"TakerPays\": \"150000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rMMTgtHSock7M74yRKkp4ug6i14nGeCJhW\",\n            \"Balance\": \"339482681\",\n            \"Flags\": 0,\n            \"OwnerCount\": 128,\n            \"Sequence\": 66483833\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"99B2F9EC8D7E42C2A42675C58E8BD64FB566C93F0E957DC185E489905A5F718D\",\n          \"PreviousFields\": {\n            \"Balance\": \"281188742\",\n            \"OwnerCount\": 129\n          },\n          \"PreviousTxnID\": \"A4D8A02FCE983488B325B7927A17930B434CE8BC8EE056960B34461641D10DE7\",\n          \"PreviousTxnLgrSeq\": 69062416\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rUtzPhAd4njQGteZHqi7hbd8CRtZGfQtp3\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653049E57D5E935F2\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"d\",\n            \"PreviousTxnID\": \"A0BEAAD0DB0DB2FF034D385715BD86D4A1D7427BF3BE585824A945F0939F005C\",\n            \"PreviousTxnLgrSeq\": 68896073,\n            \"Sequence\": 67342389,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"99B3BDF64D771A12266EA793912A4F8F5F43664FFE43290F5C7909476A3EE81D\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7785989876\"\n            },\n            \"TakerPays\": \"101217868\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rNNzeaYd4nSmhTirshmVBdK1zfHApVy7Hy\",\n            \"Balance\": \"182478327\",\n            \"Flags\": 0,\n            \"OwnerCount\": 39,\n            \"Sequence\": 67492599\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"99B45F4FA105DFB17D80BA076B29FB57E78BAB49AC97800F27FD95208CDD20FC\",\n          \"PreviousFields\": {\n            \"OwnerCount\": 40\n          },\n          \"PreviousTxnID\": \"7DDCA3E6AE5A9A6F9D2315AAB1F8329D8F8ED370BDCE7F2F11CE51F013E9516A\",\n          \"PreviousTxnLgrSeq\": 69058664\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rJjrokNPSa5xiAbh8N8cqmhVc4ma95FBpt\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365211C37937E08000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"1\",\n            \"PreviousTxnID\": \"FD33246A0CC19DB05F0C850C4805D8E2654045CAC29E43F4B837A2BE5D052025\",\n            \"PreviousTxnLgrSeq\": 69014183,\n            \"Sequence\": 65343271,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"99EC1210C28796DA017F882DB10AB5799D92428B8847E8402D816BE0AAB77FD1\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"12037057800\"\n            },\n            \"TakerPays\": \"60185289\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rHNNQAEvRxzWoi2ukxZ371fsjJjxRva3pd\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365209C51C4521E000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"EBE669768796C393CF45104C07C8084CB6A9EDA9443141522A6B2E67E936E12D\",\n            \"PreviousTxnLgrSeq\": 69017368,\n            \"Sequence\": 67949455,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"99F97970C212B87070E719B0574BED0FD2F6E1E01B83A92251D6A592D3E3195E\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"2000000000\"\n            },\n            \"TakerPays\": \"5500000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rB4BbxNJ7Hv7i63EwPcEZjuP8YHizdkkvd\",\n            \"Balance\": \"77162676\",\n            \"Flags\": 0,\n            \"OwnerCount\": 9,\n            \"Sequence\": 67744148\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"9A6EE49A49DE32CCF272A5C42C0AC46261DA4A4B571F1A07A657B030346EC11B\",\n          \"PreviousFields\": {\n            \"Balance\": \"58884548\",\n            \"OwnerCount\": 10\n          },\n          \"PreviousTxnID\": \"CAE8836EA5152715C60B986F3D9EB5C9339D7F4D5DA7A623E5177F24A985CAF6\",\n          \"PreviousTxnLgrSeq\": 69012697\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rLkhJhEaChEegzryMAeps63ghhG1yXzifL\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365210B2A00671C000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"920B46BBB932481A24DDB11367690C051B4AA98F6B4BBE0142E552223C37725A\",\n            \"PreviousTxnLgrSeq\": 68963973,\n            \"Sequence\": 67425984,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"9A808A3B7CF27796DD5DECB9186389C0E42079A879B062C211B1B6D9A72B4EC4\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"4630429646808511e-4\"\n            },\n            \"TakerPays\": \"2176301934\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rKSMqUYHyLXFtWPy1JugFqgds23UipQsGZ\",\n            \"Balance\": \"360871494\",\n            \"Flags\": 0,\n            \"OwnerCount\": 23,\n            \"Sequence\": 67142043\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"9A81D02CFDE7457004FBD2D1F514D031E4731D39AF2A4845986F919294EA0D54\",\n          \"PreviousFields\": {\n            \"Balance\": \"259871494\",\n            \"OwnerCount\": 24\n          },\n          \"PreviousTxnID\": \"20C4C01404E8C5160C7464F5A40AAED5B3A50ED78C660D75756333D410847D26\",\n          \"PreviousTxnLgrSeq\": 69063831\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rsF1oN5xbuJQ3wPD87jjDvEde3VKwSrAue\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36531550F7DC8B34F3\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"d\",\n            \"PreviousTxnID\": \"BD798775B01C5708C96B29B3F890EDDC2FE974C2DB63D540A0FDB3FFE3540CF3\",\n            \"PreviousTxnLgrSeq\": 68892810,\n            \"Sequence\": 66173983,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"9A887A1E8FE3815E31C9F6AB544C8F985D557C37758DCE927C95762A27F978FA\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"25693766557.8\"\n            },\n            \"TakerPays\": \"1541625993\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rNPZ49ucC4zKoBPgyAsSC7oMSSoh1icnZK\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365211C37937B4B295\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"8\",\n            \"PreviousTxnID\": \"37E81D9850EC01FFFE4B283EBD2D4291017035F64E9E817C0995AAB60A370A02\",\n            \"PreviousTxnLgrSeq\": 68997083,\n            \"Sequence\": 67158822,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"1277712118733569e-4\"\n            },\n            \"TakerPays\": \"638856059\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"9AAA19A07998249432B449CF6A220517CA0F4E118E0ECC575292E9A488561416\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rpJZ3qkUBb3m68p3YrzJE7onMcswN4XDY8\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652132F4579C98000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"8\",\n            \"PreviousTxnID\": \"FBBE6F007F68D31C9633FBCD4B980B49A21377F4C12F312CADAFE70BB68456BF\",\n            \"PreviousTxnLgrSeq\": 68963662,\n            \"Sequence\": 67512201,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"9AC668E1A76D23D00A6726D08C3F24953F08F010FF8D201C7F0AF7FCF86184FF\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"20000000000\"\n            },\n            \"TakerPays\": \"108000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rwBDva3asfNrXQeBmnkV3xbMnw7xi5A3dE\",\n            \"Balance\": \"611985279\",\n            \"Flags\": 0,\n            \"OwnerCount\": 101,\n            \"Sequence\": 67471075\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"9AF6A4C025FD110DB6C57270170487F29BD4CAF05BBD26249CD4D851209701C0\",\n          \"PreviousFields\": {\n            \"Balance\": \"235842569\",\n            \"OwnerCount\": 102\n          },\n          \"PreviousTxnID\": \"5036B1C6C2C477DB1F6E03FC06472E6ABD6DC6B98EFE6E7D1692D824AA3E3CB0\",\n          \"PreviousTxnLgrSeq\": 69053344\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rh8MNcxKuDcaMRuSj6P2rcMGxDiBqyZJJT\",\n            \"Balance\": \"505938482\",\n            \"Flags\": 0,\n            \"OwnerCount\": 10,\n            \"Sequence\": 67381324\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"9B0A9D247F63BEA48A8A6CAE19C904AE11F258710BBC1DE96EDC29BE8F55B8D8\",\n          \"PreviousFields\": {\n            \"Balance\": \"35646737\",\n            \"OwnerCount\": 11\n          },\n          \"PreviousTxnID\": \"CA76B05CA68830AE0056C64E53023A31C460203542E3D40D44C49F99F62E4D2F\",\n          \"PreviousTxnLgrSeq\": 69064150\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-147708029.8498\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN9HGJaVB4wFwWcj5tTqzkWtHjxxCZiHA7\",\n              \"value\": \"1000000000000000\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"b9\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"9B22D1DE8AC140C2915598E3360A6BA5EA9F2B814EC5B86D9C6769D822E2225C\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-50147708029.8498\"\n            }\n          },\n          \"PreviousTxnID\": \"BEFF0BCBB661694F8EC4ABB7011BB5F0A198EAF107B095FDF602571E898C02DD\",\n          \"PreviousTxnLgrSeq\": 69041203\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rEqtQj662PMqja6Cb3pyK5V6xi2RGbcFxD\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36531D972EDA1C31C1\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"7\",\n            \"PreviousTxnID\": \"2CCE4DE1D0088B5EB91CAAC104F987F868FBC1D99B5D76E6F85C4F32373A31D1\",\n            \"PreviousTxnLgrSeq\": 68885491,\n            \"Sequence\": 63323939,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"9B3EC95BC51ADE2B6A5768F14B4AFECA3D74CBF6561072B891B71D09CCB40D8F\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"87329228405.93906\"\n            },\n            \"TakerPays\": \"7273653013\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rQKYm7pcdeXMPEgGTRUAAuoziWwhhW3DC2\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"HighNode\": \"2\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"c16\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"9B48F8863F2DA60B608BAA75C6D075132EDFB89A996EA464C583E865879B38F0\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-38929949330\"\n            }\n          },\n          \"PreviousTxnID\": \"05C5C30C69D81D2BBF94AF65C04012BD492287E4AA22C60A7CD7FAED405EEE44\",\n          \"PreviousTxnLgrSeq\": 68048591\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rLkaQPNxjeDmFBqhQ2GszmgT4wxykPCP5K\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365208DFEAF20D8980\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"4\",\n            \"PreviousTxnID\": \"0A0E0771F6EC02D17D0A6A45E3A03D5E2460B6F3307AB9A2054024828E1F3808\",\n            \"PreviousTxnLgrSeq\": 69023482,\n            \"Sequence\": 67329967,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"9B5CB223A2134AF22D042C953E4FE250EDFEFCD8733E130108D0CAF873252631\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"18109401193.39236\"\n            },\n            \"TakerPays\": \"45237284\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rsdrgJ5xtkPpnWfJeeshHZLWmQEMS3cFzQ\",\n            \"Balance\": \"3922303039\",\n            \"Flags\": 0,\n            \"OwnerCount\": 141,\n            \"Sequence\": 67220066\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"9B7793B5E2C55059F724F41C8A3263AB0AC9FCC1FF32EEC9240F2BC5AD95082B\",\n          \"PreviousFields\": {\n            \"Balance\": \"2722303039\",\n            \"OwnerCount\": 147\n          },\n          \"PreviousTxnID\": \"EC8D815D4B605034695CD235AF5687F05AB7069C7CD95D8DC655561FF727B932\",\n          \"PreviousTxnLgrSeq\": 69059883\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"1\",\n            \"Owner\": \"r9dqJno4U42mpcjAymrrUS11q5rAWazGfP\",\n            \"RootIndex\": \"5FFFA0BFC44FC5D1597847CF3660D72650B7F97BCB7EFFBCC1388CA0DD17779B\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"9B7E718EA22238292A5E1D4922B9F71A322C09FA3C17E1283868935E3129BDB3\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rLFVckNbciXAqgedJM92yZX7653rXcn4JZ\",\n            \"Balance\": \"1277425520\",\n            \"Flags\": 0,\n            \"OwnerCount\": 94,\n            \"Sequence\": 65356327\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"9B8A2184B22A7ED23250C92DCA1459367C58701BF6A7607F02E63E8DF6AEFB9F\",\n          \"PreviousFields\": {\n            \"Balance\": \"688126027\",\n            \"OwnerCount\": 95\n          },\n          \"PreviousTxnID\": \"FCBB8A0A4BC0328D6B74FAF0DFC8DA885B92214FAD76B4D10145E0E9A1918F10\",\n          \"PreviousTxnLgrSeq\": 69057313\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rDzBkddc4AVrm4RWuXJRhH1rrkDpKNFwTg\",\n            \"Balance\": \"3639142363\",\n            \"Flags\": 0,\n            \"OwnerCount\": 17,\n            \"Sequence\": 67765546\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"9B92D19B552307A64586C2DADB6C5AF307F777736090F295F4A123DC73EB41F2\",\n          \"PreviousFields\": {\n            \"Balance\": \"639142363\",\n            \"OwnerCount\": 18\n          },\n          \"PreviousTxnID\": \"43C5F44729B2CCB921633FE83F8881D270BAF1C39FC8759BD3FF98B9ADAC56AD\",\n          \"PreviousTxnLgrSeq\": 69063610\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rB3bSANCCKpiQa4aMd7b4vQZ3pMTh8UXZh\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521B094132B647E5\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"A13746181E87B812A43A943CC5580576560B0E50D381513B23F4952830E0BCBC\",\n            \"PreviousTxnLgrSeq\": 69004695,\n            \"Sequence\": 67122272,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"9B93C5D73CD35B9F428F7B0BCD0A3957C0036E77666E61D0F93CC63B9B0B0A88\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7739869097729994e-4\"\n            },\n            \"TakerPays\": \"5890040383\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"1\",\n            \"IndexPrevious\": \"1\",\n            \"Owner\": \"rUHsUfjv1Ai9KiT6R3WzLcAKvvPLao6fiK\",\n            \"RootIndex\": \"9BC4C67F74E7F3C97E4C52C13E4F636F36CEAB670A0A3FCB3414FB8228511E4F\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"9BC4C67F74E7F3C97E4C52C13E4F636F36CEAB670A0A3FCB3414FB8228511E4F\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"9\",\n            \"IndexPrevious\": \"7\",\n            \"Owner\": \"rJNmHPHrMr649at3SBHakJ38mRAQZA9pvs\",\n            \"RootIndex\": \"3979C9A1AE3575D06CBB842919BDA117CD454A8844FF04B7C42BD99F2F1D1194\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"9BEDDC79ED2A02BBA3CFAB9A51D135EB464BF1D9A4B9A54EAF06297EA63BEAA7\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"7\",\n            \"IndexPrevious\": \"5\",\n            \"Owner\": \"rKso7KmktCCYBfe79sNAFnfKffvansBBRz\",\n            \"RootIndex\": \"16079EB94DDBB6FE7530302438BA31C473A6838AC7E1AE6CCEF6D1F2F1E20535\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"9BEF657B245A43369A33A499D82F05F11D6EB41106DE242723A6A7242BFE298D\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rNPZ49ucC4zKoBPgyAsSC7oMSSoh1icnZK\",\n              \"value\": \"9999999999999990e-1\"\n            },\n            \"HighNode\": \"7\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"deb\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"9C02327708D9B0B45A75AEFA2FE0486F73AFEFC1E199C2C1169AFFC4C91BEF9B\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-1277712118733569e-4\"\n            }\n          },\n          \"PreviousTxnID\": \"4A0963CE9709FF0825ECA449B68E553525DF56B2551897391BC4B2B04D3EE220\",\n          \"PreviousTxnLgrSeq\": 68819471\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rLK9N8ay11j21CKs3ryC5kp7SYR5piJByc\",\n            \"Balance\": \"220408579\",\n            \"Flags\": 0,\n            \"OwnerCount\": 72,\n            \"Sequence\": 67342157\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"9C5AAC02B3D1A819CEF124726C74FDDC27E11F7A26E5A0A8AA596347FA723C69\",\n          \"PreviousFields\": {\n            \"Balance\": \"158120661\",\n            \"OwnerCount\": 73\n          },\n          \"PreviousTxnID\": \"4B86F2C03C5568ADD20A6F6F68E906178F82A869049C4B54EAAE8FB9C1BF5B5E\",\n          \"PreviousTxnLgrSeq\": 69044399\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rwSQqB6yNHd2tiXUhJ2wkULgq3dFua1r41\",\n            \"Balance\": \"1007011966\",\n            \"Flags\": 0,\n            \"OwnerCount\": 119,\n            \"Sequence\": 66556566\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"9C78A9437E472C5CB5002F432C3098A17DA94187E9DBF12CC733C45106697443\",\n          \"PreviousFields\": {\n            \"Balance\": \"306272879\",\n            \"OwnerCount\": 120\n          },\n          \"PreviousTxnID\": \"E6EDD6724049CC6F86B8F70E78826FF0AE3865EA62BE6095287C83AB8FC295FE\",\n          \"PreviousTxnLgrSeq\": 69063410\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"e13\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rB3bSANCCKpiQa4aMd7b4vQZ3pMTh8UXZh\",\n              \"value\": \"9999688558266536e-1\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"9C8B9692546BF2815B2707BD87D75D02588446ABE187625D3601E521E088FA5B\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"7739869097729994e-4\"\n            }\n          },\n          \"PreviousTxnID\": \"56F4083A63946E0829B045C44616DCB48ACA54EFF149D833D1F3E00CF27E95AE\",\n          \"PreviousTxnLgrSeq\": 68994858\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"6\",\n            \"Owner\": \"rfJYknVqAa2EmEKkKsR2CjJVBKedFU9DNZ\",\n            \"RootIndex\": \"08D8D63AC3BF8FC407330424DD03928293CDC76DC7BCE02BA8215F54917755FC\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"9C8D8B90FDD3AB0C8A3E778718FF74D8931D5AB8C3FCD712297F7FCDE0A1BAC3\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rKSMqUYHyLXFtWPy1JugFqgds23UipQsGZ\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365211F0F2C01DA000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"1\",\n            \"PreviousTxnID\": \"F345A0FFFB68EABC3E854C38099E5708FC0A1D8BFB16087A184F70046074C866\",\n            \"PreviousTxnLgrSeq\": 69008604,\n            \"Sequence\": 67141902,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"9CD8E51BCBF23CC3FDE74FE213B85DF57EA40B94869B2656BC91ED7C5BB41A9E\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"20000000000\"\n            },\n            \"TakerPays\": \"101000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rKSMqUYHyLXFtWPy1JugFqgds23UipQsGZ\",\n            \"RootIndex\": \"36F0CE76856282FD5688883C9E4875860EC98A50CDF84A00CEF2BF3766F8DF9D\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"9CE5386C6893F1C03BCDB8326BF0F4AF5452C16910A760B4DC1AF08ACCCE39C6\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rBE6UN87gwvyAuud7dSn2d6zdBUWCjgqRG\",\n            \"RootIndex\": \"883470D8A12AFA64F5B68BCF971659D5AF42CF33921F15A3EADE907DE45BF439\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"9D060CD639FF17151790CE55FFF967BF44664694B168F166346049D3C52380A9\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"c\",\n            \"IndexPrevious\": \"a\",\n            \"Owner\": \"razceqmpdpjLd5o52i1GiaZJhmB8SEbfCa\",\n            \"RootIndex\": \"96587E178090E46CE3C330C5FAA7424BD6415AE2A0F93B1137608016E9EF3245\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"9D267D64EA07EDDF1BEE7A862D6374D7134FC4F40B9898E66FD3A3C26F62D6BB\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rsz7uAUXWXXeEfR55mUHFiWbdTomtXqdcv\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365214401E94C6246C\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"2\",\n            \"PreviousTxnID\": \"BFCBF6F78F7568F52DD85C0D273F8B79DF1E1BD31393E3A3DB9B0FF8BEBDB67A\",\n            \"PreviousTxnLgrSeq\": 68978315,\n            \"Sequence\": 67858741,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"9D435C5C56015FC223707A1E4D1C1AD342FACD97731D978908C00F9734498684\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"2655500000\"\n            },\n            \"TakerPays\": \"15136349\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rBVauSrW9MhaNcszTL125KttqSixQmUDuK\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521BACF6B65EDA6D\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"5F7C9AB3F6EEE4EE36B4907D798D56E8B00877E73F7476D30F9E26E4B8567011\",\n            \"PreviousTxnLgrSeq\": 68898528,\n            \"Sequence\": 67761564,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"9D54A3FC8D3F093E0A8031017400D689058DF73797448852CFDF3B340DED9EA7\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7785989866\"\n            },\n            \"TakerPays\": \"60652861\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"b67\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rpPjK8mxW6UndeHNvtgJPSaQjARCSXGCWY\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"LowNode\": \"3\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"9D746CDFA1CDE3A6FC9313F9309B1764ACC27EEABD47ADE6B50E603833CD2F42\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"17785989866\"\n            }\n          },\n          \"PreviousTxnID\": \"AFFC0064D8C0D922FB2617EB86EDA60E2626C5702AE91E7392991E250A2E37D5\",\n          \"PreviousTxnLgrSeq\": 67991304\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"e1e\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rpGhnBcEyRdDNyy4AD2BwyZgWE4ERu8eqC\",\n              \"value\": \"1000000000000000\"\n            },\n            \"LowNode\": \"3\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"9D8AE339263662BFDDBC45A143D3E01E07C2A69EC16E1A5221FB3688590A6821\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"2000000000\"\n            }\n          },\n          \"PreviousTxnID\": \"6894D7161ADADA4E13ED16495F4F5986AC0E9D98B56F70293FE182F60BFDCB6D\",\n          \"PreviousTxnLgrSeq\": 68855589\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rfn3KpY6HS6aE1vviRjhHfNn3BfuSrhmzv\",\n            \"RootIndex\": \"9D906F0C37ACE6A66F3FFF3CEEE8EAC384C77E7CA4D99CC6F54F724886CFB764\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"9D906F0C37ACE6A66F3FFF3CEEE8EAC384C77E7CA4D99CC6F54F724886CFB764\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"14\",\n            \"IndexPrevious\": \"12\",\n            \"Owner\": \"ra5BMHvXy7Y97xhxSLKZWCDPpbqc9fvWdq\",\n            \"RootIndex\": \"410B277ACD7A896B9AD3D6B7603DDAE8143F5291D8852E06014C8C267F07D5BD\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"9D949CA3ABC42E4E984B54E8B68A942DC8338D8C7882D557BEA169F40AEEE6D1\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"ra4q61eeGoZx4cAJKPHQdyukvugrB2jhgW\",\n            \"RootIndex\": \"9DAAE7C90496EC9EFC31F1BF5236460290B065A425FE1F522047B37F448F0A59\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"9DAAE7C90496EC9EFC31F1BF5236460290B065A425FE1F522047B37F448F0A59\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rET8MUZc1VEcHkQqQWeRmvbWZcrtHy24iB\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520886C986447D13\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"1\",\n            \"PreviousTxnID\": \"256BDB67BB91DCE08DBAC26ED26E5E383639B1D009EEF4585FCC43329357E80E\",\n            \"PreviousTxnLgrSeq\": 69029430,\n            \"Sequence\": 59759820,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"9DC89AD792605BD70C0990998D3C3BD49D32F85C64702D8A89C079052E16B49E\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7785989866\"\n            },\n            \"TakerPays\": \"18686375\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"a65\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rwuaSP5dsGLmc6gNnv3bWEjmtkexmA4H3G\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"LowNode\": \"2\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"9DEC85EBDC8F66EC00397F63B0F2C1BEB336AF9DB35349581B9F4F59517994A3\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"93431878392\"\n            }\n          },\n          \"PreviousTxnID\": \"7CE68D393ABC6645FB14E1BFEC45B1FF58A6C86248A0ACC31C01E8D80BB366C7\",\n          \"PreviousTxnLgrSeq\": 67972262\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"dfb\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rnSxpc5YM8agfwsEHN3F3EKN9WQ8yyTcAf\",\n              \"value\": \"9999766418165221e-1\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"9DF28B0E15E496ABEBB38C569BE966EF091BE191E6D59CC2F403CE9F417E343C\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"33333333405\"\n            }\n          },\n          \"PreviousTxnID\": \"B59FE9F337697F22D81D534EF4B6C28C0D22E686AC7222D1AA9752FF19C164DB\",\n          \"PreviousTxnLgrSeq\": 68152140\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rHv2LE2MKKrQ83NMbQ2vv1DUDjByosxthL\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520F581B8C570EE4\",\n            \"BookNode\": \"0\",\n            \"Flags\": 0,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"F6EF85C2092A315BF38968D003DD4A266A7150681B099C3BD76F6B5DE0C9AA13\",\n            \"PreviousTxnLgrSeq\": 68983895,\n            \"Sequence\": 68499486,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"1057882247718264e-4\"\n            },\n            \"TakerPays\": \"456899342\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"9E15CC6E06E3772D9D3F252B78C3E8A7BAB4E486218C50267C72A975E2CF79B1\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rUEnyBAH4xxjS4ZkMrki8GnNvsvysjSuZy\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521D4F54CA852C5E\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"b\",\n            \"PreviousTxnID\": \"85C5581CD0A69B298EABE54A6698E7195BA47D52146F29DA764AD6FFF4753D87\",\n            \"PreviousTxnLgrSeq\": 68897679,\n            \"Sequence\": 66504627,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"9E3CC2EEE7C78F29A734179A60255311B5D2B832DF99B489FDFDEC02F9A3C2F8\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"3157063667.673492\"\n            },\n            \"TakerPays\": \"26045775\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"350\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rfJYknVqAa2EmEKkKsR2CjJVBKedFU9DNZ\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"LowNode\": \"2\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"9E3D02CE57A51541E2D53E9EDCB5059A1E14CCBA0B495EEB1BDA7834A151CF2A\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"23357969598\"\n            }\n          },\n          \"PreviousTxnID\": \"77FF4E1BDEB05CC6108843AFB82C172546E5DB8DC3A9EC6A191EA6A4DD283499\",\n          \"PreviousTxnLgrSeq\": 68003285\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"e9d\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rsWg26FevrM9h2PFcanVpvpaLNuoGpLnrB\",\n              \"value\": \"9999610698224570e-1\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"9E3D72C3EE4DD0EE5028104578F960F505AC9460A94CFE39150014CFA5E674BD\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"5000000000\"\n            }\n          },\n          \"PreviousTxnID\": \"6DF7FC82EEBA1C7F5519B14586DA1E03226E64461B9E6C84A355881C70BCF1F9\",\n          \"PreviousTxnLgrSeq\": 68784902\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rG9EpCkxGBXowufUGyrVF8tT7ovkHBdMb4\",\n            \"Balance\": \"118147276\",\n            \"Flags\": 0,\n            \"OwnerCount\": 36,\n            \"Sequence\": 68040425\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"9E4181732F71A538F09216C46E23F65812F2F1EDC524FC5ABB0918BC691BE85D\",\n          \"PreviousFields\": {\n            \"Balance\": \"93144856\",\n            \"OwnerCount\": 37\n          },\n          \"PreviousTxnID\": \"90295ED3F638E300F4F521836A18696CA80208418B049CB3DF80BA783AAF1CE1\",\n          \"PreviousTxnLgrSeq\": 69023985\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rMRX7LEEzj9s3Hm3fysfBXnkNzAaRbDawT\",\n            \"Balance\": \"2784265047\",\n            \"Flags\": 0,\n            \"OwnerCount\": 493,\n            \"Sequence\": 65793814\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"9E4E7FC2D565D623F9F29025D912EECC3BE244D756B25A03B1BC159746133F41\",\n          \"PreviousFields\": {\n            \"Balance\": \"2284265048\",\n            \"OwnerCount\": 494\n          },\n          \"PreviousTxnID\": \"C9CBE362E321728AA0F0276F6A60BAB76234D46842107FD9D7338AEE2DAB9FB4\",\n          \"PreviousTxnLgrSeq\": 69061071\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rw4jQ2pSNGhFQDoQyNpP6FJ1nArCWCZjKM\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520CC11602BE6000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"1\",\n            \"PreviousTxnID\": \"2083719A353AB8D514172F34370F48AEB91701AFE159134CF060688C316F4FE5\",\n            \"PreviousTxnLgrSeq\": 69000834,\n            \"Sequence\": 67525539,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"9E50B0D9449F3951CFDC6CCB08A6E7FDDE376888B092F3BB1A8964A8D7B1F40E\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"42000000000\"\n            },\n            \"TakerPays\": \"150780000\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r9pfHFFyEEhtaDaMgVNtZZ8Ks7YL98ziRB\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521550F7D7041F62\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"1\",\n            \"PreviousTxnID\": \"E176EE802B521C4085CB3F6DFD6EB4FCE51647F1F527AF48B5236CB91FD344D2\",\n            \"PreviousTxnLgrSeq\": 68909240,\n            \"Sequence\": 67689824,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"9EC2C6B334D44B7C12069E325217B77D444B0A19D8283B3773A34BB2FDAFE776\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"3334588052.553338\"\n            },\n            \"TakerPays\": \"20007528\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r4xMZEgWZaocA566U2xgUqKcTnXKZkBLLi\",\n            \"Balance\": \"274726385\",\n            \"Flags\": 0,\n            \"OwnerCount\": 15,\n            \"Sequence\": 68654336\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"9EF596BF1DF627FFBAD365F490CEB4C2E279D13784745F85B3A32565D8E61B32\",\n          \"PreviousFields\": {\n            \"Balance\": \"101524681\",\n            \"OwnerCount\": 17\n          },\n          \"PreviousTxnID\": \"339FBBF2DCE579BA7075DCC5EB887498E28C2B2192F94F4B44955EA0E22947CC\",\n          \"PreviousTxnLgrSeq\": 69042446\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rNVK54FFqQPyc5jFNayw1WrW2m54SRAMWv\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365317AF4C4A80AAAB\",\n            \"BookNode\": \"0\",\n            \"Expiration\": 723706139,\n            \"Flags\": 0,\n            \"OwnerNode\": \"1\",\n            \"PreviousTxnID\": \"914211D61688C96195CA88507D4ABA24F2D97A24B49E9BC0B9F076394F4684E7\",\n            \"PreviousTxnLgrSeq\": 68177282,\n            \"Sequence\": 67622062,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"9EFC0E8B2D96F427B55F77418D948F825AD3BBAA327F91BF9FC400E0C20813CF\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"1500000000\"\n            },\n            \"TakerPays\": \"100000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rpeh8BoXFBaV9nkmRvyHWMt9tGagwWhk5s\",\n            \"Balance\": \"471718192\",\n            \"Flags\": 0,\n            \"OwnerCount\": 102,\n            \"Sequence\": 67385082\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"9F3C1566ECDEC9F776B28B57902B845AE8BE56C5AB15145B43635EB3DCE6905F\",\n          \"PreviousFields\": {\n            \"Balance\": \"315998395\",\n            \"OwnerCount\": 103\n          },\n          \"PreviousTxnID\": \"C8FF4E93F2B32C5061021F83FB8BD9A05E87E32F1F92F6991BCA285F02CDFE98\",\n          \"PreviousTxnLgrSeq\": 68999414\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"4\",\n            \"IndexPrevious\": \"2\",\n            \"Owner\": \"rE9hwGp3avccRZY3PerkKL1cJ25z9X22QZ\",\n            \"RootIndex\": \"72F425B2FF57C96BB28DC6DD6FB29F482672C6BE10E87D2D779255A80CB56024\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"9F548A3BE2B9C56906FAC1AF51098417F7C92721E9319D5A7654E23C57973883\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rwNMX6iAFTsFK2PG8PCNG4AJ5b8UyrSx8p\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36531AA535D3D0C000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"2\",\n            \"PreviousTxnID\": \"3233ED955DF7026B395032E03DF6FB1B8ABBDB3F5FEF6382CB8A2FB755FC56DB\",\n            \"PreviousTxnLgrSeq\": 68886120,\n            \"Sequence\": 67440196,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"9F6FCB41967DC8C60A1E490D19EE502D223A056E0CD890E06884743FCED2489E\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"1000000000\"\n            },\n            \"TakerPays\": \"75000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rHm3si5FLgHjXC7E2qXKwNDGAe5khVpEHg\",\n            \"RootIndex\": \"9F8253051FCC91213E8F62731FBBDE71C94B40363E6C6F1A6EFD4A63FBDA259A\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"9F8253051FCC91213E8F62731FBBDE71C94B40363E6C6F1A6EFD4A63FBDA259A\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"1b1\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"ra5BMHvXy7Y97xhxSLKZWCDPpbqc9fvWdq\",\n              \"value\": \"1000000000000000\"\n            },\n            \"LowNode\": \"2\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"9F983BC108F2442BF821FD3D94081F7CA0D1BE94C5FFD7E8079A283DA0293E44\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"7785989866\"\n            }\n          },\n          \"PreviousTxnID\": \"CF58E607FDD653D68F3489010ACADB7A55F3B922AD9A35B9A6CCCCE671067229\",\n          \"PreviousTxnLgrSeq\": 67949938\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"d87\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rjD7dFqNXSEK4juN3ntGwbYn1P3xjepVf\",\n              \"value\": \"9999999997999465e-1\"\n            },\n            \"LowNode\": \"1\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"9FACE1E7A4E566BD247BD401FA51DDEA5B96D2F7431D7C34F9ADB8F8144A6ED0\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"3889722226.893519\"\n            }\n          },\n          \"PreviousTxnID\": \"85E08C2C0DEB33C9BFAEDF0496FDBF9C3F315CC9F87ADE5B755DC6A6704AEF68\",\n          \"PreviousTxnLgrSeq\": 67965349\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rJCvziKjUwgoNgwNNcy2SwqVMwPFxqBjvn\",\n            \"Balance\": \"1022876742\",\n            \"Flags\": 0,\n            \"OwnerCount\": 21,\n            \"Sequence\": 67662870\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"9FB4165747112BAE88B0B7810E95C846BDCB0E58820281D7CD4211563C2BEFD2\",\n          \"PreviousFields\": {\n            \"Balance\": \"222876742\",\n            \"OwnerCount\": 22\n          },\n          \"PreviousTxnID\": \"D420A52E6E0F312643920456A5183D708838D8820262896082D14B578E9F041D\",\n          \"PreviousTxnLgrSeq\": 69044838\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rN9HGJaVB4wFwWcj5tTqzkWtHjxxCZiHA7\",\n            \"Balance\": \"1189273666\",\n            \"Flags\": 0,\n            \"OwnerCount\": 174,\n            \"Sequence\": 67322479\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"9FFEE8311247DAC4B31B322F04DABF6095D323A9F251A81278B12EF266E9040F\",\n          \"PreviousFields\": {\n            \"Balance\": \"789273666\",\n            \"OwnerCount\": 175\n          },\n          \"PreviousTxnID\": \"EBCB5BCC26D9E3BA59CB33BC24B4FABC1794627C5F877D03A19711FB196AF2D9\",\n          \"PreviousTxnLgrSeq\": 69063680\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rEq5qRY3MvKgqLUDbPF81FQQe9iEfS4xPs\",\n            \"Balance\": \"554674643\",\n            \"Flags\": 0,\n            \"OwnerCount\": 15,\n            \"Sequence\": 67431670\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"A00EA8CE5B53F735DD7726C3EFECC59ECDAA1776D26793DD6D30D1B2A22149D4\",\n          \"PreviousFields\": {\n            \"Balance\": \"42576692\",\n            \"OwnerCount\": 16\n          },\n          \"PreviousTxnID\": \"9567A1FFB83FD1AA82AF35CF823D250AA5B838F68B69059D7B93A91F0334DF0B\",\n          \"PreviousTxnLgrSeq\": 69051437\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rzHXP1zuBviNtiogFMnNDcoUg88bprjNy\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36522386F26F639113\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"51074135D36D3A8FADE14CCA0263E7D943C8F517CDAF767D46D61A9098FB15AE\",\n            \"PreviousTxnLgrSeq\": 68170974,\n            \"Sequence\": 67764236,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"A00FDD8001AC5F421C519479AE0753D00BD73E70D5F46C1FE05A7FC9A75D5B5C\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"1077859898660000e-4\"\n            },\n            \"TakerPays\": \"1077859898\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"9610735646.15\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"e1f\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rpzdffxTgRvMawxbRSs9c26T1FTEjfgznz\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"LowNode\": \"a\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"A0299D5672F94EFF061A731BEFF56C3B7CE2F0B34BF8B306842AAA8EB157F72B\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"28430706585.3482\"\n            }\n          },\n          \"PreviousTxnID\": \"181DA9D348F1C67DF01074FEB07826CB4D748F7846C543E95947860DFC4224B7\",\n          \"PreviousTxnLgrSeq\": 69052947\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"8\",\n            \"Owner\": \"rPWjueM7txwURGpJDWF9yQRn8cVmWQTDnE\",\n            \"RootIndex\": \"903860054369EB5E000575BA61FE04684BAF0296B94620205D653E4481FE45D8\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"A036C77E7F7784EFC82B26848F2AF2E734FB02E152E7B4C7FE449B7DA4A7B854\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r9pfHFFyEEhtaDaMgVNtZZ8Ks7YL98ziRB\",\n            \"Balance\": \"108487708\",\n            \"Flags\": 0,\n            \"OwnerCount\": 31,\n            \"Sequence\": 67689880\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"A048D955CD50A4D4BA8F4811A07BBCC85570687F17E3E5617FA0EAB41195AD74\",\n          \"PreviousFields\": {\n            \"Balance\": \"88480180\",\n            \"OwnerCount\": 32\n          },\n          \"PreviousTxnID\": \"90426316EE57BF8A4FD97373E18948CE87C28E61229B7229D93A70200357F158\",\n          \"PreviousTxnLgrSeq\": 69051771\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rsRPr4ZrFePB3e3SVXBMHpwLCfc97qZq7p\",\n            \"Balance\": \"243954098\",\n            \"Flags\": 0,\n            \"OwnerCount\": 16,\n            \"Sequence\": 67107838\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"A08E6903854E92C042259EF18CA4D83CA52FA0DB2A48F088313F00043244312D\",\n          \"PreviousFields\": {\n            \"Balance\": \"223129098\",\n            \"OwnerCount\": 17\n          },\n          \"PreviousTxnID\": \"5D966F6F4ABA5A175AD4EF7156DDDEA4014F3981264279D2C03D79D5394C873D\",\n          \"PreviousTxnLgrSeq\": 69059589\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rN5wcyJZjT6Qd7sJZiQg2SHVtjnmqiq7W2\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36532386F26E8FD300\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"a\",\n            \"PreviousTxnID\": \"A8160635641B08B0A33C6FBAF775655C11CCD1563F5D1624CD49CC81200635AE\",\n            \"PreviousTxnLgrSeq\": 68902389,\n            \"Sequence\": 66720603,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"5000000000\"\n            },\n            \"TakerPays\": \"499999999\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"A08F25EF219A6A3D71BCA8D867AA742D8F78EE273E45020A3DEB99A63266EB00\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rnDZQsMj4ttxiiL23S8LEAzhbhNtK3P6ap\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653071AFD494E4986\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"2\",\n            \"PreviousTxnID\": \"00094CC849E8FE94F9042FE672F9AA8EB8C101F075EA37E607DCF8B5DCB6A959\",\n            \"PreviousTxnLgrSeq\": 68152674,\n            \"Sequence\": 67108881,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"A093691D25BA5C1B3F7C4F8DF6243D30B426720C6132DEBDF064844EA6D21A36\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7785989866\"\n            },\n            \"TakerPays\": \"155719797\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"e26\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rBE6UN87gwvyAuud7dSn2d6zdBUWCjgqRG\",\n              \"value\": \"1000000000000000\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"A0B45FDEE7A80068C7F95DEC7A4D3FED20DF02FFF2A06D9790131E45ADF9BCCB\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"34510797078.40518\"\n            }\n          },\n          \"PreviousTxnID\": \"A194AD311FBF745DDF5030868B84F5BDCF4C2EBF13F9BBA8B223311EBF53E364\",\n          \"PreviousTxnLgrSeq\": 69044920\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"9\",\n            \"Owner\": \"rszRAoxvAYy352HATq5bx3YGKpMBjeW1L7\",\n            \"RootIndex\": \"63632A6A77C73734541C586B0AF86C2932DDA8A1BC33996D0BAD887B111E53F6\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"A0C6B1D149693A85893D950BBB24886737AB84646D30CEE246F6C69B4DFE9B3C\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"5\",\n            \"Owner\": \"rEoF1AJrncEkjDkmoQNYxvCp49Wyn6RFvc\",\n            \"RootIndex\": \"89CBA147B92B0DE652E4119078318EC3C7690068FB422F738C4280E1F1219FDD\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"A0D9199272D583905E991D63E7B3566D3A9CA41A2B7DAD74B405FDFBA0161375\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"4\",\n            \"Owner\": \"rLK9N8ay11j21CKs3ryC5kp7SYR5piJByc\",\n            \"RootIndex\": \"31FAC236F1327A8B8E03CADD3342A9921CCE9A77DBA14A460C80DA47511C6A2B\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"A122E9B3DE7909E3DBA62FF873A71E15CF1661CDDFC204F632148719DF947EC0\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-20000000030.97925\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"r4oX1kuULiPWPRA2hwV1R7K8kB9gUxqTtv\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"4df\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"A15DCE1A9E392CF44A1A1FD0028D57E02EF609F196F6A541F26D55533C220645\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-83189677055.16001\"\n            }\n          },\n          \"PreviousTxnID\": \"A2E9900C0FC14BE06EC622B5CD4864D6A785C9F7402AD07B58D7F7A17CCCA93B\",\n          \"PreviousTxnLgrSeq\": 68966225\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rDsyrKqgbAuWUu1fmJx84Vgm3X4H53rztM\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365311C37937A5B4ED\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"BE37C92576C2663379388445C263F9959AD3387324E635FECE6F3A7BCFC67D90\",\n            \"PreviousTxnLgrSeq\": 68855825,\n            \"Sequence\": 67693671,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"A16AD2E4186931DE8EC281CB92A820F567F06171B2D93573CCD591D40FD2A444\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"23357969598\"\n            },\n            \"TakerPays\": \"1167898479\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"c\",\n            \"IndexPrevious\": \"a\",\n            \"Owner\": \"rhoYhs7WCmQKMPR22kQ5DhXw3pXQsjUsmi\",\n            \"RootIndex\": \"8F1778720AED549F5E26C11363918B910D1C40E5CABD1C8A1EE600D72082C662\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"A16E6C377922B0C0BAFFCA9A5316AA57FE3387BE72A92EF42D760FBD8687C471\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rsNTEynqepWnCvBMLb8x3tekWQXG2TxfEM\",\n            \"RootIndex\": \"A18B25639CB03250F9E0990A3DA19648A457BC49D1F55A4C6579DA7B75F878FA\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"A18B25639CB03250F9E0990A3DA19648A457BC49D1F55A4C6579DA7B75F878FA\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"3\",\n            \"Owner\": \"rs4wbWdssBMJRgn4tJak3eq1JgrJ7Pgfnk\",\n            \"RootIndex\": \"AF9F90BB4444829CEB4E4E4198ADE9408CBBFD7038DB631FD87CE91722AF7055\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"A1A3C59AA579169117044BFE394790AF5EB5C296530E288BF81A536F1052B60C\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rfe2f8LznaFRfwdoiZGPxej6zbdYAYe4Rq\",\n            \"Balance\": \"4190423086\",\n            \"Flags\": 0,\n            \"OwnerCount\": 53,\n            \"Sequence\": 66686339\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"A1A666F70A88FDE22138B7CB9F81F912EC2292CEA579E2EFD5343A2663FC3749\",\n          \"PreviousFields\": {\n            \"Balance\": \"3640423086\",\n            \"OwnerCount\": 54\n          },\n          \"PreviousTxnID\": \"A3112E405E6C6F72B2C51D9155736BD2C6C6251F787D66BF160C1CEFFB50EB66\",\n          \"PreviousTxnLgrSeq\": 69063911\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-19940808093.24649\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rJQe5K8Fxn2ktEMbwaWibo9LEYKHjqDzzw\",\n              \"value\": \"1000000000000000\"\n            },\n            \"HighNode\": \"4\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"5f\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"A1B06E1E84CA951F9688321A724BF4B9E4159D1E77F521E2C4EDB2F4C393D1BB\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-29940808093.24649\"\n            }\n          },\n          \"PreviousTxnID\": \"5CB20763C11F5175D015753F3B942FDF07F673E7EA2CEF0EC8020CCE69D08D91\",\n          \"PreviousTxnLgrSeq\": 68995009\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"9\",\n            \"IndexPrevious\": \"7\",\n            \"Owner\": \"ra1aHhcQxB9sHWm7ppBMKEQWs4FTfRGZAg\",\n            \"RootIndex\": \"A3F6CFCB36517239CD869C18F5C4463E8F6891EDCDBF24A29C719AED42CF02CC\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"A224E2F6245202DDFC9113864B4BB9BF57FE2ABA5D2A48F816105D8A730C1B50\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"10000000000\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"e3b\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rnGd8yRrg47RWDTtRdVRDJvjXHtqgL5yNW\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"A23D608C6750551DFF56EDE0CC4AC75C6A7CFF1FCAB969F53411F61E89FEE60A\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"40000000000\"\n            }\n          },\n          \"PreviousTxnID\": \"0D836E3B286B09944D76CA1A59EE3F239A9A99DAA73A637B98EE4DD5FD7CF2E9\",\n          \"PreviousTxnLgrSeq\": 68487694\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rUdhzvzWjHpSjP6CGksiit3bdgGLV5DXZv\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653038D7EA4C68000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 0,\n            \"OwnerNode\": \"2\",\n            \"PreviousTxnID\": \"0DC59691D0BD489ABF497FC11CAC8EBCCDEC01AD8A6C327CCA723BC0334980F4\",\n            \"PreviousTxnLgrSeq\": 68778772,\n            \"Sequence\": 67546185,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"A258BBD173BB1EC6346611A30914787CAD143F4817080BD9378C678B282B1A1C\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"10000000000\"\n            },\n            \"TakerPays\": \"100000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"ra2BXpvnVUqyCNaxAUf9Co2AxYzuey129Y\",\n            \"Balance\": \"327085734\",\n            \"Flags\": 0,\n            \"OwnerCount\": 149,\n            \"Sequence\": 67609065\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"A2885BFCB6A9332557D131762F3011EADA740CB40254D93DFF28DE82D6BA26D5\",\n          \"PreviousFields\": {\n            \"Balance\": \"312685734\",\n            \"OwnerCount\": 150\n          },\n          \"PreviousTxnID\": \"F91406D00597008711FFB469EE9A9A2BA8A4890971E34F4B1DE44F136F8B8A41\",\n          \"PreviousTxnLgrSeq\": 69062039\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"9dd\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"racxdehrfnx9kEzWRF2vcMPCzx8WRfF6G9\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"A28A1BF4784F0CE8C0A6AA4E9C699D95DB8B1DB9D14CCB0E92CB6523C54B1C23\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"7785989866\"\n            }\n          },\n          \"PreviousTxnID\": \"6BB0777805DCB6E0FDAD5EF995C82DC581B7EFD3B2A18D8F610745285C32C052\",\n          \"PreviousTxnLgrSeq\": 67970876\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"4a1\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"r3Gqpysb37rsJfn8RTCG6bSmigvzYPbWa4\",\n              \"value\": \"9999999999999958e-1\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"A29338A5A4B759008030F07AB7F1AA66ABA489FDD804850A6A1DE3E1410BECF6\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"7365224861.568448\"\n            }\n          },\n          \"PreviousTxnID\": \"B29EA50F46ABE8D2C2BF148F0E4CFE0E1C5A45255087FC278565509DE6920CC8\",\n          \"PreviousTxnLgrSeq\": 68902192\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-19749999763.16335\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rLCKThc3nyrBN63QzPHKoHHPA2iN8RH9gp\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"HighNode\": \"1\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"972\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"A2D6981E72360E4FD1D64E548CF4A91789758CBB7A129372280B7F2806BDAE32\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-31749999763.16335\"\n            }\n          },\n          \"PreviousTxnID\": \"2E0BEF5256305F682A0466471CE585A66A508C0D719353DCA446285DDD2A7523\",\n          \"PreviousTxnLgrSeq\": 68971804\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"raQmxvieBXeCfDzRKXdekiw7qucsszMReU\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36531FF973CAFA8000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"2\",\n            \"PreviousTxnID\": \"9699B21DE420359C3E0D27A399762A11EF6A6B675EB093A03F0E1AA1D9FD5E4D\",\n            \"PreviousTxnLgrSeq\": 68856378,\n            \"Sequence\": 67458235,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"A2DB4D287B62872BB9E2C8D914A75C7C753E4B8A0F43EB982D2E84D4826D785A\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"30000000000\"\n            },\n            \"TakerPays\": \"2700000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rJQe5K8Fxn2ktEMbwaWibo9LEYKHjqDzzw\",\n            \"Balance\": \"1992744679\",\n            \"Flags\": 0,\n            \"OwnerCount\": 524,\n            \"Sequence\": 66694147\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"A2EA5A19106582BE4D5CA7028E1AAEF54526366B757270A5167521F1C3687C1A\",\n          \"PreviousFields\": {\n            \"Balance\": \"1940864679\",\n            \"OwnerCount\": 525\n          },\n          \"PreviousTxnID\": \"6CE2012424C6230531C93E16107197465A2AB75E639E2E217E18A1FF6A5A5327\",\n          \"PreviousTxnLgrSeq\": 69059168\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"5\",\n            \"Owner\": \"rPc9ia41Ad7unkvCE7gKKZPovAuCBPt63E\",\n            \"RootIndex\": \"C00C03EF344B97E9DDE9D36F7F85E6B261FFF9B1CC18D44FA106B63838DA70E8\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"A2FD32BE2154348ED8F1723B0BDAF8A303E5CE4A6AE9F9AF094E39C5FB44CF9F\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rfn3KpY6HS6aE1vviRjhHfNn3BfuSrhmzv\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520B159F9AE2ECF6\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"6653C7EB53479B76D6C2DAE746163AF22DC10DA00055310E755839902D5CD2B0\",\n            \"PreviousTxnLgrSeq\": 69031588,\n            \"Sequence\": 68449354,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"A35399D240C10AC8308DF50A6E9D4485D2B9627549E6415EC76E01AF226D84A2\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"8800001000\"\n            },\n            \"TakerPays\": \"27456003\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"ea9\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rqben5VgPyij1hAY4bi4yPyp3vf6GgY3z\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"A35BB9EF1ADB94E58FD8F2D8359B4AB8933B38BA63B3BB4E6E289C0F891CC4BE\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"33333333333\"\n            }\n          },\n          \"PreviousTxnID\": \"4C35B128DF9AE413D59B0FBA7333E17946B5C3378ABEBCDA94C6965F7323E748\",\n          \"PreviousTxnLgrSeq\": 68792593\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"6071166604.82374\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"ebf\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"r3pDCAfw2nB715iBJVMix9M8adFpHyfGRN\",\n              \"value\": \"9999610698104584e-1\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"A36AA1A700F58C47EC5CED6A6CD82B0B6DF4D900EFEAF166D185EDA11FF69F3E\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"26071166604.82374\"\n            }\n          },\n          \"PreviousTxnID\": \"AC0849BA9437A4829BC26C3F9E0FE6B81CEAC222E4B79681156BF6450BB7BD3F\",\n          \"PreviousTxnLgrSeq\": 68914890\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"5\",\n            \"Owner\": \"rpRfuSRwU9nUefy8T4z4RXUEDU2baW1qhk\",\n            \"RootIndex\": \"22E325E36150B95B5063CB0358868DC0DC3F9BA49650791B1EB2F8FC4D7EEABE\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"A3CC222F09DFCC1DD7F1C6DE98F68CB1BFEF67991A7E697E53D251E552351902\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rHyR27TRJ73Eu8bqe5wBxX64hJ9Xf2c5XQ\",\n              \"value\": \"1000000000000000e-1\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"ee2\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"A445D4189239D8E8D245858737EDDDEB7E00764D937A725F8CB6CFC4F57FCB12\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-50000000000\"\n            }\n          },\n          \"PreviousTxnID\": \"33BB5DEEC2392CCE623157B3071AC108CCC903D1D793339B4CAF8710F840F39D\",\n          \"PreviousTxnLgrSeq\": 69038927\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rQDGBD8WCV3szWgH9rvyhjPHPX66KPGVnd\",\n              \"value\": \"9999610698224589e-1\"\n            },\n            \"HighNode\": \"3\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"e6c\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"A4524F6FCA8CB13186DE816BFAECBA4325D03780764AC99B99CA4B894A0242DB\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-11444749501.19\"\n            }\n          },\n          \"PreviousTxnID\": \"F41CF735189E8775D0096342A3A5871046C404F98194BBB2540D7C3104F9B910\",\n          \"PreviousTxnLgrSeq\": 68898515\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rEoF1AJrncEkjDkmoQNYxvCp49Wyn6RFvc\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365216345785D8A000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 0,\n            \"OwnerNode\": \"6\",\n            \"PreviousTxnID\": \"281347F2D5790B43F578CAC10CFE652745CD5E083A375D92A42216B0AE0B357C\",\n            \"PreviousTxnLgrSeq\": 68996885,\n            \"Sequence\": 67287667,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"A476A3E60C879CE2AE8B6B4915B7147DCC6FA9E803C5DFB1EA99A05D7AD33835\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"49600000000\"\n            },\n            \"TakerPays\": \"310000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"2\",\n            \"Owner\": \"rpq5MrSjiQgMj3Rk8Kvf1L3Gzh4xp1CUdZ\",\n            \"RootIndex\": \"DAE42822BBC8D9446224B0B3E53894A733650689371B860F29D7E9E0A7FA8F93\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"A48005BCE76214A92D0D7DAA0F862DF45816769F9873DAE7244A4DE29006F764\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rUg2bKuyZzQLPopT6uNZK7w4zvJHLB5LV\",\n            \"RootIndex\": \"A49DBA4C896E5CBE0B1BEFCA1354963C26585F46C509547842A83E21D1A28E04\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"A49DBA4C896E5CBE0B1BEFCA1354963C26585F46C509547842A83E21D1A28E04\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rEay1pxUyiL4ru86hJLv4bKCzwm8EL4Mzw\",\n            \"Balance\": \"831543657\",\n            \"Flags\": 0,\n            \"OwnerCount\": 64,\n            \"Sequence\": 67325256\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"A4A85C842B519584176FA08FB90A184ADFC01D29D620EB5F8DD186E2308F577E\",\n          \"PreviousFields\": {\n            \"Balance\": \"153698657\",\n            \"OwnerCount\": 65\n          },\n          \"PreviousTxnID\": \"FB6EF0E44AC6B3BADAE66745279443100E7328102FEF07C1623B4BFBB2E30485\",\n          \"PreviousTxnLgrSeq\": 69063761\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"13\",\n            \"IndexPrevious\": \"11\",\n            \"Owner\": \"rDSSG7NwYYV545mfcRdVExpAU6ys9CqoCk\",\n            \"RootIndex\": \"80880B09794A9560ACC8DCA596479D6499085A386CECB1E62B1021BEEFBF0FC3\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"A4B2A072E5F5704CE8FD121064B6D14810AF64492D38F4E203343878D01A1496\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rNirEvsSGiRDGtL68t6MJwfAyU1MExreYv\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521FF05B7C717688\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"4\",\n            \"PreviousTxnID\": \"2B6359C2FE92EDE73D4E259286A22F1B95EB5927365FD4AFAD017F4557963EB2\",\n            \"PreviousTxnLgrSeq\": 68898711,\n            \"Sequence\": 67544609,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"A4B8692180D30516FAECA13294564DCC2E7B675604EE3CE7B79393CF1882AEF1\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"24903444053.01201\"\n            },\n            \"TakerPays\": \"223881962\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rD5TVx1akARpWNKumsadd69Wask2L69v7E\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520A4C376E4E33F1\",\n            \"BookNode\": \"0\",\n            \"Flags\": 0,\n            \"OwnerNode\": \"9\",\n            \"PreviousTxnID\": \"70AFEB67C0B4B2097C4A0784E82C8F35B444DC94F730AC13AFAC316DBC6A3E59\",\n            \"PreviousTxnLgrSeq\": 69024565,\n            \"Sequence\": 66269662,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"A4EFF93C1F56CAC095BF99424136495A0F4B7491B13136AD11D9D8BB3F7F5638\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"11557500000\"\n            },\n            \"TakerPays\": \"33500000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"23401884889.582\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"eb6\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rwsVYq1xyweADXhtBLLfr2X9FL57DnGTk3\",\n              \"value\": \"1000000000000000e-1\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"A4F13AFC64DB09E617B928404D9090B77FB81EA6329E77C9B3C8695B24A7D2F5\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"25500000000\"\n            }\n          },\n          \"PreviousTxnID\": \"2C6210D0035C1FAC126CB13759A1BAA5BCA893BA6FD598FB977C5A2BECCCEF12\",\n          \"PreviousTxnLgrSeq\": 68992730\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rJ5v25nqLv1P2Fij67kW1QE6iWqthP89v9\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365304281BDA0E6C6B\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"7\",\n            \"PreviousTxnID\": \"B576349CB857CAE5C980EB209BB89B68E66296DA278CC7D37B573CA821B14373\",\n            \"PreviousTxnLgrSeq\": 68886473,\n            \"Sequence\": 66614772,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"A582C8341F945AADA7628A22B747C9F88420F2FC8B412021690DFC2517621718\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7785989866\"\n            },\n            \"TakerPays\": \"91096081\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rnSxpc5YM8agfwsEHN3F3EKN9WQ8yyTcAf\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36530FFCB9E572F348\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"1\",\n            \"PreviousTxnID\": \"FE1194FECDA187EFFF39758778EC5B991FB8DD0C6DFBAE9A058428CDF00BCB72\",\n            \"PreviousTxnLgrSeq\": 68885072,\n            \"Sequence\": 67372679,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"A59A6B152A2DFDA544F7B7EF6294CA81465F88060312958118553E4A62315878\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"33333333405\"\n            },\n            \"TakerPays\": \"1500000003\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rsdrgJ5xtkPpnWfJeeshHZLWmQEMS3cFzQ\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653071AFD498D0000\",\n            \"BookNode\": \"0\",\n            \"Expiration\": 722825150,\n            \"Flags\": 131072,\n            \"OwnerNode\": \"4\",\n            \"PreviousTxnID\": \"AF3DB2E35A31999FA01A69667BF91E3ADEB758519D572B5EF6ADB28472AD8325\",\n            \"PreviousTxnLgrSeq\": 67961527,\n            \"Sequence\": 67219913,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"A5E92766C10185BBFE2CF1E6487A34BDACAA884DA66E87571BC7BAE9369BE2A9\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"9000000000\"\n            },\n            \"TakerPays\": \"180000000\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rKTKekwyDDoxNtZZTwXL9ebqeVYRp47BVq\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521E32B478974000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"9\",\n            \"PreviousTxnID\": \"0CF94EB4B06168F7AF6785929CC77CB71B6E0F18A0396B5283F6F14C67D16FA9\",\n            \"PreviousTxnLgrSeq\": 68883941,\n            \"Sequence\": 66512340,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"A60B8092B78C8BB2429BF2ED5DFE2D1BFBA492AF07325C9F21B57E1B0F72DECC\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"12000000000\"\n            },\n            \"TakerPays\": \"102000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rC4M78e2ktZz8QwB5SUSEeeeSi5rcnxrJ\",\n            \"Balance\": \"946891922\",\n            \"Flags\": 0,\n            \"OwnerCount\": 211,\n            \"Sequence\": 66527175\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"A60EF52B86FE705191F52D4AFBF196550104B30B26A48881505EC907450D089E\",\n          \"PreviousFields\": {\n            \"Balance\": \"632997727\",\n            \"OwnerCount\": 214\n          },\n          \"PreviousTxnID\": \"EEF1D1B99391834037449CC492BE6542D1A67D211B76CB2D8ECCB6D92819A29D\",\n          \"PreviousTxnLgrSeq\": 69063828\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"20108393198.77231\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"59c\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rUrtZA3gFTbfu9vkdygv2jzgBoFRYMNv5L\",\n              \"value\": \"1000000000000000\"\n            },\n            \"LowNode\": \"1\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"A635BDCA41431CD271092535A6D2F7BCED7765C5F69E1B2A3332B8E66D3F107E\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"30935989536.57279\"\n            }\n          },\n          \"PreviousTxnID\": \"E3AD283C9617060D2D1FED441EFBE9726F080D930F989ED0F376EC78295D2F1C\",\n          \"PreviousTxnLgrSeq\": 68939846\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"0\",\n            \"Owner\": \"r9edE9m7sNZEwgT6foU8ahfA1ocrNify92\",\n            \"RootIndex\": \"A7F6B4896A9411DAFD99903813D058FEE281A7575316127C4C3971444E1802F6\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"A64235A795777BB3B3561EFED34D75A6C8489A63D94D2A1DA425C3802E5F751C\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"11\",\n            \"Owner\": \"rpTLVf85qXWoPWNyeUXnTkc1isdAWLCYh6\",\n            \"RootIndex\": \"00482C4BB6DBE57ACFC95A6AE413CA707E0E8FC3427DF34DCF950E33BE8A3671\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"A6A01AFA1B26772A7D84BD21D403319D85B3FD1EA14944220D0A93793C93900B\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r3Gqpysb37rsJfn8RTCG6bSmigvzYPbWa4\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652232BFF5E3A6735\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"7\",\n            \"PreviousTxnID\": \"15D58BCD2BE1162625685FF5CBD956286E1913DCA332FA7B6577354118E08579\",\n            \"PreviousTxnLgrSeq\": 68902233,\n            \"Sequence\": 67430613,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"A6A2B3F242A7FFDEC049AB9AD939F7892DFAA7C59528068D687F4C61B5F3AF7C\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7365224861.568448\"\n            },\n            \"TakerPays\": \"72915726\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rJFmgWo13y1o6C42H1LC7qDWcu7Z38QaAd\",\n            \"Balance\": \"1830225932\",\n            \"Flags\": 0,\n            \"OwnerCount\": 64,\n            \"Sequence\": 66550708\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"A6DCEC1E63DC054EA23A1E8D33C7A78BB61EE895BB5A972814553EEFE29560E8\",\n          \"PreviousFields\": {\n            \"Balance\": \"1510225932\",\n            \"OwnerCount\": 65\n          },\n          \"PreviousTxnID\": \"2069ECE0A887FB3BEB37EE752ECC942BEFED022FAC74B8559AC544C5FF4F8BB1\",\n          \"PreviousTxnLgrSeq\": 69063408\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"a\",\n            \"Owner\": \"rMrt91RkHZwmYfUbVX72iwmbiaRxnKXjo9\",\n            \"RootIndex\": \"2DCE653DA8040F38D2A133192FB23D6A31171489C76E8C4873E775525AF64637\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"A6F6BEC078D424C49F0FB405474832144AAC20503CEA74FD3B1F5A97C160472D\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"b\",\n            \"IndexPrevious\": \"9\",\n            \"Owner\": \"raBj3rXVSVdcA66ge5mMyS1iWzMFSyxmB6\",\n            \"RootIndex\": \"4055FB48F322A08E99C1FCA77D7AD19784377E9B1E21FEA735B436716693D21F\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"A7084642202371A37CAEEC18109B314B4BB2016E1C89C736C4439FFCA3888A68\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rhxWqi4kQsADuck5wUsbXCcR2Pq44kbjZs\",\n            \"Balance\": \"253695775\",\n            \"Flags\": 0,\n            \"OwnerCount\": 65,\n            \"Sequence\": 67431414\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"A73067CFD6C84522F3ED0C2C0F2A57CEE91D66F846DA69B0FBE0B06A4787ADB0\",\n          \"PreviousFields\": {\n            \"Balance\": \"200304861\",\n            \"OwnerCount\": 66\n          },\n          \"PreviousTxnID\": \"BB42CF884B6F900D5BBDBD689BF59FC422F5C29A50E32485244C7AF32E297CBA\",\n          \"PreviousTxnLgrSeq\": 69063545\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rGJ5He1dXx78w8pGB7zHH9K7dWd9pF8p39\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653038D7EA4C68000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"2\",\n            \"PreviousTxnID\": \"50ACFB65011D41507415148EEF3ED8C08BC5B25A3960B2D2F7A81515A1D3A39D\",\n            \"PreviousTxnLgrSeq\": 68876447,\n            \"Sequence\": 67090000,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"22000000000\"\n            },\n            \"TakerPays\": \"220000000\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"A74936AC59606665B40FA9275B322F632E5D73844D9C424B50560DE1A0E6C2CA\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rpq5MrSjiQgMj3Rk8Kvf1L3Gzh4xp1CUdZ\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365218CC45E4884000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"3\",\n            \"PreviousTxnID\": \"B2DC679B509411CD9CA69F2B95EB17798EC8E8808A41CB09FD92E243931D271C\",\n            \"PreviousTxnLgrSeq\": 68900183,\n            \"Sequence\": 67528327,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"A79067C31C0083C5CBC67FC42A949B7060293D36E98D1B29E4B45FEE4A228101\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"5000000000\"\n            },\n            \"TakerPays\": \"34900000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r33yXJH6HkJc128VKpjvrcdC89M4zDaP9f\",\n            \"Balance\": \"121527745\",\n            \"Flags\": 0,\n            \"OwnerCount\": 21,\n            \"Sequence\": 67761617\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"A7EE622AFE4D63967C6704F5F6A7BCC5F80B5D4858BEF44455F9526B1A6ECBC8\",\n          \"PreviousFields\": {\n            \"Balance\": \"60874884\",\n            \"OwnerCount\": 22\n          },\n          \"PreviousTxnID\": \"70F595C1C55B0D64679C9CEA9B3C29F8D16AAF21A291014BDC9556213E2F4731\",\n          \"PreviousTxnLgrSeq\": 69044055\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rnEA5VmDp13iDZdcGUg2X2nzYkaKKDrf86\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521C110215B9BFFE\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"2\",\n            \"PreviousTxnID\": \"DD53BB45E3C5833A3EC50558D5E4FAECCF8664F214315B453EAA55D0DC49F2B0\",\n            \"PreviousTxnLgrSeq\": 68932365,\n            \"Sequence\": 67525827,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"18106227692.30771\"\n            },\n            \"TakerPays\": \"143039198\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"A80DF912740DA45865DC78BD1F6025892904583D3E13CE26BF0AEE84D537FBCB\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"41000000000.00001\"\n            },\n            \"TakerPays\": \"323900000\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r98DGNQEGR9x2bhRVBbuiHAqxq2aDD6pKa\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520E718D01261361\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"8\",\n            \"PreviousTxnID\": \"C1D4827EF4940F7635B3366B2ACE8384176F755B3D9E463AD3FF809C5BD340A0\",\n            \"PreviousTxnLgrSeq\": 68997788,\n            \"Sequence\": 67202779,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"A83044815C39EFFED830CEAF8B9F4A9DC8EF04FFA32A32B7A9488A8DFA500285\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"3321412528840000e-4\"\n            },\n            \"TakerPays\": \"1350320296\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r9ma91EcMDXDCLQZDvceT9tDwHRT41gumt\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36522386F26AB39D69\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"6\",\n            \"PreviousTxnID\": \"3AA110944AC3F2DDD2A17D436EC18083179C60426CCA20E5F6AA23E52F872783\",\n            \"PreviousTxnLgrSeq\": 68901295,\n            \"Sequence\": 67518236,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"A832FAE6C64A1BE78EC5E0A29CAB871F1936845F33AFEAAEED4D5AB460590C1D\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7786389866\"\n            },\n            \"TakerPays\": \"77863898\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-7000000000\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rPVXceb6wrQp9apSTtyZmWcxKmYRBnCsdt\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"6ec\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"A873C7EAF6D63D7BA47E5511409D758297751D832096141D91708582DF1BFEA4\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-7785989866\"\n            }\n          },\n          \"PreviousTxnID\": \"05046DB0D93993F17D1496CB86B4C173798DDCD5D18825DB20A3B7FF2CD3978F\",\n          \"PreviousTxnLgrSeq\": 67994399\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rKTKekwyDDoxNtZZTwXL9ebqeVYRp47BVq\",\n            \"Balance\": \"511202660\",\n            \"Flags\": 0,\n            \"OwnerCount\": 130,\n            \"Sequence\": 66512409\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"A8BEA3312D3713064AE079EE0FFF99669EEFD0DC887D1030E9CDA99BD912E94B\",\n          \"PreviousFields\": {\n            \"Balance\": \"409202660\",\n            \"OwnerCount\": 131\n          },\n          \"PreviousTxnID\": \"0A9FAFA7D0F6F9B9A7D9411AEB1E07C7496D3D3D03C5AEF768EE1FEDE8C83D85\",\n          \"PreviousTxnLgrSeq\": 69061652\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rfq8N8xR3stwknY7Smup425CUFCjsTwcWP\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365222D10C4D5C0D80\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"d\",\n            \"PreviousTxnID\": \"DA12E33D26557082ABE1A896E82F16D47F53642810A8875D81F3518DD8EE8075\",\n            \"PreviousTxnLgrSeq\": 68790474,\n            \"Sequence\": 67058113,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"32700391407.10224\"\n            },\n            \"TakerPays\": \"320463835\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"A8CED4E76946778300D7FC69C4F99406BFF30DABC72D85B66518165C2DD4EFC1\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"9\",\n            \"IndexPrevious\": \"7\",\n            \"Owner\": \"rLPotHoaZNMvAKnTE1xUaVYsHVKKf3SzYY\",\n            \"RootIndex\": \"E92946311A8D67A1A6C44AFF7C7607F050F7AB45D969D3FF60C22B6F235ABDA7\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"A8D01DC20ACEA4E4C8BEF9CCCF614EFF60A4DA431520114594B4732EA5003377\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"2\",\n            \"Owner\": \"rh4Vn8BNfpDZecwkh39GQvYJ7b7osZfML2\",\n            \"RootIndex\": \"D266B60DEDCB58F1302E2EC326F65DAD99442B0A3892B33AF70A030F8003B091\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"A9385503D7853551C83EC33251A2FAC4368E7E95EA6C67E951A803DA7F215921\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"5\",\n            \"IndexPrevious\": \"3\",\n            \"Owner\": \"rHycUxo3HpqiVRhve7H8L4y94dvPHTubXw\",\n            \"RootIndex\": \"15A63197DC120F0DBF4D6554AD08D374F15ED4242DB6396F1A24D4B4D45765E9\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"A9C033C58B66508F715351E4F289EE730DC9A67997DE4E2613E65BDBC57A6F72\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rB7sr2UvCBewPJXg9My4kjDFWDF9URdRuJ\",\n            \"Balance\": \"343730068\",\n            \"Flags\": 0,\n            \"OwnerCount\": 110,\n            \"Sequence\": 67712961\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"A9F8127E33CFA44B2962E5680498D35AAD667FF520C32B9742D8C99ED1DEB62F\",\n          \"PreviousFields\": {\n            \"Balance\": \"291684269\",\n            \"OwnerCount\": 112\n          },\n          \"PreviousTxnID\": \"CAF5ABF46EFCCC0A3C15A89E368E4A6F120A60A72971FFA2C496259AD7C8BED5\",\n          \"PreviousTxnLgrSeq\": 68986684\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rLBBX2NYwmoiRB68BQP3eo15BbaYtR8qdK\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36532386F26F4B69DB\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"28544CEA162AC5EBE12B811ECAC9E6BA9FBDBCE647A72F29A1641165B0CC4078\",\n            \"PreviousTxnLgrSeq\": 68816537,\n            \"Sequence\": 57721429,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"AA015C4DCD58F7DE97ABCB9BB7195E9BAAC643AC28D19F8C3428A5E47EAC9414\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7785989866\"\n            },\n            \"TakerPays\": \"778598986\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rJxQUBBc7qcHrGcjrb265KwXeZrVio5Eri\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365207AB995BE77C8B\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"b\",\n            \"PreviousTxnID\": \"BD4228BA16A8C66F3AB238BCB006141DB267D30AB9C8FD3F1798AAB7A11907B9\",\n            \"PreviousTxnLgrSeq\": 69056140,\n            \"Sequence\": 67219935,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"AA386AECC4E77D658361699869EF2A727F2C7F3095CE56CCB57C65C4F68D57FC\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"1399241951779892e-4\"\n            },\n            \"TakerPays\": \"302096337\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rsGTbAufvBkkN5xpaKZtEMCagAW5SkJEUL\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653081A8EB110F5C0\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"e\",\n            \"PreviousTxnID\": \"375C126DAF43BA6AE280D4CC1796FF9A7DE4026ABE1422AE4CC9582909841257\",\n            \"PreviousTxnLgrSeq\": 68012566,\n            \"Sequence\": 65899667,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"AA4C1856FAA418889095EE7BCC8B2BEB5F7FDB3F8317229408E60D5D758E867E\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"3503695439.7\"\n            },\n            \"TakerPays\": \"79919292\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"1\",\n            \"Owner\": \"rPpC3LrzwLjh2qU7XtQKFb4GCZyAUHz7Ss\",\n            \"RootIndex\": \"4FDE2CF0716C44802B12BE3CB7A54B50CAC3131F61FBC907E69D3CDE73876EC4\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"AA736B186E2671E9B6D14C9FFC00DB0CFBDCB0005166D023EA0635580359128D\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r3oDrfWCL4zZRGoUNRd8Ywu9PJWFZXc764\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652082DA82445E000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"4\",\n            \"PreviousTxnID\": \"AFFD3B8701CEFFAF22F9B56F13DC912BEEB1963B0F2266C70B8574D89E5DBBA3\",\n            \"PreviousTxnLgrSeq\": 69054943,\n            \"Sequence\": 67440526,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"AABD41976A4B8CE8B26AAB4CE3B781308F9666D9BBC5EF8C5C8D551F08ECAED3\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"TakerPays\": \"230200000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rK1QTLhkJgn7zvG8ZcGJea3XzWfj45xhRE\",\n            \"RootIndex\": \"B6EF8BFF123234E8BA582113E1AECDF652ECB60A8C5C4B8D2FEEC7CE39044E48\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"AAC2C8603AD1304B7F5C9DF934BC741FE66901B81B429C79A44049292B9E2A7F\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rUrbD1rAAkr84UER2ZUxTP5ohhSKzvC8tc\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521C1102156D74C0\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"10\",\n            \"PreviousTxnID\": \"4175C06286D47269B3EE92C550849E3D8FE6C16FC2BB1F489BC4956AC50599E2\",\n            \"PreviousTxnLgrSeq\": 68905676,\n            \"Sequence\": 65999090,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"AAC5013CEF59F7F78CB705D3F468C646DB30413EA4B44AC54288E2F2B36C61F2\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"2000000000000000e-4\"\n            },\n            \"TakerPays\": \"1579999999\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN5wcyJZjT6Qd7sJZiQg2SHVtjnmqiq7W2\",\n              \"value\": \"1000000000000000\"\n            },\n            \"HighNode\": \"1\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"1ea\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"AAC6BC14218B57416AAAC179F729FAB74C123008A91C654B34503F78E7711107\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-10000000000\"\n            }\n          },\n          \"PreviousTxnID\": \"7045A5C5E72727C9B23D96F1BD652DF60FBF6E333F9614D8DEE3577FCF87EE5E\",\n          \"PreviousTxnLgrSeq\": 68070769\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rwmZ1gXEQzFAzzEmYyGjHDhmccg5SGj7WS\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36531717B72E63E229\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"6\",\n            \"PreviousTxnID\": \"4121990F92979EFF352AFA25CA3E0355A6B418C70D9CF1DE36BE743C0188496B\",\n            \"PreviousTxnLgrSeq\": 68892751,\n            \"Sequence\": 66329417,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7021934395.5\"\n            },\n            \"TakerPays\": \"456425735\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"AACAC003EBC79103AD050DC075D62E3D8380F86FC8581DAB76FFDBD4F25F20FB\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7796019890\"\n            },\n            \"TakerPays\": \"506741292\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rsVD9Hdd3p4LMC7vUwvx75uNLY3d3eiE2b\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653038D7EA4C68000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"1\",\n            \"PreviousTxnID\": \"5A1C3AFAE17B4FA3BCEE9348C758048143B0F2674F200538DE46907149F99071\",\n            \"PreviousTxnLgrSeq\": 68008819,\n            \"Sequence\": 60706988,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"AACEE75C8C6A113E2CBD304F68B2E5E19EA1A691B5E3C4A66803B1C3EBE55C24\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"10000000000\"\n            },\n            \"TakerPays\": \"100000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"racxdehrfnx9kEzWRF2vcMPCzx8WRfF6G9\",\n            \"Balance\": \"109053134\",\n            \"Flags\": 0,\n            \"OwnerCount\": 35,\n            \"Sequence\": 67791226\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"AB139C83D14AAA75827D87A2F32D98F1420D0C6CC70F072F2C1574A7CE4047FE\",\n          \"PreviousFields\": {\n            \"Balance\": \"88030962\",\n            \"OwnerCount\": 36\n          },\n          \"PreviousTxnID\": \"8FBAC469CDE97C930941360C6EB21D0B7ECB6B21E845144E9A7D995110359A09\",\n          \"PreviousTxnLgrSeq\": 69064147\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rh8TcfXzDZdQBB8R9aQfE2zUUwpd1zbEWv\",\n            \"Balance\": \"3826872428\",\n            \"Flags\": 0,\n            \"OwnerCount\": 20,\n            \"Sequence\": 64540141\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"AB1DF9F9B36046643FE7EC17B2DBABD53F3BFB9A088454340B027E0C7E340C90\",\n          \"PreviousFields\": {\n            \"Balance\": \"2226872429\",\n            \"OwnerCount\": 21\n          },\n          \"PreviousTxnID\": \"1F53C9F4ED52A9F4678FF0303A126FDB51D1A3F12033F248189173F5EC404372\",\n          \"PreviousTxnLgrSeq\": 69053899\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-1200365875950437e-4\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rEqtQj662PMqja6Cb3pyK5V6xi2RGbcFxD\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"HighNode\": \"3\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"63b\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"AB4868A49FC4EE506D33226E7F5A6636297AB18DB7C0BFB3A0AA4BBAE609F0A2\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-2073658160009827e-4\"\n            }\n          },\n          \"PreviousTxnID\": \"ED77B637E0DD68C6625AFB28964A9BB217C7FE9187110F2223E9CAFF656AA0CF\",\n          \"PreviousTxnLgrSeq\": 69015706\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"5\",\n            \"Owner\": \"rT8my4rryyrydKwE4W9LqQNosfNjZQb3r\",\n            \"RootIndex\": \"CEECA269517637364CD26024750DB8696D0B6049357AD74598E564C1029C25CA\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"AB5FA1569EAFE69DE5D8B3765F617E0FD60F2D4CA6C803D6A0FDA6B134ABD31E\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rDwdy5963o51eDFKzgJ23VJUy44AX3QrS6\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365217CD9D4F367603\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"3\",\n            \"PreviousTxnID\": \"4B2B153BDAB1F289FA5E237CDC8612A5CE1BBDE7A73D577CBF958B85B4DEA666\",\n            \"PreviousTxnLgrSeq\": 68950129,\n            \"Sequence\": 66614439,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"ABADAAD3D2BD68291348D6993D8F71D972428E0672158BFB2F47DAEC531F7BD4\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7785989866\"\n            },\n            \"TakerPays\": \"52166132\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"1\",\n            \"IndexPrevious\": \"1\",\n            \"Owner\": \"raKfcCtqnoopzuWrRWY88p5hbTBmF7RzTj\",\n            \"RootIndex\": \"ABC961C8C3C4D4C719CB2A456199B453E04E61649B1B7FBE6F708C323ABE5F6D\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"ABC961C8C3C4D4C719CB2A456199B453E04E61649B1B7FBE6F708C323ABE5F6D\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"6\",\n            \"IndexPrevious\": \"4\",\n            \"Owner\": \"rMrFWesXLbeMANpexJkZdYYtCwhqot4x6B\",\n            \"RootIndex\": \"5EAFDFBD8C1EDCD776A74B3FBB62C79A93496BE28DCE4F3741091AEA2C08B08F\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"AC06E3F7B84A78DDBC749CD9ABD645E5B9133319EEC5AFA427BED9C8F419CFD7\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rMRX7LEEzj9s3Hm3fysfBXnkNzAaRbDawT\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365311C3793747E980\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"11\",\n            \"PreviousTxnID\": \"BE50BF6A18751D8F90461B455FDA7BB30BB780AEB043056B49AB572B772A68CA\",\n            \"PreviousTxnLgrSeq\": 68901742,\n            \"Sequence\": 65793745,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"AC32F292830AD50E2616BD2CC904CBD642C232673F69F27FDCCC04249DC999A2\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"10000000000\"\n            },\n            \"TakerPays\": \"499999999\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"177\",\n            \"Owner\": \"rGT6ze5CuPEUzsk92YnLLkEqjv6qqhabrF\",\n            \"RootIndex\": \"2279C9615150BD251FCF0F1A84C119C6B19DDF9460D01E9492930D3887126F83\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"AC3A86606DE6F09E0145927A474FBC2E986ED9D1871DF40A012DA433E0EEFC4A\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rfc7iQscNnWECTgwfRg4T6MExyVTCiTWTV\",\n            \"Balance\": \"8502484222\",\n            \"Flags\": 0,\n            \"OwnerCount\": 40,\n            \"Sequence\": 66755402\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"AC6AF63A5A58D38D7DC15DDEDF895C773A68CA0C096CDAAD8F8F5AC6E1DB142F\",\n          \"PreviousFields\": {\n            \"Balance\": \"93615167\",\n            \"OwnerCount\": 41\n          },\n          \"PreviousTxnID\": \"A2961E5675266689ACF53144E868BEBECAEFCEFD7DE62DBE6E245E22169B63E5\",\n          \"PreviousTxnLgrSeq\": 69043123\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"1\",\n            \"Owner\": \"rNYRNtrFPumPwsB7zbi3VjZLg6WLWBUJvy\",\n            \"RootIndex\": \"73E830BB83876DC36209608EBC560F237C937805C716E48A17394AA18A99FDE4\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"AC6B6A78BECB85C2CE19382E1C87F03DD7C29A1A76BDF856916364E21E4A632D\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rPpC3LrzwLjh2qU7XtQKFb4GCZyAUHz7Ss\",\n            \"Balance\": \"533134700\",\n            \"Flags\": 0,\n            \"OwnerCount\": 52,\n            \"Sequence\": 66167450\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"AC82C65A1D67CBB2C7C0F71ED6771857558EA9923CEE67C726F552139BD3C6A5\",\n          \"PreviousFields\": {\n            \"Balance\": \"359384700\",\n            \"OwnerCount\": 54\n          },\n          \"PreviousTxnID\": \"EC9800021EEAAF4DA8448FEA622F8EDE3F6F6FD543E22F0A8C33731F61D2687F\",\n          \"PreviousTxnLgrSeq\": 69052417\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rBR21hAWPJuTd1btLDfunkJUeRSWsEaLpb\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520B5E620C9389BA\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"7A3B74E9CB0A60419B5E53DA4003A8B3B6CB27D68516E3213BD819DDF89E66B1\",\n            \"PreviousTxnLgrSeq\": 68999875,\n            \"Sequence\": 68736088,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"ACC2BC434B268D2AD3D7851071F1FCCE6C2FF0A926F2E9FE9FF0214C025ABC09\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"4407112250\"\n            },\n            \"TakerPays\": \"14102759\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rnhFkVQVhLHoMBNc5aUNk5fRvZfXmt16nz\",\n            \"Balance\": \"389983985\",\n            \"Flags\": 0,\n            \"OwnerCount\": 70,\n            \"Sequence\": 66616955\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"ACD1174EFFE7094AE4D489C9C9F3826AF28EB5F46E85E3531EE481280293BC34\",\n          \"PreviousFields\": {\n            \"Balance\": \"315324129\",\n            \"OwnerCount\": 71\n          },\n          \"PreviousTxnID\": \"863E7529AE38B3841114E21C2A0EAAB9038900896CD2BFB20F61B2837E02BE50\",\n          \"PreviousTxnLgrSeq\": 69042936\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rMhxYNNMAgwGdSciDqnCb8tVqJZ22VCCL\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521270470A2507A1\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"EE00895C53E2144F335276F88057648D8987809A96E1A3FB645DD9D5E39BE270\",\n            \"PreviousTxnLgrSeq\": 69050058,\n            \"Sequence\": 68815969,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"ACE84A25149F8AB1557128EB749289AE39560A7DFF85A6FC60AB6A2271AA8DE3\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"1881122768316515e-4\"\n            },\n            \"TakerPays\": \"976302716\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rUqgMfiCKp2L5Y1zobkQTgSdVYLp1PASt5\",\n            \"Balance\": \"1182324424\",\n            \"Flags\": 0,\n            \"OwnerCount\": 22,\n            \"Sequence\": 68911114\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"ACED16143A52490714A31F34E03E162308E68B874B0C88E2E6CA84B9495B3792\",\n          \"PreviousFields\": {\n            \"Balance\": \"62999735\",\n            \"OwnerCount\": 24\n          },\n          \"PreviousTxnID\": \"FB922312EC0F3FF3F290B77EB5366FA4427BBD20EBFE89184E3E3E1ADB02AFCF\",\n          \"PreviousTxnLgrSeq\": 69063115\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r91eSWyof8C4aiDL2gM1xTdmc9GJy3rTWb\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365311C37937E08000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"a\",\n            \"PreviousTxnID\": \"BB9E48320EC13D7FA3C68846BBF53CC1E159D4577F935CC9C189EE2AF6B20586\",\n            \"PreviousTxnLgrSeq\": 68897281,\n            \"Sequence\": 67326801,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"ACF7EC5A7BD0F14FD4B40B40C6936813E612AA6FE5127F8A633D4709711824F4\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"3500000000\"\n            },\n            \"TakerPays\": \"175000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-1352639.19146298\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rKVDELWvNMyoxDQenRjpToSvsLL7RwR62h\",\n              \"value\": \"9999610698104588e-1\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"eee\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"AD1F840E5D3229D563D767584A6A0F2D92E16FDF1010E9D7BB2C976754FBC91A\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-27052783.8292595\"\n            }\n          },\n          \"PreviousTxnID\": \"E2EB830BA8DB5FF1030E90A86113769DFA44528887C78BEFB8C715706449A03F\",\n          \"PreviousTxnLgrSeq\": 69015401\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rUdhzvzWjHpSjP6CGksiit3bdgGLV5DXZv\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653071AFD498D0000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"1\",\n            \"PreviousTxnID\": \"CAE0B53B094E0F0AB105D742B42CCCC662C209C4DF74225B2605ED8FACFE3B22\",\n            \"PreviousTxnLgrSeq\": 68153687,\n            \"Sequence\": 67546156,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"AD7A7E6CB64517501978135BB4003D58F2391E3C57113CBD9B973230B260C743\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"10000000000\"\n            },\n            \"TakerPays\": \"200000000\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rGUKHhcBwNpS8WUqpxNsFW6Yhy6ZwEuATq\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521BACF6B65EDA6D\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"A04365550568C002CA297CA78CE3B7A34FD8B2AFD93CC9ED2A343DB038A65032\",\n            \"PreviousTxnLgrSeq\": 68898688,\n            \"Sequence\": 67761584,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"AD81FF3F50E2B4481C6037CCB3D318638EE12636D86CA9F45B316788D5EAFB65\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7785989866\"\n            },\n            \"TakerPays\": \"60652861\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"7\",\n            \"Owner\": \"r4AXMmLxiAtMf5yvyqqCZeHVhswjdmNgBx\",\n            \"RootIndex\": \"77A732DDF8DAA8C78458615090A9E405573E65BF66E0377D7F884433D6EA71CD\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"AD8D35CFA04997CEB1832ADF8BD32A69559C4A9AE1D24C815C80B5EB0F1E85E9\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rHSPavv1zYMxcqPUHEeQqwMSQgSzadAjM4\",\n            \"Balance\": \"959355194\",\n            \"Flags\": 0,\n            \"OwnerCount\": 361,\n            \"Sequence\": 66504597\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"AD90456C4D8A640DFB4A316D9E5CD5EF76909A1B87B25125102543FC72BECB19\",\n          \"PreviousFields\": {\n            \"Balance\": \"879339194\",\n            \"OwnerCount\": 362\n          },\n          \"PreviousTxnID\": \"92670D1C3AEA124E0964DA82C6F9691FA1AE3740B2090278F93EC5C1358BA03D\",\n          \"PreviousTxnLgrSeq\": 69045518\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rUrbD1rAAkr84UER2ZUxTP5ohhSKzvC8tc\",\n            \"Balance\": \"4530859626\",\n            \"Flags\": 0,\n            \"OwnerCount\": 177,\n            \"Sequence\": 65999151\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"ADA4836710DD8C06B7F4318E32993976A8524558D8D4CC0DAF77A8EC0C54C032\",\n          \"PreviousFields\": {\n            \"Balance\": \"1773824975\",\n            \"OwnerCount\": 179\n          },\n          \"PreviousTxnID\": \"2EE88F62487E1125C372F0CA14EEC81E26F399821B137BAE2AA245199D692142\",\n          \"PreviousTxnLgrSeq\": 69061585\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rpRu4PM7TpS2K481Ac6ESUDRf5QmAfc6M2\",\n            \"Balance\": \"676840329\",\n            \"Flags\": 0,\n            \"OwnerCount\": 67,\n            \"Sequence\": 67535493\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"ADB664312900A06C5DDB828E9E3099DEA04DFBC3A4083697CECACDA6AD11F741\",\n          \"PreviousFields\": {\n            \"Balance\": \"176812970\",\n            \"OwnerCount\": 68\n          },\n          \"PreviousTxnID\": \"E366384E7730647482B0C466A7FD85A7D287A995C2F76151DFC823A5569D8C5A\",\n          \"PreviousTxnLgrSeq\": 69062190\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"5\",\n            \"IndexPrevious\": \"3\",\n            \"Owner\": \"rKBxw9iprFx2LgVfPdthKb6oWUYBLVm4Jw\",\n            \"RootIndex\": \"BB87AC457B10ABAED9248B71C6956FAE7B2EE3DA4165293F687461B0BA13E113\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"ADC1C77B1B5DC3183A137726A329B0EC9D1B89C438FA348D3D42AEB4EFCF3B45\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rKMLJSbumUE4mnXET6X1DDFF6JsN8wE8x9\",\n            \"RootIndex\": \"A5A81EBCC403E31A2D6E774240319A07F8419AB85B1F7B753CCDA82E06EE6DAF\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"ADC5D5CFB78426D57BE8F0990711EFFCF5AFD6E4177D1FD6A78A4373050F812E\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rfh8snfXUdwqc25vUfwxJxJnVM1n1dJvoh\",\n            \"Balance\": \"852195383\",\n            \"Flags\": 0,\n            \"OwnerCount\": 165,\n            \"Sequence\": 67755993\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"ADCA0C47DBAC77D73177039FEEE2861AC45B23A5C1DFB7C881A2F1244FDA17F9\",\n          \"PreviousFields\": {\n            \"Balance\": \"575361491\",\n            \"OwnerCount\": 166\n          },\n          \"PreviousTxnID\": \"F19DC6D5DCBDF663917BE73CF3ADD8E3F15244DB4736AE0F9B10DD4794D3E10A\",\n          \"PreviousTxnLgrSeq\": 69054166\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"42510580779.17469\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"e15\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rnfs5ayanPy2X7aQERUoayaokxjuH361V8\",\n              \"value\": \"9999688558266533e-1\"\n            },\n            \"LowNode\": \"7\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"AE1349DFCE283224BC4812ED1BD1D2BBC575AE9A488C53F0F1D470014B0012C8\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"55105844569.37469\"\n            }\n          },\n          \"PreviousTxnID\": \"20FF240E7DDABBC74AA136159C5F6715FFC79C79F45D3C44C1169CE93CDFDF1E\",\n          \"PreviousTxnLgrSeq\": 69004178\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"4\",\n            \"IndexPrevious\": \"2\",\n            \"Owner\": \"rUMbRuiufkSUvwXG6HBXYHTW9TpioNBKjo\",\n            \"RootIndex\": \"20A5EF47432509ACB7D925234F9CE7113F81D8D345FB3B0CC81E187E8018F983\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"AE30F3553DE5B49D98A325A1E7076D0E6FC5DFF1A1C0838076DF9E6D72E5E53D\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-2230920909.37003\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rM4cm11HCu1riLq9BwfzciDUZqfX2Phq52\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"HighNode\": \"9\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"d58\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"AE3E28C53ABAEEFA714856982489C9E47505CE4A57D53DBDA640AE8941DAA80A\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-7230920909.37003\"\n            }\n          },\n          \"PreviousTxnID\": \"F746F87C6C716EDE09F65DA4119B2BCD07D2BD1EB0AD7B1280CF410C6F47CD7C\",\n          \"PreviousTxnLgrSeq\": 68937558\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"racxdehrfnx9kEzWRF2vcMPCzx8WRfF6G9\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520997A2B8020583\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"1\",\n            \"PreviousTxnID\": \"000AE05262D8BE1CBEC1B5478DA9F3DA9E0052A82F2E39607A4915B21F278299\",\n            \"PreviousTxnLgrSeq\": 69064082,\n            \"Sequence\": 67791222,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"AE5634CE5A7BD7441A688B98F40246543C74A8AFA4255D308B9579C167A1AA06\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7785989866\"\n            },\n            \"TakerPays\": \"21022172\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rnZhNn5hFGdBk7UTE5hLjBZFNrYGSs1wHQ\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521965FA4145F334\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"3\",\n            \"PreviousTxnID\": \"BBB51DC4162838AE538E60EA631B4CA8C0ABEBD22B9A49322A8AB48D18D31423\",\n            \"PreviousTxnLgrSeq\": 68920271,\n            \"Sequence\": 66615471,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"AE60E03EB8FA917AF2C34378CEA770BDC0D9D365DDE293BCF3329D18BF94C239\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7785989866\"\n            },\n            \"TakerPays\": \"55662041\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rnsZFHUhKJoPt3oh269oP51G4j5HDCNNBg\",\n            \"Balance\": \"96387164\",\n            \"Flags\": 0,\n            \"OwnerCount\": 26,\n            \"Sequence\": 67560842\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"AE86EB63687CEC5B03FFC678C93D2D3134AFFED3D884797E76B6E1083CC313CC\",\n          \"PreviousFields\": {\n            \"Balance\": \"90087164\",\n            \"OwnerCount\": 27\n          },\n          \"PreviousTxnID\": \"40A744E1E373E4100502B4FE3D1D0DF327486533047B388A037D3038A1B8A982\",\n          \"PreviousTxnLgrSeq\": 69063683\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"7\",\n            \"Owner\": \"rHWCQnGF4sc9MqnA8GpZC9L8SZmzv5zkMp\",\n            \"RootIndex\": \"05471B1C8987924ECD993A8762A05730F606BF815585D1E19268698094358CA9\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"AEADB1B5A8BA7D707C40AFBF4CD7CE43E83474CD7105D7F0793CADB7A120398C\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rHunttX1NcJT4kdqXJZaqjkU7zeMmJuauN\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365211C37937BD4C21\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"1\",\n            \"PreviousTxnID\": \"FFEC191BC7AD105E09FE0B0031680A4404FF474A0793248035DD051BF40C5615\",\n            \"PreviousTxnLgrSeq\": 68984895,\n            \"Sequence\": 67298198,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"AEB01992869204610B64C1F752701E634500CF77106FBD6B21B26D7470845A78\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"1154462616532678e-4\"\n            },\n            \"TakerPays\": \"577231308\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rNh79kZDsubi13bjTw64kBsKVWepnDT2J7\",\n            \"RootIndex\": \"AEC1865E1AE4C97E43BB52AA94E6C8129306456F042655EEF195D2B2ACC44C32\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"AEC1865E1AE4C97E43BB52AA94E6C8129306456F042655EEF195D2B2ACC44C32\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rJKHj2kBpPFHbEu4m2uuSuh5rQEcAYwJ8Z\",\n            \"Balance\": \"1110794353\",\n            \"Flags\": 0,\n            \"OwnerCount\": 241,\n            \"RegularKey\": \"rGe6YD14SMJXSasbTw6fNHnK9ZdLh2PMUw\",\n            \"Sequence\": 67088091\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"AF0CC7D79604789E89BD7E613AE87C5C6AA7062C5FE0D87DAB4C71728466A803\",\n          \"PreviousFields\": {\n            \"Balance\": \"1047794354\",\n            \"OwnerCount\": 242\n          },\n          \"PreviousTxnID\": \"2CCF77BE0CD2F714D45815FEBABEE8EF8C0A63F0F1E75BF540F9B873DB9DE98B\",\n          \"PreviousTxnLgrSeq\": 69062258\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rnMENGbcT6QgrfDGjz7UJvyMryD8YPdi3y\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520EE00DE7A899C6\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"3\",\n            \"PreviousTxnID\": \"1A3DE882FF56D5A6DDDC6D669E3D0AA690BFCF88262F5CE09C907ACD94386D8C\",\n            \"PreviousTxnLgrSeq\": 68991027,\n            \"Sequence\": 65874419,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"AF308EB1FE236CECCB5C85CA29D3F976B897B676182059E349FB5B4C49CB71D0\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"2330637550184911e-3\"\n            },\n            \"TakerPays\": \"9758379422\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"7\",\n            \"IndexPrevious\": \"5\",\n            \"Owner\": \"r9ma91EcMDXDCLQZDvceT9tDwHRT41gumt\",\n            \"RootIndex\": \"E84198B4FF4468455435404C697CB18F9483D4FE07B84FF5B0B96B52E6BD82A5\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"AF32405B0199F472BFE15959859DCCAE0D0594931A116E7B588FBAD9883B8703\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"2\",\n            \"Owner\": \"rJyPfhC1DLsG22KEG4jS5mDrGtoDcwZDty\",\n            \"RootIndex\": \"B1AD0C2B8ABA43A1A20BFF038C25F1FB4D6ABE5515DDBA7F6C012ABC0C2A65FE\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"AF4FA158C7F1B71803B89F6AB02E0F0C537A96CF60E28D79B5F45CBB723BC3E1\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"2\",\n            \"Owner\": \"rK4qafqqEtLjM1CRfcgY1H8Z4zGTRATkaV\",\n            \"RootIndex\": \"97447826D498C40E1DDA4F747302D6EC4C3A752C79E350DF6C0634300F151E97\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"AF5AE3222D847B304A909EC3AB869DE31F6D4526C0D37BBF1D79AD04D4F4F726\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"4\",\n            \"Owner\": \"rGBMsWXEYwQCyqK6QsrivTQsACXbfL1735\",\n            \"RootIndex\": \"42469046D2E5AA198F9AADD2A8E482559FB62C2729B49873395851272413EA21\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"AF5C5D2D9988F7990310276D85AE314EA926E14ACFEF2F62540FD0353F137BD2\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r36sopaDwMDWZS4XNkCM27TNVkdywisWY4\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521C750D7496027A\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"ACAFB3C529222162D87E31CC9A9E65A91B0F0E781E5A454FB8E7FF0FA38A4A81\",\n            \"PreviousTxnLgrSeq\": 68908256,\n            \"Sequence\": 66335281,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"AF667C5193E979C70281FA26E20C76D9946887E0878AC24CD28336DC7CC1253C\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"85645888526\"\n            },\n            \"TakerPays\": \"686023567\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rfB3HqBHHTi5TCaXxjo9yMh4r2kfuC3pbz\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653049E57D602B014\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"1\",\n            \"PreviousTxnID\": \"25FE96CFBA96E7A634DFE61F5D2D680D82958ADE86DFD521852A2FF6A328C81B\",\n            \"PreviousTxnLgrSeq\": 68930026,\n            \"Sequence\": 67353729,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"AF713E27111CE45715CA7FFBCD98DB12F67EB38C6294858C917EA3B74B581360\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7785989866\"\n            },\n            \"TakerPays\": \"101217868\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rphnh8aG8oBCdrBcgxYgNY8yVqi3b3XqbT\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365214EB1AD36964E5\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"17\",\n            \"PreviousTxnID\": \"5D0DA11BFC5319F2C5A9828E8B3F79DF1B38E2ABF40AE567F707C0391FE136F2\",\n            \"PreviousTxnLgrSeq\": 68916064,\n            \"Sequence\": 66157580,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"AF7170A0168D392EB63A6A36C0EAA8F53BBEBA8D237872F5B1CA8A3FB36A8611\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"44888888888\"\n            },\n            \"TakerPays\": \"264305777\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rajb91Ucmbfxe1KoUEpAtJi8eo5bQVWeUW\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36522386F263939894\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"4\",\n            \"PreviousTxnID\": \"7A9FE96E7DD399634FB7CCC6DB8DCB27C42E2865D82B8C4462190C2AF3B68F74\",\n            \"PreviousTxnLgrSeq\": 68984152,\n            \"Sequence\": 67452144,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"AF792B7BD5119FF3947954EBA38321D69767FF62C0943C7A37ED20DBCC66E9D6\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"2621138153.550426\"\n            },\n            \"TakerPays\": \"26211381\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rpRWz81LgJfwcxBFMMxwnMttsHr8VoMZeR\",\n            \"Balance\": \"670436147\",\n            \"Flags\": 0,\n            \"OwnerCount\": 190,\n            \"Sequence\": 67503019\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"AF9152523C881D5B803A712329C5B2051C7E7ADD2291C2F6CC4446B801EF4840\",\n          \"PreviousFields\": {\n            \"Balance\": \"520436147\",\n            \"OwnerCount\": 191\n          },\n          \"PreviousTxnID\": \"1A9C24B9EF73C904C554B42406EC79BB515ED1A2C68C8CA8F3514566F108CFF1\",\n          \"PreviousTxnLgrSeq\": 69063465\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rKU9ca11NtN2HFEaNj3WhV7dS13vpDeS46\",\n            \"Balance\": \"329409970\",\n            \"Flags\": 0,\n            \"OwnerCount\": 40,\n            \"Sequence\": 66579423\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"AFC5014331711CD0D82784F8E9E8F44CC6DB1724C601008956EAE7AF64D64D00\",\n          \"PreviousFields\": {\n            \"Balance\": \"93999970\",\n            \"OwnerCount\": 41\n          },\n          \"PreviousTxnID\": \"7C2C6EF171BF2614814766A208D60FCF3CF43EA244F2D18E5B917C8EC3E8CAAB\",\n          \"PreviousTxnLgrSeq\": 69052449\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r3oDrfWCL4zZRGoUNRd8Ywu9PJWFZXc764\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652082AEDA5BE1980\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"4\",\n            \"PreviousTxnID\": \"B1E052C8204C099B1B00AEB29C6F9207D0E134660CB07D3C9171A7A0BA99258F\",\n            \"PreviousTxnLgrSeq\": 69054925,\n            \"Sequence\": 67440523,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"AFE973474106FB0CB6095BE9E9FBA7163F7E98B39673CBF8793AA8DAA95841BC\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"TakerPays\": \"229899999\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"11\",\n            \"IndexPrevious\": \"f\",\n            \"Owner\": \"rLCRC3mUAkWe4R8EwjZ43BGQs7hmpdGrbE\",\n            \"RootIndex\": \"48904606066E01C0AC1C8A2C06861877BB1701F06A48B39197DB50A0FC2A27D9\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"B01C1E990BA3A8DDF82305984B0F830BCC40D92A0B8296BC366E2B75205C1067\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rfqL99qLpPmC72SjLCaytr5g27EUH35RyB\",\n            \"Balance\": \"43317922\",\n            \"Flags\": 0,\n            \"OwnerCount\": 6,\n            \"Sequence\": 68690193\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"B0217911A578A470BAD61E8005FF21C84891E531185EB32B50DD8D2045C3BB07\",\n          \"PreviousFields\": {\n            \"Balance\": \"36454411\",\n            \"OwnerCount\": 7\n          },\n          \"PreviousTxnID\": \"7AD7D502FA0A915FE89222EF82F470B1F2195490CF069FB990E712412041F79B\",\n          \"PreviousTxnLgrSeq\": 69062099\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"762\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rUN6cc1UZw3jJRFAQpzYZdwA75aKR6qJE1\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"B07046D5366B5337798B28D9C6E4EDF002CD83377441940467A18EB42CAC91B1\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"7785989866\"\n            }\n          },\n          \"PreviousTxnID\": \"E335A9EC405E9D0A41BBA19622A0ACA0FF5DB96B45865746ADDC124D91FA51F5\",\n          \"PreviousTxnLgrSeq\": 67996259\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rKeFfq8ZvHbFWbsQBAeTB5Ng7aGtoLN84K\",\n              \"value\": \"9999610698104588e-1\"\n            },\n            \"HighNode\": \"9\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"f04\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"B08C7400FBAF68E96336545BAC9421ABD2E37BA6A76BE5140D6E57A20C87ACB1\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-95000000000\"\n            }\n          },\n          \"PreviousTxnID\": \"1F11386540F90AE3904AD07DF396F2F1EA22CBB2F0B48818BF51843EC8A74E2A\",\n          \"PreviousTxnLgrSeq\": 68994970\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"66666666656.66702\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"285\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rUtzPhAd4njQGteZHqi7hbd8CRtZGfQtp3\",\n              \"value\": \"1000000000000000\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"B0957AB6E53D7E82F6F3C99258598C68BC2F15FBFA00281229CF45C270C927C4\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"74452656532.66702\"\n            }\n          },\n          \"PreviousTxnID\": \"BAF328A6B41E162D30C3B702202E6092527BFDA4C3C73CE9A220DD9F3DC3C93E\",\n          \"PreviousTxnLgrSeq\": 68789862\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rUN6cc1UZw3jJRFAQpzYZdwA75aKR6qJE1\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365303B1DFDE1A28C3\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"2\",\n            \"PreviousTxnID\": \"CC44EA8E0981DC2963BED2EDF212B97519D135E308F2F9F6F60FCA57618A1D5B\",\n            \"PreviousTxnLgrSeq\": 68293495,\n            \"Sequence\": 66466048,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7785989866\"\n            },\n            \"TakerPays\": \"80974294\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"B0B531DD54210A60ECF7D0038134DE9D9F4AF9DFF8B8B317712883AFB68DC6AF\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rfnaFsTkxCWYtenT3MxsFxjjrX4F7itNzd\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365211C3793559C633\",\n            \"BookNode\": \"0\",\n            \"Expiration\": 727092416,\n            \"Flags\": 131072,\n            \"OwnerNode\": \"7\",\n            \"PreviousTxnID\": \"2E59D774B34618E98B44938E22DFF68301D3230880A18FF2B8C87D2E29A517F6\",\n            \"PreviousTxnLgrSeq\": 69027209,\n            \"Sequence\": 66195679,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"B0D2990A51F37C008637BE4912833D0EE29656F8482AD5F859C6A6E1EF1EC7B0\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7785989866\"\n            },\n            \"TakerPays\": \"38929949\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"e96\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rf4YQSYpheUvWxMx5rmSgr4vdyvu7tWUp4\",\n              \"value\": \"1000000000000000e-1\"\n            },\n            \"LowNode\": \"9\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"B0DD29558D3EC6865D4FD3AE56B9E04850CED45AE9616C379090780C771C9126\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"23547689385.47486\"\n            }\n          },\n          \"PreviousTxnID\": \"E225DD02DD44BA6693210A9E4698091E9B998CE6E2E897E6D1AFD860D1CF7404\",\n          \"PreviousTxnLgrSeq\": 68991202\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rMp5QYssUeXAdg9G7b6XQPCEb1uHCjZ7XQ\",\n            \"Balance\": \"230742365\",\n            \"Flags\": 0,\n            \"OwnerCount\": 72,\n            \"Sequence\": 67402973\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"B140B1BEEFC36984045BA16FE64B7C94148364246D4ACF4194DBE4F52FBE6348\",\n          \"PreviousFields\": {\n            \"Balance\": \"157999955\",\n            \"OwnerCount\": 73\n          },\n          \"PreviousTxnID\": \"DBD9FA755AA7B6032049EBE6181FAEE07C62FBA17155657902BE1326C60DCF8D\",\n          \"PreviousTxnLgrSeq\": 69044261\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rhJfzjX6NrYjiR8yGumtJSHuuLxn2JbgvT\",\n            \"RootIndex\": \"B1624334045BF7CAFBC380078A90DCE1AF7ED5EF21BEB18E2F71E8D7C24AD86C\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"B1624334045BF7CAFBC380078A90DCE1AF7ED5EF21BEB18E2F71E8D7C24AD86C\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r4A2sUYHaLAGsDxfwUSv7GXTyYRsoBfQin\",\n            \"Balance\": \"547836348\",\n            \"Flags\": 0,\n            \"OwnerCount\": 63,\n            \"Sequence\": 67453691\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"B16A78C9255A008381549DE5FC038449E98B0DAE3244063212FDB0D0FE5DBAA0\",\n          \"PreviousFields\": {\n            \"Balance\": \"486885388\",\n            \"OwnerCount\": 65\n          },\n          \"PreviousTxnID\": \"73E11175DEF3DC2D7C97D4D6C353920765EB0A3625A115A79F4D791F61FD4C9A\",\n          \"PreviousTxnLgrSeq\": 68998438\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"1\",\n            \"Owner\": \"rnEA5VmDp13iDZdcGUg2X2nzYkaKKDrf86\",\n            \"RootIndex\": \"7356E72D3065E18CE5DDBB1BA10B86FA8033B69D418C3A44909943600A403951\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"B16EC8C4DFFE12F1E0BC89C37D10BA25CC90CD6AF51603A8E5FA09A10A5DA8C0\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"6\",\n            \"Owner\": \"rJ5v25nqLv1P2Fij67kW1QE6iWqthP89v9\",\n            \"RootIndex\": \"929FF0523F677A57D6EA77BB605C9A6B8FB372A30E4E0F42BE715D692A07A854\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"B1841A004A2005EE49BBD519966518C4B1BB1D0C7CEC9C17B2ADD9E1C7D4C09C\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rNWUPV44ECUZNuemMektfAsccCmYRnZXK5\",\n            \"Balance\": \"218258373\",\n            \"Flags\": 0,\n            \"OwnerCount\": 13,\n            \"Sequence\": 67770367\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"B1A11B03284D2319DFA7EF904DBAA60D136CBB3E90068D061366927C035B85CD\",\n          \"PreviousFields\": {\n            \"Balance\": \"101258373\",\n            \"OwnerCount\": 14\n          },\n          \"PreviousTxnID\": \"C8C5423DBDB8D7204DB660E6002F6A93D0A1217DE848D5EE4A7FAAC6AD7319B7\",\n          \"PreviousTxnLgrSeq\": 69053693\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rN5wcyJZjT6Qd7sJZiQg2SHVtjnmqiq7W2\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365212D452694F4000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"a\",\n            \"PreviousTxnID\": \"DD4A2167B6CF2FA5FB68D12E71F38370C30B46E962389ED84F4FF90B9854304A\",\n            \"PreviousTxnLgrSeq\": 68922727,\n            \"Sequence\": 66720606,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"B1B0CFE8A04C42D057403E34BE85835FAC827D17CF5E0DDEEBB7F99246E01A89\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"10000000000\"\n            },\n            \"TakerPays\": \"53000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rpTLVf85qXWoPWNyeUXnTkc1isdAWLCYh6\",\n            \"Balance\": \"402083229\",\n            \"Flags\": 0,\n            \"OwnerCount\": 109,\n            \"Sequence\": 66958604\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"B1BCFBD13D1AE199ED3A68D50803A8366F2DAF94082A053E844C380868F25A6C\",\n          \"PreviousFields\": {\n            \"Balance\": \"250011868\",\n            \"OwnerCount\": 110\n          },\n          \"PreviousTxnID\": \"E3C77BA6D977A21882070CA0A5CF04B4FE1696844AA69D53E3E6825842106195\",\n          \"PreviousTxnLgrSeq\": 69061171\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"3\",\n            \"Owner\": \"rnsZFHUhKJoPt3oh269oP51G4j5HDCNNBg\",\n            \"RootIndex\": \"3D58FC1DD46594FCBDBD5BEEFCE3468E41327D40CE6B29EAED990FE79BBC0942\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"B1E09B3B66405D8A33C2A393C5D218CF7E9D1734AA2C7144A631E901E69C7814\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rUsSyZqiqCSZoqNqjd6PqcEQ3BBaXyS7wF\",\n            \"RootIndex\": \"F72CEB2A2E3A8BE2722A230A07BF079D3B4084BCAEDC35AC9A08210546DE4F7E\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"B1E95674FCE3677B7F88DAD1800C30F14B9C4D0F9BB5829C6FC4C0B831479C56\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"1\",\n            \"Owner\": \"rMDVXgBGXnNiVt8b9uXXwhQC5W2xZXPweh\",\n            \"RootIndex\": \"92F75029D63DD9B73E65849378C2A30DFDE879EBC18C4AF20E89CBF91E4C06FF\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"B22D85721878E987AA1E7D88C130BB86FE092942180318CA2B3F797EDAE76766\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rKbNu1SDc3i5dWHdp3uLxWVn2tsA4ovDJR\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652102A336DA1175E\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"1\",\n            \"PreviousTxnID\": \"3CF67658E06148E078CCC0299538934B9AC4D1A7DEB1BAECDABB22392E134920\",\n            \"PreviousTxnLgrSeq\": 68994891,\n            \"Sequence\": 66971898,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"B239633A8EF058570EFC567D0AF72962D7F505325F17A1E4AB34416809921F70\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"5286145175551453e-4\"\n            },\n            \"TakerPays\": \"2405196054\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"eef\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"r9edE9m7sNZEwgT6foU8ahfA1ocrNify92\",\n              \"value\": \"9999688558266535e-1\"\n            },\n            \"LowNode\": \"1\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"B239BEFC9877E02C9F895B754A252F459B2C6E322B2BD5CB6C3EDDD75A11094F\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"906618313.6899364\"\n            }\n          },\n          \"PreviousTxnID\": \"9F737FD5CDB18A91EE93FEBF05F11FF1F9480D821BE86C141F37C862DC375E86\",\n          \"PreviousTxnLgrSeq\": 69032307\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-1200000000\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rJw1L2RZTiPTQJSF7KmstuGrdNrTmdvAjb\",\n              \"value\": \"1000000000000000e-1\"\n            },\n            \"HighNode\": \"f\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"ec2\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"B256510C23DBA8A1982309CFB23F3E2C3F268B21DC575BAE4777E319CBB3999E\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-1500000000\"\n            }\n          },\n          \"PreviousTxnID\": \"DA7AE41EC4DB698EDB83AB71658D9124D1890DAFEEE20247862C171CDFCDD143\",\n          \"PreviousTxnLgrSeq\": 68856847\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rGFCR192crZ5FBYgZPMAZCeBzTrkqeFXqh\",\n              \"value\": \"9999610698093259e-1\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"f0a\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"B268BFC23469EDC4E47525500D296F758E9B205001B67E7BB4A0E7A324BB5594\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-1057712712014134e-4\"\n            }\n          },\n          \"PreviousTxnID\": \"8E3532A1C597EF35CD18504F3112F841005C988FD9BEBFD8A21B8DB8345A3C1C\",\n          \"PreviousTxnLgrSeq\": 69051471\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rUZdJF5FhJJwrdjrcJ8vjfo7NySmeGRxxa\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365217CD9D4F367754\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"1\",\n            \"PreviousTxnID\": \"6EDDF9EC84ED8BCF03276734C1B2C5A6F85EDF2EB14F6990DF00ADFC7C2ACB4D\",\n            \"PreviousTxnLgrSeq\": 68915035,\n            \"Sequence\": 67514505,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"B26A8CDCA19F5522B2E1AD2A4D2776A33153D1968D05D847FB2036983922DB2E\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7786189866\"\n            },\n            \"TakerPays\": \"52167472\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r92aDr7NzvcY9DSKLE8V5q7dvnu7LvVjWB\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652237DDA213826B2\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"02E5AF5E95D034CCBE67E47DA984830168EDBB680C4002789B145AB9A9876901\",\n            \"PreviousTxnLgrSeq\": 68791855,\n            \"Sequence\": 67564119,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"93431878392\"\n            },\n            \"TakerPays\": \"933384465\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"B2747258B50FEC57BAF8F8A36731A77E943EECED51F531DCFC002C71DD368F40\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"eee\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rspLJnfzomVceQKCn6ExME3gJEUuhUZxdV\",\n              \"value\": \"1000000000000000\"\n            },\n            \"LowNode\": \"15\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"B28A198B0E5E2B6BC1DDBDD22FDB2BAE1205E3864749126D2903FEBDDAA1FF09\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"1981221762375000e-4\"\n            }\n          },\n          \"PreviousTxnID\": \"CA5B43D9AF07FA006DBE42651EBADDD3D62589019C3AA1862E7EE5DDC38F7E16\",\n          \"PreviousTxnLgrSeq\": 68992630\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"e16\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rBnj6UP9thqpSLVq1rEKinhuhmFHmhaC8m\",\n              \"value\": \"1000000000000000\"\n            },\n            \"LowNode\": \"e\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"B2D8B30084A908D4566EE483DF67802F52A19D1D810AB03FD2FE0A749506474F\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"5000000000\"\n            }\n          },\n          \"PreviousTxnID\": \"135E5D3C4CB555A8AA96469D18DC1FCEAE11241439254CEF19D780248E1E92E0\",\n          \"PreviousTxnLgrSeq\": 69012951\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rDAsQhHKNqg4ueKpzLPYbR7bzmjDve6dVF\",\n            \"Balance\": \"110632777\",\n            \"Flags\": 0,\n            \"OwnerCount\": 24,\n            \"Sequence\": 67964046\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"B31272BC3D35C0B8393445E4486DBAD742FF489A422F50CF8C244F6627DD87AF\",\n          \"PreviousFields\": {\n            \"Balance\": \"62199484\",\n            \"OwnerCount\": 25\n          },\n          \"PreviousTxnID\": \"475AC94A2FE5A6F26463E770F9E0CC9240C95015774391E3B2DB4B600DF9A180\",\n          \"PreviousTxnLgrSeq\": 69054371\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rfBJiQAjbS9cyzVGKRxbde3eV4Sr5xeC8u\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653049E57D62A723F\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"7\",\n            \"PreviousTxnID\": \"197CA8DCB5F7DCC82FEADCF18F1E517BE1774CF12355731830625BB0275820B0\",\n            \"PreviousTxnLgrSeq\": 68885680,\n            \"Sequence\": 67345365,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7822869773.491423\"\n            },\n            \"TakerPays\": \"101697307\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"B31FE66B629D6E3990BCF2AC2F709C37210CE0220D34C9E08817C99B9B170696\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"4\",\n            \"IndexPrevious\": \"2\",\n            \"Owner\": \"rPEfUi18WaHNarXbyX5UCcVACd1ZZhxAig\",\n            \"RootIndex\": \"C3C657077DA0F734A83D9757B0A3A3806B690B11DE9DDA92C1ECE36CC657A2D8\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"B3B4370B73A90AAC9A4E3F2516B464F7AB7A731B7ABA4DA71EBBC5D67E5C41F4\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rBHSrXq2LzGniUp4zypCRk1isLw1ywLPHv\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36531B9AC619E7A000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 0,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"CD8BFD57DEE21961443D122605EF4FC7816A339F752C7B9665DE8E200B5C91FD\",\n            \"PreviousTxnLgrSeq\": 68998262,\n            \"Sequence\": 68976409,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"B3EF807A1D058346AC07E38FA50310DE21EA9FF857C485548A9FBE6163D4BBC5\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"2500000000000000e-4\"\n            },\n            \"TakerPays\": \"19425000000\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rp9kJTnnfXrjwVFxGRWfjUbJdmxkGP4cif\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652124C5DB20CA245\",\n            \"BookNode\": \"0\",\n            \"Flags\": 0,\n            \"OwnerNode\": \"6\",\n            \"PreviousTxnID\": \"E5104C434C370B17FFD78E79DE235721ED32FED008AD1F42147EA676E869A645\",\n            \"PreviousTxnLgrSeq\": 68945840,\n            \"Sequence\": 65950390,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"B3F173EF264FD9CC081B3B1630F0B02405755764106CFFDA499D4AC41205AEE5\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"56322504556.15402\"\n            },\n            \"TakerPays\": \"290089898\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rJ7DCt3RdTywMMwKTq2Pm8srSeU4GvmSiW\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652132F457705EC89\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"6\",\n            \"PreviousTxnID\": \"44D83B5CE09F3A6D6E8C3F6780664B335F959CAB6964A6605A20D0F3EBB16FCB\",\n            \"PreviousTxnLgrSeq\": 68951062,\n            \"Sequence\": 67713485,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"B41BC134F14C0715ED87271870F7900FCEC7F90D8CF0F5EF84F3F99730477230\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"11555107321.45\"\n            },\n            \"TakerPays\": \"62397579\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"r4o8fw9WzkMQTvfvxZFVhkY8Txt3eN8Wct\",\n            \"RootIndex\": \"B43224E3C2E2886DDB4211B40B75D9837F1BBCF6DF5C88D3BD30BF8ECF7C460F\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"B43224E3C2E2886DDB4211B40B75D9837F1BBCF6DF5C88D3BD30BF8ECF7C460F\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rET8MUZc1VEcHkQqQWeRmvbWZcrtHy24iB\",\n            \"RootIndex\": \"7245A43D78BA163FD6AF6F8B48C225AC69747628C52EFFBA3490F8290BC90D6E\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"B454CE6856947CB6115F232C8D78531F19B413BA7F0BA3AF6A2FE6450CC1389C\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rwVWFLRidfTH7DD1LgcTg4gunGXVos3zVD\",\n            \"Balance\": \"100129556\",\n            \"Flags\": 0,\n            \"OwnerCount\": 35,\n            \"Sequence\": 67374453\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"B490B4639819467E840B84CECD7A3916BE92432CCA2A3A273C8CEE4630E20532\",\n          \"PreviousFields\": {\n            \"OwnerCount\": 36\n          },\n          \"PreviousTxnID\": \"9B4BF4F0B1FEB00C13001E6E79EC4FF7F3C6E9DAD48E14E95ABA9AACC957E0A4\",\n          \"PreviousTxnLgrSeq\": 69034950\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r3oDrfWCL4zZRGoUNRd8Ywu9PJWFZXc764\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365208314B76DA2000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"4\",\n            \"PreviousTxnID\": \"63FBA7CD441493CE06CFFF10F4058CFBFEDF3CFF5B8A81BF3773EF8E0F8B90BB\",\n            \"PreviousTxnLgrSeq\": 69054961,\n            \"Sequence\": 67440530,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"B4A65A5FCDBF1A25361A72D5CDC45CCCB34C72A652ED9F565487CDEAE8042243\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"3000000000000000e-4\"\n            },\n            \"TakerPays\": \"691800000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"5a7\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rnDZQsMj4ttxiiL23S8LEAzhbhNtK3P6ap\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"B4BB57B3E5242CD67D754E9B8485D7DF3BCBBBD965CA91EBA1EBBDD8B5019287\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"7785989866\"\n            }\n          },\n          \"PreviousTxnID\": \"CB9FDDDE7F18F96F3C47C29148C8C737C8C874CCFD0D00002E60D1313188ADF9\",\n          \"PreviousTxnLgrSeq\": 67979116\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rUsSyZqiqCSZoqNqjd6PqcEQ3BBaXyS7wF\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365208E1BC9BC57DA1\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"1\",\n            \"PreviousTxnID\": \"7A51347004F17F9B58453D3EB2A372751750C9F6F06FF27FA5B2407C8A6C9175\",\n            \"PreviousTxnLgrSeq\": 69031944,\n            \"Sequence\": 68183518,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"B4C975A304E57EF9FD6E0E29B888E55871CD3C46A9DFE258BF386674F567B0BA\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"1261346909413854e-4\"\n            },\n            \"TakerPays\": \"315336727\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rLaYDDZDLBvzSGxKhxDEKovMrQ3CoDXQV\",\n            \"Balance\": \"412002719\",\n            \"Flags\": 0,\n            \"OwnerCount\": 85,\n            \"Sequence\": 66614083\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"B50CFCD9689FC313FD2EA213CE60570358B41509B15420EC834286BA284C6B4D\",\n          \"PreviousFields\": {\n            \"Balance\": \"357664296\",\n            \"OwnerCount\": 86\n          },\n          \"PreviousTxnID\": \"C804878352BAE75B0329E87891D8360D2B93EDFB101A8B487534B90E07F4CA3A\",\n          \"PreviousTxnLgrSeq\": 69042591\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rQDGBD8WCV3szWgH9rvyhjPHPX66KPGVnd\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365218CA53A3244AD8\",\n            \"BookNode\": \"0\",\n            \"Expiration\": 726586372,\n            \"Flags\": 0,\n            \"OwnerNode\": \"3\",\n            \"PreviousTxnID\": \"0F4C7D367D8AFB4D8DA8C9C53BDDE2DBD0071A4745F2D999867486160F20DE58\",\n            \"PreviousTxnLgrSeq\": 68898563,\n            \"Sequence\": 67652587,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"14351124.845\"\n            },\n            \"TakerPays\": \"100140\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"B59A36CACFB721C87E3BC97815EB8BFEC41E3759DD0E7DF46DC2D9E7C4405EDF\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"11459100626.035\"\n            },\n            \"TakerPays\": \"79960000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rUtzPhAd4njQGteZHqi7hbd8CRtZGfQtp3\",\n            \"Balance\": \"379675486\",\n            \"Flags\": 0,\n            \"OwnerCount\": 43,\n            \"Sequence\": 67342425\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"B59F59102A982C93C40133CB1ABC4FE237FA7498804EE27DA28E77F3A3FF5617\",\n          \"PreviousFields\": {\n            \"Balance\": \"278457618\",\n            \"OwnerCount\": 44\n          },\n          \"PreviousTxnID\": \"B8383AC8211A6A9E084F854212EC99B39AC5F75ABA5D1591B773305BD2E99C00\",\n          \"PreviousTxnLgrSeq\": 69037079\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rsHib22BtXCKbRdrodUNNXdxumiaPqZQVk\",\n            \"RootIndex\": \"B5AADF861DE67E55952DA3BCC451E1047C7A9EB279A9740B203770B53EE42549\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"B5AADF861DE67E55952DA3BCC451E1047C7A9EB279A9740B203770B53EE42549\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"1788210152010003e-4\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"e3a\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rDvF12VVLg8CD36Ba9U4HUB5q7AWai6BFi\",\n              \"value\": \"9999688558258524e-1\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"B5B240B4BBEBBE7E49E70B39B3630DFE8DBC2D0A40C95804BF0E9FC851EBF1E0\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"2500000000000002e-4\"\n            }\n          },\n          \"PreviousTxnID\": \"3217A621DD403AB641B580415E83D845CB7D86BCCDE971B6A4E0C3AECB200697\",\n          \"PreviousTxnLgrSeq\": 68998050\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"1005000885461523e-4\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"368\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rUrbD1rAAkr84UER2ZUxTP5ohhSKzvC8tc\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"LowNode\": \"3\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"B5DF313E91D90FAC69C222FBC005A21785C2E02FD5ECD3799B83E6BB87798624\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"6000000000000523e-4\"\n            }\n          },\n          \"PreviousTxnID\": \"2EE88F62487E1125C372F0CA14EEC81E26F399821B137BAE2AA245199D692142\",\n          \"PreviousTxnLgrSeq\": 69061585\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"eaf\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rDfGPHrMgjFmWvA3TRkx5rcD85Y9sNizB2\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"B5F07CD9B0141D0720F85132DC343CB8933EFA0BFAECF00AE6B2927CD383C01E\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"19404401334\"\n            }\n          },\n          \"PreviousTxnID\": \"A8ECE98747476325D091FFD8A6E38C27A81F7B244031851C956CE80DD2FEE002\",\n          \"PreviousTxnLgrSeq\": 68898804\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rwJECKX27rvudR1C4R2QCUZwatR9zkC4u5\",\n            \"RootIndex\": \"EDB0423262CD73AAD1446CAD39046F1D38C304BA8503D15AEC577D81ABC11DF6\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"B5F523900500CA5E5769BFEA63E5A51AE26CE5F4B59EBC99F0002299E2815AAA\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rPVXceb6wrQp9apSTtyZmWcxKmYRBnCsdt\",\n            \"Balance\": \"484555023\",\n            \"Flags\": 0,\n            \"OwnerCount\": 64,\n            \"Sequence\": 66622494\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"B5F7607F9EE8CA6F3DAEAA97E3FAD8B6DFB41D472C91D504EF75320CE45A7CF0\",\n          \"PreviousFields\": {\n            \"Balance\": \"477481115\",\n            \"OwnerCount\": 65\n          },\n          \"PreviousTxnID\": \"7CD6DBF3994F6FFCB0E51057462DBD4D3E1743F66F6FCAFBBF9139CF7072924C\",\n          \"PreviousTxnLgrSeq\": 69030335\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rHWCQnGF4sc9MqnA8GpZC9L8SZmzv5zkMp\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652121E6C45EE4903\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"8\",\n            \"PreviousTxnID\": \"3934EEF20709669AD888D8391597AC782C3F624F80AC12F2FD8A632317DDBF81\",\n            \"PreviousTxnLgrSeq\": 68962257,\n            \"Sequence\": 67003947,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"B633AE6F92A84831B1C5725FA4CF904D96708948809C951ECFDB961D9C9ACCA5\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7785989866\"\n            },\n            \"TakerPays\": \"39708548\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rEEmAELYEW2kQQRJEXhN9qJnzZmUnLxhJd\",\n            \"Balance\": \"40554104\",\n            \"Flags\": 0,\n            \"OwnerCount\": 12,\n            \"Sequence\": 68870179\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"B6A10F18BCA546CD6EAB122521DDA0B5FA4AFEF39B3CFAD2D4BCD8DCF0935EE5\",\n          \"PreviousFields\": {\n            \"Balance\": \"37461805\",\n            \"OwnerCount\": 13\n          },\n          \"PreviousTxnID\": \"92E2221EE3DB45EEA817BFE431E39883D87D09A4476AEE13CCAC85B65F95C2E3\",\n          \"PreviousTxnLgrSeq\": 69008880\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rsZ4iqWpnTmdfE4nDDEiaGAn8z97ZV4Zm2\",\n            \"Balance\": \"73348924\",\n            \"Flags\": 0,\n            \"OwnerCount\": 5,\n            \"Sequence\": 68647808\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"B6A1EA89F39275C3DD11C7C6E28373927376D6C603A7720443F0A10D0BEA5C93\",\n          \"PreviousFields\": {\n            \"Balance\": \"53779035\",\n            \"OwnerCount\": 6\n          },\n          \"PreviousTxnID\": \"E6DD32D945C4423C7935DA116882E4B1FF629A916F53704A21DF0A1450769AE8\",\n          \"PreviousTxnLgrSeq\": 69056103\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r43hxvGDZqmKmLugK8oJ32r2f4rxuvUntb\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520BD7A625405555\",\n            \"BookNode\": \"0\",\n            \"Expiration\": 727073894,\n            \"Flags\": 0,\n            \"OwnerNode\": \"21\",\n            \"PreviousTxnID\": \"F6C9494114547F4F8A13E57815C68D51155698FE26F388CB97E61DF732ADFE55\",\n            \"PreviousTxnLgrSeq\": 69022504,\n            \"Sequence\": 59395071,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"B6CEC8580D642808C52796C0F1BB694C0E99651D560EE7FB7B0FD097973657EC\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"3000000000\"\n            },\n            \"TakerPays\": \"10000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-5285989866\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rNWUPV44ECUZNuemMektfAsccCmYRnZXK5\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"c1b\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"B6DF998C126D0F87DAF2147DF0E3656F7135CF3CB86F4B348606051AFEF13AC0\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-14285989866\"\n            }\n          },\n          \"PreviousTxnID\": \"47891BC7F37E8CC18354B1464ADE114946F3BC20C6E299751BF6B14B26926EFF\",\n          \"PreviousTxnLgrSeq\": 69052304\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rEgSssemRh6cSEJYWAyA6Q9uEm6XjBUZ2H\",\n            \"Balance\": \"81361082\",\n            \"Flags\": 0,\n            \"OwnerCount\": 5,\n            \"Sequence\": 68766420\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"B729507BD3D5C5F1DFA0D59AAC1D636F591EDF2397D2A3A6FD8FCFA0BD5475CA\",\n          \"PreviousFields\": {\n            \"Balance\": \"31558736\",\n            \"OwnerCount\": 6\n          },\n          \"PreviousTxnID\": \"5A60738DBDBADF316EAFFBB45F10F35AB132208230A6EA282EA012244CDF815A\",\n          \"PreviousTxnLgrSeq\": 68965212\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r9UmfXWeEUHZ9nUzywkmpHorhBLB9uhjpc\",\n            \"Balance\": \"2342165814\",\n            \"Flags\": 524288,\n            \"OwnerCount\": 164,\n            \"Sequence\": 66690700\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"B762FC583E1A1E1257ACF14FD25C3D8661A2138F3C82A7C6E94311219D49DF3D\",\n          \"PreviousFields\": {\n            \"Balance\": \"555083166\"\n          },\n          \"PreviousTxnID\": \"AE426FF2885A6DB0D852EB75CA7423A6AA60FA686A10D96E48C02257E85EB272\",\n          \"PreviousTxnLgrSeq\": 69064015\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rLN2tJYrH11YA3EqyNw6csgsBEnZ9TeaWF\",\n            \"Balance\": \"1549936370\",\n            \"Flags\": 0,\n            \"MessageKey\": \"0200000000000000000000000070AE77566AF1B83C83E4C4EDFC47B9D4AB05D6BF\",\n            \"OwnerCount\": 127,\n            \"Sequence\": 60035870\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"B766C1F970D3C5360550D3C9DA3A4A434F7942247C19EC1C4DEB013719D48441\",\n          \"PreviousFields\": {\n            \"Balance\": \"649936370\",\n            \"OwnerCount\": 128\n          },\n          \"PreviousTxnID\": \"A163F042C7E794943E7F4D0D53EC2C73AC96DF93C8841225E2A5C55985905B20\",\n          \"PreviousTxnLgrSeq\": 69053206\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"ec4\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"ragafgjLrLnN1rYkR4FpKXjmiTqDQqDio3\",\n              \"value\": \"9999610698104590e-1\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"B7715FA3B95824F1CCB0AE1F1EAF0E2375FD52750F7A174F35EC98DF41A8859C\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"2015266918855906e-4\"\n            }\n          },\n          \"PreviousTxnID\": \"32E49E61B2023D17C9CA3D4BAF845C7E43BEDB5D4E6642EF376D93545CFF5EFC\",\n          \"PreviousTxnLgrSeq\": 68970093\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-5060893422\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rGgtpbT9ffSEHApdNkRC4Mu9tsYPRMKx6D\",\n              \"value\": \"1000000000000000\"\n            },\n            \"HighNode\": \"1\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"44\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"B78C6E9F6E06D1926B4E7FDC22EE6FC6922CA1F770EF103853196398581E078E\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-7785989880\"\n            }\n          },\n          \"PreviousTxnID\": \"943FBFC7B4F383A2C36AB01B17324A0CEFE77D816FC45DE810725A12CC10BF50\",\n          \"PreviousTxnLgrSeq\": 68023619\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rQHveZ6yCKwNSGRiu4QnTSjJbLRfgBr72p\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36531F438DAA060000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"e\",\n            \"PreviousTxnID\": \"8B0BFCD70C2CFE9D91504A48F88A708CDD6DA0B639FFA3AD5907B5F108A01967\",\n            \"PreviousTxnLgrSeq\": 68764400,\n            \"Sequence\": 66308718,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"B7BD611EC809BA85A96A61409188F479A36E2218D4445732AF63517A3157B68E\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"50000000000\"\n            },\n            \"TakerPays\": \"4400000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"raentKRvbeEBLCQQUC5vbc8FH6zFuzaNEJ\",\n            \"RootIndex\": \"B7C5D11CAFC0B77CA0E1713000AAF267F5665EBC9CC7941756A9003DAD6AEC30\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"B7C5D11CAFC0B77CA0E1713000AAF267F5665EBC9CC7941756A9003DAD6AEC30\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"r4o8fw9WzkMQTvfvxZFVhkY8Txt3eN8Wct\",\n              \"value\": \"9999610698104584e-1\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"eab\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"B7DCCDE36BF4D26EC12A7A32E0AF8A30764D484D73D8310C46E257BB9DD4A845\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-1663278891609035e-4\"\n            }\n          },\n          \"PreviousTxnID\": \"393FD0EA5ACCFBA41C93F4ACCE6C68B7AB63A99085D4E92BDAC492507E2B6566\",\n          \"PreviousTxnLgrSeq\": 68897827\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r4A2sUYHaLAGsDxfwUSv7GXTyYRsoBfQin\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520E90EDA145D160\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"3\",\n            \"PreviousTxnID\": \"3A08230AD8D82463DF5FACF3710627ADF74D9FC70DDCF9D2B35F2ECA630BBE65\",\n            \"PreviousTxnLgrSeq\": 68998120,\n            \"Sequence\": 67453687,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"B7EEE4644E37CB35E3C9A4DC1FF4F0C3B061A79D2D1387BC0A17806392125D51\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"14866087945.17969\"\n            },\n            \"TakerPays\": \"60950960\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rJfV6qTHdF774uGTdRHQMxb8NSF6TWu4uR\",\n            \"Balance\": \"210581468\",\n            \"Flags\": 0,\n            \"OwnerCount\": 23,\n            \"Sequence\": 63563012\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"B7FA12072A22E8C57A66EAE8E1EED4E3129FD767E923B8FC8D48B7388D89841A\",\n          \"PreviousFields\": {\n            \"Balance\": \"191895093\",\n            \"OwnerCount\": 24\n          },\n          \"PreviousTxnID\": \"BD66C735333F6F4843281B540C888FA52B247C22711E2C7B975DF3A989F505D7\",\n          \"PreviousTxnLgrSeq\": 68919886\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"70714878917.9686\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"147\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rT8my4rryyrydKwE4W9LqQNosfNjZQb3r\",\n              \"value\": \"1000000000000000\"\n            },\n            \"LowNode\": \"1\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"B806C37998DD532B664D5D6167C7DFBB67E112A954C883911D74D6366044C1C3\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"1007148789179686e-4\"\n            }\n          },\n          \"PreviousTxnID\": \"2390CBC6C5CF0753E49ED7F2EB8ED3E90E58DEADE2DB5E4A0F060332871B69D0\",\n          \"PreviousTxnLgrSeq\": 68898455\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rJmWpXLdftZbNdPMYkezgKmEya6R6cAt7T\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365211C37937E08000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"8\",\n            \"PreviousTxnID\": \"E839ED88D2BFCD4E10D0F8B17F5B698804DB4E6222ED43FF5056C808E19278CD\",\n            \"PreviousTxnLgrSeq\": 68997933,\n            \"Sequence\": 66801944,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"B82327B539EC8164E8823627B3000BB0CE2E1CD325C795BE9875442C255647BC\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"4000000000\"\n            },\n            \"TakerPays\": \"20000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rhft58oDqDyMaUZZCKeBgEY4ewRC5HSpqM\",\n            \"Balance\": \"1291898681\",\n            \"Flags\": 0,\n            \"OwnerCount\": 148,\n            \"Sequence\": 67660688\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"B85BE9E44B2BD946EA320449C0635D030F172D03C49589347378E75912805A64\",\n          \"PreviousFields\": {\n            \"Balance\": \"1287032501\",\n            \"OwnerCount\": 149\n          },\n          \"PreviousTxnID\": \"639A4D648A64BBB023F303FA712FA787D3C152EF3CEB8552576711E18F6FC9AF\",\n          \"PreviousTxnLgrSeq\": 69050464\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-31929949365\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN57KF6tqiqqc4agjC6nvZeQzovWYEPDCT\",\n              \"value\": \"1000000000000000e-1\"\n            },\n            \"HighNode\": \"2\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"1f\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"B877934AE760CD5A73F4488F76706F432A7860A91BE75EBDF34BA6676B0668EF\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-41929949365\"\n            }\n          },\n          \"PreviousTxnID\": \"CEABDAFD9DC3334B03A318BE6035D7F3F4E41D88D90A74B34143407624F91744\",\n          \"PreviousTxnLgrSeq\": 68984391\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rpq5MrSjiQgMj3Rk8Kvf1L3Gzh4xp1CUdZ\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521F9E80BA804000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"3\",\n            \"PreviousTxnID\": \"EB7B01023306CDD73CFA1E841CC5BA66810347A4FCD7D1092E7FAD8CB8C55142\",\n            \"PreviousTxnLgrSeq\": 68888977,\n            \"Sequence\": 67528314,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"B889602320C0162EE6B380A8F14C1551C89B3CB4D5EF3318947A95BF5537FCF8\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7800000000\"\n            },\n            \"TakerPays\": \"69420000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"e\",\n            \"IndexPrevious\": \"c\",\n            \"Owner\": \"rEX4EMcBRESCnk2kKB1Yhzc5KSCib7Qh1W\",\n            \"RootIndex\": \"FA78FAC2BE9D71BDF083111D3833CD6B559B363385B4985FA838F265CE9C2269\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"B8C008693E221DEA129E0F979636A5D9764168200E7935F033F7EB37D875C907\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"12964050663.35446\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"c37\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"r9TcqWtCqzG7xnhLcYPUbKsV691wNPzMMw\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"LowNode\": \"5\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"B8DC66D3A12C0A1E79AD703BCCD66AFE71EA24CB5461EB14683264CD87A88A65\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"29228550663.35446\"\n            }\n          },\n          \"PreviousTxnID\": \"B6856A12CD8D0F4D2A42A576B87947E2AE97FC212828AE1B5E01E16A455332BA\",\n          \"PreviousTxnLgrSeq\": 68721983\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r3Xud98xTUTiXxGp2LbmFtFTWRWeaZSCad\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365218DE76816D8000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"67535BFB111778CD6986C5B2C72901BD3C8994B03ED44B813598E123FA9C8105\",\n            \"PreviousTxnLgrSeq\": 68991790,\n            \"Sequence\": 67537413,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"B93BF62324D85CDC48234409861B99566F987F98FCA1853D6CB1516360B27A6F\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"2000000000\"\n            },\n            \"TakerPays\": \"14000000\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rMd7wG9Hzf5YXsqZ48kNRFLARM49oydLry\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652232BFF5504854E\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"14C4AD0A96B9A20D8023411B5B2012A2D8A5FA30F9C6CB14CF3AF2FD9958B641\",\n            \"PreviousTxnLgrSeq\": 68153219,\n            \"Sequence\": 67169221,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"4671593919.6\"\n            },\n            \"TakerPays\": \"46248779\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"B953C6F5E2ACA2113620D4C36724853A35518BA0D8449E5A836712EAC1191E80\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rasT449dxdmpB7Ak1GqwE9TdrkZEty1tAZ\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520AA87BEE538000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"6\",\n            \"PreviousTxnID\": \"8304F06F75F19AD7038B1AD524CDD41C010DD89B65C8119AAD09C0E5E8CFA6D2\",\n            \"PreviousTxnLgrSeq\": 69001709,\n            \"Sequence\": 67132367,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"B96CF9BE2E64EE83FA7F183204B5186A9F0B6F91959759FDD51A98BAF24FA2DD\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"30000000000\"\n            },\n            \"TakerPays\": \"90000000\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"raPCjF9ftTRB7LYgehLYKBtzf8Eg4qp8Kv\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653038D7EA50921E1\",\n            \"BookNode\": \"0\",\n            \"Expiration\": 723609811,\n            \"Flags\": 131072,\n            \"OwnerNode\": \"b\",\n            \"PreviousTxnID\": \"0F1496BFBCB467344F56DE1BA4F836FCEBF093CD1568682D6A2C0BAA6FC93DF0\",\n            \"PreviousTxnLgrSeq\": 68153919,\n            \"Sequence\": 67504834,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7785989866\"\n            },\n            \"TakerPays\": \"77859899\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"B987C86EECE65EB3902DAA5977A303754398490EFDBB55DA22E732132E52061A\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rsRPr4ZrFePB3e3SVXBMHpwLCfc97qZq7p\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365215237E5469E000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"829AAA251E96F0E26850D9E6D76724A640B77D83A10509906D1ED1AE7A3C6E94\",\n            \"PreviousTxnLgrSeq\": 68923032,\n            \"Sequence\": 67107805,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"B9952B4218580DCFD4E30B9CB8B78F449FC83A965ED1B154D6F4040E0F4D2D77\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"3500000000\"\n            },\n            \"TakerPays\": \"20825000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rs4wbWdssBMJRgn4tJak3eq1JgrJ7Pgfnk\",\n            \"Balance\": \"502658385\",\n            \"Flags\": 0,\n            \"OwnerCount\": 45,\n            \"Sequence\": 67390807\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"B9A0AC25F74927E066E219B162346CC6152B2E85FAA5B2321B7B130DBE26EE53\",\n          \"PreviousFields\": {\n            \"Balance\": \"197658385\",\n            \"OwnerCount\": 48\n          },\n          \"PreviousTxnID\": \"5B2C7C6AE769486A012572D032F95EE782414D2DB548A1D2126C514CF1783A67\",\n          \"PreviousTxnLgrSeq\": 69064124\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rHunttX1NcJT4kdqXJZaqjkU7zeMmJuauN\",\n            \"Balance\": \"619235477\",\n            \"Flags\": 0,\n            \"OwnerCount\": 15,\n            \"Sequence\": 67298201\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"B9ACD4B7D2F3ECAF4FD3B07CDD4074B4F7CFFFF61979EB25DF51B2F84733F046\",\n          \"PreviousFields\": {\n            \"Balance\": \"42004169\",\n            \"OwnerCount\": 16\n          },\n          \"PreviousTxnID\": \"0A1C781C0FB151519D8302BA3216DD3E70137CA7825B1FECDEF28BA9C3A4ECF7\",\n          \"PreviousTxnLgrSeq\": 68985825\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"23\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3pszUgbBgf7yZ9jxiHTXwStoE32PDsHm\",\n              \"value\": \"1000000000000000\"\n            },\n            \"LowNode\": \"1\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"B9C451B350CC334170F9D7009630F86C7A2B945D1BCB3BF75B2BC8AB35D84148\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"7785989901\"\n            }\n          },\n          \"PreviousTxnID\": \"5E0BE2E6592FCA4F6E7E63700FDBE6A970FA987C8F86E4C2246ADE97B3CFCD59\",\n          \"PreviousTxnLgrSeq\": 68118009\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"a\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"r9guPT5E5ZDd4hPpLJC6UnXCGoRB8tZ2Jr\",\n              \"value\": \"1000000000000000\"\n            },\n            \"LowNode\": \"1\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"B9D0BF58E93DC85855CE8232A0DBB658C7DCFA0424FF610C1CEC8C22EBD67CCC\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"69459496293.10345\"\n            }\n          },\n          \"PreviousTxnID\": \"808483DE8C02BB3297A29B4BECB913C6DC226D403087E9AFA8A0E7947CD351A3\",\n          \"PreviousTxnLgrSeq\": 68991025\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-7785989876\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rP7b2urRNSZ6dfigtcEaChxF14R3kK8djd\",\n              \"value\": \"1000000000000000\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"8b\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"BA1F1C04C91C703DFC1F901AFDA06C1147311C95E306C469CCEE4DFC7909CBFC\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-17785989876\"\n            }\n          },\n          \"PreviousTxnID\": \"A05CE7E09F65F77C44B71B3222940C3080F637E7455902592F5F7B1FC4010A01\",\n          \"PreviousTxnLgrSeq\": 68997800\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rnDZQsMj4ttxiiL23S8LEAzhbhNtK3P6ap\",\n            \"Balance\": \"1429024850\",\n            \"Flags\": 0,\n            \"OwnerCount\": 81,\n            \"Sequence\": 67108971\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"BA20B207F53CA3FF9FE22FBC1403F9F4EBD9EB279B9BEDA9549B1D9EE6EF94AD\",\n          \"PreviousFields\": {\n            \"Balance\": \"1273305053\",\n            \"OwnerCount\": 82\n          },\n          \"PreviousTxnID\": \"9D143B485E54B7D5C5168D54D0377814733CA47B6E902D995A0ADB05D1C76AC1\",\n          \"PreviousTxnLgrSeq\": 69054335\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rhrguNtFAs4pp6FD4n2Uz2M5PQACwnWdrC\",\n            \"Balance\": \"316670977\",\n            \"Flags\": 0,\n            \"OwnerCount\": 100,\n            \"Sequence\": 67583972\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"BA29945221113DCAF0230AA2DB742E0561286920260C0E5E857FAD0305054DC0\",\n          \"PreviousFields\": {\n            \"Balance\": \"240670977\",\n            \"OwnerCount\": 101\n          },\n          \"PreviousTxnID\": \"27853E6341E41E9E5EEAFE9DF15B52A6052A82701B5049FC85A6C9D110194711\",\n          \"PreviousTxnLgrSeq\": 69058622\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rpCmDBk3dADpY9cb77D1hA4NHYnn7YbJM1\",\n            \"Balance\": \"11429323153\",\n            \"Flags\": 0,\n            \"OwnerCount\": 91,\n            \"Sequence\": 67934636\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"BA535FE5694F1B812FA3519B4CEF35B78BEC4F807FB3DCBE9720217E6E6A8F01\",\n          \"PreviousFields\": {\n            \"Balance\": \"8429323153\",\n            \"OwnerCount\": 92\n          },\n          \"PreviousTxnID\": \"72DA3173627D3DA54F78EE63E90BB2C578A60534A404BC162DD03DD0BD9233EB\",\n          \"PreviousTxnLgrSeq\": 69059900\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rGhP8A7jhRj3qkYPUR35bRvLCJyxh7xmGq\",\n            \"Balance\": \"2324794953\",\n            \"Flags\": 0,\n            \"OwnerCount\": 126,\n            \"Sequence\": 66928988\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"BA59863925A53801482D5D5D54B53B6E3A94BB58ED226D37E3144F432F34F19C\",\n          \"PreviousFields\": {\n            \"Balance\": \"2129794953\",\n            \"OwnerCount\": 127\n          },\n          \"PreviousTxnID\": \"2FF954051BCD09E34CA4F4D64CDEE2E6AD6C59CDEB47A71872C72526C88FB2A2\",\n          \"PreviousTxnLgrSeq\": 69062082\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rEr5Zbwd9Lurx4VHEvWWZFQb3owfVABck7\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365218DE7671E371EA\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"a\",\n            \"PreviousTxnID\": \"A56D317BF191ACAFE8D7C4E166E37D0B72FB902C6676102BE39DCDCDC7C24E53\",\n            \"PreviousTxnLgrSeq\": 68899850,\n            \"Sequence\": 67171799,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"3052218542.247303\"\n            },\n            \"TakerPays\": \"21365529\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"BA65E02EFBAFB618A5D2F9F7DE20EAB8B26675B9A73B7DA593203E69090FE235\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rNtB5pUvufMkzs55wL88pVuh3xt7LVW2mR\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365214BF72F57D0000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"4\",\n            \"PreviousTxnID\": \"F5A6EBD117447C1E43090805BED729963C1716B3104B58ED582FEFFEDF0279F0\",\n            \"PreviousTxnLgrSeq\": 68943834,\n            \"Sequence\": 67385849,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"BA6E52EDE5731DA29EF70432127F6BEFE6EAFD573A890BFF59F424A04DAA32A4\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"20000000000\"\n            },\n            \"TakerPays\": \"116800000\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rUs2aUqfDfjTN9HWdhXzRZZJkHm5rGUUdS\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365311C37937E08000\",\n            \"BookNode\": \"0\",\n            \"Expiration\": 724555998,\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"B6F867F368A79CC423C4D27AF9CAE606E47C7DC0DE9A0B64D37FB3C5F6CDAC2A\",\n            \"PreviousTxnLgrSeq\": 68385879,\n            \"Sequence\": 251,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"BA73AC407C64EA6E91147CDA5C98D4BDCD6EB80A499B79ADFF22FBFB951ECA16\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"10000000000\"\n            },\n            \"TakerPays\": \"500000000\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5206f86db90ca000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365206F86DB90CA000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365206F86DB90CA000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5206f9c1f5bcf5ec\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365206F9C1F5BCF5EC\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365206F9C1F5BCF5EC\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5207069de14715b8\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365207069DE14715B8\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365207069DE14715B8\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5207741eb09897ce\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365207741EB09897CE\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365207741EB09897CE\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"520774aa6359e0f7\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520774AA6359E0F7\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520774AA6359E0F7\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"520775933743d7c6\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520775933743D7C6\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520775933743D7C6\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5207759337c8bfba\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365207759337C8BFBA\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365207759337C8BFBA\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5207759337cca14f\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365207759337CCA14F\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365207759337CCA14F\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"520775f059d6cf3c\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520775F059D6CF3C\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520775F059D6CF3C\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"520775f05a074000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520775F05A074000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520775F05A074000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5207ab995be77c8b\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365207AB995BE77C8B\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365207AB995BE77C8B\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5207ab995c11f000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365207AB995C11F000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365207AB995C11F000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5207ac823076a9d4\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365207AC823076A9D4\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365207AC823076A9D4\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5207b162d153ed82\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365207B162D153ED82\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365207B162D153ED82\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5207b854fcea8d40\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365207B854FCEA8D40\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365207B854FCEA8D40\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5207ce28eb76d7d3\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365207CE28EB76D7D3\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365207CE28EB76D7D3\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5207cf11c11b6f58\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365207CF11C11B6F58\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365207CF11C11B6F58\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5207cffa95dc7000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365207CFFA95DC7000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365207CFFA95DC7000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5207d0e358eb049a\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365207D0E358EB049A\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365207D0E358EB049A\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5207d0e369505300\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365207D0E369505300\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365207D0E369505300\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5207d0e36a35fbbc\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365207D0E36A35FBBC\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365207D0E36A35FBBC\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5208077540dd5b6e\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365208077540DD5B6E\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365208077540DD5B6E\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"52080fa4b992eeea\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652080FA4B992EEEA\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652080FA4B992EEEA\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"520822be2bce35c3\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520822BE2BCE35C3\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520822BE2BCE35C3\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"52082aeda5be1980\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652082AEDA5BE1980\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652082AEDA5BE1980\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"52082bd67afbc000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652082BD67AFBC000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652082BD67AFBC000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"52082cbf4f083980\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652082CBF4F083980\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652082CBF4F083980\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"52082da82445e000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652082DA82445E000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652082DA82445E000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"52082e90f8eaf000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652082E90F8EAF000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652082E90F8EAF000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"52082f79cd900000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652082F79CD900000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652082F79CD900000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"52083062a19c7980\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652083062A19C7980\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652083062A19C7980\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5208314b76da2000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365208314B76DA2000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365208314B76DA2000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"520832344b7f3000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520832344B7F3000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520832344B7F3000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5208577e59eec000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365208577E59EEC000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365208577E59EEC000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"520859500338e000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520859500338E000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520859500338E000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"520886c986447d13\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520886C986447D13\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520886C986447D13\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"520886c98a7a03d0\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520886C98A7A03D0\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520886C98A7A03D0\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5208df0180b023fe\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365208DF0180B023FE\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365208DF0180B023FE\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5208dfeaf20d8980\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365208DFEAF20D8980\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365208DFEAF20D8980\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5208e1bc9bc57da1\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365208E1BC9BC57DA1\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365208E1BC9BC57DA1\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5208e1bc9bf04000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365208E1BC9BF04000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365208E1BC9BF04000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"520925f2e84bf000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520925F2E84BF000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520925F2E84BF000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"52093cafac6a8000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652093CAFAC6A8000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652093CAFAC6A8000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"52096a29349ebba2\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652096A29349EBBA2\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652096A29349EBBA2\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"52096a2934a7a000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652096A2934A7A000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652096A2934A7A000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"52096eb55a2f4b0d\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652096EB55A2F4B0D\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652096EB55A2F4B0D\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"52097a88283040dc\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652097A88283040DC\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652097A88283040DC\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"520997a2b8020583\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520997A2B8020583\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520997A2B8020583\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5209c51c4521e000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365209C51C4521E000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365209C51C4521E000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5209c8456e33ad92\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365209C8456E33AD92\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365209C8456E33AD92\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5209f295cadcf4ae\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365209F295CADCF4AE\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365209F295CADCF4AE\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"520a200f55008cdb\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520A200F55008CDB\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520A200F55008CDB\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"520a268e386a6baf\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520A268E386A6BAF\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520A268E386A6BAF\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"520a4c376e4e33f1\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520A4C376E4E33F1\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520A4C376E4E33F1\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"520a4d88ddd6ba09\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520A4D88DDD6BA09\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520A4D88DDD6BA09\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"520a4d88ddd94000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520A4D88DDD94000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520A4D88DDD94000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"520a569d5c23e278\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520A569D5C23E278\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520A569D5C23E278\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"520a7ea5b89873a8\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520A7EA5B89873A8\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520A7EA5B89873A8\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"520a8b615973ff05\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520A8B615973FF05\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520A8B615973FF05\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"520a981478fcd46a\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520A981478FCD46A\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520A981478FCD46A\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"520aa87be977daad\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520AA87BE977DAAD\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520AA87BE977DAAD\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"520aa87beb9338fa\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520AA87BEB9338FA\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520AA87BEB9338FA\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"520aa87bedfe7b42\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520AA87BEDFE7B42\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520AA87BEDFE7B42\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"520aa87bee2b596e\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520AA87BEE2B596E\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520AA87BEE2B596E\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"520aa87bee538000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520AA87BEE538000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520AA87BEE538000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"520aa8f09440d200\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520AA8F09440D200\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520AA8F09440D200\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"520b036efeb9b289\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520B036EFEB9B289\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520B036EFEB9B289\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"520b036efecdc000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520B036EFECDC000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520B036EFECDC000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"520b159f9ae2ecf6\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520B159F9AE2ECF6\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520B159F9AE2ECF6\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"520b5abeba22641f\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520B5ABEBA22641F\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520B5ABEBA22641F\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"520b5ba7901040b2\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520B5BA7901040B2\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520B5BA7901040B2\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"520b5d793a6f0e26\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520B5D793A6F0E26\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520B5D793A6F0E26\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"520b5e620c9389ba\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520B5E620C9389BA\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520B5E620C9389BA\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"520b5e620e7db231\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520B5E620E7DB231\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520B5E620E7DB231\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"520b7092ac0111e7\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520B7092AC0111E7\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520B7092AC0111E7\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"520b8bdb94bfc03d\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520B8BDB94BFC03D\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520B8BDB94BFC03D\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"520bd7a5e3062101\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520BD7A5E3062101\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520BD7A5E3062101\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"520bd7a625405555\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520BD7A625405555\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520BD7A625405555\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"520c0b2fe1c9e000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520C0B2FE1C9E000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520C0B2FE1C9E000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"520c135f5b977000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520C135F5B977000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520C135F5B977000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"520c1448303c8000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520C1448303C8000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520C1448303C8000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"520c65aec38c6200\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520C65AEC38C6200\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520C65AEC38C6200\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"520c6697980b4c60\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520C6697980B4C60\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520C6697980B4C60\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"520c6e526bd31dd9\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520C6E526BD31DD9\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520C6E526BD31DD9\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"520c6f3b4077238d\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520C6F3B4077238D\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520C6F3B4077238D\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"520cb032035736db\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520CB032035736DB\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520CB032035736DB\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"520cc11602be6000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520CC11602BE6000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520CC11602BE6000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"520cca2e51310000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520CCA2E51310000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520CCA2E51310000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"520cf7a7d9495220\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520CF7A7D9495220\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520CF7A7D9495220\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"520d252161a9790f\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520D252161A9790F\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520D252161A9790F\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"520d252161ab4000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520D252161AB4000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520D252161AB4000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"520d79b6a189adb4\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520D79B6A189ADB4\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520D79B6A189ADB4\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"520d7dc0fe0610c5\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520D7DC0FE0610C5\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520D7DC0FE0610C5\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"520d7f2b9d42a180\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520D7F2B9D42A180\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520D7F2B9D42A180\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"520d7f86e851e335\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520D7F86E851E335\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520D7F86E851E335\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"520df6506df6eba9\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520DF6506DF6EBA9\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520DF6506DF6EBA9\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"520e08810ab6ba60\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520E08810AB6BA60\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520E08810AB6BA60\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"520e277c2048d010\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520E277C2048D010\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520E277C2048D010\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"520e35fa926c20e0\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520E35FA926C20E0\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520E35FA926C20E0\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"520e35fa92df12d2\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520E35FA92DF12D2\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520E35FA92DF12D2\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"520e35fa931a0000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520E35FA931A0000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520E35FA931A0000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"520e491404a45000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520E491404A45000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520E491404A45000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"520e5ad072d1d200\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520E5AD072D1D200\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520E5AD072D1D200\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"520e718d01261361\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520E718D01261361\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520E718D01261361\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"520e77ead1966568\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520E77EAD1966568\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520E77EAD1966568\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"520e7c76f9083900\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520E7C76F9083900\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520E7C76F9083900\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"520e83bd9e123480\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520E83BD9E123480\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520E83BD9E123480\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"520e9004cee310de\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520E9004CEE310DE\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520E9004CEE310DE\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"520e90eda145d160\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520E90EDA145D160\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520E90EDA145D160\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"520e90eda38baf0f\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520E90EDA38BAF0F\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520E90EDA38BAF0F\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"520ee00de7a899c6\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520EE00DE7A899C6\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520EE00DE7A899C6\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"520ee99adc0ca200\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520EE99ADC0CA200\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520EE99ADC0CA200\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"520eebe0b13c1e42\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520EEBE0B13C1E42\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520EEBE0B13C1E42\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"520eebe0b3fc2d8c\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520EEBE0B3FC2D8C\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520EEBE0B3FC2D8C\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"520eebe0b40e8000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520EEBE0B40E8000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520EEBE0B40E8000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"520f0d876fe4f21f\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520F0D876FE4F21F\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520F0D876FE4F21F\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"520f195a3c4ba000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520F195A3C4BA000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520F195A3C4BA000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"520f42479ccf8c22\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520F42479CCF8C22\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520F42479CCF8C22\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"520f45eaef101030\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520F45EAEF101030\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520F45EAEF101030\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"520f46d3c47b7e57\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520F46D3C47B7E57\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520F46D3C47B7E57\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"520f4f033e564fff\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520F4F033E564FFF\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520F4F033E564FFF\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"520f581b8a061067\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520F581B8A061067\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520F581B8A061067\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"520f581b8babf205\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520F581B8BABF205\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520F581B8BABF205\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"520f581b8c570ee4\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520F581B8C570EE4\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520F581B8C570EE4\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"520f581b8c572843\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520F581B8C572843\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520F581B8C572843\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"520f5904616287f9\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520F5904616287F9\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520F5904616287F9\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"520f867de43305c1\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520F867DE43305C1\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520F867DE43305C1\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"520ffcb9de60f32c\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520FFCB9DE60F32C\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520FFCB9DE60F32C\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"520ffcb9e04e6616\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520FFCB9E04E6616\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520FFCB9E04E6616\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"520ffcb9e4e4a980\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520FFCB9E4E4A980\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520FFCB9E4E4A980\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"520ffcb9e53f8cfb\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520FFCB9E53F8CFB\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520FFCB9E53F8CFB\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"520ffcb9e548aaf9\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520FFCB9E548AAF9\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520FFCB9E548AAF9\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"520ffcb9e57d4000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520FFCB9E57D4000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520FFCB9E57D4000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5210251a9c6b398e\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365210251A9C6B398E\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365210251A9C6B398E\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521026111ae8a3ff\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521026111AE8A3FF\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521026111AE8A3FF\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"52102a336da1175e\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652102A336DA1175E\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652102A336DA1175E\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"52105738c73fc200\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652105738C73FC200\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652105738C73FC200\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521057acf5f78000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521057ACF5F78000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521057ACF5F78000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521087e0fc23d000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521087E0FC23D000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521087E0FC23D000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5210a987b567ea45\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365210A987B567EA45\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365210A987B567EA45\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5210b0ce5d27a000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365210B0CE5D27A000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365210B0CE5D27A000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5210b27184ec2ab6\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365210B27184EC2AB6\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365210B27184EC2AB6\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5210b2a0061dd26d\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365210B2A0061DD26D\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365210B2A0061DD26D\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5210b2a00671c000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365210B2A00671C000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365210B2A00671C000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5210e6594dd97a8e\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365210E6594DD97A8E\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365210E6594DD97A8E\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5210ec8e43498d3e\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365210EC8E43498D3E\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365210EC8E43498D3E\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"52110d930d1dac0e\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652110D930D1DAC0E\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652110D930D1DAC0E\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"52110d9312f37ad5\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652110D9312F37AD5\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652110D9312F37AD5\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"52110d9314988d96\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652110D9314988D96\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652110D9314988D96\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"52110d9316ec0000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652110D9316EC0000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652110D9316EC0000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521144995de0f31c\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521144995DE0F31C\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521144995DE0F31C\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521146df6b8af000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521146DF6B8AF000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521146DF6B8AF000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521168861d612556\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521168861D612556\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521168861D612556\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5211688627664000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365211688627664000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365211688627664000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5211ba60e96de000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365211BA60E96DE000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365211BA60E96DE000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5211c3788097c0a3\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365211C3788097C0A3\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365211C3788097C0A3\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5211c3791ffa13a6\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365211C3791FFA13A6\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365211C3791FFA13A6\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5211c37932085ec6\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365211C37932085EC6\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365211C37932085EC6\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5211c3793559c633\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365211C3793559C633\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365211C3793559C633\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5211c37937a69a7c\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365211C37937A69A7C\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365211C37937A69A7C\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5211c37937b4b295\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365211C37937B4B295\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365211C37937B4B295\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5211c37937b61ae4\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365211C37937B61AE4\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365211C37937B61AE4\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5211c37937bd4c21\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365211C37937BD4C21\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365211C37937BD4C21\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5211c37937e08000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365211C37937E08000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365211C37937E08000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5211f0f2bf24816a\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365211F0F2BF24816A\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365211F0F2BF24816A\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5211f0f2c01da000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365211F0F2C01DA000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365211F0F2C01DA000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"52121553f9ba6a14\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652121553F9BA6A14\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652121553F9BA6A14\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"52121e6c45ee4903\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652121E6C45EE4903\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652121E6C45EE4903\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"52121e6c485a47a1\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652121E6C485A47A1\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652121E6C485A47A1\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521239b533b2a000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521239B533B2A000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521239B533B2A000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"52124c5db20ca245\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652124C5DB20CA245\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652124C5DB20CA245\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521264d1e0c0ad70\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521264D1E0C0AD70\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521264D1E0C0AD70\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"52126e7561184000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652126E7561184000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652126E7561184000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521270470a2507a1\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521270470A2507A1\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521270470A2507A1\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5212795f57d93af3\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365212795F57D93AF3\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365212795F57D93AF3\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5212795f58ad955e\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365212795F58AD955E\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365212795F58AD955E\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5212795f58d50000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365212795F58D50000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365212795F58D50000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"52128b8ff5b1a999\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652128B8FF5B1A999\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652128B8FF5B1A999\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5212d452694ab9aa\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365212D452694AB9AA\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365212D452694AB9AA\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5212d452694f4000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365212D452694F4000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365212D452694F4000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"52132ab951c972f9\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652132AB951C972F9\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652132AB951C972F9\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"52132ab9523e86a8\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652132AB9523E86A8\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652132AB9523E86A8\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"52132f4573ed3217\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652132F4573ED3217\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652132F4573ED3217\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"52132f457705ec89\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652132F457705EC89\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652132F457705EC89\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"52132f4579c98000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652132F4579C98000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652132F4579C98000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"52135cbf0206a000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652135CBF0206A000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652135CBF0206A000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521385ac630a7000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521385AC630A7000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521385AC630A7000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"52138a3886e8497e\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652138A3886E8497E\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652138A3886E8497E\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"52138a3886f4085d\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652138A3886F4085D\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652138A3886F4085D\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"52138a3887c7f795\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652138A3887C7F795\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652138A3887C7F795\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"52138a3888e0eccc\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652138A3888E0ECCC\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652138A3888E0ECCC\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"52138a388a1cdac6\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652138A388A1CDAC6\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652138A388A1CDAC6\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"52138a388a43c000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652138A388A43C000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652138A388A43C000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5213b7b20ff80987\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365213B7B20FF80987\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365213B7B20FF80987\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5213b7b21280e000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365213B7B21280E000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365213B7B21280E000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5213bcbc4c8a7050\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365213BCBC4C8A7050\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365213BCBC4C8A7050\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5213e52b99eb9871\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365213E52B99EB9871\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365213E52B99EB9871\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5213f93e2cd6c4e8\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365213F93E2CD6C4E8\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365213F93E2CD6C4E8\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521421326d4c2000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521421326D4C2000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521421326D4C2000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5214401c59cfc0f4\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365214401C59CFC0F4\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365214401C59CFC0F4\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5214401e94c6246c\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365214401E94C6246C\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365214401E94C6246C\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5214401eaa3e7408\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365214401EAA3E7408\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365214401EAA3E7408\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"52149b11ba8eb0e4\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652149B11BA8EB0E4\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652149B11BA8EB0E4\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5214bf72f57d0000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365214BF72F57D0000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365214BF72F57D0000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5214eb1ad36964e5\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365214EB1AD36964E5\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365214EB1AD36964E5\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5214ecec7dba2000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365214ECEC7DBA2000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365214ECEC7DBA2000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5214f51bf3ff5bdf\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365214F51BF3FF5BDF\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365214F51BF3FF5BDF\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521521aca596e533\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521521ACA596E533\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521521ACA596E533\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5215237e5469e000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365215237E5469E000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365215237E5469E000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521550f7d7041f62\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521550F7D7041F62\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521550F7D7041F62\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521550f7dc0e7b06\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521550F7DC0E7B06\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521550F7DC0E7B06\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521550f7dca70000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521550F7DCA70000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521550F7DCA70000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5215d04c24d3fa3b\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365215D04C24D3FA3B\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365215D04C24D3FA3B\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5215f59634a8ee00\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365215F59634A8EE00\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365215F59634A8EE00\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521630c824c63105\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521630C824C63105\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521630C824C63105\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521634577fe2bf00\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521634577FE2BF00\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521634577FE2BF00\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5216345785d8a000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365216345785D8A000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365216345785D8A000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"52164fa070e876b7\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652164FA070E876B7\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652164FA070E876B7\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521658b8bca70338\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521658B8BCA70338\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521658B8BCA70338\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521661d10886fbab\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521661D10886FBAB\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521661D10886FBAB\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521661d10e08e7bb\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521661D10E08E7BB\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521661D10E08E7BB\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"52166b5dccc05505\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652166B5DCCC05505\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652166B5DCCC05505\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"52166cbb05d13878\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652166CBB05D13878\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652166CBB05D13878\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"52167976a6d96000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652167976A6D96000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652167976A6D96000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"52168f4a8faa9085\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652168F4A8FAA9085\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652168F4A8FAA9085\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521717b72848fc10\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521717B72848FC10\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521717B72848FC10\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521717b72cb9cc92\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521717B72CB9CC92\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521717B72CB9CC92\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521717b72e0d7063\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521717B72E0D7063\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521717B72E0D7063\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521717b72eb13ae1\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521717B72EB13AE1\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521717B72EB13AE1\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521717b72f0a4000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521717B72F0A4000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521717B72F0A4000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5217bf8ee56570ff\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365217BF8EE56570FF\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365217BF8EE56570FF\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5217cd9d4d6ae4cb\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365217CD9D4D6AE4CB\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365217CD9D4D6AE4CB\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5217cd9d4d8e38f4\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365217CD9D4D8E38F4\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365217CD9D4D8E38F4\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5217cd9d4e0b01b5\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365217CD9D4E0B01B5\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365217CD9D4E0B01B5\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5217cd9d4f367603\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365217CD9D4F367603\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365217CD9D4F367603\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5217cd9d4f367754\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365217CD9D4F367754\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365217CD9D4F367754\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5217ed725cd6fc6c\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365217ED725CD6FC6C\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365217ED725CD6FC6C\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5217fb16d3acd435\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365217FB16D3ACD435\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365217FB16D3ACD435\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5217ffa2f2b82aec\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365217FFA2F2B82AEC\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365217FFA2F2B82AEC\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"52182890519e2186\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652182890519E2186\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652182890519E2186\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5218289060790000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365218289060790000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365218289060790000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"52185609e7b1f881\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652185609E7B1F881\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652185609E7B1F881\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"52187152ce99c92a\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652187152CE99C92A\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652187152CE99C92A\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5218838370809fab\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365218838370809FAB\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365218838370809FAB\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521883837089c902\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521883837089C902\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521883837089C902\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5218ad59a69c2000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365218AD59A69C2000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365218AD59A69C2000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5218b3b7771f9000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365218B3B7771F9000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365218B3B7771F9000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5218c32d93484ee1\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365218C32D93484EE1\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365218C32D93484EE1\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5218ca53a3244ad8\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365218CA53A3244AD8\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365218CA53A3244AD8\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5218cb5d0dc89d26\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365218CB5D0DC89D26\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365218CB5D0DC89D26\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5218cc45e4884000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365218CC45E4884000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365218CC45E4884000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5218d9017e1bc6c0\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365218D9017E1BC6C0\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365218D9017E1BC6C0\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5218de7655b5ef72\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365218DE7655B5EF72\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365218DE7655B5EF72\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5218de7671e371ea\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365218DE7671E371EA\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365218DE7671E371EA\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5218de767a76687c\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365218DE767A76687C\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365218DE767A76687C\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5218de767b78b070\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365218DE767B78B070\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365218DE767B78B070\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5218de7680dabccf\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365218DE7680DABCCF\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365218DE7680DABCCF\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5218de7680ddb897\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365218DE7680DDB897\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365218DE7680DDB897\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5218de7680f3fe73\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365218DE7680F3FE73\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365218DE7680F3FE73\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5218de76816d8000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365218DE76816D8000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365218DE76816D8000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521965fa4145f334\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521965FA4145F334\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521965FA4145F334\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"52197913b6c1f5db\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652197913B6C1F5DB\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652197913B6C1F5DB\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5219945c964845c8\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365219945C964845C8\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365219945C964845C8\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5219dd1f143f11d7\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365219DD1F143F11D7\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365219DD1F143F11D7\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5219ef4fb2b186e3\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365219EF4FB2B186E3\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365219EF4FB2B186E3\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5219ef4fb2d2a8f4\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365219EF4FB2D2A8F4\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365219EF4FB2D2A8F4\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521a88e80eadb86c\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521A88E80EADB86C\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521A88E80EADB86C\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521aa535cf88c59a\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521AA535CF88C59A\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521AA535CF88C59A\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521aa535d1081d26\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521AA535D1081D26\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521AA535D1081D26\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521aa535d23bee1c\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521AA535D23BEE1C\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521AA535D23BEE1C\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521aa535d3d0bfe9\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521AA535D3D0BFE9\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521AA535D3D0BFE9\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521aa535d3d0c000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521AA535D3D0C000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521AA535D3D0C000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521ad73b83473000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521AD73B83473000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521AD73B83473000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521b094132b647e5\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521B094132B647E5\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521B094132B647E5\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521b541cf380c4ec\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521B541CF380C4EC\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521B541CF380C4EC\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521b5b1bf4c53ffe\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521B5B1BF4C53FFE\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521B5B1BF4C53FFE\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521bacf6b65eda6d\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521BACF6B65EDA6D\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521BACF6B65EDA6D\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521bb52622f29071\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521BB52622F29071\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521BB52622F29071\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521bb60f00a3f64b\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521BB60F00A3F64B\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521BB60F00A3F64B\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521bb60f0237f86a\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521BB60F0237F86A\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521BB60F0237F86A\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521bb60f02705778\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521BB60F02705778\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521BB60F02705778\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521bb60f04e2021e\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521BB60F04E2021E\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521BB60F04E2021E\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521bb60f0515c11b\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521BB60F0515C11B\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521BB60F0515C11B\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521be0ce0f610676\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521BE0CE0F610676\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521BE0CE0F610676\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521be3888733a87b\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521BE3888733A87B\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521BE3888733A87B\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521be3888d7ca000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521BE3888D7CA000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521BE3888D7CA000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521c07e9bfa2deb8\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521C07E9BFA2DEB8\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521C07E9BFA2DEB8\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521c0c790bbbe1ce\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521C0C790BBBE1CE\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521C0C790BBBE1CE\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521c1102138db094\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521C1102138DB094\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521C1102138DB094\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521c110213bd1fab\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521C110213BD1FAB\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521C110213BD1FAB\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521c110214914003\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521C110214914003\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521C110214914003\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521c1102149a6bd3\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521C1102149A6BD3\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521C1102149A6BD3\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521c1102156d74c0\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521C1102156D74C0\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521C1102156D74C0\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521c110215b9bffe\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521C110215B9BFFE\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521C110215B9BFFE\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521c35634f844000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521C35634F844000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521C35634F844000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521c3e7b96c68cd0\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521C3E7B96C68CD0\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521C3E7B96C68CD0\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521c3e7b9a8661b9\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521C3E7B9A8661B9\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521C3E7B9A8661B9\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521c41361be61000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521C41361BE61000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521C41361BE61000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521c5c7f072a4973\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521C5C7F072A4973\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521C5C7F072A4973\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521c6af509180800\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521C6AF509180800\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521C6AF509180800\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521c6b0c5020e93f\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521C6B0C5020E93F\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521C6B0C5020E93F\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521c6bf514e44b95\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521C6BF514E44B95\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521C6BF514E44B95\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521c6bf51f195426\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521C6BF51F195426\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521C6BF51F195426\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521c6bf5203f5780\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521C6BF5203F5780\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521C6BF5203F5780\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521c6bf5216083d0\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521C6BF5216083D0\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521C6BF5216083D0\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521c6bf5249c5de5\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521C6BF5249C5DE5\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521C6BF5249C5DE5\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521c6bf524bb86ea\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521C6BF524BB86EA\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521C6BF524BB86EA\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521c6bf525e7b4c4\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521C6BF525E7B4C4\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521C6BF525E7B4C4\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521c6bf526054994\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521C6BF526054994\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521C6BF526054994\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521c6bf5261a126c\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521C6BF5261A126C\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521C6BF5261A126C\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521c6bf526340000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521C6BF526340000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521C6BF526340000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521c750d7496027a\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521C750D7496027A\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521C750D7496027A\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521cc6e8361b3181\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521CC6E8361B3181\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521CC6E8361B3181\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521ce2440fee14d0\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521CE2440FEE14D0\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521CE2440FEE14D0\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521d4f54ca852c5e\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521D4F54CA852C5E\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521D4F54CA852C5E\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521d8b5ba1a7a5f6\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521D8B5BA1A7A5F6\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521D8B5BA1A7A5F6\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521d94ce37663689\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521D94CE37663689\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521D94CE37663689\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521d9b1f5d20d555\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521D9B1F5D20D555\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521D9B1F5D20D555\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521dfc22a1e78000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521DFC22A1E78000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521DFC22A1E78000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521e31cba1cc3078\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521E31CBA1CC3078\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521E31CBA1CC3078\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521e32b4780a2147\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521E32B4780A2147\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521E32B4780A2147\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521e32b478974000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521E32B478974000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521E32B478974000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521e8cbeb2c6a41f\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521E8CBEB2C6A41F\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521E8CBEB2C6A41F\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521f9d97df990136\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521F9D97DF990136\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521F9D97DF990136\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521f9e80b451ed76\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521F9E80B451ED76\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521F9E80B451ED76\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521f9e80ba804000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521F9E80BA804000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521F9E80BA804000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521fb87cfd4c2220\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521FB87CFD4C2220\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521FB87CFD4C2220\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521ff05b7c717688\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521FF05B7C717688\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521FF05B7C717688\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521ff9738ec434da\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521FF9738EC434DA\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521FF9738EC434DA\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521ff973bab167b5\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521FF973BAB167B5\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521FF973BAB167B5\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521ff973bc8ad6e9\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521FF973BC8AD6E9\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521FF973BC8AD6E9\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521ff973be1fccf6\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521FF973BE1FCCF6\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521FF973BE1FCCF6\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521ff973c276ac49\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521FF973C276AC49\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521FF973C276AC49\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521ff973c4e67046\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521FF973C4E67046\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521FF973C4E67046\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521ff973c6b89625\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521FF973C6B89625\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521FF973C6B89625\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521ff973c773b26b\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521FF973C773B26B\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521FF973C773B26B\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521ff973c844eb2f\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521FF973C844EB2F\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521FF973C844EB2F\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521ff973cacd0c69\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521FF973CACD0C69\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521FF973CACD0C69\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521ff973caef31e3\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521FF973CAEF31E3\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521FF973CAEF31E3\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521ff973cafa8000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521FF973CAFA8000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521FF973CAFA8000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"521ff973cb83d440\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521FF973CB83D440\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521FF973CB83D440\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"52215c27be70e000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652215C27BE70E000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652215C27BE70E000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"52218f2ced8be9a6\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652218F2CED8BE9A6\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652218F2CED8BE9A6\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5221c0331cb28f20\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365221C0331CB28F20\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365221C0331CB28F20\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5221edac9decfb5f\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365221EDAC9DECFB5F\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365221EDAC9DECFB5F\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"52221125046f5a60\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652221125046F5A60\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652221125046F5A60\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"522219547c0a0c49\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36522219547C0A0C49\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36522219547C0A0C49\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5222761927657c27\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365222761927657C27\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365222761927657C27\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"52227619283ed8be\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652227619283ED8BE\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652227619283ED8BE\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"522276193cb22408\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36522276193CB22408\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36522276193CB22408\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5222d10c4d5c0d80\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365222D10C4D5C0D80\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365222D10C4D5C0D80\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5222d10c4dfaf288\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365222D10C4DFAF288\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365222D10C4DFAF288\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5222fe85d709a000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365222FE85D709A000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365222FE85D709A000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"52232b168aa1b000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652232B168AA1B000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652232B168AA1B000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"52232bff5504854e\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652232BFF5504854E\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652232BFF5504854E\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"52232bff5950df00\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652232BFF5950DF00\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652232BFF5950DF00\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"52232bff5e3a6735\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652232BFF5E3A6735\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652232BFF5E3A6735\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"52232bff5f1937c8\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652232BFF5F1937C8\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652232BFF5F1937C8\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"52232bff5f2e7b65\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652232BFF5F2E7B65\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652232BFF5F2E7B65\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"52232bff5f398ddf\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652232BFF5F398DDF\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652232BFF5F398DDF\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"52232bff5f46c000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652232BFF5F46C000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652232BFF5F46C000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"522354ecbea090f2\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36522354ECBEA090F2\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36522354ECBEA090F2\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"522374c1d28416e2\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36522374C1D28416E2\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36522374C1D28416E2\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"52237dda206e2cc9\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652237DDA206E2CC9\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652237DDA206E2CC9\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"52237dda213826b2\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652237DDA213826B2\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652237DDA213826B2\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"522386099206bd71\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36522386099206BD71\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36522386099206BD71\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"522386f25c99a9b5\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36522386F25C99A9B5\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36522386F25C99A9B5\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"522386f26343ae24\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36522386F26343AE24\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36522386F26343AE24\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"522386f263939894\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36522386F263939894\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36522386F263939894\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"522386f269000af9\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36522386F269000AF9\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36522386F269000AF9\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"522386f269ef9228\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36522386F269EF9228\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36522386F269EF9228\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"522386f26ab38c66\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36522386F26AB38C66\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36522386F26AB38C66\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"522386f26ab39d69\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36522386F26AB39D69\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36522386F26AB39D69\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"522386f26ba20215\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36522386F26BA20215\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36522386F26BA20215\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"522386f26bacce73\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36522386F26BACCE73\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36522386F26BACCE73\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"522386f26ce23fb5\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36522386F26CE23FB5\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36522386F26CE23FB5\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"522386f26d0e8e1a\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36522386F26D0E8E1A\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36522386F26D0E8E1A\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"522386f26d99583b\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36522386F26D99583B\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36522386F26D99583B\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"522386f26dd87dd0\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36522386F26DD87DD0\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36522386F26DD87DD0\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"522386f26e726166\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36522386F26E726166\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36522386F26E726166\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"522386f26ebe57ec\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36522386F26EBE57EC\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36522386F26EBE57EC\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"522386f26f41d1bf\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36522386F26F41D1BF\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36522386F26F41D1BF\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"522386f26f639113\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36522386F26F639113\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36522386F26F639113\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"522386f26fb27747\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36522386F26FB27747\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36522386F26FB27747\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"522386f26fb3ef51\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36522386F26FB3EF51\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36522386F26FB3EF51\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"522386f26fb49887\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36522386F26FB49887\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36522386F26FB49887\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"53038d7ea4c68000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653038D7EA4C68000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653038D7EA4C68000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"53038d7ea50921e1\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653038D7EA50921E1\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653038D7EA50921E1\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"53038d7ea7607d3b\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653038D7EA7607D3B\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653038D7EA7607D3B\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"530398dd06e53b14\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36530398DD06E53B14\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36530398DD06E53B14\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5303b1dfde1a28c3\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365303B1DFDE1A28C3\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365303B1DFDE1A28C3\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"530415eb3d7de000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36530415EB3D7DE000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36530415EB3D7DE000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5304281bda0e6c6b\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365304281BDA0E6C6B\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365304281BDA0E6C6B\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"53044364c3223e89\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653044364C3223E89\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653044364C3223E89\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"53044364c4981a17\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653044364C4981A17\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653044364C4981A17\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"53044364c5bb0000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653044364C5BB0000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653044364C5BB0000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5304625103a6f78e\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365304625103A6F78E\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365304625103A6F78E\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5304879b1216b000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365304879B1216B000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365304879B1216B000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"53049159b00c8aa4\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653049159B00C8AA4\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653049159B00C8AA4\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"530498e2d91e9f1d\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36530498E2D91E9F1D\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36530498E2D91E9F1D\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"53049e57d5e935f2\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653049E57D5E935F2\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653049E57D5E935F2\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"53049e57d602b014\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653049E57D602B014\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653049E57D602B014\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"53049e57d62a723f\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653049E57D62A723F\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653049E57D62A723F\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"53049e57d6354000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653049E57D6354000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653049E57D6354000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5304d4e9ace50000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365304D4E9ACE50000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365304D4E9ACE50000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5304dd19260b3894\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365304DD19260B3894\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365304DD19260B3894\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"530500fa7be8b448\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36530500FA7BE8B448\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36530500FA7BE8B448\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"53054b25a8b72000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653054B25A8B72000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653054B25A8B72000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5305543df667bb76\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365305543DF667BB76\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365305543DF667BB76\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5305543df6c9b894\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365305543DF6C9B894\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365305543DF6C9B894\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5305543df729c000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365305543DF729C000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365305543DF729C000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"53056c8aa1ac1f44\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653056C8AA1AC1F44\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653056C8AA1AC1F44\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"53056f86e281a000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653056F86E281A000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653056F86E281A000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5305a618b886fdfe\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365305A618B886FDFE\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365305A618B886FDFE\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5305e087f66d6352\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365305E087F66D6352\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365305E087F66D6352\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5305ebd312a02aaa\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365305EBD312A02AAA\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365305EBD312A02AAA\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"53060a241807135e\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653060A241807135E\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653060A241807135E\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"53060b0cecc35000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653060B0CECC35000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653060B0CECC35000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"530625e354f030e8\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36530625E354F030E8\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36530625E354F030E8\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"53063b9ad03cce98\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653063B9AD03CCE98\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653063B9AD03CCE98\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5306651729ab2880\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365306651729AB2880\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365306651729AB2880\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"53071afd4908585c\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653071AFD4908585C\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653071AFD4908585C\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"53071afd493f3645\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653071AFD493F3645\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653071AFD493F3645\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"53071afd494e4985\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653071AFD494E4985\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653071AFD494E4985\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"53071afd494e4986\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653071AFD494E4986\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653071AFD494E4986\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"53071afd4969aa80\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653071AFD4969AA80\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653071AFD4969AA80\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"53071afd49724577\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653071AFD49724577\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653071AFD49724577\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"53071afd498d0000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653071AFD498D0000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653071AFD498D0000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"53074876d147c837\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653074876D147C837\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653074876D147C837\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5307a369e1a90d10\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365307A369E1A90D10\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365307A369E1A90D10\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5307e514419eb000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365307E514419EB000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365307E514419EB000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"53081a8eb110f5c0\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653081A8EB110F5C0\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653081A8EB110F5C0\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"53082bd67afbc000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653082BD67AFBC000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653082BD67AFBC000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"530886c98b760000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36530886C98B760000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36530886C98B760000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5308e1bc8811fcaa\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365308E1BC8811FCAA\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365308E1BC8811FCAA\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5308e1bc95fa5f00\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365308E1BC95FA5F00\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365308E1BC95FA5F00\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5308e1bc9bf04000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365308E1BC9BF04000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365308E1BC9BF04000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5308f3ed38d58000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365308F3ED38D58000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365308F3ED38D58000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"530aa87bee0967b6\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36530AA87BEE0967B6\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36530AA87BEE0967B6\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"530aa87bf01d4380\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36530AA87BF01D4380\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36530AA87BF01D4380\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"530ae5dc6daab62f\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36530AE5DC6DAAB62F\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36530AE5DC6DAAB62F\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"530b4ee0e7f53a0d\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36530B4EE0E7F53A0D\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36530B4EE0E7F53A0D\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"530c6f3b4043f786\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36530C6F3B4043F786\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36530C6F3B4043F786\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"530cb7fdb44b2703\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36530CB7FDB44B2703\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36530CB7FDB44B2703\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"530cca2e512c0002\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36530CCA2E512C0002\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36530CCA2E512C0002\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"530d529ae9e86000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36530D529AE9E86000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36530D529AE9E86000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"530e35fa929c930b\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36530E35FA929C930B\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36530E35FA929C930B\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"530e35fa92a49095\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36530E35FA92A49095\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36530E35FA92A49095\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"530e35fa931a0000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36530E35FA931A0000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36530E35FA931A0000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"530ffcb9e572f348\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36530FFCB9E572F348\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36530FFCB9E572F348\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"530ffcb9e82be540\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36530FFCB9E82BE540\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36530FFCB9E82BE540\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5310eaed59c99e7a\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365310EAED59C99E7A\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365310EAED59C99E7A\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5311c3793747e980\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365311C3793747E980\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365311C3793747E980\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5311c37937a5b4ed\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365311C37937A5B4ED\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365311C37937A5B4ED\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5311c37937b60f36\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365311C37937B60F36\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365311C37937B60F36\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5311c37937b9a90d\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365311C37937B9A90D\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365311C37937B9A90D\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5311c37937e08000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365311C37937E08000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365311C37937E08000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5313566130b7c9b1\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365313566130B7C9B1\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365313566130B7C9B1\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5314401eab384000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365314401EAB384000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365314401EAB384000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"53153ec73fc1c000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653153EC73FC1C000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653153EC73FC1C000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"531550f7dbd3a64d\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36531550F7DBD3A64D\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36531550F7DBD3A64D\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"531550f7dc8b34f3\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36531550F7DC8B34F3\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36531550F7DC8B34F3\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"531550f7dca70000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36531550F7DCA70000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36531550F7DCA70000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5316542c978f166b\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365316542C978F166B\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365316542C978F166B\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"531717b72e63e229\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36531717B72E63E229\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36531717B72E63E229\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"531722cfb7aa4c44\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36531722CFB7AA4C44\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36531722CFB7AA4C44\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5317af4c4a1af100\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365317AF4C4A1AF100\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365317AF4C4A1AF100\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5317af4c4a80aaab\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365317AF4C4A80AAAB\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365317AF4C4A80AAAB\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5318de76816d8000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365318DE76816D8000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365318DE76816D8000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5319396991888143\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365319396991888143\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365319396991888143\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5319ef4fb2d8b8f0\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365319EF4FB2D8B8F0\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365319EF4FB2D8B8F0\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"531a5cda496c4f40\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36531A5CDA496C4F40\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36531A5CDA496C4F40\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"531a95be1f80789c\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36531A95BE1F80789C\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36531A95BE1F80789C\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"531aa535d3d0c000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36531AA535D3D0C000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36531AA535D3D0C000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"531b9ac619e7a000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36531B9AC619E7A000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36531B9AC619E7A000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"531ba123e9bed563\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36531BA123E9BED563\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36531BA123E9BED563\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"531c6bf526297a08\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36531C6BF526297A08\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36531C6BF526297A08\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"531c6bf526340000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36531C6BF526340000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36531C6BF526340000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"531d972eda1c31c1\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36531D972EDA1C31C1\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36531D972EDA1C31C1\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"531f438daa060000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36531F438DAA060000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36531F438DAA060000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"531ff973ca4247f9\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36531FF973CA4247F9\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36531FF973CA4247F9\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"531ff973cac4eecd\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36531FF973CAC4EECD\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36531FF973CAC4EECD\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"531ff973cadf102b\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36531FF973CADF102B\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36531FF973CADF102B\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"531ff973caf14706\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36531FF973CAF14706\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36531FF973CAF14706\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"531ff973caf5ed5c\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36531FF973CAF5ED5C\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36531FF973CAF5ED5C\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"531ff973cafa8000\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36531FF973CAFA8000\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36531FF973CAFA8000\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"531ff973d057ca81\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36531FF973D057CA81\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36531FF973D057CA81\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"53212bf3b80c09e6\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653212BF3B80C09E6\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653212BF3B80C09E6\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"5323589012483c32\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365323589012483C32\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365323589012483C32\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"532386f26cc60f80\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36532386F26CC60F80\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36532386F26CC60F80\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"532386f26e010d29\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36532386F26E010D29\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36532386F26E010D29\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"532386f26e8fd300\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36532386F26E8FD300\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36532386F26E8FD300\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"532386f26ece7cfe\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36532386F26ECE7CFE\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36532386F26ECE7CFE\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"532386f26efd05c2\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36532386F26EFD05C2\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36532386F26EFD05C2\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"532386f26f286980\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36532386F26F286980\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36532386F26F286980\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"532386f26f37abc0\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36532386F26F37ABC0\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36532386F26F37ABC0\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"532386f26f4b69db\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36532386F26F4B69DB\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36532386F26F4B69DB\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"532386f26f689e93\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36532386F26F689E93\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36532386F26F689E93\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"532386f26f7882d5\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36532386F26F7882D5\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36532386F26F7882D5\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"ExchangeRate\": \"532386f26fad66fa\",\n            \"Flags\": 0,\n            \"RootIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36532386F26FAD66FA\",\n            \"TakerGetsCurrency\": \"5852534849420000000000000000000000000000\",\n            \"TakerGetsIssuer\": \"8FF8C5A97FB5754F54249351C23672E353FC5137\",\n            \"TakerPaysCurrency\": \"0000000000000000000000000000000000000000\",\n            \"TakerPaysIssuer\": \"0000000000000000000000000000000000000000\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36532386F26FAD66FA\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r4xMZEgWZaocA566U2xgUqKcTnXKZkBLLi\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520CCA2E51310000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"958219424CF50797305097779A362C0FA61AAFA3A696ECF4E428992D035FEDE1\",\n            \"PreviousTxnLgrSeq\": 69002514,\n            \"Sequence\": 68654331,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"BA84C6C972DB9DCA081379D2ECFBC547AA4CCF262E19D55C639DE941D3E19E70\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"11000000000\"\n            },\n            \"TakerPays\": \"39600000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"4\",\n            \"Owner\": \"rJsM7f8iBRAiXz3bMUaiCsxHujM8UpirwN\",\n            \"RootIndex\": \"663FA034C4BB538F3FFE388BCABE3AA3C52FB791DB97130D2746281C3D384C33\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BA84E750740BA8D64C94F8D094C9948D569E48C018C960A978366B684186D35C\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rLxd1PUJT8xrZ59tUuPANfL87xkBXnkeKi\",\n            \"Balance\": \"222967641\",\n            \"Flags\": 0,\n            \"OwnerCount\": 76,\n            \"Sequence\": 67646745\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"BACF4F063A24F84F4A243E58D3AECEB99DC12A61A07A21F631D12B4E7CD6A89B\",\n          \"PreviousFields\": {\n            \"Balance\": \"212967641\",\n            \"OwnerCount\": 77\n          },\n          \"PreviousTxnID\": \"1B1DFC71A23606D10491B443805F89DCD3FACDB68F9B9ADE9E2849D7FA185AA2\",\n          \"PreviousTxnLgrSeq\": 69063804\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"1379519077703356e-4\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"a86\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rhrguNtFAs4pp6FD4n2Uz2M5PQACwnWdrC\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"LowNode\": \"1\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"BAE7F0319883272F93B0D40386D7D9B6F43865EBC11FF1A30A5CF994E77489BD\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"1579551077703356e-4\"\n            }\n          },\n          \"PreviousTxnID\": \"7240CECAFA90526AB38573D46C46414C322C53222E4E025E8D4386F472CB9108\",\n          \"PreviousTxnLgrSeq\": 68991132\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r9edE9m7sNZEwgT6foU8ahfA1ocrNify92\",\n            \"Balance\": \"61891103\",\n            \"Flags\": 0,\n            \"OwnerCount\": 20,\n            \"Sequence\": 67529738\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"BAF05820D4E3B69DCB11B4E50CD8A9119AD6F0F7C2666121AA554ECD44FC01A0\",\n          \"PreviousFields\": {\n            \"Balance\": \"58174874\",\n            \"OwnerCount\": 21\n          },\n          \"PreviousTxnID\": \"296A8916DE56BECE86727F3D9867347152254C4619D40FCB012037723F4AC0A1\",\n          \"PreviousTxnLgrSeq\": 69054508\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rh1bgyeVNDBauF3vXuASW2L8MWrdq8XYko\",\n            \"RootIndex\": \"BAFC9C2EA25691545CCE70F214BCF8D438C660B64327B432F27359EE6F917F54\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BAFC9C2EA25691545CCE70F214BCF8D438C660B64327B432F27359EE6F917F54\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-28465116118\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rNH6NhWEAVCRPrcDv9NYJdPKv4YTHn1EgA\",\n              \"value\": \"9999999999999990e-1\"\n            },\n            \"HighNode\": \"3\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"e01\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"BB018F18FEFCAE8AB52E9B32670D460D3497246F1FDBD96D8623B28220ED0F72\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-38465116118\"\n            }\n          },\n          \"PreviousTxnID\": \"9495535B1CFF845B129B1D935BA078ACFD806B12673F30ABC2B380FB0B4B5742\",\n          \"PreviousTxnLgrSeq\": 69048803\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rLtYxg3QjyCpbY68rJg6XCeecMyCnzBNCt\",\n            \"Balance\": \"473727214\",\n            \"Flags\": 0,\n            \"OwnerCount\": 73,\n            \"Sequence\": 66617298\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"BB0A9EE33A87183DD44A233249E699586567E54900BBDBA12F69C05A3E8CC410\",\n          \"PreviousFields\": {\n            \"Balance\": \"419388791\",\n            \"OwnerCount\": 74\n          },\n          \"PreviousTxnID\": \"55E1E7D013027542696D05DE57D79793656219A981D6D59E816E4174C90E33FC\",\n          \"PreviousTxnLgrSeq\": 69042972\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"1\",\n            \"Owner\": \"rBzk3TdhfdbidCHeKWfmQ5dy9AuAtGbXeY\",\n            \"RootIndex\": \"C7D98479E3BDF2F01C7F49643BA7AC13D7E365C9AE6B30C241ABE52700AABD01\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BB0C0EBD589BA4C2919F743C381CDEF4AC8822414E40B4EC9EAEA6F9D5027B2C\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rGPEKNaNPYojt4sFbUzodh9SUNxixCwoBC\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521FF973CAFA8000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"2\",\n            \"PreviousTxnID\": \"A7205046B7475E7F0487ADF25FB90C5BD42697172484EB9216332B4636E30EDB\",\n            \"PreviousTxnLgrSeq\": 68899305,\n            \"Sequence\": 67759694,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"BB28DDEE92EBB6F6A3A12E4BB7A78113DEDDE7647CA1D46A240C845FC226DD54\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"20000000000\"\n            },\n            \"TakerPays\": \"180000000\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rsdrgJ5xtkPpnWfJeeshHZLWmQEMS3cFzQ\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365305543DF729C000\",\n            \"BookNode\": \"0\",\n            \"Expiration\": 722826075,\n            \"Flags\": 131072,\n            \"OwnerNode\": \"4\",\n            \"PreviousTxnID\": \"209BD13BE549DAEA272AE79F21DDD3C0DE7E146532EBB8D6EF7081443B2F997F\",\n            \"PreviousTxnLgrSeq\": 67961757,\n            \"Sequence\": 67219915,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"BB63655AC526D20CDC1FB8F92AB312514EE58661EF8BEE15FD28CDEC31EC0712\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"5000000000\"\n            },\n            \"TakerPays\": \"75000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rHkAKrt7sjtM7vfLuUmVeJ98jp42mstkTU\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"d47\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"BB734ABBC593A4CA72996AC2DA03ACFA1563C984F892B7976F9624451786504C\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-7785989866\"\n            }\n          },\n          \"PreviousTxnID\": \"21AD0638A5544BCFE983EA251DE916EE7E0F759B88CF7492CBBABE47E8AC39EC\",\n          \"PreviousTxnLgrSeq\": 67960523\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rJxQUBBc7qcHrGcjrb265KwXeZrVio5Eri\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365207CFFA95DC7000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"b\",\n            \"PreviousTxnID\": \"17B3ED1BADFC542255B86B68D3A9C51D4D10CD91010AADD0450C8CE6B862BE21\",\n            \"PreviousTxnLgrSeq\": 69050912,\n            \"Sequence\": 67219921,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"1399241951779892e-4\"\n            },\n            \"TakerPays\": \"307693304\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"BB943EBA222E5DF7A00D4BEC46C384A523D9B7ECE74B8B9E41BBA7550FDFDA1B\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rp6kmTUHj7Q6CeSZDrqNLRbtvhdbb6N5gY\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521FF973C4E67046\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"8\",\n            \"PreviousTxnID\": \"41FCBFA734C00CF226A3F8A5AEA679389E01C99CF4A0A63153B3EF32FCBD1BBB\",\n            \"PreviousTxnLgrSeq\": 68143271,\n            \"Sequence\": 66758998,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"BBDDBEDB635975A11ADCFF8113AEEE90D4777EF60439E6EC5A2206318BD0E3A9\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7785989866\"\n            },\n            \"TakerPays\": \"70073908\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rGEVM6YhWfikBZiXgWRdcUk7XpAyAnUHZw\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521FF973BE1FCCF6\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"6\",\n            \"PreviousTxnID\": \"A56CCC0320A234578A5821B9BCF5E13E28907E454ECC3C0CB931EEE25E715965\",\n            \"PreviousTxnLgrSeq\": 68904952,\n            \"Sequence\": 67349483,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"BBFFCE1B6C829D2090AFE9D09202F733BC4C6BA789EC093E89B5C74C652AB501\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"4122243321\"\n            },\n            \"TakerPays\": \"37100189\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rfqL99qLpPmC72SjLCaytr5g27EUH35RyB\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365211C3791FFA13A6\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"870C32E99CD307EA97AE83AE72283B9A56BB08E65CCDD8CE8DEDF663B39E835A\",\n            \"PreviousTxnLgrSeq\": 69033105,\n            \"Sequence\": 68690185,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"BC86A1FD332EB34363890BF2A647AAB03C57131BCEE9E691CCAD5245A748688E\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"1372702310.084407\"\n            },\n            \"TakerPays\": \"6863511\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rUrtZA3gFTbfu9vkdygv2jzgBoFRYMNv5L\",\n            \"Balance\": \"961849737\",\n            \"Flags\": 0,\n            \"OwnerCount\": 166,\n            \"Sequence\": 67387693\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"BC86A2534EEF426E08EC04E94D34CB9BE285CEECA028382D69454584296EA13D\",\n          \"PreviousFields\": {\n            \"Balance\": \"739884013\",\n            \"OwnerCount\": 167\n          },\n          \"PreviousTxnID\": \"852369106AB738017857C0E86F798759018F0F7FEBDD3810D5C5F6F0690206B1\",\n          \"PreviousTxnLgrSeq\": 69053331\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rJfV6qTHdF774uGTdRHQMxb8NSF6TWu4uR\",\n              \"value\": \"1000000000000000\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"64e\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"BCAB82698497C7F3570F7C6CD74BF013BECB040B7CE5190D12F4E0F6D461C800\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-2335796959.8\"\n            }\n          },\n          \"PreviousTxnID\": \"AD1E67130A2F7D54C86783399389C126B13685DEE35008885979EA9BD9340726\",\n          \"PreviousTxnLgrSeq\": 68893631\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rGtD3bMYvE4snnRuTS2n3CBfSLeUMBpSyM\",\n            \"RootIndex\": \"BD24AD4AA7048396565BEBCE589672A3AB9116311BF74458A10B93BF037386A6\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BD24AD4AA7048396565BEBCE589672A3AB9116311BF74458A10B93BF037386A6\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"4\",\n            \"IndexPrevious\": \"2\",\n            \"Owner\": \"rNaQPWNXMaNzEWKoidMaJqNskRUFKbKWM2\",\n            \"RootIndex\": \"9FF2AA7E1402EC69FAB027EC505F9CFF63C4F4E9349BC4104C9B2A3B0CA6C627\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BD43F7C050FEF00658B1354B9019DF45C85B074D4C3990286C3DC6CFBAF5F18B\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"1141059609281884e-4\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"c09\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rnB62vv6d8dQV13A3nHQQ7LEGy8DEWkLuG\",\n              \"value\": \"9999999997999990e-1\"\n            },\n            \"LowNode\": \"2\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"BD449F1F673462FF4E0FBDC48B1B6A3D24CB0F9A06E58B21F4C57B8C6FF519FA\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"1567442101281884e-4\"\n            }\n          },\n          \"PreviousTxnID\": \"F78340A27570A4D742A969741E982BAD9E904EC87DA5B614571FCA0855A14711\",\n          \"PreviousTxnLgrSeq\": 68991155\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rKBwHqR3S55CpYFoX1bucD2PFMgSjPAFvu\",\n            \"Balance\": \"1061224776\",\n            \"Flags\": 0,\n            \"OwnerCount\": 223,\n            \"Sequence\": 66598806\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"BD4B4D7BA3378D740C5AD49D0E051E7342267C8022551633A032EAD3EBB8ED9B\",\n          \"PreviousFields\": {\n            \"Balance\": \"870474776\",\n            \"OwnerCount\": 224\n          },\n          \"PreviousTxnID\": \"DE4AEEB8B49DE84B2E50F10DAA236FF2C7C271343E588B4B7C145A775412AF16\",\n          \"PreviousTxnLgrSeq\": 69060611\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"4\",\n            \"Owner\": \"r4oX1kuULiPWPRA2hwV1R7K8kB9gUxqTtv\",\n            \"RootIndex\": \"A3B1F6D0FF2E707695C2D4510271209AFFFF2B1E1508ABBDBACEA795726F8681\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BD6A3E1A621A6EED3BCA6C89B78D13E4F490A92BB44463CA1956AF0E078DA202\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"25900393251.81851\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"c4b\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"raBj3rXVSVdcA66ge5mMyS1iWzMFSyxmB6\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"LowNode\": \"8\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"BD8ECCC081F57E08143EE0093825C822B9186E7DB3949F61D3BCB55DFFDC2425\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"51800786503.63701\"\n            }\n          },\n          \"PreviousTxnID\": \"D5AA6A7660D0FDCF7338B7C04212046BD6365C47E13C3AB5C2E57FD97A53EEE8\",\n          \"PreviousTxnLgrSeq\": 68890971\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"2\",\n            \"Owner\": \"rGJ5He1dXx78w8pGB7zHH9K7dWd9pF8p39\",\n            \"RootIndex\": \"0CAADCB94F5B620D79AE79E43431CE4FCAB7101989DCB63C3663426C9C796CF4\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BDA38FD2C72F79E748BD590B878BC4193E855825094AA02873DD0556231C7D46\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rPWjueM7txwURGpJDWF9yQRn8cVmWQTDnE\",\n            \"Balance\": \"411390316\",\n            \"Flags\": 0,\n            \"OwnerCount\": 63,\n            \"Sequence\": 66692585\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"BE4FB0AE7A12288D8FC776FFE1BFAB251C7CD7A3FEF8C38E77D9AC7C284477DB\",\n          \"PreviousFields\": {\n            \"Balance\": \"332247151\",\n            \"OwnerCount\": 64\n          },\n          \"PreviousTxnID\": \"D98EB692F39DA035D71D7577D6BDAF22F3015F8A1E1F49F64F60111C0638D45E\",\n          \"PreviousTxnLgrSeq\": 69063041\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"2000000000\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"cf2\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"r3ccw1UCPwayXhAVmy6oC4yQTSPeG71bx\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"LowNode\": \"2\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"BE5AB4A2BEC7BDFBAC7B60E66FBAF11165FA4573FF1710E138FC6F1008526900\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"7000000000\"\n            }\n          },\n          \"PreviousTxnID\": \"808483DE8C02BB3297A29B4BECB913C6DC226D403087E9AFA8A0E7947CD351A3\",\n          \"PreviousTxnLgrSeq\": 68991025\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rfzxSb2zMhKDqCsD81pZt7Bjkvak4NBwFx\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652232BFF5F2E7B65\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"2\",\n            \"PreviousTxnID\": \"4EEBE75450E9C961947A356EFC20F431D754F105699A6C98903194CA3CF18665\",\n            \"PreviousTxnLgrSeq\": 68132572,\n            \"Sequence\": 350,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"3970854831660000e-4\"\n            },\n            \"TakerPays\": \"3931146282\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"BE6E693DC8A566FAB08CD80511CAD5EBC58C3171A888F1D7B2EC3CF2848AE063\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"4593734020940000e-4\"\n            },\n            \"TakerPays\": \"4547796680\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rBqYpFjv2TLUiwx2Lr5vgGxoEgjhq1XnB5\",\n            \"Balance\": \"246272522\",\n            \"Flags\": 0,\n            \"OwnerCount\": 10,\n            \"Sequence\": 67575744\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"BF0B2CEB8FDBF05C6B2A329721D4FAC8DDA6349E25308056D6659A1BDADAB630\",\n          \"PreviousFields\": {\n            \"Balance\": \"186084776\",\n            \"OwnerCount\": 11\n          },\n          \"PreviousTxnID\": \"4A49A4FA6E1C18087FB2A9312CAA3A52BB0790C912F9E161708023563331F717\",\n          \"PreviousTxnLgrSeq\": 69038958\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"razceqmpdpjLd5o52i1GiaZJhmB8SEbfCa\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36530FFCB9E82BE540\",\n            \"BookNode\": \"0\",\n            \"Expiration\": 723610786,\n            \"Flags\": 0,\n            \"OwnerNode\": \"c\",\n            \"PreviousTxnID\": \"773631472FB3AC276B5F2F24795D2872ACCEEDE0B2CB0EE4B9E9E7241546878C\",\n            \"PreviousTxnLgrSeq\": 68154156,\n            \"Sequence\": 1410,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"BF613C9E8ADC4973DF39502318E3170565577C278A068FFAC0AC82C764A5F36A\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"2222222200000000e-4\"\n            },\n            \"TakerPays\": \"10000000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rEm8Pg6dKSuFWvEJK2Fnv8EvmkSTuNFJew\",\n            \"RootIndex\": \"BF694D360CA30A020AA6FB07412E4C8A1F61997422D59F6C700BDFCBB6951210\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BF694D360CA30A020AA6FB07412E4C8A1F61997422D59F6C700BDFCBB6951210\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"0\",\n            \"Owner\": \"rHT6EWF9zJzwNtHQsxyrRMSQL4h5GhkcUn\",\n            \"RootIndex\": \"AE8E968D356039CE6C3DD4DEBBE04C7FDB0F5829F8DF71FA3C13E37F94987D73\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BF7DDD5E9EE7BE7B23B32B9B30F4763940A685D7206831E23C777DE5DD69919A\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"2\",\n            \"Owner\": \"rNd3R5EaqkBC3EguG1mmwhjpKqLDTjBNwQ\",\n            \"RootIndex\": \"98E93E4172A84BB79DF8544244015E8A8964B8EE3862871CF5DAAB95E7742C5E\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BF87975D08C91DF25CC60BA451D20371A73A87987482A38B971FA2EA0D880F77\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rBHSrXq2LzGniUp4zypCRk1isLw1ywLPHv\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521FF973CAFA8000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 0,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"45D6EBC235C7C45292C728D1A6C3359712F82A24230713906A4056A06EE2F845\",\n            \"PreviousTxnLgrSeq\": 68998226,\n            \"Sequence\": 68976407,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"BF95ED4A88F89CD0333DA27D684E4682379FB7D310EE3FE3B5F774E1F9BB6A97\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"2500000000000000e-4\"\n            },\n            \"TakerPays\": \"2250000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"2\",\n            \"Owner\": \"rUNU8n4sX1Wo1ksPNPQheA5s6nZCe88iPW\",\n            \"RootIndex\": \"21EC3AB803915CC45A15A79C86DFB0C4220BECDAAC33BF25038A520C1899C0D9\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BFBAD9B02A5784C5FF910E4E775159A86DDA3F03F8315D62A3B0AA70FB58F983\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rMq6uX75yyCP9KjWCxYghLf9xsr3rQCbJv\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521634577FE2BF00\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"7\",\n            \"PreviousTxnID\": \"A481A1BAD29AA1E3D2E50219736C51E82E736B73EBFC4E41A1FA6EC8D5B52165\",\n            \"PreviousTxnLgrSeq\": 68899275,\n            \"Sequence\": 67526023,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"BFC57D3560303B463076BE1A809AE56193AB4962520F89D6DE2F0191F2739B0E\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"10000000000\"\n            },\n            \"TakerPays\": \"62499999\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"17\",\n            \"IndexPrevious\": \"15\",\n            \"Owner\": \"rspLJnfzomVceQKCn6ExME3gJEUuhUZxdV\",\n            \"RootIndex\": \"AD218E1062EA54E07D8608504C3D1CA576AC3AE053FF09FB69944F0B26F56EDE\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"BFC897FE9747514FAC8273DB59990F467E54438B4A5210765B2EF46B2BFD36E2\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rQ34CimjrmwQA4bz3qCwGRHPFuo8rbnVWv\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520B036EFECDC000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"6\",\n            \"PreviousTxnID\": \"7BBF8B5137A027B06FF3B1CAE12F607BC5962B0041E30569AEB8E64F7780EA14\",\n            \"PreviousTxnLgrSeq\": 69000053,\n            \"Sequence\": 67515989,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"BFDCF724D24AFA6ABB1B67BDB042967AA26348E40D116A76FD677723A4854B66\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"10000000000\"\n            },\n            \"TakerPays\": \"31000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rsWg26FevrM9h2PFcanVpvpaLNuoGpLnrB\",\n            \"RootIndex\": \"C006F4C77DE22291CAACC660CE47C1C7A5F5AE66252448DEBFEE20EA663C73E0\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"C006F4C77DE22291CAACC660CE47C1C7A5F5AE66252448DEBFEE20EA663C73E0\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r98DGNQEGR9x2bhRVBbuiHAqxq2aDD6pKa\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520E83BD9E123480\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"8\",\n            \"PreviousTxnID\": \"26E3844B7D6BEADB2C72A2C76C4D21D2E6BB9AA584FF4064C186594975905CED\",\n            \"PreviousTxnLgrSeq\": 68997514,\n            \"Sequence\": 67202775,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"C017AD83725363E2AE7184B6D4B86490161D4A2EFAA811143C29C6001C9341A8\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"5000000000000000e-4\"\n            },\n            \"TakerPays\": \"2042750049\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r4o8fw9WzkMQTvfvxZFVhkY8Txt3eN8Wct\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521BB60F0515C11B\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"427CFF8FCC7EFADA5E33FA9CDFBB38FC5CB672C9021BA1FFC9CB0926A8D06ED6\",\n            \"PreviousTxnLgrSeq\": 68898281,\n            \"Sequence\": 67794279,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"C062DB44B61FB1B1BF9D9C87E3B3E87E438F43E709C387F2B4F715822250A380\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"1663278891609035e-4\"\n            },\n            \"TakerPays\": \"1297357535\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rPDEk87BWPzJVDg22rmwGBu7gxKdkQrJEc\",\n            \"Balance\": \"2568308110\",\n            \"Flags\": 0,\n            \"OwnerCount\": 8,\n            \"Sequence\": 67489222\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"C06F588BD207939CD7DD39498A70C82ED255850FFFD11C3AFBD4BCB12C08BA74\",\n          \"PreviousFields\": {\n            \"Balance\": \"2320483742\",\n            \"OwnerCount\": 9\n          },\n          \"PreviousTxnID\": \"A17AB2E93C15843C7EBC764920F5EEB478092EC6DF6B1C99C4F927C9AAAEA84B\",\n          \"PreviousTxnLgrSeq\": 69026131\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"ea2\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"r31dxSZgmArpDtwoLPAftYtU8bHauuxwA5\",\n              \"value\": \"9999610698224579e-1\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"C0840CC9BF8FC0CD1F060A50B83E07E548E04036EB6A411078798B45A045FC39\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"4145452681.330667\"\n            }\n          },\n          \"PreviousTxnID\": \"58D269E83245F4341DBA6F089F482E6C76D18BBB9600B4F9A88C48BB1AAA0955\",\n          \"PreviousTxnLgrSeq\": 68899337\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rwhKYMZGMmf9zeLdZWq4rs31DQeaxn65R2\",\n            \"Balance\": \"447780856\",\n            \"Flags\": 0,\n            \"OwnerCount\": 139,\n            \"Sequence\": 67373628\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"C08E9F0CDEE87BA1BEE9EA8E73EC2972257DAB1F88ECE8BAF78F20A290FDB3F0\",\n          \"PreviousFields\": {\n            \"Balance\": \"372240857\",\n            \"OwnerCount\": 142\n          },\n          \"PreviousTxnID\": \"41C9F93089285CC4368575FB98C1D819260140E3B43C2263C94762DBD433C6B8\",\n          \"PreviousTxnLgrSeq\": 69063590\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"4\",\n            \"Owner\": \"rwxKxP668nq2w99VM8SpeaXBwUVkcpcV3m\",\n            \"RootIndex\": \"B3BFA19C120BB0871A150611D157ACF0E1CA70C968987A5B6147F53339BAF801\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"C097130BB10BBBADBCC9C0AE7AFC21BF29DA4C7ED5C38873158746110612F000\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rHunttX1NcJT4kdqXJZaqjkU7zeMmJuauN\",\n            \"RootIndex\": \"B0A9321C09B1FC9C78F62B36A640FADFEB328A9D87D8B12D7254421D6358AB20\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"C0DE1A4DB9CBA4DE2D40AAB2B75AFCD01B6BC196B285597880506DB17D1DF707\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rBMPrNjN4FCHpC3wWAdrorVra71nhSRkuK\",\n            \"Balance\": \"1964892522\",\n            \"Flags\": 0,\n            \"OwnerCount\": 63,\n            \"Sequence\": 67580083\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"C1014A2615C8FC6EAC543363C30B88D85FAACC786DBF2087FC22441D1B6B0A30\",\n          \"PreviousFields\": {\n            \"Balance\": \"286962572\",\n            \"OwnerCount\": 65\n          },\n          \"PreviousTxnID\": \"768290E49BB4EFFE5872014B51BB07362C66E3A72457A96931AE3FE9E8A21486\",\n          \"PreviousTxnLgrSeq\": 69062475\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rHa9ikQjRRPKoFgcqN3dwTb27vvL1Ezo6D\",\n            \"Balance\": \"1110542184\",\n            \"Flags\": 0,\n            \"OwnerCount\": 235,\n            \"Sequence\": 66151105\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"C1375F96C2B21C6D00F9F39BB3B14BB19A21DA229EC77F21116C22053A23988D\",\n          \"PreviousFields\": {\n            \"Balance\": \"1040542184\",\n            \"OwnerCount\": 236\n          },\n          \"PreviousTxnID\": \"CA2D3ACE1A33A3B769342C0577A1161EEF1710A87B394416AFE9D6F0333E147C\",\n          \"PreviousTxnLgrSeq\": 69050284\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rpRfuSRwU9nUefy8T4z4RXUEDU2baW1qhk\",\n            \"Balance\": \"928063022\",\n            \"Flags\": 0,\n            \"OwnerCount\": 110,\n            \"Sequence\": 67425389\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"C17C046449A844F08F4363B7CF94EEA6C0D04D0DC0610CA7C30450194C4DB785\",\n          \"PreviousFields\": {\n            \"Balance\": \"485541918\",\n            \"OwnerCount\": 111\n          },\n          \"PreviousTxnID\": \"00438595EFABF602060FD60D9F2A16D7ADDEA796308CC37D73CF9F15B0078CED\",\n          \"PreviousTxnLgrSeq\": 69062211\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rHyR27TRJ73Eu8bqe5wBxX64hJ9Xf2c5XQ\",\n            \"RootIndex\": \"D57DEC33C61D8B2FB7DC2C83830302F49F6894AD32F96A6532CADBA601B28498\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"C185617BB236D990878969CF81A4C4F11D8265DAF2E5D1BB4AB495A8E42A0483\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rNoN8BUzTSY5oyJmAMiKNGo1k8PSxhyJzc\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"693\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"C19FC07A82F746DECE078D0C41A29C62B70510A0BD4BB735CDB4842367680D20\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-7785989866\"\n            }\n          },\n          \"PreviousTxnID\": \"5350D9E7A6802CA5E50932497AB9DDE66538C67AD2A6933E6983A6074254A624\",\n          \"PreviousTxnLgrSeq\": 67997978\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rP7b2urRNSZ6dfigtcEaChxF14R3kK8djd\",\n            \"Balance\": \"381188880\",\n            \"Flags\": 0,\n            \"OwnerCount\": 64,\n            \"Sequence\": 67293332\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"C1A2F18603CABB6CF41C59C27E62CB7426D6C86E4F18EF97F13CD8B67B119EAB\",\n          \"PreviousFields\": {\n            \"Balance\": \"331188880\",\n            \"OwnerCount\": 65\n          },\n          \"PreviousTxnID\": \"09C4CD4C3E4C7227F77AF398FC9CE1542E125442E34EC79E95F67580AFECB7C7\",\n          \"PreviousTxnLgrSeq\": 69047632\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rDHvd9BAsKFcmRyCA3Y6iYEMi7n3xzR5Uu\",\n            \"Balance\": \"198999424\",\n            \"Flags\": 0,\n            \"OwnerCount\": 78,\n            \"Sequence\": 66975947\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"C1A86E7C7246E16BF0CEDFA346E2195B112F76E1497D27E4854A4E4EF063A387\",\n          \"PreviousFields\": {\n            \"OwnerCount\": 79\n          },\n          \"PreviousTxnID\": \"ABF35E0A9933190A9F02A3C0B08AF43CBC3C74EB1ABC5020DA669466363225A2\",\n          \"PreviousTxnLgrSeq\": 69053009\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rJjrokNPSa5xiAbh8N8cqmhVc4ma95FBpt\",\n            \"RootIndex\": \"E121E72FEC56B65768C3BF4DB7B717F9F5D68926613ADE62DBEE61FAACDB31EB\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"C1B643A4C891E6A3532F59CF56319CECE3486B3D4125518CF0B6608AB444690C\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rENubezZP8CRwDNdupJB2J8D1GxukZ7hjv\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653038D7EA4C68000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"3\",\n            \"PreviousTxnID\": \"7B27038D17F193061F85A7782C1EE3DC574CCAEDA742D466CA49A804B9CBCCD8\",\n            \"PreviousTxnLgrSeq\": 68918407,\n            \"Sequence\": 67385223,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"C1C961FE0A6BD5C192A88EF20F139C12F5D0C3CC0CFBE01973F3DEF6C78A1060\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"2000000000\"\n            },\n            \"TakerPays\": \"20000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"6\",\n            \"IndexPrevious\": \"4\",\n            \"Owner\": \"ra2BXpvnVUqyCNaxAUf9Co2AxYzuey129Y\",\n            \"RootIndex\": \"83943904179137B1F69967B4B27179F0AD665CA820E7B76F40ABF1A34ED9A06F\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"C1D569FB08EDFE0B7CD889E4B3E7D79225ED2DD41A3602382E281065184D17DF\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-2000000000000005e-4\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rGdg98Rr24zGwE9rmiPzKi8GkmkhyHyAL1\",\n              \"value\": \"1000000000000000\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"610\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"C1DC6A3661D1EA58D8A3CF4C9A744E8613BE6556E6D4A297EECE5DB13ABAB7D1\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-2577864939066675e-4\"\n            }\n          },\n          \"PreviousTxnID\": \"EC22390883A03F7AADABD64B115864975879BC884F887086D9A9FE4817369240\",\n          \"PreviousTxnLgrSeq\": 68287627\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rHmYEsWRfXC1YbFEKeJRWu9d7tdZ6x1od5\",\n            \"RootIndex\": \"C1DE3D1530025F6F24249008A49A3C05EEE2B76C7608A95F427F3E9C9731504F\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"C1DE3D1530025F6F24249008A49A3C05EEE2B76C7608A95F427F3E9C9731504F\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"180003.27114\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"ec9\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"ra2BXpvnVUqyCNaxAUf9Co2AxYzuey129Y\",\n              \"value\": \"1000000000000000e-1\"\n            },\n            \"LowNode\": \"5\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"C1EE83341AF874D700F9719DE9ABE108D5FE797FA21B399B63FDBBF2A07AD88D\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"1800180003.27114\"\n            }\n          },\n          \"PreviousTxnID\": \"500D9E9581E7011991194C044DD2675E5BB22F17F6394E6EF0087CC7F66FA567\",\n          \"PreviousTxnLgrSeq\": 68883687\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r3pDCAfw2nB715iBJVMix9M8adFpHyfGRN\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653060B0CECC35000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"5891C4E1FAADC0E2226F5F313E8DC2FDD425E555D04F80104C7ADD7CF23B8775\",\n            \"PreviousTxnLgrSeq\": 68912847,\n            \"Sequence\": 68179410,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"C20D0A7E2790F559ECA7A0EEACB781024C94B4247EE0AE1408D97F80BB18868E\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"10000000000\"\n            },\n            \"TakerPays\": \"170100000\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r3mZ69KGMSXXfdFe2xxeNvSkA98mQQ52aF\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365207069DE14715B8\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"c\",\n            \"PreviousTxnID\": \"E7EAD1870F80793443B24B458B003896E207AB7B24CDE9C2766373A7FE5864AF\",\n            \"PreviousTxnLgrSeq\": 69062949,\n            \"Sequence\": 67138991,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"C23A3275DFF048E68D6BB2B94010CCC5EF7122494F53D006361DE00534A7D657\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"1961082847651630e-4\"\n            },\n            \"TakerPays\": \"387823743\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rELkNgURGeR4vEFUEYHNATaS9pwPk4KFEm\",\n              \"value\": \"1000000000000000\"\n            },\n            \"HighNode\": \"1\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"2dd\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"C23E88425FD607DCF463E3E5DA0C225E04A74C48796160A21AB7759D684C152E\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-7785989866\"\n            }\n          },\n          \"PreviousTxnID\": \"302A0883B80D7C9D3B67BC434C35646F6E06FE253E28B97D551F979509BCBE20\",\n          \"PreviousTxnLgrSeq\": 67951491\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rGzfdR9pNTEgc3qiShH9q3zp7KpVXgVUq8\",\n            \"Balance\": \"1980613045\",\n            \"Flags\": 0,\n            \"OwnerCount\": 6,\n            \"Sequence\": 68014237\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"C2537D67ADCD065905018FCC548B49AAE292E5085400D2D2CDCB26162A0C88D5\",\n          \"PreviousFields\": {\n            \"Balance\": \"202007142\",\n            \"OwnerCount\": 7\n          },\n          \"PreviousTxnID\": \"01059C1530A7C7F4B64AF6D7181D19536572836F2305944DFB35752B198330A9\",\n          \"PreviousTxnLgrSeq\": 69046055\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rN8rfe7hU4CCkmEiDkj9fg8pgBp5fa8p2j\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36530E35FA931A0000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"8\",\n            \"PreviousTxnID\": \"796ED0EB080AAD1D815D3789258F402919B4E9EBA600AEA833E3B8FB9EE2361C\",\n            \"PreviousTxnLgrSeq\": 68857104,\n            \"Sequence\": 65991542,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"C26816E733D7E79139CE79D3A75F39466BC25A85F3C44E8B2C019961F43ADC26\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"20000000000\"\n            },\n            \"TakerPays\": \"800000000\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rpVr26FVpK1G1u8vyMwsKnpXn7iycrYise\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36522386F25C99A9B5\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"1\",\n            \"PreviousTxnID\": \"E1EFD9D5FB229150F9C61ED40008BB2054E31A64C01F73D7C946F662FF9C1649\",\n            \"PreviousTxnLgrSeq\": 68890128,\n            \"Sequence\": 68152825,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"C28D3B78AA605D8E78A0BFC2DD5836B9A95C7586DC928DDC5CCA9404DD46FC85\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"2239826471.975726\"\n            },\n            \"TakerPays\": \"22398264\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rMd7wG9Hzf5YXsqZ48kNRFLARM49oydLry\",\n            \"Balance\": \"80377788\",\n            \"Flags\": 0,\n            \"OwnerCount\": 31,\n            \"Sequence\": 67169264\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"C2A4D53791C95BEACD04B38C4785E4179C94F8FE1E3AA1CF4EF98332E813384A\",\n          \"PreviousFields\": {\n            \"OwnerCount\": 32\n          },\n          \"PreviousTxnID\": \"AEE9D9610EA1CB8DF6B5C73E2633598D84ADFA4272C3BE2B01BE32C77E730F61\",\n          \"PreviousTxnLgrSeq\": 69007137\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"6\",\n            \"Owner\": \"rMGXtc2jn88JResx6QRWgyxUvdrXRwmZ7J\",\n            \"RootIndex\": \"F2D8BD5D58352ADA453B124A947D1303E552DD845CA7BE553DA65150154E8432\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"C2BAE0DFE207AFE2CE4A3513E428E3B4C73D32F8A7DB110DC71504B3014D356D\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"3\",\n            \"IndexPrevious\": \"1\",\n            \"Owner\": \"rLN2tJYrH11YA3EqyNw6csgsBEnZ9TeaWF\",\n            \"RootIndex\": \"A8831B2F5F0F8E214DD933E68CA6542ED8B1ACBAA01DC6C6ECA39F58388B6570\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"C2BC9EAF46E573693270E01E1DD17A3F2E11091D5ADD709F008CDB3DB1D124D6\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rfTkTBbkD6NFaNLprSDfnC3CJEtNwgqYwy\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521BB60F02705778\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"06AAB8562369FFECF0D8A2459EB725B4CFC5C3D668876ED39B13FD74B3F3590B\",\n            \"PreviousTxnLgrSeq\": 68899748,\n            \"Sequence\": 68037543,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"C2CF9E2597B42AC228B4573850AD3E9FEF894BE818384B374E6949AD3B526FD7\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"20188409096.34552\"\n            },\n            \"TakerPays\": \"157469590\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-857969648\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rGMM3Ag2DiYP71uk8mWQi8fafCQczx8ouK\",\n              \"value\": \"1000000000000000\"\n            },\n            \"HighNode\": \"3\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"18\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"C309629BAF6FDAC2F6AB7C0B89F2A4FC081A76F0804C587194D18A556540D203\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-30857969648\"\n            }\n          },\n          \"PreviousTxnID\": \"42D5A63F4127A84160502CB5ABF21B099F1D0BB02E930D6FC7127766508C6F9B\",\n          \"PreviousTxnLgrSeq\": 68899471\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rwsVYq1xyweADXhtBLLfr2X9FL57DnGTk3\",\n            \"Balance\": \"173694266\",\n            \"EmailHash\": \"3AD80D314A1F13CFA8E0CEF721C57D78\",\n            \"Flags\": 0,\n            \"OwnerCount\": 9,\n            \"Sequence\": 67647723\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"C32906B773563756D7949631661492EF4ADBBBB67AC3BFB0711CE04BBCC6D592\",\n          \"PreviousFields\": {\n            \"Balance\": \"160476141\",\n            \"OwnerCount\": 10\n          },\n          \"PreviousTxnID\": \"6643B9686B5C8C23D5C40E067E8604B54580640C64D999A26026296C1C6E6441\",\n          \"PreviousTxnLgrSeq\": 69058218\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rB7bqYSsffBTNfLgyyyXyWL2e1bg2djJq2\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365218DE7680F3FE73\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"d\",\n            \"PreviousTxnID\": \"4A690EADEB4144AB458B2E6B748658BD31DA2B6BC2461F0FBF3E625FA9CF6497\",\n            \"PreviousTxnLgrSeq\": 68899306,\n            \"Sequence\": 67458424,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"C37E85C73FE9C316E2C2465DDE7C90586DA0C9D15DE70D1E3B50760CF562757B\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7785989866\"\n            },\n            \"TakerPays\": \"54501929\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"f\",\n            \"IndexPrevious\": \"d\",\n            \"Owner\": \"rsGTbAufvBkkN5xpaKZtEMCagAW5SkJEUL\",\n            \"RootIndex\": \"8912016F1A68D2FE13794AD46A10697AFEFF1DE7A3B2F73EE2D1CAFA00C65FA4\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"C39F11241A3D185E0BF72D9A5C48436F71BEEF1B146861B4C90F95861466BD12\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rG9EpCkxGBXowufUGyrVF8tT7ovkHBdMb4\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365211C37932085EC6\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"49249ED35A43FBBDE31A32B081BD57252EDE07DCDA95B60C6267C1E09C6FE803\",\n            \"PreviousTxnLgrSeq\": 69022245,\n            \"Sequence\": 68040415,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"C3A85DEBA21DB513530A592999BDF11FA79461EE27ACFCD2D615255BDB06958A\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"5000484098.059855\"\n            },\n            \"TakerPays\": \"25002420\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rGCr7TstZbRvToumrTKaUcTX9JGKVLsCVB\",\n            \"Balance\": \"129743393\",\n            \"Flags\": 0,\n            \"OwnerCount\": 50,\n            \"Sequence\": 67407795\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"C3A88C9A2C5366B1DABFAC62B1F4902B3F2E809B1329F5B4B8EC53F3C5405AD6\",\n          \"PreviousFields\": {\n            \"Balance\": \"122187119\",\n            \"OwnerCount\": 51\n          },\n          \"PreviousTxnID\": \"1E2517751069B71C09FB4F6544937888AB43F1C494EEE06DC4EAE146E9C933D0\",\n          \"PreviousTxnLgrSeq\": 69063931\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-6285989866\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rNVK54FFqQPyc5jFNayw1WrW2m54SRAMWv\",\n              \"value\": \"9999999999999999e-1\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"807\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"C3B88BC9928F0034F168D1A4B274AF1395295B614FCFAB226CF256B1E4428C85\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-7785989866\"\n            }\n          },\n          \"PreviousTxnID\": \"E677D013B2E51A310A1EEA054C2A1C3FF519948943A2C8062D619223E1B333B6\",\n          \"PreviousTxnLgrSeq\": 67993354\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rHvia9Ti9HmM9QGixKxxKf9kYS9LUxTrjq\",\n              \"value\": \"9999610698104581e-1\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"efb\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"C3F273D53C140A0E79C585D53FAFB9CE4B37220539B934AEEE9719F60398571A\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-2446244798712641e-4\"\n            }\n          },\n          \"PreviousTxnID\": \"616DF96DE8C38210397A28F96A0545A5E70BA7B28FF08575757D925936DB97F6\",\n          \"PreviousTxnLgrSeq\": 69005405\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"1883385918.700632\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"eda\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rNh79kZDsubi13bjTw64kBsKVWepnDT2J7\",\n              \"value\": \"1000000000000000e-1\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"C41A498EE46D1C9C3972111916FD9C3F4961884B6AA85A5D453EEE4BABED81A9\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"3424338034.00115\"\n            }\n          },\n          \"PreviousTxnID\": \"CFC95D9C93F4541AA703BCE9A6C735C7CFA64E3B8276A2D37CAA3780386047A3\",\n          \"PreviousTxnLgrSeq\": 68898713\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rKso7KmktCCYBfe79sNAFnfKffvansBBRz\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"HighNode\": \"2\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"427\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"C4219E01A98702DFB84F6B761F8370C2DDFAAE36290B2BCFA7C1FAF6B60ACA5D\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-40000000000\"\n            }\n          },\n          \"PreviousTxnID\": \"34EEC2B5C7963F9EFA5DBA466DF7CF40A6F9C8601DCD9673ADBE2E91B30AD40D\",\n          \"PreviousTxnLgrSeq\": 69034828\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"983\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rhJfzjX6NrYjiR8yGumtJSHuuLxn2JbgvT\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"C42B6682D93A743C2B61B08B6D37940E4FCCA26474A1A595FDEB399FC17752D3\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"7785989866\"\n            }\n          },\n          \"PreviousTxnID\": \"ACCB634527D0ABA2ADA92E06DE7EBEA0107AE2A2D08C7CABD11142BF8C237256\",\n          \"PreviousTxnLgrSeq\": 67991917\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r4F6d9gkY5JPEkDEmUwcLgGX2NSV6o7DyR\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521FF973CAFA8000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"f\",\n            \"PreviousTxnID\": \"01024000CF81DE6A574EAA68EF0E631DD618579C41768D7CCC426BF41B844D03\",\n            \"PreviousTxnLgrSeq\": 68963654,\n            \"Sequence\": 67033158,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"C44EF3BD84E920871E8C41B9E9342288DA34ED8322C76E6C666E98626A51F6D7\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"10000000000\"\n            },\n            \"TakerPays\": \"90000000\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rDDmwBnxoXcq7PLUXTvsfVHhEqGpNCS138\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521FF973CAFA8000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"4\",\n            \"PreviousTxnID\": \"D6037A5196F01466A19835034B8B6CF1034FB740A16B88644D4F2FF4277AAD9C\",\n            \"PreviousTxnLgrSeq\": 68897982,\n            \"Sequence\": 67491437,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"C4647D367E9CE7223EDA3C782D8699D49F32085BCE1CD599E5F45620071F7CB5\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"1000000000\"\n            },\n            \"TakerPays\": \"9000000\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rUMbRuiufkSUvwXG6HBXYHTW9TpioNBKjo\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365319396991888143\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"3\",\n            \"PreviousTxnID\": \"2DF142737ACD2D06264BDA4AD9CF5E081AA8BE8B1CF79BD55ECD3F45AC50DE5D\",\n            \"PreviousTxnLgrSeq\": 68268414,\n            \"Sequence\": 67542739,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"C480AC3D7E72FF9C1FFB92D8F61C393F622E6EFB7064A305F4D1CB5DF724EA2A\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7785989866\"\n            },\n            \"TakerPays\": \"552805280\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"50000000000.0001\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"2be\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"raf2m8Ki2PVqjTU3YsKK5R62dAhiYXepcz\",\n              \"value\": \"9999999999999990e-1\"\n            },\n            \"LowNode\": \"1\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"C4AFDA1B91ADF5B13B0F66CDFDC9409262C079EFBDD8081144300C3ACA6DF1C4\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"1000000000000001e-4\"\n            }\n          },\n          \"PreviousTxnID\": \"801BB1939B0F6893E18FF4B4530A77AC2D89E4AB2EB435C89858E19029551818\",\n          \"PreviousTxnLgrSeq\": 68934810\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"3\",\n            \"IndexPrevious\": \"1\",\n            \"Owner\": \"r3LLQmhVJiQ3r5e3QCo15yaDumDNp7Gn1r\",\n            \"RootIndex\": \"F11A48781EDE5617A25255BB7D135268E996D1AB5C6E6237E74499CD81EC6BAE\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"C4BDFE12E470AC2586C8B4BE90A4282C080AC0558F35523D4322B6922328C6F6\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rKU9ca11NtN2HFEaNj3WhV7dS13vpDeS46\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"HighNode\": \"1\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"df1\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"C4C54C55F63A47EE4DCE10C4C6B069759DD28D80694CE84B86932BCDDCE7C0ED\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-30000000000.00007\"\n            }\n          },\n          \"PreviousTxnID\": \"7DADA3F95041FBF018C504F2139E89455DC1595BC79768B4A3DAC251E04D5241\",\n          \"PreviousTxnLgrSeq\": 68909412\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"5000000000\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"980\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rUEnyBAH4xxjS4ZkMrki8GnNvsvysjSuZy\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"LowNode\": \"6\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"C4C8AAF8CA6612768A630A7BB2060F093C23CC916C694DACA9BE8AA24160EB25\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"8157063667.673492\"\n            }\n          },\n          \"PreviousTxnID\": \"8D7D3088CC140D858BD7076B52D6D2EF309B89C4FC0642B17D7E603C4B3F0ABE\",\n          \"PreviousTxnLgrSeq\": 68991214\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"raANwNJ9aqncwhGT1Eh9mksqTvAMm3WZG3\",\n            \"RootIndex\": \"F073B3C09A2EFBE4B7E3EFEB745817D40C89B4A4F26611936E4F9E94700EFEC3\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"C527BD0C9C86838604AC24CF026DA3988A2B6A4633422A5E5B483C34BAED8E23\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rDqBWAYNudfa8rBsr7YDsdDxeAoNRsxfPV\",\n            \"Balance\": \"3020405329\",\n            \"Flags\": 0,\n            \"OwnerCount\": 74,\n            \"Sequence\": 67406215\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"C5306E59A8AFC72DB64A87CFB99E478FD5DE1B40B00668D64CE01B9CAF20AF50\",\n          \"PreviousFields\": {\n            \"Balance\": \"178519028\",\n            \"OwnerCount\": 75\n          },\n          \"PreviousTxnID\": \"4B32F3365615386ECB469FA9F5E9457197F0519C3DFBAA261AC6833FFF66BF5E\",\n          \"PreviousTxnLgrSeq\": 68827080\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rpf1wWbuPjafvAgD4f9vtX88Ut9qurPRHS\",\n            \"Balance\": \"2983506409\",\n            \"Flags\": 0,\n            \"OwnerCount\": 152,\n            \"Sequence\": 66662475\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"C556EECE1F7073BCE8B2799D386575A98832431F598BA1CD8E31909F8D83B553\",\n          \"PreviousFields\": {\n            \"Balance\": \"2385506409\",\n            \"OwnerCount\": 153\n          },\n          \"PreviousTxnID\": \"7261EDE1DDD00CE11ACBC0736AEFECDCB8354790733FDACBDF78B75D907C0A89\",\n          \"PreviousTxnLgrSeq\": 69064169\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rPDEk87BWPzJVDg22rmwGBu7gxKdkQrJEc\",\n            \"RootIndex\": \"C56A2D860119AC4FA1171C968429F2611E1A315D7ADF1DA52C226BA195092B6A\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"C56A2D860119AC4FA1171C968429F2611E1A315D7ADF1DA52C226BA195092B6A\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"3\",\n            \"Owner\": \"raHjNXUyRvwxN5Vr5NtQ5pbFVgbM7kqLrP\",\n            \"RootIndex\": \"96965012ABDE7042FEA777766C925CC26D22AD3B79FB94F61B59945DF1415B8D\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"C5723212472883DC17E189D01E1F58C3A493F7E3C466657579154B87988F3792\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"2a3\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rDYvWkTQaaoWiWYo2r5fKuqEoop8WK9crS\",\n              \"value\": \"1000000000000000\"\n            },\n            \"LowNode\": \"6\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"C5966601A4949FA24F29642619960B356616419EF08CC799AD18B1D97BB9A58B\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"96000000000\"\n            }\n          },\n          \"PreviousTxnID\": \"D0B8A8A92C2BB260410FC71278BEEB806FFC524AD157D37E64903522C5B9B93B\",\n          \"PreviousTxnLgrSeq\": 68990978\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"r4AXMmLxiAtMf5yvyqqCZeHVhswjdmNgBx\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"HighNode\": \"8\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"e51\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"C5A272099C7916B2F6EB1C8E87B2B37F9CE8634D88984E9B9A7ADFB5E40F5453\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-1203912777297306e-4\"\n            }\n          },\n          \"PreviousTxnID\": \"CA3B5C153AE6690AB1F5AF8D33D74DE06EA3EDFE28C2E73788416C43B76AB5B9\",\n          \"PreviousTxnLgrSeq\": 68983402\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rKnBQjFdG2pPCrKiUmeZZZ6YjmuCyWVta\",\n            \"Balance\": \"1423556490\",\n            \"Flags\": 0,\n            \"OwnerCount\": 75,\n            \"Sequence\": 67618672\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"C5A81F0A93BDAB00A0D25F7B63765EE8DA907A61D570CCFA4C8C688F08F0282E\",\n          \"PreviousFields\": {\n            \"Balance\": \"1319410652\",\n            \"OwnerCount\": 76\n          },\n          \"PreviousTxnID\": \"545F159B1C0FEAA18D6E07E30588B343393383E4F786FD5DE8F1580930E7D407\",\n          \"PreviousTxnLgrSeq\": 69062221\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rwNMX6iAFTsFK2PG8PCNG4AJ5b8UyrSx8p\",\n            \"Balance\": \"584016482\",\n            \"Flags\": 0,\n            \"OwnerCount\": 48,\n            \"Sequence\": 67440231\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"C61906968518B943B59479AD72782C776A66E5925ADCA9B28B2F529F0C04DCA3\",\n          \"PreviousFields\": {\n            \"Balance\": \"509016482\",\n            \"OwnerCount\": 49\n          },\n          \"PreviousTxnID\": \"37FF7DD928FBDBAA8796C5316C8EA0398CA173100F1A98EAA17093A2D1A95202\",\n          \"PreviousTxnLgrSeq\": 69058151\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"7\",\n            \"Owner\": \"rJRfgew5k5b2Qgj5r9gn2L6w66hE5vwYnH\",\n            \"RootIndex\": \"FB2C3B7E31FCCFA114D49C5C8ED61A74681ED0D6B8C99A9B5CA8DA3CD9F96750\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"C6472B1C063088EA3CC8CFB7ECE59DF2955DF10F476F698C61F08ABA88944EB1\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r93dgTvDnFJsP2YGRiJvd89D1xLTmgR4fp\",\n            \"Balance\": \"697823181\",\n            \"Flags\": 0,\n            \"OwnerCount\": 8,\n            \"Sequence\": 68599303\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"C6AB77FCFD2E35221D096651ED4D124B8BC9AD9C7C84BCC46BA401AEF25D138E\",\n          \"PreviousFields\": {\n            \"Balance\": \"475023181\",\n            \"OwnerCount\": 9\n          },\n          \"PreviousTxnID\": \"D0748D93255C0E9E3CC4ED0CCA26930DC2E75F6604DFBE63B3E1378FC623105B\",\n          \"PreviousTxnLgrSeq\": 69054012\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"8\",\n            \"Owner\": \"rKTKekwyDDoxNtZZTwXL9ebqeVYRp47BVq\",\n            \"RootIndex\": \"DCCA60E3E1964A54B3182684812441B5D49D258AFEA56F5FF52660497E96F4DA\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"C6D29CF176CD593ADCF2D4F13BB63C802EA0C223FF3AEA2AEDFAD37C273EB4CC\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rnYFf4DWQj3Eip1R5mVvocQxtcBcvTvRo7\",\n            \"Balance\": \"1227634848\",\n            \"Flags\": 0,\n            \"OwnerCount\": 174,\n            \"Sequence\": 66696550\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"C70A32F04E4FD9C4470693E1D7F97D30575A8F17FE6F04DCDD30DBE10B8FA540\",\n          \"PreviousFields\": {\n            \"Balance\": \"683634848\",\n            \"OwnerCount\": 175\n          },\n          \"PreviousTxnID\": \"20448399746789B24952425A467618096281748C439D4F787B576BA549721655\",\n          \"PreviousTxnLgrSeq\": 69059337\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"b\",\n            \"IndexPrevious\": \"9\",\n            \"Owner\": \"rHa9ikQjRRPKoFgcqN3dwTb27vvL1Ezo6D\",\n            \"RootIndex\": \"8F56785A06DB367335F88FF617BA5F08B87056EA85A600BBDD30350BCA3A390E\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"C73EA4C88A7CD42E3A313D83A2BAC67F6FD39AB7C67C8C8FE2CC0A6C91B5898E\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"5\",\n            \"Owner\": \"rpJZ3qkUBb3m68p3YrzJE7onMcswN4XDY8\",\n            \"RootIndex\": \"6FA9D99EC09B4FD3F0F04A429B48B3EAF214D34ED59D5912C7EC9FB1E2F4760F\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"C7472F10060C84DC91A23D3076B066E1BC97AB1F35402DBFEF7C162717BE58C5\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rDwdy5963o51eDFKzgJ23VJUy44AX3QrS6\",\n            \"Balance\": \"319163345\",\n            \"Flags\": 0,\n            \"OwnerCount\": 75,\n            \"Sequence\": 66614450\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"C76BEA6F89B341BD4D7DAF574589AEF808C1BC13A245C5054BF05E1E27884ECD\",\n          \"PreviousFields\": {\n            \"Balance\": \"266997213\",\n            \"OwnerCount\": 76\n          },\n          \"PreviousTxnID\": \"E3493A8897EB95F7F501B52C8354D342D2DBCAC908AF36EDBB98A3CFF7B93132\",\n          \"PreviousTxnLgrSeq\": 69042648\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"a\",\n            \"Owner\": \"rfJmPRPCTwt45woergVCBhkHWjxVBevfan\",\n            \"RootIndex\": \"2F4DBC6422F0834B916C245AD82063F5074636B254CA1E00EEAFD1EEC76FB5FD\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"C76CE4C80687FF800AF143CA8B1B688C58EE88F08238A6657D048E19D6203F41\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"2\",\n            \"Owner\": \"rw4jQ2pSNGhFQDoQyNpP6FJ1nArCWCZjKM\",\n            \"RootIndex\": \"355D67B27A28FBB67B6FEA3014C59A84FAB917D19F6EDDEBA1476AE6E8BB871D\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"C79515013E225B904F485178F21F25008CA21FBCDE44B725F754D8C960EEDC7F\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rDzBkddc4AVrm4RWuXJRhH1rrkDpKNFwTg\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653071AFD498D0000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"6A73722C05DB65E94BC278CF674ECC96F084A563189F73DD7D365FB6C0D49A01\",\n            \"PreviousTxnLgrSeq\": 69042096,\n            \"Sequence\": 67765527,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"C7BADA5915D2B77ED3A47F376C6EAFB33416CE7E86474006583B955874185BF8\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"1500000000000000e-4\"\n            },\n            \"TakerPays\": \"3000000000\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rGBMsWXEYwQCyqK6QsrivTQsACXbfL1735\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653038D7EA4C68000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"5\",\n            \"PreviousTxnID\": \"B0AED90B0582F9831ABA7079B1087946EB0A728398CA064ECB77B0332CD7DCDB\",\n            \"PreviousTxnLgrSeq\": 69055562,\n            \"Sequence\": 67792810,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"C7F205156FDEE9F0F977BEAA23A0A0E3FB30C403C30E813E43F211AD0B876D27\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"8000000000\"\n            },\n            \"TakerPays\": \"80000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"9\",\n            \"IndexPrevious\": \"7\",\n            \"Owner\": \"rN8rfe7hU4CCkmEiDkj9fg8pgBp5fa8p2j\",\n            \"RootIndex\": \"29319BA089997650595D4CC417AA8C13A285061CF448C6EAC54550D3B3AF010B\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"C808929C73397F9A92EDFE37F83198FC591D06FD1121BEAE53EA70B00458B325\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rDAsQhHKNqg4ueKpzLPYbR7bzmjDve6dVF\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521BB60F00A3F64B\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"43EF834490199BCBA467CE0DD8AA0FD560BF69926A4C6B678AAE237C8DB079A0\",\n            \"PreviousTxnLgrSeq\": 68898350,\n            \"Sequence\": 67963994,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"C82F27EFF0C24B0EB6F9B6FF159B7BCF5B73BE6D03D5FDB896D636E72212922C\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"6209396600\"\n            },\n            \"TakerPays\": \"48433293\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"ra5BMHvXy7Y97xhxSLKZWCDPpbqc9fvWdq\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36531722CFB7AA4C44\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"13\",\n            \"PreviousTxnID\": \"A152DE7CF1C8DB136A1FE16CCFAAC5E5D234BFCBFDA0B73FF116D1E3E652C19B\",\n            \"PreviousTxnLgrSeq\": 68899009,\n            \"Sequence\": 66693300,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"C83AF0E0B3D9CB6776052ED072E153FC62DC73D5744B26BBA2941B463858508C\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7785989866\"\n            },\n            \"TakerPays\": \"507039232\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rDfGPHrMgjFmWvA3TRkx5rcD85Y9sNizB2\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36522386F26D99583B\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"1\",\n            \"PreviousTxnID\": \"C2F0C0BA591C6B620DCE1E703C640AFD2246C1C1697561EB778E3713D0888F60\",\n            \"PreviousTxnLgrSeq\": 68913274,\n            \"Sequence\": 67704667,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"C8555F94BE1E04A437ED6FD37552575532BE962D8F125E396AB60CF6F326D778\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"9404401334\"\n            },\n            \"TakerPays\": \"94044013\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"1\",\n            \"IndexPrevious\": \"1\",\n            \"Owner\": \"r36sopaDwMDWZS4XNkCM27TNVkdywisWY4\",\n            \"RootIndex\": \"C87DC2EF0221FE52370B0097A66AA258805E2CB1F64250BF4B66E722AC9B3656\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"C87DC2EF0221FE52370B0097A66AA258805E2CB1F64250BF4B66E722AC9B3656\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"1ed\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rhw4L75RKqQwheqkwPMM7sQYti6hmLWUni\",\n              \"value\": \"1000000000000000\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"C88D437CA163B8375D0B3945DF36EA6CFB33E287E1C75F4847A5C4C63EEFFBAC\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"7785989866\"\n            }\n          },\n          \"PreviousTxnID\": \"AAF67E3035224E5D0F1DC745CA4E0974C99CDB8B78D33336BF674F6282DD20ED\",\n          \"PreviousTxnLgrSeq\": 67950183\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"48726337904.94435\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"e0d\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rno35bcvBqLMETwksdhSiUuDQquXyoBtem\",\n              \"value\": \"9999999999999990e-1\"\n            },\n            \"LowNode\": \"5\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"C8938DA1A85F655BDC44CDB906A6670893B3FAF76B3ED9B2998A1AAAF0431C56\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"95726337904.94435\"\n            }\n          },\n          \"PreviousTxnID\": \"CAADBA21BD9F870233B289C581BE7474219F3813C87FEA14D2E3AB274CA7221E\",\n          \"PreviousTxnLgrSeq\": 69049149\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r98DGNQEGR9x2bhRVBbuiHAqxq2aDD6pKa\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520E7C76F9083900\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"8\",\n            \"PreviousTxnID\": \"9E5CC2D92E998CC4CA2A9D0AA4D4936A63B1F54A4C401B46823248E7E542B2C3\",\n            \"PreviousTxnLgrSeq\": 68997636,\n            \"Sequence\": 67202778,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"C8C0B061C0C7E888174DE45DC3F17E2485994FC9F180D4069CDBF0D463F126C7\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"2100000000000000e-4\"\n            },\n            \"TakerPays\": \"856275021\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"c0f\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rnZj4CQouegP4s5Hu2LxBbjCfGSWQuzRAp\",\n              \"value\": \"9999999997999990e-1\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"C91E7DC14EAE48B9D300761E64D863BF8757F4B60319411E9A20676D33AD29E2\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"1290000000000000e-4\"\n            }\n          },\n          \"PreviousTxnID\": \"A456A697F7C160189DE6EE7A02669EF2ED2E30E2448D608FC1D066BFB005DC9B\",\n          \"PreviousTxnLgrSeq\": 68944682\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"4\",\n            \"Owner\": \"rLCKThc3nyrBN63QzPHKoHHPA2iN8RH9gp\",\n            \"RootIndex\": \"8AA09E294E4F2F8DE804A857AC98496D6CBD57C43D479840C056D5DC3BE5DDCD\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"C953E01CAE8191EDEB9EE29C6DD5A89430FF5107EFD7D79ECB8E4CCBC093C7E7\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r3PYAn9d1DTFzJ9kuvFnhudgwsVZ6pm5hT\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520C6697980B4C60\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"6\",\n            \"PreviousTxnID\": \"7F98E16EAD79E0FDEAAFC6C36BC73108E23AB0B986B4C042565AFDC8E62AF5EE\",\n            \"PreviousTxnLgrSeq\": 69014371,\n            \"Sequence\": 67442335,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"C96272E75E25A61C1F37B1D1D37B3247CEB0FF4AD61CF2D6B49F6AE9ACF5EBD8\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"4000000000000000e-4\"\n            },\n            \"TakerPays\": \"1396200399\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rHv2LE2MKKrQ83NMbQ2vv1DUDjByosxthL\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520F42479CCF8C22\",\n            \"BookNode\": \"0\",\n            \"Flags\": 0,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"7C64AAA010E1CBB24C477465D1E18D7083897440E351123CBCAEF5DED32745B6\",\n            \"PreviousTxnLgrSeq\": 68985152,\n            \"Sequence\": 68499493,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"52894159590.99591\"\n            },\n            \"TakerPays\": \"227180415\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"C9830F4BD364954DF67671E75EC5AFC33EE59E8A230C3E74644A5093133E2109\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rPG9SrHPEhwbExniY48qKCqDqjGKyVn38w\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652132F4579C98000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"d\",\n            \"PreviousTxnID\": \"868DEF74EEE34B36BD8B99F316F804967E83EDC7718050A88E56822F8475FEA1\",\n            \"PreviousTxnLgrSeq\": 68927491,\n            \"Sequence\": 67109490,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"C98CBE28BD0284A3D29D9E268DE346D8A401BF911AE8793026AD46E1D390F566\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"10000000000\"\n            },\n            \"TakerPays\": \"54000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rHkAKrt7sjtM7vfLuUmVeJ98jp42mstkTU\",\n            \"Balance\": \"111259980\",\n            \"Flags\": 0,\n            \"OwnerCount\": 19,\n            \"Sequence\": 67553404\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"C993A23E31E8EC1A217B4E8411539277762AEC976F2808D06DBD75781B368B92\",\n          \"PreviousFields\": {\n            \"Balance\": \"56758051\",\n            \"OwnerCount\": 20\n          },\n          \"PreviousTxnID\": \"08D0FB5144D2BEF2CDE6F1E74763B861DA17CF3C99C8C55DBB07AF581066CB7F\",\n          \"PreviousTxnLgrSeq\": 69056885\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rfJmPRPCTwt45woergVCBhkHWjxVBevfan\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521C3E7B9A8661B9\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"b\",\n            \"PreviousTxnID\": \"F4DC491902EED8C076F1FBED9689ED73C89E06DFB2C9C241EC10CA72AD5F63C4\",\n            \"PreviousTxnLgrSeq\": 69023921,\n            \"Sequence\": 66581210,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"3057270714.014688\"\n            },\n            \"TakerPays\": \"24305302\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"C99F6DAC532825B9A962BFC06856743A3CC3799988E0023FEC3C024A6B1274F9\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rEcDGbmwatAptdvR3tfMRJqfm6taVzHAYP\",\n            \"RootIndex\": \"C9B4DFFBEF2E2E6CA3D5A382E6C5EEBC9D530B18A077D6574557FF5C26AAC073\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"C9B4DFFBEF2E2E6CA3D5A382E6C5EEBC9D530B18A077D6574557FF5C26AAC073\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rPKNCAkooJFM3LJ17zG3wJyxrjnNuHkkYh\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"40a\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"C9B83D5F71E017252D2CA52330D6E2EFDBDEC7917DB3CCFCB89763D4946B1B30\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-10785989866\"\n            }\n          },\n          \"PreviousTxnID\": \"BD96B7E9E56E7977862A72F035D087DD3ED252FB88CEBD9C95B888D4684938D4\",\n          \"PreviousTxnLgrSeq\": 68016259\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rUXKKLv8kzkXLnNpe2aGq2PyRKuotFQEPi\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521717B72F0A4000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"15\",\n            \"PreviousTxnID\": \"4DC69C80F6E76153F73E6FE6E25C688DFB822EACAF4C319B7C35BA3788AAA270\",\n            \"PreviousTxnLgrSeq\": 68899479,\n            \"Sequence\": 67508115,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"C9B89BFEF67B69BAED93738F159DED9133B86DB192BBEE5F62D7F54FB2B1DA24\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"10000000000\"\n            },\n            \"TakerPays\": \"65000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"1\",\n            \"Owner\": \"rqben5VgPyij1hAY4bi4yPyp3vf6GgY3z\",\n            \"RootIndex\": \"3D984CFC6F978C84DEB973573CFCB5C7D5779BCD4BF65FD287E9E20D65DD50D0\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"C9D16BCCCF84F74C0BACF8016F51796A48CC51948749684FA4EFFE0AE2A3C0F8\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rGzfdR9pNTEgc3qiShH9q3zp7KpVXgVUq8\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520A4D88DDD6BA09\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"97FE6E520473447D0DABD446F445E5214896753CDB3CD1F20856556862E64395\",\n            \"PreviousTxnLgrSeq\": 69014749,\n            \"Sequence\": 68014233,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"C9D86EDE3575864F4BBE23DEB20F6A579EF3EAA55B34F62149E706EA9198A701\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"6133123803798006e-4\"\n            },\n            \"TakerPays\": \"1778605903\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rpUjTJzaJN22XoKjav3YSk3GH9t3GZqK8N\",\n            \"Balance\": \"110033128\",\n            \"Flags\": 0,\n            \"OwnerCount\": 9,\n            \"Sequence\": 67522652\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"C9DF7041A41F438E7EE97AFAE4D962411A6E615597F1FD8154C346724005E8DE\",\n          \"PreviousFields\": {\n            \"Balance\": \"32173229\",\n            \"OwnerCount\": 10\n          },\n          \"PreviousTxnID\": \"3DB970221F69568C00C0D1D43D715542BF2C0A412F0BD8D04C8DD1106259D423\",\n          \"PreviousTxnLgrSeq\": 69002860\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r4F6d9gkY5JPEkDEmUwcLgGX2NSV6o7DyR\",\n            \"Balance\": \"746236413\",\n            \"Flags\": 0,\n            \"OwnerCount\": 205,\n            \"Sequence\": 67033242\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"CA55F655BEC8F29A747A4E88BF6DF2C0DFF2AA714FF3AF853324DA7CBD118C76\",\n          \"PreviousFields\": {\n            \"Balance\": \"567912931\",\n            \"OwnerCount\": 207\n          },\n          \"PreviousTxnID\": \"51CBBA2C4153202DBA3C7E88AD28BAD50C6AD68E332CD9683661E98AF695B7F5\",\n          \"PreviousTxnLgrSeq\": 69064157\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"6003542045095089e-4\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"555\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rUdhzvzWjHpSjP6CGksiit3bdgGLV5DXZv\",\n              \"value\": \"9000000000000000e-1\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"CAB1F1967D65E6842D130B313E2427EBFD85F4342AE33F859D40A90B6634A98D\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"6453542045095089e-4\"\n            }\n          },\n          \"PreviousTxnID\": \"26BBE139F9AECE7C6D97238FBC1AA9B38709302475276CD1A150B41FE985713F\",\n          \"PreviousTxnLgrSeq\": 68882778\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"r4YqG4eX9uskEYbdZVejyRmkBgM9pSo8q5\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"HighNode\": \"6\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"620\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"CAC079F53D0540262DED7FFA18868FE28B4A3303D3DD5D0939585C6193F5F9B2\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-1150000000000000e-4\"\n            }\n          },\n          \"PreviousTxnID\": \"D3CC007FE0851B1A403A994DE1EC50DFC8CA29A7BCDD3C8BA9BFF006D7220547\",\n          \"PreviousTxnLgrSeq\": 68967614\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"e\",\n            \"IndexPrevious\": \"c\",\n            \"Owner\": \"rB7bqYSsffBTNfLgyyyXyWL2e1bg2djJq2\",\n            \"RootIndex\": \"94950F18E099DC547192CAE58BA974E504D0FE8ADAB4B1365736D317E4A67C1A\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"CAD0C76876CA5C7978AAFC0D6464E96978D0CD679C9F38ADA5D17631336CF33C\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-86.71358\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rJjrokNPSa5xiAbh8N8cqmhVc4ma95FBpt\",\n              \"value\": \"9999610698104580e-1\"\n            },\n            \"HighNode\": \"1\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"efd\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"CAE788DC1DEBD6AC7A3A4A01E9C33254151F72E19977E4A0BA084B7489C5A6FF\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-12037057886.71358\"\n            }\n          },\n          \"PreviousTxnID\": \"04D53FC7571AB9B44C770FEC37900FA8371E580757B76C1469BD6E4D9A7E1271\",\n          \"PreviousTxnLgrSeq\": 68954165\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"1\",\n            \"Owner\": \"rwNMX6iAFTsFK2PG8PCNG4AJ5b8UyrSx8p\",\n            \"RootIndex\": \"9D109A2F971E2300104AB0976A60A0D1CF4BC4175C647FA9050197B1DCB569C4\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"CB006B747B0BB7D0CB707F1FB7FDEF5050D2C1274CE3C3F56C8B3A250E0F4FB0\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rNaQPWNXMaNzEWKoidMaJqNskRUFKbKWM2\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36532386F26F37ABC0\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"3\",\n            \"PreviousTxnID\": \"47BE8F1DDDF9FE1C2B365306DD3B4881DC4A6B3FE06C8EB57E3B17BBF0416F5A\",\n            \"PreviousTxnLgrSeq\": 68785849,\n            \"Sequence\": 67342450,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"CB2D2BDB12F5D947111D0E69D9BBBFBB50FE63C77830681BA17F033EEFA65625\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"1111111111\"\n            },\n            \"TakerPays\": \"111111111\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rE9hwGp3avccRZY3PerkKL1cJ25z9X22QZ\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36522386F26D0E8E1A\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"3\",\n            \"PreviousTxnID\": \"6759046F33C2283E762F428DB509860A4B75796C1E40A8E6526932F979828E08\",\n            \"PreviousTxnLgrSeq\": 68906700,\n            \"Sequence\": 67489273,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"CB360E20A4A30A5259B69D19CD7F3220532F0381A1C68E97FA057066FFB8FDB6\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7071979732\"\n            },\n            \"TakerPays\": \"70719797\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rQJFPnXAsdHvbAL8JeEYNu5FQDW4mHL5MK\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36531A95BE1F80789C\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"6942187070915CA2528309656D60D1D31284B4B9CB3C00B27B7030BAE68B7683\",\n            \"PreviousTxnLgrSeq\": 68139641,\n            \"Sequence\": 68012561,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"CB37471A8829D425CEA59F0E764C247D2CA72C497AE69E426436BC9BC5B4DB5E\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"8976620852354655e-4\"\n            },\n            \"TakerPays\": \"67171992791\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rnSxpc5YM8agfwsEHN3F3EKN9WQ8yyTcAf\",\n            \"Balance\": \"1556488159\",\n            \"Flags\": 0,\n            \"OwnerCount\": 21,\n            \"Sequence\": 67372683\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"CB6E45708264F17197A621EF14472659B7D46FC296141A861096CA150C87405C\",\n          \"PreviousFields\": {\n            \"Balance\": \"56488156\",\n            \"OwnerCount\": 22\n          },\n          \"PreviousTxnID\": \"44D301AF05A3646A52D76A37C73BF6BDABB0F56F247AF4AF59EF956D21BB844B\",\n          \"PreviousTxnLgrSeq\": 69010534\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rHWCQnGF4sc9MqnA8GpZC9L8SZmzv5zkMp\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"HighNode\": \"1\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"397\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"CB7341F2C0E1E31482A43C5288757CA21F794E45775190B216ED2510135D6C97\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-7785989866\"\n            }\n          },\n          \"PreviousTxnID\": \"F567A6AB46DA99B1DEA1B144F15866D92E2C3E260C2CEC5FF03C46041FE67D84\",\n          \"PreviousTxnLgrSeq\": 67952818\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rK3ctAQ3dxZmdQZ7JJt2PZBU7GZPwAkK1P\",\n            \"Balance\": \"466153793\",\n            \"Flags\": 0,\n            \"OwnerCount\": 125,\n            \"Sequence\": 67101579\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"CBE651E15673C3714EB3ADE5BB7C4E2171D2E42423EED574158592F8523F9C63\",\n          \"PreviousFields\": {\n            \"Balance\": \"361821529\",\n            \"OwnerCount\": 126\n          },\n          \"PreviousTxnID\": \"E994798488A9094802332384AF8C8D2CCD5DD82AF7EB62DB2B7391E2FB8486B7\",\n          \"PreviousTxnLgrSeq\": 69062175\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"b9b\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rpUjTJzaJN22XoKjav3YSk3GH9t3GZqK8N\",\n              \"value\": \"9999999997999990e-1\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"CC6739A573CE9BA0FAE0896B5647F076A5C3359B3494232E72F00B25FADA0558\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"7785989866\"\n            }\n          },\n          \"PreviousTxnID\": \"8CAE0F664C0A9E3BCD2B22A86CDC88D6CCEF68F4B0C239E78A679F31B07EF5EA\",\n          \"PreviousTxnLgrSeq\": 67989835\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rGR9AifcxWmhBqTR2JWAPooQsR9kW5yzj6\",\n            \"Balance\": \"119128288\",\n            \"Flags\": 0,\n            \"OwnerCount\": 17,\n            \"Sequence\": 67761127\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"CC9C30F0FE68F3D7492FC40065E7D277EFFA489FE314D75451459DE2B91F8254\",\n          \"PreviousFields\": {\n            \"Balance\": \"62290562\",\n            \"OwnerCount\": 18\n          },\n          \"PreviousTxnID\": \"6107FABD5B10791089166742C40654CF4C0148676665A2EDC637F52EDA1DE88A\",\n          \"PreviousTxnLgrSeq\": 69044032\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rsqgHRLHgg1vHi8iA1w1J9amuuUAjwEzwa\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365211F0F2BF24816A\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"501DD5A8B8DA7752D6B3F99DFA040C2AECAA6DCF72F90DDE36B24728C659B1B6\",\n            \"PreviousTxnLgrSeq\": 68997685,\n            \"Sequence\": 67757361,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"CCA52DB79109BE9E20A3AEEF1D8B244B5F07F914B63A243C3B78494E031EBB3E\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"47796284510.95766\"\n            },\n            \"TakerPays\": \"241371236\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rUV7WQGpjkPJNuAuggRRFLYVoaegHzuxoy\",\n            \"Balance\": \"251597228\",\n            \"Flags\": 0,\n            \"OwnerCount\": 74,\n            \"Sequence\": 66502085\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"CCB1ACCBF2B1F4139081999FF7E8F5A38E954A3F10F28F74F4C04398B8F2FF26\",\n          \"PreviousFields\": {\n            \"OwnerCount\": 75\n          },\n          \"PreviousTxnID\": \"9429FBC054F517951CA9ACC6E848B3D96694A55E04C43FB30757AAC4FCD66979\",\n          \"PreviousTxnLgrSeq\": 69054080\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"97790989866.0001\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"722\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rBVRpQjDpGqLs588dtthtZhrPJCcM4w3TS\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"LowNode\": \"1\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"CCD89C48B1756CA9820B801F9776B3FDBFC7640FB3EFC1AAC694737BF942088F\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"1977909898660001e-4\"\n            }\n          },\n          \"PreviousTxnID\": \"34EEC2B5C7963F9EFA5DBA466DF7CF40A6F9C8601DCD9673ADBE2E91B30AD40D\",\n          \"PreviousTxnLgrSeq\": 69034828\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rh8TcfXzDZdQBB8R9aQfE2zUUwpd1zbEWv\",\n            \"RootIndex\": \"CCF7CAAEDA563E2EE8E5601ED1B2C468B33A0A4B363717CFD75F642D019EAF3C\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"CCF7CAAEDA563E2EE8E5601ED1B2C468B33A0A4B363717CFD75F642D019EAF3C\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-26.4578\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rGT6ze5CuPEUzsk92YnLLkEqjv6qqhabrF\",\n              \"value\": \"1000000000\"\n            },\n            \"HighNode\": \"15e\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"e47\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"CD247640805102BF596E37ACABDF17E21A8DB0C77B7306EAE05474ACFD366E77\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-1669675636272625e-4\"\n            }\n          },\n          \"PreviousTxnID\": \"7E0B9225093C20C42C87EEA711E8F540C9369FECAF150DC935E05E9834BB2E24\",\n          \"PreviousTxnLgrSeq\": 69060910\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rw4jQ2pSNGhFQDoQyNpP6FJ1nArCWCZjKM\",\n            \"Balance\": \"242910408\",\n            \"Flags\": 0,\n            \"OwnerCount\": 35,\n            \"Sequence\": 67525552\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"CD323F542E272061FE9C8485C636C48B3D4DA036FECE2E043DA250AA3FD45100\",\n          \"PreviousFields\": {\n            \"Balance\": \"92130408\",\n            \"OwnerCount\": 36\n          },\n          \"PreviousTxnID\": \"756B9BC0B305899AA9685B911DF84C3EE10746A336FB54910F08FBD7155C90E9\",\n          \"PreviousTxnLgrSeq\": 69045060\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"1\",\n            \"Owner\": \"rNLPZmai318pizfUNmkebSrtsR5mFvVVWt\",\n            \"RootIndex\": \"5780FB0F3FE8B0C7F5FF3142720439CE6F3716974498691002F935E07AA57FA2\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"CD45016AF0662894CCF1DDDC43B4436EB7C3525F3393DEC8A853AEC958CD96AB\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"3\",\n            \"Owner\": \"rEjghQohwSDxD7d3NbTdrzRLGRRsGf7qwN\",\n            \"RootIndex\": \"D9582BEF294ED1F3D9197CFCA66E68A2BF45C66399BFC6D96A6D348F3062C625\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"CD840984BA1E1E6D763FF7911C888B508FD247AE0ED3B23362851EA95A05497F\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"b\",\n            \"IndexPrevious\": \"9\",\n            \"Owner\": \"rDHvd9BAsKFcmRyCA3Y6iYEMi7n3xzR5Uu\",\n            \"RootIndex\": \"A7A2869683F03624291831F9BF8299457F946C0C7A6371F84AEFA4278FB94030\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"CDCB79B029361CDCF24752D3439BDD17CC584F8033CA9E23CA7D708062C34BF2\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rPfw6T9Nu154bW5Yqyd351rebEphbe3Fhm\",\n              \"value\": \"9999688558266531e-1\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"e35\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"CDFB9D7D8786612D6596DEFAA29D507C75FA688D728ECB4C409F7201D1492C89\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-1052737689222326e-3\"\n            }\n          },\n          \"PreviousTxnID\": \"CEAE8D00E18896E3D2CC38713D38F6C704070FD599FAD8AE515BFFBAECD5D330\",\n          \"PreviousTxnLgrSeq\": 69018503\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rEEmAELYEW2kQQRJEXhN9qJnzZmUnLxhJd\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365211C37937A69A7C\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"2B7F2F410DC7BEB1E95D69ECE1B0E7CAEC63FDD49ABDE37FE0E611AB745D57B9\",\n            \"PreviousTxnLgrSeq\": 68976739,\n            \"Sequence\": 68870167,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"CE2D31250916C8035ADD8E18952B384242614FD0AC845C7AC0374EAD25DE7FDF\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"618459800.4693254\"\n            },\n            \"TakerPays\": \"3092299\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rGPEKNaNPYojt4sFbUzodh9SUNxixCwoBC\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365311C3793747E980\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"2\",\n            \"PreviousTxnID\": \"A79A92D4F774991ADE2C351BBB7EB959D4E00D0BCC4C774707369AB17D11858E\",\n            \"PreviousTxnLgrSeq\": 68899318,\n            \"Sequence\": 67759695,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"CE43C7DAE796830B2C66A1A1444DFB1E66F87B6B9C481174F09B36F89BB96BAF\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"10000000000\"\n            },\n            \"TakerPays\": \"499999999\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rNWUPV44ECUZNuemMektfAsccCmYRnZXK5\",\n            \"RootIndex\": \"CE4F3D0673201BE77C103FDE4FDA75403DA0E7996E4ED53B4A9E03944485927F\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"CE4F3D0673201BE77C103FDE4FDA75403DA0E7996E4ED53B4A9E03944485927F\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r7ouMSA1S6pggGmsYRZewYQzCP7XgLiEx\",\n            \"Balance\": \"373413782\",\n            \"Flags\": 0,\n            \"OwnerCount\": 156,\n            \"Sequence\": 67327086\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"CE73BC1CC673CD5C1DEA1666BFDB03E32A81EBB9B3299419D0243FEB0B373FFD\",\n          \"PreviousFields\": {\n            \"Balance\": \"337663782\",\n            \"OwnerCount\": 157\n          },\n          \"PreviousTxnID\": \"A7CA5A26782F12A9B6787B35CF91C606082AB99B16FEB23CEF9FC1DD9D295936\",\n          \"PreviousTxnLgrSeq\": 69063545\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rwxKxP668nq2w99VM8SpeaXBwUVkcpcV3m\",\n            \"Balance\": \"164075161\",\n            \"Flags\": 0,\n            \"OwnerCount\": 76,\n            \"Sequence\": 67089747\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"CF3753B58AD978CFBD0B666944A6C73674E9D88F2C98B663B450CBC842F54111\",\n          \"PreviousFields\": {\n            \"OwnerCount\": 77\n          },\n          \"PreviousTxnID\": \"7420C598E713B025134EAB65B9260C01CE41C4E74688145BBBBD82D409E59BAA\",\n          \"PreviousTxnLgrSeq\": 69054535\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"8\",\n            \"IndexPrevious\": \"6\",\n            \"Owner\": \"rNqG1shTsAyEcTFcAeBxGsLpmaNAGbcESv\",\n            \"RootIndex\": \"A5A6B3A52D385A5C88A3DE7AF2B54FCE07675FEB2A441BF7394D1A23E7F4A41F\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"CF425167E6DB153313C5EE0C84BC14734420E3E80FCE91A162729B714CFFA8DF\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rMQF7GUuJQHvrEkXkcySkEvb4fbsGoqGqC\",\n              \"value\": \"1000000000000000e-1\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"e95\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"CF7D3708010A6A2622E7CECA3BD98BE8071E275ADFA872A5B110B0FEDD7996E4\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-11363116299.24879\"\n            }\n          },\n          \"PreviousTxnID\": \"58985D120D0E0AEC734DFDF6156065C3E097C41585CE6B37F7F17C04342B755B\",\n          \"PreviousTxnLgrSeq\": 69009799\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"50000000000\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"22\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rfFmXF3uT3Qc76CAH2cVExQXN6t7KFERu6\",\n              \"value\": \"1000000000000000\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"CF899941F2858BD766E7E5D79D43C98596F7152859AD48A5016EE552F69442AC\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"85000000000\"\n            }\n          },\n          \"PreviousTxnID\": \"35881D8C79F1149C09F4A24D9E996A6E179A515C99083F4C195790815BD46086\",\n          \"PreviousTxnLgrSeq\": 68898844\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rw2K4HQDujtogHECEi9ubWzeVVHr2bBN16\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653071AFD494E4986\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"7\",\n            \"PreviousTxnID\": \"36C162A5A383C24C1F7802DE2E31041519587F4401583CCB927E9C362292C278\",\n            \"PreviousTxnLgrSeq\": 68014673,\n            \"Sequence\": 67133094,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"CF931A4F79EFF99005A6B14730F85AE74D8F07E0932E71D8D2740B44A5A6C092\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7785989866\"\n            },\n            \"TakerPays\": \"155719797\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rGBdiULuYdTBGGX2JWzmjRXscUacAHsm3i\",\n              \"value\": \"1000000000000000e-1\"\n            },\n            \"HighNode\": \"7\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"ef1\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"CF9AF5FAE47FA273B93F7CBE38E20F542F40854C7AB0746022E28904C7BD3002\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-9673050892.636902\"\n            }\n          },\n          \"PreviousTxnID\": \"458F5AC844803A4769404B8C3E7898BDE24E7EF8C8348B914C3AF9A3111D6691\",\n          \"PreviousTxnLgrSeq\": 68913678\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rEr5Zbwd9Lurx4VHEvWWZFQb3owfVABck7\",\n            \"Balance\": \"229738969\",\n            \"Flags\": 0,\n            \"OwnerCount\": 85,\n            \"Sequence\": 67171899\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"D006721649D1DA6DBE0514083C7B53A9AD52045423C59F1FCB3CE83B71574DAC\",\n          \"PreviousFields\": {\n            \"OwnerCount\": 86\n          },\n          \"PreviousTxnID\": \"3311ED835E884373D14892CB60ABDBC6082AB11F08F4E870621A3C4DA2AF864D\",\n          \"PreviousTxnLgrSeq\": 69064069\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"7d3\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rBCw1uH84iKcSRVjY8ALzx66Q9ZVNMgYsn\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"LowNode\": \"1\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"D033D47C02906A6EFB6040BA572AE4011D8CF6426EFF3DB4E85BADDA6DBCC8D8\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"10899881300.38661\"\n            }\n          },\n          \"PreviousTxnID\": \"7BF06CF58BF1CAC23343F204F6C4BDCD2FC3A41011B15D4349979406F5AC6DDE\",\n          \"PreviousTxnLgrSeq\": 68898991\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rnu8qs15n6d9Xj21aBXxjdgyWz5cqNXqkf\",\n            \"Balance\": \"2321801418\",\n            \"Flags\": 0,\n            \"OwnerCount\": 65,\n            \"Sequence\": 65843935\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"D05A408889E3B6549BA06CAEA7415978C4FC6FBA376E284A3B611A2729E25A6F\",\n          \"PreviousFields\": {\n            \"Balance\": \"2281801418\",\n            \"OwnerCount\": 66\n          },\n          \"PreviousTxnID\": \"7C3718CE7B06AEC2263B2816AC06A27525A347F1A729918B82C3E6B7516DB140\",\n          \"PreviousTxnLgrSeq\": 69060233\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rET8MUZc1VEcHkQqQWeRmvbWZcrtHy24iB\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"674\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"D079840DF7F7BF703F5AD78DFEBC5D35FDA4429739568F11A611DE7BBF737068\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-7785989866\"\n            }\n          },\n          \"PreviousTxnID\": \"0DA75B26906D95158968BF8C8C7B806E2AFC7CABDD5EF65826297912FF9EBEE7\",\n          \"PreviousTxnLgrSeq\": 67997700\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-61899805292.0632\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rJFmgWo13y1o6C42H1LC7qDWcu7Z38QaAd\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"HighNode\": \"3\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"95b\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"D0932E763D688F72EE4FEE8212AD7C0D2F7279A4C9464797662B66099E48999A\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-1018998052920632e-4\"\n            }\n          },\n          \"PreviousTxnID\": \"FD6F2334FCD1BC9F3E4585C047777D8FD583B0C149C4F04887247CCD111090EA\",\n          \"PreviousTxnLgrSeq\": 68608964\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"16\",\n            \"IndexPrevious\": \"14\",\n            \"Owner\": \"raDJvZX8gbRfZ3hUWimZPdVcDRzsZQdhmr\",\n            \"RootIndex\": \"2758016F666FB17E482B50140E033BD14C888C9BEC5F42A65A10265F73BF0EBE\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"D0997989931C799ABAFF978FFB87A4F29F8CBC8BE5E360880FBB99725B833B64\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"e1e\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"r87fNs5eU59kPhMXgYHVziF6Q5icW4WHW\",\n              \"value\": \"9999688558266535e-1\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"D0B35FF4136A79F9B5FA8BD254ACD782A4CDA294AC5EE550F36AAA8A8CE2AE8F\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"87056888288.88889\"\n            }\n          },\n          \"PreviousTxnID\": \"4188F759144079497EB2EBC5075C543AB3B6CF3E275407F7C79321665BE0671F\",\n          \"PreviousTxnLgrSeq\": 68948273\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"c1b\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"raQmxvieBXeCfDzRKXdekiw7qucsszMReU\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"D0E7511C396A982E5DFFA7E35B400A2467D8B3DB96A6E768BDF843D4BC753F65\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"30000000000\"\n            }\n          },\n          \"PreviousTxnID\": \"68F7874FCE1959F4ABDCF29B686AAAAA0D04E5332F0EA0C24B2C6D11923CF431\",\n          \"PreviousTxnLgrSeq\": 68781520\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"30000000000\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"9ab\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"raKfcCtqnoopzuWrRWY88p5hbTBmF7RzTj\",\n              \"value\": \"9999999999999994e-1\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"D0F86709E0963FE9A11695F553AEEE94EE1CAA119BBDFABF986D0A5E418DE8AC\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"40000000000\"\n            }\n          },\n          \"PreviousTxnID\": \"B408ADF887CF0963FB20B492F40032DB56BEED8FB5D4A0F433A4FC49FE4E3F0F\",\n          \"PreviousTxnLgrSeq\": 68988572\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rhoYhs7WCmQKMPR22kQ5DhXw3pXQsjUsmi\",\n            \"Balance\": \"139282956\",\n            \"Flags\": 0,\n            \"OwnerCount\": 62,\n            \"Sequence\": 66912789\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"D100E95209093B62569C79946E83D44680D82D233048DE92E24DAE58EB8E6B8D\",\n          \"PreviousFields\": {\n            \"OwnerCount\": 63\n          },\n          \"PreviousTxnID\": \"CCC18A81902E4B15A9F7B6E346ADE503C6DFDDFDBDBDA18C7CE6BA30AE62E240\",\n          \"PreviousTxnLgrSeq\": 69063547\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rGR9AifcxWmhBqTR2JWAPooQsR9kW5yzj6\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365219EF4FB2B186E3\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"44F714A13131C4F2C05226E60EB13D1E7B169C11B2E4AB81FEDF63E654B75224\",\n            \"PreviousTxnLgrSeq\": 68899319,\n            \"Sequence\": 67761116,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"D12BC6517B5A9E3CB07452C3E4E68CBDC913A89788FC1402036A4318B190EE68\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7785989866\"\n            },\n            \"TakerPays\": \"56837726\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"722\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rB7sr2UvCBewPJXg9My4kjDFWDF9URdRuJ\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"D13E11273E9FBDFC30FFDD31AD18E9775D4D4FEEBD6FD2F68D863F0F97D2B78D\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"7785989866\"\n            }\n          },\n          \"PreviousTxnID\": \"513620AE72A42B0EFB2A5773876E9EDCEED1C941BC6B89F45A93C26B31F743C0\",\n          \"PreviousTxnLgrSeq\": 67996541\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"3\",\n            \"Owner\": \"rfFmXF3uT3Qc76CAH2cVExQXN6t7KFERu6\",\n            \"RootIndex\": \"9F8E203987726F03EE5723FBB065F0389EBC89700944ADF33E5561F7DEBAB24D\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"D14245B3C0E426B04A97BCF2B9B8482436939AD48A29A8580FDE2BDE5A590E09\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"e\",\n            \"IndexPrevious\": \"c\",\n            \"Owner\": \"rPG9SrHPEhwbExniY48qKCqDqjGKyVn38w\",\n            \"RootIndex\": \"8A5B90E725262E19E3ECC448D1F18BFB28143392D05B5B62D395D8E0E6CAED25\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"D1486C38A7F2447E6C985289D50177B3A1717BA707E34E2B5C2E360F848BF524\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rGQaGNPT8u7Wt1RoqJEhBgAPyc9ek5RfCL\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520E35FA931A0000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"6\",\n            \"PreviousTxnID\": \"F14E7940BEB0C16ECD7A6A99822EF7EA02C0A445C9C813F221DAA96A3ABE5B73\",\n            \"PreviousTxnLgrSeq\": 68998723,\n            \"Sequence\": 65975079,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"D14FABA94C0056F23730FD9C75681D75DEE1B0DE26F8D4961E89693DABDCCEC0\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"10000000000\"\n            },\n            \"TakerPays\": \"40000000\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rDSSG7NwYYV545mfcRdVExpAU6ys9CqoCk\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653038D7EA50921E1\",\n            \"BookNode\": \"0\",\n            \"Expiration\": 724069451,\n            \"Flags\": 131072,\n            \"OwnerNode\": \"12\",\n            \"PreviousTxnID\": \"86F5BE961303FB4C09013B0608D7ACAB8FAD07E19574CB81460972C1AF0D659C\",\n            \"PreviousTxnLgrSeq\": 68266103,\n            \"Sequence\": 63854595,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"D15546DA4616AC1ECB01996AA3BECF2EEB57C3C93795515F7D121C801098B488\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7785989866\"\n            },\n            \"TakerPays\": \"77859899\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rHSPavv1zYMxcqPUHEeQqwMSQgSzadAjM4\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653038D7EA4C68000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"f\",\n            \"PreviousTxnID\": \"B694B38173AD7693FC003208B1444290F88CBFA88D897C47F550A9ECD314C6A8\",\n            \"PreviousTxnLgrSeq\": 68899046,\n            \"Sequence\": 66504538,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"D15FBEB5A965296377FF411C1422833D5F5F5B4BC922DDFD6F7877473833591D\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"8001600000\"\n            },\n            \"TakerPays\": \"80016000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r98DGNQEGR9x2bhRVBbuiHAqxq2aDD6pKa\",\n            \"Balance\": \"11697244003\",\n            \"Flags\": 0,\n            \"OwnerCount\": 28,\n            \"Sequence\": 67202853\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"D166D99CCD9A16D34132592237EBD171D29AAC714CA1E55ADDF16C14B8EDF479\",\n          \"PreviousFields\": {\n            \"Balance\": \"2492777146\",\n            \"OwnerCount\": 34\n          },\n          \"PreviousTxnID\": \"ABA43842E02F6C815C0FABEC0F2550B5FC423A062F1761D3D2C6C6E881C8349A\",\n          \"PreviousTxnLgrSeq\": 69054684\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rKjRbDnEwfSRjozGgD1M2dBU54xVtv57aQ\",\n            \"Balance\": \"705034662\",\n            \"Flags\": 0,\n            \"OwnerCount\": 62,\n            \"Sequence\": 63167865\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"D185A70349D09FF40866058E0360A5DCCAB6A67BBF8EDF070E7C1892FEE10AF1\",\n          \"PreviousFields\": {\n            \"Balance\": \"405034662\",\n            \"OwnerCount\": 63\n          },\n          \"PreviousTxnID\": \"E0AA24B1FDF5CEB7B0857F2952E12AA97CCC931915DF3EC5073A0F6849967934\",\n          \"PreviousTxnLgrSeq\": 69062326\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"21f\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rBhRwsAuVFJ3VY37rd5R9YzqrCRjVXQggX\",\n              \"value\": \"1000000000000000\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"D19C96B7231C7CB0A02DBC9DB803DF34CE630D6CF8F595F6C32C1DC069E66906\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"5000000000\"\n            }\n          },\n          \"PreviousTxnID\": \"812306C620D96A902013A3B71AF4A64E55572E4FC63CF3940AACFC5B17316850\",\n          \"PreviousTxnLgrSeq\": 68898788\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rKHBZ7opA2ryRMocKk5wEW85wXpUNGNV4Z\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520D252161AB4000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"1\",\n            \"PreviousTxnID\": \"C6BD8C0E26F87969983661D755499CA1EF21F928158F8C85F50F5F26830DBEE2\",\n            \"PreviousTxnLgrSeq\": 69007411,\n            \"Sequence\": 67431692,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"1900000000000000e-4\"\n            },\n            \"TakerPays\": \"703000000\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"D1D1EFC8CC99C5D018548165F80A180F32B807D9F1377E320A9AC7806D025578\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rGKv1gHL1ANheQZ4GMCikKaGYoKJC6o6wG\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521B5B1BF4C53FFE\",\n            \"BookNode\": \"0\",\n            \"Flags\": 0,\n            \"OwnerNode\": \"21\",\n            \"PreviousTxnID\": \"DFA4D80D1520E90E178AA6EE4609DB623962E1A02B202761D31C87F07F1B9653\",\n            \"PreviousTxnLgrSeq\": 69001448,\n            \"Sequence\": 66128536,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"12681332857.14286\"\n            },\n            \"TakerPays\": \"97646263\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"D1DAA1C9E44AAF492DCB69A0DAA48C6E719F6776462BA4A6318C647ECC63CEF2\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-11004498571.54081\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rK1QTLhkJgn7zvG8ZcGJea3XzWfj45xhRE\",\n              \"value\": \"1000000000000000\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"e48\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"D2317ECAD57A1FF076CC687FE0C444CCB541717D2262E7773683C16543B8A4AA\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-21004498571.54081\"\n            }\n          },\n          \"PreviousTxnID\": \"2947C1C85F084B8F7E1151CDB06526B8B294125BE5508DC666387F1E113B65C4\",\n          \"PreviousTxnLgrSeq\": 69040374\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r98DGNQEGR9x2bhRVBbuiHAqxq2aDD6pKa\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520E77EAD1966568\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"8\",\n            \"PreviousTxnID\": \"83CAD6D7A9551AFBE7896111B31BF7CA46CD063959FB7C6D00898DFA3F38A8A9\",\n            \"PreviousTxnLgrSeq\": 68997627,\n            \"Sequence\": 67202777,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"D26B350E1D2AE9860AA15E93AD6369F4AE882E82B46ACB12197EF7E38CB73C63\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"1350000000000000e-4\"\n            },\n            \"TakerPays\": \"549787513\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rNPZ49ucC4zKoBPgyAsSC7oMSSoh1icnZK\",\n            \"Balance\": \"804191947\",\n            \"Flags\": 0,\n            \"OwnerCount\": 129,\n            \"Sequence\": 67158863\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"D2746AF08EEE8FACFDC6CBDA04341ED0D149364568EE070907B61A62FBDDF259\",\n          \"PreviousFields\": {\n            \"Balance\": \"293107100\",\n            \"OwnerCount\": 131\n          },\n          \"PreviousTxnID\": \"8FF793C623F0BAB3ED178A4B05B14964F840E4E8D64DCF28396DC02E9543D046\",\n          \"PreviousTxnLgrSeq\": 69058044\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"806\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rfnaFsTkxCWYtenT3MxsFxjjrX4F7itNzd\",\n              \"value\": \"9999999999999998e-1\"\n            },\n            \"LowNode\": \"4\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"D2768D5FB1F3D0F09815B6FCAE7CD53E284B003C867F0BE7BD08E53F2C796FB9\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"7785989866\"\n            }\n          },\n          \"PreviousTxnID\": \"D2DBD99F7AD33CF4DC00A97385092B59AC6D512479EE8F2263A8017E6A738E46\",\n          \"PreviousTxnLgrSeq\": 67993345\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"raUCqTN33sgqfhC1KVtqhCVX6iHkHAbUzp\",\n            \"Balance\": \"2427442866\",\n            \"Flags\": 0,\n            \"OwnerCount\": 474,\n            \"Sequence\": 66813342\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"D29D1FB347450063F2EDAA240EE5257299EF189115BDEDBBF9277E0DC0D82395\",\n          \"PreviousFields\": {\n            \"Balance\": \"1302442866\",\n            \"OwnerCount\": 475\n          },\n          \"PreviousTxnID\": \"561F997165794767DFAF77E7BD0B37BD583358E02F3293512C339B112A15201F\",\n          \"PreviousTxnLgrSeq\": 69064132\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-13000000000\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rNtB5pUvufMkzs55wL88pVuh3xt7LVW2mR\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"704\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"D2A332AF4649069AAD5BD0FE254E144A82F0AF99DDCE6444E965355ADA42CCC2\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-33000000000\"\n            }\n          },\n          \"PreviousTxnID\": \"F8643A8CF4717DF4F2E8940EBD1F7382475163645FE34F2019B4A152FF8C779F\",\n          \"PreviousTxnLgrSeq\": 68950640\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rN9HGJaVB4wFwWcj5tTqzkWtHjxxCZiHA7\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521C6BF526340000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"e\",\n            \"PreviousTxnID\": \"080A3A7C67F474EB08B0FE5299AA60BBBD6C4C558384A0B224CA233E5E5EA4AF\",\n            \"PreviousTxnLgrSeq\": 68899623,\n            \"Sequence\": 67322279,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"D2ACD663E3AC92BFD6D5CFFB7E5D12DFB96798795703C2A238DDEAA7B3ADEC22\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"50000000000\"\n            },\n            \"TakerPays\": \"400000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-1761678744468903e-3\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rKbNu1SDc3i5dWHdp3uLxWVn2tsA4ovDJR\",\n              \"value\": \"9000000000000000e-3\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"dfd\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"D2C6B46DF4FA1FFA1D4D75204B15FB73D4CBB64D225593701DA46E95556792FA\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-2290293262024048e-3\"\n            }\n          },\n          \"PreviousTxnID\": \"E38A79F8A844A4F1B2CC9F531556F6824B3D8FD7885D8AC189C03309AA02D515\",\n          \"PreviousTxnLgrSeq\": 68996360\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rQKYm7pcdeXMPEgGTRUAAuoziWwhhW3DC2\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36531FF973CADF102B\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"2\",\n            \"PreviousTxnID\": \"20E2ED91AA85F62EC68A773DB361606FDC9E209C4293DC5C062CF99461E24E00\",\n            \"PreviousTxnLgrSeq\": 68162979,\n            \"Sequence\": 67339933,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"D2E298E9AAA921840B45437DB33FC621CF55AC386223C1291E9EAD460277E5DC\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"38929949330\"\n            },\n            \"TakerPays\": \"3503695439\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"43000000000\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"a79\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rw4jQ2pSNGhFQDoQyNpP6FJ1nArCWCZjKM\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"LowNode\": \"1\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"D2FE7AB8412541B707082E292D088A85BF5DA4F8A8C857C2B6EF9A298A63078E\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"85000000000\"\n            }\n          },\n          \"PreviousTxnID\": \"4CC219CFE4E4E6E29E152A45B270B9DFF5BAB8D4FF056EB200FF58AD34779CC1\",\n          \"PreviousTxnLgrSeq\": 68995313\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rQDZDYodywYJULXJtv68QyoDbkV5EZgh9s\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36522386F26FB49887\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"4\",\n            \"PreviousTxnID\": \"DE5F4AFC1C7787CF06260F79CB385A2DB6B25E176DEC0A93F59710D4F0D9397E\",\n            \"PreviousTxnLgrSeq\": 68163156,\n            \"Sequence\": 67423791,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"23283611196.2436\"\n            },\n            \"TakerPays\": \"232836112\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"D3107639A9D008C6453D7278A38C696B4DDD2E35EE36164136ED4CD77C1E2C34\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"1120551700091092e-4\"\n            },\n            \"TakerPays\": \"1120551700\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r3uzGoy1vgEEdULUkLBRJXaYfww3nzYP27\",\n            \"Balance\": \"498555194\",\n            \"Flags\": 0,\n            \"OwnerCount\": 77,\n            \"Sequence\": 66616846\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"D32547FE7D6919AE985D68326F87307B9F3B9DD513DF33C9F6D252AF46330B91\",\n          \"PreviousFields\": {\n            \"Balance\": \"429267671\",\n            \"OwnerCount\": 78\n          },\n          \"PreviousTxnID\": \"918EE7331045270D1FF392BB884907A5B012ECF7A9B6D4FEBD83B9CBBE2BE92A\",\n          \"PreviousTxnLgrSeq\": 69042918\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rpq6ooRTok73Udp4D58zesfDJeYM1t5s8C\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36522276193CB22408\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"f\",\n            \"PreviousTxnID\": \"7F765B8F0FB70684AF05704EC1AD81A23620963BD5EC2B2249593BE767522B81\",\n            \"PreviousTxnLgrSeq\": 68893038,\n            \"Sequence\": 66716888,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"D341A2B7D35896ADB344FC2C25AFE301078C3EE9A77F9018A9C12FE077E70412\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"31143959469\"\n            },\n            \"TakerPays\": \"302096406\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rD3MRnTt6tvvtt7o7F5p8B49toAUWnoLmu\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652232BFF5F46C000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"d\",\n            \"PreviousTxnID\": \"8D185EEDF7519871980CB6AE0DFC681A4D330D9528CFC709A7C269AE567E7DA1\",\n            \"PreviousTxnLgrSeq\": 68876550,\n            \"Sequence\": 61713954,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"D35D9FFD7C27DC3286561ED773EF6EA3E0A72621AE3D3BC019BE4E971373A4AA\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"14000000000\"\n            },\n            \"TakerPays\": \"138600000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rEoF1AJrncEkjDkmoQNYxvCp49Wyn6RFvc\",\n            \"Balance\": \"884231247\",\n            \"Flags\": 0,\n            \"OwnerCount\": 171,\n            \"Sequence\": 67287695\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"D3921BDD0FFE6EBF36F27B35C6DCD281EA234618232113A8752EEC175A3F3095\",\n          \"PreviousFields\": {\n            \"Balance\": \"574231247\",\n            \"OwnerCount\": 172\n          },\n          \"PreviousTxnID\": \"552F0D7EE12A75884A571FECA324F12F77646D2F5C926B42C617769C91A021AC\",\n          \"PreviousTxnLgrSeq\": 69061394\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rUN6cc1UZw3jJRFAQpzYZdwA75aKR6qJE1\",\n            \"Balance\": \"276845282\",\n            \"Flags\": 0,\n            \"OwnerCount\": 71,\n            \"Sequence\": 66466115\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"D3B9FA8F9665D02B459867474BA180D004019D8C74B85FFD4151746DA5B0AD78\",\n          \"PreviousFields\": {\n            \"Balance\": \"195870988\",\n            \"OwnerCount\": 73\n          },\n          \"PreviousTxnID\": \"0DA984FAF4974D602682BFD3E5F8A2A81851F35150281354B02A55CA8E777CC8\",\n          \"PreviousTxnLgrSeq\": 68967465\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"3\",\n            \"Owner\": \"rDDmwBnxoXcq7PLUXTvsfVHhEqGpNCS138\",\n            \"RootIndex\": \"DB5498426E8160A18D6F1F4BCC69058548EFAF20D0CF7BB48D69A8C21EF0115B\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"D3E8907571DDBAE308F037E5D31B011C469B2C84B22B0322916D0AE2B4C01357\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"1\",\n            \"Owner\": \"r3ccw1UCPwayXhAVmy6oC4yQTSPeG71bx\",\n            \"RootIndex\": \"56BBDD035A3685687FD39FB2F05FFFDB09919CB0EAE1A67A28748AFD85FCE148\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"D4375054334AE11B1E8F83CE90EFDF6FABF30AB8A7E14C488B46136F7774F9E5\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rB7bqYSsffBTNfLgyyyXyWL2e1bg2djJq2\",\n            \"Balance\": \"301699133\",\n            \"Flags\": 0,\n            \"OwnerCount\": 100,\n            \"Sequence\": 67458605\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"D47508EE7A99BB540CFB08BB22C71623F00A6CB0586AD676E861C5A52A510B3A\",\n          \"PreviousFields\": {\n            \"Balance\": \"247197204\",\n            \"OwnerCount\": 101\n          },\n          \"PreviousTxnID\": \"BFD4EF60BE755443B027B5C60A7ED333CFCAA47E86A81E66F0812814B345AB1A\",\n          \"PreviousTxnLgrSeq\": 69049420\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"2\",\n            \"Owner\": \"rLaYDDZDLBvzSGxKhxDEKovMrQ3CoDXQV\",\n            \"RootIndex\": \"C2F900A554A61DF453F79DB8EE957D0971AB45CE74745521C10035D46846C1BB\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"D47DC00A59F044DEC9CDFAA69486AADC49CD754B045CCF5B0ABBA6DC3E5BAE60\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rUsSyZqiqCSZoqNqjd6PqcEQ3BBaXyS7wF\",\n            \"Balance\": \"497961260\",\n            \"Flags\": 0,\n            \"OwnerCount\": 52,\n            \"Sequence\": 68183534\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"D48410E94DF86569A3CC266C6B9FF2C62AD1789025BE1B38EA8154D8D33BEB1B\",\n          \"PreviousFields\": {\n            \"Balance\": \"182624533\",\n            \"OwnerCount\": 53\n          },\n          \"PreviousTxnID\": \"3D63F9035C67515E690E07AD7D415221191B1DBB2B9D13E3BD8317F760CAA58B\",\n          \"PreviousTxnLgrSeq\": 69054556\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rwEP45SodNayAXhoEQeJmXaky391SxGRZz\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365207AC823076A9D4\",\n            \"BookNode\": \"0\",\n            \"Flags\": 0,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"7FE8A61BE268FCA5D4562B2A26953818673CC846724B4A7A9A7924FAF7AF4D40\",\n            \"PreviousTxnLgrSeq\": 69054519,\n            \"Sequence\": 67338129,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"64954469571.23688\"\n            },\n            \"TakerPays\": \"140301654\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"D489E6BDC142A46E0E17A1C77D1FED3CCEA2A06F91648E1F411E8808B5E47B5D\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"edd\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"ra76UpbMwxu2GePpQeV7dogXZUxvn8upup\",\n              \"value\": \"9999610698104599e-1\"\n            },\n            \"LowNode\": \"b\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"D4CC10292E9AEBDCA0CFA06818B9ED3DB3FEDF815C0E9B06283E615D9413F27A\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"4000000000\"\n            }\n          },\n          \"PreviousTxnID\": \"CAFF29DAD2E270525F7F3027A0D1AA259D010F5CDC4425D13463A135003CFF32\",\n          \"PreviousTxnLgrSeq\": 68968517\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rDTDTzVK47KCcGmiywZHhKsDP7323fqGGL\",\n            \"RootIndex\": \"D4CCC5BDD14A627E1777A5BA176A4C51CA125F9960967B2BB5BF34ED990A81EB\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"D4CCC5BDD14A627E1777A5BA176A4C51CA125F9960967B2BB5BF34ED990A81EB\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"3\",\n            \"Owner\": \"rEay1pxUyiL4ru86hJLv4bKCzwm8EL4Mzw\",\n            \"RootIndex\": \"CFFEEF616109CA39B4A595E7CF7A8F51ED7782820790F6D9155BE7D7F4514DBA\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"D4D7BC31DAABD0969118C1DE7381DA394EC795227FEFAB20E5FADC8A2056F61C\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r3yLxRMK4K5z8UzzYC9tQASyFZ7p6EQDwz\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521C6BF526340000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 0,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"6C3414A6890F08C10ACCED00940B86B643C744FBA160AEE1B1FA0E46911A27F5\",\n            \"PreviousTxnLgrSeq\": 69009898,\n            \"Sequence\": 68723095,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"D4DBD7313BF02ADF55178A12F88B2FC60FF4528A5D6569DB13AAB3F369AD64DB\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"2200000000000000e-4\"\n            },\n            \"TakerPays\": \"1760000000\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rC4M78e2ktZz8QwB5SUSEeeeSi5rcnxrJ\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365218DE7680DABCCF\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"f\",\n            \"PreviousTxnID\": \"05282A41851EACD505B7BA4BDE0E593B8A2BE0E6AAFE30A280F7EC12BA727C44\",\n            \"PreviousTxnLgrSeq\": 68993559,\n            \"Sequence\": 66527151,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"D4E12CB8732DA67CFF3661A0BA7B1CF2912FAD85D3C25F28BFF381766CDC7453\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"27244028037.43417\"\n            },\n            \"TakerPays\": \"190708196\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r3mZ69KGMSXXfdFe2xxeNvSkA98mQQ52aF\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520774AA6359E0F7\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"c\",\n            \"PreviousTxnID\": \"D188111495523252DBD78E47C192348B206D1FB727E0A4EEB3DF34A291AC9EA0\",\n            \"PreviousTxnLgrSeq\": 69062976,\n            \"Sequence\": 67138992,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"D4F34817EF94A251FA21179461A580450F24E289337E874273A22E6C67B4096D\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"2017617257175439e-4\"\n            },\n            \"TakerPays\": \"423417157\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rJRfgew5k5b2Qgj5r9gn2L6w66hE5vwYnH\",\n              \"value\": \"9999688558266543e-1\"\n            },\n            \"HighNode\": \"7\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"e0a\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"D50B6BFC4F6358D007E91503CF64BAEC3C6DAA3D6CF7444D2C7649C550F4B88B\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-5000000000\"\n            }\n          },\n          \"PreviousTxnID\": \"A2E8F7DA2A37DD0747CEE82BD8A5C1E118067FABC383C94C5FDA5C7154F58ECC\",\n          \"PreviousTxnLgrSeq\": 68963672\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rabF4KeYghT7RWidbkeS75fLWQzrDixwpH\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520F0D876FE4F21F\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"C7DCD6CF47787E7C14D4D80D67786538B80237E0B22217E1DB70A21FA013CB6A\",\n            \"PreviousTxnLgrSeq\": 69004265,\n            \"Sequence\": 68100909,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"D55E6213FC3E3B62839C88E20F05085543D3C7918B28CBA48118956753ADBFF6\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"51954206753.96992\"\n            },\n            \"TakerPays\": \"220129974\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"r9Bq12mZUmUByGGcnu8tvj2KYAcJQ4zbTL\",\n            \"RootIndex\": \"D56482477DDA92454D6BAAD29619A6E72B2513FF6C39A159CF919E7D41036298\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"D56482477DDA92454D6BAAD29619A6E72B2513FF6C39A159CF919E7D41036298\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rK1QTLhkJgn7zvG8ZcGJea3XzWfj45xhRE\",\n            \"Balance\": \"237854332\",\n            \"Flags\": 0,\n            \"OwnerCount\": 35,\n            \"Sequence\": 68264092\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"D564F74C3D2C67EE3A46C73E899307AAC8F4B17035CEAB80684B56FB13789BDA\",\n          \"PreviousFields\": {\n            \"Balance\": \"137854332\",\n            \"OwnerCount\": 36\n          },\n          \"PreviousTxnID\": \"8D1CFAD43C50C1081595098A789860ADC4400D5C17C6366AB40D27B13E08E142\",\n          \"PreviousTxnLgrSeq\": 69061163\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"ec4\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"r3PWgfzUbXKYDoLD6p49JqiabjfQCj14AZ\",\n              \"value\": \"9999610698104595e-1\"\n            },\n            \"LowNode\": \"16\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"D57F2C5B6AC38844FA2E7D4029520B9B06F821D2D9DE9AF5685B94086045D5E8\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"21246268571.42857\"\n            }\n          },\n          \"PreviousTxnID\": \"27B69C8FFEF9205D09AC6F0061077D16F24CC001693F21E2E14E3BA14C5B1611\",\n          \"PreviousTxnLgrSeq\": 68991108\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rpRu4PM7TpS2K481Ac6ESUDRf5QmAfc6M2\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521C5C7F072A4973\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"4\",\n            \"PreviousTxnID\": \"5CB5E8CB1E53CB9A4D79893271D96AC547280A04C389698884CB90DE1B43748A\",\n            \"PreviousTxnLgrSeq\": 68933852,\n            \"Sequence\": 67535477,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"D587CD45740FC71EC896D1A886B4303AAA01261EBD82EEE7A34A057F5368D8DE\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"62636522495.38577\"\n            },\n            \"TakerPays\": \"500027359\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"a9e\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rpTLVf85qXWoPWNyeUXnTkc1isdAWLCYh6\",\n              \"value\": \"9999999997999990e-1\"\n            },\n            \"LowNode\": \"a\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"D5B204897C74F46C5BB1A846865AEBD8589992EAAAA34A251F643ED10E907A4A\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"50690453760.81191\"\n            }\n          },\n          \"PreviousTxnID\": \"AA1FF585028526E600F71F5F83A38B7AA9AB45B29B11DEA26D6E7DDBEDAA45E1\",\n          \"PreviousTxnLgrSeq\": 69031479\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rfFmXF3uT3Qc76CAH2cVExQXN6t7KFERu6\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521550F7DCA70000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"4\",\n            \"PreviousTxnID\": \"3D169B5E21CABACB8749A83BEFBEA768F5F9F54B3E68DFEB9E02FC4948D17536\",\n            \"PreviousTxnLgrSeq\": 68909117,\n            \"Sequence\": 66750607,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"D5F80137589E0A408923A0DE6BDA6AA006382640DD3869FEB1F260F917DD15E1\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"35000000000\"\n            },\n            \"TakerPays\": \"210000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rDfGPHrMgjFmWvA3TRkx5rcD85Y9sNizB2\",\n            \"Balance\": \"326355217\",\n            \"Flags\": 0,\n            \"OwnerCount\": 48,\n            \"Sequence\": 67704735\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"D679139311BA0AF406B8DF1FEE066092D7C1F36473BF29BCF638E027DC333B81\",\n          \"PreviousFields\": {\n            \"Balance\": \"152311204\",\n            \"OwnerCount\": 50\n          },\n          \"PreviousTxnID\": \"CAE858D9338E4A3000D0B531B1C8465C157E8BB3E0BAB29DAA41A3C759579AFB\",\n          \"PreviousTxnLgrSeq\": 69062648\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rp9kJTnnfXrjwVFxGRWfjUbJdmxkGP4cif\",\n            \"Balance\": \"2338423387\",\n            \"Flags\": 0,\n            \"OwnerCount\": 71,\n            \"Sequence\": 65950737\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"D69C532329A751ADBE92922419BEC9C795C71089431893BDEA4F78E96E17322F\",\n          \"PreviousFields\": {\n            \"Balance\": \"1526312519\",\n            \"OwnerCount\": 73\n          },\n          \"PreviousTxnID\": \"0AC7C45CC50134D086965A13E008A62B9CD7B9628A14F1DC908E6B09BD8C9374\",\n          \"PreviousTxnLgrSeq\": 69060124\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"10000000000\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"8a1\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rsVD9Hdd3p4LMC7vUwvx75uNLY3d3eiE2b\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"D69E67163274C88EE6CFD0C25394CC50DD23E5E88A88E4B79BA7CCEE1B0B728B\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"20000000000\"\n            }\n          },\n          \"PreviousTxnID\": \"6DBAFA31DF04431A80D24DAB4B6CBEC785A8A2B187BABABFC356B618CD707A0F\",\n          \"PreviousTxnLgrSeq\": 68008736\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rno35bcvBqLMETwksdhSiUuDQquXyoBtem\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520E491404A45000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"7\",\n            \"PreviousTxnID\": \"42272CB514F19553DBB83BC813EB679130905652D57F9EF4FEC5275D28F77194\",\n            \"PreviousTxnLgrSeq\": 69010509,\n            \"Sequence\": 66320168,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"D6B05B3529298663070B01C2B117B2E6E3FFB69EC821027E709BC5ACAF8BF420\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"19000000000\"\n            },\n            \"TakerPays\": \"76399000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rGUKHhcBwNpS8WUqpxNsFW6Yhy6ZwEuATq\",\n            \"RootIndex\": \"D6F86D56C05B551AF23E94FC9D5103FD0C4626DDDE6A75A8219231CD7326A10F\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"D6F86D56C05B551AF23E94FC9D5103FD0C4626DDDE6A75A8219231CD7326A10F\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rpq5MrSjiQgMj3Rk8Kvf1L3Gzh4xp1CUdZ\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36530415EB3D7DE000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"3\",\n            \"PreviousTxnID\": \"9D5B1F8B67009DD6C9F5CD78FF19A3921FA4B41282A0EF512380711EC6FC4726\",\n            \"PreviousTxnLgrSeq\": 68888992,\n            \"Sequence\": 67528316,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"D717D3AFDB29704542023B017851D86B5935F1A4D29F34B12572DCB450E9BFEC\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7800000000\"\n            },\n            \"TakerPays\": \"89700000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"2\",\n            \"Owner\": \"rBMPrNjN4FCHpC3wWAdrorVra71nhSRkuK\",\n            \"RootIndex\": \"5F32B3FAC2601679419448D5B22508C12EDA500D212EA4354D6F307E0612C1D0\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"D7376435C6724BD08F0D0FF61988B77DC2AE53242A837D185CD86376074CB957\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"2\",\n            \"Owner\": \"r3BA8VZ9TV8U5qgd72SX4Ct2iAgQGwcfZ6\",\n            \"RootIndex\": \"B215DB1350EC7729A029AE7D8D505F84D3C53084D618446FD444638C719E8457\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"D7392B6A5768CA4CEEC9724B6F0AD472CC3CEF2FC8D1AFB7EE020E871B2A78D3\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rKMLJSbumUE4mnXET6X1DDFF6JsN8wE8x9\",\n            \"Balance\": \"7527999970\",\n            \"Flags\": 0,\n            \"OwnerCount\": 7,\n            \"Sequence\": 67332299\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"D7601F533F016DA9033B5D0064CCAE4CB6E17791080E9C861908A5F18FE1AE33\",\n          \"PreviousFields\": {\n            \"Balance\": \"27999970\",\n            \"OwnerCount\": 8\n          },\n          \"PreviousTxnID\": \"3E22500DAA4875CF0434B312955B16EF2DAD131CCEE40348AB3E9CD554CB0278\",\n          \"PreviousTxnLgrSeq\": 69058173\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"ra76UpbMwxu2GePpQeV7dogXZUxvn8upup\",\n            \"Balance\": \"117042717\",\n            \"Flags\": 0,\n            \"OwnerCount\": 32,\n            \"Sequence\": 67417545\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"D7A56D937B1693EFBBE0057AD2B8E744E02FED28605A10632B2521A4687E66B7\",\n          \"PreviousFields\": {\n            \"Balance\": \"77042717\",\n            \"OwnerCount\": 33\n          },\n          \"PreviousTxnID\": \"749B8A9CBE31A2E6F9860CEE99CC6A98D68A167A61794BC15FD715C2E1E8D993\",\n          \"PreviousTxnLgrSeq\": 69044573\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rDrVDF6etbhSYtnBoqxbRd4CyGHQ5YNR4z\",\n            \"Balance\": \"484319092\",\n            \"Flags\": 0,\n            \"OwnerCount\": 77,\n            \"Sequence\": 67610498\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"D80F96D3A9D131BD1F7C96B285E818523D145761FB02E762769F612C4178A08A\",\n          \"PreviousFields\": {\n            \"Balance\": \"409319092\",\n            \"OwnerCount\": 78\n          },\n          \"PreviousTxnID\": \"85E0103CCB26C8E7C61023E21572C85A9E8AEA176750DD9EC6C29F0904F276FC\",\n          \"PreviousTxnLgrSeq\": 69042278\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rLK9N8ay11j21CKs3ryC5kp7SYR5piJByc\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521C6BF51F195426\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"5\",\n            \"PreviousTxnID\": \"D3494F2E2BCA42907CB05D4E018220D1367137B63A9A00368973F11D19AE151D\",\n            \"PreviousTxnLgrSeq\": 68887403,\n            \"Sequence\": 67342132,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"D82F4F78C4B57C2147279D1168ED7C528376146EB76599A7EB8B52D0056B0AF3\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7785989866\"\n            },\n            \"TakerPays\": \"62287918\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rsZ4iqWpnTmdfE4nDDEiaGAn8z97ZV4Zm2\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521026111AE8A3FF\",\n            \"BookNode\": \"0\",\n            \"Expiration\": 726991923,\n            \"Flags\": 0,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"DB8FD1D0B6691660AC10A938EBA7E1AEFDEE25781A38A5217262380196FE7502\",\n            \"PreviousTxnLgrSeq\": 69001636,\n            \"Sequence\": 68647787,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"17694624518.96603\"\n            },\n            \"TakerPays\": \"80430111\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"D83909BA6A049C7614536372009DCECF30CA47F98C9D553249783FEA8714DBE2\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"22000000050\"\n            },\n            \"TakerPays\": \"100000000\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rKso7KmktCCYBfe79sNAFnfKffvansBBRz\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521FF973CAFA8000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"6\",\n            \"PreviousTxnID\": \"B15047AFF0B83C3115DF065A7599DE6EA4779F062827754B7169C52D8C3116E6\",\n            \"PreviousTxnLgrSeq\": 68152239,\n            \"Sequence\": 67328483,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"16000000000\"\n            },\n            \"TakerPays\": \"144000000\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"D848AA21973212C7650925898BD0EC483DE94C079C7A5B2FA6D105AFCBA614DB\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"1\",\n            \"Owner\": \"rLzgqyEetWAoARj7XcpWExwpRCvYq5zHi6\",\n            \"RootIndex\": \"C014BABE56CC7D50F3F6EDE6A4AD421B025A5575F5537DE2E40D07C3ED867BC2\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"D850D8C271B7D71A8C7967507B16C41C9750164D1433CB06425E9DBF02523858\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rwuaSP5dsGLmc6gNnv3bWEjmtkexmA4H3G\",\n            \"Balance\": \"9771243922\",\n            \"Flags\": 0,\n            \"OwnerCount\": 119,\n            \"Sequence\": 67153814\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"D85E4E503086E6AB42EB914D0A3A8FAC5518901FE65562DF08A78CABAC65BC3A\",\n          \"PreviousFields\": {\n            \"Balance\": \"1362374867\",\n            \"OwnerCount\": 120\n          },\n          \"PreviousTxnID\": \"ABBA7F210211453EFC9BAC35A35A5650C277FD3A5F88CDC88EA31CB5F3510A0E\",\n          \"PreviousTxnLgrSeq\": 69040963\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"3\",\n            \"Owner\": \"rwyhjUuEiNmgv4AG4ptie2eAWqN4kfraxv\",\n            \"RootIndex\": \"83E554D5DB56D78E3EF9E0A9EE9AC072F330EE2C12CBE8A9A91A35EBCED7E2A3\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"D8771EDC8602179D9591D16181D5E039A6BA3E4EF1A8B350ABB0DCEECB000DA8\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"16918525174.51235\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"ede\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rfFFmdT4f2Qj6gSS7daVrQDpJw4tF62Ke2\",\n              \"value\": \"9999610698104599e-1\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"D88AAFFEFFA9DD0F199A394DB23CD83BC1C75431A7F7E0642EB08289AE722C8A\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"31918525174.51235\"\n            }\n          },\n          \"PreviousTxnID\": \"9D80CA0B235D902B1A997716C85793E5394EF1083E8AED57C0D684BCB584EB81\",\n          \"PreviousTxnLgrSeq\": 69002039\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"2\",\n            \"Owner\": \"rGRyfRcJ7cSYSu6rw5VpNJReEZt9Gzy9a7\",\n            \"RootIndex\": \"A84E96499A7672D22BBC809E15BE6C7AF5F5754462DBE246FCA564DE0499D669\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"D8DCFD199B374C1930D74B52DC45918BC169AC36EEDFA479505CAA1742BE6F2B\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r4KVUoogBDoZS9NZAzs37JTgpCoCwbBsSk\",\n            \"Balance\": \"176999376\",\n            \"Flags\": 0,\n            \"OwnerCount\": 38,\n            \"Sequence\": 67523041\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"D8FF9A9BB757D00CAD9FD82481AEE752E6A0ADE47A66E65CF469E62592D511C5\",\n          \"PreviousFields\": {\n            \"Balance\": \"150706877\",\n            \"OwnerCount\": 39\n          },\n          \"PreviousTxnID\": \"7E49304617A2BF5E92C3B0CEDD16B54B6FD9D53773FA9D263EE2070FFB1F0CD3\",\n          \"PreviousTxnLgrSeq\": 69061777\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"d\",\n            \"Owner\": \"rnYFf4DWQj3Eip1R5mVvocQxtcBcvTvRo7\",\n            \"RootIndex\": \"418A4755DC3A9AA54BFC1B2CFB262CD85E63CEF774F58DB05FAB8B62F138785F\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"D9035EA682AEBC44ACCBC27162654CDA6E9C9C2AA49DAFD58BEC99A68A57B6EE\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"30500000000\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"b03\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rfBvZMQKX3gxybSQAt116zqUxXKu7a8BmY\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"D9117E3DF3BDDEBF6AC23A8593C6CDB0D11AF467EA104B56AA1EBDF862108568\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"52984865427.35906\"\n            }\n          },\n          \"PreviousTxnID\": \"C1CFE2BD8E01A493419EA51348130A8ABAD1A1DD56DA59FE20C387896BF3382E\",\n          \"PreviousTxnLgrSeq\": 69044440\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"2\",\n            \"Owner\": \"rQDGBD8WCV3szWgH9rvyhjPHPX66KPGVnd\",\n            \"RootIndex\": \"0D153DF9DBBF66F333E86D8C71EB5817DC187F8FE208FCF7D578FB95A7C1AA9F\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"D931028C2E3BDA75596087832520087920B624BE242AFBD0072802F0100FD78D\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rGa2XHaY793GMxMeexFcabjrc4w5vyrmPJ\",\n            \"Balance\": \"230627653\",\n            \"Flags\": 0,\n            \"OwnerCount\": 60,\n            \"Sequence\": 68329288\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"D931F677042F76BD1CD5EA53B563C81998E4F6D83D00C174667C1F0F10B3CA64\",\n          \"PreviousFields\": {\n            \"OwnerCount\": 61\n          },\n          \"PreviousTxnID\": \"81C5A3FB63363AF823526F6C9352949B780BC90A9D2E0A469935A193C6DF4C49\",\n          \"PreviousTxnLgrSeq\": 69060229\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"raf2m8Ki2PVqjTU3YsKK5R62dAhiYXepcz\",\n            \"Balance\": \"588769330\",\n            \"Flags\": 0,\n            \"OwnerCount\": 97,\n            \"Sequence\": 66240376\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"D95659214EFFDB23D8A7697521AA56F141ACFF5F4DB7AB9426A5D67AE905B6B0\",\n          \"PreviousFields\": {\n            \"Balance\": \"213769330\",\n            \"OwnerCount\": 98\n          },\n          \"PreviousTxnID\": \"370141B3140CA46BA3DD95B2D4F94012D24AD833FF5F7FD058071A8E4179FF83\",\n          \"PreviousTxnLgrSeq\": 69063965\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rBE6UN87gwvyAuud7dSn2d6zdBUWCjgqRG\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36530CB7FDB44B2703\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"1\",\n            \"PreviousTxnID\": \"2FE4B1D7B39DD4ADDD402BE880B24BC4C6D2BB6BA0BC342866FD8FD1120D3C8C\",\n            \"PreviousTxnLgrSeq\": 68798341,\n            \"Sequence\": 67882060,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"21393102921.90061\"\n            },\n            \"TakerPays\": \"765873084\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"D9575ED57FC62291B1F1DB13B7C388969B3D7AB842D1628F7DBE3DB59FF4873C\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"27951950000.30579\"\n            },\n            \"TakerPays\": \"1000679810\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rsRPr4ZrFePB3e3SVXBMHpwLCfc97qZq7p\",\n            \"RootIndex\": \"D9887139D4489D414A1F1C23BA8C5E1D0907CED117FAA9A18AF0F5C2509473A4\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"D9887139D4489D414A1F1C23BA8C5E1D0907CED117FAA9A18AF0F5C2509473A4\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rhhokxTQGXV3zHGWJqy1SiJ19yYTSFeGHU\",\n            \"Balance\": \"921377273\",\n            \"Flags\": 0,\n            \"OwnerCount\": 39,\n            \"Sequence\": 67971524\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"D995AD8C445BAE95E11AE46EF8EED5EB83A355E7E7D373C0DA8C0E673909B5C4\",\n          \"PreviousFields\": {\n            \"Balance\": \"116161752\",\n            \"OwnerCount\": 41\n          },\n          \"PreviousTxnID\": \"C6F03DE78A51C5F8E805B954AAF63C860B878DF1776525FF8AA3FE3879F94574\",\n          \"PreviousTxnLgrSeq\": 69054603\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rhhokxTQGXV3zHGWJqy1SiJ19yYTSFeGHU\",\n            \"RootIndex\": \"547559F67012C957E6A228A7386FBBE51085DC8AC65874F5E8A72AF2265C84EF\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"D9A8DFCB54458970457A4B4110D66F45166B1950337CFFFF2028D62DFD980035\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rHjXAcTNUKjFvrozV8KizwezuEk9tnhqwF\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"c44\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"D9B41650FBE5193793FB428EADF3662C203F683A5522C0BF038D038A739A7608\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-93431878392\"\n            }\n          },\n          \"PreviousTxnID\": \"676555F24390D06C0D1CD2DDC53A3EA81C0A92CFA86761838530EA71E99A00D5\",\n          \"PreviousTxnLgrSeq\": 67993409\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"9e\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rBCS9nAyaFuM8LDym5gJGRxEqmmH9mRhxW\",\n              \"value\": \"1000000000000000\"\n            },\n            \"LowNode\": \"1\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"D9C305058EEDD77755CA1FF33A5EA7AF3507EB2B267051FB7C92F242C22192BE\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"1160000000100000e-4\"\n            }\n          },\n          \"PreviousTxnID\": \"3689C71B44808467C1DEA8E11CE1C301EEC98BBD867A63DF18BDB4A97FC621C5\",\n          \"PreviousTxnLgrSeq\": 68479901\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"8\",\n            \"IndexPrevious\": \"6\",\n            \"Owner\": \"rfnaFsTkxCWYtenT3MxsFxjjrX4F7itNzd\",\n            \"RootIndex\": \"AD76F0D28735B56964A06E2EFBFCFA189FF574B28441B57584A38ADFB255B36C\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"D9C8747116645827E63FFC91FFEB24598C3BA7983468EB620D62B7571469443E\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"1\",\n            \"Owner\": \"rfBvZMQKX3gxybSQAt116zqUxXKu7a8BmY\",\n            \"RootIndex\": \"9C3DD226AC51C8C86EAEDD68D82521B499EEB42D63C2D3967D7D18EF8762AF42\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"D9F4C4B1427B2E8D8E03AC7227D23C1769C5662DB783409F0236DF4E041262B0\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"1\",\n            \"Owner\": \"rfzxSb2zMhKDqCsD81pZt7Bjkvak4NBwFx\",\n            \"RootIndex\": \"4FF70DBD786C45192D180C6A6BE109AA83482180250C6392FCE9DC183AAB1C93\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"D9FC514428635022583A21F919769378AFB77AA269CBA8CD97BDB1DB4E875D49\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r4szgdizaCzaf1H9hBme8BYyQPhf2CbvXC\",\n            \"Balance\": \"447156096\",\n            \"Flags\": 0,\n            \"OwnerCount\": 167,\n            \"Sequence\": 67374746\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"D9FCC2279E0657D88448CC29586C8990B8D88B5F6A92B62AD6041F06D04E27B8\",\n          \"PreviousFields\": {\n            \"OwnerCount\": 168\n          },\n          \"PreviousTxnID\": \"E6ABB4E9719BAE6798412E129D66785349CF556021A9FD4B2E81894CE691FD94\",\n          \"PreviousTxnLgrSeq\": 69063864\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"2\",\n            \"Owner\": \"rELkNgURGeR4vEFUEYHNATaS9pwPk4KFEm\",\n            \"RootIndex\": \"2A6288EBDA89E3F06C4381AA313EAE8D181B24AF317BEF98220D7E214689B910\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"D9FF0F505420679D6FF7BF24E927B4E654C8DA2996C8DAF30161863CBA33B24E\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"97c\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rU7MhPtUbjCow4e3Hoqxv9PVQ7ebo3mLen\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"DA2403337272BA8E8D9C2917A4B4AB659AB4601224754CDCFCDC8F60C56FD37C\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"7785989866\"\n            }\n          },\n          \"PreviousTxnID\": \"34FDD5EDB31ACC9E97FE77567823669B215622AE74CED583192A86AB78061C0B\",\n          \"PreviousTxnLgrSeq\": 67991839\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rGPEKNaNPYojt4sFbUzodh9SUNxixCwoBC\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521717B72F0A4000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"2\",\n            \"PreviousTxnID\": \"713A47BB313F05AA0BDCBCFEBB71C2ACA07BFF77908B8E74BE9F853680BFBC8A\",\n            \"PreviousTxnLgrSeq\": 68899733,\n            \"Sequence\": 67759700,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"DA29C0B2B8539CA72300D4F8AA47224540A639BB0CA7DC9991000EBB5EFC91ED\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"20000000000\"\n            },\n            \"TakerPays\": \"130000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"c1e\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rBCcUJicoai17VVsbUKJ7BGqDa7dQ3549N\",\n              \"value\": \"9999999997999716e-1\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"DA5BEE34313731C9B50C9C9DEB8CA157FCE35F3472412592F5399EA1F966E473\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"34686189866\"\n            }\n          },\n          \"PreviousTxnID\": \"59656CD743F534862B89600BCC26EF1FBA0784B18B1656314970551E25C5593A\",\n          \"PreviousTxnLgrSeq\": 68967452\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rLV3c2Bymn4fq7kyrqysEd1ddizDxvwS1m\",\n            \"RootIndex\": \"D33A50C61957D523AC0692C327FB725E92C9442A3C0783B6966FE4775FFD8FDD\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"DA6BE87B519F05B7839AD9327B5B17858943CC35B55A3892AE9BB6D5ED5A54C1\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rGBdiULuYdTBGGX2JWzmjRXscUacAHsm3i\",\n            \"Balance\": \"541250501\",\n            \"Flags\": 0,\n            \"OwnerCount\": 185,\n            \"Sequence\": 67472015\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"DAB263A445D59C899620DF963F8CAAA1E64E9FBC39A897F2F342521F1D9BF9F1\",\n          \"PreviousFields\": {\n            \"Balance\": \"468702620\",\n            \"OwnerCount\": 186\n          },\n          \"PreviousTxnID\": \"4FB151234CE2DB87B589C1155065C5D6AD038E4FFF09F345A09D42D7A0693504\",\n          \"PreviousTxnLgrSeq\": 69055108\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r9guPT5E5ZDd4hPpLJC6UnXCGoRB8tZ2Jr\",\n            \"Balance\": \"750370300\",\n            \"Flags\": 0,\n            \"OwnerCount\": 183,\n            \"Sequence\": 66262580\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"DABE57732A558E33B07C78D82FBEF8FFC505F889B98D5CE2F8B07F23E79B33B7\",\n          \"PreviousFields\": {\n            \"Balance\": \"451694466\",\n            \"OwnerCount\": 184\n          },\n          \"PreviousTxnID\": \"75B66EA52B65849D8D6AA69C02FC51286E4DB718DAD07CAE790D963631DFA1C4\",\n          \"PreviousTxnLgrSeq\": 69062826\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rHkAKrt7sjtM7vfLuUmVeJ98jp42mstkTU\",\n            \"RootIndex\": \"DB041AE19EA1F2CB71DD02AA4A55C51BCC0C0DFE186843F924CBF58D27DE4AC1\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"DB041AE19EA1F2CB71DD02AA4A55C51BCC0C0DFE186843F924CBF58D27DE4AC1\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"8\",\n            \"Owner\": \"rD5TVx1akARpWNKumsadd69Wask2L69v7E\",\n            \"RootIndex\": \"9D60DE0B7E5634BB6478CE270B2A1DCD9697E715AEEAE2FE790D28958B771C06\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"DB0FBEF519E4A1E1B9B05155BBB7770442A0C81516BB115D529995BD95ECD16E\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"6\",\n            \"Owner\": \"rEqtQj662PMqja6Cb3pyK5V6xi2RGbcFxD\",\n            \"RootIndex\": \"268F6EA48A0DB75EA0EC76970EB4AE1DA30C34BE8723A509E1EF28522812FF30\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"DB2BEB5A7A21D0C3222F0A6FC52EA1DB6E73C0C2D9B1AC1197F926C992EC4D45\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"e9d\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"r3PYAn9d1DTFzJ9kuvFnhudgwsVZ6pm5hT\",\n              \"value\": \"9999610698224571e-1\"\n            },\n            \"LowNode\": \"6\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"DB354DA8A8D3FB83C5DAA3CABDA2F28A3DCBAA0D54250605558848086A6AC9C1\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"1370092458610283e-3\"\n            }\n          },\n          \"PreviousTxnID\": \"2A7C22F1828F3B0D0B460032011033F17BC1A38A103F5F1E893C87652F060852\",\n          \"PreviousTxnLgrSeq\": 69035653\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-59836781628.249\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rMX68jd5whLXjPmrgvjHYKwZHcbQ3HiYuV\",\n              \"value\": \"1000000000000000\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"670\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"DB3ADF75620C031FFBA4AABD00FE9411EB77FF5AB79E1C02F654FCEC0AA740FE\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-1149367816282490e-4\"\n            }\n          },\n          \"PreviousTxnID\": \"87C99AD51179943B14EC08C6339D1DE85DE494564DA9EDA5A11D8A17143CD956\",\n          \"PreviousTxnLgrSeq\": 69003884\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"15575802303.73057\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"d54\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rBzk3TdhfdbidCHeKWfmQ5dy9AuAtGbXeY\",\n              \"value\": \"9999999999999990e-1\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"DB412140129609E602627A2CD3EF46B4A088CF5EFB94CAFE82CE8EC341160E2D\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"32329313567.72859\"\n            }\n          },\n          \"PreviousTxnID\": \"0889E88F8756CE2CFBE7EE477DF45C14E96DC26E51AA55B31E03FF023A912A6B\",\n          \"PreviousTxnLgrSeq\": 68998813\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"7e\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rp6kmTUHj7Q6CeSZDrqNLRbtvhdbb6N5gY\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"LowNode\": \"1\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"DBA0C3718EBA9A02C9AB179A1DF095450EDA7B9A3A4F0B028A5E0EE3378BCFA3\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"7785989866\"\n            }\n          },\n          \"PreviousTxnID\": \"6239E55D06801771880245FBE80FD18B98C185CAC489BB3231BA1D6C6D7AFF28\",\n          \"PreviousTxnLgrSeq\": 67948391\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rHv2LE2MKKrQ83NMbQ2vv1DUDjByosxthL\",\n            \"RootIndex\": \"DBA91302EE48ABBCED5A0C5432D339EB92E1CA72AEC970A8D1C4BCACB1357DE4\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"DBA91302EE48ABBCED5A0C5432D339EB92E1CA72AEC970A8D1C4BCACB1357DE4\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"4\",\n            \"IndexPrevious\": \"2\",\n            \"Owner\": \"rP7b2urRNSZ6dfigtcEaChxF14R3kK8djd\",\n            \"RootIndex\": \"B12325434CF43805290AD5A0D2F314D21BE2EED106352DE89ABE3D9B3EE7DD17\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"DBC29A348E599BE3FEAE64BDBC06683456F8AB8CBABD39CAAAB8D96AC92F5DD1\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"41\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rwmZ1gXEQzFAzzEmYyGjHDhmccg5SGj7WS\",\n              \"value\": \"1000000000000000\"\n            },\n            \"LowNode\": \"2\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"DBF5345B90072C80325004D39FA076410F93670F32F0B55B40D5EDCC26538FEA\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"8570105384.5\"\n            }\n          },\n          \"PreviousTxnID\": \"ACE91315EFAB5221D4B3AD6897CDDCA99F9AEDE7B90584C8A64F8C2D137377DB\",\n          \"PreviousTxnLgrSeq\": 68944464\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rLkhJhEaChEegzryMAeps63ghhG1yXzifL\",\n            \"Balance\": \"10626198189\",\n            \"Flags\": 0,\n            \"OwnerCount\": 6,\n            \"Sequence\": 67426008\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"DC01710A12D9E59AC076589B10AD3F40D943D6E6463986D949727A309D637327\",\n          \"PreviousFields\": {\n            \"Balance\": \"4129896255\",\n            \"OwnerCount\": 8\n          },\n          \"PreviousTxnID\": \"BAE24BF37064E2D87E987C5D9DD1B161F08DF6DA23D1D6ED59E91DDA8C2CC3B1\",\n          \"PreviousTxnLgrSeq\": 69047074\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rEm8Pg6dKSuFWvEJK2Fnv8EvmkSTuNFJew\",\n            \"Balance\": \"126700403\",\n            \"Flags\": 0,\n            \"OwnerCount\": 25,\n            \"Sequence\": 67761579\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"DC693E5D2797D00800ECBE4BB409C4AF94B9611BD2CD122733674391B7F69686\",\n          \"PreviousFields\": {\n            \"Balance\": \"66047542\",\n            \"OwnerCount\": 26\n          },\n          \"PreviousTxnID\": \"1932180EDDD1669CBFFB0E69703E55F5BADBCCF2F8FDF54831A3E623E63EB6F2\",\n          \"PreviousTxnLgrSeq\": 69043983\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rPfw6T9Nu154bW5Yqyd351rebEphbe3Fhm\",\n            \"Balance\": \"3972572292\",\n            \"Flags\": 0,\n            \"OwnerCount\": 9,\n            \"Sequence\": 67371482\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"DC8F6FB901B363C7F6E27F50ED598E9B20933EC77E23F4EDE1000E3BCCBBE861\",\n          \"PreviousFields\": {\n            \"Balance\": \"77442842\",\n            \"OwnerCount\": 10\n          },\n          \"PreviousTxnID\": \"CCD8D6CE4CFB9F3BA7B454BBAC75594ECF79A31BDA20AA2900E9808611FFCA05\",\n          \"PreviousTxnLgrSeq\": 69061239\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rpTLVf85qXWoPWNyeUXnTkc1isdAWLCYh6\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520AA87BEDFE7B42\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"12\",\n            \"PreviousTxnID\": \"CD986945135D97A8D512C31CC3CE5D22CD812B7D786F99092446347732A778AE\",\n            \"PreviousTxnLgrSeq\": 69039647,\n            \"Sequence\": 66958499,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"DCCB8934E89AF640FA92E829CEC813D2D4E66361A773D2FD55E2AA7349617D57\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"50690453760.81191\"\n            },\n            \"TakerPays\": \"152071361\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0.00089\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"75c\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rpRu4PM7TpS2K481Ac6ESUDRf5QmAfc6M2\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"LowNode\": \"1\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"DCDA8703EB3BB76BC0370427A3DC34B34EF741966A58AEFFE05B85D4B21CE4E9\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"62636522495.38666\"\n            }\n          },\n          \"PreviousTxnID\": \"65FC4E5C83B77C13056BC6AF748FD5CF55329089AA977B831F1FBBD1ACB8FDC1\",\n          \"PreviousTxnLgrSeq\": 68671077\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rUyceekfg9mU133ecSKptNTpj4nYnFMi58\",\n            \"Balance\": \"533757697\",\n            \"Flags\": 0,\n            \"OwnerCount\": 196,\n            \"Sequence\": 67405033\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"DCED78533FF2186BB06B2B6B32AD07B31B468AA2C4EE795DC5F1FDEA45A210E2\",\n          \"PreviousFields\": {\n            \"Balance\": \"508757698\",\n            \"OwnerCount\": 197\n          },\n          \"PreviousTxnID\": \"8533F65F955286582C3CA0B99DE9B181EB4DDDC076BBA19CEA0619C5C8FDFBF4\",\n          \"PreviousTxnLgrSeq\": 69064003\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r4oX1kuULiPWPRA2hwV1R7K8kB9gUxqTtv\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521C6BF526054994\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"5\",\n            \"PreviousTxnID\": \"5B1D7AB8761178D4C1EA186FCE1DE2815F0ECCA3870EDC388464C229CECF7731\",\n            \"PreviousTxnLgrSeq\": 68924507,\n            \"Sequence\": 64612992,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"DD1E865EF22C6B0385254953FF0A7E64F9BCD67C3992EDEF31A1943DEB0A5FF9\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"63189677024.18076\"\n            },\n            \"TakerPays\": \"505517416\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rHHviosMrm1hi4Nfm7MTipMw2oeEQRTeod\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520E08810AB6BA60\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"c\",\n            \"PreviousTxnID\": \"6E0C3354A279764646F674FF4924C92B8FDA9E7E04F1520D6E5E33D87011382A\",\n            \"PreviousTxnLgrSeq\": 69005497,\n            \"Sequence\": 65851910,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"DD3D9B0FD681DF5383CD27ACA566A6DCCF278C4C3F6D3AB3EDC72AE2496934B6\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"4000000000000000e-4\"\n            },\n            \"TakerPays\": \"1579999999\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rLC5cTyVFPDTN4nuTcM9F2MAzhbkS7a78Q\",\n            \"Balance\": \"120829007\",\n            \"Flags\": 0,\n            \"OwnerCount\": 24,\n            \"Sequence\": 67761564\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"DD73091817C7C5B3B5A93D1A81EB9710A01447CDE230C26B7A02CAE33B791B85\",\n          \"PreviousFields\": {\n            \"Balance\": \"60176146\",\n            \"OwnerCount\": 25\n          },\n          \"PreviousTxnID\": \"A3974C34DE6838ED67D661859B7C4AB045F5BF733AFF5FCD1FDB7BAFB8DB8696\",\n          \"PreviousTxnLgrSeq\": 69043953\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"2\",\n            \"Owner\": \"rf7hbrdWs2saBvmLubvuzHJuDhDwJf2Fuf\",\n            \"RootIndex\": \"F4EE25DE003B423FA80F05E7BAB2DB928DC5BFC17DEA7FE9615655975A32D167\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"DD9788D3CAA096862DAEFA05CD944958F87564615BE89DEA425BCD21DAF7DB70\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-80000000000\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rPBCCKXYaB9eBeVKenvGeGKywHUVHFQmSS\",\n              \"value\": \"1000000000000000\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"5f9\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"DDA9CEA893A4BB5F2F1DFB90F6A14BB84D0271DA01DD0C8571B89EE1432DF387\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-90000000000\"\n            }\n          },\n          \"PreviousTxnID\": \"CE207A497A10FCD735EA5C45C4C9B93C4DBD95A51FDE62FE89EC561B471B1DC1\",\n          \"PreviousTxnLgrSeq\": 68898909\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rB7sr2UvCBewPJXg9My4kjDFWDF9URdRuJ\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365217BF8EE56570FF\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"3\",\n            \"PreviousTxnID\": \"70557FF322026052EF9A7CA8695860B8521ACA2F630ADA55A9A687ADB0A713FD\",\n            \"PreviousTxnLgrSeq\": 68899773,\n            \"Sequence\": 67712956,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"DDC4C57D70997FE08DF919551CAB6DDE5A39776A32D6ED67859A43CE7D7D0009\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7785989866\"\n            },\n            \"TakerPays\": \"52045799\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rwFqpfxexbDa1fUuG87ceDdbe1JnugjWUV\",\n            \"Balance\": \"700021280\",\n            \"Flags\": 0,\n            \"OwnerCount\": 188,\n            \"Sequence\": 66775824\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"DDEC08F945472ED48FB22091FF0503E2AE6B03A21263B2C512999881A028A6AB\",\n          \"PreviousFields\": {\n            \"Balance\": \"388581686\",\n            \"OwnerCount\": 189\n          },\n          \"PreviousTxnID\": \"7341F3B38E38012EB952A61A7170D6812CBB03662835FC929A66B5EC7877E407\",\n          \"PreviousTxnLgrSeq\": 69061642\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rJmWpXLdftZbNdPMYkezgKmEya6R6cAt7T\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520FFCB9E57D4000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"8\",\n            \"PreviousTxnID\": \"0151E33F72D7FF0DBAA3FC35D28D4C2FBD0DD114684B738B851682E155B2D92E\",\n            \"PreviousTxnLgrSeq\": 68997843,\n            \"Sequence\": 66801940,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"DDFC884E806AB25252A480060E78F4DF8C49AD1390EA445AD95D7BA873861E5A\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"5000000000\"\n            },\n            \"TakerPays\": \"22500000\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r9bsFjjrcnmfwEe83kG4LNhBUAcL3af2Bf\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652185609E7B1F881\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"4\",\n            \"PreviousTxnID\": \"EE5328FBDA3DAF0DABD9746F345A20D0FC98263C50C2A36E4AA60DEA8B2CFF08\",\n            \"PreviousTxnLgrSeq\": 68901627,\n            \"Sequence\": 67373381,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"14814768066.07065\"\n            },\n            \"TakerPays\": \"101481161\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"DE720C14A5139844938BC20AB05F40418D6ABFB0C1BC1E50B86D3228200EF9B9\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rUNU8n4sX1Wo1ksPNPQheA5s6nZCe88iPW\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653044364C3223E89\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"1\",\n            \"PreviousTxnID\": \"A298E9263785938037A3FA4208A9DB0720BB6BE34CF69EFFB32D3097F774A1C3\",\n            \"PreviousTxnLgrSeq\": 68887595,\n            \"Sequence\": 67719854,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"DE8B336EDAC05DE0C6756C48FCF01FBF9C1F2DA762FF23BA2E351044102669A4\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"1557197973.2\"\n            },\n            \"TakerPays\": \"18686375\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rEay1pxUyiL4ru86hJLv4bKCzwm8EL4Mzw\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365218DE76816D8000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"4\",\n            \"PreviousTxnID\": \"3509EFF5A8CDB971F4A82CFF872FD50195AC35241C7A41E7E9B79E885DAC9321\",\n            \"PreviousTxnLgrSeq\": 68920604,\n            \"Sequence\": 67325229,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"DEA35D7E0EE11418BF67CFCF92B26120B370B7D3C86542E15D68501CC49C490D\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"96835000000\"\n            },\n            \"TakerPays\": \"677845000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rw4M6hoNYisxYmeppD3bkmf1TuTcQrdsit\",\n            \"Balance\": \"334403081\",\n            \"Flags\": 0,\n            \"OwnerCount\": 93,\n            \"Sequence\": 66944038\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"DEE249204D363AE09D5CA232EC265378443C8C434DB08C5DC3FE26F28970FC04\",\n          \"PreviousFields\": {\n            \"Balance\": \"249403081\",\n            \"OwnerCount\": 94\n          },\n          \"PreviousTxnID\": \"BCE59C76B035090E32B1E69F246718767FEC51122E19D690949E3AD66A413C1A\",\n          \"PreviousTxnLgrSeq\": 69052130\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rHjXAcTNUKjFvrozV8KizwezuEk9tnhqwF\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36531FF973CAF5ED5C\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"07EE253471004121E900776190938E3D07C0524F4491586539693E6AC9281678\",\n            \"PreviousTxnLgrSeq\": 68864051,\n            \"Sequence\": 67016809,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"DEE98ED9C34274E73AAE5901BF369831AC9C5D08D98FCB5F7D8CA57B38C726E7\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"93431878392\"\n            },\n            \"TakerPays\": \"8408869055\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"f08\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rfqL99qLpPmC72SjLCaytr5g27EUH35RyB\",\n              \"value\": \"100000000\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"DEFEB3C770FB683A5BA4E802DE678E765F4684C95B68D45428C360115A2C2CFE\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"1372702310.084407\"\n            }\n          },\n          \"PreviousTxnID\": \"1AFC25FE8D6FA718C0D127B0EE3287CD68323546D214B00762E952515BED8D99\",\n          \"PreviousTxnLgrSeq\": 69030107\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rUkBkCrKSXyNbUcj7hNC684Z2TrzouvZBr\",\n            \"RootIndex\": \"DF08C1B165581DC397ADAA4521261618E0D652A1917825484382C9267459DAD4\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"DF08C1B165581DC397ADAA4521261618E0D652A1917825484382C9267459DAD4\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-10000000000\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rKBwHqR3S55CpYFoX1bucD2PFMgSjPAFvu\",\n              \"value\": \"1000000000000000\"\n            },\n            \"HighNode\": \"2\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"62\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"DF32273F7E3ACE150E616CDAEDFFABF06FCA128EE073A8C726B115810B5C4EF5\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-45000000000\"\n            }\n          },\n          \"PreviousTxnID\": \"CB2E3B11CF383DF48358E7B7A5E119CAE17A41BED50D8E173556D23A459EF9CD\",\n          \"PreviousTxnLgrSeq\": 68960075\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rpGhnBcEyRdDNyy4AD2BwyZgWE4ERu8eqC\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521FF973CAFA8000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"4\",\n            \"PreviousTxnID\": \"8E32B6E7F020C67EEDA8124BDE8433CEC9F3D5761B0156DBF5BE391E37CA0281\",\n            \"PreviousTxnLgrSeq\": 68855708,\n            \"Sequence\": 67343010,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"DF71A481F5A382C51F856CF66F1BCF8AAC92FA036076305F8735465DF248BE3F\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"2000000000\"\n            },\n            \"TakerPays\": \"18000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"eff\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rsZ4iqWpnTmdfE4nDDEiaGAn8z97ZV4Zm2\",\n              \"value\": \"9999610698104581e-1\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"DF93D1F864AFE2024D208FAF24F7C5DEE781AF446574236E29BA0BD1E3D00C6A\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"4305375531.03397\"\n            }\n          },\n          \"PreviousTxnID\": \"8DBFBC3A449AA85D99080281BE6438C1AB1DBB57ED53EEDACAF42870198FA8C2\",\n          \"PreviousTxnLgrSeq\": 69055885\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rKB9EELQpLTeDNb3H5HJT7QbCPdA1NzDQ7\",\n              \"value\": \"1000000000000000\"\n            },\n            \"HighNode\": \"1\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"520\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"DFBD289A04B1DB9A43D559FB2F854097E20A21B7AAED5AB43E12136F97AD9418\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-86829360313.06875\"\n            }\n          },\n          \"PreviousTxnID\": \"F5284D8B19CB1B938F0C2D294A6A41331F25383A5D7B3650621A2F12EB202C03\",\n          \"PreviousTxnLgrSeq\": 68805233\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"7\",\n            \"IndexPrevious\": \"5\",\n            \"Owner\": \"rwCDD5H9MDWdQE4y15hzipJWXjZpoZWPgL\",\n            \"RootIndex\": \"5C497004025E481D99951F27D169B3A9A7836E83D5BF283C3947FB333CF29E9A\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"DFC85D8958649303487713A26C25BF044F09ADEEDFAC1D3904833C34F6DCCBAD\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rLgitcbChWYinjw7tiwK6wQw2mN6pEyWzw\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652121E6C485A47A1\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"49185BF88702E80545BA375DC09EE9B3F865388E4634B09D4B72889BECB14641\",\n            \"PreviousTxnLgrSeq\": 69041979,\n            \"Sequence\": 68303392,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"DFF7D32F01605A2724E483C82D26F4E059D03E6069C5018F3E1388BA579B80AE\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"2093286085895001e-3\"\n            },\n            \"TakerPays\": \"10675759038\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-10000000028.00811\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rLN2tJYrH11YA3EqyNw6csgsBEnZ9TeaWF\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"HighNode\": \"1\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"8af\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"E025CCC26F285900290B8E2E6613D0D0F2721F2E1AF95628DC46F75E1F471D29\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-20000000028.00811\"\n            }\n          },\n          \"PreviousTxnID\": \"7F8D4F6F86286F174177FAD7A617BFFFF4004E1459F8A05A68061103BDFE2B29\",\n          \"PreviousTxnLgrSeq\": 68933433\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rE9hwGp3avccRZY3PerkKL1cJ25z9X22QZ\",\n            \"Balance\": \"227223049\",\n            \"Flags\": 0,\n            \"OwnerCount\": 61,\n            \"Sequence\": 67489335\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"E029A18C7B53A82203BA76EF4242B122ED56C1CF3039A07355831D017F38D062\",\n          \"PreviousFields\": {\n            \"Balance\": \"156503252\",\n            \"OwnerCount\": 62\n          },\n          \"PreviousTxnID\": \"055987671FC2FD6F1EEADEE882830781F66BA6EDD8FC2CCEC28C2A260746EB8B\",\n          \"PreviousTxnLgrSeq\": 69054285\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rQpXmMNyGKtsYHwkG7Y3n8sXSXo2cmB1Nt\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653038D7EA4C68000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"7509A5E2343CBD58F19D70DC20FB819C52C8866F792C55B72A78A2669947EE75\",\n            \"PreviousTxnLgrSeq\": 68897310,\n            \"Sequence\": 67709970,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"E02DBDA97E34CC85189450B5736460AC8DBED23A8A0A27CE12DDF7C523DBB1B2\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"4200000000\"\n            },\n            \"TakerPays\": \"42000000\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rwhKYMZGMmf9zeLdZWq4rs31DQeaxn65R2\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652227619283ED8BE\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"6\",\n            \"PreviousTxnID\": \"ADAE16478CD9348AEC40BCDCC7FB61FDF362EE2CD57B3C92936E230F6F0F75CD\",\n            \"PreviousTxnLgrSeq\": 68897062,\n            \"Sequence\": 67373478,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"E059658079C9BF8D2E9E42DB1B42FB7791D893C0FC04430CDD034421C9EE9C06\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"2700000000\"\n            },\n            \"TakerPays\": \"26189999\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"5220583333781078e-4\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"240\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rsdrgJ5xtkPpnWfJeeshHZLWmQEMS3cFzQ\",\n              \"value\": \"1000000000000000\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"E06FCD34D3E99DB59C1FD4E6A514EA82F362A70ADB1BD39C5C1228B7C4A129FC\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"5830583333781078e-4\"\n            }\n          },\n          \"PreviousTxnID\": \"D3CDC856AF92D20F70839DED08FE0259F5448A4703691E13A9F4F7024BE68119\",\n          \"PreviousTxnLgrSeq\": 68777424\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"raKckiVpb6sE7hq7y1VGpF9YdGAVSbJJLu\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365219DD1F143F11D7\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"11\",\n            \"PreviousTxnID\": \"E6F45582A0EB74AF16D8BCDB7E81F919B2E54D5F087056043EF600F591E71AD9\",\n            \"PreviousTxnLgrSeq\": 68916101,\n            \"Sequence\": 66680879,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"E09B6EA9E20E0D517CE00EA309F1BD4298A713A163DA8F1A79D26AC42A63F3EA\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7785989866\"\n            },\n            \"TakerPays\": \"56682006\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rKzptAtXDpvuPnT8Es2c3Tq8URKvEWYomC\",\n            \"RootIndex\": \"E0A63D6AABC4C248425387BB32F2C06177715A4BC721A4EC06AEC677E2A84236\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"E0A63D6AABC4C248425387BB32F2C06177715A4BC721A4EC06AEC677E2A84236\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rNVK54FFqQPyc5jFNayw1WrW2m54SRAMWv\",\n            \"Balance\": \"274471898\",\n            \"Flags\": 0,\n            \"OwnerCount\": 80,\n            \"Sequence\": 67622176\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"E0AEFD3F21695F79C0F4B76AD55C6D79635F3B4505DD5FB4F256F02FC962FA46\",\n          \"PreviousFields\": {\n            \"Balance\": \"174471898\",\n            \"OwnerCount\": 81\n          },\n          \"PreviousTxnID\": \"933EF962E02E1FA2EB83B67272B60E6BBD0AD4B4E602735F3991EC2DA47AA8AF\",\n          \"PreviousTxnLgrSeq\": 69055668\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"740631051.08894\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"710\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rw2K4HQDujtogHECEi9ubWzeVVHr2bBN16\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"LowNode\": \"6\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"E0BBC79561E7BEDFEAE2137BC4250F6C3FDCF75F6FAD9B7187567BF1BD675AB6\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"8526620917.08894\"\n            }\n          },\n          \"PreviousTxnID\": \"B658782ADA4DC872EC0CEFB0A791F7A4C6BC6B819DA297869C845C4FDCF89BD1\",\n          \"PreviousTxnLgrSeq\": 68893731\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"15599091822.58119\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"a52\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rBBS1EhebBUcDs7gDa4ZuoTfmBwsRGqycY\",\n              \"value\": \"9999999997999990e-1\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"E0CC4EAD52E8441635F78289FAD20782D63B7F0030A42F3DC013F6EF9E2CB432\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"25599091822.58119\"\n            }\n          },\n          \"PreviousTxnID\": \"E84AB1F19919BBBBBCF7AC07FBC33B2D4D577FF442967CAFF0182CC35D32864F\",\n          \"PreviousTxnLgrSeq\": 68163867\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rMDVXgBGXnNiVt8b9uXXwhQC5W2xZXPweh\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653153EC73FC1C000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"2\",\n            \"PreviousTxnID\": \"4D3CD4CB2FAEFD80B290F469FEDF779AF8D91A9430DD57BA46684D3E3EBC0328\",\n            \"PreviousTxnLgrSeq\": 68646276,\n            \"Sequence\": 65101957,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"E0CE2BEF2388F912842F372B7978714013B5360483B191846C8B05C0FA7F6E08\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"2000000000000000e-4\"\n            },\n            \"TakerPays\": \"11960000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rHQELpjMXco8drUJVmfUq89kCZbDdWBr3A\",\n            \"Balance\": \"182337601\",\n            \"Flags\": 0,\n            \"OwnerCount\": 74,\n            \"Sequence\": 67416896\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"E0D085461C3B004C9A543ABD08C90451372F396C14B55B78750D4FCD5D1AFB1C\",\n          \"PreviousFields\": {\n            \"Balance\": \"168445601\",\n            \"OwnerCount\": 75\n          },\n          \"PreviousTxnID\": \"5D70C94A90CCDC5EE4B148FEBDF51BDBCFC4E9A6CDD0C7A1EF8D2645DB685542\",\n          \"PreviousTxnLgrSeq\": 69060475\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-1000000000000001e-4\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rPhzFvrw8hkGkdzQvSRjuHuESLDqnd6xDg\",\n              \"value\": \"9999999997999990e-1\"\n            },\n            \"HighNode\": \"9\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"c0d\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"E0E6DDBBA91C4E099D5B07DE009E816818C32C4A9776BD744766F3D7DCA481F2\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-2000000000000001e-4\"\n            }\n          },\n          \"PreviousTxnID\": \"78AF119688FB3832EDC86386F14682A486B3A12AEF10181C45EFA4DB8D5FD5CA\",\n          \"PreviousTxnLgrSeq\": 68878301\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rHXRGGkmL2bGwkbsz9mnpVi3eAZt5bThdo\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365218C32D93484EE1\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"387764D69FE7A46C47F7D554E4F14BB1A0984F8C180A5F22E35CE8C3613D26BC\",\n            \"PreviousTxnLgrSeq\": 68899246,\n            \"Sequence\": 66754971,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"E120F4E51DB62F98D82B8DD20E39125146D37D2E09748A810D768B35C4D2728E\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7785989866\"\n            },\n            \"TakerPays\": \"54268349\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"f05\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rBR21hAWPJuTd1btLDfunkJUeRSWsEaLpb\",\n              \"value\": \"1000000000000000e-1\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"E12DEABBD6CDDF2630E9A03833C8A2F9D82ED0A030C0CB47E28C697CF65040F5\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"4407112250\"\n            }\n          },\n          \"PreviousTxnID\": \"497E3C6D56CAF25E26BDAEB2BB587B8BACFFF6E46282C124171DB208D4421070\",\n          \"PreviousTxnLgrSeq\": 68999127\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rGRyfRcJ7cSYSu6rw5VpNJReEZt9Gzy9a7\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365212795F58D50000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 0,\n            \"OwnerNode\": \"2\",\n            \"PreviousTxnID\": \"95E5C927439C29D0924163CA3C466CD932A4AB7439B24CFE4014D6A45B8A3A92\",\n            \"PreviousTxnLgrSeq\": 68993207,\n            \"Sequence\": 67157740,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"E1330A4BB22D65E613A8FF12CEEF9747ECB3E21F6592611508BD96C269D7CF7D\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"10000000000\"\n            },\n            \"TakerPays\": \"52000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"78999999999.9999\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"26e\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rszRAoxvAYy352HATq5bx3YGKpMBjeW1L7\",\n              \"value\": \"1000000000000000\"\n            },\n            \"LowNode\": \"1\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"E138EAFDA1853BA27921849D1855189B0D320DE01E092BFF22E8C867824D479D\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"1004818661929999e-4\"\n            }\n          },\n          \"PreviousTxnID\": \"AA37FA1E0C47B57073A9DAC0826483531EF068A44EBEB445AC558F09FB03CAEF\",\n          \"PreviousTxnLgrSeq\": 68999693\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rLhtdRdeGcT6UeQivqPu9DBXWHZ1SDpsar\",\n            \"Balance\": \"385009283\",\n            \"Flags\": 0,\n            \"OwnerCount\": 98,\n            \"Sequence\": 67537012\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"E14EF9B98967CE48D8A33027D63798D875EC5A07E4ACD5D8E4780C33D49EA36E\",\n          \"PreviousFields\": {\n            \"Balance\": \"334400349\",\n            \"OwnerCount\": 99\n          },\n          \"PreviousTxnID\": \"1B5A46387350DBAF55ED76707614F9F45B7FF86CA2C2C1CD1D732D96BE07F624\",\n          \"PreviousTxnLgrSeq\": 69056018\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-32.4754\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rJQTrHKExfeCjschk5MGwPZuditZ8vdWnD\",\n              \"value\": \"1000000000000000e-1\"\n            },\n            \"HighNode\": \"5\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"edd\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"E15C49A21987EB6A3629919E8AD9B97A25EBE3169445C0AC8F9FA928F81C6602\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-14925373100\"\n            }\n          },\n          \"PreviousTxnID\": \"8B509AC6E7505DB9785E21055AE2A2E5DE011C4AEB5B3F5AE49E940407C90D39\",\n          \"PreviousTxnLgrSeq\": 68893899\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r3oDrfWCL4zZRGoUNRd8Ywu9PJWFZXc764\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520832344B7F3000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"4\",\n            \"PreviousTxnID\": \"424681321C6CE35319123C3B94327FA26369D9CC13FD7E0EF415984059B7A24F\",\n            \"PreviousTxnLgrSeq\": 69054965,\n            \"Sequence\": 67440531,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"2242524024388910e-4\"\n            },\n            \"TakerPays\": \"517350292\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"E16E1A628DE89D25B60915E023F44499C383DC974DE522FA0CB2621887A7CB2F\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"3000000000000000e-4\"\n            },\n            \"TakerPays\": \"692100000\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r3PWgfzUbXKYDoLD6p49JqiabjfQCj14AZ\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365213F93E2CD6C4E8\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"18\",\n            \"PreviousTxnID\": \"69A7B10CC73A95B6E6A478620F9AC405B58B1FB6401A035910C4936930BE8EDF\",\n            \"PreviousTxnLgrSeq\": 68992512,\n            \"Sequence\": 65987196,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"E16EF8EB7644332239E71C3C1CE1559BCF5ACCC1DCF6F296798D3D8A5C9167B2\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"21246268571.42857\"\n            },\n            \"TakerPays\": \"119448009\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rBZXb3rXDo251L4ZJdQCa8AUjP7kc9ifCT\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365207B162D153ED82\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"5\",\n            \"PreviousTxnID\": \"95377F54B3BB7C871C263703B574D0A7E32B99346A7B35717400A8D46DFC5EB0\",\n            \"PreviousTxnLgrSeq\": 69052056,\n            \"Sequence\": 67536202,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"E1C213F4E448F8FF5938BE92D4A8BF0A32879C72759846466027F8D7E18A90A7\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"25258903797.00397\"\n            },\n            \"TakerPays\": \"54694691\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rnB62vv6d8dQV13A3nHQQ7LEGy8DEWkLuG\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521630C824C63105\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"5\",\n            \"PreviousTxnID\": \"0EB390321A4BF30E6EADFD757F07865E09003D503BA3A22D3AF8DC5C9BFC0534\",\n            \"PreviousTxnLgrSeq\": 68970574,\n            \"Sequence\": 67267211,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"E1CDD54853E481E00F38FFC7AD1DC2762046035089237A35670A8C92181AB00B\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"9606016200\"\n            },\n            \"TakerPays\": \"60000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"raZJeAMN8WHNBRrVCc5RXYfD7mAuKctiwE\",\n            \"Balance\": \"858589634\",\n            \"Flags\": 0,\n            \"OwnerCount\": 22,\n            \"Sequence\": 67450381\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"E1CE37410DA031B52CF99C17B528C8C3ADFC52F6A9A73E021B3DA12F5CE7E4A2\",\n          \"PreviousFields\": {\n            \"Balance\": \"79990645\",\n            \"OwnerCount\": 23\n          },\n          \"PreviousTxnID\": \"E524296147A3F53F0E6A8A69947B7C2DF372715F1EAFB786C653E63F5D2EC8CE\",\n          \"PreviousTxnLgrSeq\": 69043701\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rwCzLwdFp6DLPMfZRTUN67UB79XbbmYt2o\",\n            \"RootIndex\": \"E1E2D0727CCAA91B19E959F0214AF0F5BEE3939F4063F0797F4EA5D632927E76\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"E1E2D0727CCAA91B19E959F0214AF0F5BEE3939F4063F0797F4EA5D632927E76\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rhrguNtFAs4pp6FD4n2Uz2M5PQACwnWdrC\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520D7F86E851E335\",\n            \"BookNode\": \"0\",\n            \"Flags\": 0,\n            \"OwnerNode\": \"4\",\n            \"PreviousTxnID\": \"9569AEC3F4DABF485E8AF2A1997BC04CAD4FCE8565333FB8AEDC2A3841F4AC8A\",\n            \"PreviousTxnLgrSeq\": 68998156,\n            \"Sequence\": 67583954,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"E1FE4D257DDD402206811967546C04DD0FDD164434BE8E6C76CEA53AC14C2B83\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"20003200000\"\n            },\n            \"TakerPays\": \"76000000\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rDYvWkTQaaoWiWYo2r5fKuqEoop8WK9crS\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365211C37937E08000\",\n            \"BookNode\": \"0\",\n            \"Expiration\": 726953086,\n            \"Flags\": 131072,\n            \"OwnerNode\": \"1b\",\n            \"PreviousTxnID\": \"0A41AF90A6B8C3E32E7EBAD59941DB760390FA644792251E292A797DC450CC63\",\n            \"PreviousTxnLgrSeq\": 68991789,\n            \"Sequence\": 60413066,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"E215F54CE8A721ED6B7BA30E68521F463D4B7805447D262EE79E87619F6444C4\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"96000000000\"\n            },\n            \"TakerPays\": \"480000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"8\",\n            \"IndexPrevious\": \"6\",\n            \"Owner\": \"rBYvQ1bajMk5CQ8MTa6whA9MZ4uuJGwtEh\",\n            \"RootIndex\": \"51F44E1D742C2DC27B600E180498EF71F8C1D2425EBA974B5F75FAA3DB4D2C1B\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"E21B18A733D29F0C693F495BDF722C27292D516FA9B52CDF629AE843DBC6A942\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r4YqG4eX9uskEYbdZVejyRmkBgM9pSo8q5\",\n            \"Balance\": \"18744766828\",\n            \"Flags\": 0,\n            \"OwnerCount\": 100,\n            \"Sequence\": 66712938\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"E257BE38539FF75E95F5B28E8DC8C408810A0B5C6B20C7CEEC69BBB3559A5C78\",\n          \"PreviousFields\": {\n            \"Balance\": \"18204496828\",\n            \"OwnerCount\": 101\n          },\n          \"PreviousTxnID\": \"FC9034720C4EEB31FD9BB060FB5203BE9A2D9B52043298A0FA4111905B4891D3\",\n          \"PreviousTxnLgrSeq\": 69063821\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r3NPSAnK3n8wx7pdeCje64yvei4xLBrgd\",\n            \"Balance\": \"7755412077\",\n            \"Flags\": 0,\n            \"OwnerCount\": 37,\n            \"Sequence\": 65010505\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"E261BBC0AB459335BFA90342FEC5417EEBFFDE37B5A8C9FA45DDB2AADD7DD48E\",\n          \"PreviousFields\": {\n            \"Balance\": \"7584898899\",\n            \"OwnerCount\": 38\n          },\n          \"PreviousTxnID\": \"739899E2889FC7E6B6BF5B34F48468455D71F965E3156B80FD526BAE9A714946\",\n          \"PreviousTxnLgrSeq\": 69059888\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r3VQGy3EVus3nKJz33du7UqZDMFEnVmHLL\",\n            \"Balance\": \"589501504\",\n            \"Flags\": 0,\n            \"OwnerCount\": 62,\n            \"Sequence\": 68254318\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"E284D51C209558ECD6F76130D2C4EB9509DE0D89D3ECE877224D2240473C7AF4\",\n          \"PreviousFields\": {\n            \"Balance\": \"539250247\",\n            \"OwnerCount\": 63\n          },\n          \"PreviousTxnID\": \"7830B07EDCA8B036CB17D8710D03645F78BD1FE37BAF43AB495033F97D9AD477\",\n          \"PreviousTxnLgrSeq\": 69064107\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"racxdehrfnx9kEzWRF2vcMPCzx8WRfF6G9\",\n            \"RootIndex\": \"8F06349C4000BEC4B40F76117FFF9D862C81ED87C866EC2DD44867047E950A14\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"E2BD88529960D47387ACAFAEFC79A716C5B28ACA7AA61D1239076D76F78C745F\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rah3AgBTwgnCvR5aJfj4p6Gy98hZt57gXD\",\n            \"Balance\": \"515770778\",\n            \"Flags\": 0,\n            \"OwnerCount\": 83,\n            \"Sequence\": 66615326\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"E2E83D606579726D53D0C81E9279A21A05C5E9FA3B7D063643AB9796AF9EA191\",\n          \"PreviousFields\": {\n            \"Balance\": \"463332137\",\n            \"OwnerCount\": 84\n          },\n          \"PreviousTxnID\": \"B268CF6985240F394778508AAF9F7A32CE602CC92FDB7E0C134A408663EE8F3F\",\n          \"PreviousTxnLgrSeq\": 69042880\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"9517358514187970e-4\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"40a\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rsj4wU1Tv93ES5J3AZrWVcgaKXV9b5aNKc\",\n              \"value\": \"1000000000000000e-1\"\n            },\n            \"LowNode\": \"1\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"E30857A67323A50351A777ACFE53E2FF43B68440F6872D1AA5D4ACB9ADBB4265\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"1005291407071273e-3\"\n            }\n          },\n          \"PreviousTxnID\": \"F4F32746DD86895901581BFCDE39C84F5EB62E1836FEBA314CE21AA9776D06FB\",\n          \"PreviousTxnLgrSeq\": 68990970\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rUqgMfiCKp2L5Y1zobkQTgSdVYLp1PASt5\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652096A29349EBBA2\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"B61CE651A85D7565108BF5E2CD3AEB35922E80C5ABDF892233A06C4AF2AD689F\",\n            \"PreviousTxnLgrSeq\": 69023343,\n            \"Sequence\": 68911100,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"E31981C4E8416CFFA2B7EAADD665B035AA9A21441DE32C0E731D5BA77508D41A\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"4223866751872249e-4\"\n            },\n            \"TakerPays\": \"1119324689\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rwmZ1gXEQzFAzzEmYyGjHDhmccg5SGj7WS\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36530E35FA92A49095\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"6\",\n            \"PreviousTxnID\": \"F56087D4B41142079CA24AF9C09B5BB7C278D3AA23812E029EEA99B2A3B0EDFC\",\n            \"PreviousTxnLgrSeq\": 68790485,\n            \"Sequence\": 66329297,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"E331062135992CC715EF84C0EEF385EBAA80E9D59C209EFBC0F8188C6CD0821A\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7796019890\"\n            },\n            \"TakerPays\": \"311840795\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rfqL99qLpPmC72SjLCaytr5g27EUH35RyB\",\n            \"RootIndex\": \"E35EE0B07D2D3249FCBC44CF807E156C72E6955D46EDE045688DF1500B3CA8C8\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"E35EE0B07D2D3249FCBC44CF807E156C72E6955D46EDE045688DF1500B3CA8C8\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rzHXP1zuBviNtiogFMnNDcoUg88bprjNy\",\n            \"Balance\": \"2287546992\",\n            \"Flags\": 0,\n            \"OwnerCount\": 43,\n            \"Sequence\": 67764300\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"E37438FD4C88BAB2D5E134752FB04C7C74E6A6633DA7F1432111EF8B31254A41\",\n          \"PreviousFields\": {\n            \"Balance\": \"1209687094\",\n            \"OwnerCount\": 44\n          },\n          \"PreviousTxnID\": \"174467C74786737F7B8AF11A77F738D7BC3F91E22493193EFC4D86D9A264BC22\",\n          \"PreviousTxnLgrSeq\": 69042821\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rMWLJFUZZk4ueZuy4yiLPJa23dGih6phUa\",\n            \"Balance\": \"168251050\",\n            \"Flags\": 0,\n            \"OwnerCount\": 78,\n            \"Sequence\": 67175933\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"E38FE3D599DB83246FFC603C046CB11C88A13FF954A882C5725DB461A24A2B43\",\n          \"PreviousFields\": {\n            \"OwnerCount\": 79\n          },\n          \"PreviousTxnID\": \"F6BE1E919CAA037CC9FE0614BBE27F2DAA233F264D1C4BC3DF8B8AF6FBA90DA4\",\n          \"PreviousTxnLgrSeq\": 69049466\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rajb91Ucmbfxe1KoUEpAtJi8eo5bQVWeUW\",\n            \"Balance\": \"328782857\",\n            \"Flags\": 0,\n            \"OwnerCount\": 88,\n            \"Sequence\": 67452145\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"E3A9AD9AB982E5281A169633D1D2676EE4E7B34846BF056B1C1B7CDA16BA2486\",\n          \"PreviousFields\": {\n            \"Balance\": \"302571476\",\n            \"OwnerCount\": 89\n          },\n          \"PreviousTxnID\": \"7A9FE96E7DD399634FB7CCC6DB8DCB27C42E2865D82B8C4462190C2AF3B68F74\",\n          \"PreviousTxnLgrSeq\": 68984152\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"c\",\n            \"Owner\": \"rUtzPhAd4njQGteZHqi7hbd8CRtZGfQtp3\",\n            \"RootIndex\": \"ABF7E9358917BE7F15BD1467140B164619B871E1D12F35DC5BE54CB372B04FFF\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"E3C4A21D84B2FF6962F4E035E33C3736AB889BCD48D0274C8ABE6E6D6FB4C626\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rNH6NhWEAVCRPrcDv9NYJdPKv4YTHn1EgA\",\n            \"Balance\": \"359641989\",\n            \"Flags\": 0,\n            \"OwnerCount\": 34,\n            \"Sequence\": 67414050\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"E3C7CA82579F5C2063BA39D1ED4C903FF350CCCE7611DE26699D3CA1E6629D4D\",\n          \"PreviousFields\": {\n            \"Balance\": \"159641989\",\n            \"OwnerCount\": 35\n          },\n          \"PreviousTxnID\": \"81FE8A7E9AD50F315CCFBFB7D7C40049E1B99ED9F6D5E11BFA91D9B99667744F\",\n          \"PreviousTxnLgrSeq\": 69048810\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r3uzGoy1vgEEdULUkLBRJXaYfww3nzYP27\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521F9D97DF990136\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"3\",\n            \"PreviousTxnID\": \"05F5D206816A34A1914B32CF46551DB4F57FE12F454AE039FB3EC298A21D64A8\",\n            \"PreviousTxnLgrSeq\": 68897267,\n            \"Sequence\": 66616836,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"E3CD4DE322EA3969632388372BA800C1C494495AB6F4BBB9DE7EFAC6ED9DD161\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7785989866\"\n            },\n            \"TakerPays\": \"69287523\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r4szgdizaCzaf1H9hBme8BYyQPhf2CbvXC\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653038D7EA50921E1\",\n            \"BookNode\": \"0\",\n            \"Expiration\": 723032671,\n            \"Flags\": 131072,\n            \"OwnerNode\": \"6\",\n            \"PreviousTxnID\": \"8C9C2501C5ED634AC1036EFC970B34FE6FB89148C1EE4C06A4CC78EAC9D0FCF7\",\n            \"PreviousTxnLgrSeq\": 68012935,\n            \"Sequence\": 67374620,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7785989866\"\n            },\n            \"TakerPays\": \"77859899\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"E3CF6463510345803170CB78A76626B1C0ED1602AF6E946B67FEE720359AABA7\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"0\",\n            \"IndexPrevious\": \"1\",\n            \"Owner\": \"rNH6NhWEAVCRPrcDv9NYJdPKv4YTHn1EgA\",\n            \"RootIndex\": \"91A47673249253B17C01F28B2A121A151D9C38BD926F37AAFE431637827CB588\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"E3EE230068CFA336B198EC3A0959F6587ECB3BF797B7A6DF6D22CDE1C08A50E4\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"5\",\n            \"IndexPrevious\": \"3\",\n            \"Owner\": \"rsdrgJ5xtkPpnWfJeeshHZLWmQEMS3cFzQ\",\n            \"RootIndex\": \"A8237F06A28C001193A1DAC1678AC2EECC1AFE82BBE54533320C77BFC5D63572\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"E40D328CCA9349E6F7411D2970387BE049C6DC1FB4E22FABC491B49FC44A1C68\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rGtD3bMYvE4snnRuTS2n3CBfSLeUMBpSyM\",\n              \"value\": \"9999688558266536e-1\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"e13\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"E433D4316303956DF57D0AE95D08A795E15D1C0D590EA212909FF79C38CB821C\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-14128771526\"\n            }\n          },\n          \"PreviousTxnID\": \"702B1E0EA65C4681CFB8842624A1AB82ABD2B0F42D4A9047348800A63A8C3D01\",\n          \"PreviousTxnLgrSeq\": 69019398\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rspLJnfzomVceQKCn6ExME3gJEUuhUZxdV\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365212D452694AB9AA\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"16\",\n            \"PreviousTxnID\": \"F8DF0D407A0EF5EFBD0F4C174C716A115BA82098DCD128575B7E867473554A67\",\n            \"PreviousTxnLgrSeq\": 69005596,\n            \"Sequence\": 67373812,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"E43DA89159D068490168C7A1B1089E1362CACDD693C1466F124EF71679A12BF1\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"1981221762375000e-4\"\n            },\n            \"TakerPays\": \"1050047534\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rGgYjYE7aH7sY7uc9BHpks2NDgVkptYkDh\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652138A388A43C000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"3\",\n            \"PreviousTxnID\": \"5769760B0BE9728F459645DF00F695824A6E08EFCD48A01B47C49BA477E95037\",\n            \"PreviousTxnLgrSeq\": 68938929,\n            \"Sequence\": 67480735,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"E46A44BDA71C6F31D53E99FF2B8A99590AEA805AEAB5E67C9AE9D9A5183E6716\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"10000000000\"\n            },\n            \"TakerPays\": \"55000000\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r3oDrfWCL4zZRGoUNRd8Ywu9PJWFZXc764\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652082BD67AFBC000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"4\",\n            \"PreviousTxnID\": \"30B824E907EC9FFD0DF331DE52E5CC9B9E4DD65A67315D512D2EF62A00054B7F\",\n            \"PreviousTxnLgrSeq\": 69054932,\n            \"Sequence\": 67440524,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"E47C5912F93B02062653738571FFB14F69E28185A8CCAE4B8D5402748620423F\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"TakerPays\": \"230000000\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rJsM7f8iBRAiXz3bMUaiCsxHujM8UpirwN\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521FF973BC8AD6E9\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"5\",\n            \"PreviousTxnID\": \"83C828CD41A029B54D032538E4458921862E96A07B7C468D09F4749E47D91206\",\n            \"PreviousTxnLgrSeq\": 68895508,\n            \"Sequence\": 67366317,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"2069278611.241868\"\n            },\n            \"TakerPays\": \"18623507\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"E47D2004979AA3C1FC864A13CE1415F480E15A3C7A48FEAFEA2C8FF030712584\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"881\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"r9pfHFFyEEhtaDaMgVNtZZ8Ks7YL98ziRB\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"E49C0D293275A05DF84335DCB4A28521D92F7B0A4529E59D5B39148657E233D0\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"3334588052.553338\"\n            }\n          },\n          \"PreviousTxnID\": \"52161BB0E181646D75553F4AC44C2A2C5B034A597C86C76FB31A1DEE2C3CCDAF\",\n          \"PreviousTxnLgrSeq\": 68747197\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rwmZ1gXEQzFAzzEmYyGjHDhmccg5SGj7WS\",\n            \"Balance\": \"599156327\",\n            \"Flags\": 0,\n            \"OwnerCount\": 102,\n            \"Sequence\": 66329437\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"E4C690BB52CF80135CB5B6B1BFD9A359187E1BB17D2B99ECB0AF3B5A5D814C81\",\n          \"PreviousFields\": {\n            \"Balance\": \"236999975\",\n            \"OwnerCount\": 104\n          },\n          \"PreviousTxnID\": \"524B475D6A7893DEDA78735D85C897C6033F8D309D3ADF86208D59E1467286F9\",\n          \"PreviousTxnLgrSeq\": 69011029\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"7\",\n            \"Owner\": \"rMMTgtHSock7M74yRKkp4ug6i14nGeCJhW\",\n            \"RootIndex\": \"D6E618C6B2EFD3EE511493F4CAA56E51387934AF90D414125C9CA3D253456A05\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"E4CF0FF9082E1FCA5131D2CC6C0B34574D71F34CB303D9C2BCD116A7E597E6BD\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"9\",\n            \"Owner\": \"rf4YQSYpheUvWxMx5rmSgr4vdyvu7tWUp4\",\n            \"RootIndex\": \"C6EA667846AE73390055A474451A779EDF7660685085B83CA1ABA251716BFA15\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"E4E2277C51E090B08D8031D937C36E5606E27ECAFA4971184DA4E8CDEE9A650A\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"e\",\n            \"IndexPrevious\": \"c\",\n            \"Owner\": \"rKB9EELQpLTeDNb3H5HJT7QbCPdA1NzDQ7\",\n            \"RootIndex\": \"75E80E4ED280762F7C81337664E6CBE0CB29167C106421C9487E1CBE0497F196\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"E4F21641E7C1E0F453A4C69BCFE1B170600592B8FE4E2F0EBC3079C8BF33BB46\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"7ac\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rfJ35bQofteAs3h4aCA77V5wSHRsHChttf\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"LowNode\": \"2\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"E51492034BFCEBAA9401FBE041C9D3AC3AEFAB0A425FA5EB466E625714B5AE23\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"10000000000\"\n            }\n          },\n          \"PreviousTxnID\": \"DA7D0770E86A7997A59E2BE71BF1BCF11DC6280D729E417B757A8B8CAC282A98\",\n          \"PreviousTxnLgrSeq\": 68898802\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r3Gqpysb37rsJfn8RTCG6bSmigvzYPbWa4\",\n            \"Balance\": \"405078852\",\n            \"Flags\": 0,\n            \"OwnerCount\": 160,\n            \"Sequence\": 67430775\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"E5616E4E2712CCB429155501236DD6A8D34AB8EF2B3C657676A1C0F7738BE8DE\",\n          \"PreviousFields\": {\n            \"Balance\": \"332163126\",\n            \"OwnerCount\": 161\n          },\n          \"PreviousTxnID\": \"79D9573502F72EE02C5856E1B0E5D0F1A108F1979DFB20724611D5DF4D1956F9\",\n          \"PreviousTxnLgrSeq\": 69062753\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rwLffu7VZ4rMMa5thTQppfL9g4FMB1sNys\",\n            \"RootIndex\": \"E56B405953A627751DAAC35913263424A4E5ACF3745D7659105C999AD9255CBE\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"E56B405953A627751DAAC35913263424A4E5ACF3745D7659105C999AD9255CBE\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"4\",\n            \"IndexPrevious\": \"2\",\n            \"Owner\": \"rNk5vizuipEGcr9cNVXnh1eBjhaMFqFs42\",\n            \"RootIndex\": \"350213DAAAB3C58FEF1A618DFED595F851D9125E7C57501F8E17493A7F335EFD\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"E582BBC6D945416F4EBCA4BF21C149FD73CB206444E2EF6EF9396F9524E67313\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"7785989866\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"64a\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"raqKMtQVnQPuQpPLBoeyPbjYHSokvu1R1z\",\n              \"value\": \"1000000000000000\"\n            },\n            \"LowNode\": \"2\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"E58A2E9090EA69D4CA3C90FCC94A050874AD99513E60D5F75D1C338AB869C45C\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"12785989866\"\n            }\n          },\n          \"PreviousTxnID\": \"65CFCEB0B320C3B77E1ACEFCF3A88CB531A8510887B589F53E954E933A429765\",\n          \"PreviousTxnLgrSeq\": 68874810\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"1b\",\n            \"Owner\": \"raUCqTN33sgqfhC1KVtqhCVX6iHkHAbUzp\",\n            \"RootIndex\": \"09B006752712F520BF9D397955754E5C3229F296934DD135743B74E4B737D5CF\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"E59B9BECC40F2C27149046E754293982C006D43B1B13570D16DFFBD6AAF791C6\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"5\",\n            \"IndexPrevious\": \"3\",\n            \"Owner\": \"r4DDKcQaxRVhr17DMzNSrAYBvarHRXBJg5\",\n            \"RootIndex\": \"E25BE2786459F3746C5DD7E4BDED5FD36FEC77521E5E02FBFDF4E5BF9E864A3B\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"E5B2C42707D15FC35B0F252E9D0DE657CB6528A7286285E5C79555914CB29326\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-20000000000\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rGhP8A7jhRj3qkYPUR35bRvLCJyxh7xmGq\",\n              \"value\": \"1000000000000000\"\n            },\n            \"HighNode\": \"2\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"315\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"E5CEA562D36EE5400561289E9D2D59E4A5DAF3B6577092ED98EACF1EFB61540D\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-50000000000\"\n            }\n          },\n          \"PreviousTxnID\": \"1DE72AB0B210EE24B8D4B7CD4DD4EAD373A949CED29D433C79DBEABED6B0A8A5\",\n          \"PreviousTxnLgrSeq\": 68510294\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rBE6UN87gwvyAuud7dSn2d6zdBUWCjgqRG\",\n            \"Balance\": \"542526320\",\n            \"Flags\": 0,\n            \"OwnerCount\": 28,\n            \"Sequence\": 67882083\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"E5E17F9DF40B9E5AB66E7F4C2BB0D64163B64C06529F2A186A975AAB4041EA70\",\n          \"PreviousFields\": {\n            \"Balance\": \"71805136\",\n            \"OwnerCount\": 30\n          },\n          \"PreviousTxnID\": \"24CBAF2455DAC4C58E64097427FF3C6E2F18DB251F8CE6F393A144D6240E9717\",\n          \"PreviousTxnLgrSeq\": 69061759\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rExSJvWnn93G5NfnzZ3YKuPgpQnr8wBsrE\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365209C8456E33AD92\",\n            \"BookNode\": \"0\",\n            \"Flags\": 0,\n            \"OwnerNode\": \"d2\",\n            \"PreviousTxnID\": \"E231854200533AEC153ACBF3EF81AAD07F17069F6EE10322EFBA590C6C2CEB30\",\n            \"PreviousTxnLgrSeq\": 69059556,\n            \"Sequence\": 63810433,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"1751319103039126e-2\"\n            },\n            \"TakerPays\": \"48222139234\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"E5E9F43CB3645CE7F7AA78BA18E13958036B9B953A6269C2633C5CB3D83B8C2F\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"1815886987650000e-2\"\n            },\n            \"TakerPays\": \"50000000000\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rwCzLwdFp6DLPMfZRTUN67UB79XbbmYt2o\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520A268E386A6BAF\",\n            \"BookNode\": \"0\",\n            \"Expiration\": 727132261,\n            \"Flags\": 0,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"8ED817FF881C00DDBBB0CD423B24F9BC9735C6B6903467BF7540D9CBE7432CA7\",\n            \"PreviousTxnLgrSeq\": 69037326,\n            \"Sequence\": 67150577,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"E617793E1191498E4FEF0A554E24D47438EA9DECFF7313A26B536C44FFAA82C8\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"1050000300000000e-4\"\n            },\n            \"TakerPays\": \"300000000\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rhft58oDqDyMaUZZCKeBgEY4ewRC5HSpqM\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36522386F26CE23FB5\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"2\",\n            \"PreviousTxnID\": \"1C876137E8F67F9D3844F2031223171796B39446D68A5BB9579D6FE90950E6D6\",\n            \"PreviousTxnLgrSeq\": 68308111,\n            \"Sequence\": 67660556,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"12543364457.7085\"\n            },\n            \"TakerPays\": \"125433644\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"E639DAF64AD2363E14CC8459E075F9E23F31440EDCC3DEA5E29941BBB3B02FE9\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"13029982462.74282\"\n            },\n            \"TakerPays\": \"130299824\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rh2ExLW6MJMJdoX7386pzfkNbhHSjqVWtC\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365217CD9D4D8E38F4\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"D135B80C27AEC611FE776935D9403C4AAE3954B92569CBF86C77DC1E609A99E3\",\n            \"PreviousTxnLgrSeq\": 68946709,\n            \"Sequence\": 68087680,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"E663F9FE4980BF9F2C1D1F7CDA3E2253A61E51CF982E78FE9EB537A356126CEC\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"21000000128.28504\"\n            },\n            \"TakerPays\": \"140700000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rNd3R5EaqkBC3EguG1mmwhjpKqLDTjBNwQ\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"591\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"E67B2259E2484A0E8486901B9CB4CA420EBFFAF9D875A76817424E93DC825A65\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-4282294426.3\"\n            }\n          },\n          \"PreviousTxnID\": \"B3739FA58E9D4DBE25B7C801AC01365A5A0B9CB05A671F2846834F6E090C8253\",\n          \"PreviousTxnLgrSeq\": 68874417\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rNh79kZDsubi13bjTw64kBsKVWepnDT2J7\",\n            \"Balance\": \"60578720\",\n            \"Flags\": 0,\n            \"OwnerCount\": 19,\n            \"Sequence\": 68590621\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"E6B0F7B035D44677B9E2CB5C5D74577D927A4F04387FA3C1DDEC9B3AD303B962\",\n          \"PreviousFields\": {\n            \"Balance\": \"50100246\",\n            \"OwnerCount\": 20\n          },\n          \"PreviousTxnID\": \"068A2FFF3B9E708D37A431A131A3D69E3A2A883752FA778780BEC4A3C2A78A56\",\n          \"PreviousTxnLgrSeq\": 68941997\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rnsZFHUhKJoPt3oh269oP51G4j5HDCNNBg\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520775F05A074000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"4\",\n            \"PreviousTxnID\": \"21A0E34A99306E333A1AA64B46CEC95A7AEC951C6AE926E42058DAF282C75DE7\",\n            \"PreviousTxnLgrSeq\": 69053350,\n            \"Sequence\": 67560835,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"E6B731BBFF1D4272CC4CB8000D58079E5A5AD3A46FAC4D23FEA73B5BA68C0F4B\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"3000000000\"\n            },\n            \"TakerPays\": \"6300000\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rUHsUfjv1Ai9KiT6R3WzLcAKvvPLao6fiK\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36531FF973CAC4EECD\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"2C5AC6BD8636FCBF64123DDA74A27B0A575640D13161C34C9318CADBFB05A58D\",\n            \"PreviousTxnLgrSeq\": 68163043,\n            \"Sequence\": 67545781,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"E6EDE133CC29F607C101C045D324CAA9E23EE4B94B6A870A60E2CB4A64072D7B\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"23357969598\"\n            },\n            \"TakerPays\": \"2102217263\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"5\",\n            \"Owner\": \"rwFqpfxexbDa1fUuG87ceDdbe1JnugjWUV\",\n            \"RootIndex\": \"8DB5A79C2172A7530D5E3FEBE2C161C4B5728277A8CBF702D3C7856C54D95257\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"E6FF0B68B8166670A76ED42D9CF613754340F4EDF71EE4B1705CF74CC4A1D374\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rMDVXgBGXnNiVt8b9uXXwhQC5W2xZXPweh\",\n            \"Balance\": \"17086351878\",\n            \"Flags\": 0,\n            \"OwnerCount\": 61,\n            \"Sequence\": 65102029\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"E710C11F2C84C56422842F8E5A56CF40466EA8A3870DBFC7AA876D4E353068EC\",\n          \"PreviousFields\": {\n            \"Balance\": \"5126351878\",\n            \"OwnerCount\": 62\n          },\n          \"PreviousTxnID\": \"F85E16D725D1812A3643482AEE4E6B85CD36B57D4F80778A5774D2D7B389C492\",\n          \"PreviousTxnLgrSeq\": 69047787\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rBR21hAWPJuTd1btLDfunkJUeRSWsEaLpb\",\n            \"Balance\": \"36509842\",\n            \"Flags\": 0,\n            \"OwnerCount\": 4,\n            \"Sequence\": 68736089\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"E73154EEE343052E3EAB590286B792D85009BAADEFD111784EE481D8C304913C\",\n          \"PreviousFields\": {\n            \"Balance\": \"22407083\",\n            \"OwnerCount\": 5\n          },\n          \"PreviousTxnID\": \"7A3B74E9CB0A60419B5E53DA4003A8B3B6CB27D68516E3213BD819DDF89E66B1\",\n          \"PreviousTxnLgrSeq\": 68999875\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rXEUqWCmmyBxf2PUjPFAj5b5DuydWyRe4\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521AA535D3D0C000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"1b\",\n            \"PreviousTxnID\": \"398A1218188DEC7866DA90EB0DC9FED5C3CBA218DA27F4F382D07A204B4BBDA3\",\n            \"PreviousTxnLgrSeq\": 68899150,\n            \"Sequence\": 67494061,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"13240000000\"\n            },\n            \"TakerPays\": \"99300000\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"E760345C34346A46BF176A0994F9D5A0DC2A682B51D2B43A6104882B8D9ADBE2\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"20340000000\"\n            },\n            \"TakerPays\": \"152550000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rN5wcyJZjT6Qd7sJZiQg2SHVtjnmqiq7W2\",\n            \"Balance\": \"302867136\",\n            \"Flags\": 0,\n            \"OwnerCount\": 113,\n            \"Sequence\": 66720646\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"E7A3775557B3D51EFACA0E2869905A8C89B995301BE0D05A538C8A45CB21A9F8\",\n          \"PreviousFields\": {\n            \"Balance\": \"249867136\",\n            \"OwnerCount\": 115\n          },\n          \"PreviousTxnID\": \"61A6EC99D60F23568EFFFBA5DA8279BEAEC1DD642B194FBAEFB5691B07A4193D\",\n          \"PreviousTxnLgrSeq\": 69055407\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"3\",\n            \"IndexPrevious\": \"1\",\n            \"Owner\": \"rhft58oDqDyMaUZZCKeBgEY4ewRC5HSpqM\",\n            \"RootIndex\": \"E1DC9A5583BD967813C61E0F432CDB55806C6AE6BA9EA7F91E5B2445F675E02D\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"E7AA66935964B49DEA025145D33316622560D64EC96393C645429082B33804C2\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rnW1sfCjjdMou7RKC2PquXVchHYBMAHqTD\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365211C37937E08000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"7\",\n            \"PreviousTxnID\": \"9F2F7FD1BF6B73EAAB7BF95E93CBD62CBA9DE680231B7333AF323C2A50E1D4ED\",\n            \"PreviousTxnLgrSeq\": 69008791,\n            \"Sequence\": 67670955,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"16000000000\"\n            },\n            \"TakerPays\": \"80000000\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"E7B93DB93FCE8BBC24DE6A4CA43D6192DFFF384ACA43461AD8DF45368903DDCE\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"4\",\n            \"IndexPrevious\": \"2\",\n            \"Owner\": \"rKKDmfji3MYEAtBZY3AQj8ghcuH1HXYpZC\",\n            \"RootIndex\": \"4299234E2142A7B1FC4F9C2A2517C2CD6534496F8FB123CA2D6594BFC8D9D438\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"E7DDFAAB3D418BED671F1A7E41427B47006685008D658692A125DA7ED8C3C570\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rpWE8DQzMegfBwaPaQhF9EGfxWWxvqRwk5\",\n            \"Balance\": \"48239335\",\n            \"Flags\": 0,\n            \"OwnerCount\": 17,\n            \"Sequence\": 67603206\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"E8068E0CF4A221A185F61758412A998C920E229B7667594965F01136A5F5A19D\",\n          \"PreviousFields\": {\n            \"OwnerCount\": 18\n          },\n          \"PreviousTxnID\": \"BD14F594C65A1D8B7501CC8C81127DC4B617B7834BB31E4F794498854F58451E\",\n          \"PreviousTxnLgrSeq\": 69050409\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"3\",\n            \"IndexPrevious\": \"1\",\n            \"Owner\": \"rEXcziBZ9tEnmNVrcdbQATJPr8JRHuRrZV\",\n            \"RootIndex\": \"DF1803FC45993B40EABCF24BED4F16087F77D973171DF6FD84865F783E562099\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"E81335A111D6E84E9C585BA75862B8226ECC180F8299B84D73E2CCE8B3226558\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r4zXDbBBSbrguDq5pTzabnMgXY7n5qg2jb\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653082BD67AFBC000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"5\",\n            \"PreviousTxnID\": \"1F0AE8279F154B0328779E0DF6B460260FD77D6590C74EE5B085A4A0EAE1BA03\",\n            \"PreviousTxnLgrSeq\": 68242137,\n            \"Sequence\": 67256051,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"4700000000\"\n            },\n            \"TakerPays\": \"108100000\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"E852B5641D35E5A778940BB0F8C57ADE3B9A7AB0B576E7FC59B8A751B3BDFED9\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"5\",\n            \"Owner\": \"rwmZ1gXEQzFAzzEmYyGjHDhmccg5SGj7WS\",\n            \"RootIndex\": \"69E89C157CA91FB591176DA4FD3243BE1161E93F06665447AAA51FF4FD4E2CBE\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"E85B5B778BA714DE6442A2F6509B32BA0C903CA3DF0B310930B9089A3A94F2C0\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"4\",\n            \"Owner\": \"rnB62vv6d8dQV13A3nHQQ7LEGy8DEWkLuG\",\n            \"RootIndex\": \"CABB5C6F0F0DFD993B47105A363276F87CC9E63DFAEB06D01FF2B1C2E237CD0F\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"E8601375E0FF51BEE96F474C994DE4BB8DEA63F59778AC0860ED1E9878CD19E6\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"7\",\n            \"IndexPrevious\": \"5\",\n            \"Owner\": \"rJ7DCt3RdTywMMwKTq2Pm8srSeU4GvmSiW\",\n            \"RootIndex\": \"E5D5ED9679E603030EEC08424E520B4CCA806554FCE917118400D2C6D3626999\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"E86EC84D9BF52D212A0984D0915695853959299F94E7F0162CDAA708A6CDB0F0\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rJCvziKjUwgoNgwNNcy2SwqVMwPFxqBjvn\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521C6BF526340000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"9B08848746301635118852921D3490E142FE51E76F06F22EC1E9F3C0C1782757\",\n            \"PreviousTxnLgrSeq\": 68912200,\n            \"Sequence\": 67662842,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"E87CEA09FF075EAF573B6CEC2C4A82335DAB58A913F3838A7B65587DC66E2D00\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"TakerPays\": \"800000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rLkhJhEaChEegzryMAeps63ghhG1yXzifL\",\n            \"RootIndex\": \"E8AA0C2CFF0B2DAA0B33FCABB4C2845B9FB2F6DCF4AE9C633A23896BEB4C0EF0\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"E8AA0C2CFF0B2DAA0B33FCABB4C2845B9FB2F6DCF4AE9C633A23896BEB4C0EF0\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"1\",\n            \"Owner\": \"r4KVUoogBDoZS9NZAzs37JTgpCoCwbBsSk\",\n            \"RootIndex\": \"EA39E8BBCA82B39759053A55ACBA766EF447ED6439A43BF0EF30AD02F7F472F6\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"E8E4B62B31B50AC55FACDAEAD9CEC72D548A7585AE6A513766BB2E3C5F541AF4\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"1597177877054002e-4\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"eb\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rf7hbrdWs2saBvmLubvuzHJuDhDwJf2Fuf\",\n              \"value\": \"1000000000000000\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"E8E775520F2A0DEEE70D9CECEFBA81CDE674697BB8D1DB92ADA5FD0837E9AA04\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"2765076357154002e-4\"\n            }\n          },\n          \"PreviousTxnID\": \"4B839DACC05ECDDE78293722AAE3A688426A91BE29975654572646ADE8A91962\",\n          \"PreviousTxnLgrSeq\": 68900449\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-2392994933\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rHAYfZTYakQQ5NJCP8BD21nrQeQmDyst5a\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"HighNode\": \"1\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"349\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"E8F8E3CC531F5BB49EEA470A32539EDF460638B2D8BEBBC58DEBD6AD4F2A0D65\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-4392994933\"\n            }\n          },\n          \"PreviousTxnID\": \"A2B107BE9137FB9E10BEBA93B301A4E70C179FBAF575E2B040B414E37D23E119\",\n          \"PreviousTxnLgrSeq\": 68835953\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rHycUxo3HpqiVRhve7H8L4y94dvPHTubXw\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521521ACA596E533\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"4\",\n            \"PreviousTxnID\": \"9CD2AB2DAACDF0BFE91048B2BA95F86CF464EC21FBA19C7CA29A4799B8CE835C\",\n            \"PreviousTxnLgrSeq\": 68908157,\n            \"Sequence\": 67540268,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7785989866\"\n            },\n            \"TakerPays\": \"46311067\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"E93934AC91C1F8315FCC42D14F70F0B3161E85599F5DC90219FA8AB48DB6B34B\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"ecf\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rBqYpFjv2TLUiwx2Lr5vgGxoEgjhq1XnB5\",\n              \"value\": \"1000000000000000e-1\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"E93AF07130908FF3779413C7C48325A3AB27FCE609DB458447A8574158E62148\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"5015645579.68313\"\n            }\n          },\n          \"PreviousTxnID\": \"373A715D7D6E174B5F24D14B54EC51E3416385AC65DA58E55F9E8000B25AF23E\",\n          \"PreviousTxnLgrSeq\": 68897249\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rJw1L2RZTiPTQJSF7KmstuGrdNrTmdvAjb\",\n            \"Balance\": \"560519792\",\n            \"Flags\": 0,\n            \"OwnerCount\": 196,\n            \"Sequence\": 66304837\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"E94156242C71088943DB7BB8235230F4E37A23697B0626120FC02EF4DDA155BC\",\n          \"PreviousFields\": {\n            \"Balance\": \"553019793\",\n            \"OwnerCount\": 197\n          },\n          \"PreviousTxnID\": \"B86B0A31E75FBEDD8A45C0C7B5601056EC0E2D85920E7CC8DB262B360E58BD5F\",\n          \"PreviousTxnLgrSeq\": 69063150\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rEm8Pg6dKSuFWvEJK2Fnv8EvmkSTuNFJew\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"983\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"E94DEC16A6927F88CFCC73125B77730D27832D9EBB21C8814EF4A30F43C28F9E\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-7785989866\"\n            }\n          },\n          \"PreviousTxnID\": \"7187B7E570FA93F164D70BCB9FA9918E3FBD2ADC410C0542193F7A174C77C794\",\n          \"PreviousTxnLgrSeq\": 67991918\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rQ34CimjrmwQA4bz3qCwGRHPFuo8rbnVWv\",\n            \"Balance\": \"589905402\",\n            \"Flags\": 0,\n            \"OwnerCount\": 84,\n            \"Sequence\": 67516024\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"E952F1FB67F957E78FEBFBF4E481E828DC957E4DC4CBAFE72DA21ECF51BED0DC\",\n          \"PreviousFields\": {\n            \"Balance\": \"558905402\",\n            \"OwnerCount\": 85\n          },\n          \"PreviousTxnID\": \"EDC1B84CF479041D047D8198FC4C77CE7228AC88090F03BA88B8915ADDC7BBDD\",\n          \"PreviousTxnLgrSeq\": 69064051\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rLFVckNbciXAqgedJM92yZX7653rXcn4JZ\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"HighNode\": \"1\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"a29\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"E95E174D06FD7F40454E00BB5714D99E725FFD2CF7CAD6AD46C4B9B1CA0B7E51\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-11785989866\"\n            }\n          },\n          \"PreviousTxnID\": \"DED43F4CFB2BFC781E5A16C2D56381C464F88DE0DCD26348F85E8E3F23D32892\",\n          \"PreviousTxnLgrSeq\": 67976321\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rsdrgJ5xtkPpnWfJeeshHZLWmQEMS3cFzQ\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365308E1BC9BF04000\",\n            \"BookNode\": \"0\",\n            \"Expiration\": 722943636,\n            \"Flags\": 131072,\n            \"OwnerNode\": \"4\",\n            \"PreviousTxnID\": \"D6D83B09479BA5CB4258F778CA18E3BF5F5FD89B34940EC186204F4C0EDBBF17\",\n            \"PreviousTxnLgrSeq\": 67990892,\n            \"Sequence\": 67219931,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"E9645BD7ADB7BCBDF04ABD4442D5F1B593A399F9CDBD61D9B53417FDF3338101\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"15000000000\"\n            },\n            \"TakerPays\": \"375000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r3PYAn9d1DTFzJ9kuvFnhudgwsVZ6pm5hT\",\n            \"Balance\": \"5379964871\",\n            \"Flags\": 0,\n            \"OwnerCount\": 73,\n            \"Sequence\": 67442412\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"E96F696927286787031D65AED13941FE2E534485897657F9383CEB8F2326E730\",\n          \"PreviousFields\": {\n            \"Balance\": \"298450406\",\n            \"OwnerCount\": 79\n          },\n          \"PreviousTxnID\": \"BD3F981121EC07A4A7F0D5680EB14351FF66381C2BFD285F4BE9D34B5D0456FC\",\n          \"PreviousTxnLgrSeq\": 69057899\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"1\",\n            \"IndexPrevious\": \"1\",\n            \"Owner\": \"rpiGc7vb6vr5hWMxqK2NgEVpQkYhBXreac\",\n            \"RootIndex\": \"EA2624CAB17FD41EE945154C6F08D36CEEDBCAC92A27C07B9734F3D80EA23693\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"EA2624CAB17FD41EE945154C6F08D36CEEDBCAC92A27C07B9734F3D80EA23693\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rQJFPnXAsdHvbAL8JeEYNu5FQDW4mHL5MK\",\n            \"RootIndex\": \"EA27628F694215BBD1481EEE30755A374ED523A80DF0FFE28CDD53BB947C4469\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"EA27628F694215BBD1481EEE30755A374ED523A80DF0FFE28CDD53BB947C4469\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rGgjwqb3Lg3yvrb1CRRqcTghWvU4r7fvFX\",\n              \"value\": \"1000000000000000\"\n            },\n            \"HighNode\": \"2\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"97\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"EAAFC604700E4CBCE17A922C7E4680675EC3ACE0EBC8600CD62BDD970722388D\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-2335796960300000e-4\"\n            }\n          },\n          \"PreviousTxnID\": \"B89483264348EF709A3D8AEAC1455648BF41D1194C63A89FECC49A88186684A3\",\n          \"PreviousTxnLgrSeq\": 68149775\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-59612345091.43746\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rLCRC3mUAkWe4R8EwjZ43BGQs7hmpdGrbE\",\n              \"value\": \"1000000000000000\"\n            },\n            \"HighNode\": \"4\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"24\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"EAF5709BA602E9E9369E3FFF43EF1A136B94ACF2994203CC048118CC71E9612E\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-83877318538.43746\"\n            }\n          },\n          \"PreviousTxnID\": \"DB57296ADDC1B28924426F94EAD261E0243E92567DDEC56B1DF0325E04A3E6C2\",\n          \"PreviousTxnLgrSeq\": 68991226\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"3\",\n            \"IndexPrevious\": \"1\",\n            \"Owner\": \"rnfuLKZgLhpw1UJorfJH8G1ukEyA7JLf3n\",\n            \"RootIndex\": \"772B12EA93B0BCF688AE7516C76D212E7FD4065D8BC680102FA909316843D98A\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"EB025BF53D9B8A26C779AE8693C8E827369E61607EC77FF241D777B2646055D6\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rpq6ooRTok73Udp4D58zesfDJeYM1t5s8C\",\n            \"Balance\": \"4815342050\",\n            \"Flags\": 0,\n            \"OwnerCount\": 228,\n            \"Sequence\": 66716947\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"EB040A78B87C8DD2DF67A2879A11B1D70D18DF566FE54D1B2F719ED983E905A7\",\n          \"PreviousFields\": {\n            \"Balance\": \"3983798333\",\n            \"OwnerCount\": 230\n          },\n          \"PreviousTxnID\": \"C893A1222FB9AF98EB9CC4309D0AF51A07E081A34C29AD79BBFEBE8915283B75\",\n          \"PreviousTxnLgrSeq\": 69031708\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"raANwNJ9aqncwhGT1Eh9mksqTvAMm3WZG3\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365211C37937E08000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"1\",\n            \"PreviousTxnID\": \"A078CBC46521928CBCF55F58A3DEA79AD487A82C2B773C5ED67EDC1DF29EBCC2\",\n            \"PreviousTxnLgrSeq\": 69037718,\n            \"Sequence\": 67554132,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"EB0F25085D9CA664EDC8CA43A609280A5C7E0502AA7691AB5A36250A19BBE0D8\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"4500000000\"\n            },\n            \"TakerPays\": \"22500000\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rGT6ze5CuPEUzsk92YnLLkEqjv6qqhabrF\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520775933743D7C6\",\n            \"BookNode\": \"0\",\n            \"Flags\": 0,\n            \"OwnerNode\": \"178\",\n            \"PreviousTxnID\": \"8624687F0AFBDF1774622312CF9EFC8491E103675C84C664D38FBD41D389A7D9\",\n            \"PreviousTxnLgrSeq\": 69060957,\n            \"Sequence\": 82846,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"EB52A4927B6FA3749DEE3A13D406DD93392243EB223CF00FC110FEEFCD5975DC\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"1669675636008047e-4\"\n            },\n            \"TakerPays\": \"350565094\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rEpLbrik9r6KpjVbWXA71SVQnMCkY8BEUK\",\n            \"Balance\": \"1331938933\",\n            \"Flags\": 0,\n            \"OwnerCount\": 27,\n            \"Sequence\": 66709824\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"EB59B50749CD9424FE5D1DFD8FDCAA7B5E619601EBD3E70F2E438C0D0015883F\",\n          \"PreviousFields\": {\n            \"Balance\": \"932983170\",\n            \"OwnerCount\": 29\n          },\n          \"PreviousTxnID\": \"60E9C8F079DD91F86DD104AA0C120C55D9A71804397461B263591282595A6BB8\",\n          \"PreviousTxnLgrSeq\": 69038193\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rMp5QYssUeXAdg9G7b6XQPCEb1uHCjZ7XQ\",\n              \"value\": \"1000000000000000e-1\"\n            },\n            \"HighNode\": \"7\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"ed1\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"EB9AD722FAA25A38486888B4CF0F579F56AAD8D77BA7BE9D25644AE6C217114B\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-12123735000\"\n            }\n          },\n          \"PreviousTxnID\": \"A76AA6CCCA8EE6AF7B2507C333FADF4022C102C2474B1C8596702EE3976969FA\",\n          \"PreviousTxnLgrSeq\": 68899338\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rGKv1gHL1ANheQZ4GMCikKaGYoKJC6o6wG\",\n            \"Balance\": \"1205971084\",\n            \"Flags\": 0,\n            \"OwnerCount\": 230,\n            \"Sequence\": 66128613\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"EBAA6D4600A1032634CC0528166699E358F18BADC9B9A250DD9793DA4B782A2C\",\n          \"PreviousFields\": {\n            \"Balance\": \"1137127649\",\n            \"OwnerCount\": 232\n          },\n          \"PreviousTxnID\": \"2C4D04FBA0E4253A2B296B9F8EC9CB03428BBA382113A0B2A1B316758A97932E\",\n          \"PreviousTxnLgrSeq\": 69064079\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"raBj3rXVSVdcA66ge5mMyS1iWzMFSyxmB6\",\n            \"Balance\": \"4469338589\",\n            \"Flags\": 0,\n            \"OwnerCount\": 148,\n            \"Sequence\": 66229774\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"EBB166066ACFC5AA4B682E8991BAC4D4C581D990FBCD155E1E46374618AFBD7A\",\n          \"PreviousFields\": {\n            \"Balance\": \"4262161344\",\n            \"OwnerCount\": 149\n          },\n          \"PreviousTxnID\": \"751591231D7FC2498BCFECC98BB9C953D8DD953216397FCDA02D13BFADB2F61C\",\n          \"PreviousTxnLgrSeq\": 69062290\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"ratboJVqeveTRpRvto7G811syRvhgQXBtB\",\n            \"Balance\": \"112000000\",\n            \"Flags\": 0,\n            \"OwnerCount\": 51,\n            \"Sequence\": 67114056\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"EBBD56F7E5F12EF70EF8F6CC5DB3BDC52D55BBE1A1B08CC62E463AE18545FAD3\",\n          \"PreviousFields\": {\n            \"Balance\": \"469126481054\",\n            \"Sequence\": 67114055\n          },\n          \"PreviousTxnID\": \"56CF52A58604568870E2FE9CF1F12B0F62005E1B40A9402960F6710B9EB71477\",\n          \"PreviousTxnLgrSeq\": 69064067\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rC4M78e2ktZz8QwB5SUSEeeeSi5rcnxrJ\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521C6BF526340000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"f\",\n            \"PreviousTxnID\": \"DF5DC2A8664DC1DF3F9E8877565DE2D43FADA1A5E7A591E80A8AF46A29D2499A\",\n            \"PreviousTxnLgrSeq\": 68918617,\n            \"Sequence\": 66527130,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"EC03ED9BFADAFEF5B9F3760D3C552553EEB3B9E0FD5E387F43F0CA9A56F27A22\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7000000000\"\n            },\n            \"TakerPays\": \"56000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rNCESwgSpY1pUyhQGzGd7T38zXXzxUCLLj\",\n            \"Balance\": \"418304475\",\n            \"Flags\": 0,\n            \"OwnerCount\": 8,\n            \"Sequence\": 68401371\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"EC1758CC807887F7773E3B21C2A141BC9439551C90089015D19CACE211A04A6B\",\n          \"PreviousFields\": {\n            \"Balance\": \"29999970\",\n            \"OwnerCount\": 9\n          },\n          \"PreviousTxnID\": \"57E70C36009EE1DFC23A6C0A65E9AFE86FD4B84F75E8AAA03448C4B230C316A1\",\n          \"PreviousTxnLgrSeq\": 69047568\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rDjnNyWymW4pUzukDcEtmySixuXR4RLsKV\",\n            \"RootIndex\": \"0789197202F766CEB7B1164E9C3D1944318F2BFC048EC133C1FC04A6C9A59B63\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"EC2C9F892DC48902D7FEC1415A9C6B74A96A6148FC7F866442461B826C52F9F4\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rfc7iQscNnWECTgwfRg4T6MExyVTCiTWTV\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36531FF973CAF5ED5C\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"1\",\n            \"PreviousTxnID\": \"095A785424E6676E800521F24A4B4AE5D02B0CA72A2518804661180CA0D09557\",\n            \"PreviousTxnLgrSeq\": 68856320,\n            \"Sequence\": 66755367,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"EC39FB6C7E0DD42D954E3C6B27596AFA336FEDD2152E594E1429AB326C8FDC9B\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"93431878392\"\n            },\n            \"TakerPays\": \"8408869055\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"2\",\n            \"Owner\": \"rUV7WQGpjkPJNuAuggRRFLYVoaegHzuxoy\",\n            \"RootIndex\": \"CE46CA8CEC46D9F3C4334B96FFC38EBD5878CE754BBF0F82BD31D17CA58A40A1\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"EC44D6870AE4ED302B0D998EE99D23E53AB0E0EF8A27B4AA5A04C0EE64FDDD8D\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rfh8snfXUdwqc25vUfwxJxJnVM1n1dJvoh\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365211C37937B61AE4\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"6\",\n            \"PreviousTxnID\": \"24E320046566AB66F79C4779E636EC131698633D53A1BCAE3BA956625690FBF1\",\n            \"PreviousTxnLgrSeq\": 68995200,\n            \"Sequence\": 67755960,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"EC6CC9D2F880E4ECE107CD903DBFDD3B5E8FEC579FEB140899EAF8420F085268\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"55366778430.76617\"\n            },\n            \"TakerPays\": \"276833892\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r4izcArVy7Ccp9j1VEwnbso67AsYhaEjdJ\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520FFCB9E04E6616\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"2\",\n            \"PreviousTxnID\": \"1670A9DFEEBD425B3A667DF423CCAB36FF2C7CCAD6564E9D214B6A197C63AE6E\",\n            \"PreviousTxnLgrSeq\": 68995527,\n            \"Sequence\": 66579208,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"EC9A3308402659C2C422459E01029F69E1F1BF6DB6CEBCF1476DF88CE9738DC7\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"11500000000\"\n            },\n            \"TakerPays\": \"51749999\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rBhRwsAuVFJ3VY37rd5R9YzqrCRjVXQggX\",\n            \"Balance\": \"704181227\",\n            \"Flags\": 0,\n            \"OwnerCount\": 131,\n            \"Sequence\": 66546632\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"ED18914290C0ACCAF96409E3B2F41A85B7874B6F60A929CABDEAF3E0DE02E69F\",\n          \"PreviousFields\": {\n            \"Balance\": \"669181227\",\n            \"OwnerCount\": 132\n          },\n          \"PreviousTxnID\": \"A082DE9BE69E9F42D7CB26E75639298DB028F19FC94A6864343CE182086024EC\",\n          \"PreviousTxnLgrSeq\": 69057321\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"0\",\n            \"IndexPrevious\": \"0\",\n            \"Owner\": \"rDzBkddc4AVrm4RWuXJRhH1rrkDpKNFwTg\",\n            \"RootIndex\": \"ED463693B2074F9DA3E0D4AF394565D7167C1BFD49666719E6988BC45F80EBBB\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"ED463693B2074F9DA3E0D4AF394565D7167C1BFD49666719E6988BC45F80EBBB\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rHv2LE2MKKrQ83NMbQ2vv1DUDjByosxthL\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520F42479CCF8C22\",\n            \"BookNode\": \"0\",\n            \"Flags\": 0,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"86FDC905412D5E006B19310C69C6A28C1D0C9D83BD77174287F5208A5005423A\",\n            \"PreviousTxnLgrSeq\": 68985130,\n            \"Sequence\": 68499492,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"52894159590.99591\"\n            },\n            \"TakerPays\": \"227180415\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"ED5A76E73EFA7B88221E45DCB55E4AFAFF90B505DE7A0485B48C3BE9C5F645A9\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rN57KF6tqiqqc4agjC6nvZeQzovWYEPDCT\",\n            \"Balance\": \"812882086\",\n            \"Flags\": 0,\n            \"OwnerCount\": 161,\n            \"Sequence\": 66619161\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"EDAC1403D38F67D6F82891180ED537680895AB2C23888088B5422D901F6E2DCE\",\n          \"PreviousFields\": {\n            \"Balance\": \"733352086\",\n            \"OwnerCount\": 162\n          },\n          \"PreviousTxnID\": \"253C5D04BD3732A3E98EF26689A104B9450110C638CA3ACE0E0AEF2267F1D89B\",\n          \"PreviousTxnLgrSeq\": 69056061\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rLzgqyEetWAoARj7XcpWExwpRCvYq5zHi6\",\n            \"Balance\": \"110663040\",\n            \"Flags\": 0,\n            \"OwnerCount\": 27,\n            \"Sequence\": 67630747\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"EDAD78A572890826ED0968BB1076673895AAB7592F5F3B844AFD7BA325359492\",\n          \"PreviousFields\": {\n            \"Balance\": \"68769067\",\n            \"OwnerCount\": 28\n          },\n          \"PreviousTxnID\": \"448A0EE217C0D2584FE3F2CDE6726C8F5AC36E5EF3DDBCB358AB2A168FCA6566\",\n          \"PreviousTxnLgrSeq\": 69016019\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rwhKYMZGMmf9zeLdZWq4rs31DQeaxn65R2\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365211688627664000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"6\",\n            \"PreviousTxnID\": \"BFACA7FF16F076DDE4C1E3EC7537CF6F92C34409F37CFBE038992C3F78FFEF42\",\n            \"PreviousTxnLgrSeq\": 68968563,\n            \"Sequence\": 67373539,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"EDB474EC9928DC6EB4B919853CDE5E01C0B0CFD8252745BB6E2B41CDD9DE5500\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"4500000000\"\n            },\n            \"TakerPays\": \"22050000\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rN8rfe7hU4CCkmEiDkj9fg8pgBp5fa8p2j\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521C6AF509180800\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"9\",\n            \"PreviousTxnID\": \"CB2A08CE3FD3A3D656F97228EF972A63059335AD19958510478AD1BE2D4CE3C8\",\n            \"PreviousTxnLgrSeq\": 68871643,\n            \"Sequence\": 65991553,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"EE002DA507CB49CC0FFF5654CFFA29063F2F22528F2EF6656A90D90678530676\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"30000000000\"\n            },\n            \"TakerPays\": \"239967000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"6\",\n            \"Owner\": \"rMp5QYssUeXAdg9G7b6XQPCEb1uHCjZ7XQ\",\n            \"RootIndex\": \"F26B16EFD1DE964AA42AF2688529D63366E9DCB512BC900517542A1B92B928F8\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"EE3D34AED5FB455BBDEC166F933BB1945F0A85D655A8C394D432FDEC7A3B7EB1\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rDWTpV5omq7rh5Wnro4noWmWFEFcRx17ma\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365207759337CCA14F\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"7212637992CC348035D0758E69888B7823ECD26263740EDB527126999B9395B6\",\n            \"PreviousTxnLgrSeq\": 69055718,\n            \"Sequence\": 68039697,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"EE535CBCD03E81E7E8A8680EB7E69E289D1F3AAA4EA80D6BB0F1199CF5AB7D3C\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"1259233038597572e-4\"\n            },\n            \"TakerPays\": \"264388568\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rLVaKJ42tddq3vJAFiPibubt2HbBpTHuX7\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36530C6F3B4043F786\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"d\",\n            \"PreviousTxnID\": \"ED5AF5C0127A90356E1F5700EA4A0707C15C01C3FD9669344023BCB49153464F\",\n            \"PreviousTxnLgrSeq\": 67982175,\n            \"Sequence\": 66153109,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"EE5A1BC248C62FE879CD48123E0663A435AA5D721C63E5DE7B18B74284831D4D\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7843214474\"\n            },\n            \"TakerPays\": \"274512506\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rGx2XhvjUKvW7Wkz67b5ERSKhb7m4fZmrj\",\n            \"Balance\": \"29128941793\",\n            \"Flags\": 0,\n            \"MessageKey\": \"02000000000000000000000000D877FEC5D6670F9BBFD5F648C5BD18A6F70BBE93\",\n            \"OwnerCount\": 138,\n            \"Sequence\": 57919756\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"EE6E921432FC357CD35AAF4768EBA85DD5B87005DCDC7FEC1ED8AF592C64C49A\",\n          \"PreviousFields\": {\n            \"Balance\": \"28768941793\",\n            \"OwnerCount\": 139\n          },\n          \"PreviousTxnID\": \"40DA8EFB751ED5217825936700F5B7C20BE4DB43E895BA8F9F80004795F353F3\",\n          \"PreviousTxnLgrSeq\": 69059831\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rGRyfRcJ7cSYSu6rw5VpNJReEZt9Gzy9a7\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521717B72848FC10\",\n            \"BookNode\": \"0\",\n            \"Flags\": 0,\n            \"OwnerNode\": \"1\",\n            \"PreviousTxnID\": \"065C99BCB3212BCFA0FE5D045A16ADC88FE42398BF3270536770830105CF0F8F\",\n            \"PreviousTxnLgrSeq\": 68944915,\n            \"Sequence\": 67157704,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"EEAE1F802DA41F2C06BE1838D906C24ED5DCA9BB82C1B37D36F82852829CE58E\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"4696497466.5\"\n            },\n            \"TakerPays\": \"30527233\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"d\",\n            \"IndexPrevious\": \"b\",\n            \"Owner\": \"razceqmpdpjLd5o52i1GiaZJhmB8SEbfCa\",\n            \"RootIndex\": \"96587E178090E46CE3C330C5FAA7424BD6415AE2A0F93B1137608016E9EF3245\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"EEAE835B6F897CAF230BC5585B096BC4DDA0F9E60D1F9D411D3CA032E0261ECD\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rnG1UdmTmDXHaQp1vVp4jsH5ZhJKp97TjH\",\n            \"Balance\": \"295043145\",\n            \"Flags\": 0,\n            \"OwnerCount\": 58,\n            \"Sequence\": 67436927\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"EED9389328F3940B08A67F18A175289120C179A7698DE2AF30D26BE6CB379CB3\",\n          \"PreviousFields\": {\n            \"Balance\": \"205043145\",\n            \"OwnerCount\": 59\n          },\n          \"PreviousTxnID\": \"18F3523710A12AB25FECFA61198230B207E82FAC4F339704D9E38C617B2744AF\",\n          \"PreviousTxnLgrSeq\": 69048816\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rEJjxWqDiG1H1PDqXXnwdHjxAUTnVGmrDS\",\n            \"Balance\": \"504498616\",\n            \"Flags\": 0,\n            \"OwnerCount\": 123,\n            \"Sequence\": 66994189\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"EF2090878DB52A088ECAC05313D8C3DF6F3D4413E97C1498BD45BEB2CB33AD19\",\n          \"PreviousFields\": {\n            \"Balance\": \"464215125\",\n            \"OwnerCount\": 124\n          },\n          \"PreviousTxnID\": \"F07D5CBA537E520F4056548D76294CB88DBFAB29FF7D06A92ABB3C684354BA77\",\n          \"PreviousTxnLgrSeq\": 69063857\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rGx2XhvjUKvW7Wkz67b5ERSKhb7m4fZmrj\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365310EAED59C99E7A\",\n            \"BookNode\": \"0\",\n            \"Flags\": 0,\n            \"OwnerNode\": \"4\",\n            \"PreviousTxnID\": \"FBF584B8DDB5DDE345CCF1E5E91E32DBA50E288B8D5491226B98C9BE06C7D79E\",\n            \"PreviousTxnLgrSeq\": 68152992,\n            \"Sequence\": 57919740,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"EF25E4D3839817FEB662202AA9B51826C9D1DE4915FBC3D2970327D83B570BAB\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7560000000\"\n            },\n            \"TakerPays\": \"360000000\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r4F6d9gkY5JPEkDEmUwcLgGX2NSV6o7DyR\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521AA535D1081D26\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"f\",\n            \"PreviousTxnID\": \"762D5B9D2381D87664B4B7B33C5673873811C0464C2D19108E07DA26DDD0DCA7\",\n            \"PreviousTxnLgrSeq\": 68898929,\n            \"Sequence\": 67033114,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"EF47BE7863C33092A727FFB898AEAEB0BC8ED83C01B67647CC6B39FB113D209A\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"11776464340\"\n            },\n            \"TakerPays\": \"88323482\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"raDJvZX8gbRfZ3hUWimZPdVcDRzsZQdhmr\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521D9B1F5D20D555\",\n            \"BookNode\": \"0\",\n            \"Flags\": 0,\n            \"OwnerNode\": \"15\",\n            \"PreviousTxnID\": \"2371117B6C8311CDC6489D724DBEAE30BBEC4DF200CD7AD64814D855191B8A97\",\n            \"PreviousTxnLgrSeq\": 68940596,\n            \"Sequence\": 63094144,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"EF67859E3061F67152D776B2C3DD52D8DD785364E31DD67A54C12AA11D0F2475\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"12000000000\"\n            },\n            \"TakerPays\": \"100000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"a\",\n            \"IndexPrevious\": \"8\",\n            \"Owner\": \"rJeogNqHS69HkL8Le6zZoezAhGwpU4WPsc\",\n            \"RootIndex\": \"D4067DA76B6281392EA725986DB115B74AD2AC493C4209ECAD673437A7ECF4E8\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"EFADE49401D67814B429B67CA795B10D10EFBEB12827E576CB03B88723087D91\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rwCzLwdFp6DLPMfZRTUN67UB79XbbmYt2o\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520E277C2048D010\",\n            \"BookNode\": \"0\",\n            \"Expiration\": 726960596,\n            \"Flags\": 0,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"E95F036F8D81184ADFD35D0EC65F8C979F3034705A1B3DC2582B2FC83DC5F90C\",\n            \"PreviousTxnLgrSeq\": 68993708,\n            \"Sequence\": 67150570,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"EFBFF91C3DC1357CF26A17C369AAB100B62A70AD052A703E405B66C75568C3A9\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"1255000000000000e-4\"\n            },\n            \"TakerPays\": \"500000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"2\",\n            \"Owner\": \"rwBDva3asfNrXQeBmnkV3xbMnw7xi5A3dE\",\n            \"RootIndex\": \"4F5D20D768F152B9A7D0444D2147BF8B092D22F6D2CBAB97858DF00512679F5F\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"EFFAE2662AA213CCADCBB41F1B0045E4B03A2834FD787579D7CA8F492C29839B\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rDsyrKqgbAuWUu1fmJx84Vgm3X4H53rztM\",\n            \"Balance\": \"1320572671\",\n            \"Flags\": 0,\n            \"OwnerCount\": 19,\n            \"Sequence\": 67693693\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"F00C606821F7CD2ABEF3FAC9C8EF69C827A7863AF0F298DCA7877E7E1A5414C0\",\n          \"PreviousFields\": {\n            \"Balance\": \"152674192\",\n            \"OwnerCount\": 20\n          },\n          \"PreviousTxnID\": \"6CDAE8B9F35E9F61EE13768A0C33DB52C04D4D0E9EC5867F3F444B55BA0F8DCB\",\n          \"PreviousTxnLgrSeq\": 69038993\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rMd7wG9Hzf5YXsqZ48kNRFLARM49oydLry\",\n            \"RootIndex\": \"F01D831E5929BB9B1BDE5B219B842309E5AB88FFAD6444768CC553195EBDC2CF\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"F01D831E5929BB9B1BDE5B219B842309E5AB88FFAD6444768CC553195EBDC2CF\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"ee9\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rabF4KeYghT7RWidbkeS75fLWQzrDixwpH\",\n              \"value\": \"1000000000000000e-1\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"F03A4A94663DA9E6550FEA337C7F197C057FA15FCE663C33F55720F70107C6E9\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"51954206753.96992\"\n            }\n          },\n          \"PreviousTxnID\": \"E947AC76AE8E5D01C2D677E4B3D10E21C77CB8FA38AB46601370B5DB0959974E\",\n          \"PreviousTxnLgrSeq\": 68994795\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"17\",\n            \"Owner\": \"r3PWgfzUbXKYDoLD6p49JqiabjfQCj14AZ\",\n            \"RootIndex\": \"91311DD5E22ED89862DA57132F1044EFAC4073DA17BB86BF87ECD9E8EA12207A\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"F05163D86F978387BA87CAD6D4883CE5E31D7241FEB1CBED566D8156DFA1D205\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rsqgHRLHgg1vHi8iA1w1J9amuuUAjwEzwa\",\n            \"RootIndex\": \"F0689228E94BABEDEB9D2CC8BFBEA77A169D0C56E101AEA4176CDD3C9710ECAB\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"F0689228E94BABEDEB9D2CC8BFBEA77A169D0C56E101AEA4176CDD3C9710ECAB\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-6.5345\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rQJFPnXAsdHvbAL8JeEYNu5FQDW4mHL5MK\",\n              \"value\": \"9999844278063880e-1\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"de9\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"F069D687B2BC722F64FFBA0CA2DF92F94477EDFDEF57A86905B8CBCBC474C89A\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-8976620852420000e-4\"\n            }\n          },\n          \"PreviousTxnID\": \"C08E88ABF33CD6450C3F5BAB3493F933E2E1BAADF1FC02DC884F16EE7AB31A08\",\n          \"PreviousTxnLgrSeq\": 68106003\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"eaf\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"r3oDrfWCL4zZRGoUNRd8Ywu9PJWFZXc764\",\n              \"value\": \"1000000000000000e-1\"\n            },\n            \"LowNode\": \"3\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"F0EF1188AE8A27C55E18CCF352745264B45908587853DCD09E61B6DFCEE3FAC0\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"1075747597561109e-3\"\n            }\n          },\n          \"PreviousTxnID\": \"AAA6B3F4E712515016025AE646CF58387C2C4CA3BF519B0DA94A7183144284F0\",\n          \"PreviousTxnLgrSeq\": 69038149\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r43hxvGDZqmKmLugK8oJ32r2f4rxuvUntb\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365208E1BC9BF04000\",\n            \"BookNode\": \"0\",\n            \"Expiration\": 727141464,\n            \"Flags\": 0,\n            \"OwnerNode\": \"21\",\n            \"PreviousTxnID\": \"CB6FFF0B9D6ECECBD939A20C8417B54328288FF46D2852F9944AF277E6E11CE6\",\n            \"PreviousTxnLgrSeq\": 69039669,\n            \"Sequence\": 59395086,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"F0FF01F5593EECA1D75E45E1A313D091464C019A38FB5F03C5619EFACF7DBCAC\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"4000000000\"\n            },\n            \"TakerPays\": \"10000000\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rBzk3TdhfdbidCHeKWfmQ5dy9AuAtGbXeY\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365316542C978F166B\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"1\",\n            \"PreviousTxnID\": \"4AC9452409F80E6F049D9843708D86D88EEBD7E2104F8464758B3A488023C6FA\",\n            \"PreviousTxnLgrSeq\": 68849287,\n            \"Sequence\": 67686264,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"F11540523963232BE186161585FA0D57D688E2368D4CE247B1A78230F0A7AABC\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"6505349450\"\n            },\n            \"TakerPays\": \"408861212\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rpf1wWbuPjafvAgD4f9vtX88Ut9qurPRHS\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521057ACF5F78000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"9\",\n            \"PreviousTxnID\": \"BDA73511034A0D229F84468149F0943F605CB7A88251BCB3643207C8E830F375\",\n            \"PreviousTxnLgrSeq\": 68973656,\n            \"Sequence\": 66662286,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"F12212E980C856EC4F16FED488A16B785EDE64958762B3E3E899F7C38D72638D\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"1300000000000000e-4\"\n            },\n            \"TakerPays\": \"598000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"4\",\n            \"Owner\": \"rH5oQKTQ5VaFHC8MFN912377XMG5EH3vTB\",\n            \"RootIndex\": \"59586C41D128239E26E8F6A1487B0156E67DF0858F55A36F2990C23746830A62\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"F12DB581676234E5A5D643AC5CB490970E5AE727F95EC6E0BD04392FE695FC9A\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"10857969598\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"777\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rD3MRnTt6tvvtt7o7F5p8B49toAUWnoLmu\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"LowNode\": \"5\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"F136BD807F24BEE1DE0211DB86A2EACC51C750C993A1817EEDA8D7DD1DBCC6C9\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"24857969598\"\n            }\n          },\n          \"PreviousTxnID\": \"2BAAAC68E2A59B461E4AED59BA528BE51CABDCC1FA72F503CC26D7C8979833A0\",\n          \"PreviousTxnLgrSeq\": 68754160\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rwSQqB6yNHd2tiXUhJ2wkULgq3dFua1r41\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36531FF973CA4247F9\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"5\",\n            \"PreviousTxnID\": \"22638EC4CD71DE65078C12357D4D67FD1511F5CC3E7D89136442367B4BE39C03\",\n            \"PreviousTxnLgrSeq\": 68807250,\n            \"Sequence\": 66556530,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"F1442C60EEC0CCFE73928F8A0A1D3161A69F610E4E152B95FC550D8E6258C96B\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7785989866\"\n            },\n            \"TakerPays\": \"700739087\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rN8rfe7hU4CCkmEiDkj9fg8pgBp5fa8p2j\",\n            \"Balance\": \"1888057384\",\n            \"Flags\": 0,\n            \"OwnerCount\": 196,\n            \"Sequence\": 65991642\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"F17C56C3632380A4EA2B1DAE944661682DAFD7E64DFE19C36EABA89D87EF3A90\",\n          \"PreviousFields\": {\n            \"Balance\": \"848090384\",\n            \"OwnerCount\": 198\n          },\n          \"PreviousTxnID\": \"866161997777B3700454D72E4907FC105CB03C7A5DBBE280431A6D22AECDC7A1\",\n          \"PreviousTxnLgrSeq\": 69059752\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-8782581081197079e-3\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rLkhJhEaChEegzryMAeps63ghhG1yXzifL\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"e0f\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"F1AE76F162AE1A6906BA98BD1C2971CEB8D289A7FD064AC879E3320361F3F45D\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-1020562404587793e-2\"\n            }\n          },\n          \"PreviousTxnID\": \"D9E39997C9D11617132FB59D670289A433D89CC67FDD4AE6481865B4B3E7FA77\",\n          \"PreviousTxnLgrSeq\": 68991405\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rE2zUmDvH8vtBsGPBTdLSJW8rDLNVy8g4V\",\n            \"RootIndex\": \"F1CBCF1693AEAA3424011E6D73262EA0B66B980EDF9AE0AFBD7706A35CE35F68\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"F1CBCF1693AEAA3424011E6D73262EA0B66B980EDF9AE0AFBD7706A35CE35F68\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rMrFWesXLbeMANpexJkZdYYtCwhqot4x6B\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521717B72E0D7063\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"5\",\n            \"PreviousTxnID\": \"2DB3BD0A3799BEE060F6579084BA2233F3A891BD228A11F2346D585D654639DA\",\n            \"PreviousTxnLgrSeq\": 68901474,\n            \"Sequence\": 67169655,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"F1D6EC9F7F641F8186B616759B2C6C8F093A236ED019D4A72D6D248FBB0346BB\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"15571979732\"\n            },\n            \"TakerPays\": \"101217868\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rwCDD5H9MDWdQE4y15hzipJWXjZpoZWPgL\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521AA535D3D0BFE9\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"6\",\n            \"PreviousTxnID\": \"EA12A86D815F4DDBF93D41187A216B4126A9FBCF1F40082B211C5BCCB49A961C\",\n            \"PreviousTxnLgrSeq\": 68898952,\n            \"Sequence\": 66575876,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"F227FAFBF6D1A815C6D776661866C3C7CA089C9DE246FB8B4CA57EEC1B2D2859\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"1000000000000003e-4\"\n            },\n            \"TakerPays\": \"750000000\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rzNhpkxVUc86h9CJyB1qssHYenzkVpyn7\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521717B72CB9CC92\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"7\",\n            \"PreviousTxnID\": \"5F7EBBA59AAA45F4B82148A83F76224E2DEC23D25BEAEAC8120917856A7827A8\",\n            \"PreviousTxnLgrSeq\": 68901488,\n            \"Sequence\": 66818317,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"24177849067.5\"\n            },\n            \"TakerPays\": \"157156018\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"F25641EA39A100751C233432738DB32381A84D82246554DE25545779BBB44FD0\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rC4M78e2ktZz8QwB5SUSEeeeSi5rcnxrJ\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36522219547C0A0C49\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"c\",\n            \"PreviousTxnID\": \"C52DA239505C446F94913D77E992F43E4DBCC7F85671E76D59EE6A8CC5C71FB1\",\n            \"PreviousTxnLgrSeq\": 68153356,\n            \"Sequence\": 66526943,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"F27249A39B5B5A0C436BF5439317E1EE46A2ACDFB2712BE64FC51EFFE524BDE9\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7000000000\"\n            },\n            \"TakerPays\": \"67185999\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rBCS9nAyaFuM8LDym5gJGRxEqmmH9mRhxW\",\n            \"Balance\": \"9490274531\",\n            \"Flags\": 0,\n            \"OwnerCount\": 93,\n            \"Sequence\": 66613840\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"F27DAD190F4EF0F00798851837BF58B0B45C42CCD398BBD2D6D9890747BCE253\",\n          \"PreviousFields\": {\n            \"Balance\": \"210274531\",\n            \"OwnerCount\": 94\n          },\n          \"PreviousTxnID\": \"B0AB2693CCD9B31AF91C6AB09EDF5591265478FD54BF5B01F35EC6A9CAC1FCB0\",\n          \"PreviousTxnLgrSeq\": 69063564\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"f\",\n            \"IndexPrevious\": \"d\",\n            \"Owner\": \"rQHveZ6yCKwNSGRiu4QnTSjJbLRfgBr72p\",\n            \"RootIndex\": \"016BB46A51876D79719BD124CB169E9E012536A44B336026E4BB4F4BD4FDA0DA\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"F291940BB052C9D9B671455979D82F55992E14AA40C3C6C75414AFF2A1557D8E\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rUg2bKuyZzQLPopT6uNZK7w4zvJHLB5LV\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521BACF6B65EDA6D\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"95A4F6782EF08E30784EEFE1F7591A2D87A62DA0C641CCB522733A1CD8FDD7C5\",\n            \"PreviousTxnLgrSeq\": 68898557,\n            \"Sequence\": 67761569,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"F2A608D1806EE6C912D35DA677574779FE69F1A447D46414774337B4651190FE\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7785989866\"\n            },\n            \"TakerPays\": \"60652861\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rJxQUBBc7qcHrGcjrb265KwXeZrVio5Eri\",\n              \"value\": \"1000000000000000\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"252\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"F2BAAF8D446B4E283225CE8FDBFB213E392F649B3F31B54AAAC09515CA5C2624\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-1399241951779892e-4\"\n            }\n          },\n          \"PreviousTxnID\": \"17B3ED1BADFC542255B86B68D3A9C51D4D10CD91010AADD0450C8CE6B862BE21\",\n          \"PreviousTxnLgrSeq\": 69050912\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rhPNtVD6tfZTrxvebJaquV8Bh5F2Kh8cMa\",\n            \"Balance\": \"238057738\",\n            \"Flags\": 0,\n            \"OwnerCount\": 92,\n            \"Sequence\": 67342444\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"F2D39F1D25073978D69D6C60833E9D21072EC159FEBD4CBCC7D5CBF882F6FA79\",\n          \"PreviousFields\": {\n            \"Balance\": \"207732470\",\n            \"OwnerCount\": 93\n          },\n          \"PreviousTxnID\": \"0D391F30E541586FAB6AB0D748E467C0AE2055804481FD86C95F5063571302BE\",\n          \"PreviousTxnLgrSeq\": 69060889\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rKBwHqR3S55CpYFoX1bucD2PFMgSjPAFvu\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652135CBF0206A000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"b\",\n            \"PreviousTxnID\": \"C436302CD376344AECBA7DEC9FEF60EAAF1E929C3EE3BC71F6FD75ECB8E1485A\",\n            \"PreviousTxnLgrSeq\": 68920816,\n            \"Sequence\": 66598743,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"F2F609800586A798A92B40E1BBF0CAA22B486E09B404362280AE28C4F9DBC1CD\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"35000000000\"\n            },\n            \"TakerPays\": \"190750000\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rKso7KmktCCYBfe79sNAFnfKffvansBBRz\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36531550F7DCA70000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"7\",\n            \"PreviousTxnID\": \"B6E15C2F6618E26C37C22680912B728E663B261F2255529A319E299FEC052295\",\n            \"PreviousTxnLgrSeq\": 68908186,\n            \"Sequence\": 67328570,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7000000000\"\n            },\n            \"TakerPays\": \"420000000\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"F3179F4250E80AB8211B8EAB685D653AACA66D27AB47999588F8E46266E43EAB\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rHWCQnGF4sc9MqnA8GpZC9L8SZmzv5zkMp\",\n            \"Balance\": \"500047171\",\n            \"Flags\": 0,\n            \"OwnerCount\": 178,\n            \"Sequence\": 67003962\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"F329AAC795EF6F971DED3E89C0C49217EED935A1FA573C5D8CA142D21150E861\",\n          \"PreviousFields\": {\n            \"Balance\": \"460338623\",\n            \"OwnerCount\": 179\n          },\n          \"PreviousTxnID\": \"277A0EE276F9FC2E8E073C8085F5AE30C6F1D6C8D27555183E3DEE174B94E27B\",\n          \"PreviousTxnLgrSeq\": 69063186\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"b\",\n            \"Owner\": \"rBLh3SrV1ALEEfJiHKYiaSxoRxG7R9SuEh\",\n            \"RootIndex\": \"145A63BA58D07F394744D411C0B65EE08EEC04A8FF6F6CCC0A75C60C1D219DF3\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"F32A408377A6E3EADBF6380D4710F659ADA9AD548CA39E88D82C36E57F9BFEE0\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-64310875416.80327\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rNvk1SNQZhU6fsyMuaTeLucyw5x5uxfxQy\",\n              \"value\": \"9999999999999999e-1\"\n            },\n            \"HighNode\": \"1\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"7be\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"F35853E525E7F6033A659F91D5CD34137FF7767966FBC14ABBAC3AECDD213D2B\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-1398051114528393e-4\"\n            }\n          },\n          \"PreviousTxnID\": \"CD8B2215F1EAD3C790737A632696B9EC00E6D81F137A21EEF6D116031F43D130\",\n          \"PreviousTxnLgrSeq\": 69034903\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"5453047829.19538\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"b41\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"raLEGx6aGsVshgdT3oGzM2nyv8oAruC8Wf\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"F359D345CA29E9D6D06CF6A11F938F7E575FEDC70F3519AEECEBB470714E2FB1\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"10453047829.19538\"\n            }\n          },\n          \"PreviousTxnID\": \"0E9E993D9F3BFDAB358AFAB36921020AD4385266A9975F09552D8184312DCCF7\",\n          \"PreviousTxnLgrSeq\": 68935064\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r3PYAn9d1DTFzJ9kuvFnhudgwsVZ6pm5hT\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652105738C73FC200\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"6\",\n            \"PreviousTxnID\": \"8988DF9AFA041B5FB778C9BC089A646AEB566B6DA1AAA5B731EA52F0720E88CD\",\n            \"PreviousTxnLgrSeq\": 68996931,\n            \"Sequence\": 67442313,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"4000000000000000e-4\"\n            },\n            \"TakerPays\": \"1839800400\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"F35AAFB219ABFA8C3D850C0407A15CDAC6DEB58871C508A6AD01A2F1B51B7099\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"6\",\n            \"Owner\": \"rGBdiULuYdTBGGX2JWzmjRXscUacAHsm3i\",\n            \"RootIndex\": \"E6806997B4E76B4BEC40379FB5AA94551C8A3B90106E7DD563F87DC67E347A38\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"F39032E4A53CE29BEE68E1F591BD406E001A599D166AC18A65C2B6C33EE9CECB\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"b\",\n            \"IndexPrevious\": \"9\",\n            \"Owner\": \"r9TcqWtCqzG7xnhLcYPUbKsV691wNPzMMw\",\n            \"RootIndex\": \"5DC485ABC7A2E6B34161FBB30CB1334DB53EF761F249FAA4D3013B790D6B9D4D\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"F3971BA7B677FBC86DDDECBC2E6138273C504614334ACAD856CDE13EC1166560\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r9dqJno4U42mpcjAymrrUS11q5rAWazGfP\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521661D10E08E7BB\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"2\",\n            \"PreviousTxnID\": \"248CDB74469B40BE06594BA3065D0D639500093730880A2159C15DEC15E64C05\",\n            \"PreviousTxnLgrSeq\": 68899602,\n            \"Sequence\": 67682925,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"F3AEF7D6E076B6FCD49AF0C234C455458F423ED4C65BB8D322F1DBB78F98BD7A\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"52708748895.93176\"\n            },\n            \"TakerPays\": \"332065118\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rpq5MrSjiQgMj3Rk8Kvf1L3Gzh4xp1CUdZ\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653054B25A8B72000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"1\",\n            \"PreviousTxnID\": \"9A437E9D01068D6B872F840A9F9EC0ED1EDD1B752A66251A9FCB6947D35CDD31\",\n            \"PreviousTxnLgrSeq\": 68152278,\n            \"Sequence\": 67528140,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"F40B9879ADA5C9AB3A621CDC472DF438AEC8568349EAA18463343C7487B8F037\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"5000000000\"\n            },\n            \"TakerPays\": \"74500000\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rB4BbxNJ7Hv7i63EwPcEZjuP8YHizdkkvd\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520F581B8A061067\",\n            \"BookNode\": \"0\",\n            \"Flags\": 0,\n            \"OwnerNode\": \"1\",\n            \"PreviousTxnID\": \"666E8716A9CE63E74288A7736D7D7322BC624427F5C5B0CE2F91CC91C15DFA68\",\n            \"PreviousTxnLgrSeq\": 68983927,\n            \"Sequence\": 67744143,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"F4240923952AFA90D12A8968EC86E4A410276E488BAE5B526BA873200316F20E\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"4232027829.6021\"\n            },\n            \"TakerPays\": \"18278128\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"4\",\n            \"Owner\": \"rKycDDwvkpARRr8dccx6mTKBBr6W1GkGjK\",\n            \"RootIndex\": \"9D2A4AB4EF36737A95B07DD172152D11A82FA2E7562C01788D8CE003B357F4A5\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"F432805CB11B0311F9C5240F63639CF4E5E7A7BC5EF0E1CF2CDEE085771FF59D\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rsydLXavwRHUq9TWdwYqPpYViuFBNuYQYs\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365323589012483C32\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"c\",\n            \"PreviousTxnID\": \"C221F5F563BB11B31419C1AF4FCD11FE45C12E697F076B29F45EA631579FEC7B\",\n            \"PreviousTxnLgrSeq\": 68885765,\n            \"Sequence\": 1329,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"F43DD8730F6A6E7055828CF6180A96C2686A96C5F0DB23E71642FD7119ED1B71\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7785989866\"\n            },\n            \"TakerPays\": \"774628131\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"983\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rUg2bKuyZzQLPopT6uNZK7w4zvJHLB5LV\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"F4441AD8F7532ACA1CE43F24F926D0322C20258AD1F1EE637C4E2CA3F2669AC1\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"7785989866\"\n            }\n          },\n          \"PreviousTxnID\": \"37195B8A10194BF064517BC0AB984E7B3672EED2402ACEBC7758E34229B8A6D4\",\n          \"PreviousTxnLgrSeq\": 67991918\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"e73\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rpcz3Nun3FcRunaTBPPZ6VK8De82hr2DzG\",\n              \"value\": \"9999610698224585e-1\"\n            },\n            \"LowNode\": \"1\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"F45B1E41749FBBD8E710CC5384A8D65C7CB2AFA48077E84DB597C2C5351EBD95\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"8000000000\"\n            }\n          },\n          \"PreviousTxnID\": \"B960D6BCBB3A98F44F07DF440927653CC3A4F92C9E042E51AC13EF2EB999CDE9\",\n          \"PreviousTxnLgrSeq\": 68898578\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rGRyfRcJ7cSYSu6rw5VpNJReEZt9Gzy9a7\",\n            \"Balance\": \"335568921\",\n            \"Flags\": 0,\n            \"OwnerCount\": 50,\n            \"Sequence\": 67157756\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"F4BF9FD325791D50731691ABF04E755C7F3B9565E09F8579B77F280D3788DBEE\",\n          \"PreviousFields\": {\n            \"Balance\": \"193849008\",\n            \"OwnerCount\": 54\n          },\n          \"PreviousTxnID\": \"34756C16724DD305B580255336EFD1CBC5696C602774446C29CB4619BE0E9A71\",\n          \"PreviousTxnLgrSeq\": 69035985\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"2\",\n            \"Owner\": \"rBVRpQjDpGqLs588dtthtZhrPJCcM4w3TS\",\n            \"RootIndex\": \"EDCD2C67AAA207787207EDD455638F4224091709F9614F298B970719FCC14597\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"F4C0D8A19A216E4774A8E898A9B409BE048C701590A6363291D5655D9F8A952D\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r5EHmNdKr1SRiA1DrtKBo18DYRrE5ncHF\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365210B2A0061DD26D\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"DD89102FB2AB3E4D9763A20F13C09EA1694964772B13EE5D6FD241215BB4A37A\",\n            \"PreviousTxnLgrSeq\": 68964002,\n            \"Sequence\": 67580210,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"F4F995D86437FF3F6E6CBBE0E58DBBAE90386603BB669CFE64C73942ADEF1683\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"80431878392\"\n            },\n            \"TakerPays\": \"378029828\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r3ccw1UCPwayXhAVmy6oC4yQTSPeG71bx\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520E35FA931A0000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"2\",\n            \"PreviousTxnID\": \"B34E1234D251125152363210428861C3926A5321C397815AA14BDA90974F5CCE\",\n            \"PreviousTxnLgrSeq\": 68995011,\n            \"Sequence\": 66775157,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"F515F414F3E9DE110C240A432A6426183C956D81496A6B46BD356501E1871E89\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"5000000000\"\n            },\n            \"TakerPays\": \"20000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rnZhNn5hFGdBk7UTE5hLjBZFNrYGSs1wHQ\",\n            \"Balance\": \"364503993\",\n            \"Flags\": 0,\n            \"OwnerCount\": 83,\n            \"Sequence\": 66615478\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"F524F2951FFFAEF2901946E1077CE81FF733EB9D7F4564CC59ACB8C4273FD97D\",\n          \"PreviousFields\": {\n            \"Balance\": \"308841952\",\n            \"OwnerCount\": 84\n          },\n          \"PreviousTxnID\": \"67FEBBF10E4DFAFB95AE44F8762E027466984991868974518DE2D4287AE551FB\",\n          \"PreviousTxnLgrSeq\": 69042899\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rBLh3SrV1ALEEfJiHKYiaSxoRxG7R9SuEh\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365207D0E36A35FBBC\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"c\",\n            \"PreviousTxnID\": \"04C0BE719D12AEABF9996B5D7E549B66E4179E2E43C4C607831681D522136020\",\n            \"PreviousTxnLgrSeq\": 69054140,\n            \"Sequence\": 66512350,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"F532A413B7EF975099B6C822924DB23987FFE37EE3B7F72144CD04902909D322\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"93431878392\"\n            },\n            \"TakerPays\": \"205550132\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"2d7\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rnZhNn5hFGdBk7UTE5hLjBZFNrYGSs1wHQ\",\n              \"value\": \"1000000000000000\"\n            },\n            \"LowNode\": \"1\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"F54C9DE65D128D62CC9192AD52DD520D44143E7A4954A6E0F14DBFE99D33823D\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"7785989866\"\n            }\n          },\n          \"PreviousTxnID\": \"522FEC1CE42DE6642CE32A0329096A5DCA8F3086BC55193557DBFEBA7B2BE6D4\",\n          \"PreviousTxnLgrSeq\": 67951463\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rwEP45SodNayAXhoEQeJmXaky391SxGRZz\",\n            \"RootIndex\": \"F567F88C26768854A347B854EE17868F3E164FB862E133884D02D557D96D98CD\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"F567F88C26768854A347B854EE17868F3E164FB862E133884D02D557D96D98CD\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rsRPHwDyRv18j1hT1wkQEHCvtCpgKYYyGc\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521C6BF524BB86EA\",\n            \"BookNode\": \"0\",\n            \"Flags\": 0,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"2A76D4FC5433065CC1B9911753D078A8D588545585A12487322AF73D1FC50D82\",\n            \"PreviousTxnLgrSeq\": 68944574,\n            \"Sequence\": 58601480,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"F57EDF450C5243F6ABBD0CA7E7491C50BC1F067FE3AF36CA48FF66439D54DF70\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"20265449937.5\"\n            },\n            \"TakerPays\": \"162123599\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rh4Vn8BNfpDZecwkh39GQvYJ7b7osZfML2\",\n            \"Balance\": \"25057459457\",\n            \"Flags\": 0,\n            \"MessageKey\": \"0200000000000000000000000042278FAD44C545A47E6A6C2E77EAAB7F260C855E\",\n            \"OwnerCount\": 100,\n            \"Sequence\": 55498223\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"F59269BB631ABDEF6AC0A4B996D9C39A1CD637DFBDDF4099F272BC6FC27E766A\",\n          \"PreviousFields\": {\n            \"OwnerCount\": 101\n          },\n          \"PreviousTxnID\": \"3A705AEA1E3687F62CE5F896BD07DDA2CC86F2BDA6F0ED1BA7088D700AA09262\",\n          \"PreviousTxnLgrSeq\": 69060060\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"adb\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"r3pJZNxQwVRMyeohSyy5C9ZCJzvRWVAXLg\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"LowNode\": \"1\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"F5CAEECA1E181F0136146CA35CBC33EFAC7CDB93AA6EF307762E95744A488933\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"66967083434.5683\"\n            }\n          },\n          \"PreviousTxnID\": \"5CD654D09A776E82CF497EF8087098C7596DE4E260C528B3DE4E154F055E2938\",\n          \"PreviousTxnLgrSeq\": 68954106\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rsj4wU1Tv93ES5J3AZrWVcgaKXV9b5aNKc\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521A88E80EADB86C\",\n            \"BookNode\": \"0\",\n            \"Flags\": 0,\n            \"OwnerNode\": \"d\",\n            \"PreviousTxnID\": \"CB550AA10C1BE50DBD6994F996835C5D901A3684D4047807DCF98E8EABF52196\",\n            \"PreviousTxnLgrSeq\": 68898484,\n            \"Sequence\": 66179841,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"F5D60BA680A75353CD61145184936E8604C21B02AB518DBDC5AE2027F01E49E0\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"53555555652.476\"\n            },\n            \"TakerPays\": \"400000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"r9N61ut2QDA3sThiawsRjj3A7gvz4ZGM2L\",\n            \"RootIndex\": \"F5FCD1BC682C2BA34809D1E5BA6E21692B0FD2CD31A08421987F179D2D4905AC\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"F5FCD1BC682C2BA34809D1E5BA6E21692B0FD2CD31A08421987F179D2D4905AC\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"5723195665851508e-4\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"a21\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rwCzLwdFp6DLPMfZRTUN67UB79XbbmYt2o\",\n              \"value\": \"9999999999999993e-1\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"F600D3B5F6AD1B4CB3346B5AB587F3E076A55DA032C48FD1254D388333835073\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"8028195965851508e-4\"\n            }\n          },\n          \"PreviousTxnID\": \"165AC428DFDBFCFC0A814C518B40503B4BC4B07A0548096DA1C198ABC5A7BD97\",\n          \"PreviousTxnLgrSeq\": 69035473\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rH5oQKTQ5VaFHC8MFN912377XMG5EH3vTB\",\n              \"value\": \"1000000000000000e-1\"\n            },\n            \"HighNode\": \"5\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"e7d\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"F6292A52D5F02D9950D89C19C443819E05DBF73D06816821CC4E88EF4CF38A9E\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-7785989866\"\n            }\n          },\n          \"PreviousTxnID\": \"28C9A91C491E3A5E84D257F67EA2969375F95338924604A782694D1324B4366B\",\n          \"PreviousTxnLgrSeq\": 68745630\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rBCcUJicoai17VVsbUKJ7BGqDa7dQ3549N\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365219EF4FB2D2A8F4\",\n            \"BookNode\": \"0\",\n            \"Flags\": 0,\n            \"OwnerNode\": \"1\",\n            \"PreviousTxnID\": \"EFC50CAD32296AB6E5E2EE653992F5344D36B1313D0381BF203D254608443B94\",\n            \"PreviousTxnLgrSeq\": 68967493,\n            \"Sequence\": 60850415,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"F62B916F71B255F86DBD24C2A6C103128B6E68A34E80112697F70B4768667025\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"34686189866\"\n            },\n            \"TakerPays\": \"253209186\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rwVWFLRidfTH7DD1LgcTg4gunGXVos3zVD\",\n            \"RootIndex\": \"12A63094B61A6C1AB3D6326624A2827F97C9A75D5F11DBFED3FA3A595F310611\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"F63C7A117B298913A3A641DEAC89A2DBC1C24D0549E8107A4D387F349CA46525\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rwyhjUuEiNmgv4AG4ptie2eAWqN4kfraxv\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521550F7DCA70000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"4\",\n            \"PreviousTxnID\": \"3BC41019C222C40FF7B4BF5BFA98D0F29FA7181457421B9A680446B474A77962\",\n            \"PreviousTxnLgrSeq\": 68991542,\n            \"Sequence\": 67423784,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"F654D8BCA7E17F8A7DB191F7655E2367E6357C3FD85DEDEE793256FA63E3CADF\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"10000000000\"\n            },\n            \"TakerPays\": \"60000000\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rExSJvWnn93G5NfnzZ3YKuPgpQnr8wBsrE\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365207759337C8BFBA\",\n            \"BookNode\": \"0\",\n            \"Flags\": 0,\n            \"OwnerNode\": \"d2\",\n            \"PreviousTxnID\": \"DE23A942478463D9F47282674131BD9DA86C8244B5C7F2EF205B52088874A6BD\",\n            \"PreviousTxnLgrSeq\": 69059548,\n            \"Sequence\": 63810432,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"F666E7CE70A261D239961075E896D97F3E5F122D203318A27E206065647CA66B\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"9525623957766000e-4\"\n            },\n            \"TakerPays\": \"2000000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rpVr26FVpK1G1u8vyMwsKnpXn7iycrYise\",\n            \"Balance\": \"144606234\",\n            \"Flags\": 0,\n            \"OwnerCount\": 49,\n            \"Sequence\": 68152830\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"F66C8D7B04EF1614D498324E205091B995126B8243D4909C6FA1207954613444\",\n          \"PreviousFields\": {\n            \"Balance\": \"122207970\",\n            \"OwnerCount\": 50\n          },\n          \"PreviousTxnID\": \"AA76C092B0A4EC07645C1CAE8BBB89BF23E2FC04854AE31825D73506F3FF4303\",\n          \"PreviousTxnLgrSeq\": 69025620\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"6209396600\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"d9e\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rDAsQhHKNqg4ueKpzLPYbR7bzmjDve6dVF\",\n              \"value\": \"9999999997869990e-1\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"F6A3E3661971389D676A325B7B0F6B00A32C9A4709CDD26D89B8DEA2E8B421EE\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"12418793200\"\n            }\n          },\n          \"PreviousTxnID\": \"5E98A57553FCB3B3B19CE10C8836332D3DCABEB2C3C42478C0405B9C16F53DAE\",\n          \"PreviousTxnLgrSeq\": 68792573\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rM4cm11HCu1riLq9BwfzciDUZqfX2Phq52\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365206F86DB90CA000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"11\",\n            \"PreviousTxnID\": \"5547D43A6B7C010BFCAC2829529065681624031B6E2EC416213572DD7B81BF93\",\n            \"PreviousTxnLgrSeq\": 69063905,\n            \"Sequence\": 67380535,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"F6B97396712DD7B1201AC8B03931CB267C360BC2CECA70501AEE4F9E93D6AA24\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"5000000000\"\n            },\n            \"TakerPays\": \"9810000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rNYRNtrFPumPwsB7zbi3VjZLg6WLWBUJvy\",\n            \"Balance\": \"650641355\",\n            \"Flags\": 0,\n            \"OwnerCount\": 42,\n            \"Sequence\": 67349223\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"F6D6EEEA78ED627A45935CA6CB8D6487D1C6FD7D9E833C343948C066FD88EF7A\",\n          \"PreviousFields\": {\n            \"Balance\": \"396997402\",\n            \"OwnerCount\": 43\n          },\n          \"PreviousTxnID\": \"F31E1F4670964522440F5F3E1A4A6E3E902E440E1F06B3461B31E8ED3529DBAC\",\n          \"PreviousTxnLgrSeq\": 69061981\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rMGXtc2jn88JResx6QRWgyxUvdrXRwmZ7J\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520B036EFEB9B289\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"7\",\n            \"PreviousTxnID\": \"4D2DF5F52510E75F80F548291F82233717D47B41215398B59F97BB5EE3214209\",\n            \"PreviousTxnLgrSeq\": 69026936,\n            \"Sequence\": 66730948,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"F6F6DBAE1044E890B15DBAF8A8007D21F2332ED8F3256224978BC30262308E1E\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"45870196148.47777\"\n            },\n            \"TakerPays\": \"142197608\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rGJ5He1dXx78w8pGB7zHH9K7dWd9pF8p39\",\n              \"value\": \"9999610698224570e-1\"\n            },\n            \"HighNode\": \"2\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"ece\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"F6F83DAB5598C5027A188CA2DC0C7F2760FD094286BEED2FB7E2BD400B5E45C6\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-22000000000\"\n            }\n          },\n          \"PreviousTxnID\": \"04BCA32619265B6D9B71C3E3DA6071708497537E45667534C9E5282ECA7DAFCE\",\n          \"PreviousTxnLgrSeq\": 68876375\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"6e\",\n            \"IndexPrevious\": \"6c\",\n            \"Owner\": \"r3VQGy3EVus3nKJz33du7UqZDMFEnVmHLL\",\n            \"RootIndex\": \"A98675C13BD32C8572AE6D528C4523442B9A3581AA406007D2023DD9CCC2AFF6\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"F74CF2789D0C2ED4148A90A6E13EB176F601F87DC3B80E412FE6DFF2A4791981\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rsdrgJ5xtkPpnWfJeeshHZLWmQEMS3cFzQ\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3653038D7EA4C68000\",\n            \"BookNode\": \"0\",\n            \"Expiration\": 722871486,\n            \"Flags\": 131072,\n            \"OwnerNode\": \"4\",\n            \"PreviousTxnID\": \"D99734E4329673B880E2376A7D483790F5AB1724E9CCBE543EC575BFE611200C\",\n            \"PreviousTxnLgrSeq\": 67972990,\n            \"Sequence\": 67219921,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"F76CBE8AAED197A9E152D3682C35F5AF3145D089313FCA4A22366BF625C3C14D\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"22000000000\"\n            },\n            \"TakerPays\": \"220000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rHjXAcTNUKjFvrozV8KizwezuEk9tnhqwF\",\n            \"RootIndex\": \"F77D4217703505508D8AF80B1D37DCBC8A501C7FB82E80468BBDC1A591C90E58\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"F77D4217703505508D8AF80B1D37DCBC8A501C7FB82E80468BBDC1A591C90E58\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rDYvWkTQaaoWiWYo2r5fKuqEoop8WK9crS\",\n            \"Balance\": \"2193253250\",\n            \"Flags\": 0,\n            \"OwnerCount\": 231,\n            \"Sequence\": 60413128\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"F78807BC06F8E712CA31F4820AABD94661F7B04604C5D25E592C070023C5ACF4\",\n          \"PreviousFields\": {\n            \"Balance\": \"1713253250\",\n            \"OwnerCount\": 232\n          },\n          \"PreviousTxnID\": \"81A190FA085CB2CE9377B707852BF370BF619F3D524FC2F944664EE10BBD46F0\",\n          \"PreviousTxnLgrSeq\": 69063595\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"1\",\n            \"Owner\": \"rnGd8yRrg47RWDTtRdVRDJvjXHtqgL5yNW\",\n            \"RootIndex\": \"845085A3B75429A5A7E088B33A7688D408133AEFE07C378D8205406310ADFCBA\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"F80F53ACCB8E9AB7D1B9585962143598944E87754CCFB2D150302DF0F4DF03F5\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rnGd8yRrg47RWDTtRdVRDJvjXHtqgL5yNW\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521E32B478974000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"2\",\n            \"PreviousTxnID\": \"124B6C279D45870882A93A99A9F028FBE70606D45E471395DBB497A573006AFC\",\n            \"PreviousTxnLgrSeq\": 68900271,\n            \"Sequence\": 67584484,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"F81246E71867D9DACDE44D9B3EFCED4CD7E2EBAE6AC4EE4ABE8D4A66450324EB\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"30000000000\"\n            },\n            \"TakerPays\": \"255000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"2\",\n            \"Owner\": \"rfJ35bQofteAs3h4aCA77V5wSHRsHChttf\",\n            \"RootIndex\": \"9698DF9BF541AAF2F6FF7A544B60D0F592043CF2085DBCDE51D8FC9A4D3B39EB\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"F82AE9C61BD193F9C195A05D8DDD55005C5DE8854E9AE415F74322BB5D6F66F2\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"2\",\n            \"Owner\": \"rCeRsWQYvZrkA8s3jZYXBYw7gXH7cbVNF\",\n            \"RootIndex\": \"EEF9E6B53A499188E997BF7D533D7507207F8DE2D687DE9FE8740031D6518B1B\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"F835C8D7C3850C920295C571BC513F3CC57D28896C37B251566C6482CC799256\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rf4YQSYpheUvWxMx5rmSgr4vdyvu7tWUp4\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365215D04C24D3FA3B\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"a\",\n            \"PreviousTxnID\": \"65B1DF3CCA20E2D8E99FC4C46341D16CE8A0442D3CB0B61B1963DE601529FAAA\",\n            \"PreviousTxnLgrSeq\": 68995240,\n            \"Sequence\": 66770778,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"F84FDD020FFAE5EBFCDCD1109CEB08A16C99C3B6C2FD13B31EE3FA5A8286C4C1\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"23547689385.47486\"\n            },\n            \"TakerPays\": \"144582812\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"56f\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rnG1UdmTmDXHaQp1vVp4jsH5ZhJKp97TjH\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"F8502F20C92CE631C9967FEC3CCD1A574695A7565D28CA05DFF25287A7E387DC\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"15000000000\"\n            }\n          },\n          \"PreviousTxnID\": \"808483DE8C02BB3297A29B4BECB913C6DC226D403087E9AFA8A0E7947CD351A3\",\n          \"PreviousTxnLgrSeq\": 68991025\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rUdhzvzWjHpSjP6CGksiit3bdgGLV5DXZv\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365305EBD312A02AAA\",\n            \"BookNode\": \"0\",\n            \"Flags\": 0,\n            \"OwnerNode\": \"2\",\n            \"PreviousTxnID\": \"0C052BCF7423A99C981A9A6703B0C5F54FB2BC758C552ACE72255C8F160746E0\",\n            \"PreviousTxnLgrSeq\": 68907396,\n            \"Sequence\": 67546187,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"F8A1CDB3D755543CB5B2C000ED083A0DE6F22925699A72B3049687F741F2D83F\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"12000000000\"\n            },\n            \"TakerPays\": \"200000000\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r31dxSZgmArpDtwoLPAftYtU8bHauuxwA5\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521AA535D23BEE1C\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"D37A3E731538898F22A78F15F3350AB71A6E506269AE7C20067F4D68F5F8D162\",\n            \"PreviousTxnLgrSeq\": 68942825,\n            \"Sequence\": 68766342,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"F8E25F37E83DF4D84EF911F89F5B36D5A3F5A05A860F207FDFA206873AF1C3D2\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"4145452681.330667\"\n            },\n            \"TakerPays\": \"31090895\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rLHtFMi1ohYj9RynpB1wRfEAaLtjXkdRH9\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520AA87BEE2B596E\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"3\",\n            \"PreviousTxnID\": \"76996946B7DED49FAF8FF86A7CC1F9AA5376F7175AF98CD4F72DBEB6DB3737F7\",\n            \"PreviousTxnLgrSeq\": 69039313,\n            \"Sequence\": 67312577,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"F910DF4AB04E11FD23C3926245FFD54B8921C404836842AAC5447D42476E94FF\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"44020340038.61044\"\n            },\n            \"TakerPays\": \"132061020\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rL92EVWszBA1ZbZADyficMkRFVvpV15sEE\",\n            \"Balance\": \"849368815\",\n            \"Flags\": 0,\n            \"OwnerCount\": 161,\n            \"Sequence\": 67153723\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"F927645C4A950F930C396A1B07C46115A88C8B190C65AE5D153897AEAEF5E969\",\n          \"PreviousFields\": {\n            \"Balance\": \"628076741\",\n            \"OwnerCount\": 162\n          },\n          \"PreviousTxnID\": \"11ECE292072C83EFDB2E7AAF807B9070EDE8AA4B8C62B68C14D845FF35860403\",\n          \"PreviousTxnLgrSeq\": 69061368\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rB3bSANCCKpiQa4aMd7b4vQZ3pMTh8UXZh\",\n            \"RootIndex\": \"F983D0FC7AD794C525D6952D8E90BD3F03351AD0B34229FFA62BDC707A96BEF4\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"F983D0FC7AD794C525D6952D8E90BD3F03351AD0B34229FFA62BDC707A96BEF4\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rMBUa2qAaU6K8DRTyQsfmeRUtu6j7m8ovB\",\n            \"Balance\": \"294982031\",\n            \"Flags\": 0,\n            \"OwnerCount\": 21,\n            \"Sequence\": 65872990\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"F9A2EF1012F8C7F45875D501DAA95AFE16BEDC625109EEB62F81DA5398E3397B\",\n          \"PreviousFields\": {\n            \"Balance\": \"192396704\",\n            \"OwnerCount\": 22\n          },\n          \"PreviousTxnID\": \"B1090CCD00EC86128E5F989DEBF5EEE4B02CDEB215B34A3A1FC90D7652628637\",\n          \"PreviousTxnLgrSeq\": 69036544\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r3Tj4vpfRp2r95SM97TwEFGCUZayDqKM4h\",\n            \"Balance\": \"4165840697\",\n            \"Flags\": 0,\n            \"OwnerCount\": 60,\n            \"Sequence\": 66932237\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"F9C8242487AFC2761CD9687462E35A4AC0A2DF6C24A605FD77D2F4F26740BE34\",\n          \"PreviousFields\": {\n            \"OwnerCount\": 61\n          },\n          \"PreviousTxnID\": \"AAEA0A4056FEC5EF7E3E3BA7A765206B4D508AA41CB26338CA7E179C1BB327FD\",\n          \"PreviousTxnLgrSeq\": 69058206\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"6\",\n            \"Owner\": \"rGQaGNPT8u7Wt1RoqJEhBgAPyc9ek5RfCL\",\n            \"RootIndex\": \"7F01E74706516AC43C1C1D253E6887968B43326AE119A44CD7F7F2493FA1840C\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"F9C93D018D546A296BAA834EDF3A86C6403DB454A1690C2BBD38A4D21EF8349D\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rnfs5ayanPy2X7aQERUoayaokxjuH361V8\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365210EC8E43498D3E\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"8\",\n            \"PreviousTxnID\": \"967C43D35C91801601845D9F405A8426FF7010165E49C4B456489AC6B8EC9397\",\n            \"PreviousTxnLgrSeq\": 69011171,\n            \"Sequence\": 66388635,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"F9F8FA918FE65477B5482BFDCE4BE0D49AE741EB3F2409880CEBD7A6D72E2482\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"12595263790.2\"\n            },\n            \"TakerPays\": \"60000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"ecc\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rDWTpV5omq7rh5Wnro4noWmWFEFcRx17ma\",\n              \"value\": \"1000000000000000e-1\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"FA10184BA1FFD92A81F4DA1FEE3D81D1EECFA24350FBF3F0D77D0AF1625BEFB1\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"1259233038597572e-4\"\n            }\n          },\n          \"PreviousTxnID\": \"CDF4417E7AF4E7185FA640BC72A1C1D197C654297E1F7D371C4C8DA8DA6E2440\",\n          \"PreviousTxnLgrSeq\": 69055526\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r3pDCAfw2nB715iBJVMix9M8adFpHyfGRN\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652215C27BE70E000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"38B021A2DA6CA2D069DA5888EFCE6643F80E789B92197300777D9E3B6DA89339\",\n            \"PreviousTxnLgrSeq\": 68914781,\n            \"Sequence\": 68179413,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"FA1D6819A88FD3D6B284B77E764FD592FA6C057B0870EEA413F06DE6CCDA828E\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"10000000000\"\n            },\n            \"TakerPays\": \"93900000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-21300841370.77\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rL92EVWszBA1ZbZADyficMkRFVvpV15sEE\",\n              \"value\": \"1000000000000000\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"e0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"FA9804A088D433B9F7F8CF6CBBACE2CFFD8EEFA2C4E3069867E19091A318F1F7\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-47335203046.15556\"\n            }\n          },\n          \"PreviousTxnID\": \"A0E7DBE8FC7987B06441A635280F610E38E864C44C7062F01DADAAC808F4A812\",\n          \"PreviousTxnLgrSeq\": 68898097\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"f0\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"raUCqTN33sgqfhC1KVtqhCVX6iHkHAbUzp\",\n              \"value\": \"1000000000000000\"\n            },\n            \"LowNode\": \"4\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"FAB38F899A1ED8BBD133B4747358DCBD041721EEE6E353894A77AFADED25926A\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"2500000000000001e-4\"\n            }\n          },\n          \"PreviousTxnID\": \"C1CFE2BD8E01A493419EA51348130A8ABAD1A1DD56DA59FE20C387896BF3382E\",\n          \"PreviousTxnLgrSeq\": 69044440\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"45a\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rhxWqi4kQsADuck5wUsbXCcR2Pq44kbjZs\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"FB0BE097392E4347B57866F498E41960B1CC4DD5C3C0E0904F1192D6E582E05F\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"17796971607.14286\"\n            }\n          },\n          \"PreviousTxnID\": \"B989E7D61DEB7431C9B6A89F65C579FD96C5447DC4F8D97089667E2454E64DD5\",\n          \"PreviousTxnLgrSeq\": 69001414\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rsMSXmszPAgaY8sipuVq6gfdgUX3zpX6am\",\n            \"RootIndex\": \"FB0C930D229EC7F7DCB63C8FA74ADF9E3BA084978D2CB5300D3485589DB917F1\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"FB0C930D229EC7F7DCB63C8FA74ADF9E3BA084978D2CB5300D3485589DB917F1\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rfBJiQAjbS9cyzVGKRxbde3eV4Sr5xeC8u\",\n            \"Balance\": \"286900818\",\n            \"Flags\": 0,\n            \"OwnerCount\": 119,\n            \"Sequence\": 67345415\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"FB0D8180543E6E031B9EE2E6F96FB02316518F9736F779D99863684E2E864763\",\n          \"PreviousFields\": {\n            \"OwnerCount\": 120\n          },\n          \"PreviousTxnID\": \"0915BAD5049E1F483694D62C1582A57EE14093AA28987BB73A8BD47DD6FDAC26\",\n          \"PreviousTxnLgrSeq\": 69050243\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"4\",\n            \"IndexPrevious\": \"2\",\n            \"Owner\": \"rLxd1PUJT8xrZ59tUuPANfL87xkBXnkeKi\",\n            \"RootIndex\": \"BB44AFCA9833E9B766CD8076DE58B4EB2B6ED2CF2F8F25BDF2EDDA3B3ECF1038\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"FB0EDEAB097AEB8FD6F4A15B0C43DAC931395E987EE055AFF231B45D1400C6C9\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rHLNuze17yJvjKohtAWTiakAUWFDp81Nbv\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521C1102149A6BD3\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"308856FA2B0CF30B0D16B9CB8ED3890CD6C491F0C2BE3EA444681A3D727E417A\",\n            \"PreviousTxnLgrSeq\": 68899136,\n            \"Sequence\": 67600387,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"FB2A523E44C93FD3F04A422C304E26DD16A7000A00AC56D5E9246F8134AFB90F\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"20126032579.61783\"\n            },\n            \"TakerPays\": \"158995657\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rKycDDwvkpARRr8dccx6mTKBBr6W1GkGjK\",\n            \"Balance\": \"442524897\",\n            \"Flags\": 0,\n            \"OwnerCount\": 140,\n            \"Sequence\": 67284856\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"FB53FFCCE7F02BE4E1A548A29DC04373B57B4E0C106D83A907C6EDD32F01C910\",\n          \"PreviousFields\": {\n            \"Balance\": \"302524897\",\n            \"OwnerCount\": 141\n          },\n          \"PreviousTxnID\": \"B5AF9369A4BCBD399CAA37F0A4D5873BA5569F683B3842EF36CB3A39E61CB41F\",\n          \"PreviousTxnLgrSeq\": 68998332\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rPpC3LrzwLjh2qU7XtQKFb4GCZyAUHz7Ss\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521FF973CAFA8000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"2\",\n            \"PreviousTxnID\": \"812A8420FA3CE2737FFE4770DA14337557C35D7930E6AB60C5066C5B39B86192\",\n            \"PreviousTxnLgrSeq\": 68897530,\n            \"Sequence\": 66167437,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"FB640E14EEF0211E0006379B604FFB8BD1CB99FC710282EC35195F7CB550B2D9\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7500000000\"\n            },\n            \"TakerPays\": \"67500000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"18\",\n            \"IndexPrevious\": \"16\",\n            \"Owner\": \"rJQe5K8Fxn2ktEMbwaWibo9LEYKHjqDzzw\",\n            \"RootIndex\": \"E6D34864018C9F13656A4C426A5F67B0F387E54B9025AB2739C3F3EE0C12F066\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"FB98E4F980519D1E265C325C6D1AF292C33EFC7BEFCCED6E2A380AF8E0ACA7C5\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rpPjK8mxW6UndeHNvtgJPSaQjARCSXGCWY\",\n            \"Balance\": \"1111461549\",\n            \"EmailHash\": \"B81E734D9ABC73F492B03F3FA64738B9\",\n            \"Flags\": 0,\n            \"OwnerCount\": 170,\n            \"Sequence\": 65071380\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"FBAC8261A04F8E7ACFA4E081A84271935B28A86838FBB80927A5E850846A3825\",\n          \"PreviousFields\": {\n            \"Balance\": \"1012749306\",\n            \"OwnerCount\": 171\n          },\n          \"PreviousTxnID\": \"C808D2DF130FA1A53C11A290ADB274446EED42B7F199AD06C5D65FCEE2D78857\",\n          \"PreviousTxnLgrSeq\": 69060061\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rLMqPYdzd1JeWQ6PsjxFt4jXMZo8vDgJrS\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36520CF7A7D9495220\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"7\",\n            \"PreviousTxnID\": \"7B703669F73830CC5366C1FD656EB9CDE8F754A654E735A2747283BB0F807B31\",\n            \"PreviousTxnLgrSeq\": 68998919,\n            \"Sequence\": 67313185,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"1000000008880000e-4\"\n            },\n            \"TakerPays\": \"365000003\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"FC18D942E1F13C3FFFC20D470675FBD2A49ABDBAC055DD8D851CAB6322E97C6A\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"12000000000\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"eac\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rnsZFHUhKJoPt3oh269oP51G4j5HDCNNBg\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"LowNode\": \"3\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"FC5FE637B5781BF48A7222D06B37CF677CB89BA0DF22E92179DE863DCD6F1E1B\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"15000000000\"\n            }\n          },\n          \"PreviousTxnID\": \"6BAE5C9F2A7E2D3E1C7000FFBD2D8279453DB7A0DFD4E238E2F1C60E7F69D6BF\",\n          \"PreviousTxnLgrSeq\": 69048674\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rGQaGNPT8u7Wt1RoqJEhBgAPyc9ek5RfCL\",\n            \"Balance\": \"363904169\",\n            \"Flags\": 0,\n            \"OwnerCount\": 100,\n            \"Sequence\": 65975098\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"FC69CE7BFA0D8B533C48FB5B58644D913682A9E9C666165FFE4A53E759D57BA4\",\n          \"PreviousFields\": {\n            \"Balance\": \"277904169\",\n            \"OwnerCount\": 103\n          },\n          \"PreviousTxnID\": \"7A97DA203132D6753FEE14F538A75B089B4E8A05F0DF4FE8AAD1B2AA7EBDF58A\",\n          \"PreviousTxnLgrSeq\": 69053423\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rHmYEsWRfXC1YbFEKeJRWu9d7tdZ6x1od5\",\n            \"Balance\": \"169119529\",\n            \"Flags\": 0,\n            \"OwnerCount\": 11,\n            \"Sequence\": 67441237\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"FC992407B7BCA9BE5FB5C6270B6735C028AAEDBA3972B280021C6F3FCED70F42\",\n          \"PreviousFields\": {\n            \"Balance\": \"43119530\",\n            \"OwnerCount\": 12\n          },\n          \"PreviousTxnID\": \"4E0110B7EEFC3AA8E55C664BB613D4342548340EFA0F0711005F4A66BD746CB3\",\n          \"PreviousTxnLgrSeq\": 68895634\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rMX68jd5whLXjPmrgvjHYKwZHcbQ3HiYuV\",\n            \"Balance\": \"647232440\",\n            \"Flags\": 0,\n            \"OwnerCount\": 42,\n            \"Sequence\": 66684957\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"FC9F433AACA96D46C68AE4837A0D3CEC7607DEA0B584A23B572980996EB47F79\",\n          \"PreviousFields\": {\n            \"Balance\": \"96232440\",\n            \"OwnerCount\": 43\n          },\n          \"PreviousTxnID\": \"ED8E722A4012E3FA53F1D6E3D2021A16BE6ADE37484EE0F1F6BCD8E66A608BF7\",\n          \"PreviousTxnLgrSeq\": 69051654\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"6324477355801603e-2\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"e05\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"ratboJVqeveTRpRvto7G811syRvhgQXBtB\",\n              \"value\": \"9999766418165218\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"FCA52802504DD82C5B40C82272DDA405B8087E4BC4099622B7A9D507F169340F\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"2420649370899242e-2\"\n            }\n          },\n          \"PreviousTxnID\": \"C636EF65AFFE1010834C9BF83EE32454CC3F0F7BE67CAC8F4579AF75C8D340DE\",\n          \"PreviousTxnLgrSeq\": 69053288\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"16\",\n            \"IndexPrevious\": \"14\",\n            \"Owner\": \"rUXKKLv8kzkXLnNpe2aGq2PyRKuotFQEPi\",\n            \"RootIndex\": \"B19D49639DBBD3E310A17B9630DFB53128EF44F922ED843151E4C05E264308B5\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"FCD2346FEA42CDE1E87EABBC8FDC6601276337BBDEC988EAA17EFD1483E4542D\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rEjghQohwSDxD7d3NbTdrzRLGRRsGf7qwN\",\n            \"Balance\": \"1928717580\",\n            \"Flags\": 0,\n            \"OwnerCount\": 72,\n            \"Sequence\": 67416512\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"FCF23FC5CE45331A40A6ACB7030DEEBAC1B256EED3E16FA80D914765EFE8DEEE\",\n          \"PreviousFields\": {\n            \"Balance\": \"728717580\",\n            \"OwnerCount\": 73\n          },\n          \"PreviousTxnID\": \"E47B8D82121F6404104BD95755104EA7FD5D14CBE9AB27BB814D82D5F046A754\",\n          \"PreviousTxnLgrSeq\": 69060091\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rPKNCAkooJFM3LJ17zG3wJyxrjnNuHkkYh\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365311C37937B60F36\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"5\",\n            \"PreviousTxnID\": \"72996685291032F7ACDB7FE835F1BD43DD2B76850E252C52C30B73B80801FD65\",\n            \"PreviousTxnLgrSeq\": 68771159,\n            \"Sequence\": 67345008,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"FD0897AD964BAC978D0B38CAD323F6CF61BBF9ABE67D6F6E45830DE036A455A5\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"10785989866\"\n            },\n            \"TakerPays\": \"539299493\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"4\",\n            \"Owner\": \"rMDc7eVhCw5jjCXU5DGpn2tUV9D7aBBFLx\",\n            \"RootIndex\": \"538D3642C1D106AB920C3EA40313AEBC4D95C5B870A96109ABC83FD42E359D7C\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"FD0C01BAE4D97B6BD52D8FC34A9C6CFB316952917AFDE801954A639C3C011596\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"0\",\n            \"IndexPrevious\": \"0\",\n            \"Owner\": \"rMGX6LAGxRUHd4g3yW1ukFhThgiCxMioX3\",\n            \"RootIndex\": \"FD41EBB4B23FFA050A1B002B6D22992D1F0E8CBF979FE068AFADE43D6F2728D0\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"FD41EBB4B23FFA050A1B002B6D22992D1F0E8CBF979FE068AFADE43D6F2728D0\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"r93dgTvDnFJsP2YGRiJvd89D1xLTmgR4fp\",\n            \"RootIndex\": \"FD716AB3D63987A1C9C2B2F5ADE48809DF2F63DA9BBBA770FD9F102FFF3B7E7C\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"FD716AB3D63987A1C9C2B2F5ADE48809DF2F63DA9BBBA770FD9F102FFF3B7E7C\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rE9hwGp3avccRZY3PerkKL1cJ25z9X22QZ\",\n              \"value\": \"1000000000000000e-4\"\n            },\n            \"HighNode\": \"1\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"b38\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"FDBD4E543F974A7D75E44AD00D05C0D56A015DBCD34A6856C239E2A67CFF6A8E\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-7071979732\"\n            }\n          },\n          \"PreviousTxnID\": \"F508E7760F1874784F4F2F921E829F082E7744120ED863CDCC78ADD7D9718772\",\n          \"PreviousTxnLgrSeq\": 68239815\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rQJFPnXAsdHvbAL8JeEYNu5FQDW4mHL5MK\",\n            \"Balance\": \"67203992761\",\n            \"Flags\": 0,\n            \"OwnerCount\": 10,\n            \"Sequence\": 68012574\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"FDDA0592269D15BD67FB374FB718381666BC03E35D7C9C38DE5B8ACD87D253F7\",\n          \"PreviousFields\": {\n            \"Balance\": \"31999970\",\n            \"OwnerCount\": 11\n          },\n          \"PreviousTxnID\": \"33B848527F013D46E84431A863B6CFE38AC5E846949C5A8E20995EB312F7D2DC\",\n          \"PreviousTxnLgrSeq\": 68637577\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rJDQRE86NN3S8bhRYMZK2cWwdGd7nV7zBc\",\n            \"Balance\": \"569765131\",\n            \"Flags\": 0,\n            \"OwnerCount\": 56,\n            \"Sequence\": 66611037\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"FDF17955CFD34B7F3D355352991D5B2E5F6D4B0BA3A4D8A006630402445C606A\",\n          \"PreviousFields\": {\n            \"OwnerCount\": 57\n          },\n          \"PreviousTxnID\": \"20F11AB01FAF404EE4723FE922C990D4518AE30B460AA0A4EDEDB5F19B0B7D40\",\n          \"PreviousTxnLgrSeq\": 69051865\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rPEfUi18WaHNarXbyX5UCcVACd1ZZhxAig\",\n            \"Balance\": \"351117639\",\n            \"Flags\": 0,\n            \"OwnerCount\": 74,\n            \"Sequence\": 67880207\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"FE0B804317E643378028A4D13391C33DBD72CFBCE6BC4A689227DF603A41A5CD\",\n          \"PreviousFields\": {\n            \"Balance\": \"281117639\",\n            \"OwnerCount\": 75\n          },\n          \"PreviousTxnID\": \"EDFB89E9ED922344319DC57E6DCC5689A41A32CF2F5203CCD590EB5F2C91AED9\",\n          \"PreviousTxnLgrSeq\": 69045014\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rMBUa2qAaU6K8DRTyQsfmeRUtu6j7m8ovB\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36522386F26FB27747\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"D41F4DA95169F9C985B81018AFEA4176D380B540F9E61F822188D0DFE625639F\",\n            \"PreviousTxnLgrSeq\": 68897816,\n            \"Sequence\": 65872968,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"FE1E29601915536D492BBBC93D4C44EE27992BD2EA23DD83ACA8F960C728A533\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"10258532700.97713\"\n            },\n            \"TakerPays\": \"102585327\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"8\",\n            \"IndexPrevious\": \"6\",\n            \"Owner\": \"rMq6uX75yyCP9KjWCxYghLf9xsr3rQCbJv\",\n            \"RootIndex\": \"3F6991DA82A0ADDF447AF90B0B4E3FD9AC1F3B79F4786CE20157084B6C95FBFE\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"FE4BCED0AF70053D6BE921F44A99CB6A14268FA95FE18E0BB71A36DD59E189EA\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"raLEGx6aGsVshgdT3oGzM2nyv8oAruC8Wf\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B365211C37937E08000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"1\",\n            \"PreviousTxnID\": \"DF919F768F106C9587EA958F9A28E26BA512FA677344E0E72BA695EDF0A76011\",\n            \"PreviousTxnLgrSeq\": 69006298,\n            \"Sequence\": 67515272,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"FE559DDA11ECD85EF39420FF12317237AB4A2E40947B9163D4BBD4DB05E93949\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"5000000000\"\n            },\n            \"TakerPays\": \"25000000\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rsSog5gEY6GuTeCP4TAgdK7HkUHiSNxZqL\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521CE2440FEE14D0\",\n            \"BookNode\": \"0\",\n            \"Flags\": 0,\n            \"OwnerNode\": \"2\",\n            \"PreviousTxnID\": \"2021E43A1B40609762AFE0E9509DC5E938754D2B34C26257144A92787F543159\",\n            \"PreviousTxnLgrSeq\": 68898828,\n            \"Sequence\": 64558117,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"FE69B3DD5ABE6594215AFFBF8C401068A15B0A67C244158619A3E4779D5558D8\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"7011000000\"\n            },\n            \"TakerPays\": \"57000000\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"3\",\n            \"IndexPrevious\": \"1\",\n            \"Owner\": \"rGJ5He1dXx78w8pGB7zHH9K7dWd9pF8p39\",\n            \"RootIndex\": \"0CAADCB94F5B620D79AE79E43431CE4FCAB7101989DCB63C3663426C9C796CF4\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"FE6E000E277A5FEE6E833FCCD65E72EF89C81BB7D5667B2F027E024D7A31B12F\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"r48QoxLkkqiwjzhposyFj61op7AtvR5aLq\",\n            \"RootIndex\": \"FE6F561DC598A340CA32BDC0CB235546A149B7DE54118ED4EB622E199F3B4964\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"FE6F561DC598A340CA32BDC0CB235546A149B7DE54118ED4EB622E199F3B4964\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rNvk1SNQZhU6fsyMuaTeLucyw5x5uxfxQy\",\n            \"Balance\": \"371031123\",\n            \"Flags\": 0,\n            \"OwnerCount\": 27,\n            \"Sequence\": 67175633\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"FE78F790EDF140D76F9C8C52B7DBBD9ABC220BF84D2CAD20FF65A750AF87F769\",\n          \"PreviousFields\": {\n            \"Balance\": \"79380613\",\n            \"OwnerCount\": 33\n          },\n          \"PreviousTxnID\": \"DB890F3039CF51D18A818EDD255ADC29F56A941ED4F920F51298BB0AB8067100\",\n          \"PreviousTxnLgrSeq\": 69062911\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"5\",\n            \"IndexPrevious\": \"3\",\n            \"Owner\": \"rGpBZrDTpimasSJEWV5hxH75LsivV5Hz4v\",\n            \"RootIndex\": \"032FE28E618B9F91A37CDA10F7464FA39569FFA42F58B27BBFFE4F9C5C666A7B\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"FECB5AB6CDDCDF3FFEBDE9ECD3F85D72EEEBBD75D99772CE4EE56F2F755ED630\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rBzk3TdhfdbidCHeKWfmQ5dy9AuAtGbXeY\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652110D930D1DAC0E\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"2\",\n            \"PreviousTxnID\": \"0640D4466AF934B06D90AA8B3018C5DCACE74DEB0BD2C1B2DC5F8FA28897555A\",\n            \"PreviousTxnLgrSeq\": 68975968,\n            \"Sequence\": 67686292,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"FED2364707C620B1FED6D01F4596540487B7B0EE6E7408CB6331A08772376766\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"5300011848.321095\"\n            },\n            \"TakerPays\": \"25440056\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rMp5QYssUeXAdg9G7b6XQPCEb1uHCjZ7XQ\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B36521550F7DCA70000\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"7\",\n            \"PreviousTxnID\": \"4D8A9D871D27C5A8607A93F3C994B814C3C5B883A64089F9183611FA257BA241\",\n            \"PreviousTxnLgrSeq\": 68899576,\n            \"Sequence\": 67402899,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"FED7FDDEE251908F2940EE38280B56A5444A224B2091AAA2182CA8F8E42CB2D0\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"12123735000\"\n            },\n            \"TakerPays\": \"72742410\"\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rNh79kZDsubi13bjTw64kBsKVWepnDT2J7\",\n            \"BookDirectory\": \"BA7AE28C2DAFF1D49F3CEC7DE8733F8733B20C5DD5631B3652182890519E2186\",\n            \"BookNode\": \"0\",\n            \"Flags\": 131072,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"FC72C6FB7660C95BAA33F693B3E9B5DDDC95D08DFF63C357DA97EC4A84286269\",\n            \"PreviousTxnLgrSeq\": 68899621,\n            \"Sequence\": 68590611,\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"TakerPays\": \"0\"\n          },\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"FEFEB61BCA1DA2D42FA38FB6DD1D96EC0A5E7D7F7F7FC79A45555B8884D7809A\",\n          \"PreviousFields\": {\n            \"TakerGets\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"1540952115.300518\"\n            },\n            \"TakerPays\": \"10478474\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rLHtFMi1ohYj9RynpB1wRfEAaLtjXkdRH9\",\n            \"Balance\": \"210058467\",\n            \"Flags\": 0,\n            \"OwnerCount\": 32,\n            \"Sequence\": 67312581\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"FF4AFFB473AB191C9183EC39AC9AA08B40632FDC742EA63A46B2FF97BEA74171\",\n          \"PreviousFields\": {\n            \"Balance\": \"77997447\",\n            \"OwnerCount\": 33\n          },\n          \"PreviousTxnID\": \"B87BB717D3530DCC75F6840787A4DC282A8E0DBFAB9B89D8AC3923C2921F651F\",\n          \"PreviousTxnLgrSeq\": 69060488\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexNext\": \"1\",\n            \"IndexPrevious\": \"1\",\n            \"Owner\": \"r3pDCAfw2nB715iBJVMix9M8adFpHyfGRN\",\n            \"RootIndex\": \"FF62A8BB05596318A12B832A18442A9073B9ED33C3790D3A1274C5AA06D09719\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"FF62A8BB05596318A12B832A18442A9073B9ED33C3790D3A1274C5AA06D09719\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rKSMqUYHyLXFtWPy1JugFqgds23UipQsGZ\",\n              \"value\": \"1000000000000000e-1\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rN3EeRSxh9tLHAUDmL7Chh3vYYoUafAyyM\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"e4a\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"FF9CC005E6D3C61507CBF2D9EAB01BBB9B8F628F775DBC8A500B7C98AB860727\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852534849420000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-20000000000\"\n            }\n          },\n          \"PreviousTxnID\": \"F4F32746DD86895901581BFCDE39C84F5EB62E1836FEBA314CE21AA9776D06FB\",\n          \"PreviousTxnLgrSeq\": 68990970\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rBdANmzNNUu3sSPo15TR5eY2s43hPH9yFG\",\n            \"Balance\": \"48439131\",\n            \"Flags\": 0,\n            \"OwnerCount\": 15,\n            \"RegularKey\": \"rhH4nF33W41CQvBQmJpKafvMsCm4MqHkGG\",\n            \"Sequence\": 67499230\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"FFA44267E6E567139C8EEA12DE7904D0C3781DFF33E14CB56DE56311073AB663\",\n          \"PreviousFields\": {\n            \"OwnerCount\": 16\n          },\n          \"PreviousTxnID\": \"9846949DA2F230AC8CB96A5368EA775887C0BD496212441ADDBE81774E89142B\",\n          \"PreviousTxnLgrSeq\": 69058368\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rK4qafqqEtLjM1CRfcgY1H8Z4zGTRATkaV\",\n            \"Balance\": \"661316266\",\n            \"Flags\": 0,\n            \"OwnerCount\": 64,\n            \"Sequence\": 66367897\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"FFBA78307E7CC74B4AD94363B995A0D3D7FF645FBA2D62867E0000ACA0459CDD\",\n          \"PreviousFields\": {\n            \"Balance\": \"146099868\",\n            \"OwnerCount\": 65\n          },\n          \"PreviousTxnID\": \"F38F9541AB57A2E7B943E984BEE98107E10B32DFA32E02B4A51ABCF7B9407988\",\n          \"PreviousTxnLgrSeq\": 69060904\n        }\n      }\n    ],\n    \"TransactionIndex\": 61,\n    \"TransactionResult\": \"tesSUCCESS\"\n  },\n  \"hash\": \"9BE43A0058FF4C358015CD89CE754AFEF201A6FF3D7E2C868B8C7E61DB00BD68\",\n  \"ledger_index\": 69064176,\n  \"date\": \"2022-01-17T02:30:40Z\"\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/OfferCreate/test/mock_data/OfferCreateWithPermissionedDomainID.json",
    "content": "{\n  \"close_time_iso\": \"2025-07-15T22:40:03Z\",\n  \"ctid\": \"C0000D9300000000\",\n  \"hash\": \"4AB4B6EAD6DC2B0E2F33C23E2BE1817DABCECA699BE57B63899B76E62C1640A7\",\n  \"ledger_hash\": \"BEC40D84F40B0083F84EC9C1EC7A53F0C92769AC3EABA9AC10916D4D9CA465F3\",\n  \"ledger_index\": 3475,\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"CreatedNode\": {\n          \"LedgerEntryType\": \"Offer\",\n          \"LedgerIndex\": \"0684AD6414D9CCEC55E18162F4124E6629AD53C8903CCC83E84BD74894A62E90\",\n          \"NewFields\": {\n            \"Account\": \"rD7ShWxq6xRYWDSDfzhKbfaJDerxd7nnds\",\n            \"AdditionalBooks\": [\n              {\n                \"Book\": {\n                  \"BookDirectory\": \"388D3A4BB364B8B11197652606B9399655A9A08161BE176B53038D7EA4C68000\",\n                  \"BookNode\": \"0\"\n                }\n              }\n            ],\n            \"BookDirectory\": \"AFC38A27663E8753D1FA2326C75B9D183856E30FC16F2D0253038D7EA4C68000\",\n            \"DomainID\": \"4A4879496CFF23CA32242D50DA04DDB41F4561167276A62AF21899F83DF28812\",\n            \"Flags\": 262144,\n            \"Sequence\": 3465,\n            \"TakerGets\": \"1000\",\n            \"TakerPays\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rnybsH3BZKKCG7fwPzTeLtGejnq6UQyNCC\",\n              \"value\": \"10\"\n            }\n          }\n        }\n      },\n      {\n        \"CreatedNode\": {\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"388D3A4BB364B8B11197652606B9399655A9A08161BE176B53038D7EA4C68000\",\n          \"NewFields\": {\n            \"ExchangeRate\": \"53038d7ea4c68000\",\n            \"RootIndex\": \"388D3A4BB364B8B11197652606B9399655A9A08161BE176B53038D7EA4C68000\",\n            \"TakerPaysCurrency\": \"0000000000000000000000005553440000000000\",\n            \"TakerPaysIssuer\": \"36943628426726193A3EB3C628482B35A80FFE32\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rD7ShWxq6xRYWDSDfzhKbfaJDerxd7nnds\",\n            \"Balance\": \"399999280\",\n            \"Flags\": 0,\n            \"OwnerCount\": 3,\n            \"Sequence\": 3466\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"5CBB1A27E8A59B788FD46B2A32F31110EAE289CF601FAD08565817225D7AD1FE\",\n          \"PreviousFields\": {\n            \"Balance\": \"399999520\",\n            \"OwnerCount\": 2,\n            \"Sequence\": 3465\n          },\n          \"PreviousTxnID\": \"ABBDB5E274696F92DB268C467C87987F14229B5F8B765B8A4330A97C92822000\",\n          \"PreviousTxnLgrSeq\": 3471\n        }\n      },\n      {\n        \"CreatedNode\": {\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"AFC38A27663E8753D1FA2326C75B9D183856E30FC16F2D0253038D7EA4C68000\",\n          \"NewFields\": {\n            \"DomainID\": \"4A4879496CFF23CA32242D50DA04DDB41F4561167276A62AF21899F83DF28812\",\n            \"ExchangeRate\": \"53038d7ea4c68000\",\n            \"RootIndex\": \"AFC38A27663E8753D1FA2326C75B9D183856E30FC16F2D0253038D7EA4C68000\",\n            \"TakerPaysCurrency\": \"0000000000000000000000005553440000000000\",\n            \"TakerPaysIssuer\": \"36943628426726193A3EB3C628482B35A80FFE32\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rD7ShWxq6xRYWDSDfzhKbfaJDerxd7nnds\",\n            \"RootIndex\": \"EC4CED1E3336B3608A91A66606B83B10E48ABA96674BAE6B87ABB623067EF4E3\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"EC4CED1E3336B3608A91A66606B83B10E48ABA96674BAE6B87ABB623067EF4E3\",\n          \"PreviousTxnID\": \"ABBDB5E274696F92DB268C467C87987F14229B5F8B765B8A4330A97C92822000\",\n          \"PreviousTxnLgrSeq\": 3471\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tesSUCCESS\"\n  },\n  \"tx\": {\n    \"Account\": \"rD7ShWxq6xRYWDSDfzhKbfaJDerxd7nnds\",\n    \"DomainID\": \"4A4879496CFF23CA32242D50DA04DDB41F4561167276A62AF21899F83DF28812\",\n    \"Fee\": \"240\",\n    \"Flags\": 1048576,\n    \"LastLedgerSequence\": 3494,\n    \"Sequence\": 3465,\n    \"SigningPubKey\": \"ED845F5404ACF32C68932F00DC15F4E072002DEF9EB8F4E56D6875B8CB56FE3A21\",\n    \"TakerGets\": \"17588363594\",\n    \"TakerPays\": {\n      \"currency\": \"USD\",\n      \"issuer\": \"rnybsH3BZKKCG7fwPzTeLtGejnq6UQyNCC\",\n      \"value\": \"10\"\n    },\n    \"TransactionType\": \"OfferCreate\",\n    \"TxnSignature\": \"C6BA6FB0E3A9405F045CBF2FA6CA1064EBE1E3EE659FA518186EF15CB118D4EDBF898DD5F71A312AEE833C8AC1CFF2F92D1980B94E637696B147014651F38904\",\n    \"ctid\": \"C0000D9300000000\",\n    \"date\": 805934403,\n    \"ledger_index\": 3475\n  },\n  \"validated\": true\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/OracleDelete/Simple.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport type { OracleSet } from 'xrpl'\nimport { TransactionSimpleComponent, TransactionSimpleProps } from '../types'\nimport { SimpleRow } from '../SimpleRow'\n\nexport const Simple: TransactionSimpleComponent = ({\n  data,\n}: TransactionSimpleProps<OracleSet>) => {\n  const { t } = useTranslation()\n  const { OracleDocumentID } = data.instructions\n  return (\n    <SimpleRow label={t('oracle_document_id')} data-testid=\"oracle-document-id\">\n      {OracleDocumentID}\n    </SimpleRow>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/OracleDelete/TableDetail.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport type { OracleDelete } from 'xrpl'\nimport { TransactionTableDetailProps } from '../types'\n\nexport const TableDetail = ({\n  instructions: tx,\n}: TransactionTableDetailProps<OracleDelete>) => {\n  const { t } = useTranslation()\n  return (\n    <div className=\"oracle-document-id\">\n      <span className=\"label\">{t('oracle_document_id')}: </span>\n      <span className=\"case-sensitive\">{tx.OracleDocumentID}</span>\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/OracleDelete/index.ts",
    "content": "import {\n  TransactionAction,\n  TransactionCategory,\n  TransactionMapping,\n} from '../types'\n\nimport { Simple } from './Simple'\nimport { TableDetail } from './TableDetail'\n\nexport const OracleDeleteTransaction: TransactionMapping = {\n  Simple,\n  TableDetail,\n  action: TransactionAction.CANCEL,\n  category: TransactionCategory.DEX,\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/OracleDelete/test/OracleDeleteSimple.test.tsx",
    "content": "import { createSimpleRenderFactory, expectSimpleRowText } from '../../test'\nimport { Simple } from '../Simple'\nimport OracleDelete from './mock_data/OracleDelete.json'\n\nconst renderComponent = createSimpleRenderFactory(Simple)\ndescribe('OracleDelete: Simple', () => {\n  it('renders', () => {\n    const { container, unmount } = renderComponent(OracleDelete)\n    expectSimpleRowText(container, 'oracle-document-id', '1')\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/OracleDelete/test/OracleDeleteTableDetail.test.tsx",
    "content": "import { createTableDetailRenderFactory } from '../../test'\nimport { TableDetail } from '../TableDetail'\nimport OracleDelete from './mock_data/OracleDelete.json'\n\nconst renderComponent = createTableDetailRenderFactory(TableDetail)\n\ndescribe('OracleDelete: TableDetail', () => {\n  it('renders', () => {\n    const { container, unmount } = renderComponent(OracleDelete)\n    expect(container).toHaveTextContent('oracle_document_id: 1')\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/OracleDelete/test/mock_data/OracleDelete.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rnuj2NkRxGbGpUK8u9hqEJA1zGRWyxHGvC\",\n    \"Fee\": \"10\",\n    \"Flags\": 0,\n    \"LastLedgerSequence\": 670056,\n    \"OracleDocumentID\": 1,\n    \"Sequence\": 670033,\n    \"SigningPubKey\": \"ED9376FE6E9063CB291C1031FC07A3B349D9FC45F2D71001B9CC7318F32C3A8F72\",\n    \"TransactionType\": \"OracleDelete\",\n    \"TxnSignature\": \"B1BD6A7AA9A0B3779D4EBE0652931D22792931B2F853C38E14BCFC2FD981FF3AFAA4921748B0321C8F0088180703425A8421606FCAFA028BF09F6E9A636DEC0D\",\n    \"ctid\": \"C00A395600000002\",\n    \"date\": 768949530,\n    \"inLedger\": 670038,\n    \"ledger_index\": 670038\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rnuj2NkRxGbGpUK8u9hqEJA1zGRWyxHGvC\",\n            \"Balance\": \"99999970\",\n            \"Flags\": 0,\n            \"OwnerCount\": 0,\n            \"Sequence\": 670034\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"05CC65869680974EF73B8C16A8D59DE7CE9C6B3B012328B11FCC28232B552EA6\",\n          \"PreviousFields\": {\n            \"Balance\": \"99999980\",\n            \"OwnerCount\": 1,\n            \"Sequence\": 670033\n          },\n          \"PreviousTxnID\": \"F5729FD72193989887718F13A28F2F8A33C03FD8299DC0C00F9952B28C8DA7EA\",\n          \"PreviousTxnLgrSeq\": 670036\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"AssetClass\": \"63757272656E6379\",\n            \"Flags\": 0,\n            \"LastUpdateTime\": 1715634318,\n            \"Owner\": \"rnuj2NkRxGbGpUK8u9hqEJA1zGRWyxHGvC\",\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"F5729FD72193989887718F13A28F2F8A33C03FD8299DC0C00F9952B28C8DA7EA\",\n            \"PreviousTxnLgrSeq\": 670036,\n            \"PriceDataSeries\": [\n              {\n                \"PriceData\": {\n                  \"AssetPrice\": \"67\",\n                  \"BaseAsset\": \"BTC\",\n                  \"QuoteAsset\": \"EUR\",\n                  \"Scale\": 2\n                }\n              },\n              {\n                \"PriceData\": {\n                  \"AssetPrice\": \"2e6\",\n                  \"BaseAsset\": \"XRP\",\n                  \"QuoteAsset\": \"USD\",\n                  \"Scale\": 1\n                }\n              }\n            ],\n            \"Provider\": \"70726F7669646572\"\n          },\n          \"LedgerEntryType\": \"Oracle\",\n          \"LedgerIndex\": \"2E0AC1D6AFC11AD78E48BE575761F75C0326F0547EE178CBB5D67F61691E13E7\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rnuj2NkRxGbGpUK8u9hqEJA1zGRWyxHGvC\",\n            \"RootIndex\": \"D745822C67049231E61684BF1F68DACFE522A3172FE4B635FE3966B218E90E2F\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"D745822C67049231E61684BF1F68DACFE522A3172FE4B635FE3966B218E90E2F\"\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tesSUCCESS\"\n  },\n  \"hash\": \"DEBA9881129F2191619045FC07B294107342410BF4E447CEEB801BFC75CC2342\",\n  \"ledger_index\": 670038,\n  \"date\": 768949530\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/OracleSet/Simple.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { TransactionSimpleComponent, TransactionSimpleProps } from '../types'\nimport { SimpleRow } from '../SimpleRow'\nimport { MILLIS_PER_SECOND } from '../../../../../rippled/lib/convertRippleDate'\nimport { localizeDate } from '../../../utils'\nimport { DATE_OPTIONS } from '../../../transactionUtils'\nimport { useLanguage } from '../../../hooks'\nimport Currency from '../../Currency'\n\nexport const Simple: TransactionSimpleComponent = ({\n  data,\n}: TransactionSimpleProps) => {\n  const { t } = useTranslation()\n  const language = useLanguage()\n  const {\n    oracleDocumentID,\n    provider,\n    uri,\n    lastUpdateTime,\n    assetClass,\n    priceDataSeries,\n  } = data.instructions\n  return (\n    <>\n      <SimpleRow\n        label={t('oracle_document_id')}\n        data-testid=\"oracle-document-id\"\n      >\n        {oracleDocumentID}\n      </SimpleRow>\n\n      {provider && (\n        <SimpleRow label={t('provider')} data-testid=\"provider\">\n          {provider}\n        </SimpleRow>\n      )}\n\n      {uri && (\n        <SimpleRow label={t('uri')} data-testid=\"uri\">\n          {uri}\n        </SimpleRow>\n      )}\n\n      <SimpleRow label={t('last_update_time')} data-testid=\"last-update-time\">\n        {localizeDate(\n          new Date(lastUpdateTime * MILLIS_PER_SECOND),\n          language,\n          DATE_OPTIONS,\n        )}\n      </SimpleRow>\n\n      {assetClass && (\n        <SimpleRow label={t('asset_class')} data-testid=\"asset-class\">\n          {assetClass}\n        </SimpleRow>\n      )}\n\n      <SimpleRow label={t('trading_pairs')} data-testid=\"trading-pairs\">\n        {priceDataSeries.map((priceDataObj) => (\n          <div className=\"amount list\" data-testid=\"amount\">\n            {priceDataObj.assetPrice ?? t('deleted')}\n            <div className=\"one-line\">\n              <Currency currency={priceDataObj.baseAsset} />/\n              <Currency currency={priceDataObj.quoteAsset} />\n            </div>\n          </div>\n        ))}\n      </SimpleRow>\n    </>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/OracleSet/TableDetail.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { TransactionTableDetailProps } from '../types'\nimport { useLanguage } from '../../../hooks'\nimport { DATE_OPTIONS } from '../../../transactionUtils'\nimport { localizeDate } from '../../../utils'\nimport { MILLIS_PER_SECOND } from '../../../../../rippled/lib/convertRippleDate'\nimport Currency from '../../Currency'\n\nexport const TableDetail = ({\n  instructions: tx,\n}: TransactionTableDetailProps) => {\n  const { t } = useTranslation()\n  const language = useLanguage()\n  return (\n    <>\n      <div className=\"oracle-document-id\">\n        <span className=\"label\">{t('oracle_document_id')}: </span>\n        <span className=\"case-sensitive\">{tx.oracleDocumentID}</span>\n      </div>\n      <>\n        {tx.provider && (\n          <>\n            <span className=\"label\">{t('provider')}: </span>\n            <span className=\"case-sensitive\">{tx.provider}</span>\n          </>\n        )}\n        {tx.assetClass && (\n          <>\n            <span className=\"label\">{t('asset_class')}: </span>\n            <span className=\"case-sensitive\">{tx.assetClass}</span>\n          </>\n        )}\n        <>\n          <span className=\"label\">{t('last_update_time')}: </span>\n          <span className=\"case-sensitive\">\n            {localizeDate(\n              new Date(tx.lastUpdateTime * MILLIS_PER_SECOND),\n              language,\n              DATE_OPTIONS,\n            )}\n          </span>\n        </>\n      </>\n      <div className=\"trading-pair\">\n        <span className=\"label\">{t('trading_pairs')}: </span>\n        {tx.priceDataSeries.map((priceDataObj, index) => (\n          <>\n            <>\n              <span className=\"case-sensitive\">\n                {priceDataObj.assetPrice ?? t('deleted')}\n              </span>\n              <span className=\"case-sensitive no-space\">\n                <Currency currency={priceDataObj.baseAsset} />/\n                <Currency currency={priceDataObj.quoteAsset} />\n              </span>\n            </>\n            {index < tx.priceDataSeries.length - 1 && ', '}\n          </>\n        ))}\n      </div>\n    </>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/OracleSet/index.ts",
    "content": "import {\n  TransactionAction,\n  TransactionCategory,\n  TransactionMapping,\n} from '../types'\n\nimport { Simple } from './Simple'\nimport { TableDetail } from './TableDetail'\nimport { parser } from './parser'\n\nexport const OracleSetTransaction: TransactionMapping = {\n  Simple,\n  TableDetail,\n  action: TransactionAction.CREATE,\n  category: TransactionCategory.DEX,\n  parser,\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/OracleSet/parser.ts",
    "content": "import type { OracleSet } from 'xrpl'\nimport { convertHexToString } from '../../../../../rippled/lib/utils'\nimport { convertScaledPrice } from '../../../utils'\n\nexport function parser(tx: OracleSet) {\n  const priceDataSeries = tx.PriceDataSeries.map((priceDataObj) => ({\n    baseAsset: priceDataObj.PriceData.BaseAsset,\n    quoteAsset: priceDataObj.PriceData.QuoteAsset,\n    assetPrice:\n      priceDataObj.PriceData.AssetPrice && priceDataObj.PriceData.Scale\n        ? convertScaledPrice(\n            priceDataObj.PriceData.AssetPrice,\n            priceDataObj.PriceData.Scale,\n          )\n        : undefined,\n  }))\n\n  return {\n    oracleDocumentID: tx.OracleDocumentID,\n    provider: convertHexToString(tx.Provider),\n    uri: convertHexToString(tx.URI),\n    lastUpdateTime: tx.LastUpdateTime,\n    assetClass: convertHexToString(tx.AssetClass),\n    priceDataSeries,\n  }\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/OracleSet/test/ConvertScalePrice.test.ts",
    "content": "import { convertScaledPrice } from '../../../../utils'\n\nconst numberToHex = (number: number | bigint) => number.toString(16)\n\ndescribe('convertScaledPrice', () => {\n  describe('with hex string input (Price Oracles)', () => {\n    it('should convert scaled hex price to decimal string', () => {\n      expect(convertScaledPrice(numberToHex(5083), 4)).toEqual('0.5083')\n      expect(convertScaledPrice(numberToHex(12), 3)).toEqual('0.012')\n      expect(convertScaledPrice(numberToHex(12), 11)).toEqual('0.00000000012')\n      expect(convertScaledPrice(numberToHex(1234567891234), 6)).toEqual(\n        '1234567.891234',\n      )\n      expect(convertScaledPrice(numberToHex(1000000000000), 0)).toEqual(\n        '1000000000000',\n      )\n      expect(convertScaledPrice(numberToHex(1234123412341234), 1)).toEqual(\n        '123412341234123.4',\n      )\n      expect(\n        convertScaledPrice(numberToHex(12341234123412341234n), 12),\n      ).toEqual('12341234.123412341234')\n      // 2^54\n      expect(convertScaledPrice(numberToHex(18014398509481984), 10)).toEqual(\n        '1801439.8509481984',\n      )\n    })\n\n    it('should handle hex strings that look like decimal numbers', () => {\n      // 256 in hex is \"100\", 4096 in hex is \"1000\"\n      expect(convertScaledPrice('100', 0)).toEqual('256')\n      expect(convertScaledPrice('1000', 0)).toEqual('4096')\n    })\n  })\n\n  describe('with number input (MPT amounts)', () => {\n    it('should convert scaled number to decimal string', () => {\n      expect(convertScaledPrice(1000000, 6)).toEqual('1')\n      expect(convertScaledPrice(1500000, 6)).toEqual('1.500000')\n      expect(convertScaledPrice(123456789, 4)).toEqual('12345.6789')\n      expect(convertScaledPrice(100, 2)).toEqual('1')\n      expect(convertScaledPrice(1, 3)).toEqual('0.001')\n    })\n\n    it('should handle scale of 0', () => {\n      expect(convertScaledPrice(1000000, 0)).toEqual('1000000')\n      expect(convertScaledPrice(42, 0)).toEqual('42')\n    })\n\n    it('should handle large numbers', () => {\n      // 2^54\n      expect(convertScaledPrice(18014398509481984, 10)).toEqual(\n        '1801439.8509481984',\n      )\n    })\n  })\n\n  describe('with bigint input (MPT amounts)', () => {\n    it('should convert scaled bigint to decimal string', () => {\n      expect(convertScaledPrice(1000000n, 6)).toEqual('1')\n      expect(convertScaledPrice(12341234123412341234n, 12)).toEqual(\n        '12341234.123412341234',\n      )\n    })\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/OracleSet/test/OracleSetSimple.test.tsx",
    "content": "import { createSimpleRenderFactory, expectSimpleRowText } from '../../test'\nimport { Simple } from '../Simple'\nimport OracleSet from './mock_data/OracleSet.json'\n\nconst renderComponent = createSimpleRenderFactory(Simple)\ndescribe('OracleSet: Simple', () => {\n  it('renders', () => {\n    const { container, unmount } = renderComponent(OracleSet)\n    expectSimpleRowText(container, 'oracle-document-id', '1')\n    expectSimpleRowText(container, 'provider', 'provider')\n    expectSimpleRowText(\n      container,\n      'last-update-time',\n      'May 13, 2024 at 9:05:10 PM',\n    )\n    expectSimpleRowText(container, 'asset-class', 'currency')\n    expectSimpleRowText(\n      container,\n      'trading-pairs',\n      '74.2\\uE900 XRP/USD1.03BTC/AUDT',\n    )\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/OracleSet/test/OracleSetTableDetail.test.tsx",
    "content": "import { createTableDetailRenderFactory } from '../../test'\nimport { TableDetail } from '../TableDetail'\nimport OracleSet from './mock_data/OracleSet.json'\n\nconst renderComponent = createTableDetailRenderFactory(TableDetail)\n\ndescribe('OracleDelete: TableDetail', () => {\n  it('renders', () => {\n    const { container, unmount } = renderComponent(OracleSet)\n    expect(container).toHaveTextContent(\n      'oracle_document_id: 1' +\n        'provider: provider' +\n        'asset_class: currency' +\n        'last_update_time: May 13, 2024 at 9:05:10 PM' +\n        'trading_pairs: 74.2\\uE900 XRP/USD, 1.03BTC/AUDT',\n    )\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/OracleSet/test/mock_data/OracleSet.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rnuj2NkRxGbGpUK8u9hqEJA1zGRWyxHGvC\",\n    \"AssetClass\": \"63757272656E6379\",\n    \"Fee\": \"10\",\n    \"Flags\": 0,\n    \"LastLedgerSequence\": 670052,\n    \"LastUpdateTime\": 1715634310,\n    \"OracleDocumentID\": 1,\n    \"PriceDataSeries\": [\n      {\n        \"PriceData\": {\n          \"AssetPrice\": \"2e6\",\n          \"BaseAsset\": \"XRP\",\n          \"QuoteAsset\": \"USD\",\n          \"Scale\": 1\n        }\n      },\n      {\n        \"PriceData\": {\n          \"AssetPrice\": \"67\",\n          \"BaseAsset\": \"BTC\",\n          \"QuoteAsset\": \"4155445400000000000000000000000000000000\",\n          \"Scale\": 2\n        }\n      }\n    ],\n    \"Provider\": \"70726F7669646572\",\n    \"Sequence\": 670031,\n    \"SigningPubKey\": \"ED9376FE6E9063CB291C1031FC07A3B349D9FC45F2D71001B9CC7318F32C3A8F72\",\n    \"TransactionType\": \"OracleSet\",\n    \"TxnSignature\": \"BAF0D415F9F4DC3F135EA4BD2EE442CDACF70A7BF3BD40A2EAF9D880CD8DEA039036B7D698BC7B5720B4AE6930A4A594168AE676C910510DE0F0C5CD653D5703\",\n    \"ctid\": \"C00A395200060002\",\n    \"date\": 768949520,\n    \"inLedger\": 670034\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rnuj2NkRxGbGpUK8u9hqEJA1zGRWyxHGvC\",\n            \"Balance\": \"99999990\",\n            \"Flags\": 0,\n            \"OwnerCount\": 1,\n            \"Sequence\": 670032\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"05CC65869680974EF73B8C16A8D59DE7CE9C6B3B012328B11FCC28232B552EA6\",\n          \"PreviousFields\": {\n            \"Balance\": \"100000000\",\n            \"OwnerCount\": 0,\n            \"Sequence\": 670031\n          },\n          \"PreviousTxnID\": \"E78F232A23A3C4F6CD093755669A1A08B61AFBE659D8AFA18F2A0DD7C77D646A\",\n          \"PreviousTxnLgrSeq\": 670031\n        }\n      },\n      {\n        \"CreatedNode\": {\n          \"LedgerEntryType\": \"Oracle\",\n          \"LedgerIndex\": \"2E0AC1D6AFC11AD78E48BE575761F75C0326F0547EE178CBB5D67F61691E13E7\",\n          \"NewFields\": {\n            \"AssetClass\": \"63757272656E6379\",\n            \"LastUpdateTime\": 1715634310,\n            \"Owner\": \"rnuj2NkRxGbGpUK8u9hqEJA1zGRWyxHGvC\",\n            \"PriceDataSeries\": [\n              {\n                \"PriceData\": {\n                  \"AssetPrice\": \"2e4\",\n                  \"BaseAsset\": \"XRP\",\n                  \"QuoteAsset\": \"USD\",\n                  \"Scale\": 1\n                }\n              },\n              {\n                \"PriceData\": {\n                  \"AssetPrice\": \"64\",\n                  \"BaseAsset\": \"BTC\",\n                  \"QuoteAsset\": \"EUR\",\n                  \"Scale\": 2\n                }\n              }\n            ],\n            \"Provider\": \"70726F7669646572\"\n          }\n        }\n      },\n      {\n        \"CreatedNode\": {\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"D745822C67049231E61684BF1F68DACFE522A3172FE4B635FE3966B218E90E2F\",\n          \"NewFields\": {\n            \"Owner\": \"rnuj2NkRxGbGpUK8u9hqEJA1zGRWyxHGvC\",\n            \"RootIndex\": \"D745822C67049231E61684BF1F68DACFE522A3172FE4B635FE3966B218E90E2F\"\n          }\n        }\n      }\n    ],\n    \"TransactionIndex\": 6,\n    \"TransactionResult\": \"tesSUCCESS\"\n  },\n  \"hash\": \"6156D7F1B95A9300D34B1E81B602BB9AFD4043B09BACD8A6126A86A7FAC01F47\",\n  \"date\": 768949520,\n  \"ledger_index\": 670034\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/Payment/Description.tsx",
    "content": "import { Trans, useTranslation } from 'react-i18next'\nimport type { Payment } from 'xrpl'\nimport { Account } from '../../Account'\nimport { TransactionDescriptionProps } from '../types'\nimport { isPartialPayment } from './parser'\nimport { Amount } from '../../Amount'\nimport { formatAmount } from '../../../../../rippled/lib/txSummary/formatAmount'\n\nexport const Description = ({ data }: TransactionDescriptionProps<Payment>) => {\n  const { t } = useTranslation()\n  const partial = isPartialPayment(data.tx.Flags)\n\n  return (\n    <>\n      <div data-testid=\"from-to-line\">\n        <Trans\n          i18nKey=\"payment_desc_line_1\"\n          components={{\n            source: <Account account={data.tx.Account} />,\n            destination: <Account account={data.tx.Destination} />,\n          }}\n        />\n      </div>\n      {data.tx.SourceTag != null && (\n        <div data-testid=\"source-tag-line\">\n          {t('the_source_tag_is')}\n          <b>{data.tx.SourceTag}</b>\n        </div>\n      )}\n      {data.tx.DestinationTag != null && (\n        <div data-testid=\"destination-tag-line\">\n          {t('the_destination_tag_is')} <b>{data.tx.DestinationTag}</b>\n        </div>\n      )}\n      <div data-testid=\"amount-line\">\n        {`${t('payment_desc_line_4')}${partial ? ' up to' : ''}`}{' '}\n        <b>\n          <Amount value={formatAmount(data.tx.Amount)} />\n        </b>\n        {data.tx.SendMax && (\n          <>\n            <span> {t('payment_desc_line_5')}</span>{' '}\n            <b>\n              <Amount value={formatAmount(data.tx.SendMax)} />\n            </b>\n          </>\n        )}\n      </div>\n      {data?.meta?.delivered_amount && (\n        <div data-testid=\"delivered-line\">\n          {t('payment_desc_line_6')}{' '}\n          <b>\n            <Amount value={formatAmount(data.meta.delivered_amount)} />\n          </b>\n        </div>\n      )}\n      {data.tx.DomainID !== undefined && (\n        <div data-testid=\"domain-id-line\">\n          {t('domain_id')}\n          {': '}\n          <b>{data.tx.DomainID}</b>\n        </div>\n      )}\n    </>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/Payment/Simple.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { Account } from '../../Account'\nimport { Amount } from '../../Amount'\nimport { PaymentInstructions } from './types'\nimport { TransactionSimpleProps } from '../types'\nimport { SimpleRow } from '../SimpleRow'\nimport { CredentialIDs } from '../CredentialIDs'\n\nexport const Simple = (props: TransactionSimpleProps<PaymentInstructions>) => {\n  const { data } = props\n  const { t } = useTranslation()\n  const { amount, convert } = data.instructions\n\n  const renderPartial = () => {\n    const { partial } = data.instructions\n    return partial ? (\n      <div className=\"partial-row\">{t('partial_payment_allowed')}</div>\n    ) : null\n  }\n\n  const renderPayment = () => {\n    const { max, destination, sourceTag, partial, domainID, credentialIDs } =\n      data.instructions\n\n    return (\n      <>\n        {max && (\n          <SimpleRow label={t('using_at_most')} data-testid=\"max\">\n            <Amount value={max} />\n          </SimpleRow>\n        )}\n        <SimpleRow\n          label={partial ? t('delivered') : t('send')}\n          data-testid=\"amount\"\n        >\n          <Amount value={amount} />\n          {renderPartial()}\n        </SimpleRow>\n        {sourceTag !== undefined && (\n          <SimpleRow label={t('source_tag')} data-testid=\"source-tag\">\n            {sourceTag}\n          </SimpleRow>\n        )}\n        {/* Note: domainID is not relevant for self-destined payment transactions */}\n        {domainID !== undefined && (\n          <SimpleRow label={t('domain_id')} data-testid=\"domain-id\">\n            {domainID}\n          </SimpleRow>\n        )}\n        <SimpleRow label={t('destination')} data-testid=\"destination\">\n          <Account account={destination} />\n        </SimpleRow>\n        {credentialIDs && credentialIDs.length > 0 && (\n          <CredentialIDs credentialIDs={credentialIDs} />\n        )}\n      </>\n    )\n  }\n\n  return convert ? (\n    <>\n      <SimpleRow label={t('convert_maximum')} data-testid=\"max\">\n        <Amount value={convert} />\n      </SimpleRow>\n      <SimpleRow label={t('convert_to')} data-testid=\"amount\">\n        <Amount value={amount} />\n        {renderPartial()}\n      </SimpleRow>\n    </>\n  ) : (\n    renderPayment()\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/Payment/TableDetail.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { Amount } from '../../Amount'\nimport { TransactionTableDetailProps } from '../types'\nimport { PaymentInstructions } from './types'\nimport { Account } from '../../Account'\n\nexport const TableDetail = ({\n  instructions,\n}: TransactionTableDetailProps<PaymentInstructions>) => {\n  const { t } = useTranslation()\n  const {\n    convert,\n    amount,\n    destination,\n    partial,\n    sourceTag,\n    domainID,\n    credentialIDs,\n  } = instructions\n\n  const renderPartial = () => (\n    <div className=\"partial-payment\">{t('partial_payment_allowed')}</div>\n  )\n\n  const renderCredentialIDs = () => {\n    if (!credentialIDs || credentialIDs.length === 0) {\n      return null\n    }\n    return (\n      <div className=\"credential-ids\">\n        <span className=\"label\">{t('credential_ids')}: </span>\n        {credentialIDs.map((id) => (\n          <div key={id} className=\"credential-id\">\n            {id}\n          </div>\n        ))}\n      </div>\n    )\n  }\n\n  if (convert) {\n    return (\n      <div className=\"payment conversion\">\n        <span className=\"label\">{t('convert_maximum')}</span>\n        <Amount value={convert} />\n        <span>{t('to')}</span>\n        <Amount value={amount} />\n        {partial && renderPartial()}\n        {renderCredentialIDs()}\n      </div>\n    )\n  }\n\n  return (\n    <div className=\"payment\">\n      <span className=\"label\">{t('send')}</span>\n      <Amount value={amount} />\n      <span>{t('to')}</span>\n      <Account account={destination} />\n      {sourceTag !== undefined && (\n        <div className=\"st\">\n          {t('source_tag')}\n          {': '}\n          <span>{sourceTag}</span>\n        </div>\n      )}\n      {domainID !== undefined && (\n        <div className=\"domain-id\">\n          {t('domain_id')}\n          {': '}\n          <span>{domainID}</span>\n        </div>\n      )}\n      {renderCredentialIDs()}\n      {partial && renderPartial()}\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/Payment/index.ts",
    "content": "import {\n  TransactionAction,\n  TransactionCategory,\n  TransactionMapping,\n} from '../types'\n\nimport { Simple } from './Simple'\nimport { Description } from './Description'\nimport { parser } from './parser'\nimport { TableDetail } from './TableDetail'\n\nexport const PaymentTransaction: TransactionMapping = {\n  Description,\n  Simple,\n  TableDetail,\n  action: TransactionAction.SEND,\n  category: TransactionCategory.PAYMENT,\n  parser,\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/Payment/parser.ts",
    "content": "// import type { Payment } from 'xrpl'\nimport { formatAmount } from '../../../../../rippled/lib/txSummary/formatAmount'\nimport { PaymentInstructions } from './types'\nimport { Amount, ExplorerAmount } from '../../../types'\n\nconst formatFailedPartialAmount = (d: Amount): ExplorerAmount => ({\n  ...formatAmount(d),\n  amount: 0,\n})\n\nexport const isPartialPayment = (flags: any) => 0x00020000 & flags\n\n// TODO: use MPTAmount type from xrpl.js\nexport const parser = (tx: any, meta: any): PaymentInstructions => {\n  const max = tx.SendMax ? formatAmount(tx.SendMax) : undefined\n  const partial = !!isPartialPayment(tx.Flags)\n  const failedPartial = partial && meta.TransactionResult !== 'tesSUCCESS'\n  const amount = failedPartial\n    ? formatFailedPartialAmount(tx.Amount)\n    : formatAmount(partial ? meta.delivered_amount : tx.Amount)\n  const dt = tx.DestinationTag !== undefined ? `:${tx.DestinationTag}` : ''\n  const destination = `${tx.Destination}${dt}`\n\n  if (tx.Account === tx.Destination) {\n    return {\n      amount,\n      convert: max,\n      destination,\n      partial,\n      domainID: tx.DomainID,\n      credentialIDs: tx.CredentialIDs,\n    }\n  }\n\n  return {\n    amount,\n    max,\n    destination: `${tx.Destination}${dt}`,\n    sourceTag: tx.SourceTag,\n    partial,\n    domainID: tx.DomainID,\n    credentialIDs: tx.CredentialIDs,\n  }\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/Payment/test/PaymentDescription.test.tsx",
    "content": "import i18n from '../../../../../../i18n/testConfigEnglish'\nimport { Description } from '../Description'\n\nimport mockPayment from './mock_data/Payment.json'\nimport mockPaymentConvert from './mock_data/PaymentWithConvert.json'\nimport mockPaymentDestinationTag from './mock_data/PaymentWithDestinationTag.json'\nimport mockPaymentPartial from './mock_data/PaymentWithPartial.json'\nimport mockPaymentSendMax from './mock_data/PaymentWithSendMax.json'\nimport mockPaymentSourceTag from './mock_data/PaymentWithSourceTag.json'\nimport mockPermDomainID from './mock_data/PaymentWithPermDomainID.json'\nimport { createDescriptionRenderFactory } from '../../test'\n\nconst renderComponent = createDescriptionRenderFactory(Description, i18n)\n\ndescribe('Payment: Description', () => {\n  it('renders', () => {\n    const { container, unmount } = renderComponent(mockPayment)\n\n    expect(\n      container.querySelector('[data-testid=\"from-to-line\"]'),\n    ).toHaveTextContent(\n      `The payment is from rNQEMJA4PsoSrZRn9J6RajAYhcDzzhf8ok to rHoPwMC75KVUhBMeV3uDMybKG5JND74teh`,\n    )\n    expect(\n      container.querySelector('[data-testid=\"source-tag-line\"]'),\n    ).not.toBeInTheDocument()\n    expect(\n      container.querySelector('[data-testid=\"destination-tag-line\"]'),\n    ).not.toBeInTheDocument()\n    expect(\n      container.querySelector('[data-testid=\"amount-line\"]'),\n    ).toHaveTextContent(`It was instructed to deliver \\uE9002,421.8268 XRP`)\n    expect(\n      container.querySelector('[data-testid=\"delivered-line\"]'),\n    ).toHaveTextContent(`The actual amount delivered was \\uE9002,421.8268 XRP`)\n\n    unmount()\n  })\n\n  it('renders with failed partial conversion', () => {\n    const { container, unmount } = renderComponent(mockPaymentConvert)\n\n    expect(\n      container.querySelector('[data-testid=\"from-to-line\"]'),\n    ).toHaveTextContent(\n      `The payment is from r9x5PHDiwuvbpYB3uvGAqEUVV5wxHayQEx to r9x5PHDiwuvbpYB3uvGAqEUVV5wxHayQEx`,\n    )\n    expect(\n      container.querySelector('[data-testid=\"source-tag-line\"]'),\n    ).not.toBeInTheDocument()\n    expect(\n      container.querySelector('[data-testid=\"destination-tag-line\"]'),\n    ).not.toBeInTheDocument()\n    expect(\n      container.querySelector('[data-testid=\"amount-line\"]'),\n    ).toHaveTextContent(\n      `It was instructed to deliver up to 1,140.00 YCN.r8HgVGenRTAiNSM5iqt9PX2D2EczFZhZr by spending up to \\uE9001,140.00 XRP`,\n    )\n    expect(\n      container.querySelector('[data-testid=\"delivered-line\"]'),\n    ).not.toBeInTheDocument()\n\n    unmount()\n  })\n\n  it('renders with destination tag', () => {\n    const { container, unmount } = renderComponent(mockPaymentDestinationTag)\n\n    expect(\n      container.querySelector('[data-testid=\"from-to-line\"]'),\n    ).toHaveTextContent(\n      `The payment is from rDAE53VfMvftPB4ogpWGWvzkQxfht6JPxr to rHWcuuZoFvDS6gNbmHSdpb7u1hZzxvCoMt`,\n    )\n    expect(\n      container.querySelector('[data-testid=\"source-tag-line\"]'),\n    ).not.toBeInTheDocument()\n    expect(\n      container.querySelector('[data-testid=\"destination-tag-line\"]'),\n    ).toHaveTextContent(`The destination tag is 381702`)\n    expect(\n      container.querySelector('[data-testid=\"amount-line\"]'),\n    ).toHaveTextContent(`It was instructed to deliver \\uE9001,531.267 XRP`)\n    expect(\n      container.querySelector('[data-testid=\"delivered-line\"]'),\n    ).toHaveTextContent(`The actual amount delivered was \\uE9001,531.267 XRP`)\n\n    unmount()\n  })\n\n  it('renders with send max', () => {\n    const { container, unmount } = renderComponent(mockPaymentSendMax)\n\n    expect(\n      container.querySelector('[data-testid=\"from-to-line\"]'),\n    ).toHaveTextContent(\n      `The payment is from r3RaNVLvWjqqtFAawC6jbRhgKyFH7HvRS8 to rprcTynT68nYdKzDTefAZG9HjSHiYcnP4b`,\n    )\n    expect(\n      container.querySelector('[data-testid=\"destination-tag-line\"]'),\n    ).toHaveTextContent(`The destination tag is 0`)\n    expect(\n      container.querySelector('[data-testid=\"source-tag-line\"]'),\n    ).not.toBeInTheDocument()\n    expect(\n      container.querySelector('[data-testid=\"amount-line\"]'),\n    ).toHaveTextContent(\n      `It was instructed to deliver 17,366,599.150289 XRdoge.rLqUC2eCPohYvJCEBJ77eCCqVL2uEiczjA by spending up to 17,366,599.150289 XRdoge.rLqUC2eCPohYvJCEBJ77eCCqVL2uEiczjA`,\n    )\n    expect(\n      container.querySelector('[data-testid=\"delivered-line\"]'),\n    ).toHaveTextContent(\n      `The actual amount delivered was 17,366,599.150289 XRdoge.rLqUC2eCPohYvJCEBJ77eCCqVL2uEiczjA`,\n    )\n    unmount()\n  })\n\n  it('renders with partial', () => {\n    const { container, unmount } = renderComponent(mockPaymentPartial)\n\n    expect(\n      container.querySelector('[data-testid=\"from-to-line\"]'),\n    ).toHaveTextContent(\n      `The payment is from rGTurN94Nn3RkJGSqy9MwmQCLpXZkELbnq to rMQ4oGC8fasuJwfdrfknFTttDbf8cR3D2j`,\n    )\n    expect(\n      container.querySelector('[data-testid=\"destination-tag-line\"]'),\n    ).toHaveTextContent(`The destination tag is 0`)\n    expect(\n      container.querySelector('[data-testid=\"source-tag-line\"]'),\n    ).not.toBeInTheDocument()\n    expect(\n      container.querySelector('[data-testid=\"amount-line\"]'),\n    ).toHaveTextContent(\n      `It was instructed to deliver up to 0.001043 xCoin.rXCoYSUnkpygdtfpz3Df8dKQuRZjM9UFi`,\n    )\n    expect(\n      container.querySelector('[data-testid=\"delivered-line\"]'),\n    ).toHaveTextContent(\n      `The actual amount delivered was 0.00104196 xCoin.rXCoYSUnkpygdtfpz3Df8dKQuRZjM9UFi`,\n    )\n\n    unmount()\n  })\n\n  it('renders with SourceTag', () => {\n    const { container, unmount } = renderComponent(mockPaymentSourceTag)\n\n    expect(\n      container.querySelector('[data-testid=\"source-tag-line\"]'),\n    ).toHaveTextContent(`The source tag is 20648`)\n    expect(\n      container.querySelector('[data-testid=\"destination-tag-line\"]'),\n    ).toHaveTextContent(`The destination tag is 412453880`)\n\n    unmount()\n  })\n\n  it(`renders with Permissioned Domain ID`, () => {\n    const { container } = renderComponent(mockPermDomainID)\n\n    expect(\n      container.querySelector('[data-testid=\"domain-id-line\"]'),\n    ).toHaveTextContent(\n      `Domain ID: D3261DF48CDA3B860ED3FA99F02138856393CD44556E028D5CB66192A18A8D02`,\n    )\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/Payment/test/PaymentSimple.test.tsx",
    "content": "import { useQuery } from 'react-query'\nimport {\n  createSimpleRenderFactory,\n  expectSimpleRowLabel,\n  expectSimpleRowText,\n} from '../../test'\nimport { Simple } from '../Simple'\nimport mockPayment from './mock_data/Payment.json'\nimport mockPaymentConvert from './mock_data/PaymentWithConvert.json'\nimport mockPaymentDestinationTag from './mock_data/PaymentWithDestinationTag.json'\nimport mockPaymentPartial from './mock_data/PaymentWithPartial.json'\nimport mockPaymentSendMax from './mock_data/PaymentWithSendMax.json'\nimport mockPaymentSourceTag from './mock_data/PaymentWithSourceTag.json'\nimport mockPaymentMPT from './mock_data/PaymentMPT.json'\nimport mockPermDomainID from './mock_data/PaymentWithPermDomainID.json'\nimport mockPaymentWithCredentialIDs from './mock_data/PaymentWithCredentialIDs.json'\n\njest.mock('react-query', () => ({\n  ...jest.requireActual('react-query'),\n  useQuery: jest.fn(),\n}))\n\nconst renderComponent = createSimpleRenderFactory(Simple)\n\ndescribe('Payment: Simple', () => {\n  it('renders', () => {\n    const { container, unmount } = renderComponent(mockPayment)\n\n    expectSimpleRowText(container, 'amount', `\\uE9002,421.8268 XRP`)\n    expectSimpleRowLabel(container, 'amount', `send`)\n\n    expectSimpleRowText(\n      container,\n      'destination',\n      `rHoPwMC75KVUhBMeV3uDMybKG5JND74teh`,\n    )\n\n    unmount()\n  })\n\n  it('renders with failed partial conversion', () => {\n    const { container, unmount } = renderComponent(mockPaymentConvert)\n\n    expectSimpleRowLabel(container, 'max', `convert_maximum`)\n    expectSimpleRowText(container, 'max', `\\uE9001,140.00 XRP`)\n\n    expectSimpleRowLabel(container, 'amount', `convert_to`)\n    expectSimpleRowText(\n      container,\n      'amount',\n      `0.00 YCN.r8HgVGenRTAiNSM5iqt9PX2D2EczFZhZrpartial_payment_allowed`,\n    )\n\n    expect(\n      container.querySelector('[data-testid=\"destination\"]'),\n    ).not.toBeInTheDocument()\n\n    unmount()\n  })\n\n  it('renders with destination tag', () => {\n    const { container, unmount } = renderComponent(mockPaymentDestinationTag)\n\n    expectSimpleRowText(container, 'amount', `\\uE9001,531.267 XRP`)\n    expectSimpleRowLabel(container, 'amount', `send`)\n\n    expectSimpleRowText(\n      container,\n      'destination',\n      `rHWcuuZoFvDS6gNbmHSdpb7u1hZzxvCoMt:381702`,\n    )\n\n    unmount()\n  })\n\n  it('renders with send max', () => {\n    const { container, unmount } = renderComponent(mockPaymentSendMax)\n\n    expectSimpleRowText(\n      container,\n      'max',\n      `17,366,599.150289 XRdoge.rLqUC2eCPohYvJCEBJ77eCCqVL2uEiczjA`,\n    )\n    expectSimpleRowLabel(container, 'max', `using_at_most`)\n\n    expectSimpleRowText(\n      container,\n      'amount',\n      `17,366,599.150289 XRdoge.rLqUC2eCPohYvJCEBJ77eCCqVL2uEiczjA`,\n    )\n    expectSimpleRowLabel(container, 'amount', `send`)\n\n    expectSimpleRowText(\n      container,\n      'destination',\n      `rprcTynT68nYdKzDTefAZG9HjSHiYcnP4b:0`,\n    )\n\n    unmount()\n  })\n\n  it('renders with partial', () => {\n    const { container, unmount } = renderComponent(mockPaymentPartial)\n\n    expectSimpleRowText(\n      container,\n      'amount',\n      `0.00104196 xCoin.rXCoYSUnkpygdtfpz3Df8dKQuRZjM9UFipartial_payment_allowed`,\n    )\n    expectSimpleRowLabel(container, 'amount', `delivered`)\n\n    expectSimpleRowText(\n      container,\n      'destination',\n      `rMQ4oGC8fasuJwfdrfknFTttDbf8cR3D2j:0`,\n    )\n\n    unmount()\n  })\n\n  it('renders with SourceTag', () => {\n    const { container, unmount } = renderComponent(mockPaymentSourceTag)\n\n    expectSimpleRowText(container, 'source-tag', `20648`)\n\n    unmount()\n  })\n\n  it('renders direct MPT payment', () => {\n    const data = {\n      assetScale: 3,\n    }\n\n    // @ts-ignore\n    useQuery.mockImplementation(() => ({\n      data,\n    }))\n\n    const { container, unmount } = renderComponent(mockPaymentMPT)\n\n    expectSimpleRowText(\n      container,\n      'amount',\n      `0.1 000003C31D321B7DDA58324DC38CDF18934FAFFFCDF69D5F`,\n    )\n    expectSimpleRowLabel(container, 'amount', `send`)\n\n    expectSimpleRowText(\n      container,\n      'destination',\n      `rw6UtpfBFaGht6SiC1HpDPNw6Yt25pKvnu`,\n    )\n\n    unmount()\n  })\n\n  it(`renders with Permissioned Domain ID`, () => {\n    const { container, unmount } = renderComponent(mockPermDomainID)\n\n    expectSimpleRowText(\n      container,\n      'domain-id',\n      `D3261DF48CDA3B860ED3FA99F02138856393CD44556E028D5CB66192A18A8D02`,\n    )\n    expectSimpleRowLabel(container, 'domain-id', `domain_id`)\n\n    unmount()\n  })\n\n  it('renders with CredentialIDs', () => {\n    const { container, unmount } = renderComponent(mockPaymentWithCredentialIDs)\n\n    expectSimpleRowText(container, 'amount', `\\uE9002,421.8268 XRP`)\n    expectSimpleRowLabel(container, 'amount', `send`)\n\n    expectSimpleRowText(\n      container,\n      'destination',\n      `rHoPwMC75KVUhBMeV3uDMybKG5JND74teh`,\n    )\n\n    // Check credential IDs as individual rows\n    expectSimpleRowText(\n      container,\n      'credential-id-0',\n      '7B685088D546B9E8905D26206F452BB2F44D9A33C9BD9BCF280F7BA39015A955',\n    )\n    expectSimpleRowLabel(container, 'credential-id-0', 'credential_ids')\n    expectSimpleRowText(\n      container,\n      'credential-id-1',\n      '8B685088D546B9E8905D26206F452BB2F44D9A33C9BD9BCF280F7BA39015A956',\n    )\n    expectSimpleRowLabel(container, 'credential-id-1', '')\n\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/Payment/test/PaymentTableDetail.test.tsx",
    "content": "import { createTableDetailRenderFactory } from '../../test'\nimport { TableDetail } from '../TableDetail'\nimport mockPayment from './mock_data/Payment.json'\nimport mockPaymentConvert from './mock_data/PaymentWithConvert.json'\nimport mockPaymentDestinationTag from './mock_data/PaymentWithDestinationTag.json'\nimport mockPaymentPartial from './mock_data/PaymentWithPartial.json'\nimport mockPaymentSendMax from './mock_data/PaymentWithSendMax.json'\nimport mockPaymentSourceTag from './mock_data/PaymentWithSourceTag.json'\nimport mockPermDomainID from './mock_data/PaymentWithPermDomainID.json'\nimport mockPaymentCredentialIDs from './mock_data/PaymentWithCredentialIDs.json'\n\nconst renderComponent = createTableDetailRenderFactory(TableDetail)\n\ndescribe('Payment: TableDetail', () => {\n  it('renders', () => {\n    const { container, unmount } = renderComponent(mockPayment)\n\n    // styling makes this look okay\n    expect(container.querySelector('.payment')).toHaveTextContent(\n      `send\\uE9002,421.8268 XRPtorHoPwMC75KVUhBMeV3uDMybKG5JND74teh`,\n    )\n\n    unmount()\n  })\n\n  it('renders with failed partial conversion', () => {\n    const { container, unmount } = renderComponent(mockPaymentConvert)\n\n    // styling makes this look okay\n    expect(container.querySelector('.payment')).toHaveTextContent(\n      `convert_maximum1,140.00 XRPto0.00 YCN.r8HgVGenRTAiNSM5iqt9PX2D2EczFZhZrpartial_payment_allowed`,\n    )\n\n    unmount()\n  })\n\n  it('renders with destination tag', () => {\n    const { container, unmount } = renderComponent(mockPaymentDestinationTag)\n\n    // styling makes this look okay\n    expect(container.querySelector('.payment')).toHaveTextContent(\n      `send1,531.267 XRPtorHWcuuZoFvDS6gNbmHSdpb7u1hZzxvCoMt:381702`,\n    )\n\n    unmount()\n  })\n\n  it('renders with send max', () => {\n    const { container, unmount } = renderComponent(mockPaymentSendMax)\n\n    // styling makes this look okay\n    expect(container.querySelector('.payment')).toHaveTextContent(\n      `send17,366,599.150289 XRdoge.rLqUC2eCPohYvJCEBJ77eCCqVL2uEiczjAtorprcTynT68nYdKzDTefAZG9HjSHiYcnP4b:0`,\n    )\n\n    unmount()\n  })\n\n  it('renders with partial', () => {\n    const { container, unmount } = renderComponent(mockPaymentPartial)\n\n    // styling makes this look okay\n    expect(container.querySelector('.payment')).toHaveTextContent(\n      `send0.00104196 xCoin.rXCoYSUnkpygdtfpz3Df8dKQuRZjM9UFitorMQ4oGC8fasuJwfdrfknFTttDbf8cR3D2j:0partial_payment_allowed`,\n    )\n\n    unmount()\n  })\n\n  it('renders with SourceTag', () => {\n    const { container, unmount } = renderComponent(mockPaymentSourceTag)\n\n    expect(container.querySelector('.st')).toHaveTextContent(\n      'source_tag: 20648',\n    )\n\n    unmount()\n  })\n\n  it(`renders with Permissioned Domain ID`, () => {\n    const { container } = renderComponent(mockPermDomainID)\n\n    expect(container.querySelector('.domain-id')).toHaveTextContent(\n      `domain_id: D3261DF48CDA3B860ED3FA99F02138856393CD44556E028D5CB66192A18A8D02`,\n    )\n  })\n\n  it('renders with CredentialIDs', () => {\n    const { container, unmount } = renderComponent(mockPaymentCredentialIDs)\n\n    expect(container.querySelector('.credential-ids')).toBeInTheDocument()\n    expect(container.querySelector('.credential-ids .label')).toHaveTextContent(\n      'credential_ids:',\n    )\n    const credentialIds = container.querySelectorAll('.credential-id')\n    expect(credentialIds).toHaveLength(2)\n    expect(credentialIds[0]).toHaveTextContent(\n      '7B685088D546B9E8905D26206F452BB2F44D9A33C9BD9BCF280F7BA39015A955',\n    )\n    expect(credentialIds[1]).toHaveTextContent(\n      '8B685088D546B9E8905D26206F452BB2F44D9A33C9BD9BCF280F7BA39015A956',\n    )\n\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/Payment/test/mock_data/Payment.json",
    "content": "{\n  \"hash\": \"F4AD54E6FE56B53F8FB8B422C4E9636D6AD56682EA45FF3C8AFBC66EF2D82612\",\n  \"ledger_index\": 37432866,\n  \"date\": \"2018-03-23T13:34:51+00:00\",\n  \"tx\": {\n    \"TransactionType\": \"Payment\",\n    \"Flags\": 2147483648,\n    \"Sequence\": 31030,\n    \"Amount\": \"2421826800\",\n    \"Fee\": \"150000\",\n    \"SigningPubKey\": \"0287A3059E24E773CB585A77D59771E54DDABEACD9503650269BA4E3413CA35036\",\n    \"TxnSignature\": \"30450221008D56168A5794D1F87D29F83D241477710AA32027F89D68925166477529D0CD50022043E2BFEEE543AA983BA036D3BC2303A6EB13DB7BC0770FBFD9E855DB04BBADED\",\n    \"Account\": \"rNQEMJA4PsoSrZRn9J6RajAYhcDzzhf8ok\",\n    \"Destination\": \"rHoPwMC75KVUhBMeV3uDMybKG5JND74teh\"\n  },\n  \"meta\": {\n    \"TransactionIndex\": 7,\n    \"AffectedNodes\": [\n      {\n        \"CreatedNode\": {\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"62B63A85C9753AD909B67225CBCC5271C3DDED972DDB89A74BC4347D1C62B4A0\",\n          \"NewFields\": {\n            \"Sequence\": 231,\n            \"Balance\": \"2421826800\",\n            \"Account\": \"rHoPwMC75KVUhBMeV3uDMybKG5JND74teh\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"PreviousTxnLgrSeq\": 37432853,\n          \"PreviousTxnID\": \"884A9090391E30E7AD2789A20425E99192A227358DE4117D1469108DB3DFE5D7\",\n          \"LedgerIndex\": \"B8B66C89364DF501737D1AE9A5B4583E8945B8B27CB81FDAB39A50FBAF57B639\",\n          \"PreviousFields\": {\n            \"Sequence\": 31030,\n            \"Balance\": \"27121947538132\"\n          },\n          \"FinalFields\": {\n            \"Flags\": 131072,\n            \"Sequence\": 31031,\n            \"OwnerCount\": 0,\n            \"Balance\": \"27119525561332\",\n            \"Account\": \"rNQEMJA4PsoSrZRn9J6RajAYhcDzzhf8ok\"\n          }\n        }\n      }\n    ],\n    \"TransactionResult\": \"tesSUCCESS\",\n    \"delivered_amount\": \"2421826800\"\n  }\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/Payment/test/mock_data/PaymentMPT.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rsC4dnxCb66FQT4XmCUeuQ7dYeqNio4rWg\",\n    \"Amount\": {\n      \"mpt_issuance_id\": \"000003C31D321B7DDA58324DC38CDF18934FAFFFCDF69D5F\",\n      \"value\": \"100\"\n    },\n    \"DeliverMax\": {\n      \"mpt_issuance_id\": \"000003C31D321B7DDA58324DC38CDF18934FAFFFCDF69D5F\",\n      \"value\": \"100\"\n    },\n    \"Destination\": \"rw6UtpfBFaGht6SiC1HpDPNw6Yt25pKvnu\",\n    \"Fee\": \"10\",\n    \"Flags\": 2147483648,\n    \"Sequence\": 964,\n    \"SigningPubKey\": \"ED35B07F41420220332C35B9F4D1F7AF26E67EBD5AD6C9E106D0F774DA15924169\",\n    \"TransactionType\": \"Payment\",\n    \"TxnSignature\": \"2C5CB9740457222F928667DC1196060EF7E61B4E3A8824727AE63ACCFDE35ED5CBEE69E982423592DF0464C57C2C445B4271573DE7A3346630024287844F2502\",\n    \"ctid\": \"C00003C900000000\",\n    \"date\": 1727802036000\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"AssetScale\": 3,\n            \"Flags\": 34,\n            \"Issuer\": \"rsC4dnxCb66FQT4XmCUeuQ7dYeqNio4rWg\",\n            \"MPTokenMetadata\": \"7B226E616D65223A2255532054726561737572792042696C6C20546F6B656E222C2273796D626F6C223A225553544254222C22646563696D616C73223A322C22746F74616C537570706C79223A313030303030302C22697373756572223A225553205472656173757279222C22697373756544617465223A22323032342D30332D3235222C226D6174757269747944617465223A22323032352D30332D3235222C226661636556616C7565223A2231303030222C22696E74657265737452617465223A22322E35222C22696E7465726573744672657175656E6379223A22517561727465726C79222C22636F6C6C61746572616C223A22555320476F7665726E6D656E74222C226A7572697364696374696F6E223A22556E6974656420537461746573222C22726567756C61746F7279436F6D706C69616E6365223A2253454320526567756C6174696F6E73222C22736563757269747954797065223A2254726561737572792042696C6C222C2265787465726E616C5F75726C223A2268747470733A2F2F6578616D706C652E636F6D2F742D62696C6C2D746F6B656E2D6D657461646174612E6A736F6E227D\",\n            \"MaximumAmount\": \"9223372036854775807\",\n            \"OutstandingAmount\": \"100\",\n            \"OwnerNode\": \"0\",\n            \"Sequence\": 963\n          },\n          \"LedgerEntryType\": \"MPTokenIssuance\",\n          \"LedgerIndex\": \"1CFF89335B544E0D6EEC35D74C0D26FF407DC02670F1C4E35A36CC875D34B1C3\",\n          \"PreviousFields\": {\n            \"OutstandingAmount\": \"0\"\n          },\n          \"PreviousTxnID\": \"6329586F264E4A6E2224318DCFC9B5F28048D84060B78A92CFFE65840DF8D970\",\n          \"PreviousTxnLgrSeq\": 966\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rw6UtpfBFaGht6SiC1HpDPNw6Yt25pKvnu\",\n            \"Flags\": 0,\n            \"MPTAmount\": \"100\",\n            \"MPTokenIssuanceID\": \"000003C31D321B7DDA58324DC38CDF18934FAFFFCDF69D5F\",\n            \"OwnerNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"MPToken\",\n          \"LedgerIndex\": \"3BAA73912496683A414494218D3CCA33D02F80D588F80C1257C691448E00E486\",\n          \"PreviousFields\": {},\n          \"PreviousTxnID\": \"60F99C8A23C4A366D19F43EA4BD43414AD4D4B7C21D0228FB7539D1C893E4A74\",\n          \"PreviousTxnLgrSeq\": 967\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rsC4dnxCb66FQT4XmCUeuQ7dYeqNio4rWg\",\n            \"Balance\": \"99999980\",\n            \"Flags\": 0,\n            \"OwnerCount\": 1,\n            \"Sequence\": 965\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"77ECC02B8A7F16EB19A7BFBE8494E959497B4EC7734088583BD4F6B8C82878A5\",\n          \"PreviousFields\": {\n            \"Balance\": \"99999990\",\n            \"Sequence\": 964\n          },\n          \"PreviousTxnID\": \"6329586F264E4A6E2224318DCFC9B5F28048D84060B78A92CFFE65840DF8D970\",\n          \"PreviousTxnLgrSeq\": 966\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tesSUCCESS\",\n    \"delivered_amount\": {\n      \"mpt_issuance_id\": \"000003C31D321B7DDA58324DC38CDF18934FAFFFCDF69D5F\",\n      \"value\": \"100\"\n    }\n  },\n  \"hash\": \"CD9EC015E68D3027919598E0466CFEF19950D0BC688A568DF8822A8BB0AFF98F\",\n  \"ledger_index\": 11707,\n  \"date\": 1712072515000\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/Payment/test/mock_data/PaymentWithConvert.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"r9x5PHDiwuvbpYB3uvGAqEUVV5wxHayQEx\",\n    \"Amount\": {\n      \"currency\": \"YCN\",\n      \"issuer\": \"r8HgVGenRTAiNSM5iqt9PX2D2EczFZhZr\",\n      \"value\": \"1140\"\n    },\n    \"Destination\": \"r9x5PHDiwuvbpYB3uvGAqEUVV5wxHayQEx\",\n    \"Fee\": \"11\",\n    \"Flags\": 2147942400,\n    \"LastLedgerSequence\": 44987082,\n    \"Paths\": [\n      [\n        {\n          \"currency\": \"EUR\",\n          \"issuer\": \"rhub8VRN55s94qWKDv6jmDy1pUykJzF3wq\",\n          \"type\": 48,\n          \"type_hex\": \"0000000000000030\"\n        },\n        {\n          \"currency\": \"CNY\",\n          \"issuer\": \"rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y\",\n          \"type\": 48,\n          \"type_hex\": \"0000000000000030\"\n        },\n        {\n          \"currency\": \"XRP\",\n          \"type\": 16,\n          \"type_hex\": \"0000000000000010\"\n        },\n        {\n          \"currency\": \"YCN\",\n          \"issuer\": \"r8HgVGenRTAiNSM5iqt9PX2D2EczFZhZr\",\n          \"type\": 48,\n          \"type_hex\": \"0000000000000030\"\n        }\n      ],\n      [\n        {\n          \"currency\": \"CNY\",\n          \"issuer\": \"rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y\",\n          \"type\": 48,\n          \"type_hex\": \"0000000000000030\"\n        },\n        {\n          \"currency\": \"EUR\",\n          \"issuer\": \"rhub8VRN55s94qWKDv6jmDy1pUykJzF3wq\",\n          \"type\": 48,\n          \"type_hex\": \"0000000000000030\"\n        },\n        {\n          \"currency\": \"XRP\",\n          \"type\": 16,\n          \"type_hex\": \"0000000000000010\"\n        },\n        {\n          \"currency\": \"YCN\",\n          \"issuer\": \"r8HgVGenRTAiNSM5iqt9PX2D2EczFZhZr\",\n          \"type\": 48,\n          \"type_hex\": \"0000000000000030\"\n        }\n      ],\n      [\n        {\n          \"currency\": \"BTC\",\n          \"issuer\": \"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B\",\n          \"type\": 48,\n          \"type_hex\": \"0000000000000030\"\n        },\n        {\n          \"currency\": \"BTC\",\n          \"issuer\": \"rchGBxcD1A1C2tdxF6papQYZ8kjRKMYcL\",\n          \"type\": 48,\n          \"type_hex\": \"0000000000000030\"\n        },\n        {\n          \"currency\": \"XRP\",\n          \"type\": 16,\n          \"type_hex\": \"0000000000000010\"\n        },\n        {\n          \"currency\": \"YCN\",\n          \"issuer\": \"r8HgVGenRTAiNSM5iqt9PX2D2EczFZhZr\",\n          \"type\": 48,\n          \"type_hex\": \"0000000000000030\"\n        }\n      ],\n      [\n        {\n          \"currency\": \"BTC\",\n          \"issuer\": \"rchGBxcD1A1C2tdxF6papQYZ8kjRKMYcL\",\n          \"type\": 48,\n          \"type_hex\": \"0000000000000030\"\n        },\n        {\n          \"currency\": \"BTC\",\n          \"issuer\": \"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B\",\n          \"type\": 48,\n          \"type_hex\": \"0000000000000030\"\n        },\n        {\n          \"currency\": \"XRP\",\n          \"type\": 16,\n          \"type_hex\": \"0000000000000010\"\n        },\n        {\n          \"currency\": \"YCN\",\n          \"issuer\": \"r8HgVGenRTAiNSM5iqt9PX2D2EczFZhZr\",\n          \"type\": 48,\n          \"type_hex\": \"0000000000000030\"\n        }\n      ],\n      [\n        {\n          \"currency\": \"CNY\",\n          \"issuer\": \"rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y\",\n          \"type\": 48,\n          \"type_hex\": \"0000000000000030\"\n        },\n        {\n          \"currency\": \"USD\",\n          \"issuer\": \"rhub8VRN55s94qWKDv6jmDy1pUykJzF3wq\",\n          \"type\": 48,\n          \"type_hex\": \"0000000000000030\"\n        },\n        {\n          \"currency\": \"XRP\",\n          \"type\": 16,\n          \"type_hex\": \"0000000000000010\"\n        },\n        {\n          \"currency\": \"YCN\",\n          \"issuer\": \"r8HgVGenRTAiNSM5iqt9PX2D2EczFZhZr\",\n          \"type\": 48,\n          \"type_hex\": \"0000000000000030\"\n        }\n      ],\n      [\n        {\n          \"currency\": \"USD\",\n          \"issuer\": \"rhub8VRN55s94qWKDv6jmDy1pUykJzF3wq\",\n          \"type\": 48,\n          \"type_hex\": \"0000000000000030\"\n        },\n        {\n          \"currency\": \"CNY\",\n          \"issuer\": \"rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y\",\n          \"type\": 48,\n          \"type_hex\": \"0000000000000030\"\n        },\n        {\n          \"currency\": \"XRP\",\n          \"type\": 16,\n          \"type_hex\": \"0000000000000010\"\n        },\n        {\n          \"currency\": \"YCN\",\n          \"issuer\": \"r8HgVGenRTAiNSM5iqt9PX2D2EczFZhZr\",\n          \"type\": 48,\n          \"type_hex\": \"0000000000000030\"\n        }\n      ]\n    ],\n    \"SendMax\": \"1140000000\",\n    \"Sequence\": 671728,\n    \"SigningPubKey\": \"038C165E0B29398F710353498F310ACB81AE338A8C7A76433CDD0B0DA3263A32BF\",\n    \"TransactionType\": \"Payment\",\n    \"TxnSignature\": \"3045022100A51940B612A8EEDCBB35215CC43E44CFC0B006B09FF747A2C1605F491CE0228602202A92AE92DB31028E96F107352AC6E847866BDB62C1BFF079BBE0FC461A2CB090\"\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r9x5PHDiwuvbpYB3uvGAqEUVV5wxHayQEx\",\n            \"Balance\": \"1146735992\",\n            \"Flags\": 0,\n            \"OwnerCount\": 2,\n            \"Sequence\": 671729\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"A5A15466F20EFCB711175AF99121BF5B9FE450B02E630C9B73800036A537404C\",\n          \"PreviousFields\": {\n            \"Balance\": \"1146736003\",\n            \"Sequence\": 671728\n          },\n          \"PreviousTxnID\": \"EAF0DE120A76A0D389122B0AF554F02613319C12465E915109B5B561CAB178E0\",\n          \"PreviousTxnLgrSeq\": 44987079\n        }\n      }\n    ],\n    \"TransactionIndex\": 26,\n    \"TransactionResult\": \"tecPATH_DRY\"\n  },\n  \"hash\": \"DA9E41A957D5683DA87B830057E98C755BCFDD247892A7E96603A68C6ED416BA\",\n  \"ledger_index\": 44987080,\n  \"date\": \"2019-02-08T15:42:11Z\"\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/Payment/test/mock_data/PaymentWithCredentialIDs.json",
    "content": "{\n  \"hash\": \"F4AD54E6FE56B53F8FB8B422C4E9636D6AD56682EA45FF3C8AFBC66EF2D82612\",\n  \"ledger_index\": 37432866,\n  \"date\": \"2018-03-23T13:34:51+00:00\",\n  \"tx\": {\n    \"TransactionType\": \"Payment\",\n    \"Flags\": 2147483648,\n    \"Sequence\": 31030,\n    \"Amount\": \"2421826800\",\n    \"Fee\": \"150000\",\n    \"SigningPubKey\": \"0287A3059E24E773CB585A77D59771E54DDABEACD9503650269BA4E3413CA35036\",\n    \"TxnSignature\": \"30450221008D56168A5794D1F87D29F83D241477710AA32027F89D68925166477529D0CD50022043E2BFEEE543AA983BA036D3BC2303A6EB13DB7BC0770FBFD9E855DB04BBADED\",\n    \"Account\": \"rNQEMJA4PsoSrZRn9J6RajAYhcDzzhf8ok\",\n    \"Destination\": \"rHoPwMC75KVUhBMeV3uDMybKG5JND74teh\",\n    \"CredentialIDs\": [\n      \"7B685088D546B9E8905D26206F452BB2F44D9A33C9BD9BCF280F7BA39015A955\",\n      \"8B685088D546B9E8905D26206F452BB2F44D9A33C9BD9BCF280F7BA39015A956\"\n    ]\n  },\n  \"meta\": {\n    \"TransactionIndex\": 7,\n    \"AffectedNodes\": [\n      {\n        \"CreatedNode\": {\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"62B63A85C9753AD909B67225CBCC5271C3DDED972DDB89A74BC4347D1C62B4A0\",\n          \"NewFields\": {\n            \"Sequence\": 231,\n            \"Balance\": \"2421826800\",\n            \"Account\": \"rHoPwMC75KVUhBMeV3uDMybKG5JND74teh\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"PreviousTxnLgrSeq\": 37432853,\n          \"PreviousTxnID\": \"884A9090391E30E7AD2789A20425E99192A227358DE4117D1469108DB3DFE5D7\",\n          \"LedgerIndex\": \"B8B66C89364DF501737D1AE9A5B4583E8945B8B27CB81FDAB39A50FBAF57B639\",\n          \"PreviousFields\": {\n            \"Sequence\": 31030,\n            \"Balance\": \"27121947538132\"\n          },\n          \"FinalFields\": {\n            \"Flags\": 131072,\n            \"Sequence\": 31031,\n            \"OwnerCount\": 0,\n            \"Balance\": \"27119525561332\",\n            \"Account\": \"rNQEMJA4PsoSrZRn9J6RajAYhcDzzhf8ok\"\n          }\n        }\n      }\n    ],\n    \"TransactionResult\": \"tesSUCCESS\",\n    \"delivered_amount\": \"2421826800\"\n  }\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/Payment/test/mock_data/PaymentWithDestinationTag.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rDAE53VfMvftPB4ogpWGWvzkQxfht6JPxr\",\n    \"Amount\": \"1531267000\",\n    \"Destination\": \"rHWcuuZoFvDS6gNbmHSdpb7u1hZzxvCoMt\",\n    \"DestinationTag\": 381702,\n    \"Fee\": \"3000\",\n    \"Flags\": 0,\n    \"LastLedgerSequence\": 74682640,\n    \"Sequence\": 69408381,\n    \"SigningPubKey\": \"036085B9E6A6C3628E94FB87914AD5CBABB1DD5FA510D50D742919DC5684A43900\",\n    \"TransactionType\": \"Payment\",\n    \"TxnSignature\": \"304402207B3A985AF751A7AE4867721C5769C995EDC375A63A72DF079B9C9CC6C3410E1102200270DB15C2260EB7A1005DD736C6526FE4E41C138455F70DB0E97834685ACD56\",\n    \"date\": \"2022-09-27T19:03:12Z\",\n    \"warnings\": [\n      {\n        \"id\": 1004,\n        \"message\": \"This is a reporting server.  The default behavior of a reporting server is to only return validated data. If you are looking for not yet validated data, include \\\"ledger_index : current\\\" in your request, which will cause this server to forward the request to a p2p node. If the forward is successful the response will include \\\"forwarded\\\" : \\\"true\\\"\"\n      }\n    ]\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rHWcuuZoFvDS6gNbmHSdpb7u1hZzxvCoMt\",\n            \"Balance\": \"15510910711950\",\n            \"Flags\": 0,\n            \"OwnerCount\": 0,\n            \"Sequence\": 506441\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"61DD66AC4A3CAEBEA666DA86741503C5A9C0A68F54EEFFC8E32A123814B414B5\",\n          \"PreviousFields\": {\n            \"Balance\": \"15509379444950\"\n          },\n          \"PreviousTxnID\": \"18A1718BFE41D672ED6FD4575FAA0EDC4D6B0F0A6957146498E8142A716EBD1D\",\n          \"PreviousTxnLgrSeq\": 74682577\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rDAE53VfMvftPB4ogpWGWvzkQxfht6JPxr\",\n            \"Balance\": \"242300673818330\",\n            \"Flags\": 0,\n            \"OwnerCount\": 0,\n            \"Sequence\": 69408382\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"9840CEB0F4EC2594DD96CC4CE410D5F3F73B674EFF6D286CA25B47CF2975E886\",\n          \"PreviousFields\": {\n            \"Balance\": \"242302205088330\",\n            \"Sequence\": 69408381\n          },\n          \"PreviousTxnID\": \"012B564766F874CD627FE50F5A82EE4899D33FECC8FF27D0BC2C10DA06EC9930\",\n          \"PreviousTxnLgrSeq\": 74682623\n        }\n      }\n    ],\n    \"TransactionIndex\": 16,\n    \"TransactionResult\": \"tesSUCCESS\",\n    \"delivered_amount\": \"1531267000\"\n  },\n  \"hash\": \"589640406AC52E6092623A3124900877F7B63AB250E2ED97888B8CA364C3AD8D\",\n  \"ledger_index\": 74682627,\n  \"date\": \"2022-09-27T19:03:12Z\"\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/Payment/test/mock_data/PaymentWithPartial.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rGTurN94Nn3RkJGSqy9MwmQCLpXZkELbnq\",\n    \"Amount\": {\n      \"currency\": \"78436F696E000000000000000000000000000000\",\n      \"issuer\": \"rXCoYSUnkpygdtfpz3Df8dKQuRZjM9UFi\",\n      \"value\": \"0.001043\"\n    },\n    \"Destination\": \"rMQ4oGC8fasuJwfdrfknFTttDbf8cR3D2j\",\n    \"DestinationTag\": 0,\n    \"Fee\": \"20\",\n    \"Flags\": 2147614720,\n    \"Memos\": [\n      {\n        \"Memo\": {\n          \"MemoData\": \"476F6F64206A6F622120596F7520736F6C766564207468652070757A7A6C652E203A2920596F752063616E277420757365207468652066617563657420666F7220746865206E65787420323420686F757273\",\n          \"MemoFormat\": \"4E6F7465\"\n        }\n      }\n    ],\n    \"Sequence\": 69762637,\n    \"SigningPubKey\": \"0290358266C61E825B8B9B2CE5593C7E0167185EE8B29B06D972311541E3B98624\",\n    \"TransactionType\": \"Payment\",\n    \"TxnSignature\": \"304502210082011CDF57A70E7F0D66B35E65D06112D069ADD24C4030BD0FA6635ACCAFFB4D022054EEC7E8B26F2EC8CE2D5CF04D9E593275F9CECBADB06B7E67ACBB661AAF79E3\",\n    \"date\": \"2022-09-27T19:05:42Z\",\n    \"warnings\": [\n      {\n        \"id\": 1004,\n        \"message\": \"This is a reporting server.  The default behavior of a reporting server is to only return validated data. If you are looking for not yet validated data, include \\\"ledger_index : current\\\" in your request, which will cause this server to forward the request to a p2p node. If the forward is successful the response will include \\\"forwarded\\\" : \\\"true\\\"\"\n      }\n    ]\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"78436F696E000000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-1.043812187812185\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"78436F696E000000000000000000000000000000\",\n              \"issuer\": \"rMQ4oGC8fasuJwfdrfknFTttDbf8cR3D2j\",\n              \"value\": \"10000000\"\n            },\n            \"HighNode\": \"1\",\n            \"LowLimit\": {\n              \"currency\": \"78436F696E000000000000000000000000000000\",\n              \"issuer\": \"rXCoYSUnkpygdtfpz3Df8dKQuRZjM9UFi\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"b45\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"21374E660A219F160C89993D917372A1C48890E8583E606F68E507B2228B6570\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"78436F696E000000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-1.042770229770227\"\n            }\n          },\n          \"PreviousTxnID\": \"FDFC47880EC5EB93E8C237583C6016F50AC06112F418664FF2EE651FB0B5C1D6\",\n          \"PreviousTxnLgrSeq\": 74659674\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"78436F696E000000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-511674.8896548626\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"78436F696E000000000000000000000000000000\",\n              \"issuer\": \"rGTurN94Nn3RkJGSqy9MwmQCLpXZkELbnq\",\n              \"value\": \"9989807.154550577\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"78436F696E000000000000000000000000000000\",\n              \"issuer\": \"rXCoYSUnkpygdtfpz3Df8dKQuRZjM9UFi\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"554\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"3EEAB6A08D18FF8A91210D0AA1C7D3F9BAF2EC32F649A83C10D87B02066100AD\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"78436F696E000000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-511674.8906978626\"\n            }\n          },\n          \"PreviousTxnID\": \"A6F6879F11E1815E9D173E8B166D078F555E636E1468BCA6B1783700C29745F5\",\n          \"PreviousTxnLgrSeq\": 74682619\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rGTurN94Nn3RkJGSqy9MwmQCLpXZkELbnq\",\n            \"Balance\": \"61172780\",\n            \"Flags\": 0,\n            \"OwnerCount\": 1,\n            \"Sequence\": 69762638\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"9D68BEA42D63DF3FBA14967604AF362A0FFC01A1E7C4BEA63EF8C136EDBC186B\",\n          \"PreviousFields\": {\n            \"Balance\": \"61172800\",\n            \"Sequence\": 69762637\n          },\n          \"PreviousTxnID\": \"A6F6879F11E1815E9D173E8B166D078F555E636E1468BCA6B1783700C29745F5\",\n          \"PreviousTxnLgrSeq\": 74682619\n        }\n      }\n    ],\n    \"DeliveredAmount\": {\n      \"currency\": \"78436F696E000000000000000000000000000000\",\n      \"issuer\": \"rXCoYSUnkpygdtfpz3Df8dKQuRZjM9UFi\",\n      \"value\": \"0.001041958041958041\"\n    },\n    \"TransactionIndex\": 28,\n    \"TransactionResult\": \"tesSUCCESS\",\n    \"delivered_amount\": {\n      \"currency\": \"78436F696E000000000000000000000000000000\",\n      \"issuer\": \"rXCoYSUnkpygdtfpz3Df8dKQuRZjM9UFi\",\n      \"value\": \"0.001041958041958041\"\n    }\n  },\n  \"hash\": \"439B1D82C4739E4B3DD1FE440AE0EBE62E30C64FA7FF7DC0423B95CAF2FEB384\",\n  \"ledger_index\": 74682666,\n  \"date\": \"2022-09-27T19:05:42Z\"\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/Payment/test/mock_data/PaymentWithPermDomainID.json",
    "content": "{\n  \"close_time_iso\": \"2025-07-17T02:25:45Z\",\n  \"ctid\": \"C0000DB400000000\",\n  \"hash\": \"777CC3B0ED9A1A673C420AD594FF18888697F41850B5B8BE41E79A694DF3DD92\",\n  \"ledger_hash\": \"E52B5E1FA25C0AE68C48C9BB8F675EAD32D0529B308F9A9679327F377A9DB975\",\n  \"ledger_index\": 3508,\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rH6ydZEEw1W5ZDqkvAk1bke4ZowPruoqyq\",\n            \"Balance\": \"399997040\",\n            \"Flags\": 0,\n            \"OwnerCount\": 2,\n            \"Sequence\": 3498\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"81010CF8EF0F2BD3265FE224AAED1255CBBDFAE5214AC279302B279CDCBDA142\",\n          \"PreviousFields\": {\n            \"Balance\": \"399998280\",\n            \"Sequence\": 3497\n          },\n          \"PreviousTxnID\": \"9B43B469D76BBD06731F6F151AD97A441D76F6A7361BE122B8FE1D03404F686D\",\n          \"PreviousTxnLgrSeq\": 3507\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rpuLuDBt44msP6f7oppAVsKJoUMaMAvnrF\",\n            \"Balance\": \"400001280\",\n            \"Flags\": 0,\n            \"OwnerCount\": 2,\n            \"Sequence\": 3498\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"D81C23D4E6CF1942E42264DA67EDF98CB98363104D0E06E152E7A745121DF5AE\",\n          \"PreviousFields\": {\n            \"Balance\": \"400000280\"\n          },\n          \"PreviousTxnID\": \"9B43B469D76BBD06731F6F151AD97A441D76F6A7361BE122B8FE1D03404F686D\",\n          \"PreviousTxnLgrSeq\": 3507\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tesSUCCESS\",\n    \"delivered_amount\": \"1000\"\n  },\n  \"tx\": {\n    \"Account\": \"rH6ydZEEw1W5ZDqkvAk1bke4ZowPruoqyq\",\n    \"Amount\": \"1000\",\n    \"Destination\": \"rpuLuDBt44msP6f7oppAVsKJoUMaMAvnrF\",\n    \"DomainID\": \"D3261DF48CDA3B860ED3FA99F02138856393CD44556E028D5CB66192A18A8D02\",\n    \"Fee\": \"240\",\n    \"Flags\": 0,\n    \"LastLedgerSequence\": 3527,\n    \"Sequence\": 3497,\n    \"SigningPubKey\": \"EDAD68C65420D3738D936A3542D8DB8232670F9F38F6649B158F0AD6590FC2B403\",\n    \"TransactionType\": \"Payment\",\n    \"TxnSignature\": \"1F7CC0297BCF0D1DA60C8C0AD53F2D78E493C179E51E0B59B7F9C74B9CA686C672B91C2BB45D530FB06EA906AF6E8D9EB67C28C11C0C2D8EB9503A198AA8B80B\",\n    \"ctid\": \"C0000DB400000000\",\n    \"date\": 806034345,\n    \"ledger_index\": 3508\n  },\n  \"validated\": true\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/Payment/test/mock_data/PaymentWithSendMax.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"r3RaNVLvWjqqtFAawC6jbRhgKyFH7HvRS8\",\n    \"Amount\": {\n      \"currency\": \"5852646F67650000000000000000000000000000\",\n      \"issuer\": \"rLqUC2eCPohYvJCEBJ77eCCqVL2uEiczjA\",\n      \"value\": \"17366599.150289\"\n    },\n    \"Destination\": \"rprcTynT68nYdKzDTefAZG9HjSHiYcnP4b\",\n    \"DestinationTag\": 0,\n    \"Fee\": \"40000\",\n    \"Flags\": 2147483648,\n    \"LastLedgerSequence\": 74682649,\n    \"SendMax\": {\n      \"currency\": \"5852646F67650000000000000000000000000000\",\n      \"issuer\": \"rLqUC2eCPohYvJCEBJ77eCCqVL2uEiczjA\",\n      \"value\": \"17366599.150289\"\n    },\n    \"Sequence\": 63622107,\n    \"SigningPubKey\": \"EDEBA43507DFB9789CB377D547561967AE9E6B393C011F0A5A45D2CD6D644CDC3C\",\n    \"TransactionType\": \"Payment\",\n    \"TxnSignature\": \"B938F6BE36F988D5CA634A6180ED25114640F9AABEE6E267A232B7DB8D1C3C1202C13D02190DA5FC1B4B41AA64C357819C1A9B9017D3481A841EABFAAA52BF0C\",\n    \"date\": \"2022-09-27T19:03:30Z\",\n    \"warnings\": [\n      {\n        \"id\": 1004,\n        \"message\": \"This is a reporting server.  The default behavior of a reporting server is to only return validated data. If you are looking for not yet validated data, include \\\"ledger_index : current\\\" in your request, which will cause this server to forward the request to a p2p node. If the forward is successful the response will include \\\"forwarded\\\" : \\\"true\\\"\"\n      }\n    ]\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r3RaNVLvWjqqtFAawC6jbRhgKyFH7HvRS8\",\n            \"Balance\": \"10107960000\",\n            \"Flags\": 655360,\n            \"OwnerCount\": 49,\n            \"Sequence\": 63622108\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"32B7CD6E9A603D127BE7EB6946441BA098C44E4CF29243DDD6DC5465D7FAA1C4\",\n          \"PreviousFields\": {\n            \"Balance\": \"10108000000\",\n            \"Sequence\": 63622107\n          },\n          \"PreviousTxnID\": \"065F6D748CDC7D7552E3BC3AE704E16F5F40B3B85FE8212E1EB04A92942511F9\",\n          \"PreviousTxnLgrSeq\": 74682551\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852646F67650000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"17366599.150289\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852646F67650000000000000000000000000000\",\n              \"issuer\": \"rLqUC2eCPohYvJCEBJ77eCCqVL2uEiczjA\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"956\",\n            \"LowLimit\": {\n              \"currency\": \"5852646F67650000000000000000000000000000\",\n              \"issuer\": \"rprcTynT68nYdKzDTefAZG9HjSHiYcnP4b\",\n              \"value\": \"99594110060.12813\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"8A176A04AB432E61FC9619A0F6705A1139F167C11193CE4E9243EBFAB6974B46\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852646F67650000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            }\n          },\n          \"PreviousTxnID\": \"95801B9E6A733C8CB7F1E23D7BA53D87D4E12195448B0933B29FB734938CD001\",\n          \"PreviousTxnLgrSeq\": 74682072\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"5852646F67650000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"18159637014.6892\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"5852646F67650000000000000000000000000000\",\n              \"issuer\": \"rLqUC2eCPohYvJCEBJ77eCCqVL2uEiczjA\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"539\",\n            \"LowLimit\": {\n              \"currency\": \"5852646F67650000000000000000000000000000\",\n              \"issuer\": \"r3RaNVLvWjqqtFAawC6jbRhgKyFH7HvRS8\",\n              \"value\": \"99999950000\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"CF9289B3AA47DAE4400EFBCF511284C3A3899F26F61D385DBCC69BBBFA0D2DCE\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"5852646F67650000000000000000000000000000\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"18177003613.83948\"\n            }\n          },\n          \"PreviousTxnID\": \"AFD4338B87609F444367B82F188C6D9ED5E65D1245140F61250CE67CB01F50E2\",\n          \"PreviousTxnLgrSeq\": 74682083\n        }\n      }\n    ],\n    \"TransactionIndex\": 31,\n    \"TransactionResult\": \"tesSUCCESS\",\n    \"delivered_amount\": {\n      \"currency\": \"5852646F67650000000000000000000000000000\",\n      \"issuer\": \"rLqUC2eCPohYvJCEBJ77eCCqVL2uEiczjA\",\n      \"value\": \"17366599.150289\"\n    }\n  },\n  \"hash\": \"AABF5991C4540CB1DF7D4F5DC8FEA8AC1F2DB4ECB7BFEBC96B8752CECF482325\",\n  \"ledger_index\": 74682631,\n  \"date\": \"2022-09-27T19:03:30Z\"\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/Payment/test/mock_data/PaymentWithSourceTag.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rAPERVgXZavGgiGv6xBgtiZurirW2yAmY\",\n    \"Amount\": \"7022\",\n    \"Destination\": \"rEb8TK3gBgk5auZkwc6sHnwrGVJH8DuaLh\",\n    \"DestinationTag\": 412453880,\n    \"Fee\": \"12\",\n    \"Flags\": 2147483648,\n    \"LastLedgerSequence\": 74707042,\n    \"Sequence\": 6902959,\n    \"SigningPubKey\": \"03D0F8AD5451AF33C55C20FED9A9C70E887958CA9A224CEB3413FED4FF5280DE3D\",\n    \"SourceTag\": 20648,\n    \"TransactionType\": \"Payment\",\n    \"TxnSignature\": \"30440220613E6F791432AE3F770B329B095D012A3803B8B1A863F9BBF26667AB6F528BCE02202ADA66E48C5406910EAE8FD69BC0D0DD99445B90491CC10D00570D79DF156122\",\n    \"date\": \"2022-09-28T21:09:21Z\"\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rAPERVgXZavGgiGv6xBgtiZurirW2yAmY\",\n            \"Balance\": \"200406835\",\n            \"Flags\": 0,\n            \"MessageKey\": \"020000000000000000000000004A68BF6B449628C7307522C4ED724B54892EAF6B\",\n            \"OwnerCount\": 0,\n            \"Sequence\": 6902960\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"13BB764C1AF64C2C906232D832B7D5943BFCB2935AE40BAFAD91A1722FD74839\",\n          \"PreviousFields\": {\n            \"Balance\": \"200413869\",\n            \"Sequence\": 6902959\n          },\n          \"PreviousTxnID\": \"5381FDC5BDD3BCD0E7A5308935FB17C445C89698E4EE7A5F6FF2206FD3B0911E\",\n          \"PreviousTxnLgrSeq\": 74707022\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rEb8TK3gBgk5auZkwc6sHnwrGVJH8DuaLh\",\n            \"Balance\": \"2141312206\",\n            \"Flags\": 131072,\n            \"OwnerCount\": 0,\n            \"Sequence\": 460789\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"E50C9EE857E177CE38071B8930F66053C9C86DF9B8ADEDA632CB9DFF50EC0033\",\n          \"PreviousFields\": {\n            \"Balance\": \"2141305184\"\n          },\n          \"PreviousTxnID\": \"D06049F6D65CB38E96D7592AF33313C03BB50B9DF43E7E206C488D87DBA83F68\",\n          \"PreviousTxnLgrSeq\": 74707038\n        }\n      }\n    ],\n    \"TransactionIndex\": 40,\n    \"TransactionResult\": \"tesSUCCESS\",\n    \"delivered_amount\": \"7022\"\n  },\n  \"hash\": \"6E0EC20AE77ED25731B21B5B0B8FF7EA36605CBAA9C7D77725B6EC4D43E5C009\",\n  \"ledger_index\": 74707040,\n  \"date\": \"2022-09-28T21:09:21Z\"\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/Payment/types.ts",
    "content": "import { ExplorerAmount } from '../../../types'\n\nexport interface PaymentInstructions {\n  partial: boolean\n  amount: ExplorerAmount\n  max?: ExplorerAmount\n  convert?: ExplorerAmount\n  destination: string\n  sourceTag?: number\n  domainID?: string\n  credentialIDs?: string[]\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/PaymentChannelClaim/Description.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport type { PaymentChannelClaim } from 'xrpl'\nimport { findNode, normalizeAmount } from '../../../transactionUtils'\nimport { Account } from '../../Account'\nimport { TransactionDescriptionProps } from '../types'\nimport { useLanguage } from '../../../hooks'\n\nexport const Description = ({\n  data,\n}: TransactionDescriptionProps<PaymentChannelClaim>) => {\n  const { t } = useTranslation()\n  const language = useLanguage()\n  const deleted = findNode(data.meta, 'DeletedNode', 'PayChannel')\n  const modified = findNode(data.meta, 'ModifiedNode', 'PayChannel')\n  const node = deleted || modified\n  const change =\n    node && node.PreviousFields && node.PreviousFields.Balance\n      ? node.FinalFields.Balance - node.PreviousFields.Balance\n      : null\n\n  return (\n    <>\n      <div data-testid=\"account-line\">\n        {t('transaction_initiated_by')} <Account account={data.tx.Account} />\n      </div>\n      <div data-testid=\"channel-line\">\n        {t('update_payment_channel')}{' '}\n        <span className=\"channel\">{data.tx.Channel}</span>\n      </div>\n      {data.tx.Balance && (\n        <div data-testid=\"balance-line\">\n          {t('the_channel_balance_is')}\n          <b>\n            {' '}\n            {normalizeAmount(data.tx.Balance, language)}\n            <small>XRP</small>\n          </b>\n          {change && (\n            <span>\n              {' ('}\n              {t('increased_by')}\n              <b>\n                {' '}\n                {normalizeAmount(change, language)}\n                <small>XRP</small>\n              </b>\n              )\n            </span>\n          )}\n        </div>\n      )}\n      {deleted && (\n        <div data-testid=\"closed-line\">\n          {t('payment_channel_closed_description')}\n        </div>\n      )}\n    </>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/PaymentChannelClaim/Simple.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { Account } from '../../Account'\nimport { SimpleRow } from '../SimpleRow'\nimport { Amount } from '../../Amount'\nimport { TransactionSimpleProps } from '../types'\nimport { PaymentChannelClaimInstructions } from './types'\nimport { CredentialIDs } from '../CredentialIDs'\n\nexport const Simple = ({\n  data,\n}: TransactionSimpleProps<PaymentChannelClaimInstructions>) => {\n  const { t } = useTranslation()\n  const {\n    channelAmount,\n    claimed,\n    totalClaimed,\n    source = '',\n    destination = '',\n    channel,\n    renew,\n    close,\n    deleted,\n    credentialIDs,\n  } = data.instructions\n  const dParts = destination.split(':')\n  const sParts = source.split(':')\n\n  return (\n    <>\n      {channelAmount && (\n        <SimpleRow label={t('channel_amount')} data-testid=\"amount\">\n          <Amount value={channelAmount} />\n        </SimpleRow>\n      )}\n      {claimed && (\n        <SimpleRow label={t('amount_claimed')} data-testid=\"claimed\">\n          <Amount value={claimed} />\n        </SimpleRow>\n      )}\n      {totalClaimed && (\n        <SimpleRow label={t('total_claimed')} data-testid=\"total\">\n          <Amount value={totalClaimed} />\n        </SimpleRow>\n      )}\n      {source && (\n        <SimpleRow label={t('source')} data-testid=\"source\">\n          <Account account={sParts[0]} />\n          {sParts[1] && <span className=\"dt\">:{sParts[1]}</span>}\n        </SimpleRow>\n      )}\n      {destination && (\n        <SimpleRow label={t('destination')} data-testid=\"destination\">\n          <Account account={dParts[0]} />\n          {dParts[1] && <span className=\"dt\">:{dParts[1]}</span>}\n        </SimpleRow>\n      )}\n      {channel && (\n        <SimpleRow label={t('channel_id')} className=\"channel\">\n          {channel}\n        </SimpleRow>\n      )}\n      {renew && (\n        <SimpleRow label=\"\" className=\"flag\" data-testid=\"renew\">\n          {t('renew_channel')}\n        </SimpleRow>\n      )}\n      {close && (\n        <SimpleRow label=\"\" className=\"flag\" data-testid=\"close-request\">\n          {t('close_request')}\n        </SimpleRow>\n      )}\n      {deleted && (\n        <SimpleRow label=\"\" className=\"closed\" data-testid=\"closed\">\n          {t('payment_channel_closed')}\n        </SimpleRow>\n      )}\n      {credentialIDs && credentialIDs.length > 0 && (\n        <CredentialIDs credentialIDs={credentialIDs} />\n      )}\n    </>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/PaymentChannelClaim/TableDetail.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { Amount } from '../../Amount'\nimport { TransactionTableDetailProps } from '../types'\nimport { PaymentChannelClaimInstructions } from './types'\nimport { Account } from '../../Account'\n\nexport const TableDetail = ({\n  instructions,\n}: TransactionTableDetailProps<PaymentChannelClaimInstructions>) => {\n  const { t } = useTranslation()\n  const {\n    source,\n    destination,\n    claimed,\n    channelAmount,\n    remaining,\n    renew,\n    close,\n    deleted,\n  } = instructions\n\n  return (\n    <div className=\"paymentChannelClaim\">\n      {source && (\n        <div data-testid=\"source\">\n          <span className=\"label\">{t('source')}</span>\n          <span className=\"account\">\n            <Account account={source} />\n          </span>\n        </div>\n      )}\n      {destination && (\n        <div data-testid=\"destination\">\n          <span className=\"label\">{t('destination')}</span>\n          <span className=\"account\">\n            <Account account={destination} />\n          </span>\n        </div>\n      )}\n      {claimed && (\n        <div data-testid=\"claimed\">\n          <span className=\"label\">{t('claimed')}</span>\n          <Amount value={claimed} />\n          {remaining && channelAmount && (\n            <>\n              {' '}\n              (<Amount value={remaining} /> <span>{t('out_of')}</span>{' '}\n              <Amount value={channelAmount} /> {t('remaining')})\n            </>\n          )}\n        </div>\n      )}\n      {channelAmount && !claimed && (\n        <div data-testid=\"channel-amount\">\n          <span className=\"label\">{t('channel_amount')}</span>\n          <Amount value={channelAmount} />\n        </div>\n      )}\n      {renew && (\n        <div className=\"flag\" data-testid=\"renew\">\n          {t('renew_channel')}\n        </div>\n      )}\n      {close && (\n        <div className=\"flag\" data-testid=\"close-request\">\n          {t('close_request')}\n        </div>\n      )}\n      {deleted && (\n        <div className=\"closed\" data-testid=\"closed\">\n          {t('payment_channel_closed')}\n        </div>\n      )}\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/PaymentChannelClaim/index.ts",
    "content": "import {\n  TransactionAction,\n  TransactionCategory,\n  TransactionMapping,\n} from '../types'\n\nimport { Simple } from './Simple'\nimport { parser } from './parser'\nimport { TableDetail } from './TableDetail'\nimport { Description } from './Description'\n\nexport const PaymentChannelClaimTransaction: TransactionMapping = {\n  Description,\n  Simple,\n  TableDetail,\n  action: TransactionAction.FINISH,\n  category: TransactionCategory.PAYMENT,\n  parser,\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/PaymentChannelClaim/parser.ts",
    "content": "import type { PaymentChannelClaim, TransactionMetadata } from 'xrpl'\nimport { PaymentChannelClaimInstructions } from './types'\nimport { formatAmount } from '../../../../../rippled/lib/txSummary/formatAmount'\nimport { findNode } from '../../../transactionUtils'\n\nconst hasRenew = (flags: number): boolean => !!(0x00010000 & flags)\nconst hasClose = (flags: number) => !!(0x00020000 & flags)\n\nconst getDetails = (node: any) => {\n  const st = node.FinalFields.SourceTag ? `:${node.FinalFields.SourceTag}` : ''\n  const dt = node.FinalFields.DestinationTag\n    ? `:${node.FinalFields.DestinationTag}`\n    : ''\n  return {\n    source: `${node.FinalFields.Account}${st}`,\n    destination: `${node.FinalFields.Destination}${dt}`,\n    channel: node.LedgerIndex,\n  }\n}\n\nexport const parser = (\n  tx: PaymentChannelClaim,\n  meta: TransactionMetadata,\n): PaymentChannelClaimInstructions => {\n  let node = findNode(meta, 'ModifiedNode', 'PayChannel')\n  const data: PaymentChannelClaimInstructions = {\n    channel: tx.Channel,\n    totalClaimed: tx.Balance ? formatAmount(tx.Balance) : undefined,\n    renew: hasRenew(typeof tx.Flags === 'number' ? tx.Flags : 0) || undefined,\n    close: hasClose(typeof tx.Flags === 'number' ? tx.Flags : 0) || undefined,\n    credentialIDs: (tx as any).CredentialIDs, // Cast to any to include CredentialIDs\n  }\n\n  if (node) {\n    const details = getDetails(node)\n    const amount = node.FinalFields.Amount\n    const total = node.FinalFields.Balance\n    const claimed = node.PreviousFields.Balance\n      ? total - node.PreviousFields.Balance\n      : null\n    const remaining = amount - total\n\n    return Object.assign(data, details, {\n      channelAmount: formatAmount(amount),\n      claimed: claimed ? formatAmount(claimed) : undefined,\n      remaining: formatAmount(remaining),\n    })\n  }\n\n  node = findNode(meta, 'DeletedNode', 'PayChannel')\n  if (node) {\n    const details = getDetails(node)\n    const returned = node.FinalFields.Amount - node.FinalFields.Balance\n\n    return Object.assign(data, details, {\n      channelAmount: formatAmount(node.FinalFields.Amount),\n      totalClaimed: formatAmount(node.FinalFields.Balance),\n      returned: returned ? formatAmount(returned) : undefined,\n      deleted: true,\n    })\n  }\n\n  return data\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/PaymentChannelClaim/test/PaymentChannelClaimDescription.test.tsx",
    "content": "import i18n from '../../../../../../i18n/testConfigEnglish'\n\nimport { createDescriptionRenderFactory } from '../../test/createWrapperFactory'\nimport mockPaymentChannelClaim from './mock_data/PaymentChannelClaim.json'\nimport mockPaymentChannelClaimClosed from './mock_data/PaymentChannelClaimClosed.json'\nimport mockPaymentChannelClaimCloseDenied from './mock_data/PaymentChannelClaimCloseDenied.json'\nimport mockPaymentChannelClaimWithDestinationTag from './mock_data/PaymentChannelClaimWithDestinationTag.json'\nimport { Description } from '../Description'\n\nconst renderComponent = createDescriptionRenderFactory(Description, i18n)\n\ndescribe('PaymentChannelClaim: Description', () => {\n  it('renders a claim', () => {\n    const { container, unmount } = renderComponent(mockPaymentChannelClaim)\n    expect(\n      container.querySelector('[data-testid=\"account-line\"]'),\n    ).toHaveTextContent(\n      `The transaction was initiated by rK6g2UYc4GpQH8DYdPG7wywyQbxkJpQTTN`,\n    )\n    expect(\n      container.querySelector('[data-testid=\"channel-line\"]'),\n    ).toHaveTextContent(\n      `It will update the payment channel 50107651E7163E294CE0EAD8A20BF7CC046304480FCC9C74A49FFAB3F46FB98E`,\n    )\n    expect(\n      container.querySelector('[data-testid=\"balance-line\"]'),\n    ).toHaveTextContent(\n      `The channel balance claimed is \\uE90049.65716XRP (increased by \\uE9000.01XRP)`,\n    )\n    expect(\n      container.querySelector('[data-testid=\"closed-line\"]'),\n    ).not.toBeInTheDocument()\n    unmount()\n  })\n\n  it('renders tx with channel being closed', () => {\n    const { container, unmount } = renderComponent(\n      mockPaymentChannelClaimClosed,\n    )\n    expect(\n      container.querySelector('[data-testid=\"account-line\"]'),\n    ).toHaveTextContent(\n      `The transaction was initiated by rH11fDGhbVH5NVXNXkGAMTmfWhUHjCtA3B`,\n    )\n    expect(\n      container.querySelector('[data-testid=\"channel-line\"]'),\n    ).toHaveTextContent(\n      `It will update the payment channel 3BDB4F92432BCEB2385D3BAA60E8AAEC9B552890A240AEE4AA9E88C9E6C517E8`,\n    )\n    expect(\n      container.querySelector('[data-testid=\"balance-line\"]'),\n    ).not.toBeInTheDocument()\n    expect(\n      container.querySelector('[data-testid=\"closed-line\"]'),\n    ).toHaveTextContent(\n      `The payment channel will be closed, any remaining balance will be returned to the source account`,\n    )\n    unmount()\n  })\n\n  it('renders tx requesting channel be closed but not closing it', () => {\n    const { container, unmount } = renderComponent(\n      mockPaymentChannelClaimCloseDenied,\n    )\n    expect(\n      container.querySelector('[data-testid=\"account-line\"]'),\n    ).toHaveTextContent(\n      `The transaction was initiated by rH11fDGhbVH5NVXNXkGAMTmfWhUHjCtA3B`,\n    )\n    expect(\n      container.querySelector('[data-testid=\"channel-line\"]'),\n    ).toHaveTextContent(\n      `It will update the payment channel 3BDB4F92432BCEB2385D3BAA60E8AAEC9B552890A240AEE4AA9E88C9E6C517E8`,\n    )\n    expect(\n      container.querySelector('[data-testid=\"balance-line\"]'),\n    ).not.toBeInTheDocument()\n    expect(\n      container.querySelector('[data-testid=\"closed-line\"]'),\n    ).not.toBeInTheDocument()\n    unmount()\n  })\n\n  it('renders tx with destination tag', () => {\n    const { container, unmount } = renderComponent(\n      mockPaymentChannelClaimWithDestinationTag,\n    )\n    expect(\n      container.querySelector('[data-testid=\"account-line\"]'),\n    ).toHaveTextContent(\n      `The transaction was initiated by rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn`,\n    )\n    expect(\n      container.querySelector('[data-testid=\"channel-line\"]'),\n    ).toHaveTextContent(\n      `It will update the payment channel 5DB01B7FFED6B67E6B0414DED11E051D2EE2B7619CE0EAA6286D67A3A4D5BDB3`,\n    )\n    expect(\n      container.querySelector('[data-testid=\"balance-line\"]'),\n    ).toHaveTextContent(\n      `The channel balance claimed is \\uE9001.00XRP (increased by \\uE9001.00XRP)`,\n    )\n    expect(\n      container.querySelector('[data-testid=\"closed-line\"]'),\n    ).not.toBeInTheDocument()\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/PaymentChannelClaim/test/PaymentChannelClaimSimple.test.tsx",
    "content": "import i18n from '../../../../../../i18n/testConfigEnglish'\n\nimport { createSimpleRenderFactory } from '../../test/createWrapperFactory'\nimport { Simple } from '../Simple'\nimport mockPaymentChannelClaim from './mock_data/PaymentChannelClaim.json'\nimport mockPaymentChannelClaimClosed from './mock_data/PaymentChannelClaimClosed.json'\nimport mockPaymentChannelClaimCloseDenied from './mock_data/PaymentChannelClaimCloseDenied.json'\nimport mockPaymentChannelClaimWithDestinationTag from './mock_data/PaymentChannelClaimWithDestinationTag.json'\nimport mockPaymentChannelClaimWithCredentialIDs from './mock_data/PaymentChannelClaimWithCredentialIDs.json'\nimport {\n  expectSimpleRowLabel,\n  expectSimpleRowNotToExist,\n  expectSimpleRowText,\n} from '../../test'\n\nconst renderComponent = createSimpleRenderFactory(Simple, i18n)\n\ndescribe('PaymentChannelClaim: Simple', () => {\n  it('renders a claim', () => {\n    const { container, unmount } = renderComponent(mockPaymentChannelClaim)\n    expectSimpleRowLabel(container, 'amount', 'channel amount')\n    expectSimpleRowText(container, 'amount', '\\uE90070.00 XRP')\n    expectSimpleRowLabel(container, 'claimed', 'amount claimed')\n    expectSimpleRowText(container, 'claimed', '\\uE9000.01 XRP')\n    expectSimpleRowLabel(container, 'total', 'total claimed')\n    expectSimpleRowText(container, 'total', '\\uE90049.65716 XRP')\n    expectSimpleRowLabel(container, 'source', 'source')\n    expectSimpleRowText(\n      container,\n      'source',\n      'rnNzy3iPc7gPEAJbAdXwxY1UTBamBqTYhR:1002539517',\n    )\n    expectSimpleRowLabel(container, 'destination', 'destination')\n    expectSimpleRowText(\n      container,\n      'destination',\n      'rK6g2UYc4GpQH8DYdPG7wywyQbxkJpQTTN',\n    )\n    expectSimpleRowLabel(container, '.channel', 'Channel ID')\n    expectSimpleRowText(\n      container,\n      '.channel',\n      '50107651E7163E294CE0EAD8A20BF7CC046304480FCC9C74A49FFAB3F46FB98E',\n    )\n    expectSimpleRowNotToExist(container, 'renew')\n    expectSimpleRowNotToExist(container, 'close-request')\n    expectSimpleRowNotToExist(container, 'closed')\n    unmount()\n  })\n\n  it('renders tx with channel being closed', () => {\n    const { container, unmount } = renderComponent(\n      mockPaymentChannelClaimClosed,\n    )\n    expectSimpleRowText(container, 'amount', '\\uE90010.00 XRP')\n    expectSimpleRowNotToExist(container, 'claimed')\n    expectSimpleRowText(container, 'total', '\\uE9000.34 XRP')\n    expectSimpleRowText(\n      container,\n      'source',\n      'rH11fDGhbVH5NVXNXkGAMTmfWhUHjCtA3B:2647131528',\n    )\n    expectSimpleRowText(\n      container,\n      'destination',\n      'rK6g2UYc4GpQH8DYdPG7wywyQbxkJpQTTN',\n    )\n    expectSimpleRowText(\n      container,\n      '.channel',\n      '3BDB4F92432BCEB2385D3BAA60E8AAEC9B552890A240AEE4AA9E88C9E6C517E8',\n    )\n    expectSimpleRowNotToExist(container, 'renew')\n    expectSimpleRowText(container, 'close-request', 'close channel request')\n    expectSimpleRowText(container, 'closed', 'payment channel closed')\n    unmount()\n  })\n\n  it('renders tx requesting channel be closed but not closing it', () => {\n    const { container, unmount } = renderComponent(\n      mockPaymentChannelClaimCloseDenied,\n    )\n    expectSimpleRowText(container, 'amount', '\\uE90010.00 XRP')\n    expectSimpleRowNotToExist(container, 'claimed')\n    expectSimpleRowNotToExist(container, 'total')\n    expectSimpleRowText(\n      container,\n      'source',\n      'rH11fDGhbVH5NVXNXkGAMTmfWhUHjCtA3B:2647131528',\n    )\n    expectSimpleRowText(\n      container,\n      'destination',\n      'rK6g2UYc4GpQH8DYdPG7wywyQbxkJpQTTN',\n    )\n    expectSimpleRowText(\n      container,\n      '.channel',\n      '3BDB4F92432BCEB2385D3BAA60E8AAEC9B552890A240AEE4AA9E88C9E6C517E8',\n    )\n    expectSimpleRowNotToExist(container, 'renew')\n    expectSimpleRowText(container, 'close-request', 'close channel request')\n    expectSimpleRowNotToExist(container, 'closed')\n    unmount()\n  })\n\n  it('renders tx with destination tag', () => {\n    const { container, unmount } = renderComponent(\n      mockPaymentChannelClaimWithDestinationTag,\n    )\n    expectSimpleRowText(container, 'amount', '\\uE900100.00 XRP')\n    expectSimpleRowText(container, 'claimed', '\\uE9001.00 XRP')\n    expectSimpleRowText(container, 'total', '\\uE9001.00 XRP')\n    expectSimpleRowText(\n      container,\n      'source',\n      'rN7n7otQDd6FczFgLdSqtcsAUxDkw6fzRH',\n    )\n    expectSimpleRowText(\n      container,\n      'destination',\n      'rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn:20170428',\n    )\n    expectSimpleRowText(\n      container,\n      '.channel',\n      '5DB01B7FFED6B67E6B0414DED11E051D2EE2B7619CE0EAA6286D67A3A4D5BDB3',\n    )\n    expectSimpleRowNotToExist(container, 'renew')\n    expectSimpleRowNotToExist(container, 'close-request')\n    expectSimpleRowNotToExist(container, 'closed')\n    unmount()\n  })\n\n  it('renders tx with CredentialIDs', () => {\n    const { container, unmount } = renderComponent(\n      mockPaymentChannelClaimWithCredentialIDs,\n    )\n    expectSimpleRowText(container, 'amount', '\\uE90070.00 XRP')\n    expectSimpleRowText(container, 'claimed', '\\uE9000.01 XRP')\n    expectSimpleRowText(container, 'total', '\\uE90049.65716 XRP')\n    expect(\n      container.querySelector('[data-testid=\"credential-id-0\"]'),\n    ).toBeInTheDocument()\n    expect(\n      container.querySelector('[data-testid=\"credential-id-1\"]'),\n    ).toBeInTheDocument()\n    expect(\n      container.querySelector('[data-testid=\"credential-id-0\"] .value'),\n    ).toHaveTextContent(\n      '7B685088D546B9E8905D26206F452BB2F44D9A33C9BD9BCF280F7BA39015A955',\n    )\n    expect(\n      container.querySelector('[data-testid=\"credential-id-1\"] .value'),\n    ).toHaveTextContent(\n      '8B685088D546B9E8905D26206F452BB2F44D9A33C9BD9BCF280F7BA39015A956',\n    )\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/PaymentChannelClaim/test/PaymentChannelClaimTableDetail.test.tsx",
    "content": "import i18n from '../../../../../../i18n/testConfigEnglish'\n\nimport { createTableDetailRenderFactory } from '../../test/createWrapperFactory'\nimport { TableDetail } from '../TableDetail'\nimport mockPaymentChannelClaim from './mock_data/PaymentChannelClaim.json'\nimport mockPaymentChannelClaimClosed from './mock_data/PaymentChannelClaimClosed.json'\nimport mockPaymentChannelClaimCloseDenied from './mock_data/PaymentChannelClaimCloseDenied.json'\nimport mockPaymentChannelClaimWithDestinationTag from './mock_data/PaymentChannelClaimWithDestinationTag.json'\n\nconst renderComponent = createTableDetailRenderFactory(TableDetail, i18n)\n\ndescribe('PaymentChannelClaim: TableDetail', () => {\n  it('renders a claim', () => {\n    const { container, unmount } = renderComponent(mockPaymentChannelClaim)\n    expect(container.querySelector('[data-testid=\"source\"]')).toHaveTextContent(\n      'sourcernNzy3iPc7gPEAJbAdXwxY1UTBamBqTYhR:1002539517',\n    )\n    expect(\n      container.querySelector('[data-testid=\"destination\"]'),\n    ).toHaveTextContent('destinationrK6g2UYc4GpQH8DYdPG7wywyQbxkJpQTTN')\n    expect(\n      container.querySelector('[data-testid=\"claimed\"]'),\n    ).toHaveTextContent(\n      'claimed\\uE9000.01 XRP (\\uE90020.34284 XRP of \\uE90070.00 XRP remaining)',\n    )\n    expect(\n      container.querySelector('[data-testid=\"channel-amount\"]'),\n    ).not.toBeInTheDocument()\n    expect(\n      container.querySelector('[data-testid=\"renew\"]'),\n    ).not.toBeInTheDocument()\n    expect(\n      container.querySelector('[data-testid=\"close-request\"]'),\n    ).not.toBeInTheDocument()\n    expect(\n      container.querySelector('[data-testid=\"closed\"]'),\n    ).not.toBeInTheDocument()\n    unmount()\n  })\n\n  it('renders tx with channel being closed', () => {\n    const { container, unmount } = renderComponent(\n      mockPaymentChannelClaimClosed,\n    )\n    expect(container.querySelector('[data-testid=\"source\"]')).toHaveTextContent(\n      'sourcerH11fDGhbVH5NVXNXkGAMTmfWhUHjCtA3B:2647131528',\n    )\n    expect(\n      container.querySelector('[data-testid=\"destination\"]'),\n    ).toHaveTextContent('destinationrK6g2UYc4GpQH8DYdPG7wywyQbxkJpQTTN')\n    expect(\n      container.querySelector('[data-testid=\"claimed\"]'),\n    ).not.toBeInTheDocument()\n    expect(\n      container.querySelector('[data-testid=\"channel-amount\"]'),\n    ).toHaveTextContent('channel amount\\uE90010.00 XRP')\n    expect(\n      container.querySelector('[data-testid=\"renew\"]'),\n    ).not.toBeInTheDocument()\n    expect(\n      container.querySelector('[data-testid=\"close-request\"]'),\n    ).toHaveTextContent('close channel request')\n    expect(container.querySelector('[data-testid=\"closed\"]')).toHaveTextContent(\n      'payment channel closed',\n    )\n    unmount()\n  })\n\n  it('renders tx requesting channel be closed but not closing it', () => {\n    const { container, unmount } = renderComponent(\n      mockPaymentChannelClaimCloseDenied,\n    )\n    expect(container.querySelector('[data-testid=\"source\"]')).toHaveTextContent(\n      'sourcerH11fDGhbVH5NVXNXkGAMTmfWhUHjCtA3B:2647131528',\n    )\n    expect(\n      container.querySelector('[data-testid=\"destination\"]'),\n    ).toHaveTextContent('destinationrK6g2UYc4GpQH8DYdPG7wywyQbxkJpQTTN')\n    expect(\n      container.querySelector('[data-testid=\"claimed\"]'),\n    ).not.toBeInTheDocument()\n    expect(\n      container.querySelector('[data-testid=\"channel-amount\"]'),\n    ).toHaveTextContent('channel amount\\uE90010.00 XRP')\n    expect(\n      container.querySelector('[data-testid=\"renew\"]'),\n    ).not.toBeInTheDocument()\n    expect(\n      container.querySelector('[data-testid=\"close-request\"]'),\n    ).toHaveTextContent('close channel request')\n    expect(\n      container.querySelector('[data-testid=\"closed\"]'),\n    ).not.toBeInTheDocument()\n    unmount()\n  })\n\n  it('renders tx with destination tag', () => {\n    const { container, unmount } = renderComponent(\n      mockPaymentChannelClaimWithDestinationTag,\n    )\n    expect(container.querySelector('[data-testid=\"source\"]')).toHaveTextContent(\n      'sourcerN7n7otQDd6FczFgLdSqtcsAUxDkw6fzRH',\n    )\n    expect(\n      container.querySelector('[data-testid=\"destination\"]'),\n    ).toHaveTextContent(\n      'destinationrf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn:20170428',\n    )\n    expect(\n      container.querySelector('[data-testid=\"claimed\"]'),\n    ).toHaveTextContent(\n      'claimed\\uE9001.00 XRP (\\uE90099.00 XRP of \\uE900100.00 XRP remaining)',\n    )\n    expect(\n      container.querySelector('[data-testid=\"channel-amount\"]'),\n    ).not.toBeInTheDocument()\n    expect(\n      container.querySelector('[data-testid=\"renew\"]'),\n    ).not.toBeInTheDocument()\n    expect(\n      container.querySelector('[data-testid=\"close-request\"]'),\n    ).not.toBeInTheDocument()\n    expect(\n      container.querySelector('[data-testid=\"closed\"]'),\n    ).not.toBeInTheDocument()\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/PaymentChannelClaim/test/mock_data/PaymentChannelClaim.json",
    "content": "{\n  \"hash\": \"B576A11C6AE8830A1C1B77C27567D62E39A03E62DBE8FC1A09D463C2400B808A\",\n  \"ledger_index\": 37564494,\n  \"date\": \"2018-03-29T01:38:11+00:00\",\n  \"tx\": {\n    \"TransactionType\": \"PaymentChannelClaim\",\n    \"Flags\": 2147483648,\n    \"Sequence\": 1103,\n    \"LastLedgerSequence\": 37564495,\n    \"Channel\": \"50107651E7163E294CE0EAD8A20BF7CC046304480FCC9C74A49FFAB3F46FB98E\",\n    \"Balance\": \"49657160\",\n    \"Fee\": \"12\",\n    \"PublicKey\": \"ED46FF956B8EEC4BA614B1A6B0B4343D623AE37A891A0461F1F51464CFC3442CF7\",\n    \"SigningPubKey\": \"03D488B5AA26C87CB14BF23D470520F592A0006A916F5FEEAAB48335D8811A2E9F\",\n    \"TxnSignature\": \"304402205E511EE2CA9BEE36F4078C24E8849A87565692938DB6C1998B449EE4A4A7BFF402201B9B78A1CE11522CCEB973FFA0BC55D8F561657A5383331EAADC6F0D67F2C347\",\n    \"Signature\": \"55C8169517E6353A7168B4F6BE202C0C4D0828CBC3556D4576A3FF67D117F678AEC624FC98417460FA172F313FD920030C8C50B38542BD8744F578A568FB730B\",\n    \"Account\": \"rK6g2UYc4GpQH8DYdPG7wywyQbxkJpQTTN\"\n  },\n  \"meta\": {\n    \"TransactionIndex\": 10,\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"PreviousTxnLgrSeq\": 37563014,\n          \"PreviousTxnID\": \"6540E08162D034074B36A130C3683147C5BAC4E081138A97AABC4425ED264DDB\",\n          \"LedgerIndex\": \"1779FCFCF53ACAF81150E49FCDA32AE74B3DB67FCA77C054E0DEA3DEC4EFE053\",\n          \"PreviousFields\": {\n            \"Sequence\": 1103,\n            \"Balance\": \"284620533\"\n          },\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Sequence\": 1104,\n            \"OwnerCount\": 50,\n            \"Balance\": \"284630521\",\n            \"Account\": \"rK6g2UYc4GpQH8DYdPG7wywyQbxkJpQTTN\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"LedgerEntryType\": \"PayChannel\",\n          \"PreviousTxnLgrSeq\": 37539781,\n          \"PreviousTxnID\": \"9CB070C9F40DB0D50D70E1EB1E4C69D8B48DBDDDE06263711D01595F68722936\",\n          \"LedgerIndex\": \"50107651E7163E294CE0EAD8A20BF7CC046304480FCC9C74A49FFAB3F46FB98E\",\n          \"PreviousFields\": {\n            \"Balance\": \"49647160\"\n          },\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"SourceTag\": 1002539517,\n            \"SettleDelay\": 3600,\n            \"OwnerNode\": \"0000000000000001\",\n            \"Amount\": \"70000000\",\n            \"Balance\": \"49657160\",\n            \"PublicKey\": \"ED46FF956B8EEC4BA614B1A6B0B4343D623AE37A891A0461F1F51464CFC3442CF7\",\n            \"Account\": \"rnNzy3iPc7gPEAJbAdXwxY1UTBamBqTYhR\",\n            \"Destination\": \"rK6g2UYc4GpQH8DYdPG7wywyQbxkJpQTTN\"\n          }\n        }\n      }\n    ],\n    \"TransactionResult\": \"tesSUCCESS\"\n  }\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/PaymentChannelClaim/test/mock_data/PaymentChannelClaimCloseDenied.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rH11fDGhbVH5NVXNXkGAMTmfWhUHjCtA3B\",\n    \"Channel\": \"3BDB4F92432BCEB2385D3BAA60E8AAEC9B552890A240AEE4AA9E88C9E6C517E8\",\n    \"Fee\": \"12\",\n    \"Flags\": 2147614720,\n    \"LastLedgerSequence\": 66063111,\n    \"Sequence\": 3614,\n    \"SigningPubKey\": \"02A479536261866C8135FC26C63D031B2445D78AAAAEEF1DDA10898DD2047535AD\",\n    \"TransactionType\": \"PaymentChannelClaim\",\n    \"TxnSignature\": \"3045022100E7D7050A39B555CF3DBEE44BACC70EDEB1E2E8927E473B35F051AB3C6AEB069202200E3513ACF8A776518809757283FB2741D46F84C83DE490D8E18760F6AF949DCF\",\n    \"date\": \"2021-09-01T15:21:50Z\",\n    \"warnings\": [\n      {\n        \"id\": 1004,\n        \"message\": \"This is a reporting server.  The default behavior of a reporting server is to only return validated data. If you are looking for not yet validated data, include \\\"ledger_index : current\\\" in your request, which will cause this server to forward the request to a p2p node. If the forward is successful the response will include \\\"forwarded\\\" : \\\"true\\\"\"\n      }\n    ]\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rH11fDGhbVH5NVXNXkGAMTmfWhUHjCtA3B\",\n            \"Amount\": \"10000000\",\n            \"Balance\": \"340000\",\n            \"Destination\": \"rK6g2UYc4GpQH8DYdPG7wywyQbxkJpQTTN\",\n            \"Expiration\": 683828501,\n            \"Flags\": 0,\n            \"OwnerNode\": \"0\",\n            \"PublicKey\": \"ED81562211742AA0D8C6D6B0744D68AC28495A22AD45F1231DBB67A2FB85BB84CD\",\n            \"SettleDelay\": 3600,\n            \"SourceTag\": 2647131528\n          },\n          \"LedgerEntryType\": \"PayChannel\",\n          \"LedgerIndex\": \"3BDB4F92432BCEB2385D3BAA60E8AAEC9B552890A240AEE4AA9E88C9E6C517E8\",\n          \"PreviousFields\": {},\n          \"PreviousTxnID\": \"AA69E6C88FB2AA55755F6375B3AEE7A212083D5573F791D785742EF2D67F965F\",\n          \"PreviousTxnLgrSeq\": 44846252\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rH11fDGhbVH5NVXNXkGAMTmfWhUHjCtA3B\",\n            \"Balance\": \"57106640\",\n            \"Flags\": 0,\n            \"OwnerCount\": 4,\n            \"Sequence\": 3615\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"CE3A99805F4E7F9C23EC89E2206ECD6EBAB69ED2C60E8C909792F25FDDF92D6C\",\n          \"PreviousFields\": {\n            \"Balance\": \"57106652\",\n            \"Sequence\": 3614\n          },\n          \"PreviousTxnID\": \"4BBA4BF89C262D89937F97B25332F26518D3E7579F438BB927FBE0F09123EC68\",\n          \"PreviousTxnLgrSeq\": 66063108\n        }\n      }\n    ],\n    \"TransactionIndex\": 43,\n    \"TransactionResult\": \"tesSUCCESS\"\n  },\n  \"hash\": \"88C6D876E6F8BD76945FBA14FACE7C4F301628D42E5B2C7A8BED263A869F8E2F\",\n  \"ledger_index\": 66063110,\n  \"date\": \"2021-09-01T15:21:50Z\"\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/PaymentChannelClaim/test/mock_data/PaymentChannelClaimClosed.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rH11fDGhbVH5NVXNXkGAMTmfWhUHjCtA3B\",\n    \"Channel\": \"3BDB4F92432BCEB2385D3BAA60E8AAEC9B552890A240AEE4AA9E88C9E6C517E8\",\n    \"Fee\": \"12\",\n    \"Flags\": 2147614720,\n    \"LastLedgerSequence\": 66064744,\n    \"Sequence\": 3622,\n    \"SigningPubKey\": \"02A479536261866C8135FC26C63D031B2445D78AAAAEEF1DDA10898DD2047535AD\",\n    \"TransactionType\": \"PaymentChannelClaim\",\n    \"TxnSignature\": \"304402201735A804AA7B85712825AECD2BDAE1F89FEA21D05C832E9F27C70E56BE00A555022021D9984149D014AB4D1DD17469CA7CF5A0AA588A8188C15F36434640E5EBEBBF\",\n    \"date\": \"2021-09-01T17:05:32Z\",\n    \"warnings\": [\n      {\n        \"id\": 1004,\n        \"message\": \"This is a reporting server.  The default behavior of a reporting server is to only return validated data. If you are looking for not yet validated data, include \\\"ledger_index : current\\\" in your request, which will cause this server to forward the request to a p2p node. If the forward is successful the response will include \\\"forwarded\\\" : \\\"true\\\"\"\n      }\n    ]\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"1779FCFCF53ACAF81150E49FCDA32AE74B3DB67FCA77C054E0DEA3DEC4EFE053\",\n          \"PreviousTxnID\": \"DCF58B05CCBAEA5C9E4A5FDC16584EAA8EAA837D512BD519ECA9856EC57D88B3\",\n          \"PreviousTxnLgrSeq\": 62501650\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rH11fDGhbVH5NVXNXkGAMTmfWhUHjCtA3B\",\n            \"Amount\": \"10000000\",\n            \"Balance\": \"340000\",\n            \"Destination\": \"rK6g2UYc4GpQH8DYdPG7wywyQbxkJpQTTN\",\n            \"Expiration\": 683828501,\n            \"Flags\": 0,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"88C6D876E6F8BD76945FBA14FACE7C4F301628D42E5B2C7A8BED263A869F8E2F\",\n            \"PreviousTxnLgrSeq\": 66063110,\n            \"PublicKey\": \"ED81562211742AA0D8C6D6B0744D68AC28495A22AD45F1231DBB67A2FB85BB84CD\",\n            \"SettleDelay\": 3600,\n            \"SourceTag\": 2647131528\n          },\n          \"LedgerEntryType\": \"PayChannel\",\n          \"LedgerIndex\": \"3BDB4F92432BCEB2385D3BAA60E8AAEC9B552890A240AEE4AA9E88C9E6C517E8\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rH11fDGhbVH5NVXNXkGAMTmfWhUHjCtA3B\",\n            \"RootIndex\": \"44CA66F24CE13ABE62EFD98624730E36AB0C175456D801BE10409A53CA207EF2\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"44CA66F24CE13ABE62EFD98624730E36AB0C175456D801BE10409A53CA207EF2\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rH11fDGhbVH5NVXNXkGAMTmfWhUHjCtA3B\",\n            \"Balance\": \"76726544\",\n            \"Flags\": 0,\n            \"OwnerCount\": 5,\n            \"Sequence\": 3623\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"CE3A99805F4E7F9C23EC89E2206ECD6EBAB69ED2C60E8C909792F25FDDF92D6C\",\n          \"PreviousFields\": {\n            \"Balance\": \"67066556\",\n            \"OwnerCount\": 6,\n            \"Sequence\": 3622\n          },\n          \"PreviousTxnID\": \"EA3144420F4A2B64638AF7956F04BBDCE339C3FCF4EBF88E1F012ED0D3A32B61\",\n          \"PreviousTxnLgrSeq\": 66064741\n        }\n      }\n    ],\n    \"TransactionIndex\": 52,\n    \"TransactionResult\": \"tesSUCCESS\"\n  },\n  \"hash\": \"46526A19F87D089097DCD048AA9CFC30DCC0D6CA413665C8F6F646A0C9614EFE\",\n  \"ledger_index\": 66064743,\n  \"date\": \"2021-09-01T17:05:32Z\"\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/PaymentChannelClaim/test/mock_data/PaymentChannelClaimWithCredentialIDs.json",
    "content": "{\n  \"hash\": \"B576A11C6AE8830A1C1B77C27567D62E39A03E62DBE8FC1A09D463C2400B808A\",\n  \"ledger_index\": 37564494,\n  \"date\": \"2018-03-29T01:38:11+00:00\",\n  \"tx\": {\n    \"TransactionType\": \"PaymentChannelClaim\",\n    \"Flags\": 2147483648,\n    \"Sequence\": 1103,\n    \"LastLedgerSequence\": 37564495,\n    \"Channel\": \"50107651E7163E294CE0EAD8A20BF7CC046304480FCC9C74A49FFAB3F46FB98E\",\n    \"Balance\": \"49657160\",\n    \"Fee\": \"12\",\n    \"PublicKey\": \"ED46FF956B8EEC4BA614B1A6B0B4343D623AE37A891A0461F1F51464CFC3442CF7\",\n    \"SigningPubKey\": \"03D488B5AA26C87CB14BF23D470520F592A0006A916F5FEEAAB48335D8811A2E9F\",\n    \"TxnSignature\": \"304402205E511EE2CA9BEE36F4078C24E8849A87565692938DB6C1998B449EE4A4A7BFF402201B9B78A1CE11522CCEB973FFA0BC55D8F561657A5383331EAADC6F0D67F2C347\",\n    \"Signature\": \"55C8169517E6353A7168B4F6BE202C0C4D0828CBC3556D4576A3FF67D117F678AEC624FC98417460FA172F313FD920030C8C50B38542BD8744F578A568FB730B\",\n    \"Account\": \"rK6g2UYc4GpQH8DYdPG7wywyQbxkJpQTTN\",\n    \"CredentialIDs\": [\n      \"7B685088D546B9E8905D26206F452BB2F44D9A33C9BD9BCF280F7BA39015A955\",\n      \"8B685088D546B9E8905D26206F452BB2F44D9A33C9BD9BCF280F7BA39015A956\"\n    ]\n  },\n  \"meta\": {\n    \"TransactionIndex\": 10,\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"PreviousTxnLgrSeq\": 37563014,\n          \"PreviousTxnID\": \"6540E08162D034074B36A130C3683147C5BAC4E081138A97AABC4425ED264DDB\",\n          \"LedgerIndex\": \"1779FCFCF53ACAF81150E49FCDA32AE74B3DB67FCA77C054E0DEA3DEC4EFE053\",\n          \"PreviousFields\": {\n            \"Sequence\": 1103,\n            \"Balance\": \"284620533\"\n          },\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Sequence\": 1104,\n            \"OwnerCount\": 50,\n            \"Balance\": \"284630521\",\n            \"Account\": \"rK6g2UYc4GpQH8DYdPG7wywyQbxkJpQTTN\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"LedgerEntryType\": \"PayChannel\",\n          \"PreviousTxnLgrSeq\": 37539781,\n          \"PreviousTxnID\": \"9CB070C9F40DB0D50D70E1EB1E4C69D8B48DBDDDE06263711D01595F68722936\",\n          \"LedgerIndex\": \"50107651E7163E294CE0EAD8A20BF7CC046304480FCC9C74A49FFAB3F46FB98E\",\n          \"PreviousFields\": {\n            \"Balance\": \"49647160\"\n          },\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"SourceTag\": 1002539517,\n            \"SettleDelay\": 3600,\n            \"OwnerNode\": \"0000000000000001\",\n            \"Amount\": \"70000000\",\n            \"Balance\": \"49657160\",\n            \"PublicKey\": \"ED46FF956B8EEC4BA614B1A6B0B4343D623AE37A891A0461F1F51464CFC3442CF7\",\n            \"Account\": \"rnNzy3iPc7gPEAJbAdXwxY1UTBamBqTYhR\",\n            \"Destination\": \"rK6g2UYc4GpQH8DYdPG7wywyQbxkJpQTTN\"\n          }\n        }\n      }\n    ],\n    \"TransactionResult\": \"tesSUCCESS\"\n  }\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/PaymentChannelClaim/test/mock_data/PaymentChannelClaimWithDestinationTag.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n    \"Amount\": \"1000000\",\n    \"Balance\": \"1000000\",\n    \"Channel\": \"5DB01B7FFED6B67E6B0414DED11E051D2EE2B7619CE0EAA6286D67A3A4D5BDB3\",\n    \"Fee\": \"10\",\n    \"Flags\": 2147483648,\n    \"PublicKey\": \"023693F15967AE357D0327974AD46FE3C127113B1110D6044FD41E723689F81CC6\",\n    \"Sequence\": 372,\n    \"Signature\": \"304402204EF0AFB78AC23ED1C472E74F4299C0C21F1B21D07EFC0A3838A420F76D783A400220154FB11B6F54320666E4C36CA7F686C16A3A0456800BBC43746F34AF50290064\",\n    \"SigningPubKey\": \"03AB40A0490F9B7ED8DF29D246BF2D6269820A0EE7742ACDD457BEA7C7D0931EDB\",\n    \"TransactionType\": \"PaymentChannelClaim\",\n    \"TxnSignature\": \"304502210096B933BC24DA77D8C4057B4780B282BA66C668DFE1ACF4EEC063AD6661725797022037C8823669CE91AACA8CC754C9F041359F85B0B32384AEA141EBC3603798A24C\",\n    \"date\": \"2017-04-29T03:26:41Z\",\n    \"warnings\": [\n      {\n        \"id\": 1004,\n        \"message\": \"This is a reporting server.  The default behavior of a reporting server is to only return validated data. If you are looking for not yet validated data, include \\\"ledger_index : current\\\" in your request, which will cause this server to forward the request to a p2p node. If the forward is successful the response will include \\\"forwarded\\\" : \\\"true\\\"\"\n      }\n    ]\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n            \"AccountTxnID\": \"C9FE08FC88CF76C3B06622ADAA47AE99CABB3380E4D195E7751274CFD87910EB\",\n            \"Balance\": \"76111927\",\n            \"Domain\": \"6D64756F31332E636F6D\",\n            \"EmailHash\": \"98B4375E1D753E5B91627516F6D70977\",\n            \"Flags\": 8519680,\n            \"MessageKey\": \"0000000000000000000000070000000300\",\n            \"OwnerCount\": 9,\n            \"Sequence\": 373,\n            \"TransferRate\": 4294967295\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"13F1A95D7AAB7108D5CE7EEAF504B2894B8C674E6D68499076441C4837282BF8\",\n          \"PreviousFields\": {\n            \"AccountTxnID\": \"8FED577E905FD91185DE7FEF9BF7D7987BE0E25892C33E75906356EBAACE09B6\",\n            \"Balance\": \"75111937\",\n            \"Sequence\": 372\n          },\n          \"PreviousTxnID\": \"3F93C482C0BC2A1387D9E67DF60BECBB76CC2160AE98522C77AF0074D548F67D\",\n          \"PreviousTxnLgrSeq\": 29380080\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rN7n7otQDd6FczFgLdSqtcsAUxDkw6fzRH\",\n            \"Amount\": \"100000000\",\n            \"Balance\": \"1000000\",\n            \"Destination\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n            \"DestinationTag\": 20170428,\n            \"Flags\": 0,\n            \"OwnerNode\": \"0\",\n            \"PublicKey\": \"023693F15967AE357D0327974AD46FE3C127113B1110D6044FD41E723689F81CC6\",\n            \"SettleDelay\": 86400\n          },\n          \"LedgerEntryType\": \"PayChannel\",\n          \"LedgerIndex\": \"5DB01B7FFED6B67E6B0414DED11E051D2EE2B7619CE0EAA6286D67A3A4D5BDB3\",\n          \"PreviousFields\": {\n            \"Balance\": \"0\"\n          },\n          \"PreviousTxnID\": \"3F93C482C0BC2A1387D9E67DF60BECBB76CC2160AE98522C77AF0074D548F67D\",\n          \"PreviousTxnLgrSeq\": 29380080\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tesSUCCESS\"\n  },\n  \"hash\": \"C9FE08FC88CF76C3B06622ADAA47AE99CABB3380E4D195E7751274CFD87910EB\",\n  \"ledger_index\": 29385089,\n  \"date\": \"2017-04-29T03:26:41Z\"\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/PaymentChannelClaim/types.ts",
    "content": "import { ExplorerAmount } from '../../../types'\n\nexport interface PaymentChannelClaimInstructions {\n  channelAmount?: ExplorerAmount\n  claimed?: ExplorerAmount\n  remaining?: ExplorerAmount\n  totalClaimed?: ExplorerAmount\n  source?: string\n  destination?: string\n  channel?: string\n  renew?: boolean\n  close?: boolean\n  deleted?: boolean\n  credentialIDs?: string[]\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/PaymentChannelCreate/Description.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport type { PaymentChannelCreate } from 'xrpl'\nimport { localizeDate, localizeNumber } from '../../../utils'\nimport { convertRippleDate } from '../../../../../rippled/lib/convertRippleDate'\nimport { DATE_OPTIONS, findNode } from '../../../transactionUtils'\nimport { Account } from '../../Account'\nimport { useLanguage } from '../../../hooks'\nimport { TransactionDescriptionProps } from '../types'\nimport { Amount } from '../../Amount'\n\nexport const Description = ({\n  data,\n}: TransactionDescriptionProps<PaymentChannelCreate>) => {\n  const language = useLanguage()\n  const { t } = useTranslation()\n  const { tx } = data\n  const cancelAfter =\n    tx.CancelAfter &&\n    localizeDate(convertRippleDate(tx.CancelAfter), language, DATE_OPTIONS)\n\n  const node = findNode(data.meta, 'CreatedNode', 'PayChannel')\n\n  return (\n    <>\n      <div data-testid=\"accounts-line\">\n        {`${t('the_account')} `}\n        <Account account={tx.Account} tag={tx.SourceTag} />\n        {` ${t('create_payment_channel')} `}\n        <Account account={tx.Destination} tag={tx.DestinationTag} />\n      </div>\n      {node && (\n        <div data-testid=\"channel-line\">\n          {t('the_channel_id_is')}\n          <span className=\"channel\"> {node.LedgerIndex}</span>\n        </div>\n      )}\n      <div data-testid=\"amount-line\">\n        {t('the_channel_amount_is')}{' '}\n        <b>\n          <Amount value={tx.Amount} />\n        </b>\n      </div>\n      {tx.SettleDelay && (\n        <div data-testid=\"delay-line\">\n          {t('channel_settle_delay')}{' '}\n          <b>\n            {localizeNumber(tx.SettleDelay, language)} {t('seconds')}\n          </b>\n        </div>\n      )}\n      {tx.CancelAfter && (\n        <div data-testid=\"cancel-line\">\n          {t('describe_cancel_after')}\n          <span className=\"time\">{` ${cancelAfter} ${DATE_OPTIONS.timeZone}`}</span>\n        </div>\n      )}\n    </>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/PaymentChannelCreate/Simple.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { DATE_OPTIONS } from '../../../transactionUtils'\nimport { localizeNumber, localizeDate } from '../../../utils'\nimport { Account } from '../../Account'\nimport { Amount } from '../../Amount'\nimport { SimpleRow } from '../SimpleRow'\nimport { useLanguage } from '../../../hooks'\nimport { TransactionSimpleProps } from '../types'\nimport { PaymentChannelCreateInstructions } from './types'\n\nexport const Simple = ({\n  data,\n}: TransactionSimpleProps<PaymentChannelCreateInstructions>) => {\n  const language = useLanguage()\n  const { t } = useTranslation()\n  const { amount, source, destination, delay, cancelAfter, channel } =\n    data.instructions\n\n  return (\n    <>\n      <SimpleRow label={t('amount')} data-testid=\"amount\">\n        <Amount value={amount} />\n      </SimpleRow>\n      <SimpleRow label={t('source')} data-testid=\"source\">\n        <Account account={source} />\n      </SimpleRow>\n      <SimpleRow label={t('destination')} data-testid=\"destination\">\n        <Account account={destination} />\n      </SimpleRow>\n      {delay && (\n        <SimpleRow label={t('settle_delay')} data-testid=\"delay\">\n          {localizeNumber(delay, language)} {t('seconds_short')}\n        </SimpleRow>\n      )}\n      {cancelAfter && (\n        <SimpleRow label={t('cancel_after')} data-testid=\"cancel-after\">\n          {localizeDate(new Date(cancelAfter), language, DATE_OPTIONS)}{' '}\n          {DATE_OPTIONS.timeZone}\n        </SimpleRow>\n      )}\n      {channel && (\n        <SimpleRow label={t('channel_id')} className=\"channel\">\n          {channel}\n        </SimpleRow>\n      )}\n    </>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/PaymentChannelCreate/TableDetail.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { TransactionTableDetailProps } from '../types'\nimport { PaymentChannelCreateInstructions } from './types'\nimport { Amount } from '../../Amount'\nimport { Account } from '../../Account'\n\nexport const TableDetail = ({\n  instructions,\n}: TransactionTableDetailProps<PaymentChannelCreateInstructions>) => {\n  const { t } = useTranslation()\n  const { amount, source, destination } = instructions\n\n  return (\n    <div className=\"paymentChannelCreate\">\n      <div data-testid=\"source\">\n        <span className=\"label\">{t('source')}</span>\n        <Account account={source} />\n      </div>\n      <div data-testid=\"destination\">\n        <span className=\"label\">{t('destination')}</span>\n        <Account account={destination} />\n      </div>\n      <div>\n        <span className=\"label\">{t('channel_amount')}</span>\n        <Amount value={amount} />\n      </div>\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/PaymentChannelCreate/index.ts",
    "content": "import {\n  TransactionAction,\n  TransactionCategory,\n  TransactionMapping,\n} from '../types'\n\nimport { Description } from './Description'\nimport { Simple } from './Simple'\nimport { TableDetail } from './TableDetail'\nimport { parser } from './parser'\n\nexport const PaymentChannelCreateTransaction: TransactionMapping = {\n  Description,\n  Simple,\n  TableDetail,\n  action: TransactionAction.CREATE,\n  category: TransactionCategory.PAYMENT,\n  parser,\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/PaymentChannelCreate/parser.ts",
    "content": "import type { PaymentChannelCreate } from 'xrpl'\nimport { convertRippleDate } from '../../../../../rippled/lib/convertRippleDate'\nimport { formatAmount } from '../../../../../rippled/lib/txSummary/formatAmount'\nimport { findNode } from '../../../transactionUtils'\n\nexport const parser = (tx: PaymentChannelCreate, meta: any) => {\n  const st = tx.SourceTag ? `:${tx.SourceTag}` : ''\n  const dt = tx.DestinationTag ? `:${tx.DestinationTag}` : ''\n  const node = findNode(meta, 'CreatedNode', 'PayChannel')\n  return {\n    amount: formatAmount(tx.Amount),\n    source: `${tx.Account}${st}`,\n    destination: `${tx.Destination}${dt}`,\n    pubkey: tx.PublicKey,\n    delay: tx.SettleDelay,\n    cancelAfter: tx.CancelAfter ? convertRippleDate(tx.CancelAfter) : undefined,\n    channel: node && node.LedgerIndex,\n  }\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/PaymentChannelCreate/test/PaymentChannelCreateDescription.test.tsx",
    "content": "import i18n from '../../../../../../i18n/testConfigEnglish'\n\nimport { createDescriptionRenderFactory } from '../../test'\nimport mockPaymentChannelCreate from './mock_data/PaymentChannelCreate.json'\nimport mockPaymentChannelCreateFailed from './mock_data/PaymentChannelCreateFailed.json'\nimport mockPaymentChannelCreateWithDestinationTag from './mock_data/PaymentChannelCreateWithDestinationTag.json'\nimport { Description } from '../Description'\n\nconst renderComponent = createDescriptionRenderFactory(Description, i18n)\n\ndescribe('PaymentChannelCreate: Description', () => {\n  it('renders', () => {\n    const { container, unmount } = renderComponent(mockPaymentChannelCreate)\n    expect(\n      container.querySelector('[data-testid=\"accounts-line\"]'),\n    ).toHaveTextContent(\n      `The account rJnQrhRTXutuSwtrwxYiTkHn4Dtp8sF2LM:2460331042 will create a payment channel to rUXYat4hW2M87gHoqKK7fC4cqrT9C6V7d7`,\n    )\n    expect(\n      container.querySelector('[data-testid=\"channel-line\"]'),\n    ).toHaveTextContent(\n      `The channel ID is 15AB9EE9344C42C05164E6A1F2F08B35F35D7B9D66CCB9697452B0995C8F8242`,\n    )\n    expect(\n      container.querySelector('[data-testid=\"amount-line\"]'),\n    ).toHaveTextContent(`The channel amount is \\uE9001.00 XRP`)\n    expect(\n      container.querySelector('[data-testid=\"delay-line\"]'),\n    ).toHaveTextContent(`The channel has a settlement delay of 3,600 seconds`)\n    expect(\n      container.querySelector('[data-testid=\"cancel-line\"]'),\n    ).not.toBeInTheDocument()\n    unmount()\n  })\n\n  it('renders failed tx', () => {\n    const { container, unmount } = renderComponent(\n      mockPaymentChannelCreateFailed,\n    )\n    expect(\n      container.querySelector('[data-testid=\"accounts-line\"]'),\n    ).toHaveTextContent(\n      `The account rMphibGfHpLDU4DzVCspzLYVuMNpmzN6n8:2810223114 will create a payment channel to rK6g2UYc4GpQH8DYdPG7wywyQbxkJpQTTN`,\n    )\n    expect(\n      container.querySelector('[data-testid=\"channel-line\"]'),\n    ).not.toBeInTheDocument()\n    expect(\n      container.querySelector('[data-testid=\"amount-line\"]'),\n    ).toHaveTextContent(`The channel amount is \\uE90010.00 XRP`)\n    expect(\n      container.querySelector('[data-testid=\"delay-line\"]'),\n    ).toHaveTextContent(`The channel has a settlement delay of 3,600 seconds`)\n    expect(\n      container.querySelector('[data-testid=\"cancel-line\"]'),\n    ).not.toBeInTheDocument()\n    unmount()\n  })\n\n  it('renders tx with destination tag', () => {\n    const { container, unmount } = renderComponent(\n      mockPaymentChannelCreateWithDestinationTag,\n    )\n    expect(\n      container.querySelector('[data-testid=\"accounts-line\"]'),\n    ).toHaveTextContent(\n      `The account rN7n7otQDd6FczFgLdSqtcsAUxDkw6fzRH will create a payment channel to rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn:20170428`,\n    )\n    expect(\n      container.querySelector('[data-testid=\"channel-line\"]'),\n    ).toHaveTextContent(\n      `The channel ID is 5DB01B7FFED6B67E6B0414DED11E051D2EE2B7619CE0EAA6286D67A3A4D5BDB3`,\n    )\n    expect(\n      container.querySelector('[data-testid=\"amount-line\"]'),\n    ).toHaveTextContent(`The channel amount is \\uE900100.00 XRP`)\n    expect(\n      container.querySelector('[data-testid=\"delay-line\"]'),\n    ).toHaveTextContent(`The channel has a settlement delay of 86,400 seconds`)\n    expect(\n      container.querySelector('[data-testid=\"cancel-line\"]'),\n    ).not.toBeInTheDocument()\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/PaymentChannelCreate/test/PaymentChannelCreateSimple.test.tsx",
    "content": "import i18n from '../../../../../../i18n/testConfigEnglish'\n\nimport {\n  createSimpleRenderFactory,\n  expectSimpleRowLabel,\n  expectSimpleRowNotToExist,\n  expectSimpleRowText,\n} from '../../test'\nimport mockPaymentChannelCreate from './mock_data/PaymentChannelCreate.json'\nimport mockPaymentChannelCreateFailed from './mock_data/PaymentChannelCreateFailed.json'\nimport mockPaymentChannelCreateWithDestinationTag from './mock_data/PaymentChannelCreateWithDestinationTag.json'\nimport { Simple } from '../Simple'\n\nconst renderComponent = createSimpleRenderFactory(Simple, i18n)\n\ndescribe('PaymentChannelCreate: Simple', () => {\n  it('renders', () => {\n    const { container, unmount } = renderComponent(mockPaymentChannelCreate)\n    expectSimpleRowLabel(container, 'amount', 'Amount')\n    expectSimpleRowText(container, 'amount', '\\uE9001.00 XRP')\n    expectSimpleRowLabel(container, 'source', 'source')\n    expectSimpleRowText(\n      container,\n      'source',\n      'rJnQrhRTXutuSwtrwxYiTkHn4Dtp8sF2LM:2460331042',\n    )\n    expectSimpleRowLabel(container, 'destination', 'destination')\n    expectSimpleRowText(\n      container,\n      'destination',\n      'rUXYat4hW2M87gHoqKK7fC4cqrT9C6V7d7',\n    )\n    expectSimpleRowLabel(container, 'delay', 'Settlement Delay')\n    expectSimpleRowText(container, 'delay', '3,600 sec.')\n    expectSimpleRowLabel(container, '.channel', 'Channel ID')\n    expectSimpleRowText(\n      container,\n      '.channel',\n      '15AB9EE9344C42C05164E6A1F2F08B35F35D7B9D66CCB9697452B0995C8F8242',\n    )\n    unmount()\n  })\n\n  it('renders failed tx', () => {\n    const { container, unmount } = renderComponent(\n      mockPaymentChannelCreateFailed,\n    )\n    expectSimpleRowText(container, 'amount', '\\uE90010.00 XRP')\n    expectSimpleRowText(\n      container,\n      'source',\n      'rMphibGfHpLDU4DzVCspzLYVuMNpmzN6n8:2810223114',\n    )\n    expectSimpleRowText(\n      container,\n      'destination',\n      'rK6g2UYc4GpQH8DYdPG7wywyQbxkJpQTTN',\n    )\n    expectSimpleRowText(container, 'delay', '3,600 sec.')\n    expectSimpleRowNotToExist(container, '.channel')\n    unmount()\n  })\n\n  it('renders tx with destination tag', () => {\n    const { container, unmount } = renderComponent(\n      mockPaymentChannelCreateWithDestinationTag,\n    )\n    expectSimpleRowText(container, 'amount', '\\uE900100.00 XRP')\n    expectSimpleRowText(\n      container,\n      'source',\n      'rN7n7otQDd6FczFgLdSqtcsAUxDkw6fzRH',\n    )\n    expectSimpleRowText(\n      container,\n      'destination',\n      'rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn:20170428',\n    )\n    expectSimpleRowText(container, 'delay', '86,400 sec.')\n    expectSimpleRowText(\n      container,\n      '.channel',\n      '5DB01B7FFED6B67E6B0414DED11E051D2EE2B7619CE0EAA6286D67A3A4D5BDB3',\n    )\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/PaymentChannelCreate/test/PaymentChannelCreateTableDetail.test.tsx",
    "content": "import i18n from '../../../../../../i18n/testConfigEnglish'\n\nimport { createTableDetailRenderFactory } from '../../test'\nimport mockPaymentChannelCreate from './mock_data/PaymentChannelCreate.json'\nimport mockPaymentChannelCreateFailed from './mock_data/PaymentChannelCreateFailed.json'\nimport mockPaymentChannelCreateWithDestinationTag from './mock_data/PaymentChannelCreateWithDestinationTag.json'\nimport { TableDetail } from '../TableDetail'\n\nconst renderComponent = createTableDetailRenderFactory(TableDetail, i18n)\n\ndescribe('PaymentChannelCreate: TableDetail', () => {\n  it('renders', () => {\n    const { container, unmount } = renderComponent(mockPaymentChannelCreate)\n    expect(container.querySelector('[data-testid=\"source\"]')).toHaveTextContent(\n      'sourcerJnQrhRTXutuSwtrwxYiTkHn4Dtp8sF2LM:2460331042',\n    )\n    expect(\n      container.querySelector('[data-testid=\"destination\"]'),\n    ).toHaveTextContent('destinationrUXYat4hW2M87gHoqKK7fC4cqrT9C6V7d7')\n    expect(container.querySelector('[data-testid=\"amount\"]')).toHaveTextContent(\n      '\\uE9001.00 XRP',\n    )\n    unmount()\n  })\n\n  it('renders failed tx', () => {\n    const { container, unmount } = renderComponent(\n      mockPaymentChannelCreateFailed,\n    )\n    expect(container.querySelector('[data-testid=\"source\"]')).toHaveTextContent(\n      'sourcerMphibGfHpLDU4DzVCspzLYVuMNpmzN6n8:2810223114',\n    )\n    expect(\n      container.querySelector('[data-testid=\"destination\"]'),\n    ).toHaveTextContent('destinationrK6g2UYc4GpQH8DYdPG7wywyQbxkJpQTTN')\n    expect(container.querySelector('[data-testid=\"amount\"]')).toHaveTextContent(\n      '\\uE90010.00 XRP',\n    )\n    unmount()\n  })\n\n  it('renders tx with destination tag', () => {\n    const { container, unmount } = renderComponent(\n      mockPaymentChannelCreateWithDestinationTag,\n    )\n    expect(container.querySelector('[data-testid=\"source\"]')).toHaveTextContent(\n      'sourcerN7n7otQDd6FczFgLdSqtcsAUxDkw6fzRH',\n    )\n    expect(\n      container.querySelector('[data-testid=\"destination\"]'),\n    ).toHaveTextContent(\n      'destinationrf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn:20170428',\n    )\n    expect(container.querySelector('[data-testid=\"amount\"]')).toHaveTextContent(\n      '\\uE900100.00 XRP',\n    )\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/PaymentChannelCreate/test/mock_data/PaymentChannelCreate.json",
    "content": "{\n  \"hash\": \"6B0290096EE6AE136C60F1A6C2C6CE51006BE1B581DD833250F05482D778DEA9\",\n  \"ledger_index\": 35982312,\n  \"date\": \"2018-01-21T00:00:00+00:00\",\n  \"tx\": {\n    \"TransactionType\": \"PaymentChannelCreate\",\n    \"Flags\": 2147483648,\n    \"SourceTag\": 2460331042,\n    \"Sequence\": 21,\n    \"LastLedgerSequence\": 35982313,\n    \"SettleDelay\": 3600,\n    \"Amount\": \"1000000\",\n    \"Fee\": \"12\",\n    \"PublicKey\": \"EDA77EDD1D4BC31E7D104D345A0E74508CC66285E9263E8D229F6FC51E70078BA0\",\n    \"SigningPubKey\": \"036F7E0C4361596CAC3D4435C1FE087C9E41D9769FD219519BEF3733D8CACE03CA\",\n    \"TxnSignature\": \"3045022100908F55BA9A90D377E0C4AC0C823CB0D02AF316882CF34940B33CAB49DDBF8DB1022077D4A891C55204F2B2A97B4C91CC7FA5FD8DBEE7FABECE12ACB65A7BCB388FFE\",\n    \"Account\": \"rJnQrhRTXutuSwtrwxYiTkHn4Dtp8sF2LM\",\n    \"Destination\": \"rUXYat4hW2M87gHoqKK7fC4cqrT9C6V7d7\"\n  },\n  \"meta\": {\n    \"TransactionIndex\": 0,\n    \"AffectedNodes\": [\n      {\n        \"CreatedNode\": {\n          \"LedgerEntryType\": \"PayChannel\",\n          \"LedgerIndex\": \"15AB9EE9344C42C05164E6A1F2F08B35F35D7B9D66CCB9697452B0995C8F8242\",\n          \"NewFields\": {\n            \"SourceTag\": 2460331042,\n            \"SettleDelay\": 3600,\n            \"Amount\": \"1000000\",\n            \"PublicKey\": \"EDA77EDD1D4BC31E7D104D345A0E74508CC66285E9263E8D229F6FC51E70078BA0\",\n            \"Account\": \"rJnQrhRTXutuSwtrwxYiTkHn4Dtp8sF2LM\",\n            \"Destination\": \"rUXYat4hW2M87gHoqKK7fC4cqrT9C6V7d7\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"PreviousTxnLgrSeq\": 35982310,\n          \"PreviousTxnID\": \"E2D4BC42A95E66F6AE737A40938915672A8345FEA630FEF1F392518544CEC398\",\n          \"LedgerIndex\": \"2E5E4BEDEBBFAA768B4AD0B0732CA774AB5C225551009EA5E2F84FAEB06A7304\",\n          \"PreviousFields\": {\n            \"Sequence\": 21,\n            \"OwnerCount\": 7,\n            \"Balance\": \"492078743\"\n          },\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Sequence\": 22,\n            \"OwnerCount\": 8,\n            \"Balance\": \"491078731\",\n            \"Account\": \"rJnQrhRTXutuSwtrwxYiTkHn4Dtp8sF2LM\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"PreviousTxnLgrSeq\": 35982310,\n          \"PreviousTxnID\": \"E2D4BC42A95E66F6AE737A40938915672A8345FEA630FEF1F392518544CEC398\",\n          \"LedgerIndex\": \"4577D22E8C48C0F478B95ED04213CD21A0DEA93A6F9756B3B832CA96227765EA\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"9B84088FE84F4DBF6CD5C3EA957E8CD9BC8B73C0DEA754442D065A2950EFA969\",\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"RootIndex\": \"9B84088FE84F4DBF6CD5C3EA957E8CD9BC8B73C0DEA754442D065A2950EFA969\",\n            \"Owner\": \"rJnQrhRTXutuSwtrwxYiTkHn4Dtp8sF2LM\"\n          }\n        }\n      }\n    ],\n    \"TransactionResult\": \"tesSUCCESS\"\n  }\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/PaymentChannelCreate/test/mock_data/PaymentChannelCreateFailed.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rMphibGfHpLDU4DzVCspzLYVuMNpmzN6n8\",\n    \"Amount\": \"10000000\",\n    \"Destination\": \"rK6g2UYc4GpQH8DYdPG7wywyQbxkJpQTTN\",\n    \"Fee\": \"12\",\n    \"Flags\": 2147483648,\n    \"LastLedgerSequence\": 41685537,\n    \"PublicKey\": \"EDD1A0776D0ED2DB7D5D902EAD9FA5DA5F48C2617ECF96B1FC50BC77C0AF9CFCCB\",\n    \"Sequence\": 2,\n    \"SettleDelay\": 3600,\n    \"SigningPubKey\": \"0317F3AFB6C18B774ABEB358AE60E670921BF2B0D5791A581B9D4B0AF2CDA2929F\",\n    \"SourceTag\": 2810223114,\n    \"TransactionType\": \"PaymentChannelCreate\",\n    \"TxnSignature\": \"3045022100E779A52BE51B601A3B4E10ED82FA5ED18D1C85F1CAA16366ED2BF6DB13B328E502205866DE995B49180D2952AE3A365CE2A104D21C43CA730541161629BD80A9D95E\",\n    \"date\": \"2018-09-21T11:43:02Z\",\n    \"warnings\": [\n      {\n        \"id\": 1004,\n        \"message\": \"This is a reporting server.  The default behavior of a reporting server is to only return validated data. If you are looking for not yet validated data, include \\\"ledger_index : current\\\" in your request, which will cause this server to forward the request to a p2p node. If the forward is successful the response will include \\\"forwarded\\\" : \\\"true\\\"\"\n      }\n    ]\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rMphibGfHpLDU4DzVCspzLYVuMNpmzN6n8\",\n            \"Balance\": \"39999976\",\n            \"Flags\": 0,\n            \"OwnerCount\": 1,\n            \"Sequence\": 3\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"71EBC5CDFFE25A80A8D04D9DEAFFEF0127CD6EF940311E20BEC0679C16AB32F9\",\n          \"PreviousFields\": {\n            \"Balance\": \"39999988\",\n            \"Sequence\": 2\n          },\n          \"PreviousTxnID\": \"B24450EF9CE1D8A2AF18DA5625152EC72D93959BC6473E8D9C34D5051CACFFB1\",\n          \"PreviousTxnLgrSeq\": 41685413\n        }\n      }\n    ],\n    \"TransactionIndex\": 40,\n    \"TransactionResult\": \"tecUNFUNDED\"\n  },\n  \"hash\": \"689E7B2030D8E8C23CB0D2C6F86F8A46C0DFE018A2F0FCD773347590CAD8632F\",\n  \"ledger_index\": 41685536,\n  \"date\": \"2018-09-21T11:43:02Z\"\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/PaymentChannelCreate/test/mock_data/PaymentChannelCreateWithDestinationTag.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rN7n7otQDd6FczFgLdSqtcsAUxDkw6fzRH\",\n    \"Amount\": \"100000000\",\n    \"Destination\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n    \"DestinationTag\": 20170428,\n    \"Fee\": \"10\",\n    \"Flags\": 2147483648,\n    \"PublicKey\": \"023693F15967AE357D0327974AD46FE3C127113B1110D6044FD41E723689F81CC6\",\n    \"Sequence\": 39,\n    \"SettleDelay\": 86400,\n    \"SigningPubKey\": \"023693F15967AE357D0327974AD46FE3C127113B1110D6044FD41E723689F81CC6\",\n    \"TransactionType\": \"PaymentChannelCreate\",\n    \"TxnSignature\": \"304402204C0850DFA1526E7C523284BF0944E59A72362F9F21CF056376CA1B9119E2B5C3022052E37B45BB82D15CCA742B26566904445A0530AABA60568E16FB1EBE60024824\",\n    \"date\": \"2017-04-28T22:32:00Z\",\n    \"warnings\": [\n      {\n        \"id\": 1004,\n        \"message\": \"This is a reporting server.  The default behavior of a reporting server is to only return validated data. If you are looking for not yet validated data, include \\\"ledger_index : current\\\" in your request, which will cause this server to forward the request to a p2p node. If the forward is successful the response will include \\\"forwarded\\\" : \\\"true\\\"\"\n      }\n    ]\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"13F1A95D7AAB7108D5CE7EEAF504B2894B8C674E6D68499076441C4837282BF8\",\n          \"PreviousTxnID\": \"8FED577E905FD91185DE7FEF9BF7D7987BE0E25892C33E75906356EBAACE09B6\",\n          \"PreviousTxnLgrSeq\": 29380025\n        }\n      },\n      {\n        \"CreatedNode\": {\n          \"LedgerEntryType\": \"PayChannel\",\n          \"LedgerIndex\": \"5DB01B7FFED6B67E6B0414DED11E051D2EE2B7619CE0EAA6286D67A3A4D5BDB3\",\n          \"NewFields\": {\n            \"Account\": \"rN7n7otQDd6FczFgLdSqtcsAUxDkw6fzRH\",\n            \"Amount\": \"100000000\",\n            \"Destination\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n            \"DestinationTag\": 20170428,\n            \"PublicKey\": \"023693F15967AE357D0327974AD46FE3C127113B1110D6044FD41E723689F81CC6\",\n            \"SettleDelay\": 86400\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rN7n7otQDd6FczFgLdSqtcsAUxDkw6fzRH\",\n            \"Balance\": \"942868460\",\n            \"Flags\": 0,\n            \"OwnerCount\": 3,\n            \"Sequence\": 40\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"B1CB040A17F9469BC00376EC8719535655824AD16CB5F539DD5765FEA88FDBE3\",\n          \"PreviousFields\": {\n            \"Balance\": \"1042868470\",\n            \"OwnerCount\": 2,\n            \"Sequence\": 39\n          },\n          \"PreviousTxnID\": \"AE8C1F8D44D809F12E5FCF5457E8B28CC3E5FB6A87DF5F52686E32064F4AB1DB\",\n          \"PreviousTxnLgrSeq\": 29380069\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rN7n7otQDd6FczFgLdSqtcsAUxDkw6fzRH\",\n            \"RootIndex\": \"E590FC40B4F24D18341569BD3702A2D4E07E7BC04D11CE63608B67979E67030C\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"E590FC40B4F24D18341569BD3702A2D4E07E7BC04D11CE63608B67979E67030C\"\n        }\n      }\n    ],\n    \"TransactionIndex\": 16,\n    \"TransactionResult\": \"tesSUCCESS\"\n  },\n  \"hash\": \"3F93C482C0BC2A1387D9E67DF60BECBB76CC2160AE98522C77AF0074D548F67D\",\n  \"ledger_index\": 29380080,\n  \"date\": \"2017-04-28T22:32:00Z\"\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/PaymentChannelCreate/types.ts",
    "content": "import { ExplorerAmount } from '../../../types'\n\nexport interface PaymentChannelCreateInstructions {\n  amount: ExplorerAmount\n  source: string\n  destination: string\n  channel: string\n  delay: number\n  cancelAfter: string\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/PaymentChannelFund/Description.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport type { PaymentChannelFund } from 'xrpl'\nimport { findNode } from '../../../transactionUtils'\nimport { Amount } from '../../Amount'\nimport { TransactionDescriptionProps } from '../types'\n\nexport const Description = ({\n  data,\n}: TransactionDescriptionProps<PaymentChannelFund>) => {\n  const { t } = useTranslation()\n  const node = findNode(data.meta, 'ModifiedNode', 'PayChannel')\n\n  return (\n    <>\n      <div data-testid=\"channel-line\">\n        {t('update_payment_channel')}{' '}\n        <span className=\"channel\">{data.tx.Channel}</span>\n      </div>\n      {data.tx.Amount && (\n        <div data-testid=\"amount-line\">\n          {t('increase_channel_amount_by')}{' '}\n          <b>\n            <Amount value={data.tx.Amount} />\n          </b>\n          {node && (\n            <span>\n              {` ${t('from')} `}\n              <b>\n                <Amount value={node.PreviousFields.Amount} />\n              </b>\n              {` ${t('to')} `}\n              <b>\n                <Amount value={node.FinalFields.Amount} />\n              </b>\n            </span>\n          )}\n        </div>\n      )}\n    </>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/PaymentChannelFund/Simple.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { Account } from '../../Account'\nimport { TransactionSimpleProps } from '../types'\nimport { PaymentChannelFundInstructions } from './types'\nimport { Amount } from '../../Amount'\nimport { SimpleRow } from '../SimpleRow'\n\nexport const Simple = ({\n  data,\n}: TransactionSimpleProps<PaymentChannelFundInstructions>) => {\n  const { t } = useTranslation()\n  const {\n    channelAmount,\n    increase,\n    totalClaimed,\n    source = '',\n    destination = '',\n    channel,\n  } = data.instructions\n\n  return (\n    <>\n      {increase && (\n        <SimpleRow label={t('channel_amount_increase')} data-testid=\"increase\">\n          <Amount modifier=\"+\" value={increase} />\n        </SimpleRow>\n      )}\n      {channelAmount && (\n        <SimpleRow label={t('channel_amount')} data-testid=\"channel-amount\">\n          <Amount value={channelAmount} />\n        </SimpleRow>\n      )}\n      {totalClaimed && (\n        <SimpleRow label={t('total_claimed')} data-testid=\"total\">\n          <Amount value={totalClaimed} />\n        </SimpleRow>\n      )}\n      {source && (\n        <SimpleRow label={t('source')} data-testid=\"source\">\n          <Account account={source} />\n        </SimpleRow>\n      )}\n      {destination && (\n        <SimpleRow label={t('destination')} data-testid=\"destination\">\n          <Account account={destination} />\n        </SimpleRow>\n      )}\n      {channel && (\n        <SimpleRow label={t('channel_id')} className=\"channel\">\n          {channel}\n        </SimpleRow>\n      )}\n    </>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/PaymentChannelFund/index.ts",
    "content": "import {\n  TransactionAction,\n  TransactionCategory,\n  TransactionMapping,\n} from '../types'\n\nimport { Simple } from './Simple'\nimport { parser } from './parser'\nimport { Description } from './Description'\n\nexport const PaymentChannelFundTransaction: TransactionMapping = {\n  Description,\n  Simple,\n  action: TransactionAction.SEND,\n  category: TransactionCategory.PAYMENT,\n  parser,\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/PaymentChannelFund/parser.ts",
    "content": "import type { PaymentChannelFund, TransactionMetadata } from 'xrpl'\nimport { PaymentChannelFundInstructions } from './types'\nimport { formatAmount } from '../../../../../rippled/lib/txSummary/formatAmount'\n\nconst findNode = (\n  meta: TransactionMetadata,\n  nodeType: 'DeletedNode' | 'ModifiedNode',\n) => {\n  const metaNode = meta.AffectedNodes.find(\n    (node) => node[nodeType] && node[nodeType].LedgerEntryType === 'PayChannel',\n  )\n  return metaNode ? metaNode[nodeType] : null\n}\n\nconst getDetails = (node: any): PaymentChannelFundInstructions => {\n  const st = node.FinalFields.SourceTag ? `:${node.FinalFields.SourceTag}` : ''\n  const dt = node.FinalFields.DestinationTag\n    ? `:${node.FinalFields.DestinationTag}`\n    : ''\n  return {\n    source: `${node.FinalFields.Account}${st}`,\n    destination: `${node.FinalFields.Destination}${dt}`,\n  }\n}\n\nexport const parser = (\n  tx: PaymentChannelFund,\n  meta: TransactionMetadata,\n): PaymentChannelFundInstructions => {\n  const node = findNode(meta, 'ModifiedNode')\n  const channel = {\n    ...(node && getDetails(node)),\n    channel: tx.Channel,\n  }\n  channel.increase = formatAmount(tx.Amount)\n\n  if (node) {\n    channel.channelAmount = formatAmount(node.FinalFields.Amount)\n    channel.totalClaimed = formatAmount(node.FinalFields.Balance)\n  }\n\n  return channel\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/PaymentChannelFund/test/PaymentChannelFundDescription.test.tsx",
    "content": "import i18n from '../../../../../../i18n/testConfigEnglish'\n\nimport { createDescriptionRenderFactory } from '../../test/createWrapperFactory'\nimport mockPaymentChannelFund from './mock_data/PaymentChannelFund.json'\nimport mockPaymentChannelFundFailed from './mock_data/PaymentChannelFundFailed.json'\nimport { Description } from '../Description'\n\nconst renderComponent = createDescriptionRenderFactory(Description, i18n)\n\ndescribe('PaymentChannelFund: Description', () => {\n  it('renders a Fund', () => {\n    const { container, unmount } = renderComponent(mockPaymentChannelFund)\n    expect(\n      container.querySelector('[data-testid=\"channel-line\"]'),\n    ).toHaveTextContent(\n      `It will update the payment channel 4BEAC9E4C10674AB698EAC0F2D78A4FF507428370578A59B04883E7EB8D82260`,\n    )\n    expect(\n      container.querySelector('[data-testid=\"amount-line\"]'),\n    ).toHaveTextContent(\n      `It will increase the channel amount by \\uE9001.00 XRP from \\uE90074.00 XRP to \\uE90075.00 XRP`,\n    )\n    unmount()\n  })\n\n  it('renders failed tx', () => {\n    const { container, unmount } = renderComponent(mockPaymentChannelFundFailed)\n    expect(\n      container.querySelector('[data-testid=\"channel-line\"]'),\n    ).toHaveTextContent(\n      `It will update the payment channel 933F93F7113A2F94B7838D64D0D2A244C57EFD6411C16FFF5FA293D200EF5876`,\n    )\n    expect(\n      container.querySelector('[data-testid=\"amount-line\"]'),\n    ).toHaveTextContent(\n      `It will increase the channel amount by \\uE90020.00 XRP`,\n    )\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/PaymentChannelFund/test/PaymentChannelFundSimple.test.tsx",
    "content": "import i18n from '../../../../../../i18n/testConfigEnglish'\n\nimport { createSimpleRenderFactory } from '../../test/createWrapperFactory'\nimport { Simple } from '../Simple'\nimport mockPaymentChannelFund from './mock_data/PaymentChannelFund.json'\nimport mockPaymentChannelFundFailed from './mock_data/PaymentChannelFundFailed.json'\nimport {\n  expectSimpleRowLabel,\n  expectSimpleRowNotToExist,\n  expectSimpleRowText,\n} from '../../test'\n\nconst renderComponent = createSimpleRenderFactory(Simple, i18n)\n\ndescribe('PaymentChannelFund: Simple', () => {\n  it('renders a fund', () => {\n    const { container, unmount } = renderComponent(mockPaymentChannelFund)\n    expectSimpleRowLabel(container, 'increase', 'channel amount increase')\n    expectSimpleRowText(container, 'increase', '+\\uE9001.00 XRP')\n    expectSimpleRowLabel(container, 'channel-amount', 'channel amount')\n    expectSimpleRowText(container, 'channel-amount', '\\uE90075.00 XRP')\n    expectSimpleRowLabel(container, 'total', 'total claimed')\n    expectSimpleRowText(container, 'total', '\\uE90061.859345 XRP')\n    expectSimpleRowLabel(container, 'source', 'source')\n    expectSimpleRowText(\n      container,\n      'source',\n      'rK6g2UYc4GpQH8DYdPG7wywyQbxkJpQTTN:3839231768',\n    )\n    expectSimpleRowLabel(container, 'destination', 'destination')\n    expectSimpleRowText(\n      container,\n      'destination',\n      'rBFpf3YQQrcR1HnCt5AhYpNVvXUh4W89Dr',\n    )\n    expectSimpleRowLabel(container, '.channel', 'Channel ID')\n    expectSimpleRowText(\n      container,\n      '.channel',\n      '4BEAC9E4C10674AB698EAC0F2D78A4FF507428370578A59B04883E7EB8D82260',\n    )\n    unmount()\n  })\n\n  it('renders failed tx', () => {\n    const { container, unmount } = renderComponent(mockPaymentChannelFundFailed)\n    expectSimpleRowLabel(container, 'increase', 'channel amount increase')\n    expectSimpleRowText(container, 'increase', '+\\uE90020.00 XRP')\n    expectSimpleRowNotToExist(container, 'channel-amount')\n    expectSimpleRowNotToExist(container, 'total')\n    expectSimpleRowNotToExist(container, 'source')\n    expectSimpleRowNotToExist(container, 'destination')\n    expectSimpleRowNotToExist(container, 'source')\n    expectSimpleRowText(\n      container,\n      '.channel',\n      '933F93F7113A2F94B7838D64D0D2A244C57EFD6411C16FFF5FA293D200EF5876',\n    )\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/PaymentChannelFund/test/mock_data/PaymentChannelFund.json",
    "content": "{\n  \"hash\": \"56C30DEB930917C85C07AA91E48DAD849B3F68EB51AC244C20CD925BACE89ED5\",\n  \"ledger_index\": 36435648,\n  \"date\": \"2018-02-09T00:06:22+00:00\",\n  \"tx\": {\n    \"TransactionType\": \"PaymentChannelFund\",\n    \"Flags\": 2147483648,\n    \"Sequence\": 593,\n    \"LastLedgerSequence\": 36435649,\n    \"Channel\": \"4BEAC9E4C10674AB698EAC0F2D78A4FF507428370578A59B04883E7EB8D82260\",\n    \"Amount\": \"1000000\",\n    \"Fee\": \"12\",\n    \"SigningPubKey\": \"03D488B5AA26C87CB14BF23D470520F592A0006A916F5FEEAAB48335D8811A2E9F\",\n    \"TxnSignature\": \"3045022100F801125D3F6A64A7B3BDCF17DC07365C89BAE2D84590E986310E34ADDA33F60E022063667A423E05A44F5BA4C474B94589397F64ED9E0AE366B4E1BEF162EEF58157\",\n    \"Account\": \"rK6g2UYc4GpQH8DYdPG7wywyQbxkJpQTTN\"\n  },\n  \"meta\": {\n    \"TransactionIndex\": 2,\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"PreviousTxnLgrSeq\": 36435648,\n          \"PreviousTxnID\": \"BF6B24B492A4236CC138F375A5EB98A9C52F257204935457CDE28A5B0B28B14F\",\n          \"LedgerIndex\": \"1779FCFCF53ACAF81150E49FCDA32AE74B3DB67FCA77C054E0DEA3DEC4EFE053\",\n          \"PreviousFields\": {\n            \"Sequence\": 593,\n            \"Balance\": \"283417527\"\n          },\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Sequence\": 594,\n            \"OwnerCount\": 50,\n            \"Balance\": \"282417515\",\n            \"Account\": \"rK6g2UYc4GpQH8DYdPG7wywyQbxkJpQTTN\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"LedgerEntryType\": \"PayChannel\",\n          \"PreviousTxnLgrSeq\": 36435648,\n          \"PreviousTxnID\": \"BF6B24B492A4236CC138F375A5EB98A9C52F257204935457CDE28A5B0B28B14F\",\n          \"LedgerIndex\": \"4BEAC9E4C10674AB698EAC0F2D78A4FF507428370578A59B04883E7EB8D82260\",\n          \"PreviousFields\": {\n            \"Amount\": \"74000000\"\n          },\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"SourceTag\": 3839231768,\n            \"SettleDelay\": 3600,\n            \"OwnerNode\": \"0000000000000001\",\n            \"Amount\": \"75000000\",\n            \"Balance\": \"61859345\",\n            \"PublicKey\": \"ED1E97883F12E98C222752A93375481288158401948D2FD8C070AC8D7B5E9E0D7C\",\n            \"Account\": \"rK6g2UYc4GpQH8DYdPG7wywyQbxkJpQTTN\",\n            \"Destination\": \"rBFpf3YQQrcR1HnCt5AhYpNVvXUh4W89Dr\"\n          }\n        }\n      }\n    ],\n    \"TransactionResult\": \"tesSUCCESS\"\n  }\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/PaymentChannelFund/test/mock_data/PaymentChannelFundFailed.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rnNzy3iPc7gPEAJbAdXwxY1UTBamBqTYhR\",\n    \"Amount\": \"20000000\",\n    \"Channel\": \"933F93F7113A2F94B7838D64D0D2A244C57EFD6411C16FFF5FA293D200EF5876\",\n    \"Fee\": \"12\",\n    \"Flags\": 2147483648,\n    \"LastLedgerSequence\": 29704605,\n    \"Sequence\": 13,\n    \"SigningPubKey\": \"0389AFC598BDF777F2EDEF5C4140689819AC50C59D030B48C84EDA0F50D633E68B\",\n    \"TransactionType\": \"PaymentChannelFund\",\n    \"TxnSignature\": \"30440220176BCD35897E3928F533FB54044EBC82AEFB9B1EB64EE4AEC601D089A133B3F5022037D660874C6EC440DB499221EA5E21BE77F338D2F93D33288BA6988286E1471B\",\n    \"date\": \"2017-05-12T09:29:41Z\",\n    \"warnings\": [\n      {\n        \"id\": 1004,\n        \"message\": \"This is a reporting server.  The default behavior of a reporting server is to only return validated data. If you are looking for not yet validated data, include \\\"ledger_index : current\\\" in your request, which will cause this server to forward the request to a p2p node. If the forward is successful the response will include \\\"forwarded\\\" : \\\"true\\\"\"\n      }\n    ]\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rnNzy3iPc7gPEAJbAdXwxY1UTBamBqTYhR\",\n            \"Balance\": \"13886332216\",\n            \"Flags\": 0,\n            \"OwnerCount\": 6,\n            \"Sequence\": 14\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"C2DC646AA232F1F1D8F7901A56A10BE277D44FEA77C501C1BB15125FDF5F7128\",\n          \"PreviousFields\": {\n            \"Balance\": \"13886332228\",\n            \"Sequence\": 13\n          },\n          \"PreviousTxnID\": \"8C271FA6F9FFEE3EE738836234DBA8109AAD4B40B826A8AD973339F699631A73\",\n          \"PreviousTxnLgrSeq\": 29689286\n        }\n      }\n    ],\n    \"TransactionIndex\": 50,\n    \"TransactionResult\": \"tecNO_ENTRY\"\n  },\n  \"hash\": \"0038436F4891822B2518501F22E34277E3BADEA8FD70DF00651AA76A4F65AF27\",\n  \"ledger_index\": 29704603,\n  \"date\": \"2017-05-12T09:29:41Z\"\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/PaymentChannelFund/types.ts",
    "content": "import { ExplorerAmount } from '../../../types'\n\nexport interface PaymentChannelFundInstructions {\n  channelAmount?: ExplorerAmount\n  increase?: ExplorerAmount\n  totalClaimed?: ExplorerAmount\n  source?: string\n  destination?: string\n  channel?: string\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/PermissionedDomainDelete/Simple.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { type PermissionedDomainDelete } from 'xrpl'\nimport { TransactionSimpleComponent, TransactionSimpleProps } from '../types'\nimport { SimpleRow } from '../SimpleRow'\n\nconst Simple: TransactionSimpleComponent = (\n  props: TransactionSimpleProps<PermissionedDomainDelete>,\n) => {\n  const { t } = useTranslation()\n  const { data } = props\n  const { DomainID: domainID } = data.instructions\n\n  return (\n    <SimpleRow label={t('domain_id')} data-testid=\"domain-id\">\n      {domainID}\n    </SimpleRow>\n  )\n}\n\nexport { Simple }\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/PermissionedDomainDelete/TableDetail.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { type PermissionedDomainDelete } from 'xrpl'\nimport { TransactionTableDetailProps } from '../types'\n\nexport const TableDetail = ({\n  instructions,\n}: TransactionTableDetailProps<PermissionedDomainDelete>) => {\n  const { t } = useTranslation()\n  const { DomainID: domainID } = instructions\n  return (\n    <div className=\"permissionedDomainDelete\">\n      <div data-testid=\"domain-id\">\n        <span className=\"label\">{t('domain_id')}: </span>\n        <span className=\"case-sensitive\">{domainID}</span>\n      </div>\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/PermissionedDomainDelete/index.ts",
    "content": "import {\n  TransactionAction,\n  TransactionCategory,\n  TransactionMapping,\n} from '../types'\n\nimport { Simple } from './Simple'\nimport { TableDetail } from './TableDetail'\n\nexport const PermissionedDomainDeleteTransaction: TransactionMapping = {\n  Simple,\n  TableDetail,\n  action: TransactionAction.CANCEL,\n  category: TransactionCategory.ACCOUNT,\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/PermissionedDomainDelete/test/PermissionedDomainDeleteSimple.test.tsx",
    "content": "import { createSimpleRenderFactory, expectSimpleRowText } from '../../test'\nimport { Simple } from '../Simple'\nimport PermissionedDomainDelete from './mock_data/PermissionedDomainDelete.json'\n\nconst renderComponent = createSimpleRenderFactory(Simple)\n\ndescribe('PermissionedDomainDeleteSimple: Renders', () => {\n  it('renders', () => {\n    const { container, unmount } = renderComponent(PermissionedDomainDelete)\n    expectSimpleRowText(\n      container,\n      'domain-id',\n      'F075484241C8FD27C750F1DD93E0B5E0A42D9ADFE5E7B2313DD927E3DE0DBA6E',\n    )\n\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/PermissionedDomainDelete/test/PermissionedDomainDeleteTableDetail.test.tsx",
    "content": "import { createTableDetailRenderFactory } from '../../test'\nimport { TableDetail } from '../TableDetail'\nimport PermissionedDomainDelete from './mock_data/PermissionedDomainDelete.json'\n\nconst renderComponent = createTableDetailRenderFactory(TableDetail)\n\ndescribe('PermissionedDomainDeleteTableDetail ', () => {\n  it('renders PermissionedDomainDeleteTableDetail', () => {\n    const { container, unmount } = renderComponent(PermissionedDomainDelete)\n\n    expect(\n      container.querySelector('[data-testid=\"domain-id\"]'),\n    ).toHaveTextContent(\n      'domain_id: F075484241C8FD27C750F1DD93E0B5E0A42D9ADFE5E7B2313DD927E3DE0DBA6E',\n    )\n\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/PermissionedDomainDelete/test/mock_data/PermissionedDomainDelete.json",
    "content": "{\n  \"close_time_iso\": \"2025-01-21T01:51:40Z\",\n  \"ctid\": \"C000005A0000F7E0\",\n  \"hash\": \"1008A97884DD03C3B4812C53D01B2482F55B9C2E1E1323DE468B862BA002A771\",\n  \"ledger_hash\": \"E60EC716557B89B709B037D2AE8252A909020E31CAE0C4659FB2739F47997979\",\n  \"ledger_index\": 90,\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rhBPeJFG9pxvU22AxkzBpt6zzyk89xhdr3\",\n            \"Balance\": \"1999997599\",\n            \"Flags\": 0,\n            \"OwnerCount\": 3,\n            \"Sequence\": 77\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"5A8ABEB4FA540056A51E0D25177DB7E672E6D7E947DF5D347B9E1489D106F873\",\n          \"PreviousFields\": {\n            \"Balance\": \"1999997799\",\n            \"OwnerCount\": 4,\n            \"Sequence\": 76\n          },\n          \"PreviousTxnID\": \"676E4F1DF5DC4F9C2223DDE9999EF5A8392B310C49B84C7AB04BA10A6CDABFE4\",\n          \"PreviousTxnLgrSeq\": 89\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rhBPeJFG9pxvU22AxkzBpt6zzyk89xhdr3\",\n            \"RootIndex\": \"D9B8A922B4C857D4BA2CED2870A54D0DF9A45F7D9F7A145B627E291CCBD73FEE\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"D9B8A922B4C857D4BA2CED2870A54D0DF9A45F7D9F7A145B627E291CCBD73FEE\",\n          \"PreviousTxnID\": \"676E4F1DF5DC4F9C2223DDE9999EF5A8392B310C49B84C7AB04BA10A6CDABFE4\",\n          \"PreviousTxnLgrSeq\": 89\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"AcceptedCredentials\": [\n              {\n                \"Credential\": {\n                  \"CredentialType\": \"4964656E74697479446F63756D656E74\",\n                  \"Issuer\": \"rhBPeJFG9pxvU22AxkzBpt6zzyk89xhdr3\"\n                }\n              }\n            ],\n            \"Flags\": 0,\n            \"Owner\": \"rhBPeJFG9pxvU22AxkzBpt6zzyk89xhdr3\",\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"676E4F1DF5DC4F9C2223DDE9999EF5A8392B310C49B84C7AB04BA10A6CDABFE4\",\n            \"PreviousTxnLgrSeq\": 89,\n            \"Sequence\": 75\n          },\n          \"LedgerEntryType\": \"PermissionedDomain\",\n          \"LedgerIndex\": \"F075484241C8FD27C750F1DD93E0B5E0A42D9ADFE5E7B2313DD927E3DE0DBA6E\"\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tesSUCCESS\"\n  },\n  \"tx\": {\n    \"Account\": \"rhBPeJFG9pxvU22AxkzBpt6zzyk89xhdr3\",\n    \"DomainID\": \"F075484241C8FD27C750F1DD93E0B5E0A42D9ADFE5E7B2313DD927E3DE0DBA6E\",\n    \"Fee\": \"200\",\n    \"Flags\": 0,\n    \"LastLedgerSequence\": 109,\n    \"NetworkID\": 63456,\n    \"Sequence\": 76,\n    \"SigningPubKey\": \"ED0FD90553E43698CA5878F9AE1063AF1178728324356BFF116D3331B243F11FDD\",\n    \"TransactionType\": \"PermissionedDomainDelete\",\n    \"TxnSignature\": \"9C248D71E6221DBBE2F65DB2D3B7B0B0DF8FA11057A60719CCBE6A257D6255068E39D82C740ED7B05B3C99A4A591DA59847C0222A6B5F8DC90C480D249F30E01\",\n    \"date\": 790739500,\n    \"ledger_index\": 90\n  },\n  \"validated\": true\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/PermissionedDomainSet/Simple.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { type PermissionedDomainSet } from 'xrpl'\nimport { TransactionSimpleComponent, TransactionSimpleProps } from '../types'\nimport { SimpleRow } from '../SimpleRow'\n\nconst Simple: TransactionSimpleComponent = (\n  props: TransactionSimpleProps<PermissionedDomainSet>,\n) => {\n  const { t } = useTranslation()\n  const { data } = props\n  const { AcceptedCredentials: acceptedCredentials } = data.instructions\n\n  return (\n    <SimpleRow\n      label={t('accepted_credentials')}\n      data-testid=\"accepted-credentials\"\n    >\n      {acceptedCredentials.map((credential) => (\n        <div>\n          <SimpleRow label={t('credential_type')} data-testid=\"cred-type\">\n            {credential.Credential.CredentialType}\n          </SimpleRow>\n          <SimpleRow label={t('credential_issuer')} data-testid=\"cred-issuer\">\n            {credential.Credential.Issuer}\n          </SimpleRow>\n        </div>\n      ))}\n    </SimpleRow>\n  )\n}\n\nexport { Simple }\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/PermissionedDomainSet/TableDetail.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { type PermissionedDomainSet } from 'xrpl'\nimport { TransactionTableDetailProps } from '../types'\n\nexport const TableDetail = ({\n  instructions,\n}: TransactionTableDetailProps<PermissionedDomainSet>) => {\n  const { t } = useTranslation()\n  const { AcceptedCredentials: acceptedCredentials } = instructions\n  return (\n    <div className=\"permissionedDomainSet\">\n      {acceptedCredentials.map((credential) => (\n        <div>\n          <div data-testid=\"cred-type\">\n            <span className=\"label\">{t('credential_type')}: </span>\n            <span className=\"case-sensitive\">\n              {credential.Credential.CredentialType}\n            </span>\n          </div>\n          <div data-testid=\"cred-issuer\">\n            <span className=\"label\">{t('credential_issuer')}: </span>\n            <span className=\"case-sensitive\">\n              {credential.Credential.Issuer}\n            </span>\n          </div>\n        </div>\n      ))}\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/PermissionedDomainSet/index.ts",
    "content": "import {\n  TransactionAction,\n  TransactionCategory,\n  TransactionMapping,\n} from '../types'\n\nimport { Simple } from './Simple'\nimport { TableDetail } from './TableDetail'\n\nexport const PermissionedDomainSetTransaction: TransactionMapping = {\n  Simple,\n  TableDetail,\n  action: TransactionAction.MODIFY,\n  category: TransactionCategory.ACCOUNT,\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/PermissionedDomainSet/test/PermissionedDomainSetSimple.test.tsx",
    "content": "import { createSimpleRenderFactory, expectSimpleRowText } from '../../test'\nimport { Simple } from '../Simple'\nimport PermissionedDomainSet from './mock_data/PermissionedDomainSet.json'\n\nconst renderComponent = createSimpleRenderFactory(Simple)\n\ndescribe('PermissionedDomainSetSimple: Renders', () => {\n  it('renders', () => {\n    const { container, unmount } = renderComponent(PermissionedDomainSet)\n\n    expectSimpleRowText(\n      container,\n      'cred-type',\n      '4964656E74697479446F63756D656E74',\n    )\n    expectSimpleRowText(\n      container,\n      'cred-issuer',\n      'rUVQzukKnGSw4qNjEvBxLxquaLaMwzVBab',\n    )\n\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/PermissionedDomainSet/test/PermissionedDomainSetTableDetail.test.tsx",
    "content": "import { createTableDetailRenderFactory } from '../../test'\nimport { TableDetail } from '../TableDetail'\nimport PermissionedDomainSet from './mock_data/PermissionedDomainSet.json'\n\nconst renderComponent = createTableDetailRenderFactory(TableDetail)\n\ndescribe('PermissionedDomainSetTableDetail', () => {\n  it('renders PermissionedDomainSetTableDetail', () => {\n    const { container, unmount } = renderComponent(PermissionedDomainSet)\n\n    expect(\n      container.querySelector('[data-testid=\"cred-type\"]'),\n    ).toHaveTextContent('credential_type: 4964656E74697479446F63756D656E74')\n    expect(\n      container.querySelector('[data-testid=\"cred-issuer\"]'),\n    ).toHaveTextContent('credential_issuer: rUVQzukKnGSw4qNjEvBxLxquaLaMwzVBab')\n\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/PermissionedDomainSet/test/mock_data/PermissionedDomainSet.json",
    "content": "{\n  \"close_time_iso\": \"2025-01-19T02:21:39Z\",\n  \"ctid\": \"C00000400000F7E0\",\n  \"hash\": \"561E23C018C9D6B9A1C03F1AD90E2DEB57DEF5ADA0C3886004F3B1423948A9A7\",\n  \"ledger_hash\": \"D9408AA31B24A03E999C13FE93B0D43174FD1CC4BACE884B012E7FAB255BDEED\",\n  \"ledger_index\": 64,\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"CreatedNode\": {\n          \"LedgerEntryType\": \"PermissionedDomain\",\n          \"LedgerIndex\": \"1FF57AD569BC5258A4D3C5AAB77DDEBB68E286F72D8EAB49DEE3DD35C2C5A4AF\",\n          \"NewFields\": {\n            \"AcceptedCredentials\": [\n              {\n                \"Credential\": {\n                  \"CredentialType\": \"4964656E74697479446F63756D656E74\",\n                  \"Issuer\": \"rUVQzukKnGSw4qNjEvBxLxquaLaMwzVBab\"\n                }\n              }\n            ],\n            \"Owner\": \"rUVQzukKnGSw4qNjEvBxLxquaLaMwzVBab\",\n            \"Sequence\": 50\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rUVQzukKnGSw4qNjEvBxLxquaLaMwzVBab\",\n            \"RootIndex\": \"3ECFCBD5393D4EBA88476B159B542BD7D2159D72BF35488ED294E90931567D93\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"3ECFCBD5393D4EBA88476B159B542BD7D2159D72BF35488ED294E90931567D93\",\n          \"PreviousTxnID\": \"E3A10DD121B54CB7D8922A77D26C9D766FD8A07850287F278F9313057D664DD4\",\n          \"PreviousTxnLgrSeq\": 63\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rUVQzukKnGSw4qNjEvBxLxquaLaMwzVBab\",\n            \"Balance\": \"1999997799\",\n            \"Flags\": 0,\n            \"OwnerCount\": 4,\n            \"Sequence\": 51\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"DBACFFF9DBF52B26633B4CED74BD43E8AEF09C20F46C80D83C3A3230BD4E3985\",\n          \"PreviousFields\": {\n            \"Balance\": \"1999997999\",\n            \"OwnerCount\": 3,\n            \"Sequence\": 50\n          },\n          \"PreviousTxnID\": \"E3A10DD121B54CB7D8922A77D26C9D766FD8A07850287F278F9313057D664DD4\",\n          \"PreviousTxnLgrSeq\": 63\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tesSUCCESS\"\n  },\n  \"tx\": {\n    \"AcceptedCredentials\": [\n      {\n        \"Credential\": {\n          \"CredentialType\": \"4964656E74697479446F63756D656E74\",\n          \"Issuer\": \"rUVQzukKnGSw4qNjEvBxLxquaLaMwzVBab\"\n        }\n      }\n    ],\n    \"Account\": \"rUVQzukKnGSw4qNjEvBxLxquaLaMwzVBab\",\n    \"Fee\": \"200\",\n    \"Flags\": 0,\n    \"LastLedgerSequence\": 83,\n    \"NetworkID\": 63456,\n    \"Sequence\": 50,\n    \"SigningPubKey\": \"ED7EE9DDAFF54720AD642944B666CC359091F170BA49C084C3E59803ACDBB17647\",\n    \"TransactionType\": \"PermissionedDomainSet\",\n    \"TxnSignature\": \"B505D12FEDCBAEE792FE5317253E633C094F5D7D8B6D3C9A54B4EAF1F56B2D7F537356D1292A2BAFAE163343BD659F05BF8C916EBA0B10B54D78F20B33B93205\",\n    \"date\": 790568499,\n    \"ledger_index\": 64\n  },\n  \"validated\": true\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/README.md",
    "content": "# How Transactions Are Defined\n\nEach transaction has its properties defined in `./{TransactionType}/index.ts`.\n\n- **Description**: A React component that defines the \"Description\" portion of a transaction's \"Detailed\" tab.\n- **Simple**: A React component that defines the left column of a transaction's \"Simple\" tab.\n- **TableDetail**: A React component that defines the body of transaction on the account, ledger, token, or nft page.\n- **action**: A TransactionCategory value used to determine shape color of the transaction.\n- **category**: A TransactionCategory value used to determine the color of the transaction.\n- **parser**: An optional function which takes a transaction object and meta nodes. It returns additional properties to map onto a transaction.\n  This is run when a transaction is received from the server and is useful for transforming complex properties derived from nodes.\n\nThis object is then provided in `./index.ts`\n\nThe transaction needs to have its display value defined in `/public/locales/en-US/translations.json` with the key\n`\"transaction_{TransactionType}\"`.\n\nThe helper methods `getAction` and `getCategory` are available to find out how a transaction is defined and falls back to OTHER.\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/SetFee/Description.tsx",
    "content": "import { Trans } from 'react-i18next'\nimport { TransactionDescriptionProps } from '../types'\nimport { parser } from './parser'\nimport { Amount } from '../../Amount'\n\nexport const Description = ({ data }: TransactionDescriptionProps) => {\n  const { fee, reserve, increment } = parser(data.tx)\n\n  return (\n    <>\n      <div data-testid=\"fees-line\">\n        <Trans\n          i18nKey=\"setfee_fees_description\"\n          components={{\n            amount: <Amount value={fee} />,\n          }}\n        />\n      </div>\n      <div data-testid=\"reserves-line\">\n        <Trans\n          i18nKey=\"setfee_reserves_description\"\n          components={{\n            base: <Amount value={reserve} />,\n            increment: <Amount value={increment} />,\n          }}\n        />\n      </div>\n      <br />\n      <div data-testid=\"documentation-line\">\n        <Trans\n          i18nKey=\"setfee_docs_description\"\n          components={[<a href=\"https://xrpl.org/fees.html\">Fees</a>]}\n        />\n      </div>\n    </>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/SetFee/Simple.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { Amount } from '../../Amount'\nimport { SimpleRow } from '../SimpleRow'\nimport { TransactionSimpleProps } from '../types'\nimport { SetFeeInstructions } from './types'\n\nexport const Simple = ({\n  data,\n}: TransactionSimpleProps<SetFeeInstructions>) => {\n  const { t } = useTranslation()\n  const { fee, reserve, increment } = data.instructions\n\n  return (\n    <>\n      <SimpleRow label={t('setfee_base_fee')} data-testid=\"base-fee\">\n        <Amount value={fee} />\n      </SimpleRow>\n      <SimpleRow label={t('setfee_reserve')} data-testid=\"reserve\">\n        <Amount value={reserve} />\n      </SimpleRow>\n      <SimpleRow\n        label={t('setfee_reserve_increment')}\n        data-testid=\"reserve-increment\"\n      >\n        <Amount value={increment} />\n      </SimpleRow>\n    </>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/SetFee/index.ts",
    "content": "import {\n  TransactionAction,\n  TransactionCategory,\n  TransactionMapping,\n} from '../types'\n\nimport { Simple } from './Simple'\nimport { parser } from './parser'\nimport { Description } from './Description'\n\nexport const SetFeeTransaction: TransactionMapping = {\n  Description,\n  Simple,\n  action: TransactionAction.MODIFY,\n  category: TransactionCategory.ACCOUNT,\n  parser,\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/SetFee/parser.ts",
    "content": "import { isPreAmendment, SetFee, SetFeeInstructions } from './types'\n\nexport const parser = (tx: SetFee): SetFeeInstructions => {\n  if (isPreAmendment(tx)) {\n    return {\n      fee: parseInt(tx.BaseFee, 16).toString(),\n      reserve: tx.ReserveBase.toString(),\n      increment: tx.ReserveIncrement.toString(),\n    }\n  }\n\n  return {\n    fee: tx.BaseFeeDrops,\n    reserve: tx.ReserveBaseDrops,\n    increment: tx.ReserveIncrementDrops,\n  }\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/SetFee/test/SetFeeDescription.test.tsx",
    "content": "import { createDescriptionRenderFactory } from '../../test'\nimport { Description } from '../Description'\nimport i18nTestConfigEnUS from '../../../../../../i18n/testConfigEnglish'\n\nimport SetFeePreAmendment from './mock_data/SetFee_PreAmendment.json'\nimport SetFeePostAmendment from './mock_data/SetFee_PostAmendment.json'\n\nconst renderComponent = createDescriptionRenderFactory(\n  Description,\n  i18nTestConfigEnUS,\n)\n\nfunction testDescription(container: Element) {\n  expect(\n    container.querySelector('[data-testid=\"fees-line\"]'),\n  ).toHaveTextContent(\n    `Future transactions will require a minimum fee of \\uE9000.00001 XRP.`,\n  )\n  expect(\n    container.querySelector('[data-testid=\"reserves-line\"]'),\n  ).toHaveTextContent(\n    `Accounts must now hold a base of \\uE90010.00 XRP and an additional \\uE9002.00 XRP for each additional object that account owns.`,\n  )\n  expect(\n    container.querySelector('[data-testid=\"documentation-line\"]'),\n  ).toHaveTextContent(`Visit the docs: Fees`)\n}\n\ndescribe('SetFee: Description', () => {\n  it('renders Description for transaction before XRPFees amendment', () => {\n    const { container, unmount } = renderComponent(SetFeePreAmendment)\n    testDescription(container)\n    unmount()\n  })\n\n  it('renders Description for transaction after XRPFees amendment', () => {\n    const { container, unmount } = renderComponent(SetFeePostAmendment)\n    testDescription(container)\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/SetFee/test/SetFeeSimple.test.tsx",
    "content": "import {\n  createSimpleRenderFactory,\n  expectSimpleRowLabel,\n  expectSimpleRowText,\n} from '../../test'\nimport { Simple } from '../Simple'\nimport i18nTestConfigEnUS from '../../../../../../i18n/testConfigEnglish'\n\nimport SetFeePreAmendment from './mock_data/SetFee_PreAmendment.json'\nimport SetFeePostAmendment from './mock_data/SetFee_PostAmendment.json'\n\nconst renderComponent = createSimpleRenderFactory(Simple, i18nTestConfigEnUS)\n\nfunction testSimple(container: Element) {\n  expectSimpleRowLabel(container, `base-fee`, 'Base Fee')\n  expectSimpleRowText(container, `base-fee`, `\\uE9000.00001 XRP`)\n  expectSimpleRowLabel(container, `reserve`, 'Reserve')\n  expectSimpleRowText(container, `reserve`, `\\uE90010.00 XRP`)\n  expectSimpleRowLabel(container, `reserve-increment`, 'Reserve Increment')\n  expectSimpleRowText(container, `reserve-increment`, `\\uE9002.00 XRP`)\n}\n\ndescribe('SetFee: Simple', () => {\n  it('renders Simple for transaction before XRPFees amendment', () => {\n    const { container, unmount } = renderComponent(SetFeePreAmendment)\n    testSimple(container)\n    unmount()\n  })\n\n  it('renders Simple for transaction after XRPFees amendment', () => {\n    const { container, unmount } = renderComponent(SetFeePostAmendment)\n    testSimple(container)\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/SetFee/test/mock_data/SetFee_PostAmendment.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rrrrrrrrrrrrrrrrrrrrrhoLvTp\",\n    \"BaseFeeDrops\": \"10\",\n    \"Fee\": \"0\",\n    \"LedgerSequence\": 66462465,\n    \"ReserveBaseDrops\": \"10000000\",\n    \"ReserveIncrementDrops\": \"2000000\",\n    \"Sequence\": 0,\n    \"SigningPubKey\": \"\",\n    \"TransactionType\": \"SetFee\",\n    \"date\": 1632045932000,\n    \"warnings\": [\n      {\n        \"id\": 1004,\n        \"message\": \"This is a reporting server.  The default behavior of a reporting server is to only return validated data. If you are looking for not yet validated data, include \\\"ledger_index : current\\\" in your request, which will cause this server to forward the request to a p2p node. If the forward is successful the response will include \\\"forwarded\\\" : \\\"true\\\"\"\n      }\n    ]\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"BaseFeeDrops\": \"10\",\n            \"Flags\": 0,\n            \"ReferenceFeeUnits\": 10,\n            \"ReserveBaseDrops\": \"10000000\",\n            \"ReserveIncrementDrops\": \"2000000\"\n          },\n          \"LedgerEntryType\": \"FeeSettings\",\n          \"LedgerIndex\": \"4BC50C9B0D8515D3EAAE1E74B29A95804346C491EE1A95BF25E4AAB854A6A651\",\n          \"PreviousFields\": {\n            \"ReserveBaseDrops\": \"20000000\",\n            \"ReserveIncrementDrops\": \"5000000\"\n          }\n        }\n      }\n    ],\n    \"TransactionIndex\": 28,\n    \"TransactionResult\": \"tesSUCCESS\"\n  },\n  \"hash\": \"5922A0BA30621C60B2B6DDBC3FF6B5BB509EB3685C4C3D56696A9FE4FE6D48A3\",\n  \"ledger_index\": 66462465,\n  \"date\": 1632045932000\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/SetFee/test/mock_data/SetFee_PreAmendment.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rrrrrrrrrrrrrrrrrrrrrhoLvTp\",\n    \"BaseFee\": \"a\",\n    \"Fee\": \"0\",\n    \"LedgerSequence\": 66462465,\n    \"ReferenceFeeUnits\": 10,\n    \"ReserveBase\": 10000000,\n    \"ReserveIncrement\": 2000000,\n    \"Sequence\": 0,\n    \"SigningPubKey\": \"\",\n    \"TransactionType\": \"SetFee\",\n    \"date\": 1632045932000,\n    \"warnings\": [\n      {\n        \"id\": 1004,\n        \"message\": \"This is a reporting server.  The default behavior of a reporting server is to only return validated data. If you are looking for not yet validated data, include \\\"ledger_index : current\\\" in your request, which will cause this server to forward the request to a p2p node. If the forward is successful the response will include \\\"forwarded\\\" : \\\"true\\\"\"\n      }\n    ]\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"BaseFee\": \"a\",\n            \"Flags\": 0,\n            \"ReferenceFeeUnits\": 10,\n            \"ReserveBase\": 10000000,\n            \"ReserveIncrement\": 2000000\n          },\n          \"LedgerEntryType\": \"FeeSettings\",\n          \"LedgerIndex\": \"4BC50C9B0D8515D3EAAE1E74B29A95804346C491EE1A95BF25E4AAB854A6A651\",\n          \"PreviousFields\": {\n            \"ReserveBase\": 20000000,\n            \"ReserveIncrement\": 5000000\n          }\n        }\n      }\n    ],\n    \"TransactionIndex\": 28,\n    \"TransactionResult\": \"tesSUCCESS\"\n  },\n  \"hash\": \"5922A0BA30621C60B2B6DDBC3FF6B5BB509EB3685C4C3D56696A9FE4FE6D48A3\",\n  \"ledger_index\": 66462465,\n  \"date\": 1632045932000\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/SetFee/types.ts",
    "content": "import { TransactionCommonFields } from '../types'\n\nexport interface SetFeePreAmendment extends TransactionCommonFields {\n  BaseFee: string\n  ReferenceFeeUnits: number\n  ReserveBase: number\n  ReserveIncrement: number\n\n  BaseFeeDrops?: never\n  ReserveBaseDrops?: never\n  ReserveIncrementDrops?: never\n}\n\nexport interface SetFeePostAmendment extends TransactionCommonFields {\n  BaseFee?: never\n  ReferenceFeeUnits?: never\n  ReserveBase?: never\n  ReserveIncrement?: never\n\n  BaseFeeDrops: string\n  ReserveBaseDrops: string\n  ReserveIncrementDrops: string\n}\n\nexport const isPreAmendment = (\n  tx: SetFeePreAmendment | SetFeePostAmendment,\n): tx is SetFeePreAmendment => (tx as SetFeePostAmendment).BaseFee !== undefined\n\nexport type SetFee = SetFeePreAmendment | SetFeePostAmendment\n\nexport interface SetFeeInstructions {\n  fee: string\n  reserve: string\n  increment: string\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/SetHook/Simple.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { buildHookFlags } from '../../../transactionUtils'\nimport { Account } from '../../Account'\nimport { SimpleGroup } from '../SimpleGroup'\nimport { SimpleRow } from '../SimpleRow'\nimport { TransactionSimpleProps } from '../types'\nimport { HookData, SetHookInstructions } from './types'\nimport { hookOnToTxList } from './utils'\n\nexport const Simple = ({\n  data,\n}: TransactionSimpleProps<SetHookInstructions>) => {\n  const { hooks } = data.instructions\n  const { t } = useTranslation()\n\n  const renderHook = (hook: HookData) => (\n    <SimpleGroup title={t('hook')} key={hook.HookHash || hook.CreateCode}>\n      <SimpleRow label={t('hash')} data-testid=\"hook-hash\">\n        {hook.HookHash ?? 'undefined'}\n      </SimpleRow>\n      {hook.HookOn && (\n        <SimpleRow label={t('triggered_on')} data-testid=\"hook-on\">\n          {/* // TODO: use the transaction badges here instead of just text */}\n          {hookOnToTxList(hook.HookOn)?.join(', ') ?? <em>None</em>}\n        </SimpleRow>\n      )}\n      {hook.HookGrants && (\n        <SimpleRow label={t('grant')} data-testid=\"hook-grant\">\n          {hook.HookGrants.map((hookGrant) => {\n            const grant = hookGrant.HookGrant\n            return (\n              <div className=\"grant\" key={grant.HookHash}>\n                <div className=\"hash\">{grant.HookHash}</div>\n                {grant.Authorize && <Account account={grant.Authorize} />}\n              </div>\n            )\n          })}\n        </SimpleRow>\n      )}\n      {hook.HookNamespace && (\n        <SimpleRow label={t('namespace')} data-testid=\"hook-namespace\">\n          {hook.HookNamespace}\n        </SimpleRow>\n      )}\n      {hook.Flags && (\n        <SimpleRow label={t('flags')} data-testid=\"hook-flags\">\n          <em>{buildHookFlags(hook.Flags).join(', ')}</em>\n        </SimpleRow>\n      )}\n      {hook.HookApiVersion != null && (\n        <SimpleRow label={t('api_version')} data-testid=\"hook-api-version\">\n          {hook.HookApiVersion}\n        </SimpleRow>\n      )}\n    </SimpleGroup>\n  )\n\n  return <>{hooks.map(renderHook)}</>\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/SetHook/index.ts",
    "content": "import {\n  TransactionAction,\n  TransactionCategory,\n  TransactionMapping,\n} from '../types'\n\nimport { Simple } from './Simple'\nimport { parser } from './parser'\n\nexport const SetHookTransaction: TransactionMapping = {\n  Simple,\n  action: TransactionAction.CREATE,\n  category: TransactionCategory.ACCOUNT,\n  parser,\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/SetHook/parser.ts",
    "content": "import { SetHook, SetHookInstructions } from './types'\n\nexport const parser = (tx: SetHook, meta: any): SetHookInstructions => {\n  const hooks = tx.Hooks.map((hook) => hook.Hook)\n  const affectedNodes = meta.AffectedNodes.filter(\n    (node: any) =>\n      node.CreatedNode?.LedgerEntryType === 'Hook' ||\n      (node.ModifiedNode?.LedgerEntryType === 'Hook' &&\n        !!node.ModifiedNode?.PreviousFields?.Hooks),\n  )\n  const hashes = affectedNodes.flatMap((node: any) =>\n    (node.ModifiedNode?.FinalFields ?? node.CreatedNode?.NewFields)?.Hooks?.map(\n      (hook: any) => hook.Hook.HookHash,\n    ),\n  )\n  // TODO: there may be bugs here when a `HookHash` is already specified in a hook\n  // It's difficult to understand what situation that would be in, so this is left here for now\n  hashes.forEach((element, index) => {\n    if (hooks[index] != null) hooks[index].HookHash = element\n  })\n\n  return { hooks: hooks.filter((hook) => hook.CreateCode || hook.HookHash) }\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/SetHook/test/SetHookSimple.test.tsx",
    "content": "import { createSimpleRenderFactory } from '../../test/createWrapperFactory'\nimport { Simple } from '../Simple'\nimport mockSetHook from './mock_data/SetHook.json'\nimport mockSetHook2 from './mock_data/SetHook2.json'\nimport mockSetHookFailure from './mock_data/SetHookFailure.json'\nimport { expectSimpleRowText } from '../../test/expectations'\n\nconst renderComponent = createSimpleRenderFactory(Simple)\n\ndescribe('SetHookSimple', () => {\n  it('renders', () => {\n    const { container } = renderComponent(mockSetHook)\n\n    const groups = container.querySelectorAll('.group')\n    expect(groups).toHaveLength(2)\n\n    const hook1 = groups[0]\n    const hook2 = groups[1]\n\n    expectSimpleRowText(\n      hook1,\n      'hook-hash',\n      '4E57C7FE7A84ABFA53CFE411DE9BA3420B94F55038BF238EBE1EB89095ABA4DE',\n    )\n    expectSimpleRowText(hook1, 'hook-on', 'Invoke')\n    expectSimpleRowText(\n      hook1,\n      'hook-namespace',\n      '0000000000000000000000000000000000000000000000000000000000000000',\n    )\n    expectSimpleRowText(hook1, 'hook-flags', 'hsfOverride')\n    expectSimpleRowText(hook1, 'hook-api-version', '0')\n\n    expectSimpleRowText(\n      hook2,\n      'hook-hash',\n      'C04E2043B656B578CB30E9FF465304AF402B7AFE38B6CE2D8CEFECDD669E3424',\n    )\n    expectSimpleRowText(hook2, 'hook-on', '98')\n    expectSimpleRowText(\n      hook2,\n      'hook-namespace',\n      '0000000000000000000000000000000000000000000000000000000000000000',\n    )\n    expectSimpleRowText(hook2, 'hook-flags', 'hsfOverride')\n    expectSimpleRowText(hook2, 'hook-api-version', '0')\n  })\n\n  it('renders a different SetHook tx', () => {\n    const { container } = renderComponent(mockSetHook2)\n\n    const groups = container.querySelectorAll('.group')\n    expect(groups).toHaveLength(1)\n\n    const hook = groups[0]\n\n    expectSimpleRowText(\n      hook,\n      'hook-hash',\n      '548BBB700F5841C2D41E227456E8A80E6A6335D1149BA3B5FF745A00CC0EBECE',\n    )\n\n    const grants = hook.querySelectorAll('.grant')\n    expect(grants).toHaveLength(2)\n\n    const grant1 = grants[0]\n    const grant2 = grants[1]\n\n    expect(grant1.querySelector('.hash')).toHaveTextContent(\n      '096A70632BBB67488F4804AE55604A01F52226BD556E3589270D0D30C9A6AF81',\n    )\n    expect(grant1.querySelector('.account')).toHaveTextContent(\n      'rQUhXd7sopuga3taru3jfvc1BgVbscrb1X',\n    )\n    // .account IS the link itself (an anchor element with class account)\n    expect(grant1.querySelector('a.account')).toBeInTheDocument()\n\n    expect(grant2.querySelector('.hash')).toHaveTextContent(\n      '3F47684053E1A653E54EAC1C5F50BCBAF7F69078CEFB5846BB046CE44B8ECDC2',\n    )\n    expect(grant2.querySelector('.account')).toHaveTextContent(\n      'raPSFU999HcwpyRojdNh2i96T22gY9fgxL',\n    )\n    // .account IS the link itself (an anchor element with class account)\n    expect(grant2.querySelector('a.account')).toBeInTheDocument()\n  })\n\n  it('renders a failed SetHook tx', () => {\n    const { container } = renderComponent(mockSetHookFailure)\n\n    const groups = container.querySelectorAll('.group')\n    expect(groups).toHaveLength(1)\n\n    const hook = groups[0]\n\n    expectSimpleRowText(hook, 'hook-hash', 'undefined')\n\n    expectSimpleRowText(hook, 'hook-on', 'Payment')\n    expectSimpleRowText(\n      hook,\n      'hook-namespace',\n      'CAE662172FD450BB0CD710A769079C05BFC5D8E35EFA6576EDC7D0377AFDD4A2',\n    )\n    expectSimpleRowText(hook, 'hook-flags', 'hsfOverride')\n    expectSimpleRowText(hook, 'hook-api-version', '0')\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/SetHook/test/mock_data/SetHook.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh\",\n    \"Fee\": \"7644020\",\n    \"Flags\": 0,\n    \"Hooks\": [\n      {\n        \"Hook\": {\n          \"CreateCode\": \"0061736D0100000001420960027F7F017F60037F7F7F017E60037F7F7E017E60027F7F017E60047F7F7F7F017E60017F017E6000017E60057F7F7F7F7F017E60097F7F7F7F7F7F7F7F7F017E02BC021403656E76025F67000003656E760A6F74786E5F6669656C64000103656E7606616363657074000203656E7608726F6C6C6261636B000203656E760C686F6F6B5F6163636F756E74000303656E76057374617465000403656E760974726163655F6E756D000203656E760C6574786E5F72657365727665000503656E760973746174655F736574000403656E760A6C65646765725F736571000603656E760C6574786E5F64657461696C73000303656E760D6574786E5F6665655F62617365000303656E7604656D6974000403656E76096F74786E5F736C6F74000503656E760D736C6F745F7375626669656C64000103656E760D736C6F745F7375626172726179000103656E7604736C6F74000103656E76057472616365000703656E760B7574696C5F6B65796C6574000803656E7608736C6F745F7365740001030201050503010002063F0A7F0141F08A040B7F0041EC0A0B7F004180080B7F0041F08A040B7F004180080B7F0041B0090B7F0041D0090B7F0041A0090B7F004180080B7F0041F0090B07080104686F6F6B00140AB6D20001B2D20002047F017E230041B0186B22012400200120003602A41841012200200010001A2001200141A2186A410241828004100137039818200120012D00A31820012D00A2184110746A3602941820012802941841E30047044041002200200042CC0010021A0B41BC094114418180201001421452044041002200200042CF0010031A0B20014180186A411410041A200141002200200041D009412010053703F81741900A410C20012903F81710061A20012903F817427B510440410510071A200141053A00F717200141F7176A410141D009412010085004404100200042E20010031A0B41D00941FF013A000041A009410841D009412010085004404100200042E60010031A0B41D00941003A0000200141003602F017034041E980808078410610001A024020012802F01741054F0D0041EF0920012802F01741016A3A000020012802F017410574418C086A411441D00941201008421452044041002200200042F00010031A0B41EF09410120012802F0174105744180086A41201008420152044041002200200042F40010031A0B2001200141F0156A22003602EC1520014280C0F4C198AF0B3703C8152001410022023602C415200120023602C015200110093E02BC15200141D0156A411410041A200141003A00BB1520012802EC1541123A000020012802EC1520012D00BB154108763A000120012802EC1520012D00BB153A0002200120012802EC1541036A3602EC1520014180808080783602B415200141023A00B31520012802EC1520012D00B315410F7141206A3A000020012802EC1520012802B4154118763A000120012802EC1520012802B4154110763A000220012802EC1520012802B4154108763A000320012802EC1520012802B4153A0004200120012802EC1541056A3602EC15200120012802C0153602AC152001410322033A00AB1520012802EC1520012D00AB15410F7141206A3A000020012802EC1520012802AC154118763A000120012802EC1520012802AC154110763A000220012802EC1520012802AC154108763A000320012802EC1520012802AC153A0004200120012802EC1541056A3602EC15200120023602A415200141043A00A31520012802EC1520012D00A315410F7141206A3A000020012802EC1520012802A4154118763A000120012802EC1520012802A4154110763A000220012802EC1520012802A4154108763A000320012802EC1520012802A4153A0004200120012802EC1541056A3602EC15200120012802C41536029C152001410E3A009B1520012802EC1520012D009B15410F7141206A3A000020012802EC15200128029C154118763A000120012802EC15200128029C154110763A000220012802EC15200128029C154108763A000320012802EC15200128029C153A0004200120012802EC1541056A3602EC15200120012802BC1541016A360294152001411A3A00931520012802EC15412022023A000020012802EC1520012D0093153A000120012802EC152001280294154118763A000220012802EC152001280294154110763A000320012802EC152001280294154108763A000420012802EC152001280294153A0005200120012802EC1541066A3602EC15200120012802BC1541056A36028C152001411B3A008B1520012802EC1520023A000020012802EC1520012D008B153A000120012802EC15200128028C154118763A000220012802EC15200128028C154110763A000320012802EC15200128028C154108763A000420012802EC15200128028C153A0005200120012802EC1541066A3602EC152001410122023A008A15200120012903C8153703801520012802EC1520012D008A15410F7141E0006A3A000020012802EC15200129038015423888423F8342407D3C000120012802EC1520012903801542308842FF01833C000220012802EC1520012903801542288842FF01833C000320012802EC1520012903801542208842FF01833C000420012802EC1520012903801542188842FF01833C000520012802EC1520012903801542108842FF01833C000620012802EC1520012903801542088842FF01833C000720012802EC1520012903801542FF01833C0008200120012802EC1541096A3602EC15200120012802EC153602FC142001410822043A00FB14200142003703F01420012802EC1520012D00FB14410F7141E0006A3A000020012802EC1520012903F014423888423F8342407D3C000120012802EC1520012903F01442308842FF01833C000220012802EC1520012903F01442288842FF01833C000320012802EC1520012903F01442208842FF01833C000420012802EC1520012903F01442188842FF01833C000520012802EC1520012903F01442108842FF01833C000620012802EC1520012903F01442088842FF01833C000720012802EC1520012903F01442FF01833C0008200120012802EC1541096A3602EC1520012802EC1541F3003A000020012802EC1541213A000120012802EC15200537030220012802EC15200537030A20012802EC15200537031220012802EC152005370319200120012802EC1541236A3602EC15200120023A00EF1420012802EC1520012D00EF144180016A3A000020012802EC15411422023A000120012802EC1520012903D01537030220012802EC1520012903D81537030A20012802EC1520012802E015360212200120012802EC1541166A3602EC15200120033A00EE1420012802EC1520012D00EE144180016A3A000020012802EC1520023A000120012802EC1520012802F01741057429038C0837030220012802EC1520012802F0174105742903940837030A20012802EC1520012802F01741057428029C08360212200120012802EC1541166A3602EC15200120012802EC1541F8012202100A3703E014200120002002100B3703D814200120043A00D714200120012903D8143703C81420012802FC1420012D00D714410F7141E0006A3A000020012802FC1420012903C814423888423F8342407D3C000120012802FC1420012903C81442308842FF01833C000220012802FC1420012903C81442288842FF01833C000320012802FC1420012903C81442208842FF01833C000420012802FC1420012903C81442188842FF01833C000520012802FC1420012903C81442108842FF01833C000620012802FC1420012903C81442088842FF01833C000720012802FC1420012903C81442FF01833C0008200120012802FC1441096A3602FC142001200141A0146A412020002002100C37039814200520012903981459044041002200200042FD0010031A0B419D0A410B20012903981410061A200120012802F01741016A3602F0170C010B0B41002200200042820110021A0B024020012903801841BC09290300520D0020012903881841C409290300520D0020012802901841CC09280200470D004100200042890110021A0B20014100200041B009412010053703901420012903901442005304404100200042920110031A0B4101100D42015204404100200042960110031A0B41014193803C4102100E42025204404100200042970110031A0B4102220041002000100F420252044041002200200042990110031A0B41024198801C4103100E4203520440410022002000429A0110031A0B41024199801C4104100E4204520440410022002000429B0110031A0B2001200141900C6A2200418008410410103703880C41A90A41052202200020012903880CA7410110111A20014100220020004103101042FF01833703800C41AE0A200220012903800C10061A024020012903800C420159044020012903800C4219570D010B4100200042A40110031A0B2001200141DC0B6A3602CC0B2001027F410820012903800C4201510D001A4120411420012903800C420259047F20012903800C4205570520000B4101711B0B3A00CB0B41B00920012903800C3C000020012802CC0B41016B20012D00CB0B41016A4104101020012D00CB0B41016AAC5204404100200042B10110031A0B20012802CC0B41016B41003A00002001200141A00B6A20012D00CB0B41B00922004120220210053703980B20012802CC0B20012D00CB0B20002002100820012D00CB0BAD52044041002200200042BA0110031A0B024020012903980B20012D00CB0BAD520D0020012903A00B20012802CC0B290300520D0020012903A80B20012802CC0B290308520D0020012903B00B20012802CC0B290310520D0020012903B80B20012802CC0B290318520D0020012903C00B20012802CC0B290320520D0020012903C80B20012802CC0B290328520D0020012903D00B20012802CC0B290330520D0020012903D80B20012802CC0B290338520D0041002200200042BF0110021A0B20012903980B4200550440200141003A00970B200120012903800C3C00BF0B0240200141970B6A4101200141A00B6A41201005500D0020012D00970B450D00200120012D00970B41016B3A00970B200141970B6A4101200141A00B6A4120100850044041002200200042CF0110031A0B0B0B200141003A00960B200120012802CC0B2D001F3A00950B20012802CC0B20012903800C3C001F200141960B6A4101220020012802CC0B412010051A200120012D00960B20006A3A00960B200141960B6A410120012802CC0B4120100850044041002200200042DB0110031A0B20012802CC0B20012D00950B3A001F2001027F410020012802CC0B29030041F009290300520D001A410020012802CC0B29030841F809290300520D001A410020012802CC0B29031041800A290300520D001A410020012802CC0B29031841880A290300520D001A410020012802CC0B29032041900A290300520D001A410020012802CC0B29032841980A290300520D001A410020012802CC0B29033041A00A290300520D001A20012802CC0B29033841A80A290300510B4101713602900B41B40A410F20012802900BAC10061A41C40A4105220020012D00960BAD10061A41900A410C20012903F81710061A41AE0A200020012903800C10061A024020012903F81720012D00960BAD52044020012903800C4205570D0120012D00960BB720012903F817B9449A9999999999E93FA266450D010B41CA0A411141DC0A4110410010111A024020012903800C420151044041D00941FF013A000020012802CC0B410841D0094120100850044041002200200042F40110031A0B0C010B024020012903800C4205570440200120012903800C42027D3C008F0B200141E00A6A4122410120014180186A411441002200200020002000101242225204404100200042FD0110031A0B200141E00A6A41224105101342055204404100200042FE0110031A0B4105418B803C4106100E42065204404100200042810210031A0B410620012D008F0B4107100F42075104404107419F80144108100E42085204404100200042890210031A0B200141C00A6A412041081010422052044041002000428A0210031A0B024020012903C00A20012802CC0B290300520D0020012903C80A20012802CC0B290308520D0020012903D00A20012802CC0B290310520D0020012903D80A20012802CC0B290318520D0020012903E00A20012802CC0B290320520D0020012903E80A20012802CC0B290328520D0020012903F00A20012802CC0B290330520D0020012903F80A20012802CC0B290338520D0041002000428E0210021A0B0B200141E00A6A4122411820012802CC0B41204100200020002000101242225204404100200042920210031A0B200141E00A6A41224109101342095204404100200042950210031A0B410110071A200141A00A6A21022001027F417F20012802900B0D001A20012802CC0B0B3602BC0A2002027F20012D008F0B45044020012802BC0A0C010B41000B360200200241046A2200027F20012D008F0B410146044020012802BC0A0C010B41000B360200200041046A2200027F20012D008F0B410246044020012802BC0A0C010B41000B360200200041046A027F20012D008F0B410346044020012802BC0A0C010B41000B36020020014100220036029C022001200141A0026A220236029802200110093E02FC0120014180026A411410041A200141163A00FB0120012802980241123A000020012802980220012D00FB014108763A000120012802980220012D00FB013A0002200120012802980241036A3602980220014180808080783602F401200141023A00F30120012802980220012D00F301410F7141206A3A000020012802980220012802F4014118763A000120012802980220012802F4014110763A000220012802980220012802F4014108763A000320012802980220012802F4013A0004200120012802980241056A36029802200120003602EC01200141043A00EB0120012802980220012D00EB01410F7141206A3A000020012802980220012802EC014118763A000120012802980220012802EC014110763A000220012802980220012802EC014108763A000320012802980220012802EC013A0004200120012802980241056A36029802200120012802FC0141016A3602E4012001411A3A00E301200128029802412022033A000020012802980220012D00E3013A000120012802980220012802E4014118763A000220012802980220012802E4014110763A000320012802980220012802E4014108763A000420012802980220012802E4013A0005200120012802980241066A36029802200120012802FC0141056A3602DC012001411B3A00DB0120012802980220033A000020012802980220012D00DB013A000120012802980220012802DC014118763A000220012802980220012802DC014110763A000320012802980220012802DC014108763A000420012802980220012802DC013A0005200120012802980241066A3602980220012001280298023602D401200141083A00D301200142003703C80120012802980220012D00D301410F7141E0006A3A000020012802980220012903C801423888423F8342407D3C000120012802980220012903C80142308842FF01833C000220012802980220012903C80142288842FF01833C000320012802980220012903C80142208842FF01833C000420012802980220012903C80142188842FF01833C000520012802980220012903C80142108842FF01833C000620012802980220012903C80142088842FF01833C000720012802980220012903C80142FF01833C0008200120012802980241096A3602980220012802980241F3003A000020012802980241213A00012001280298022005370302200128029802200537030A20012802980220053703122001280298022005370319200120012802980241236A36029802200141013A00C70120012802980220012D00C7014180016A3A000020012802980241143A000120012802980220012903800237030220012802980220012903880237030A200128029802200128029002360212200120012802980241166A36029802200141800820012802980220026B6B3602C001200120012802980220012802C001100A3703B801200120012802980220012903B801A76A360298022001200128029802220241016A36029802200241FB013A0000200120012802A00A3602B4012001200128029802220241016A36029802200241EE013A0000200020012802B4014704402001200128029802220041016A36029802200041223A00002001200128029802220041016A360298022000410022003A00002001200128029802220241016A36029802200220003A00002001200128029802220241016A36029802200220003A00002001200128029802220041016A36029802200041013A0000024020012802B401417F4604402001200128029802220041016A36029802200041FB003A00002001200128029802220041016A36029802200041003A00000C010B2001200128029802220041016A360298022000411F3A0000200120012802B401220041016A3602B40120002D000021002001200128029802220241016A36029802200220003A0000200120012802B401220041016A3602B40120002D000021002001200128029802220241016A36029802200220003A0000200120012802B401220041016A3602B40120002D000021002001200128029802220241016A36029802200220003A0000200120012802B401220041016A3602B40120002D000021002001200128029802220241016A36029802200220003A0000200120012802B401220041016A3602B40120002D000021002001200128029802220241016A36029802200220003A0000200120012802B401220041016A3602B40120002D000021002001200128029802220241016A36029802200220003A0000200120012802B401220041016A3602B40120002D000021002001200128029802220241016A36029802200220003A0000200120012802B401220041016A3602B40120002D000021002001200128029802220241016A36029802200220003A0000200120012802B401220041016A3602B40120002D000021002001200128029802220241016A36029802200220003A0000200120012802B401220041016A3602B40120002D000021002001200128029802220241016A36029802200220003A0000200120012802B401220041016A3602B40120002D000021002001200128029802220241016A36029802200220003A0000200120012802B401220041016A3602B40120002D000021002001200128029802220241016A36029802200220003A0000200120012802B401220041016A3602B40120002D000021002001200128029802220241016A36029802200220003A0000200120012802B401220041016A3602B40120002D000021002001200128029802220241016A36029802200220003A0000200120012802B401220041016A3602B40120002D000021002001200128029802220241016A36029802200220003A0000200120012802B401220041016A3602B40120002D000021002001200128029802220241016A36029802200220003A00000B0B2001200128029802220041016A36029802200041E1013A0000200120012802A40A3602B0012001200128029802220041016A36029802200041EE013A000020012802B00104402001200128029802220041016A36029802200041223A00002001200128029802220041016A360298022000410022003A00002001200128029802220241016A36029802200220003A00002001200128029802220241016A36029802200220003A00002001200128029802220041016A36029802200041013A0000024020012802B001417F4604402001200128029802220041016A36029802200041FB003A00002001200128029802220041016A36029802200041003A00000C010B2001200128029802220041016A360298022000411F3A0000200120012802B001220041016A3602B00120002D000021002001200128029802220241016A36029802200220003A0000200120012802B001220041016A3602B00120002D000021002001200128029802220241016A36029802200220003A0000200120012802B001220041016A3602B00120002D000021002001200128029802220241016A36029802200220003A0000200120012802B001220041016A3602B00120002D000021002001200128029802220241016A36029802200220003A0000200120012802B001220041016A3602B00120002D000021002001200128029802220241016A36029802200220003A0000200120012802B001220041016A3602B00120002D000021002001200128029802220241016A36029802200220003A0000200120012802B001220041016A3602B00120002D000021002001200128029802220241016A36029802200220003A0000200120012802B001220041016A3602B00120002D000021002001200128029802220241016A36029802200220003A0000200120012802B001220041016A3602B00120002D000021002001200128029802220241016A36029802200220003A0000200120012802B001220041016A3602B00120002D000021002001200128029802220241016A36029802200220003A0000200120012802B001220041016A3602B00120002D000021002001200128029802220241016A36029802200220003A0000200120012802B001220041016A3602B00120002D000021002001200128029802220241016A36029802200220003A0000200120012802B001220041016A3602B00120002D000021002001200128029802220241016A36029802200220003A0000200120012802B001220041016A3602B00120002D000021002001200128029802220241016A36029802200220003A0000200120012802B001220041016A3602B00120002D000021002001200128029802220241016A36029802200220003A0000200120012802B001220041016A3602B00120002D000021002001200128029802220241016A36029802200220003A00000B0B2001200128029802220041016A36029802200041E1013A0000200120012802A80A3602AC012001200128029802220041016A36029802200041EE013A000020012802AC0104402001200128029802220041016A36029802200041223A00002001200128029802220041016A360298022000410022003A00002001200128029802220241016A36029802200220003A00002001200128029802220241016A36029802200220003A00002001200128029802220041016A36029802200041013A0000024020012802AC01417F4604402001200128029802220041016A36029802200041FB003A00002001200128029802220041016A36029802200041003A00000C010B2001200128029802220041016A360298022000411F3A0000200120012802AC01220041016A3602AC0120002D000021002001200128029802220241016A36029802200220003A0000200120012802AC01220041016A3602AC0120002D000021002001200128029802220241016A36029802200220003A0000200120012802AC01220041016A3602AC0120002D000021002001200128029802220241016A36029802200220003A0000200120012802AC01220041016A3602AC0120002D000021002001200128029802220241016A36029802200220003A0000200120012802AC01220041016A3602AC0120002D000021002001200128029802220241016A36029802200220003A0000200120012802AC01220041016A3602AC0120002D000021002001200128029802220241016A36029802200220003A0000200120012802AC01220041016A3602AC0120002D000021002001200128029802220241016A36029802200220003A0000200120012802AC01220041016A3602AC0120002D000021002001200128029802220241016A36029802200220003A0000200120012802AC01220041016A3602AC0120002D000021002001200128029802220241016A36029802200220003A0000200120012802AC01220041016A3602AC0120002D000021002001200128029802220241016A36029802200220003A0000200120012802AC01220041016A3602AC0120002D000021002001200128029802220241016A36029802200220003A0000200120012802AC01220041016A3602AC0120002D000021002001200128029802220241016A36029802200220003A0000200120012802AC01220041016A3602AC0120002D000021002001200128029802220241016A36029802200220003A0000200120012802AC01220041016A3602AC0120002D000021002001200128029802220241016A36029802200220003A0000200120012802AC01220041016A3602AC0120002D000021002001200128029802220241016A36029802200220003A0000200120012802AC01220041016A3602AC0120002D000021002001200128029802220241016A36029802200220003A00000B0B2001200128029802220041016A36029802200041E1013A0000200120012802AC0A3602A8012001200128029802220041016A36029802200041EE013A000020012802A80104402001200128029802220041016A36029802200041223A00002001200128029802220041016A360298022000410022003A00002001200128029802220241016A36029802200220003A00002001200128029802220241016A36029802200220003A00002001200128029802220041016A36029802200041013A0000024020012802A801417F4604402001200128029802220041016A36029802200041FB003A00002001200128029802220041016A36029802200041003A00000C010B2001200128029802220041016A360298022000411F3A0000200120012802A801220041016A3602A80120002D000021002001200128029802220241016A36029802200220003A0000200120012802A801220041016A3602A80120002D000021002001200128029802220241016A36029802200220003A0000200120012802A801220041016A3602A80120002D000021002001200128029802220241016A36029802200220003A0000200120012802A801220041016A3602A80120002D000021002001200128029802220241016A36029802200220003A0000200120012802A801220041016A3602A80120002D000021002001200128029802220241016A36029802200220003A0000200120012802A801220041016A3602A80120002D000021002001200128029802220241016A36029802200220003A0000200120012802A801220041016A3602A80120002D000021002001200128029802220241016A36029802200220003A0000200120012802A801220041016A3602A80120002D000021002001200128029802220241016A36029802200220003A0000200120012802A801220041016A3602A80120002D000021002001200128029802220241016A36029802200220003A0000200120012802A801220041016A3602A80120002D000021002001200128029802220241016A36029802200220003A0000200120012802A801220041016A3602A80120002D000021002001200128029802220241016A36029802200220003A0000200120012802A801220041016A3602A80120002D000021002001200128029802220241016A36029802200220003A0000200120012802A801220041016A3602A80120002D000021002001200128029802220241016A36029802200220003A0000200120012802A801220041016A3602A80120002D000021002001200128029802220241016A36029802200220003A0000200120012802A801220041016A3602A80120002D000021002001200128029802220241016A36029802200220003A0000200120012802A801220041016A3602A80120002D000021002001200128029802220241016A36029802200220003A00000B0B2001200128029802220041016A36029802200041E1013A00002001200128029802220041016A36029802200041F1013A00002001200128029802200141A0026A22006B36029C0220012000200128029C02100B3703A001200141083A009F01200120012903A0013703900120012802D40120012D009F01410F7141E0006A3A000020012802D401200129039001423888423F8342407D3C000120012802D40120012903900142308842FF01833C000220012802D40120012903900142288842FF01833C000320012802D40120012903900142208842FF01833C000420012802D40120012903900142188842FF01833C000520012802D40120012903900142108842FF01833C000620012802D40120012903900142088842FF01833C000720012802D40120012903900142FF01833C0008200120012802D40141096A3602D4012001200141F0006A41202000200128029C02100C370368419D0A410B200129036810061A0C010B41EF0920012903800C42067D3C00002001200141CC006A411441D0094120100542145136023C02400240200128023C450D0020012802900B0D000C010B20012903F817420057044041002200200042C20210031A0B0240200128023C0440200120012903F81742017D3703F8170C010B200120012903F81742017C3703F8170B200141F8176A410141F00941201008420152044041002200200042C90210031A0B0B200128023C044020014101360238034041CF82808078411A10001A0240200128023841194A0D00200120012802383A0040200141106A41202200200141406B200010054220510440200141003A000F2001410F6A4101200141106A412010054201510440024020012D000F41014D0440410022002000200141106A41201008504504404100200042DA0210031A0B0C010B200120012D000F41016B3A000F2001410F6A4101200141106A41201008420152044041002200200042DF0210031A0B0B0B410022002000200141406B41201008504504404100200042E40210031A0B0B2001200128023841016A3602380C010B0B0B20012802900B45044041EF0920012903800C42067D3C000020012802CC0B411441D00941201008421452044041002200200042EE0210031A0B41EF094101200141D00B6A41201008421452044041002200200042F10210031A0B0B0B0B0B41002200200042F80210021A20012903A8182105200141B0186A240020050B0BEC010600418C080B14C2F107E6E864D3906D0A088446FDDF8A7B2F569C0041AC080B149EEA73F5F0627E69397EC72E9A3C7804C0F2BF690041CC080B14C3E8E29AB62847275CED36EBF4E928DC25A07F240041EC080B14B7DA762DB9902E85199666B2E6C3009C5E27576900418C090B1CD70EF4D5021C7C646A98E84F60FED364A004453253CBD7A6250D78800041900A0B5B6D656D6265725F636F756E7400656D69745F726573756C740064756D7000746F70696300746F7069635F646174615F7A65726F00766F7465730022416374696F6E696E6720766F7465732200416374696F6E696E6720766F746573\",\n          \"Flags\": 1,\n          \"HookApiVersion\": 0,\n          \"HookNamespace\": \"0000000000000000000000000000000000000000000000000000000000000000\",\n          \"HookOn\": \"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFFFFFBFFFFF\",\n          \"HookHash\": \"4E57C7FE7A84ABFA53CFE411DE9BA3420B94F55038BF238EBE1EB89095ABA4DE\"\n        }\n      },\n      {\n        \"Hook\": {\n          \"CreateCode\": \"0061736D0100000001530C60017F017E60027F7F017F60037F7F7F017E60037F7F7E017E60027F7F017E60097F7F7F7F7F7F7F7F7F017E6000017E60047F7F7F7F017E60037E7E7F017E60027F7E017E60027E7E017E60037E7F7F017E02FF021703656E760C6574786E5F72657365727665000003656E76025F67000103656E760A6F74786E5F6669656C64000203656E7606616363657074000303656E760C686F6F6B5F6163636F756E74000403656E760B7574696C5F6B65796C6574000503656E7608736C6F745F736574000203656E760D736C6F745F7375626669656C64000203656E7604736C6F74000203656E76106C65646765725F6C6173745F74696D65000603656E7608726F6C6C6261636B000303656E760974726163655F6E756D000303656E760A6C65646765725F736571000603656E76057374617465000703656E760D666C6F61745F636F6D70617265000803656E7609666C6F61745F6F6E65000603656E7609666C6F61745F736574000903656E760C666C6F61745F646976696465000A03656E760E666C6F61745F6D756C7469706C79000A03656E7609666C6F61745F696E74000B03656E760C6574786E5F64657461696C73000403656E760D6574786E5F6665655F62617365000403656E7604656D697400070302010005030100020621057F0141A08A040B7F00419D0A0B7F004180080B7F0041A08A040B7F004180080B07080104686F6F6B00170AF0980001EC980002047F017E230041A0066B2201240020012000360294064101220010001A2000200010011A200120014180066A41104182800410023703F805200120012D00810620012D0080064110746A3602F40520012802F40541E200470440418008411E421810031A0B200141E0056A411422004181802010021A200141C0056A200010041A024020012903C00520012903E005520D0020012903C80520012903E805520D0020012802D00520012802F005470D00419E08411D422210031A0B20014190056A2202412222034103200141E0056A41144100220020002000200010051A200220034101220010061A200041E4800C41021007420252044041BB084121422D10031A0B410141E38008410310071A200041E48008410410071A200041828018410510071A200041E280084106220010071A20014100220220022000100837038805200110092001290388057D37038005200129038005423C530440200141E0046A220041166A41002901F608370100200041106A20022903F008370300200041086A20022903E808370300200020022903E0083703002001423C2001290380057D37038005200120012D00EE04AD20012903800542C0843D7F420A817C3C00EE04200120012D00EF04AD20012903800542A08D067F420A817C3C00EF04200120012D00F004AD2001290380054290CE007F420A817C3C00F004200120012D00F104AD20012903800542E8077F420A817C3C00F104200120012D00F204AD20012903800542E4007F420A817C3C00F204200120012D00F304AD200129038005420A7F420A817C3C00F304200120012D00F404AD200129038005420A817C3C00F4042000411E42C600100A1A0B2001410022002000410210083703D804200120002000410310083703D0042001200020004104220210083703C8042001200020004105220010083703C00441FE08410B20012903D804100B1A418A09200020012903D004100B1A419009200220012903C804100B1A024020012903D004420055044020012903C8044200550D010B419509411B42D500100A1A0B2001100C3703B804200120012903B80420012903D0047D3703B00420012903B0044200570440419509411B42DD00100A1A0B2001100C20012903C8047D3703A804200120012903C00442FFFFFFFFFFFFFFFF1F833703C004200120012903C00442C0843D7F3703C00441B009410320012903C004100B1A41FE08410B20012903D804100B1A024020012903C0044200570D0020012903A8044200570D00200120012903D80420012903C00420012903A8047E7C3703D8040B41FE08410B20012903D804100B1A200141FF013A008004200141002200200020014180046A4120100D3703F8030240024020012903F8034200570D0020012903F80342004102100E2005520D0020012903F803100F4104100E500D010B200142D5AA81AAE2F4F5E5D3003703F8030B20012903F8034200570440419509411B42FB00100A1A0B2001410020012903D80410103703F00320012903F0034200570440419509411B42FF00100A1A0B2001410020012903B00410103703E80320012903E8034200570440419509411B428201100A1A0B200120012903F00320012903E80310113703E003200120012903F80320012903E00310123703E00341B409410A20012903E003100B1A200120012903E0034106410010133703D80341BF09410C20012903D803100B1A2001200141E0016A22023602DC01200120012903D8033703B801200120003602B401200120003602B0012001100C3E02AC01200141C0016A411410041A200141003A00AB0120012802DC0141123A000020012802DC0120012D00AB014108763A000120012802DC0120012D00AB013A0002200120012802DC0141036A3602DC0120014180808080783602A401200141023A00A30120012802DC0120012D00A301410F7141206A3A000020012802DC0120012802A4014118763A000120012802DC0120012802A4014110763A000220012802DC0120012802A4014108763A000320012802DC0120012802A4013A0004200120012802DC0141056A3602DC01200120012802B00136029C012001410322033A009B0120012802DC0120012D009B01410F7141206A3A000020012802DC01200128029C014118763A000120012802DC01200128029C014110763A000220012802DC01200128029C014108763A000320012802DC01200128029C013A0004200120012802DC0141056A3602DC012001200036029401200141043A00930120012802DC0120012D009301410F7141206A3A000020012802DC012001280294014118763A000120012802DC012001280294014110763A000220012802DC012001280294014108763A000320012802DC012001280294013A0004200120012802DC0141056A3602DC01200120012802B40136028C012001410E3A008B0120012802DC0120012D008B01410F7141206A3A000020012802DC01200128028C014118763A000120012802DC01200128028C014110763A000220012802DC01200128028C014108763A000320012802DC01200128028C013A0004200120012802DC0141056A3602DC01200120012802AC0141016A360284012001411A3A00830120012802DC01412022003A000020012802DC0120012D0083013A000120012802DC012001280284014118763A000220012802DC012001280284014110763A000320012802DC012001280284014108763A000420012802DC012001280284013A0005200120012802DC0141066A3602DC01200120012802AC0141056A36027C2001411B3A007B20012802DC0120003A000020012802DC0120012D007B3A000120012802DC01200128027C4118763A000220012802DC01200128027C4110763A000320012802DC01200128027C4108763A000420012802DC01200128027C3A0005200120012802DC0141066A3602DC012001410122003A007A200120012903B80137037020012802DC0120012D007A410F7141E0006A3A000020012802DC012001290370423888423F8342407D3C000120012802DC01200129037042308842FF01833C000220012802DC01200129037042288842FF01833C000320012802DC01200129037042208842FF01833C000420012802DC01200129037042188842FF01833C000520012802DC01200129037042108842FF01833C000620012802DC01200129037042088842FF01833C000720012802DC01200129037042FF01833C0008200120012802DC0141096A3602DC01200120012802DC0136026C2001410822043A006B2001420037036020012802DC0120012D006B410F7141E0006A3A000020012802DC012001290360423888423F8342407D3C000120012802DC01200129036042308842FF01833C000220012802DC01200129036042288842FF01833C000320012802DC01200129036042208842FF01833C000420012802DC01200129036042188842FF01833C000520012802DC01200129036042108842FF01833C000620012802DC01200129036042088842FF01833C000720012802DC01200129036042FF01833C0008200120012802DC0141096A3602DC0120012802DC0141F3003A000020012802DC0141213A000120012802DC01200537030220012802DC01200537030A20012802DC01200537031220012802DC012005370319200120012802DC0141236A3602DC01200120003A005F20012802DC0120012D005F4180016A3A000020012802DC01411422003A000120012802DC0120012903C00137030220012802DC0120012903C80137030A20012802DC0120012802D001360212200120012802DC0141166A3602DC01200120033A005E20012802DC0120012D005E4180016A3A000020012802DC0120003A000120012802DC0120012903E00537030220012802DC0120012903E80537030A20012802DC0120012802F005360212200120012802DC0141166A3602DC01200120012802DC0141F801220010143703502001200220001015370348200120043A004720012001290348370338200128026C20012D0047410F7141E0006A3A0000200128026C2001290338423888423F8342407D3C0001200128026C200129033842308842FF01833C0002200128026C200129033842288842FF01833C0003200128026C200129033842208842FF01833C0004200128026C200129033842188842FF01833C0005200128026C200129033842108842FF01833C0006200128026C200129033842088842FF01833C0007200128026C200129033842FF01833C00082001200128026C41096A36026C2001200141106A412020022000101637030841CC09410B2001290308100B1A2001290308200555044041D8094129429A0110031A0B41810A411C429E01100A1A2001290398062105200141A0066A240020050B0BA40201004180080B9C025265776172643A2050617373696E67206E6F6E2D636C61696D2074786E005265776172643A2050617373696E67206F7574676F696E672074786E005265776172643A2050617373696E67207265776172642073657475702074786E0000000000596F75206D75737420776169742030303030303030207365636F6E647300616363756D756C61746F72006669727374006C617374005265776172643A20417373657274696F6E206661696C7572652E0062616C0078666C5F726577617264007265776172645F64726F707300656D69745F726573756C74005265776172643A20456D6974746564207265776172642074786E207375636365737366756C6C792E005265776172643A20456D697420726577617264206661696C65642E\",\n          \"Flags\": 1,\n          \"HookApiVersion\": 0,\n          \"HookNamespace\": \"0000000000000000000000000000000000000000000000000000000000000000\",\n          \"HookOn\": \"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFFFFFFBFFFFF\",\n          \"HookHash\": \"C04E2043B656B578CB30E9FF465304AF402B7AFE38B6CE2D8CEFECDD669E3424\"\n        }\n      },\n      {\n        \"Hook\": {\n          \"CreateCode\": \"\",\n          \"Flags\": 1\n        }\n      },\n      {\n        \"Hook\": {\n          \"CreateCode\": \"\",\n          \"Flags\": 1\n        }\n      },\n      {\n        \"Hook\": {\n          \"CreateCode\": \"\",\n          \"Flags\": 1\n        }\n      },\n      {\n        \"Hook\": {\n          \"CreateCode\": \"\",\n          \"Flags\": 1\n        }\n      },\n      {\n        \"Hook\": {\n          \"CreateCode\": \"\",\n          \"Flags\": 1\n        }\n      },\n      {\n        \"Hook\": {\n          \"CreateCode\": \"\",\n          \"Flags\": 1\n        }\n      },\n      {\n        \"Hook\": {\n          \"CreateCode\": \"\",\n          \"Flags\": 1\n        }\n      },\n      {\n        \"Hook\": {\n          \"CreateCode\": \"\",\n          \"Flags\": 1\n        }\n      }\n    ],\n    \"LastLedgerSequence\": 1955551,\n    \"NetworkID\": 21338,\n    \"Sequence\": 52,\n    \"SigningPubKey\": \"03799CADC441958EF655C7CF893638E8DF9F157925C0AD98981DFC55BC323FCBCE\",\n    \"TransactionType\": \"SetHook\",\n    \"TxnSignature\": \"3045022100FD1802C00CBEBB5CEF19C30A0023EFE12C807413D946B8194583CC100F1D12D9022079D049CE87CBCA8D157F6D5E8C077BD14B8DEBFA7B40EC37E53D758A6906CC3D\",\n    \"ctid\": \"C01DD6CD0000535A\",\n    \"date\": 1680778612000\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh\",\n            \"Balance\": \"1008078901610\",\n            \"Flags\": 1114112,\n            \"OwnerCount\": 2,\n            \"RegularKey\": \"rDADDYfnLvVY9FBnS8zFXhwYFHPuU5q2Sk\",\n            \"Sequence\": 53\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"2B6AC232AA4C4BE41BF49D2459FA4A0347E1B543A4C92FCEE0821C0201E2E9A8\",\n          \"PreviousFields\": {\n            \"Balance\": \"1008086545630\",\n            \"Sequence\": 52\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh\",\n            \"Flags\": 0,\n            \"Hooks\": [\n              {\n                \"Hook\": {\n                  \"Flags\": 0,\n                  \"HookHash\": \"4E57C7FE7A84ABFA53CFE411DE9BA3420B94F55038BF238EBE1EB89095ABA4DE\",\n                  \"HookOn\": \"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFFFFFBFFFFF\"\n                }\n              },\n              {\n                \"Hook\": {\n                  \"Flags\": 0,\n                  \"HookHash\": \"C04E2043B656B578CB30E9FF465304AF402B7AFE38B6CE2D8CEFECDD669E3424\",\n                  \"HookOn\": \"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFFFFFFBFFFFF\"\n                }\n              },\n              {\n                \"Hook\": {}\n              },\n              {\n                \"Hook\": {}\n              },\n              {\n                \"Hook\": {}\n              },\n              {\n                \"Hook\": {}\n              },\n              {\n                \"Hook\": {}\n              },\n              {\n                \"Hook\": {}\n              },\n              {\n                \"Hook\": {}\n              },\n              {\n                \"Hook\": {}\n              }\n            ],\n            \"OwnerNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"Hook\",\n          \"LedgerIndex\": \"469372BEE8814EC52CA2AECB5374AB57A47B53627E3C0E2ACBE3FDC78DBFEC7B\",\n          \"PreviousFields\": {\n            \"Hooks\": [\n              {\n                \"Hook\": {\n                  \"HookHash\": \"4E57C7FE7A84ABFA53CFE411DE9BA3420B94F55038BF238EBE1EB89095ABA4DE\"\n                }\n              },\n              {\n                \"Hook\": {\n                  \"HookHash\": \"C04E2043B656B578CB30E9FF465304AF402B7AFE38B6CE2D8CEFECDD669E3424\"\n                }\n              },\n              {\n                \"Hook\": {}\n              },\n              {\n                \"Hook\": {}\n              },\n              {\n                \"Hook\": {}\n              },\n              {\n                \"Hook\": {}\n              },\n              {\n                \"Hook\": {}\n              },\n              {\n                \"Hook\": {}\n              },\n              {\n                \"Hook\": {}\n              },\n              {\n                \"Hook\": {}\n              }\n            ]\n          }\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tesSUCCESS\"\n  },\n  \"hash\": \"12E9523791E48ABF1F8FF24771EF641F7E4BBE9D77BFA03AB1036517C041E569\",\n  \"ledger_index\": 1955533,\n  \"date\": 1680778612000\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/SetHook/test/mock_data/SetHook2.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rGVHr1PrfL93UAjyw3DWZoi9adz2sLp2yL\",\n    \"Fee\": \"20\",\n    \"Flags\": 0,\n    \"Hooks\": [\n      {\n        \"Hook\": {\n          \"HookGrants\": [\n            {\n              \"HookGrant\": {\n                \"Authorize\": \"rQUhXd7sopuga3taru3jfvc1BgVbscrb1X\",\n                \"HookHash\": \"096A70632BBB67488F4804AE55604A01F52226BD556E3589270D0D30C9A6AF81\"\n              }\n            },\n            {\n              \"HookGrant\": {\n                \"Authorize\": \"raPSFU999HcwpyRojdNh2i96T22gY9fgxL\",\n                \"HookHash\": \"3F47684053E1A653E54EAC1C5F50BCBAF7F69078CEFB5846BB046CE44B8ECDC2\"\n              }\n            }\n          ],\n          \"HookHash\": \"548BBB700F5841C2D41E227456E8A80E6A6335D1149BA3B5FF745A00CC0EBECE\"\n        }\n      }\n    ],\n    \"LastLedgerSequence\": 1976819,\n    \"NetworkID\": 21338,\n    \"Sequence\": 1784919,\n    \"SigningPubKey\": \"025137610C314DA06E4CD804541F2A7CDD0483EB85BA3F74067A026B5F170C8047\",\n    \"TransactionType\": \"SetHook\",\n    \"TxnSignature\": \"30450221008A7DD8DE50A7D107CF36DEA92D06B64926E865EADA243F18901DD7D9FB9D450D02203505F2C40D516D9208DF3172B6A45CB74C8DB0C18260C180B3185C7C872E0BAE\",\n    \"ctid\": \"C01E29E10000535A\",\n    \"date\": 1680842731000\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rGVHr1PrfL93UAjyw3DWZoi9adz2sLp2yL\",\n            \"Flags\": 0,\n            \"Hooks\": [\n              {\n                \"Hook\": {\n                  \"HookGrants\": [\n                    {\n                      \"HookGrant\": {\n                        \"Authorize\": \"rQUhXd7sopuga3taru3jfvc1BgVbscrb1X\",\n                        \"HookHash\": \"096A70632BBB67488F4804AE55604A01F52226BD556E3589270D0D30C9A6AF81\"\n                      }\n                    },\n                    {\n                      \"HookGrant\": {\n                        \"Authorize\": \"raPSFU999HcwpyRojdNh2i96T22gY9fgxL\",\n                        \"HookHash\": \"3F47684053E1A653E54EAC1C5F50BCBAF7F69078CEFB5846BB046CE44B8ECDC2\"\n                      }\n                    }\n                  ],\n                  \"HookHash\": \"548BBB700F5841C2D41E227456E8A80E6A6335D1149BA3B5FF745A00CC0EBECE\"\n                }\n              },\n              {\n                \"Hook\": {}\n              },\n              {\n                \"Hook\": {}\n              },\n              {\n                \"Hook\": {}\n              }\n            ],\n            \"OwnerNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"Hook\",\n          \"LedgerIndex\": \"0BCDDA47012D784783CE787017E103BA542DFC451168074C9AA4704016893ED4\",\n          \"PreviousFields\": {\n            \"Hooks\": [\n              {\n                \"Hook\": {\n                  \"Flags\": 0,\n                  \"HookHash\": \"548BBB700F5841C2D41E227456E8A80E6A6335D1149BA3B5FF745A00CC0EBECE\"\n                }\n              },\n              {\n                \"Hook\": {}\n              },\n              {\n                \"Hook\": {}\n              },\n              {\n                \"Hook\": {}\n              }\n            ]\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rGVHr1PrfL93UAjyw3DWZoi9adz2sLp2yL\",\n            \"Balance\": \"9879550122\",\n            \"Flags\": 0,\n            \"HookNamespaces\": [\n              \"01EAF09326B4911554384121FF56FA8FECC215FDDE2EC35D9E59F2C53EC665A0\"\n            ],\n            \"HookStateCount\": 74,\n            \"OwnerCount\": 78,\n            \"Sequence\": 1784920\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"BB71F3181F2B9D63FF4D7439AB82C32ABE4ED8F70CE00E0EFC68FD9C37149435\",\n          \"PreviousFields\": {\n            \"Balance\": \"9879550142\",\n            \"OwnerCount\": 76,\n            \"Sequence\": 1784919\n          }\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tesSUCCESS\"\n  },\n  \"hash\": \"62A6257455F2366CC54DE43EE40258E51FD1695459521D48DE70ECB4D53D677E\",\n  \"ledger_index\": 1976801,\n  \"date\": 1680842731000\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/SetHook/test/mock_data/SetHookFailure.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rXKD82Qx77BCMVNgQYak5i5bh8KDXVfvm\",\n    \"Fee\": \"133020\",\n    \"Flags\": 0,\n    \"Hooks\": [\n      {\n        \"Hook\": {\n          \"CreateCode\": \"0061736D01000000011C0460057F7F7F7F7F017E60037F7F7E017E60027F7F017F60017F017E02230303656E76057472616365000003656E7606616363657074000103656E76025F670002030201030503010002062B077F0141C088040B7F004180080B7F0041B2080B7F004180080B7F0041C088040B7F0041000B7F0041010B07080104686F6F6B00030AC1800001BD800001017F230041106B220124002001200036020C41A00841114180084110410010001A4190084110420910011A4101410110021A200141106A240042000B0B3801004180080B31426173652E633A2043616C6C65642E00626173653A2046696E69736865642E0022426173652E633A2043616C6C65642E22\",\n          \"Flags\": 1,\n          \"HookApiVersion\": 0,\n          \"HookNamespace\": \"CAE662172FD450BB0CD710A769079C05BFC5D8E35EFA6576EDC7D0377AFDD4A2\",\n          \"HookOn\": \"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFE\"\n        }\n      }\n    ],\n    \"LastLedgerSequence\": 4597710,\n    \"NetworkID\": 21338,\n    \"Sequence\": 4398843,\n    \"SigningPubKey\": \"032CDB60825AEE26E28B4BC916212BC206EF6992ED090728402554F6BEC3A169CF\",\n    \"TransactionType\": \"SetHook\",\n    \"TxnSignature\": \"304502210080A3AF02FC52935BFA746B374F38DBBF371DC69EC544A9230467993FA40384ED02205D544A5A4B924101C4F3E22CB89E95D21AC640DC8915C474AC046F4288F52B26\",\n    \"ctid\": \"C04627BC0000535A\",\n    \"date\": 1688754701000\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rXKD82Qx77BCMVNgQYak5i5bh8KDXVfvm\",\n            \"Balance\": \"1199990\",\n            \"Flags\": 0,\n            \"ImportSequence\": 39203734,\n            \"OwnerCount\": 0,\n            \"Sequence\": 4398844\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"B0B02F51EDE6BD9F0D7247955474A5B28AB8F9683811AFB3E9AFEF162440C8C5\",\n          \"PreviousFields\": {\n            \"Balance\": \"1333010\",\n            \"Sequence\": 4398843\n          }\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tecINSUFFICIENT_RESERVE\"\n  },\n  \"hash\": \"3015BB519D32BDD58CF2867E5F512A0D0532D9E9C93361EC51DA7C70B80549D3\",\n  \"ledger_index\": 4597692,\n  \"date\": 1688754701000\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/SetHook/test/utils.test.ts",
    "content": "import { hookOnToTxList } from '../utils'\n\ndescribe('SetHook utils', () => {\n  it('hookOnToTxList', () => {\n    expect(\n      hookOnToTxList(\n        '0000000000000000000000000000000000000000000000000000000000000000',\n      ),\n    ).toEqual(['All transactions'])\n    expect(\n      hookOnToTxList(\n        '0xfffffffffffffffffffffffffffffffffffffff7ffffffffffffffffff9affeb',\n      ),\n    ).toEqual([\n      'Invoke',\n      'AccountDelete',\n      'CheckCancel',\n      'CheckCreate',\n      'EscrowCancel',\n      'EscrowFinish',\n    ])\n    expect(\n      hookOnToTxList(\n        '0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbfffff',\n      ),\n    ).toEqual(undefined)\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/SetHook/types.ts",
    "content": "interface HookGrant {\n  HookGrant: {\n    HookHash: string\n    Authorize?: string\n  }\n}\n\ninterface HookParameter {\n  HookParameter: {\n    HookParameterName: string\n    HookParameterValue: string\n  }\n}\n\nexport interface HookData {\n  HookHash?: string\n  CreateCode?: string\n  Flags?: number\n  HookOn?: string\n  HookNamespace?: string\n  HookApiVersion?: number\n  HookParameters?: HookParameter[]\n  HookGrants?: HookGrant[]\n}\n\ninterface Hook {\n  Hook: HookData\n}\n\nexport interface SetHook {\n  TransactionType: 'SetHook'\n  Hooks: Hook[]\n}\n\nexport interface SetHookInstructions {\n  hooks: HookData[]\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/SetHook/utils.ts",
    "content": "import { zeroPad } from '../../../transactionUtils'\n\n// TODO: import from ripple-binary-codec\nconst TRANSACTION_TYPES: Record<string, number> = {\n  Invalid: -1,\n  Payment: 0,\n  EscrowCreate: 1,\n  EscrowFinish: 2,\n  AccountSet: 3,\n  EscrowCancel: 4,\n  SetRegularKey: 5,\n  NickNameSet: 6,\n  OfferCreate: 7,\n  OfferCancel: 8,\n  Contract: 9,\n  TicketCreate: 10,\n  TicketCancel: 11,\n  SignerListSet: 12,\n  PaymentChannelCreate: 13,\n  PaymentChannelFund: 14,\n  PaymentChannelClaim: 15,\n  CheckCreate: 16,\n  CheckCash: 17,\n  CheckCancel: 18,\n  DepositPreauth: 19,\n  TrustSet: 20,\n  AccountDelete: 21,\n  SetHook: 22,\n  NFTokenMint: 25,\n  NFTokenBurn: 26,\n  NFTokenCreateOffer: 27,\n  NFTokenCancelOffer: 28,\n  NFTokenAcceptOffer: 29,\n  Invoke: 99,\n  EnableAmendment: 100,\n  SetFee: 101,\n  UNLModify: 102,\n  EmitFailure: 103,\n}\n\nconst transactionMap = Object.entries(TRANSACTION_TYPES).reduce(\n  (flipped, [key, value]) => {\n    // eslint-disable-next-line no-param-reassign -- fine for a reduce\n    flipped[value] = key\n    return flipped\n  },\n  {} as Record<number, string>,\n)\n\nconst maxTransactionValue: number = 103\n\nfunction hex2bin(input) {\n  const hex = input.replace('0x', '').toLowerCase()\n  let bin = ''\n  for (let i = 0; i < hex.length; i += 1) {\n    const binFragment = parseInt(hex[i], 16).toString(2)\n    bin += binFragment.padStart(4, '0')\n  }\n  return bin\n}\n\nexport function hookOnToTxList(hookOn?: string): string[] | undefined {\n  if (hookOn == null) return undefined\n  if (\n    hookOn ===\n    '0000000000000000000000000000000000000000000000000000000000000000'\n  )\n    return ['All transactions']\n  const bits = hex2bin(hookOn).split('')\n\n  const txs = bits\n    .map((value, i) => {\n      const bin = zeroPad(1, 256 - i, true)\n      const int = Math.log2(parseInt(bin, 2))\n      // const type = i < 8 ? 'universal' : (i < 16 ? 'type_specific' : 'reserved');\n      const flagOn = int === 22 ? '1' : '0'\n      if (value === flagOn && int < maxTransactionValue)\n        return transactionMap[int] || int\n      return undefined\n    })\n    .filter((d) => Boolean(d)) as string[]\n  return txs.length === 0 ? undefined : txs\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/SetRegularKey/Description.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport type { SetRegularKey } from 'xrpl'\nimport { TransactionDescriptionProps } from '../types'\n\nexport const Description = ({\n  data,\n}: TransactionDescriptionProps<SetRegularKey>) => {\n  const { t } = useTranslation()\n  const key = data.tx.RegularKey\n\n  return key ? (\n    <div key=\"set_regular_key\">\n      {t('set_regular_key_description')}{' '}\n      <span className=\"regular-key\">{key}</span>\n    </div>\n  ) : (\n    <div key=\"unset_regular_key\">{t('unset_regular_key_description')}</div>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/SetRegularKey/Simple.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport type { SetRegularKey } from 'xrpl'\nimport { SimpleRow } from '../SimpleRow'\nimport { TransactionSimpleProps } from '../types'\n\nexport const Simple = ({ data }: TransactionSimpleProps<SetRegularKey>) => {\n  const { RegularKey: key } = data.instructions\n  const { t } = useTranslation()\n  let label = ''\n  let value = t('unset_regular_key')\n  let className: string | undefined = 'unset'\n\n  if (key) {\n    className = undefined\n    label = t('regular_key')\n    value = key\n  }\n  return (\n    <SimpleRow label={label} className={className}>\n      {value}\n    </SimpleRow>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/SetRegularKey/TableDetail.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport type { SetRegularKey } from 'xrpl'\nimport { TransactionTableDetailProps } from '../types'\n\nexport const TableDetail = ({\n  instructions,\n}: TransactionTableDetailProps<SetRegularKey>) => {\n  const { t } = useTranslation()\n  const { RegularKey: key } = instructions\n  return key ? (\n    <div className=\"setregularkey\">\n      <span className=\"label\">{t('regular_key')}</span>:\n      <span className=\"key\">{key}</span>\n    </div>\n  ) : (\n    <div className=\"unset\">{t('unset_regular_key')}</div>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/SetRegularKey/index.ts",
    "content": "import {\n  TransactionAction,\n  TransactionCategory,\n  TransactionMapping,\n} from '../types'\n\nimport { Simple } from './Simple'\nimport { Description } from './Description'\nimport { TableDetail } from './TableDetail'\n\nexport const SetRegularKeyTransaction: TransactionMapping = {\n  Description,\n  Simple,\n  TableDetail,\n  action: TransactionAction.MODIFY,\n  category: TransactionCategory.ACCOUNT,\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/SetRegularKey/test/SetRegularKeyDescription.test.tsx",
    "content": "import SetRegularKey from './mock_data/SetRegularKey.json'\nimport SetRegularKeyUnset from './mock_data/SetRegularKeyUnsetKey.json'\nimport { Description } from '../Description'\nimport { createDescriptionRenderFactory } from '../../test'\n\nconst renderComponent = createDescriptionRenderFactory(Description)\n\ndescribe('SetRegularKey: Description', () => {\n  it('renders description for transaction', () => {\n    const { container, unmount } = renderComponent(SetRegularKey)\n\n    expect(container.innerHTML).toBe(\n      `<div>set_regular_key_description <span class=\"regular-key\">rULyyLRoZ47P33Vapew67VoiRqPrZ2ejbp</span></div>`,\n    )\n    unmount()\n  })\n\n  it('renders description for transaction that unsets key', () => {\n    const { container, unmount } = renderComponent(SetRegularKeyUnset)\n\n    expect(container.innerHTML).toBe(`<div>unset_regular_key_description</div>`)\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/SetRegularKey/test/SetRegularKeySimple.test.tsx",
    "content": "import SetRegularKey from './mock_data/SetRegularKey.json'\nimport SetRegularKeyUnset from './mock_data/SetRegularKeyUnsetKey.json'\nimport { Simple } from '../Simple'\nimport { createSimpleRenderFactory } from '../../test'\n\nconst renderComponent = createSimpleRenderFactory(Simple)\n\ndescribe('SetRegularKey: Simple', () => {\n  it('renders Simple for transaction', () => {\n    const { container, unmount } = renderComponent(SetRegularKey)\n\n    // The SimpleRow doesn't have a data-testid, so we use the row structure\n    const row = container.querySelector('.row')\n    expect(row?.querySelector('.label')).toHaveTextContent('regular_key')\n    expect(row?.querySelector('.value')).toHaveTextContent(\n      'rULyyLRoZ47P33Vapew67VoiRqPrZ2ejbp',\n    )\n    unmount()\n  })\n\n  it('renders Simple for transaction that unsets key', () => {\n    const { container, unmount } = renderComponent(SetRegularKeyUnset)\n\n    expect(container.querySelector('.unset')).toHaveTextContent(\n      'unset_regular_key',\n    )\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/SetRegularKey/test/SetRegularKeyTableDetail.test.tsx",
    "content": "import SetRegularKey from './mock_data/SetRegularKey.json'\nimport SetRegularKeyUnset from './mock_data/SetRegularKeyUnsetKey.json'\nimport { TableDetail } from '../TableDetail'\nimport { createTableDetailRenderFactory } from '../../test'\n\nconst renderComponent = createTableDetailRenderFactory(TableDetail)\n\ndescribe('SetRegularKeyTable: Detail', () => {\n  it('renders Simple for transaction', () => {\n    const { container, unmount } = renderComponent(SetRegularKey)\n\n    expect(container.querySelector('.setregularkey')).toBeInTheDocument()\n    expect(container.querySelector('.label')).toHaveTextContent('regular_key')\n    expect(container.querySelector('.key')).toHaveTextContent(\n      'rULyyLRoZ47P33Vapew67VoiRqPrZ2ejbp',\n    )\n    unmount()\n  })\n\n  it('renders Simple for transaction that unsets key', () => {\n    const { container, unmount } = renderComponent(SetRegularKeyUnset)\n\n    expect(container.querySelector('.unset')).toBeInTheDocument()\n    expect(container).toHaveTextContent('unset_regular_key')\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/SetRegularKey/test/mock_data/SetRegularKey.json",
    "content": "{\n  \"hash\": \"B10C4D6361B12B7F530ED6748293F869B50805BB66569577D2A4C0C1DF0F7E17\",\n  \"ledger_index\": 37395801,\n  \"date\": \"2018-03-22T00:30:40+00:00\",\n  \"tx\": {\n    \"TransactionType\": \"SetRegularKey\",\n    \"Flags\": 2147483648,\n    \"Sequence\": 241,\n    \"LastLedgerSequence\": 37395803,\n    \"Fee\": \"12\",\n    \"SigningPubKey\": \"02BCECFFE1500B42FF986A6B3DA4FCA5A7151612DFB789F1686459E23AF8E4FA58\",\n    \"TxnSignature\": \"304402205EA3A2DBE71F9C1B5C1476C330E12AE17FF4B675BA66CC827352B252A7FCDAF002205CD260A8AF4E41356D7D33A6841452C182E03477DD797A121F518313587E2ACB\",\n    \"Account\": \"rJULrKT4wYLmKUdQoxT4cT36jX7U1F5HPY\",\n    \"RegularKey\": \"rULyyLRoZ47P33Vapew67VoiRqPrZ2ejbp\"\n  },\n  \"meta\": {\n    \"TransactionIndex\": 15,\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"PreviousTxnLgrSeq\": 35590787,\n          \"PreviousTxnID\": \"AAECDADC5812CFF3DCE3519D87C454EA17779E118253E501839621D857591BD4\",\n          \"LedgerIndex\": \"FE291E930877788ED7459851C4FA446ED76B70CDD52CF7418DC810B2878B907B\",\n          \"PreviousFields\": {\n            \"Flags\": 0,\n            \"Sequence\": 281,\n            \"Balance\": \"1343294223\"\n          },\n          \"FinalFields\": {\n            \"Flags\": 65536,\n            \"Sequence\": 2,\n            \"OwnerCount\": 0,\n            \"Balance\": \"1343294211\",\n            \"Account\": \"rJULrKT4wYLmKUdQoxT4cT36jX7U1F5HPY\",\n            \"RegularKey\": \"rULyyLRoZ47P33Vapew67VoiRqPrZ2ejbp\"\n          }\n        }\n      }\n    ],\n    \"TransactionResult\": \"tesSUCCESS\"\n  }\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/SetRegularKey/test/mock_data/SetRegularKeyUnsetKey.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rE12hfBBrbHQqvwdMA79myJY9zptfcYVet\",\n    \"Fee\": \"10\",\n    \"Flags\": 0,\n    \"LastLedgerSequence\": 30470857,\n    \"Sequence\": 30470836,\n    \"SigningPubKey\": \"EDDFECD12D5FD37077317FB606ECAD376EA86C13483F05277FE6D21E6D5F5B7392\",\n    \"TransactionType\": \"SetRegularKey\",\n    \"TxnSignature\": \"E1DE9E330BB0CDCADB2D8ADF1272B0D7FAB4D05B94737322C75A1A7EA199E77989A47195E433A948B2B6699952CE7CE0C98D981F886442DD9FB8DD982EDC560C\",\n    \"date\": \"2022-08-19T21:56:31Z\"\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rE12hfBBrbHQqvwdMA79myJY9zptfcYVet\",\n            \"Balance\": \"999999990\",\n            \"Flags\": 65536,\n            \"OwnerCount\": 0,\n            \"Sequence\": 30470837\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"8E374AFB0800E189D0384D3176F2AA54E18CCF1270193E162B07120FD8242855\",\n          \"PreviousFields\": {\n            \"Balance\": \"1000000000\",\n            \"Flags\": 0,\n            \"Sequence\": 30470836\n          },\n          \"PreviousTxnID\": \"E7A64C3635B9FA5CD235DAB9443A2B849653DBAA168BA05211D0C66918C3C1CA\",\n          \"PreviousTxnLgrSeq\": 30470836\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tesSUCCESS\"\n  },\n  \"hash\": \"1D25137B9384C89C7991C1EC702EAD285AB964F172B2D2AF9CBC51F63BD14AC4\",\n  \"ledger_index\": 30470839,\n  \"date\": \"2022-08-19T21:56:31Z\"\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/SignerListSet/Description.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport type { SignerListSet } from 'xrpl'\nimport { Account } from '../../Account'\nimport { TransactionDescriptionProps } from '../types'\n\nexport const Description = ({\n  data,\n}: TransactionDescriptionProps<SignerListSet>) => {\n  const { tx } = data\n  const { t } = useTranslation()\n  return tx.SignerQuorum === 0 ? (\n    <div>{t('unset_signer_list_description')}</div>\n  ) : (\n    <>\n      <div>\n        {t('set_signer_list_description', { quorum: tx.SignerQuorum })}:\n      </div>\n      <ul className=\"signers\">\n        {tx.SignerEntries?.map((d) => (\n          <li key={d.SignerEntry.Account}>\n            <Account account={d.SignerEntry.Account} />\n            <span className=\"label\">{` - ${t('weight')}: `}</span>\n            <span>{d.SignerEntry.SignerWeight}</span>\n          </li>\n        ))}\n      </ul>\n    </>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/SignerListSet/Simple.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { Account } from '../../Account'\nimport { SimpleRow } from '../SimpleRow'\nimport { TransactionSimpleProps } from '../types'\nimport { SignerListSetInstructions } from './types'\n\nexport const Simple = ({\n  data,\n}: TransactionSimpleProps<SignerListSetInstructions>) => {\n  const { quorum, maxSigners, signers } = data.instructions\n  const { t } = useTranslation()\n\n  return signers?.length ? (\n    <>\n      <SimpleRow label={t('signers')} data-testid=\"signers\">\n        <ul className=\"signers\">\n          {signers.map((d) => (\n            <li key={d.account}>\n              <Account account={d.account} />\n              <span className=\"label\">{` ${t('weight')}: `}</span>\n              <small>{d.weight}</small>\n            </li>\n          ))}\n        </ul>\n      </SimpleRow>\n      <SimpleRow label={t('quorum')} data-testid=\"quorum\">\n        {quorum}\n        <span className=\"label\"> {t('out_of')} </span>\n        {maxSigners}\n      </SimpleRow>\n    </>\n  ) : (\n    <SimpleRow label=\"\" className=\"unset\">\n      {t('unset_signer_list')}\n    </SimpleRow>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/SignerListSet/TableDetail.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { TransactionTableDetailProps } from '../types'\nimport { SignerListSetInstructions } from './types'\n\nexport const TableDetail = ({\n  instructions,\n}: TransactionTableDetailProps<SignerListSetInstructions>) => {\n  const { t } = useTranslation()\n  const { quorum, maxSigners, signers } = instructions\n  return signers?.length ? (\n    <>\n      <span className=\"label\">{t('signers')}:</span>{' '}\n      <span>{signers.length}</span>\n      {' - '}\n      <span className=\"label\">{t('quorum')}:</span>{' '}\n      <span>{`${quorum}/${maxSigners}`}</span>\n    </>\n  ) : (\n    <div className=\"unset\">{t('unset_signer_list')}</div>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/SignerListSet/index.ts",
    "content": "import {\n  TransactionAction,\n  TransactionCategory,\n  TransactionMapping,\n} from '../types'\n\nimport { Simple } from './Simple'\nimport { Description } from './Description'\nimport { parser } from './parser'\nimport { TableDetail } from './TableDetail'\n\nexport const SignerListSetTransaction: TransactionMapping = {\n  Description,\n  Simple,\n  TableDetail,\n  action: TransactionAction.MODIFY,\n  category: TransactionCategory.ACCOUNT,\n  parser,\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/SignerListSet/parser.ts",
    "content": "import type { SignerListSet } from 'xrpl'\nimport { SignerListSetInstructions } from './types'\nimport { TransactionParser } from '../types'\nimport { formatSignerList } from '../../../../../rippled/lib/formatSignerList'\n\nexport const parser: TransactionParser<\n  SignerListSet,\n  SignerListSetInstructions\n> = (tx) => formatSignerList(tx)\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/SignerListSet/test/SignerListSetDescription.test.tsx",
    "content": "import mockSignerListSetClear from './mock_data/SignerListSetClear.json'\nimport mockSignerListSet from './mock_data/SignerListSet.json'\nimport { Description } from '../Description'\nimport { createDescriptionRenderFactory } from '../../test'\n\nconst renderComponent = createDescriptionRenderFactory(Description)\n\ndescribe('SignerListSet: Description', () => {\n  it('renders', () => {\n    const { container, unmount } = renderComponent(mockSignerListSet)\n\n    expect(container.querySelector('div')).toHaveTextContent(\n      'set_signer_list_description:',\n    )\n\n    const signers = container.querySelectorAll('.signers li')\n    expect(signers[0]).toHaveTextContent(\n      'rK8MWkYVgHR6VmPH6WpWcvVce9evvMpKSv - weight: 2',\n    )\n    expect(signers[1]).toHaveTextContent(\n      'rLoRH7XuBgz2kTP1ACkoyVYk9hsLggVvbP - weight: 1',\n    )\n    expect(signers[2]).toHaveTextContent(\n      'rL6SsrxyVp1JLNEZsX1hFWHcP2iJcZJ2dy - weight: 1',\n    )\n    unmount()\n  })\n\n  it('renders when signer list is cleared', () => {\n    const { container, unmount } = renderComponent(mockSignerListSetClear)\n    expect(container).toHaveTextContent('unset_signer_list_description')\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/SignerListSet/test/SignerListSetSimple.test.tsx",
    "content": "import { Simple } from '../Simple'\nimport mockSignerListSetClear from './mock_data/SignerListSetClear.json'\nimport mockSignerListSet from './mock_data/SignerListSet.json'\nimport { createSimpleRenderFactory } from '../../test/createWrapperFactory'\n\nconst renderComponent = createSimpleRenderFactory(Simple)\n\ndescribe('SignerListSet: Simple', () => {\n  it('renders', () => {\n    const { container, unmount } = renderComponent(mockSignerListSet)\n\n    expect(\n      container.querySelector('[data-testid=\"quorum\"] .value'),\n    ).toHaveTextContent('3 out_of 4')\n\n    const signers = container.querySelectorAll(\n      '[data-testid=\"signers\"] .value li',\n    )\n    expect(signers[0]).toHaveTextContent(\n      'rK8MWkYVgHR6VmPH6WpWcvVce9evvMpKSv weight: 2',\n    )\n    expect(signers[1]).toHaveTextContent(\n      'rLoRH7XuBgz2kTP1ACkoyVYk9hsLggVvbP weight: 1',\n    )\n    expect(signers[2]).toHaveTextContent(\n      'rL6SsrxyVp1JLNEZsX1hFWHcP2iJcZJ2dy weight: 1',\n    )\n    unmount()\n  })\n\n  it('renders when signer list is cleared', () => {\n    const { container, unmount } = renderComponent(mockSignerListSetClear)\n    expect(container).toHaveTextContent('unset_signer_list')\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/SignerListSet/test/SignerListSetTableDetail.test.tsx",
    "content": "import { TableDetail } from '../TableDetail'\nimport mockSignerListSetClear from './mock_data/SignerListSetClear.json'\nimport mockSignerListSet from './mock_data/SignerListSet.json'\n\nimport { createTableDetailRenderFactory } from '../../test'\n\nconst renderComponent = createTableDetailRenderFactory(TableDetail)\n\ndescribe('SignerListSet: TableDetail', () => {\n  it('renders', () => {\n    const { container, unmount } = renderComponent(mockSignerListSet)\n    expect(container).toHaveTextContent('signers: 3 - quorum: 3/4')\n    unmount()\n  })\n\n  it('renders when signer list is cleared', () => {\n    const { container, unmount } = renderComponent(mockSignerListSetClear)\n    expect(container).toHaveTextContent('unset_signer_list')\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/SignerListSet/test/mock_data/SignerListSet.json",
    "content": "{\n  \"hash\": \"5988C2790600974A277DE9748BB2D52D3531A8CC6C7C5DB6A1CEF6486FC86A31\",\n  \"ledger_index\": 37375929,\n  \"date\": \"2018-03-21T04:32:01+00:00\",\n  \"tx\": {\n    \"TransactionType\": \"SignerListSet\",\n    \"Flags\": 0,\n    \"Sequence\": 251,\n    \"SignerQuorum\": 3,\n    \"Fee\": \"10000\",\n    \"SigningPubKey\": \"022B4444D353A98D3A3BCCA5D9683004FEF876DB5D5038CC9091DA4DB040595F5E\",\n    \"TxnSignature\": \"3045022100A364318D2F6A37BF4221D2086121E9154723FA57F9F549EFF878577F3CE2C139022018A115B24F4F084645A2A0BA4605F8DC30C421BF055C04E44AC3E7A08277894F\",\n    \"Account\": \"radE4Xd2RpQTBAx6YkpWbb7Z3fkcAgsHpK\",\n    \"SignerEntries\": [\n      {\n        \"SignerEntry\": {\n          \"SignerWeight\": 2,\n          \"Account\": \"rK8MWkYVgHR6VmPH6WpWcvVce9evvMpKSv\"\n        }\n      },\n      {\n        \"SignerEntry\": {\n          \"SignerWeight\": 1,\n          \"Account\": \"rLoRH7XuBgz2kTP1ACkoyVYk9hsLggVvbP\"\n        }\n      },\n      {\n        \"SignerEntry\": {\n          \"SignerWeight\": 1,\n          \"Account\": \"rL6SsrxyVp1JLNEZsX1hFWHcP2iJcZJ2dy\"\n        }\n      }\n    ]\n  },\n  \"meta\": {\n    \"TransactionIndex\": 22,\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"PreviousTxnLgrSeq\": 37356198,\n          \"PreviousTxnID\": \"DCA0D15C6D6FA40FCCAABD185FEE0568657648F2D65BD0BF2A6BFF1EBF802E1A\",\n          \"LedgerIndex\": \"B5530506FA862EEE6BC12C49D58CAA6B21A3F1DC948740C48AB3C4D2C5FAF1CE\",\n          \"PreviousFields\": {\n            \"Sequence\": 291,\n            \"Balance\": \"30000000\"\n          },\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Sequence\": 2,\n            \"OwnerCount\": 0,\n            \"Balance\": \"29990000\",\n            \"Account\": \"radE4Xd2RpQTBAx6YkpWbb7Z3fkcAgsHpK\"\n          }\n        }\n      }\n    ],\n    \"TransactionResult\": \"tecINSUFFICIENT_RESERVE\"\n  }\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/SignerListSet/test/mock_data/SignerListSetClear.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rfqdGwfvJa4aigQuUtSQ8w41Hwp3cNeaB5\",\n    \"Fee\": \"40\",\n    \"Flags\": 0,\n    \"Sequence\": 30736717,\n    \"SignerQuorum\": 0,\n    \"Signers\": [\n      {\n        \"Signer\": {\n          \"Account\": \"rfB488TCijrPy8bL61FcjEUFd85g4J71pn\",\n          \"SigningPubKey\": \"ED0615EDB8827E8EF390B74184F6EA457CB2F05D9A8282E9230AB7CB63601C0AF0\",\n          \"TxnSignature\": \"87844C2CBD75FB8C8B7776C2F0930EF3993011A079F499FFC2376CE7AADAAC11C76D1CD5DE3B5D669E077DB32AA561651E8EA0CB509824815334360D2941970A\"\n        }\n      },\n      {\n        \"Signer\": {\n          \"Account\": \"rPMiudFt7phyRFU1JguSjEjKj9iRCoYiSM\",\n          \"SigningPubKey\": \"EDB4B8DAF41E246A17AE204D98EDFB1CA649B05968D88459CD2808456608044CF3\",\n          \"TxnSignature\": \"07CA5BD5F4406CF654CD160093E008864C60B973C1346E12F8EB977B8062B151B53D357F666530AA2FA4A295548BA9423ABBBAF9BC5DF0CB6DFC6008123B330D\"\n        }\n      }\n    ],\n    \"SigningPubKey\": \"\",\n    \"TransactionType\": \"SignerListSet\",\n    \"date\": \"2022-08-29T19:19:03Z\"\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rfqdGwfvJa4aigQuUtSQ8w41Hwp3cNeaB5\",\n            \"Balance\": \"999999950\",\n            \"Flags\": 0,\n            \"OwnerCount\": 0,\n            \"Sequence\": 30736718\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"DD6EE44028F30E5557965EC805D022B3B1CAF36543A2B849BA283DDFC615175A\",\n          \"PreviousFields\": {\n            \"Balance\": \"999999990\",\n            \"OwnerCount\": 1,\n            \"Sequence\": 30736717\n          },\n          \"PreviousTxnID\": \"DD54ACD593E5D51CEF1852D75F64C0527DCCF953379D369EE9700BE97582383D\",\n          \"PreviousTxnLgrSeq\": 30736725\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 65536,\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"DD54ACD593E5D51CEF1852D75F64C0527DCCF953379D369EE9700BE97582383D\",\n            \"PreviousTxnLgrSeq\": 30736725,\n            \"SignerEntries\": [\n              {\n                \"SignerEntry\": {\n                  \"Account\": \"rfB488TCijrPy8bL61FcjEUFd85g4J71pn\",\n                  \"SignerWeight\": 1\n                }\n              },\n              {\n                \"SignerEntry\": {\n                  \"Account\": \"rPMiudFt7phyRFU1JguSjEjKj9iRCoYiSM\",\n                  \"SignerWeight\": 1\n                }\n              }\n            ],\n            \"SignerListID\": 0,\n            \"SignerQuorum\": 2\n          },\n          \"LedgerEntryType\": \"SignerList\",\n          \"LedgerIndex\": \"F20512913DEDE42B2A899648F6395D451D28A6F92399F7D7CFD8AE8A5265381E\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rfqdGwfvJa4aigQuUtSQ8w41Hwp3cNeaB5\",\n            \"RootIndex\": \"FB4A6DC18FC438747FFDD0AFE9B3728D582F981C29D864D3F11E8C20577A40B0\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"FB4A6DC18FC438747FFDD0AFE9B3728D582F981C29D864D3F11E8C20577A40B0\"\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tesSUCCESS\"\n  },\n  \"hash\": \"AB715572A238301FA8F29F06726290B6FE46C92C3E09083C0348D2393C908627\",\n  \"ledger_index\": 30736727,\n  \"date\": \"2022-08-29T19:19:03Z\"\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/SignerListSet/types.ts",
    "content": "export interface SignerInstruction {\n  account: string\n  weight: number\n}\n\nexport interface SignerListSetInstructions {\n  quorum: number\n  maxSigners: number\n  signers: SignerInstruction[]\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/SimpleGroup.tsx",
    "content": "export type SimpleGroupProps = React.PropsWithChildren<{\n  children: any\n  title?: string\n}>\n\nexport const SimpleGroup = ({ children, title }: SimpleGroupProps) => (\n  <div className=\"group\" data-testid=\"group\">\n    {title && <div className=\"group-title\">{title}</div>}\n    {children}\n  </div>\n)\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/SimpleRow.tsx",
    "content": "import { PropsWithChildren } from 'react'\nimport classnames from 'classnames'\n\nexport type SimpleRowProps = PropsWithChildren<{\n  className?: string\n  label: string\n  'data-testid'?: string\n}>\n\nexport const SimpleRow = (props: SimpleRowProps) => {\n  const { label, children, className, 'data-testid': dataTestId } = props\n  return (\n    <div className=\"row\" data-testid={dataTestId}>\n      <div className=\"label\">{label}</div>\n      <div className={classnames(`value`, className)}>{children}</div>\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/TicketCreate/Simple.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport type { TicketCreate } from 'xrpl'\nimport { TransactionSimpleComponent, TransactionSimpleProps } from '../types'\nimport { SimpleRow } from '../SimpleRow'\n\nconst Simple: TransactionSimpleComponent = (\n  props: TransactionSimpleProps<TicketCreate>,\n) => {\n  const { t } = useTranslation()\n  const { data } = props\n  const { TicketCount } = data.instructions\n\n  return (\n    <SimpleRow label={t('ticket_count')} data-testid=\"ticket-count\">\n      {TicketCount}\n    </SimpleRow>\n  )\n}\n\nexport { Simple }\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/TicketCreate/TableDetail.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport type { TicketCreate } from 'xrpl'\nimport { TransactionTableDetailProps } from '../types'\n\nexport const TableDetail = ({\n  instructions,\n}: TransactionTableDetailProps<TicketCreate>) => {\n  const { t } = useTranslation()\n  const { TicketCount } = instructions\n  return (\n    <div className=\"ticketCreate\">\n      <span className=\"label\">{t('ticket_count')}: </span>\n      <span>{TicketCount}</span>\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/TicketCreate/index.ts",
    "content": "import {\n  TransactionAction,\n  TransactionCategory,\n  TransactionMapping,\n} from '../types'\n\nimport { Simple } from './Simple'\nimport { TableDetail } from './TableDetail'\n\nexport const TicketCreateTransaction: TransactionMapping = {\n  Simple,\n  TableDetail,\n  action: TransactionAction.CREATE,\n  category: TransactionCategory.ACCOUNT,\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/TicketCreate/test/TicketCreateSimple.test.tsx",
    "content": "import { createSimpleRenderFactory, expectSimpleRowText } from '../../test'\nimport { Simple } from '../Simple'\nimport TicketCreate from './mock_data/TicketCreate.json'\n\nconst renderComponent = createSimpleRenderFactory(Simple)\n\ndescribe('TicketCreate: Simple', () => {\n  it('renders ticket count', () => {\n    const { container, unmount } = renderComponent(TicketCreate)\n    expectSimpleRowText(container, 'ticket-count', '1')\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/TicketCreate/test/TicketCreateTableDetail.test.tsx",
    "content": "import { createTableDetailRenderFactory } from '../../test'\nimport { TableDetail } from '../TableDetail'\nimport TicketCreate from './mock_data/TicketCreate.json'\n\nconst renderComponent = createTableDetailRenderFactory(TableDetail)\n\ndescribe('TicketCreate: TableDetail', () => {\n  it('renders', () => {\n    const { container, unmount } = renderComponent(TicketCreate)\n    expect(container).toHaveTextContent('ticket_count: 1')\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/TicketCreate/test/mock_data/TicketCreate.json",
    "content": "{\n  \"hash\": \"F4AD54E6FE56B53F8FB8B422C4E9636D6AD56682EA45FF3C8AFBC66EF2D82612\",\n  \"ledger_index\": 37432866,\n  \"date\": \"2018-03-23T13:34:51+00:00\",\n  \"tx\": {\n    \"Account\": \"rP1TMyJHp5QceDoh9MdxLhYaJL2yCwPom\",\n    \"Fee\": \"12\",\n    \"Flags\": 2147483648,\n    \"LastLedgerSequence\": 27,\n    \"Sequence\": 47,\n    \"SigningPubKey\": \"03A3D6C689BDB3B65BED054E06BFC2DA6B43FD45C0CA8D1C7322AC4FAD9D4E37BB\",\n    \"TicketCount\": 1,\n    \"TransactionType\": \"TicketCreate\",\n    \"TxnSignature\": \"304402201ACAAABFE49DA1BA7F7DE66E45A20D4C35799804E9906CEA666CB38529C56F1802206E6100902CF62F77729A587688757D1596AC6C2635961F1FD0D076F4C100AAB2\"\n  },\n  \"meta\": {\n    \"TransactionIndex\": 7,\n    \"AffectedNodes\": [\n      {\n        \"CreatedNode\": {\n          \"LedgerEntryType\": \"Ticket\",\n          \"LedgerIndex\": \"5F08C48A615894960BBBA4E8C40DBF01D7674224F4440D5BFAB4D58100E6F087\",\n          \"NewFields\": {\n            \"Account\": \"rP1TMyJHp5QceDoh9MdxLhYaJL2yCwPom\",\n            \"TicketSequence\": 48\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rP1TMyJHp5QceDoh9MdxLhYaJL2yCwPom\",\n            \"RootIndex\": \"D73D45E604CE9BB51B30887337D87C27AEA5502973B451C58ED4E9248ED0A10B\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"D73D45E604CE9BB51B30887337D87C27AEA5502973B451C58ED4E9248ED0A10B\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rP1TMyJHp5QceDoh9MdxLhYaJL2yCwPom\",\n            \"Balance\": \"1999919712\",\n            \"Flags\": 0,\n            \"OwnerCount\": 15,\n            \"Sequence\": 49,\n            \"TicketCount\": 15\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"FF9B577663B13A39A4747AD29A05ACFBBE8936DBA1FC1624C12C454E754E0467\",\n          \"PreviousFields\": {\n            \"Balance\": \"1999919724\",\n            \"OwnerCount\": 14,\n            \"Sequence\": 47,\n            \"TicketCount\": 14\n          },\n          \"PreviousTxnID\": \"1C6EA0D4EAC873FDBCF8638CDDB922A3DF585367A6412EC43E2157F322393C50\",\n          \"PreviousTxnLgrSeq\": 22\n        }\n      }\n    ],\n    \"TransactionResult\": \"tesSUCCESS\",\n    \"delivered_amount\": \"2421826800\"\n  }\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/TrustSet/Description.tsx",
    "content": "import { Trans } from 'react-i18next'\nimport type { TrustSet } from 'xrpl'\nimport { Account } from '../../Account'\nimport { normalizeAmount } from '../../../transactionUtils'\nimport { useLanguage } from '../../../hooks'\nimport { TransactionDescriptionProps } from '../types'\n\nexport const Description = ({\n  data,\n}: TransactionDescriptionProps<TrustSet>) => {\n  const language = useLanguage()\n  const { tx } = data\n  const amount = normalizeAmount(tx.LimitAmount, language)\n  const { currency, issuer } = tx.LimitAmount\n\n  return (\n    <div key=\"trust_set\">\n      <Trans i18nKey=\"trust_set_description\">\n        It establishes <b>{{ amount } as any}</b>\n        as the maximum amount of <b>{{ currency } as any}</b>\n        from <Account account={issuer} />\n        that <Account account={tx.Account} />\n        is willing to hold\n      </Trans>\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/TrustSet/Simple.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport type { TrustSet } from 'xrpl'\nimport { Amount } from '../../Amount'\nimport { SimpleRow } from '../SimpleRow'\nimport { TransactionSimpleProps } from '../types'\nimport { formatAmount } from '../../../../../rippled/lib/txSummary/formatAmount'\n\nexport const Simple = ({ data }: TransactionSimpleProps<TrustSet>) => {\n  const { t } = useTranslation()\n  const { LimitAmount } = data.instructions\n\n  return (\n    <SimpleRow label={t('set_limit')} data-testid=\"amount\">\n      <Amount value={formatAmount(LimitAmount)} />\n    </SimpleRow>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/TrustSet/TableDetail.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport type { TrustSet } from 'xrpl'\nimport { TransactionTableDetailProps } from '../types'\nimport { Amount } from '../../Amount'\nimport { formatAmount } from '../../../../../rippled/lib/txSummary/formatAmount'\n\nexport const TableDetail = ({\n  instructions,\n}: TransactionTableDetailProps<TrustSet>) => {\n  const { t } = useTranslation()\n  return (\n    <div className=\"trustset\">\n      <span className=\"label\">{t('set_limit')}</span>\n      <Amount value={formatAmount(instructions.LimitAmount)} />\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/TrustSet/index.ts",
    "content": "import {\n  TransactionAction,\n  TransactionCategory,\n  TransactionMapping,\n} from '../types'\n\nimport { Simple } from './Simple'\nimport { Description } from './Description'\nimport { TableDetail } from './TableDetail'\n\nexport const TrustSetTransaction: TransactionMapping = {\n  Description,\n  Simple,\n  TableDetail,\n  action: TransactionAction.MODIFY,\n  category: TransactionCategory.DEX,\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/TrustSet/test/TrustSetDescription.test.tsx",
    "content": "import i18n from '../../../../../../i18n/testConfigEnglish'\n\nimport mockTrustSet from './mock_data/TrustSet.json'\n\nimport { Description } from '../Description'\nimport { createDescriptionRenderFactory } from '../../test'\n\nconst renderComponent = createDescriptionRenderFactory(Description, i18n)\n\ndescribe('TrustSet: Description', () => {\n  it('renders description for authorize', () => {\n    const { container, unmount } = renderComponent(mockTrustSet)\n    expect(container.innerHTML).toBe(\n      `<div>It establishes <b>CN¥1,000,000,000.00</b> as the maximum amount of <b>CNY</b> from <a data-testid=\"account\" title=\"razqQKzJRdB4UxFPWf5NEpEG3WMkmwgcXA\" class=\"account\" href=\"/accounts/razqQKzJRdB4UxFPWf5NEpEG3WMkmwgcXA\" data-discover=\"true\">razqQKzJRdB4UxFPWf5NEpEG3WMkmwgcXA</a> that <a data-testid=\"account\" title=\"rhr8s3nSVJUFwkApgLP32XyYQXZ28Xphfc\" class=\"account\" href=\"/accounts/rhr8s3nSVJUFwkApgLP32XyYQXZ28Xphfc\" data-discover=\"true\">rhr8s3nSVJUFwkApgLP32XyYQXZ28Xphfc</a> is willing to hold</div>`,\n    )\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/TrustSet/test/TrustSetSimple.test.tsx",
    "content": "import i18n from '../../../../../../i18n/testConfigEnglish'\n\nimport { createSimpleRenderFactory } from '../../test/createWrapperFactory'\nimport { Simple } from '../Simple'\nimport mockTrustSet from './mock_data/TrustSet.json'\nimport { expectSimpleRowLabel, expectSimpleRowText } from '../../test'\n\nconst renderComponent = createSimpleRenderFactory(Simple, i18n)\n\ndescribe('TrustSet: Simple', () => {\n  it('renders', () => {\n    const { container, unmount } = renderComponent(mockTrustSet)\n    expectSimpleRowLabel(container, 'amount', 'Set Trust Limit')\n    expectSimpleRowText(\n      container,\n      'amount',\n      `CN¥1,000,000,000.00 CNY.razqQKzJRdB4UxFPWf5NEpEG3WMkmwgcXA`,\n    )\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/TrustSet/test/TrustSetTableDetail.test.tsx",
    "content": "import { createTableDetailRenderFactory } from '../../test'\nimport { TableDetail } from '../TableDetail'\nimport mockTrustSet from './mock_data/TrustSet.json'\nimport i18n from '../../../../../../i18n/testConfigEnglish'\n\nconst renderComponent = createTableDetailRenderFactory(TableDetail, i18n)\n\ndescribe('TrustSet: TableDetail', () => {\n  it('renders', () => {\n    const { container, unmount } = renderComponent(mockTrustSet)\n    expect(container.querySelector('.label')).toHaveTextContent(\n      'Set Trust Limit',\n    )\n    expect(container.querySelector('.amount')).toHaveTextContent(\n      'CN¥1,000,000,000.00 CNY.razqQKzJRdB4UxFPWf5NEpEG3WMkmwgcXA',\n    )\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/TrustSet/test/mock_data/TrustSet.json",
    "content": "{\n  \"hash\": \"B18F78D2380E10F542F97B87047404142653984FDB26CADE4342D39C00D4DFC8\",\n  \"ledger_index\": 37470157,\n  \"date\": \"2018-03-25T03:03:41+00:00\",\n  \"tx\": {\n    \"TransactionType\": \"TrustSet\",\n    \"Flags\": 2147614720,\n    \"Sequence\": 261,\n    \"LastLedgerSequence\": 37470164,\n    \"LimitAmount\": {\n      \"value\": \"1000000000\",\n      \"currency\": \"CNY\",\n      \"issuer\": \"razqQKzJRdB4UxFPWf5NEpEG3WMkmwgcXA\"\n    },\n    \"Fee\": \"12\",\n    \"SigningPubKey\": \"02FFC308078225AB4447DBE14832E9DBF277943843D730353BADFD1FAB3231A8D9\",\n    \"TxnSignature\": \"30440220352B22464E56C62850ECBDCE83E059247044AF1568C234E7D9F968E902561C3E0220416A0E3A4F90112D46E5A31E972A6DE9AE18BAF3B633C701017633AC367162A7\",\n    \"Account\": \"rhr8s3nSVJUFwkApgLP32XyYQXZ28Xphfc\",\n    \"Memos\": [\n      {\n        \"Memo\": {\n          \"MemoType\": \"636C69656E74\",\n          \"MemoData\": \"7274312E312E33322D6275676669782D322D67653135323239372D6469727479\"\n        }\n      }\n    ]\n  },\n  \"meta\": {\n    \"TransactionIndex\": 36,\n    \"AffectedNodes\": [\n      {\n        \"CreatedNode\": {\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"5D193A93BFC1CF2E80AA6191CC235E2DD5B426DB0082C5D2789425A3D7EB6F4B\",\n          \"NewFields\": {\n            \"RootIndex\": \"5D193A93BFC1CF2E80AA6191CC235E2DD5B426DB0082C5D2789425A3D7EB6F4B\",\n            \"Owner\": \"rhr8s3nSVJUFwkApgLP32XyYQXZ28Xphfc\"\n          }\n        }\n      },\n      {\n        \"CreatedNode\": {\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"5DCC9786FDDEC880D7D60FAF0218BB3A534257E2D5F4247DB1CEACF136EE62C5\",\n          \"NewFields\": {\n            \"Flags\": 1114112,\n            \"HighNode\": \"00000000000004BB\",\n            \"Balance\": {\n              \"value\": \"0\",\n              \"currency\": \"CNY\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\"\n            },\n            \"LowLimit\": {\n              \"value\": \"1000000000\",\n              \"currency\": \"CNY\",\n              \"issuer\": \"rhr8s3nSVJUFwkApgLP32XyYQXZ28Xphfc\"\n            },\n            \"HighLimit\": {\n              \"value\": \"0\",\n              \"currency\": \"CNY\",\n              \"issuer\": \"razqQKzJRdB4UxFPWf5NEpEG3WMkmwgcXA\"\n            }\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"PreviousTxnLgrSeq\": 37470094,\n          \"PreviousTxnID\": \"981C3B9DBB84A0EC62221F1EDB8D66B42865F546211BF13D6EB79CC0B009B39E\",\n          \"LedgerIndex\": \"7A5C344F34A4F509CA0F211A23B076D9153061ABE9A4CF1C68D359EC7E9443D4\",\n          \"PreviousFields\": {\n            \"Sequence\": 271,\n            \"OwnerCount\": 0,\n            \"Balance\": \"31000000\"\n          },\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Sequence\": 2,\n            \"OwnerCount\": 1,\n            \"Balance\": \"30999988\",\n            \"Account\": \"rhr8s3nSVJUFwkApgLP32XyYQXZ28Xphfc\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"B5893F42A404E7E9D720AD5453F0856F2496C3F895667634AC5D353092E06A02\",\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"IndexPrevious\": \"00000000000004BA\",\n            \"RootIndex\": \"494660EA99CF2FE02C1D8235791BD46F80D84253D413A5C67AF7E276E9C7404F\",\n            \"Owner\": \"razqQKzJRdB4UxFPWf5NEpEG3WMkmwgcXA\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"PreviousTxnLgrSeq\": 37469798,\n          \"PreviousTxnID\": \"91CAD179B766842DDD054EDE6120871CDFBF92555492320D629B26BF56072EAE\",\n          \"LedgerIndex\": \"D9A4529146AB12ABD244CCC0ED0523CF5C6BA97043999AB27C1D4EB567929069\"\n        }\n      }\n    ],\n    \"TransactionResult\": \"tesSUCCESS\"\n  }\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/UNLModify/Simple.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { encodeNodePublic } from 'ripple-address-codec'\n\nimport { hexToBytes } from '@xrplf/isomorphic/utils'\nimport type { UNLModify } from 'xrpl'\nimport { SimpleRow } from '../SimpleRow'\nimport { TransactionSimpleProps } from '../types'\nimport { RouteLink } from '../../../routing'\nimport { VALIDATOR_ROUTE } from '../../../../App/routes'\n\nexport const Simple = ({ data }: TransactionSimpleProps<UNLModify>) => {\n  const { t } = useTranslation()\n  const tx = data.instructions\n\n  const encoded = encodeNodePublic(hexToBytes(tx.UNLModifyValidator))\n\n  return (\n    <>\n      <SimpleRow label={t('validator')} data-testid=\"validator\">\n        <RouteLink to={VALIDATOR_ROUTE} params={{ identifier: encoded }}>\n          {encoded}\n        </RouteLink>\n      </SimpleRow>\n      <SimpleRow label={t('action')} data-testid=\"action\">\n        {tx.UNLModifyDisabling ? 'DISABLE' : 'ENABLE'}\n      </SimpleRow>\n    </>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/UNLModify/index.ts",
    "content": "import type { UNLModify } from 'xrpl'\nimport {\n  TransactionAction,\n  TransactionCategory,\n  TransactionMapping,\n} from '../types'\n\nimport { Simple } from './Simple'\n\nexport const UNLModifyTransaction: TransactionMapping = {\n  Simple,\n  action: TransactionAction.MODIFY,\n  category: TransactionCategory.PSEUDO,\n  parser: (tx: UNLModify): UNLModify => tx,\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/UNLModify/test/UNLModifySimple.test.tsx",
    "content": "import { render } from '@testing-library/react'\nimport i18n from '../../../../../../i18n/testConfigEnglish'\nimport { expectSimpleRowLabel, expectSimpleRowText } from '../../test'\nimport { createSimpleRenderFactory } from '../../test/createWrapperFactory'\n\nimport { Simple } from '../Simple'\nimport mockUNLModifyEnable from './mock_data/UNLModifyEnable.json'\nimport mockUNLModifyDisable from './mock_data/UNLModifyDisable.json'\nimport { SimpleTab } from '../../../../../Transactions/SimpleTab'\nimport { QuickHarness } from '../../../../../test/utils'\nimport summarizeTransaction from '../../../../../../rippled/lib/txSummary'\n\nconst renderSimple = createSimpleRenderFactory(Simple, i18n)\n\ndescribe('UNLModify: Simple', () => {\n  it('renders tx that enables a validator', () => {\n    const { container } = renderSimple(mockUNLModifyEnable)\n    expectSimpleRowLabel(container, 'validator', 'Validator')\n    expectSimpleRowText(\n      container,\n      'validator',\n      'nHUXeusfwk61c4xJPneb9Lgy7Ga6DVaVLEyB29ftUdt9k2KxD6Hw',\n    )\n    expectSimpleRowLabel(container, 'action', 'action')\n    expectSimpleRowText(container, 'action', 'ENABLE')\n  })\n\n  it('renders tx that disables a validator', () => {\n    const { container } = renderSimple(mockUNLModifyDisable)\n    expectSimpleRowLabel(container, 'validator', 'Validator')\n    expectSimpleRowText(\n      container,\n      'validator',\n      'nHUXeusfwk61c4xJPneb9Lgy7Ga6DVaVLEyB29ftUdt9k2KxD6Hw',\n    )\n    expectSimpleRowLabel(container, 'action', 'action')\n    expectSimpleRowText(container, 'action', 'DISABLE')\n  })\n\n  it('renders tx with correct account and sequence', () => {\n    const { container } = render(\n      <QuickHarness i18n={i18n}>\n        <SimpleTab\n          data={{\n            processed: mockUNLModifyDisable,\n            summary: summarizeTransaction(mockUNLModifyDisable, true).details,\n          }}\n          width={800}\n        />\n      </QuickHarness>,\n    )\n    expect(\n      container.querySelector('[data-testid=\"account\"]'),\n    ).not.toBeInTheDocument()\n    expectSimpleRowLabel(container, 'sequence', 'Sequence Number')\n    expectSimpleRowText(container, 'sequence', '0')\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/UNLModify/test/mock_data/UNLModifyDisable.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"\",\n    \"Fee\": \"0\",\n    \"LedgerSequence\": 68485120,\n    \"Sequence\": 0,\n    \"SigningPubKey\": \"\",\n    \"TransactionType\": \"UNLModify\",\n    \"UNLModifyDisabling\": 1,\n    \"UNLModifyValidator\": \"ED9AE4F5887BA029EB7C0884486D23CF281975F773F44BD213054219882C411CC7\",\n    \"date\": \"2021-12-21T17:24:51Z\",\n    \"warnings\": [\n      {\n        \"id\": 1004,\n        \"message\": \"This is a reporting server.  The default behavior of a reporting server is to only return validated data. If you are looking for not yet validated data, include \\\"ledger_index : current\\\" in your request, which will cause this server to forward the request to a p2p node. If the forward is successful the response will include \\\"forwarded\\\" : \\\"true\\\"\"\n      }\n    ]\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"CreatedNode\": {\n          \"LedgerEntryType\": \"NegativeUNL\",\n          \"LedgerIndex\": \"2E8A59AA9D3B5B186B0B9E0F62E6C02587CA74A4D778938E957B6357D364B244\",\n          \"NewFields\": {\n            \"ValidatorToDisable\": \"ED9AE4F5887BA029EB7C0884486D23CF281975F773F44BD213054219882C411CC7\"\n          }\n        }\n      }\n    ],\n    \"TransactionIndex\": 23,\n    \"TransactionResult\": \"tesSUCCESS\"\n  },\n  \"hash\": \"0746806B2E9C0ED3FC279C6D773EF72F255EACEEE1975FE1F02D1FF704B15455\",\n  \"ledger_index\": 68485120,\n  \"date\": \"2021-12-21T17:24:51Z\"\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/UNLModify/test/mock_data/UNLModifyEnable.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"\",\n    \"Fee\": \"0\",\n    \"LedgerSequence\": 68485376,\n    \"Sequence\": 0,\n    \"SigningPubKey\": \"\",\n    \"TransactionType\": \"UNLModify\",\n    \"UNLModifyDisabling\": 0,\n    \"UNLModifyValidator\": \"ED9AE4F5887BA029EB7C0884486D23CF281975F773F44BD213054219882C411CC7\",\n    \"date\": \"2021-12-21T17:42:12Z\",\n    \"warnings\": [\n      {\n        \"id\": 1004,\n        \"message\": \"This is a reporting server.  The default behavior of a reporting server is to only return validated data. If you are looking for not yet validated data, include \\\"ledger_index : current\\\" in your request, which will cause this server to forward the request to a p2p node. If the forward is successful the response will include \\\"forwarded\\\" : \\\"true\\\"\"\n      }\n    ]\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"DisabledValidators\": [\n              {\n                \"DisabledValidator\": {\n                  \"FirstLedgerSequence\": 68485376,\n                  \"PublicKey\": \"ED9AE4F5887BA029EB7C0884486D23CF281975F773F44BD213054219882C411CC7\"\n                }\n              }\n            ],\n            \"Flags\": 0,\n            \"ValidatorToReEnable\": \"ED9AE4F5887BA029EB7C0884486D23CF281975F773F44BD213054219882C411CC7\"\n          },\n          \"LedgerEntryType\": \"NegativeUNL\",\n          \"LedgerIndex\": \"2E8A59AA9D3B5B186B0B9E0F62E6C02587CA74A4D778938E957B6357D364B244\",\n          \"PreviousFields\": {}\n        }\n      }\n    ],\n    \"TransactionIndex\": 9,\n    \"TransactionResult\": \"tesSUCCESS\"\n  },\n  \"hash\": \"BBA06528C9AAE4BE774A99783B1C7C7F60885ED57B7C4251A8A662B6449461F1\",\n  \"ledger_index\": 68485376,\n  \"date\": \"2021-12-21T17:42:12Z\"\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/VaultClawback/Description.tsx",
    "content": "import { Trans } from 'react-i18next'\nimport type { VaultClawback } from 'xrpl'\nimport { TransactionDescriptionProps } from '../types'\nimport { Amount } from '../../Amount'\nimport { Account } from '../../Account'\nimport { formatAmount } from '../../../../../rippled/lib/txSummary/formatAmount'\n\nexport const Description = ({\n  data,\n}: TransactionDescriptionProps<VaultClawback>) => {\n  const { tx } = data\n  const { Account: account, Holder: holder, Amount: amount } = tx\n  return amount ? (\n    <Trans\n      i18nKey=\"account_clawbacks_from_vault\"\n      components={{\n        Account: <Account account={account} />,\n        Holder: <Account account={holder} />,\n        Amount: (\n          <b>\n            {' '}\n            <Amount value={formatAmount(amount)} />\n          </b>\n        ),\n      }}\n    />\n  ) : (\n    <Trans\n      i18nKey=\"account_clawbacks_from_vault_amount_omitted\"\n      components={{\n        Account: <Account account={account} />,\n        Holder: <Account account={holder} />,\n      }}\n    />\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/VaultClawback/Simple.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport type { VaultClawback } from 'xrpl'\nimport { TransactionSimpleComponent, TransactionSimpleProps } from '../types'\nimport { SimpleRow } from '../SimpleRow'\nimport { Amount } from '../../Amount'\nimport { formatAmount } from '../../../../../rippled/lib/txSummary/formatAmount'\nimport { Account } from '../../Account'\n\nexport const Simple: TransactionSimpleComponent = (\n  props: TransactionSimpleProps<VaultClawback>,\n) => {\n  const { t } = useTranslation()\n  const { data } = props\n  const { VaultID: vaultId, Holder: holder, Amount: amount } = data.instructions\n  return (\n    <>\n      <SimpleRow label={t('vault_id')} data-testid=\"vault_id\">\n        {vaultId}\n      </SimpleRow>\n      <SimpleRow label={t('holder')} data-testid=\"holder\">\n        <Account account={holder} />\n      </SimpleRow>\n      {amount && (\n        <SimpleRow label={t('amount')} data-testid=\"amount\">\n          <Amount value={formatAmount(amount)} />\n        </SimpleRow>\n      )}\n    </>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/VaultClawback/TableDetail.tsx",
    "content": "import { t } from 'i18next'\nimport { Trans } from 'react-i18next'\nimport type { VaultClawback } from 'xrpl'\nimport { TransactionTableDetailProps } from '../types'\nimport { formatAmount } from '../../../../../rippled/lib/txSummary/formatAmount'\nimport { Amount } from '../../Amount'\nimport { Account } from '../../Account'\n\nexport const TableDetail = ({\n  instructions,\n}: TransactionTableDetailProps<VaultClawback>) => {\n  const { Holder: holder, Amount: amount } = instructions\n  return (\n    <div className=\"vault-clawback\">\n      <Trans i18nKey=\"action_from\">\n        <span className=\"label\">{t('claws_back')}</span>\n        {amount && <Amount value={formatAmount(amount)} />}\n        {t('from')}\n        <Account account={holder} />\n      </Trans>\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/VaultClawback/index.ts",
    "content": "import {\n  TransactionAction,\n  TransactionCategory,\n  TransactionMapping,\n} from '../types'\nimport { Description } from './Description'\nimport { Simple } from './Simple'\nimport { TableDetail } from './TableDetail'\n\nexport const VaultClawbackTransaction: TransactionMapping = {\n  Description,\n  Simple,\n  TableDetail,\n  action: TransactionAction.SEND,\n  category: TransactionCategory.OTHER,\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/VaultClawback/test/VaultClawbackDescription.test.tsx",
    "content": "import i18n from '../../../../../../i18n/testConfigEnglish'\nimport { createDescriptionRenderFactory } from '../../test'\nimport { Description } from '../Description'\nimport mockVaultCreate from './mock_data/VaultClawback.json'\n\nconst renderComponent = createDescriptionRenderFactory(Description, i18n)\n\ndescribe('VaultClawback: Description', () => {\n  it('renders', () => {\n    const { container, unmount } = renderComponent(mockVaultCreate)\n    expect(container).toHaveTextContent(\n      'rhPempKXKgtkfbxMR1nZdb5SG8T35vYsZJ clawbacks $5.00 USD.rhPempKXKgtkfbxMR1nZdb5SG8T35vYsZJ from raMUwNw4u59UU9WWpqZYYEj77y8yZhC6Wp',\n    )\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/VaultClawback/test/VaultClawbackSimple.test.tsx",
    "content": "import { expectSimpleRowText, createSimpleRenderFactory } from '../../test'\nimport { Simple } from '../Simple'\nimport mockVaultClawback from './mock_data/VaultClawback.json'\n\nconst renderComponent = createSimpleRenderFactory(Simple)\n\ndescribe('VaultClawback: Simple', () => {\n  it('renders', () => {\n    const { container, unmount } = renderComponent(mockVaultClawback)\n    expectSimpleRowText(\n      container,\n      'vault_id',\n      'CFE74C9608553E8BCA771DF600E96937768B9EEA7BAD3AD22BB2793A4494ABF9',\n    )\n    expectSimpleRowText(\n      container,\n      'holder',\n      'raMUwNw4u59UU9WWpqZYYEj77y8yZhC6Wp',\n    )\n    expectSimpleRowText(\n      container,\n      'amount',\n      '$5.00 USD.rhPempKXKgtkfbxMR1nZdb5SG8T35vYsZJ',\n    )\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/VaultClawback/test/VaultClawbackTableDetail.test.tsx",
    "content": "import i18n from '../../../../../../i18n/testConfigEnglish'\nimport { createTableDetailRenderFactory } from '../../test'\nimport { TableDetail } from '../TableDetail'\nimport mockVaultClawback from './mock_data/VaultClawback.json'\n\nconst renderComponent = createTableDetailRenderFactory(TableDetail, i18n)\n\ndescribe('VaultClawbackTableDetail', () => {\n  it('render VaultClawbackTableDetail', () => {\n    const { container, unmount } = renderComponent(mockVaultClawback)\n    expect(container).toHaveTextContent(\n      'Claws back $5.00 USD.rhPempKXKgtkfbxMR1nZdb5SG8T35vYsZJ from raMUwNw4u59UU9WWpqZYYEj77y8yZhC6Wp',\n    )\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/VaultClawback/test/mock_data/VaultClawback.json",
    "content": "{\n  \"close_time_iso\": \"2025-07-29T17:32:32Z\",\n  \"ctid\": \"C006242600000C96\",\n  \"hash\": \"FFC3ABE18EAF0F064F5AE82C8CACE5389C8BAC6E960EAC4A0818D54CC88DF5D1\",\n  \"ledger_hash\": \"CF84D9C7BB15D82229742FE028A943EF12B65AD8F009A24824A6A6AE4051DEB1\",\n  \"ledger_index\": 402470,\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 2228224,\n            \"HighLimit\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rExKLJMs6KNpMmBZ9XJnTMU45buVrTyyrJ\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rhPempKXKgtkfbxMR1nZdb5SG8T35vYsZJ\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"024F2773BF71DE4B3E43C83579F47BA7FB03BE80FAA055037279B64159E54A43\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-5\"\n            }\n          },\n          \"PreviousTxnID\": \"C87CDA954D97B77379E9841F75B83264688B1196C58F9AB3D42651A4ED2974B2\",\n          \"PreviousTxnLgrSeq\": 402468\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"raMUwNw4u59UU9WWpqZYYEj77y8yZhC6Wp\",\n            \"Flags\": 0,\n            \"MPTokenIssuanceID\": \"00000001A407F138DEDF8AADF66EA1E3E34512CC9EDFBA4A\",\n            \"OwnerNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"MPToken\",\n          \"LedgerIndex\": \"898DC8BD9A8AF25787FD29A8F928A6A49D0063ED17DDA200D45491C733021986\",\n          \"PreviousFields\": {\n            \"MPTAmount\": \"5\"\n          },\n          \"PreviousTxnID\": \"C87CDA954D97B77379E9841F75B83264688B1196C58F9AB3D42651A4ED2974B2\",\n          \"PreviousTxnLgrSeq\": 402468\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rhPempKXKgtkfbxMR1nZdb5SG8T35vYsZJ\",\n            \"Balance\": \"94999964\",\n            \"Flags\": 2155872256,\n            \"OwnerCount\": 0,\n            \"Sequence\": 402456\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"B96AD86828F03B79E9F23A6F3A8DEC50478471FEA0DBA49B053BC1EDD75936FF\",\n          \"PreviousFields\": {\n            \"Balance\": \"99999964\",\n            \"Sequence\": 402455\n          },\n          \"PreviousTxnID\": \"67FB26E7B4E0A217499D99571C6B315AC5BFD466280574E18547C6B5A551C4A4\",\n          \"PreviousTxnLgrSeq\": 402464\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rExKLJMs6KNpMmBZ9XJnTMU45buVrTyyrJ\",\n            \"Asset\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rhPempKXKgtkfbxMR1nZdb5SG8T35vYsZJ\"\n            },\n            \"AssetsAvailable\": \"0\",\n            \"AssetsMaximum\": \"1000\",\n            \"AssetsTotal\": \"0\",\n            \"Data\": \"75706461746564206D65746164617461\",\n            \"Flags\": 0,\n            \"LossUnrealized\": \"0\",\n            \"Owner\": \"rMUqJHdkWSUiKMXaWwv5s74eLxp7QNmMme\",\n            \"OwnerNode\": \"0\",\n            \"Sequence\": 402453,\n            \"ShareMPTID\": \"00000001A407F138DEDF8AADF66EA1E3E34512CC9EDFBA4A\",\n            \"WithdrawalPolicy\": 1\n          },\n          \"LedgerEntryType\": \"Vault\",\n          \"LedgerIndex\": \"CFE74C9608553E8BCA771DF600E96937768B9EEA7BAD3AD22BB2793A4494ABF9\",\n          \"PreviousFields\": {\n            \"AssetsAvailable\": \"5\",\n            \"AssetsTotal\": \"5\"\n          },\n          \"PreviousTxnID\": \"C87CDA954D97B77379E9841F75B83264688B1196C58F9AB3D42651A4ED2974B2\",\n          \"PreviousTxnLgrSeq\": 402468\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 56,\n            \"Issuer\": \"rExKLJMs6KNpMmBZ9XJnTMU45buVrTyyrJ\",\n            \"MPTokenMetadata\": \"7368617265206D65746164617461\",\n            \"OutstandingAmount\": \"0\",\n            \"OwnerNode\": \"0\",\n            \"Sequence\": 1\n          },\n          \"LedgerEntryType\": \"MPTokenIssuance\",\n          \"LedgerIndex\": \"D2956853B8B47F4C895EC1D7D32A660C38F144A693C302044EEE3DEDF5244C50\",\n          \"PreviousFields\": {\n            \"OutstandingAmount\": \"5\"\n          },\n          \"PreviousTxnID\": \"C87CDA954D97B77379E9841F75B83264688B1196C58F9AB3D42651A4ED2974B2\",\n          \"PreviousTxnLgrSeq\": 402468\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tesSUCCESS\"\n  },\n  \"tx\": {\n    \"Account\": \"rhPempKXKgtkfbxMR1nZdb5SG8T35vYsZJ\",\n    \"Amount\": {\n      \"currency\": \"USD\",\n      \"issuer\": \"rhPempKXKgtkfbxMR1nZdb5SG8T35vYsZJ\",\n      \"value\": \"5\"\n    },\n    \"Fee\": \"5000000\",\n    \"Flags\": 0,\n    \"Holder\": \"raMUwNw4u59UU9WWpqZYYEj77y8yZhC6Wp\",\n    \"LastLedgerSequence\": 402488,\n    \"NetworkID\": 3222,\n    \"Sequence\": 402455,\n    \"SigningPubKey\": \"ED5932C16EA38BD9F64F1C9B932BF5C77BA04D403A38C0EC416F5B100DD57308E9\",\n    \"TransactionType\": \"VaultClawback\",\n    \"TxnSignature\": \"A25F5EF3F04868A5349DB6B30BFB4060DE65E6EE7E0F4EA2D522717ADA6D4E0A0D5559045F30EC32B081747300C9BDE8CDFC46784310282A6324EA5C33C55D06\",\n    \"VaultID\": \"CFE74C9608553E8BCA771DF600E96937768B9EEA7BAD3AD22BB2793A4494ABF9\",\n    \"ctid\": \"C006242600000C96\",\n    \"date\": 807125552,\n    \"ledger_index\": 402470\n  },\n  \"validated\": true\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/VaultCreate/Description.tsx",
    "content": "import { Trans } from 'react-i18next'\nimport type { VaultCreate } from 'xrpl'\nimport { TransactionDescriptionProps } from '../types'\nimport { Account } from '../../Account'\nimport Currency from '../../Currency'\nimport { MPTokenLink } from '../../MPTokenLink'\n\nexport const Description = ({\n  data,\n}: TransactionDescriptionProps<VaultCreate>) => {\n  const { tx } = data\n  const { Account: account, Asset: asset } = tx\n  // @ts-expect-error -- necessary to check for MPT\n  const mptIssuanceId = asset.mpt_issuance_id\n  const isMPT = mptIssuanceId != null\n  return (\n    <Trans\n      i18nKey=\"account_creates_vault\"\n      components={{\n        Account: <Account account={account} />,\n        Asset: isMPT ? (\n          <MPTokenLink tokenID={mptIssuanceId} />\n        ) : (\n          <Currency\n            // @ts-expect-error -- this is fine\n            currency={asset.currency}\n            // @ts-expect-error -- this is fine\n            issuer={asset.issuer}\n            isMPT={isMPT}\n          />\n        ),\n      }}\n    />\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/VaultCreate/Simple.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport type { VaultCreate } from 'xrpl'\nimport { TransactionSimpleComponent, TransactionSimpleProps } from '../types'\nimport { SimpleRow } from '../SimpleRow'\nimport Currency from '../../Currency'\nimport { isValidJsonString } from '../../../utils'\nimport { JsonView } from '../../JsonView'\nimport { MPTokenLink } from '../../MPTokenLink'\nimport { TX_FLAGS } from '../../../transactionUtils'\n\nexport const Simple: TransactionSimpleComponent = (\n  props: TransactionSimpleProps<VaultCreate>,\n) => {\n  const { t } = useTranslation()\n  const { data } = props\n  const {\n    Asset,\n    AssetsMaximum,\n    Data,\n    MPTokenMetadata,\n    WithdrawalPolicy,\n    DomainID,\n  } = data.instructions\n  // @ts-expect-error -- necessary to check for MPT\n  const mptIssuanceId = Asset.mpt_issuance_id\n  const isMPT = mptIssuanceId != null\n  return (\n    <>\n      <SimpleRow label={t('asset')} data-testid=\"asset\">\n        {isMPT ? (\n          <MPTokenLink tokenID={mptIssuanceId} />\n        ) : (\n          <Currency\n            // @ts-expect-error -- this is fine\n            currency={Asset.currency}\n            // @ts-expect-error -- this is fine\n            issuer={Asset.issuer}\n            isMPT={isMPT}\n          />\n        )}\n      </SimpleRow>\n      {AssetsMaximum && (\n        <SimpleRow label={t('assets_maximum')} data-testid=\"assets_maximum\">\n          {AssetsMaximum}\n        </SimpleRow>\n      )}\n      {Data && (\n        <SimpleRow label={t('data')} className=\"dt\" data-testid=\"data\">\n          {isValidJsonString(Data) ? (\n            <JsonView data={JSON.parse(Data)} />\n          ) : (\n            Data\n          )}\n        </SimpleRow>\n      )}\n      {MPTokenMetadata && (\n        <SimpleRow\n          label={t('mptoken_metadata')}\n          className=\"dt\"\n          data-testid=\"mptoken_metadata\"\n        >\n          {isValidJsonString(MPTokenMetadata) ? (\n            <JsonView data={JSON.parse(MPTokenMetadata)} />\n          ) : (\n            MPTokenMetadata\n          )}\n        </SimpleRow>\n      )}\n      {WithdrawalPolicy && (\n        <SimpleRow\n          label={t('withdrawal_policy')}\n          data-testid=\"withdrawal_policy\"\n        >\n          {TX_FLAGS.VaultCreate[WithdrawalPolicy] || WithdrawalPolicy}\n        </SimpleRow>\n      )}\n      {DomainID && (\n        <SimpleRow\n          label={t('domain_id')}\n          className=\"dt\"\n          data-testid=\"domain_id\"\n        >\n          DomainID\n        </SimpleRow>\n      )}\n    </>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/VaultCreate/TableDetail.tsx",
    "content": "import { Trans } from 'react-i18next'\nimport { t } from 'i18next'\nimport type { VaultCreate } from 'xrpl'\nimport { TransactionTableDetailProps } from '../types'\nimport Currency from '../../Currency'\nimport { MPTokenLink } from '../../MPTokenLink'\n\nexport const TableDetail = ({\n  instructions,\n}: TransactionTableDetailProps<VaultCreate>) => {\n  const { Asset: asset } = instructions\n  // @ts-expect-error -- necessary to check for MPT\n  const mptIssuanceId = asset.mpt_issuance_id\n  const isMPT = mptIssuanceId != null\n  return (\n    <div className=\"vault-create\">\n      <span className=\"label\">{t('transaction_action_CREATE')}</span>\n      <Trans\n        i18nKey=\"vault_create_table_detail\"\n        components={{\n          Asset: isMPT ? (\n            <MPTokenLink tokenID={mptIssuanceId} />\n          ) : (\n            <Currency\n              // @ts-expect-error -- this is fine\n              currency={asset.currency}\n              // @ts-expect-error -- this is fine\n              issuer={asset.issuer}\n              isMPT={isMPT}\n            />\n          ),\n        }}\n      />\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/VaultCreate/index.ts",
    "content": "import {\n  TransactionAction,\n  TransactionCategory,\n  TransactionMapping,\n} from '../types'\nimport { Description } from './Description'\nimport { Simple } from './Simple'\nimport { TableDetail } from './TableDetail'\n\nexport const VaultCreateTransaction: TransactionMapping = {\n  Description,\n  Simple,\n  TableDetail,\n  action: TransactionAction.CREATE,\n  category: TransactionCategory.OTHER,\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/VaultCreate/test/VaultCreateDescription.test.tsx",
    "content": "import i18n from '../../../../../../i18n/testConfigEnglish'\nimport { createDescriptionRenderFactory } from '../../test'\nimport { Description } from '../Description'\nimport mockVaultCreate from './mock_data/VaultCreate.json'\n\nconst renderComponent = createDescriptionRenderFactory(Description, i18n)\n\ndescribe('VaultCreate: Description', () => {\n  it('renders', () => {\n    const { container, unmount } = renderComponent(mockVaultCreate)\n    expect(container).toHaveTextContent(\n      'rpZtrvuiVDhtSDZPm7axXgNB7iW3J4avwQ created a vault for USD.rJCPrRU8kcLfqCKob1j9EivLa4wG5pF4C2',\n    )\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/VaultCreate/test/VaultCreateSimple.test.tsx",
    "content": "import {\n  expectSimpleRowText,\n  createSimpleRenderFactory,\n  expectSimpleRowNotToExist,\n} from '../../test'\nimport { Simple } from '../Simple'\nimport mockVaultCreate from './mock_data/VaultCreate.json'\n\nconst renderComponent = createSimpleRenderFactory(Simple)\n\ndescribe('VaultCreate: Simple', () => {\n  it('renders', () => {\n    const { container, unmount } = renderComponent(mockVaultCreate)\n    expectSimpleRowText(\n      container,\n      'asset',\n      'USD.rJCPrRU8kcLfqCKob1j9EivLa4wG5pF4C2',\n    )\n    expectSimpleRowText(container, 'assets_maximum', '500')\n    expectSimpleRowText(container, 'data', '7661756C74206D65746164617461')\n    expectSimpleRowText(\n      container,\n      'mptoken_metadata',\n      '7368617265206D65746164617461',\n    )\n    expectSimpleRowText(\n      container,\n      'withdrawal_policy',\n      'vaultStrategyFirstComeFirstServe',\n    )\n    expectSimpleRowNotToExist(container, 'domain_id')\n\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/VaultCreate/test/VaultCreateTableDetail.test.tsx",
    "content": "import i18n from '../../../../../../i18n/testConfigEnglish'\nimport { createTableDetailRenderFactory } from '../../test'\nimport { TableDetail } from '../TableDetail'\nimport mockVaultCreate from './mock_data/VaultCreate.json'\n\nconst renderComponent = createTableDetailRenderFactory(TableDetail, i18n)\n\ndescribe('VaultCreateTableDetail', () => {\n  it('render VaultCreateTableDetail', () => {\n    const { container, unmount } = renderComponent(mockVaultCreate)\n    expect(container).toHaveTextContent(\n      // \"create vault\" is displayed on the UI\n      'Createvault for USD.rJCPrRU8kcLfqCKob1j9EivLa4wG5pF4C2',\n    )\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/VaultCreate/test/mock_data/VaultCreate.json",
    "content": "{\n  \"close_time_iso\": \"2025-07-28T14:33:32Z\",\n  \"ctid\": \"C005A5B800000C96\",\n  \"hash\": \"C3A66689AAD6A7B8BFF535C125DC251E5CC91DAEB9A1212295635219CA814F87\",\n  \"ledger_hash\": \"D2FB9809B0A876D649AC6638EB27AB714C2104D63395F465BC83D0419E02859E\",\n  \"ledger_index\": 370104,\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"CreatedNode\": {\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"100ECAFCB2612246420AF018FC3D0136387BB973D791895D1A70B399210C898C\",\n          \"NewFields\": {\n            \"Owner\": \"raKXA6BCRNbJyuzSB9AJ9Ykx9wi1mc4uTf\",\n            \"RootIndex\": \"100ECAFCB2612246420AF018FC3D0136387BB973D791895D1A70B399210C898C\"\n          }\n        }\n      },\n      {\n        \"CreatedNode\": {\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"110E0CBEC6D61A84A4D9D99720D467F9784D721F4F936BCDEBC37E9FBC0A552F\",\n          \"NewFields\": {\n            \"Balance\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rJCPrRU8kcLfqCKob1j9EivLa4wG5pF4C2\",\n              \"value\": \"0\"\n            },\n            \"LowLimit\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"raKXA6BCRNbJyuzSB9AJ9Ykx9wi1mc4uTf\",\n              \"value\": \"0\"\n            }\n          }\n        }\n      },\n      {\n        \"CreatedNode\": {\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"3C4E60B37395E1247CAF623F33591E7B0C46B9D4C87FF5B25090D3554BFCC509\",\n          \"NewFields\": {\n            \"Owner\": \"rpZtrvuiVDhtSDZPm7axXgNB7iW3J4avwQ\",\n            \"RootIndex\": \"3C4E60B37395E1247CAF623F33591E7B0C46B9D4C87FF5B25090D3554BFCC509\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"73B52BD94D8E722BECD2F89407DBBD850D878EFA5388D33C18213E8ED44BE4B2\",\n          \"PreviousTxnID\": \"E41237E69B2A721B37F954C056BBEFA71DD7CA91E2CBD387406B4A76C210065E\",\n          \"PreviousTxnLgrSeq\": 370102\n        }\n      },\n      {\n        \"CreatedNode\": {\n          \"LedgerEntryType\": \"MPTokenIssuance\",\n          \"LedgerIndex\": \"9450FA79302D108934FF1C28C90DF11D35AAE86156B311A3648D4A018CCFDB20\",\n          \"NewFields\": {\n            \"Flags\": 56,\n            \"Issuer\": \"raKXA6BCRNbJyuzSB9AJ9Ykx9wi1mc4uTf\",\n            \"MPTokenMetadata\": \"7368617265206D65746164617461\",\n            \"Sequence\": 1\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rpZtrvuiVDhtSDZPm7axXgNB7iW3J4avwQ\",\n            \"Balance\": \"95000000\",\n            \"Flags\": 0,\n            \"OwnerCount\": 1,\n            \"Sequence\": 370095\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"A3AA84035B223DAF7E06CB3C6624DEC258E6A5223A4F5A14B06F20C06871593F\",\n          \"PreviousFields\": {\n            \"Balance\": \"100000000\",\n            \"OwnerCount\": 0,\n            \"Sequence\": 370094\n          },\n          \"PreviousTxnID\": \"39A35785F06858EC1989F0494B548AE24D6CA29362B5269BEFE18BD6015DA19D\",\n          \"PreviousTxnLgrSeq\": 370094\n        }\n      },\n      {\n        \"CreatedNode\": {\n          \"LedgerEntryType\": \"Vault\",\n          \"LedgerIndex\": \"A441A9B4AA29709F483813F86D0B3CA680EEBA1C9B27A13900F65EC31FA929B1\",\n          \"NewFields\": {\n            \"Account\": \"raKXA6BCRNbJyuzSB9AJ9Ykx9wi1mc4uTf\",\n            \"Asset\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rJCPrRU8kcLfqCKob1j9EivLa4wG5pF4C2\"\n            },\n            \"AssetsMaximum\": \"500\",\n            \"Data\": \"7661756C74206D65746164617461\",\n            \"Owner\": \"rpZtrvuiVDhtSDZPm7axXgNB7iW3J4avwQ\",\n            \"Sequence\": 370094,\n            \"ShareMPTID\": \"000000013A59F2358FED3D0478E4588C67B162EFCE92E279\",\n            \"WithdrawalPolicy\": 1\n          }\n        }\n      },\n      {\n        \"CreatedNode\": {\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"B19746AAD9D08D9621E833D1535938491FDC1F636A23ED5C46479128357200CF\",\n          \"NewFields\": {\n            \"Account\": \"raKXA6BCRNbJyuzSB9AJ9Ykx9wi1mc4uTf\",\n            \"Flags\": 26214400,\n            \"OwnerCount\": 2,\n            \"VaultID\": \"A441A9B4AA29709F483813F86D0B3CA680EEBA1C9B27A13900F65EC31FA929B1\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rJCPrRU8kcLfqCKob1j9EivLa4wG5pF4C2\",\n            \"RootIndex\": \"E2464506C72BCF889380065B34A557024598A33171769A0DC9950F00CF922F27\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"E2464506C72BCF889380065B34A557024598A33171769A0DC9950F00CF922F27\",\n          \"PreviousTxnID\": \"E142ECAE46CE053B3A7D0EA753464665FC8EE6F83375C6DBCAA308071C5050E6\",\n          \"PreviousTxnLgrSeq\": 370100\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tesSUCCESS\"\n  },\n  \"tx\": {\n    \"Account\": \"rpZtrvuiVDhtSDZPm7axXgNB7iW3J4avwQ\",\n    \"Asset\": {\n      \"currency\": \"USD\",\n      \"issuer\": \"rJCPrRU8kcLfqCKob1j9EivLa4wG5pF4C2\"\n    },\n    \"AssetsMaximum\": \"500\",\n    \"Data\": \"7661756C74206D65746164617461\",\n    \"Fee\": \"5000000\",\n    \"Flags\": 0,\n    \"LastLedgerSequence\": 370122,\n    \"MPTokenMetadata\": \"7368617265206D65746164617461\",\n    \"NetworkID\": 3222,\n    \"Sequence\": 370094,\n    \"SigningPubKey\": \"EDFDA5D690EF90A4F0C9815422C19E059FA20882EF84F2B92993A094858546AEA7\",\n    \"TransactionType\": \"VaultCreate\",\n    \"TxnSignature\": \"F2C2AD6C9E97C012DDF32635FE83D1C284EB826244BFC7F93BFE8D6A30E360220CE3EE14FB5117EFF00B69C347D8963AEA2AB3501F1DB6A25B0BEC9A539BE50F\",\n    \"WithdrawalPolicy\": 1,\n    \"ctid\": \"C005A5B800000C96\",\n    \"date\": 807028412,\n    \"ledger_index\": 370104\n  },\n  \"validated\": true\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/VaultDelete/Description.tsx",
    "content": "import { Trans } from 'react-i18next'\nimport type { VaultDelete } from 'xrpl'\nimport { TransactionDescriptionProps } from '../types'\nimport { Account } from '../../Account'\n\nexport const Description = ({\n  data,\n}: TransactionDescriptionProps<VaultDelete>) => {\n  const { tx } = data\n  const { Account: account, VaultID: vaultId } = tx\n  return (\n    <Trans\n      i18nKey=\"account_deletes_vault\"\n      components={{\n        Account: <Account account={account} />,\n        VaultID: <b>{vaultId}</b>,\n      }}\n    />\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/VaultDelete/Simple.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport type { VaultDelete } from 'xrpl'\nimport { TransactionSimpleComponent, TransactionSimpleProps } from '../types'\nimport { SimpleRow } from '../SimpleRow'\n\nexport const Simple: TransactionSimpleComponent = (\n  props: TransactionSimpleProps<VaultDelete>,\n) => {\n  const { t } = useTranslation()\n  const { data } = props\n  const { VaultID: vaultId } = data.instructions\n  return (\n    <SimpleRow label={t('vault_id')} data-testid=\"vault_id\">\n      {vaultId}\n    </SimpleRow>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/VaultDelete/TableDetail.tsx",
    "content": "import { t } from 'i18next'\nimport type { VaultDelete } from 'xrpl'\nimport { TransactionTableDetailProps } from '../types'\n\nexport const TableDetail = ({\n  instructions,\n}: TransactionTableDetailProps<VaultDelete>) => {\n  const { VaultID: vaultId } = instructions\n  return (\n    <div className=\"vault-delete\">\n      <span className=\"label\">{t('deletes')}</span>\n      <span>\n        {t('vault_delete_table_detail')} <b>{vaultId}</b>\n      </span>\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/VaultDelete/index.ts",
    "content": "import {\n  TransactionAction,\n  TransactionCategory,\n  TransactionMapping,\n} from '../types'\nimport { Description } from './Description'\nimport { Simple } from './Simple'\nimport { TableDetail } from './TableDetail'\n\nexport const VaultDeleteTransaction: TransactionMapping = {\n  Description,\n  Simple,\n  TableDetail,\n  action: TransactionAction.FINISH,\n  category: TransactionCategory.OTHER,\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/VaultDelete/test/VaultDeleteDescription.test.tsx",
    "content": "import i18n from '../../../../../../i18n/testConfigEnglish'\nimport { createDescriptionRenderFactory } from '../../test'\nimport { Description } from '../Description'\nimport mockVaultCreate from './mock_data/VaultDelete.json'\n\nconst renderComponent = createDescriptionRenderFactory(Description, i18n)\n\ndescribe('VaultDelete: Description', () => {\n  it('renders', () => {\n    const { container, unmount } = renderComponent(mockVaultCreate)\n    expect(container).toHaveTextContent(\n      'rLR12AgChXxLoQsuLCizNCgh5pt5jPheo1 deleted a vault with ID 2AA88C4CA646645E35E38B8D51CD2CA50BDE14A3F3FFE3838F2C8DCE95C2BABD',\n    )\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/VaultDelete/test/VaultDeleteSimple.test.tsx",
    "content": "import { expectSimpleRowText, createSimpleRenderFactory } from '../../test'\nimport { Simple } from '../Simple'\nimport mockVaultDelete from './mock_data/VaultDelete.json'\n\nconst renderComponent = createSimpleRenderFactory(Simple)\n\ndescribe('VaultDelete: Simple', () => {\n  it('renders', () => {\n    const { container, unmount } = renderComponent(mockVaultDelete)\n    expectSimpleRowText(\n      container,\n      'vault_id',\n      '2AA88C4CA646645E35E38B8D51CD2CA50BDE14A3F3FFE3838F2C8DCE95C2BABD',\n    )\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/VaultDelete/test/VaultDeleteTableDetail.test.tsx",
    "content": "import i18n from '../../../../../../i18n/testConfigEnglish'\nimport { createTableDetailRenderFactory } from '../../test'\nimport { TableDetail } from '../TableDetail'\nimport mockVaultDelete from './mock_data/VaultDelete.json'\n\nconst renderComponent = createTableDetailRenderFactory(TableDetail, i18n)\n\ndescribe('VaultDeleteTableDetail', () => {\n  it('render VaultDeleteTableDetail', () => {\n    const { container, unmount } = renderComponent(mockVaultDelete)\n    expect(container).toHaveTextContent(\n      // \"deletes vault\" is displayed on the UI\n      'deletesvault with id 2AA88C4CA646645E35E38B8D51CD2CA50BDE14A3F3FFE3838F2C8DCE95C2BABD',\n    )\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/VaultDelete/test/mock_data/VaultDelete.json",
    "content": "{\n  \"close_time_iso\": \"2025-07-29T18:04:41Z\",\n  \"ctid\": \"C00626A700000C96\",\n  \"hash\": \"1C6B4A727D341E73A72FA5413B0B07284D789AB4B37E2472E1CCFA8154B86786\",\n  \"ledger_hash\": \"397ACCF91F8CF3FB26EF29872F5DD260A7FA2DB1F6852E2DC24FA90F3F616D4E\",\n  \"ledger_index\": 403111,\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            },\n            \"Flags\": 1048576,\n            \"HighLimit\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"r3gsrBk7HvrKecVHdkUmYywnMKahispvoY\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"r3r1vU5c2N5R7Ruv3v5daqfQ4MGzr9FZAZ\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"0\",\n            \"PreviousTxnID\": \"37729284C0A01CA720EC2F96978D8577AB7057B348234905510E97665D649A87\",\n            \"PreviousTxnLgrSeq\": 403109\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"009071D98F3BC8B763E7C89375504E810161BDE196C3FA3E225F131FF73659EC\",\n          \"PreviousFields\": {\n            \"Flags\": 1114112\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"r3r1vU5c2N5R7Ruv3v5daqfQ4MGzr9FZAZ\",\n            \"PreviousTxnID\": \"E1D5E38683094008D77E120B704E94446FA762FE4A1B0CAA7423D208748DAEF2\",\n            \"PreviousTxnLgrSeq\": 403102,\n            \"RootIndex\": \"06120FA67193028575B03EE78F230318E8303C4708AD8BDEF9EFFE327D5FCFA3\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"06120FA67193028575B03EE78F230318E8303C4708AD8BDEF9EFFE327D5FCFA3\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"r3gsrBk7HvrKecVHdkUmYywnMKahispvoY\",\n            \"RootIndex\": \"0BBF6DF6E7E3B213C10F0E9A3E7550DE8F9CBD2A88D19FE8F2CEB5173ADA98F7\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"0BBF6DF6E7E3B213C10F0E9A3E7550DE8F9CBD2A88D19FE8F2CEB5173ADA98F7\",\n          \"PreviousTxnID\": \"E1D5E38683094008D77E120B704E94446FA762FE4A1B0CAA7423D208748DAEF2\",\n          \"PreviousTxnLgrSeq\": 403102\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r3r1vU5c2N5R7Ruv3v5daqfQ4MGzr9FZAZ\",\n            \"Asset\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"r3gsrBk7HvrKecVHdkUmYywnMKahispvoY\"\n            },\n            \"AssetsAvailable\": \"0\",\n            \"AssetsMaximum\": \"1000\",\n            \"AssetsTotal\": \"0\",\n            \"Data\": \"75706461746564206D65746164617461\",\n            \"Flags\": 0,\n            \"LossUnrealized\": \"0\",\n            \"Owner\": \"rLR12AgChXxLoQsuLCizNCgh5pt5jPheo1\",\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"37729284C0A01CA720EC2F96978D8577AB7057B348234905510E97665D649A87\",\n            \"PreviousTxnLgrSeq\": 403109,\n            \"Sequence\": 403093,\n            \"ShareMPTID\": \"000000014CF362539B39EF0FB60A5BC07247E9498609049D\",\n            \"WithdrawalPolicy\": 1\n          },\n          \"LedgerEntryType\": \"Vault\",\n          \"LedgerIndex\": \"2AA88C4CA646645E35E38B8D51CD2CA50BDE14A3F3FFE3838F2C8DCE95C2BABD\"\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rLR12AgChXxLoQsuLCizNCgh5pt5jPheo1\",\n            \"PreviousTxnID\": \"E1D5E38683094008D77E120B704E94446FA762FE4A1B0CAA7423D208748DAEF2\",\n            \"PreviousTxnLgrSeq\": 403102,\n            \"RootIndex\": \"42C42D53D121FA35E66FDE1F2A326C3D0DE072321C719CF30B5009BC247D0CA0\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"42C42D53D121FA35E66FDE1F2A326C3D0DE072321C719CF30B5009BC247D0CA0\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rLR12AgChXxLoQsuLCizNCgh5pt5jPheo1\",\n            \"Balance\": \"85000000\",\n            \"Flags\": 0,\n            \"OwnerCount\": 0,\n            \"Sequence\": 403096\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"BE2D185528E7B5A33A35E1ED9C902A8D7217B8DB0EAD0AF8F405B739DA1CFA35\",\n          \"PreviousFields\": {\n            \"Balance\": \"90000000\",\n            \"OwnerCount\": 1,\n            \"Sequence\": 403095\n          },\n          \"PreviousTxnID\": \"16D095B9D78138E4335CD48D67F3D2ABF72B4C704452A20AC26B86CF81BC5413\",\n          \"PreviousTxnLgrSeq\": 403104\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r3r1vU5c2N5R7Ruv3v5daqfQ4MGzr9FZAZ\",\n            \"Balance\": \"0\",\n            \"Flags\": 26214400,\n            \"OwnerCount\": 0,\n            \"PreviousTxnID\": \"E1D5E38683094008D77E120B704E94446FA762FE4A1B0CAA7423D208748DAEF2\",\n            \"PreviousTxnLgrSeq\": 403102,\n            \"Sequence\": 0,\n            \"VaultID\": \"2AA88C4CA646645E35E38B8D51CD2CA50BDE14A3F3FFE3838F2C8DCE95C2BABD\"\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"C2D6260E51B848509F5F984283170AA6032B302CAD5A7D72F8A8D427ED6AF127\",\n          \"PreviousFields\": {\n            \"OwnerCount\": 2\n          }\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 56,\n            \"Issuer\": \"r3r1vU5c2N5R7Ruv3v5daqfQ4MGzr9FZAZ\",\n            \"MPTokenMetadata\": \"7368617265206D65746164617461\",\n            \"OutstandingAmount\": \"0\",\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"37729284C0A01CA720EC2F96978D8577AB7057B348234905510E97665D649A87\",\n            \"PreviousTxnLgrSeq\": 403109,\n            \"Sequence\": 1\n          },\n          \"LedgerEntryType\": \"MPTokenIssuance\",\n          \"LedgerIndex\": \"D6ADE074F02694A042C292F1381DCA59ABE8CD52BA8769D029C6ED83CB0B9113\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"E4D60A5BAA8D59B7F390AE5ED245AE40C274352555D3E5EEE7F95F818EDDE3B6\",\n          \"PreviousTxnID\": \"37729284C0A01CA720EC2F96978D8577AB7057B348234905510E97665D649A87\",\n          \"PreviousTxnLgrSeq\": 403109\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tesSUCCESS\"\n  },\n  \"tx\": {\n    \"Account\": \"rLR12AgChXxLoQsuLCizNCgh5pt5jPheo1\",\n    \"Fee\": \"5000000\",\n    \"Flags\": 0,\n    \"LastLedgerSequence\": 403129,\n    \"NetworkID\": 3222,\n    \"Sequence\": 403095,\n    \"SigningPubKey\": \"ED5AD76AF3C2D749B6C84474E05209FC3E5D87DE2599F7DE3E7E6F31D9D47FB691\",\n    \"TransactionType\": \"VaultDelete\",\n    \"TxnSignature\": \"D6A3F0AADD0ECEE2D51E051157EF582D8C1EFD84897A912557148FC963D9B93DFD725996F90ED2DF7F0922B34E47D28869E408EDD9F7CA2CEA681023EE57B70D\",\n    \"VaultID\": \"2AA88C4CA646645E35E38B8D51CD2CA50BDE14A3F3FFE3838F2C8DCE95C2BABD\",\n    \"ctid\": \"C00626A700000C96\",\n    \"date\": 807127481,\n    \"ledger_index\": 403111\n  },\n  \"validated\": true\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/VaultDeposit/Description.tsx",
    "content": "import { Trans } from 'react-i18next'\nimport type { VaultDeposit } from 'xrpl'\nimport { TransactionDescriptionProps } from '../types'\nimport { Amount } from '../../Amount'\nimport { Account } from '../../Account'\nimport { formatAmount } from '../../../../../rippled/lib/txSummary/formatAmount'\n\nexport const Description = ({\n  data,\n}: TransactionDescriptionProps<VaultDeposit>) => {\n  const { tx } = data\n  const { Account: account, VaultID: vaultId, Amount: amount } = tx\n  return (\n    <Trans\n      i18nKey=\"account_deposits_into_vault\"\n      components={{\n        Account: <Account account={account} />,\n        Amount: (\n          <b>\n            <Amount value={formatAmount(amount)} />\n          </b>\n        ),\n        VaultID: <b>{vaultId}</b>,\n      }}\n    />\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/VaultDeposit/Simple.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport type { VaultDeposit } from 'xrpl'\nimport { TransactionSimpleComponent, TransactionSimpleProps } from '../types'\nimport { SimpleRow } from '../SimpleRow'\nimport { Amount } from '../../Amount'\nimport { formatAmount } from '../../../../../rippled/lib/txSummary/formatAmount'\n\nexport const Simple: TransactionSimpleComponent = (\n  props: TransactionSimpleProps<VaultDeposit>,\n) => {\n  const { t } = useTranslation()\n  const { data } = props\n  const { VaultID: vaultId, Amount: amount } = data.instructions\n  return (\n    <>\n      <SimpleRow label={t('vault_id')} data-testid=\"vault_id\">\n        {vaultId}\n      </SimpleRow>\n      <SimpleRow label={t('amount')} data-testid=\"amount\">\n        <Amount value={formatAmount(amount)} />\n      </SimpleRow>\n    </>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/VaultDeposit/TableDetail.tsx",
    "content": "import { t } from 'i18next'\nimport type { VaultDeposit } from 'xrpl'\nimport { TransactionTableDetailProps } from '../types'\nimport { formatAmount } from '../../../../../rippled/lib/txSummary/formatAmount'\nimport { Amount } from '../../Amount'\n\nexport const TableDetail = ({\n  instructions,\n}: TransactionTableDetailProps<VaultDeposit>) => {\n  const { VaultID: vaultId, Amount: amount } = instructions\n  return (\n    <div className=\"vault-deposit\">\n      <span className=\"label\">{t('send')}</span>\n      <Amount value={formatAmount(amount)} />\n      <span>{`${t('to')} ${t('vault_id')}`}</span>\n      <b>{vaultId}</b>\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/VaultDeposit/index.ts",
    "content": "import {\n  TransactionAction,\n  TransactionCategory,\n  TransactionMapping,\n} from '../types'\nimport { Description } from './Description'\nimport { Simple } from './Simple'\nimport { TableDetail } from './TableDetail'\n\nexport const VaultDepositTransaction: TransactionMapping = {\n  Description,\n  Simple,\n  TableDetail,\n  action: TransactionAction.SEND,\n  category: TransactionCategory.OTHER,\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/VaultDeposit/test/VaultDepositDescription.test.tsx",
    "content": "import i18n from '../../../../../../i18n/testConfigEnglish'\nimport { createDescriptionRenderFactory } from '../../test'\nimport { Description } from '../Description'\nimport mockVaultCreate from './mock_data/VaultDeposit.json'\n\nconst renderComponent = createDescriptionRenderFactory(Description, i18n)\n\ndescribe('VaultDeposit: Description', () => {\n  it('renders', () => {\n    const { container, unmount } = renderComponent(mockVaultCreate)\n    expect(container).toHaveTextContent(\n      'rsuz1RpQHqLXnMqtPuP7qWFpccTKN651VK deposits $10.00 USD.rLm1zd4jWxwkoUcvbkRevwt7WC3GffF8B9 into Vault ID C70AAB4EB1823B744559AF64D495AD084AC4113C2CFA4F71EB8DD8BB811137C2',\n    )\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/VaultDeposit/test/VaultDepositSimple.test.tsx",
    "content": "import { expectSimpleRowText, createSimpleRenderFactory } from '../../test'\nimport { Simple } from '../Simple'\nimport mockVaultDeposit from './mock_data/VaultDeposit.json'\n\nconst renderComponent = createSimpleRenderFactory(Simple)\n\ndescribe('VaultDeposit: Simple', () => {\n  it('renders', () => {\n    const { container, unmount } = renderComponent(mockVaultDeposit)\n    expectSimpleRowText(\n      container,\n      'vault_id',\n      'C70AAB4EB1823B744559AF64D495AD084AC4113C2CFA4F71EB8DD8BB811137C2',\n    )\n    expectSimpleRowText(\n      container,\n      'amount',\n      '$10.00 USD.rLm1zd4jWxwkoUcvbkRevwt7WC3GffF8B9',\n    )\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/VaultDeposit/test/VaultDepositTableDetail.test.tsx",
    "content": "import i18n from '../../../../../../i18n/testConfigEnglish'\nimport { createTableDetailRenderFactory } from '../../test'\nimport { TableDetail } from '../TableDetail'\nimport mockVaultDeposit from './mock_data/VaultDeposit.json'\n\nconst renderComponent = createTableDetailRenderFactory(TableDetail, i18n)\n\ndescribe('VaultDepositTableDetail', () => {\n  it('render VaultDepositTableDetail', () => {\n    const { container, unmount } = renderComponent(mockVaultDeposit)\n    expect(container).toHaveTextContent(\n      'Send$10.00 USD.rLm1zd4jWxwkoUcvbkRevwt7WC3GffF8B9to Vault IDC70AAB4EB1823B744559AF64D495AD084AC4113C2CFA4F71EB8DD8BB811137C2',\n    )\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/VaultDeposit/test/mock_data/VaultDeposit.json",
    "content": "{\n  \"close_time_iso\": \"2025-07-29T15:13:41Z\",\n  \"ctid\": \"C006195000000C96\",\n  \"hash\": \"33AA1B997DE5C986FA3DBA11FBE33AEBB6CADF48709FECFE86071517EA0AA83D\",\n  \"ledger_hash\": \"C9DF7EC190B5C53D9A108A3B95EA70AF8B51B25B1132480DDB173CC430917AA6\",\n  \"ledger_index\": 399696,\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"CreatedNode\": {\n          \"LedgerEntryType\": \"MPToken\",\n          \"LedgerIndex\": \"29D0BE848B064BFDAEE197630604C0030931C0C85C6D1E36212E85E13F4E9B44\",\n          \"NewFields\": {\n            \"Account\": \"rsuz1RpQHqLXnMqtPuP7qWFpccTKN651VK\",\n            \"MPTAmount\": \"10\",\n            \"MPTokenIssuanceID\": \"000000016280D64707D6DEE9A005C1F3E4BDF750D1103CAB\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"990\"\n            },\n            \"Flags\": 65536,\n            \"HighLimit\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rLm1zd4jWxwkoUcvbkRevwt7WC3GffF8B9\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rsuz1RpQHqLXnMqtPuP7qWFpccTKN651VK\",\n              \"value\": \"1000\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"5C7F7D47416E8B351E663A15CD8CED360F7E21E4D4831B81CF91DDA26AFFB101\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"1000\"\n            }\n          },\n          \"PreviousTxnID\": \"ED08BDCE7E722DF2F32C8AE11943BEC73A387D57641ACEE819C6ADD38F9D32AA\",\n          \"PreviousTxnLgrSeq\": 399692\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"10\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rLm1zd4jWxwkoUcvbkRevwt7WC3GffF8B9\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"r9yqZZsoqNfurRrrKcot8vsPThNEAy26e6\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"7C031D7DD4883D49E03982A0413312CA7E8173F034773C1EACBDC210C40510B7\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"0\"\n            }\n          },\n          \"PreviousTxnID\": \"991FC86BFF463DF5CC1D1A1BCA805D80B6B107BBF84AF918427446094D4EECBA\",\n          \"PreviousTxnLgrSeq\": 399693\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 56,\n            \"Issuer\": \"r9yqZZsoqNfurRrrKcot8vsPThNEAy26e6\",\n            \"MPTokenMetadata\": \"7368617265206D65746164617461\",\n            \"OutstandingAmount\": \"10\",\n            \"OwnerNode\": \"0\",\n            \"Sequence\": 1\n          },\n          \"LedgerEntryType\": \"MPTokenIssuance\",\n          \"LedgerIndex\": \"AC5B35F62CD94D42F05546C42EC573486BF57FE1204511E04798895C3168B4BE\",\n          \"PreviousFields\": {\n            \"OutstandingAmount\": \"0\"\n          },\n          \"PreviousTxnID\": \"991FC86BFF463DF5CC1D1A1BCA805D80B6B107BBF84AF918427446094D4EECBA\",\n          \"PreviousTxnLgrSeq\": 399693\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"r9yqZZsoqNfurRrrKcot8vsPThNEAy26e6\",\n            \"Asset\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rLm1zd4jWxwkoUcvbkRevwt7WC3GffF8B9\"\n            },\n            \"AssetsAvailable\": \"10\",\n            \"AssetsMaximum\": \"1000\",\n            \"AssetsTotal\": \"10\",\n            \"Data\": \"75706461746564206D65746164617461\",\n            \"Flags\": 0,\n            \"LossUnrealized\": \"0\",\n            \"Owner\": \"rpCPL444BWuq8QeYRfdxZtEvGk8q78wdtz\",\n            \"OwnerNode\": \"0\",\n            \"Sequence\": 399683,\n            \"ShareMPTID\": \"000000016280D64707D6DEE9A005C1F3E4BDF750D1103CAB\",\n            \"WithdrawalPolicy\": 1\n          },\n          \"LedgerEntryType\": \"Vault\",\n          \"LedgerIndex\": \"C70AAB4EB1823B744559AF64D495AD084AC4113C2CFA4F71EB8DD8BB811137C2\",\n          \"PreviousFields\": {\n            \"AssetsAvailable\": \"0\",\n            \"AssetsTotal\": \"0\"\n          },\n          \"PreviousTxnID\": \"CFD574ED6554C7333E1776AF82DDDE26376486A54829B08C28953658FEC2CC11\",\n          \"PreviousTxnLgrSeq\": 399694\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rsuz1RpQHqLXnMqtPuP7qWFpccTKN651VK\",\n            \"Balance\": \"94999988\",\n            \"Flags\": 0,\n            \"OwnerCount\": 2,\n            \"Sequence\": 399687\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"D5C5F2BE731D123C24411AC0FCA67D4D7F5409E967760B67DF1BC830E98840FC\",\n          \"PreviousFields\": {\n            \"Balance\": \"99999988\",\n            \"OwnerCount\": 1,\n            \"Sequence\": 399686\n          },\n          \"PreviousTxnID\": \"27580794DAF3E5134D493B4CFF01B058CB42A662B66875BEAA0CE585B43A0DCF\",\n          \"PreviousTxnLgrSeq\": 399690\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rsuz1RpQHqLXnMqtPuP7qWFpccTKN651VK\",\n            \"RootIndex\": \"E9DE719C20FECAAD87143F6C43A6826D32CBD6CA869E3A5761383993CB6B751E\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"E9DE719C20FECAAD87143F6C43A6826D32CBD6CA869E3A5761383993CB6B751E\",\n          \"PreviousTxnID\": \"27580794DAF3E5134D493B4CFF01B058CB42A662B66875BEAA0CE585B43A0DCF\",\n          \"PreviousTxnLgrSeq\": 399690\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tesSUCCESS\"\n  },\n  \"tx\": {\n    \"Account\": \"rsuz1RpQHqLXnMqtPuP7qWFpccTKN651VK\",\n    \"Amount\": {\n      \"currency\": \"USD\",\n      \"issuer\": \"rLm1zd4jWxwkoUcvbkRevwt7WC3GffF8B9\",\n      \"value\": \"10\"\n    },\n    \"Fee\": \"5000000\",\n    \"Flags\": 0,\n    \"LastLedgerSequence\": 399714,\n    \"NetworkID\": 3222,\n    \"Sequence\": 399686,\n    \"SigningPubKey\": \"ED35A3E6817AB138294A4556C35C9E821232261F5B30A34E56B37C6AAE45342551\",\n    \"TransactionType\": \"VaultDeposit\",\n    \"TxnSignature\": \"38E017D21758FFEC46A8BC572E7F63B3A523656A094E85123790DB9DC434FF5D81F1153E632E94823515AB76D33A63D3F5F28D540369370A189B77E76262EA0B\",\n    \"VaultID\": \"C70AAB4EB1823B744559AF64D495AD084AC4113C2CFA4F71EB8DD8BB811137C2\",\n    \"ctid\": \"C006195000000C96\",\n    \"date\": 807117221,\n    \"ledger_index\": 399696\n  },\n  \"validated\": true\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/VaultSet/Description.tsx",
    "content": "import { Trans } from 'react-i18next'\nimport type { VaultSet } from 'xrpl'\nimport { TransactionDescriptionProps } from '../types'\nimport { isValidJsonString } from '../../../utils'\nimport { JsonView } from '../../JsonView'\n\nexport const Description = ({\n  data,\n}: TransactionDescriptionProps<VaultSet>) => {\n  const { tx } = data\n  const { Data, AssetsMaximum: assetsMaximum, DomainID: domainId } = tx\n  return (\n    <div data-testid=\"desc\">\n      {Data && (\n        <div data-testid=\"data\">\n          <Trans\n            i18nKey=\"set_vault_data\"\n            components={{\n              Data: (\n                <div>\n                  {isValidJsonString(Data) ? (\n                    <JsonView data={JSON.parse(Data)} />\n                  ) : (\n                    <b>{Data}</b>\n                  )}\n                </div>\n              ),\n            }}\n          />\n        </div>\n      )}\n      {assetsMaximum && (\n        <div data-testid=\"assets_maximum\">\n          <Trans\n            i18nKey=\"set_vault_assets_maximum\"\n            components={{\n              AssetsMaximum: <b>{assetsMaximum}</b>,\n            }}\n          />\n        </div>\n      )}\n      {domainId && (\n        <div data-testid=\"domain_id\">\n          <Trans\n            i18nKey=\"set_vault_domain_id\"\n            components={{\n              DomainID: <b>{domainId}</b>,\n            }}\n          />\n        </div>\n      )}\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/VaultSet/Simple.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport type { VaultSet } from 'xrpl'\nimport { TransactionSimpleComponent, TransactionSimpleProps } from '../types'\nimport { SimpleRow } from '../SimpleRow'\nimport { isValidJsonString } from '../../../utils'\nimport { JsonView } from '../../JsonView'\n\nexport const Simple: TransactionSimpleComponent = (\n  props: TransactionSimpleProps<VaultSet>,\n) => {\n  const { t } = useTranslation()\n  const { data } = props\n  const { VaultID, Data, AssetsMaximum, DomainID } = data.instructions\n  return (\n    <>\n      <SimpleRow label={t('vault_id')} data-testid=\"vault_id\">\n        {VaultID}\n      </SimpleRow>\n      {AssetsMaximum && (\n        <SimpleRow label={t('assets_maximum')} data-testid=\"assets_maximum\">\n          {AssetsMaximum}\n        </SimpleRow>\n      )}\n      {Data && (\n        <SimpleRow label={t('data')} className=\"dt\" data-testid=\"data\">\n          {isValidJsonString(Data) ? (\n            <JsonView data={JSON.parse(Data)} />\n          ) : (\n            Data\n          )}\n        </SimpleRow>\n      )}\n      {DomainID && (\n        <SimpleRow\n          label={t('domain_id')}\n          className=\"dt\"\n          data-testid=\"domain_id\"\n        >\n          DomainID\n        </SimpleRow>\n      )}\n    </>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/VaultSet/TableDetail.tsx",
    "content": "import { t } from 'i18next'\nimport type { VaultSet } from 'xrpl'\nimport { TransactionTableDetailProps } from '../types'\n\nexport const TableDetail = ({\n  instructions,\n}: TransactionTableDetailProps<VaultSet>) => {\n  const {\n    VaultID: vaultId,\n    Data: data,\n    AssetsMaximum: assetsMaximum,\n    DomainID: domainId,\n  } = instructions\n  return (\n    <>\n      <div className=\"vault-id\">\n        <span className=\"label\">{t('vault_id')}: </span>\n        <span className=\"case-sensitive\">{vaultId}</span>\n      </div>\n      <>\n        {data && (\n          <>\n            <span className=\"label\">{t('data')}: </span>\n            <span className=\"case-sensitive\">{data}</span>\n          </>\n        )}\n        {assetsMaximum && (\n          <>\n            <span className=\"label\">{t('assets_maximum')}: </span>\n            <span className=\"case-sensitive\">{assetsMaximum}</span>\n          </>\n        )}\n        {domainId && (\n          <>\n            <span className=\"label\">{t('domain_id')}: </span>\n            <span className=\"case-sensitive\">{domainId}</span>\n          </>\n        )}\n      </>\n    </>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/VaultSet/index.ts",
    "content": "import {\n  TransactionAction,\n  TransactionCategory,\n  TransactionMapping,\n} from '../types'\nimport { Description } from './Description'\nimport { Simple } from './Simple'\nimport { TableDetail } from './TableDetail'\n\nexport const VaultSetTransaction: TransactionMapping = {\n  Description,\n  Simple,\n  TableDetail,\n  action: TransactionAction.MODIFY,\n  category: TransactionCategory.OTHER,\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/VaultSet/test/VaultSetDescription.test.tsx",
    "content": "import i18n from '../../../../../../i18n/testConfigEnglish'\nimport { createDescriptionRenderFactory } from '../../test'\nimport { Description } from '../Description'\nimport mockVaultSet from './mock_data/VaultSet.json'\n\nconst renderComponent = createDescriptionRenderFactory(Description, i18n)\n\ndescribe('VaultSet: Description', () => {\n  it('renders', () => {\n    const { container, unmount } = renderComponent(mockVaultSet)\n    expect(container.querySelector('[data-testid=\"data\"]')).toHaveTextContent(\n      `It sets the Vault Data to 75706461746564206D65746164617461`,\n    )\n    expect(\n      container.querySelector('[data-testid=\"assets_maximum\"]'),\n    ).toHaveTextContent(`It sets the Vault Assets Maximum to 1000`)\n    expect(\n      container.querySelector('[data-testid=\"domain_id\"]'),\n    ).not.toBeInTheDocument()\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/VaultSet/test/VaultSetSimple.test.tsx",
    "content": "import {\n  expectSimpleRowText,\n  createSimpleRenderFactory,\n  expectSimpleRowNotToExist,\n} from '../../test'\nimport { Simple } from '../Simple'\nimport mockVaultSet from './mock_data/VaultSet.json'\n\nconst renderComponent = createSimpleRenderFactory(Simple)\n\ndescribe('VaultSet: Simple', () => {\n  it('renders', () => {\n    const { container, unmount } = renderComponent(mockVaultSet)\n    expectSimpleRowText(\n      container,\n      'vault_id',\n      '47148BAF6D14F8456F859A4DFCF2B2921512E44C5E1EADD72D34F33F6ED2AA00',\n    )\n    expectSimpleRowText(container, 'assets_maximum', '1000')\n    expectSimpleRowText(container, 'data', '75706461746564206D65746164617461')\n    expectSimpleRowNotToExist(container, 'domain_id')\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/VaultSet/test/VaultSetTableDetail.test.tsx",
    "content": "import i18n from '../../../../../../i18n/testConfigEnglish'\nimport { createTableDetailRenderFactory } from '../../test'\nimport { TableDetail } from '../TableDetail'\nimport mockVaultSet from './mock_data/VaultSet.json'\n\nconst renderComponent = createTableDetailRenderFactory(TableDetail, i18n)\n\ndescribe('VaultSetTableDetail', () => {\n  it('render VaultSetTableDetail', () => {\n    const { container, unmount } = renderComponent(mockVaultSet)\n    expect(container).toHaveTextContent(\n      'Vault ID: 47148BAF6D14F8456F859A4DFCF2B2921512E44C5E1EADD72D34F33F6ED2AA00Data: 75706461746564206D65746164617461Assets Maximum: 1000',\n    )\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/VaultSet/test/mock_data/VaultSet.json",
    "content": "{\n  \"close_time_iso\": \"2025-07-28T15:55:32Z\",\n  \"ctid\": \"C005AC1F00000C96\",\n  \"hash\": \"E2AB3949F9A631B2C31BC8DF18F98BCD1B0FF9BF926C1864FF43560E67EFF011\",\n  \"ledger_hash\": \"8CF6E10DC61FF65C4B98B2DDE2A0656B3641790637802F49B25EBD49DB41F9AC\",\n  \"ledger_index\": 371743,\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rpKtkZCSwsae7ZtonSR8o85ZP1GvqVzAuw\",\n            \"Asset\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rHn1ezxvdeoeLpqzFC1HX72WRZkz3rkrWJ\"\n            },\n            \"AssetsAvailable\": \"0\",\n            \"AssetsMaximum\": \"1000\",\n            \"AssetsTotal\": \"0\",\n            \"Data\": \"75706461746564206D65746164617461\",\n            \"Flags\": 0,\n            \"LossUnrealized\": \"0\",\n            \"Owner\": \"rLGsxBVz897uvV65y63FueQcJ3uKs6dV5y\",\n            \"OwnerNode\": \"0\",\n            \"Sequence\": 371733,\n            \"ShareMPTID\": \"000000010E8AD00F08548712886AE47C160A87B6F7F15A27\",\n            \"WithdrawalPolicy\": 1\n          },\n          \"LedgerEntryType\": \"Vault\",\n          \"LedgerIndex\": \"47148BAF6D14F8456F859A4DFCF2B2921512E44C5E1EADD72D34F33F6ED2AA00\",\n          \"PreviousFields\": {\n            \"AssetsMaximum\": \"500\",\n            \"Data\": \"7661756C74206D65746164617461\"\n          },\n          \"PreviousTxnID\": \"72F0DBFAF6F3BAB986D76AA7339B890ACB2266260F6C6ED70EC6FFC9FA853BE9\",\n          \"PreviousTxnLgrSeq\": 371742\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rLGsxBVz897uvV65y63FueQcJ3uKs6dV5y\",\n            \"Balance\": \"90000000\",\n            \"Flags\": 0,\n            \"OwnerCount\": 1,\n            \"Sequence\": 371735\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"DB0E420F3B8D24A91B34C2DC8B15F9E39AA45EE830CB64CDA461C8A74C389C04\",\n          \"PreviousFields\": {\n            \"Balance\": \"95000000\",\n            \"Sequence\": 371734\n          },\n          \"PreviousTxnID\": \"72F0DBFAF6F3BAB986D76AA7339B890ACB2266260F6C6ED70EC6FFC9FA853BE9\",\n          \"PreviousTxnLgrSeq\": 371742\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tesSUCCESS\"\n  },\n  \"tx\": {\n    \"Account\": \"rLGsxBVz897uvV65y63FueQcJ3uKs6dV5y\",\n    \"AssetsMaximum\": \"1000\",\n    \"Data\": \"75706461746564206D65746164617461\",\n    \"Fee\": \"5000000\",\n    \"Flags\": 0,\n    \"LastLedgerSequence\": 371762,\n    \"NetworkID\": 3222,\n    \"Sequence\": 371734,\n    \"SigningPubKey\": \"EDEE722FE7746F8D30007EAC64C7E00D82F633BDB1D7B7D8764A64779ED0BC35D6\",\n    \"TransactionType\": \"VaultSet\",\n    \"TxnSignature\": \"DCB0B0F2EC3650CDED8EA00FC09EB542AF6840ABB5EC74AE094103749E53174F571F5522EF0CBE78DA5C5D3EA1DC29277A9C68CF2ABD67EC84C9772E1BFB3A0C\",\n    \"VaultID\": \"47148BAF6D14F8456F859A4DFCF2B2921512E44C5E1EADD72D34F33F6ED2AA00\",\n    \"ctid\": \"C005AC1F00000C96\",\n    \"date\": 807033332,\n    \"ledger_index\": 371743\n  },\n  \"validated\": true\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/VaultWithdraw/Description.tsx",
    "content": "import { Trans } from 'react-i18next'\nimport { t } from 'i18next'\nimport type { VaultWithdraw } from 'xrpl'\nimport { TransactionDescriptionProps } from '../types'\nimport { Amount } from '../../Amount'\nimport { Account } from '../../Account'\nimport { formatAmount } from '../../../../../rippled/lib/txSummary/formatAmount'\n\nexport const Description = ({\n  data,\n}: TransactionDescriptionProps<VaultWithdraw>) => {\n  const { tx } = data\n  const {\n    Account: account,\n    VaultID: vaultId,\n    Amount: amount,\n    Destination: destination,\n  } = tx\n  return (\n    <Trans\n      i18nKey=\"account_withdraws_from_vault\"\n      components={{\n        Account: <Account account={account} />,\n        Amount: (\n          <b>\n            <Amount value={formatAmount(amount)} />\n          </b>\n        ),\n        VaultID: <b>{vaultId}</b>,\n        Destination: destination ? (\n          <>\n            <span> {t('to')} </span>\n            <Account account={destination} />\n          </>\n        ) : (\n          <span />\n        ),\n      }}\n    />\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/VaultWithdraw/Simple.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport type { VaultWithdraw } from 'xrpl'\nimport { TransactionSimpleComponent, TransactionSimpleProps } from '../types'\nimport { SimpleRow } from '../SimpleRow'\nimport { Amount } from '../../Amount'\nimport { formatAmount } from '../../../../../rippled/lib/txSummary/formatAmount'\nimport { Account } from '../../Account'\n\nexport const Simple: TransactionSimpleComponent = (\n  props: TransactionSimpleProps<VaultWithdraw>,\n) => {\n  const { t } = useTranslation()\n  const { data } = props\n  const {\n    VaultID: vaultId,\n    Amount: amount,\n    Destination: destination,\n  } = data.instructions\n  return (\n    <>\n      <SimpleRow label={t('vault_id')} data-testid=\"vault_id\">\n        {vaultId}\n      </SimpleRow>\n      <SimpleRow label={t('amount')} data-testid=\"amount\">\n        <Amount value={formatAmount(amount)} />\n      </SimpleRow>\n      {destination && (\n        <SimpleRow label={t('destination')} data-testid=\"destination\">\n          <Account account={destination} />\n        </SimpleRow>\n      )}\n    </>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/VaultWithdraw/TableDetail.tsx",
    "content": "import { t } from 'i18next'\nimport type { VaultWithdraw } from 'xrpl'\nimport { TransactionTableDetailProps } from '../types'\nimport { formatAmount } from '../../../../../rippled/lib/txSummary/formatAmount'\nimport { Amount } from '../../Amount'\nimport { Account } from '../../Account'\nimport { shortenVaultID } from '../../../utils'\n\nexport const TableDetail = ({\n  instructions,\n}: TransactionTableDetailProps<VaultWithdraw>) => {\n  const {\n    VaultID: vaultId,\n    Amount: amount,\n    Destination: destination,\n  } = instructions\n  return (\n    <div className=\"vault-withdraw\">\n      <span className=\"label\">{t('withdraws')}</span>\n      <Amount value={formatAmount(amount)} />\n      <span>{`${t('from')} ${t('vault_id')}`}</span>\n      <b>{shortenVaultID(vaultId)}</b>\n      {destination && (\n        <>\n          <span>${t('to')}</span> <Account account={destination} />\n        </>\n      )}\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/VaultWithdraw/index.ts",
    "content": "import {\n  TransactionAction,\n  TransactionCategory,\n  TransactionMapping,\n} from '../types'\nimport { Description } from './Description'\nimport { Simple } from './Simple'\nimport { TableDetail } from './TableDetail'\n\nexport const VaultWithdrawTransaction: TransactionMapping = {\n  Description,\n  Simple,\n  TableDetail,\n  action: TransactionAction.SEND,\n  category: TransactionCategory.OTHER,\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/VaultWithdraw/test/VaultWithdrawDescription.test.tsx",
    "content": "import i18n from '../../../../../../i18n/testConfigEnglish'\nimport { createDescriptionRenderFactory } from '../../test'\nimport { Description } from '../Description'\nimport mockVaultCreate from './mock_data/VaultWithdraw.json'\n\nconst renderComponent = createDescriptionRenderFactory(Description, i18n)\n\ndescribe('VaultWithdraw: Description', () => {\n  it('renders', () => {\n    const { container, unmount } = renderComponent(mockVaultCreate)\n    expect(container).toHaveTextContent(\n      'rQEzyNVohiNuWwYFnwUMEWeyK3KvACUbyB withdraws $5.00 USD.rMab3itPzruo5HLEVherc93Prf4tg5d7dx from Vault ID FCC4FB21E6F5B3E60661730C7F6F13A100E1E89FF4CF854D9A9B2F3DF967FD77',\n    )\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/VaultWithdraw/test/VaultWithdrawSimple.test.tsx",
    "content": "import { expectSimpleRowText, createSimpleRenderFactory } from '../../test'\nimport { Simple } from '../Simple'\nimport mockVaultWithdraw from './mock_data/VaultWithdraw.json'\n\nconst renderComponent = createSimpleRenderFactory(Simple)\n\ndescribe('VaultWithdraw: Simple', () => {\n  it('renders', () => {\n    const { container, unmount } = renderComponent(mockVaultWithdraw)\n    expectSimpleRowText(\n      container,\n      'vault_id',\n      'FCC4FB21E6F5B3E60661730C7F6F13A100E1E89FF4CF854D9A9B2F3DF967FD77',\n    )\n    expectSimpleRowText(\n      container,\n      'amount',\n      '$5.00 USD.rMab3itPzruo5HLEVherc93Prf4tg5d7dx',\n    )\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/VaultWithdraw/test/VaultWithdrawTableDetail.test.tsx",
    "content": "import i18n from '../../../../../../i18n/testConfigEnglish'\nimport { createTableDetailRenderFactory } from '../../test'\nimport { TableDetail } from '../TableDetail'\nimport mockVaultWithdraw from './mock_data/VaultWithdraw.json'\n\nconst renderComponent = createTableDetailRenderFactory(TableDetail, i18n)\n\ndescribe('VaultWithdrawTableDetail', () => {\n  it('render VaultWithdrawTableDetail', () => {\n    const { container, unmount } = renderComponent(mockVaultWithdraw)\n    expect(container).toHaveTextContent(\n      // \"withdraws $5.00\" is displayed on the UI\n      'withdraws$5.00 USD.rMab3itPzruo5HLEVherc93Prf4tg5d7dxfrom Vault IDFCC4FB21...67FD77',\n    )\n    unmount()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/VaultWithdraw/test/mock_data/VaultWithdraw.json",
    "content": "{\n  \"close_time_iso\": \"2025-07-29T16:47:21Z\",\n  \"ctid\": \"C006209F00000C96\",\n  \"hash\": \"372CD0ABA6ED9E375A3042AC8F47D5C6A25D4C88077547C1FE2991B3CF3A1382\",\n  \"ledger_hash\": \"6DBE1C014D47E0D8BA4267C1D54E51B539EAA01AAAD417403B78DA474C850485\",\n  \"ledger_index\": 401567,\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 56,\n            \"Issuer\": \"rER4URMRoAvPPbPVWqycZdK85rhJwRnQCB\",\n            \"MPTokenMetadata\": \"7368617265206D65746164617461\",\n            \"OutstandingAmount\": \"5\",\n            \"OwnerNode\": \"0\",\n            \"Sequence\": 1\n          },\n          \"LedgerEntryType\": \"MPTokenIssuance\",\n          \"LedgerIndex\": \"259D6E5DB97AC2329F153BD53077B9EF08C73ED6A8F95C88DBDA9FAF60E18DA4\",\n          \"PreviousFields\": {\n            \"OutstandingAmount\": \"10\"\n          },\n          \"PreviousTxnID\": \"2FED432AF524C5CD3D54EC462FD5ADFC77757A8CFFBF1448621AA46F2F941DF5\",\n          \"PreviousTxnLgrSeq\": 401565\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rQEzyNVohiNuWwYFnwUMEWeyK3KvACUbyB\",\n            \"Flags\": 0,\n            \"MPTAmount\": \"5\",\n            \"MPTokenIssuanceID\": \"000000019E2D7036879DFC217D7D2A92CC7349EEB0D703AA\",\n            \"OwnerNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"MPToken\",\n          \"LedgerIndex\": \"267C99D9B622D5F661117E51E0F58BDB03D3F077F381EB395CCD6AC8BE882AE9\",\n          \"PreviousFields\": {\n            \"MPTAmount\": \"10\"\n          },\n          \"PreviousTxnID\": \"2FED432AF524C5CD3D54EC462FD5ADFC77757A8CFFBF1448621AA46F2F941DF5\",\n          \"PreviousTxnLgrSeq\": 401565\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rQEzyNVohiNuWwYFnwUMEWeyK3KvACUbyB\",\n            \"Balance\": \"89999988\",\n            \"Flags\": 0,\n            \"OwnerCount\": 2,\n            \"Sequence\": 401557\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"544FECF19CF124E5D93D1A7D4973BDAA536C6D3DF8579A3E975445AD27542F52\",\n          \"PreviousFields\": {\n            \"Balance\": \"94999988\",\n            \"Sequence\": 401556\n          },\n          \"PreviousTxnID\": \"2FED432AF524C5CD3D54EC462FD5ADFC77757A8CFFBF1448621AA46F2F941DF5\",\n          \"PreviousTxnLgrSeq\": 401565\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-995\"\n            },\n            \"Flags\": 131072,\n            \"HighLimit\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rQEzyNVohiNuWwYFnwUMEWeyK3KvACUbyB\",\n              \"value\": \"1000\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rMab3itPzruo5HLEVherc93Prf4tg5d7dx\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"62D2CA23FC334A9E56B4EEC9E1F069862D31ED8BEB2A0DBB4A0FAD56E08B8DD4\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"-990\"\n            }\n          },\n          \"PreviousTxnID\": \"2FED432AF524C5CD3D54EC462FD5ADFC77757A8CFFBF1448621AA46F2F941DF5\",\n          \"PreviousTxnLgrSeq\": 401565\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Balance\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"5\"\n            },\n            \"Flags\": 1114112,\n            \"HighLimit\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rMab3itPzruo5HLEVherc93Prf4tg5d7dx\",\n              \"value\": \"0\"\n            },\n            \"HighNode\": \"0\",\n            \"LowLimit\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rER4URMRoAvPPbPVWqycZdK85rhJwRnQCB\",\n              \"value\": \"0\"\n            },\n            \"LowNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"RippleState\",\n          \"LedgerIndex\": \"69D9A5B5C98036058C4BF3FA2C18469268E377416535A7EC57D6AB795F6600D3\",\n          \"PreviousFields\": {\n            \"Balance\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rrrrrrrrrrrrrrrrrrrrBZbvji\",\n              \"value\": \"10\"\n            }\n          },\n          \"PreviousTxnID\": \"2FED432AF524C5CD3D54EC462FD5ADFC77757A8CFFBF1448621AA46F2F941DF5\",\n          \"PreviousTxnLgrSeq\": 401565\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rER4URMRoAvPPbPVWqycZdK85rhJwRnQCB\",\n            \"Asset\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rMab3itPzruo5HLEVherc93Prf4tg5d7dx\"\n            },\n            \"AssetsAvailable\": \"5\",\n            \"AssetsMaximum\": \"1000\",\n            \"AssetsTotal\": \"5\",\n            \"Data\": \"75706461746564206D65746164617461\",\n            \"Flags\": 0,\n            \"LossUnrealized\": \"0\",\n            \"Owner\": \"rEBAjhUfR1dPfiBKbBtYqyRrXTpyPLFBcM\",\n            \"OwnerNode\": \"0\",\n            \"Sequence\": 401553,\n            \"ShareMPTID\": \"000000019E2D7036879DFC217D7D2A92CC7349EEB0D703AA\",\n            \"WithdrawalPolicy\": 1\n          },\n          \"LedgerEntryType\": \"Vault\",\n          \"LedgerIndex\": \"FCC4FB21E6F5B3E60661730C7F6F13A100E1E89FF4CF854D9A9B2F3DF967FD77\",\n          \"PreviousFields\": {\n            \"AssetsAvailable\": \"10\",\n            \"AssetsTotal\": \"10\"\n          },\n          \"PreviousTxnID\": \"2FED432AF524C5CD3D54EC462FD5ADFC77757A8CFFBF1448621AA46F2F941DF5\",\n          \"PreviousTxnLgrSeq\": 401565\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tesSUCCESS\"\n  },\n  \"tx\": {\n    \"Account\": \"rQEzyNVohiNuWwYFnwUMEWeyK3KvACUbyB\",\n    \"Amount\": {\n      \"currency\": \"USD\",\n      \"issuer\": \"rMab3itPzruo5HLEVherc93Prf4tg5d7dx\",\n      \"value\": \"5\"\n    },\n    \"Fee\": \"5000000\",\n    \"Flags\": 0,\n    \"LastLedgerSequence\": 401585,\n    \"NetworkID\": 3222,\n    \"Sequence\": 401556,\n    \"SigningPubKey\": \"ED7FCFBD5471DAD24425FE859842671D2285F8653790892F87E1394C0BB8BEE7E9\",\n    \"TransactionType\": \"VaultWithdraw\",\n    \"TxnSignature\": \"052F1DEE5A92AF3DF48EB252CBA8FC53DFB966C1B90E323CE5C7FCDFCDCB00761A4B462B115F2BAF9FA511BEFDDA1F4F33BACDCF88D03A29094189BF893C7A07\",\n    \"VaultID\": \"FCC4FB21E6F5B3E60661730C7F6F13A100E1E89FF4CF854D9A9B2F3DF967FD77\",\n    \"ctid\": \"C006209F00000C96\",\n    \"date\": 807122841,\n    \"ledger_index\": 401567\n  },\n  \"validated\": true\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/XChainAccountCreateCommit/Simple.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { Amount } from '../../Amount'\nimport { TransactionSimpleComponent, TransactionSimpleProps } from '../types'\nimport { SimpleRow } from '../SimpleRow'\nimport { XChainBridge } from '../XChainBridge'\nimport { Account } from '../../Account'\n\nexport const Simple: TransactionSimpleComponent = (\n  props: TransactionSimpleProps,\n) => {\n  const { t } = useTranslation()\n  const {\n    data: {\n      instructions: {\n        lockingDoor,\n        lockingIssue,\n        issuingDoor,\n        issuingIssue,\n        amount,\n        bridgeOwner,\n        otherChainDestination,\n      },\n    },\n  } = props\n\n  return (\n    <>\n      <SimpleRow label={t('send')} data-testid=\"send\">\n        <Amount value={amount} />\n      </SimpleRow>\n      <XChainBridge\n        lockingDoor={lockingDoor}\n        lockingIssue={lockingIssue}\n        issuingDoor={issuingDoor}\n        issuingIssue={issuingIssue}\n        bridgeOwner={bridgeOwner}\n      />\n      <SimpleRow label={t('other_chain_destination')} data-testid=\"destination\">\n        <Account account={otherChainDestination} link={false} />\n      </SimpleRow>\n    </>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/XChainAccountCreateCommit/index.ts",
    "content": "import {\n  TransactionAction,\n  TransactionCategory,\n  TransactionMapping,\n} from '../types'\n\nimport { Simple } from './Simple'\nimport { parser } from './parser'\n\nexport const XChainAccountCreateCommitTransaction: TransactionMapping = {\n  Simple,\n  action: TransactionAction.CREATE,\n  category: TransactionCategory.XCHAIN,\n  parser,\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/XChainAccountCreateCommit/parser.ts",
    "content": "import { formatAmount } from '../../../../../rippled/lib/txSummary/formatAmount'\n\nexport function parser(tx: any, meta: any) {\n  const affectedNodes = meta.AffectedNodes\n  const bridgeMeta = affectedNodes.filter(\n    (node: any) =>\n      node.ModifiedNode && node.ModifiedNode.LedgerEntryType === 'Bridge',\n  )[0]\n  // TODO: somehow get the bridge owner via ledger_entry\n  // AffectedNodes won't contain the bridge owner if the transaction fails\n  return {\n    lockingDoor: tx.XChainBridge.LockingChainDoor,\n    lockingIssue: tx.XChainBridge.LockingChainIssue,\n    issuingDoor: tx.XChainBridge.IssuingChainDoor,\n    issuingIssue: tx.XChainBridge.IssuingChainIssue,\n    amount: formatAmount(tx.Amount),\n    otherChainDestination: tx.Destination,\n    bridgeOwner: bridgeMeta?.ModifiedNode?.FinalFields?.Account,\n  }\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/XChainAccountCreateCommit/test/XChainAccountCreateCommitSimple.test.tsx",
    "content": "import { createSimpleRenderFactory } from '../../test/createWrapperFactory'\nimport { Simple } from '../Simple'\nimport mockXChainAccountCreateCommit from './mock_data/XChainAccountCreateCommit.json'\nimport mockXChainAccountCreateCommitInsufficientFunds from './mock_data/XChainAccountCreateCommitInsufficientFunds.json'\nimport { expectSimpleRowText } from '../../test/expectations'\n\nconst renderComponent = createSimpleRenderFactory(Simple)\n\ndescribe('XChainAccountCreateCommitSimple', () => {\n  it('renders', () => {\n    const { container } = renderComponent(mockXChainAccountCreateCommit)\n\n    // check XChainBridge parts\n    expectSimpleRowText(\n      container,\n      'locking-chain-door',\n      'rGQLcxzT3Po9PsCk5Lj9uK7S1juThii9cR',\n    )\n    expect(\n      container.querySelector('[data-testid=\"locking-chain-door\"] a'),\n    ).toBeInTheDocument()\n    expectSimpleRowText(container, 'locking-chain-issue', '\\uE900 XRP')\n    expectSimpleRowText(\n      container,\n      'issuing-chain-door',\n      'rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh',\n    )\n    expect(\n      container.querySelector('[data-testid=\"issuing-chain-door\"] a'),\n    ).not.toBeInTheDocument()\n    expectSimpleRowText(container, 'issuing-chain-issue', '\\uE900 XRP')\n\n    expectSimpleRowText(container, 'send', '\\uE90010.00 XRP')\n    expectSimpleRowText(\n      container,\n      'destination',\n      'raFcdz1g8LWJDJWJE2ZKLRGdmUmsTyxaym',\n    )\n    expect(\n      container.querySelector('[data-testid=\"destination\"] a'),\n    ).not.toBeInTheDocument()\n  })\n\n  it('renders failed transaction', () => {\n    const { container } = renderComponent(\n      mockXChainAccountCreateCommitInsufficientFunds,\n    )\n\n    // check XChainBridge parts\n    expectSimpleRowText(\n      container,\n      'locking-chain-door',\n      'rGQLcxzT3Po9PsCk5Lj9uK7S1juThii9cR',\n    )\n    expect(\n      container.querySelector('[data-testid=\"locking-chain-door\"] a'),\n    ).not.toBeInTheDocument()\n    expectSimpleRowText(container, 'locking-chain-issue', '\\uE900 XRP')\n    expectSimpleRowText(\n      container,\n      'issuing-chain-door',\n      'rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh',\n    )\n    expect(\n      container.querySelector('[data-testid=\"issuing-chain-door\"] a'),\n    ).not.toBeInTheDocument()\n    expectSimpleRowText(container, 'issuing-chain-issue', '\\uE900 XRP')\n\n    expectSimpleRowText(container, 'send', '\\uE9001,000.00 XRP')\n    expectSimpleRowText(\n      container,\n      'destination',\n      'raFcdz1g8LWJDJWJE2ZKLRGdmUmsTyxaym',\n    )\n    expect(\n      container.querySelector('[data-testid=\"destination\"] a'),\n    ).not.toBeInTheDocument()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/XChainAccountCreateCommit/test/mock_data/XChainAccountCreateCommit.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"raFcdz1g8LWJDJWJE2ZKLRGdmUmsTyxaym\",\n    \"Amount\": \"10000000\",\n    \"Destination\": \"raFcdz1g8LWJDJWJE2ZKLRGdmUmsTyxaym\",\n    \"Fee\": \"10\",\n    \"Flags\": 0,\n    \"Sequence\": 8,\n    \"SignatureReward\": \"100\",\n    \"SigningPubKey\": \"026BB09608B42B5CB03F142B1325F52CF3DF5EBC4B2D3DE656F105701C28C0762C\",\n    \"TransactionType\": \"XChainAccountCreateCommit\",\n    \"TxnSignature\": \"3045022100A7E1180F1047C201EBF1BFB56A75BDE12B9668DD5093DFF4B3C4E97B1CB489F00220544ECF93FE65E0B33CD1C190DC471E33A529B27963A71104C3B16AEE0BD1C844\",\n    \"XChainBridge\": {\n      \"IssuingChainDoor\": \"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh\",\n      \"IssuingChainIssue\": { \"currency\": \"XRP\" },\n      \"LockingChainDoor\": \"rGQLcxzT3Po9PsCk5Lj9uK7S1juThii9cR\",\n      \"LockingChainIssue\": { \"currency\": \"XRP\" }\n    },\n    \"date\": \"2022-08-18T17:18:20Z\"\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"raFcdz1g8LWJDJWJE2ZKLRGdmUmsTyxaym\",\n            \"Balance\": \"979999870\",\n            \"Flags\": 0,\n            \"OwnerCount\": 0,\n            \"Sequence\": 9\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"1823595D6E1D18A9B18DF8C027F0FAA37283CA1EA7765FFB1BDC0445314EC412\",\n          \"PreviousFields\": {\n            \"Balance\": \"989999980\",\n            \"Sequence\": 8\n          },\n          \"PreviousTxnID\": \"1CBB9CAF7642E69C901BE990123AC4FC7309A3A2682E158F9D1A7046BDA8D787\",\n          \"PreviousTxnLgrSeq\": 8\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rGQLcxzT3Po9PsCk5Lj9uK7S1juThii9cR\",\n            \"Balance\": \"1020000080\",\n            \"Flags\": 0,\n            \"OwnerCount\": 2,\n            \"Sequence\": 5\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"E70AB073C5D41F35709E1A493F013D106443EA1FDEF9053312C5CEF131B776C6\",\n          \"PreviousFields\": {\n            \"Balance\": \"1009999980\"\n          },\n          \"PreviousTxnID\": \"A1BC2B8CF264364013083CA8E7B57C28A4E8C8FA5F4EC7E7459805283AB86CE8\",\n          \"PreviousTxnLgrSeq\": 7\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rGQLcxzT3Po9PsCk5Lj9uK7S1juThii9cR\",\n            \"Balance\": \"0\",\n            \"Flags\": 0,\n            \"MinAccountCreateAmount\": \"10000000\",\n            \"OwnerNode\": \"0\",\n            \"SignatureReward\": \"100\",\n            \"XChainAccountClaimCount\": \"0\",\n            \"XChainAccountCreateCount\": \"1\",\n            \"XChainBridge\": {\n              \"IssuingChainDoor\": \"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh\",\n              \"IssuingChainIssue\": { \"currency\": \"XRP\" },\n              \"LockingChainDoor\": \"rGQLcxzT3Po9PsCk5Lj9uK7S1juThii9cR\",\n              \"LockingChainIssue\": { \"currency\": \"XRP\" }\n            },\n            \"XChainClaimID\": \"0\"\n          },\n          \"LedgerEntryType\": \"Bridge\",\n          \"LedgerIndex\": \"EFFC3B47E68E9F74206D9C2F0E14279379E483A40A435AF7C7F729FCAD663DB1\",\n          \"PreviousFields\": {\n            \"XChainAccountCreateCount\": \"0\"\n          },\n          \"PreviousTxnID\": \"C048CF93B447AE8811FDB41A24E89605BABCA24582A7B70B47498D7EFDB9BD7B\",\n          \"PreviousTxnLgrSeq\": 4\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tesSUCCESS\"\n  },\n  \"hash\": \"C7B048D4619600A79E2080B3474303350E8C0552DBC82B72045F72A2428A96D3\",\n  \"ledger_index\": 9,\n  \"date\": \"2022-08-18T17:18:20Z\"\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/XChainAccountCreateCommit/test/mock_data/XChainAccountCreateCommitInsufficientFunds.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"raFcdz1g8LWJDJWJE2ZKLRGdmUmsTyxaym\",\n    \"Amount\": \"1000000000\",\n    \"Destination\": \"raFcdz1g8LWJDJWJE2ZKLRGdmUmsTyxaym\",\n    \"Fee\": \"10\",\n    \"Flags\": 0,\n    \"Sequence\": 7,\n    \"SignatureReward\": \"100\",\n    \"SigningPubKey\": \"026BB09608B42B5CB03F142B1325F52CF3DF5EBC4B2D3DE656F105701C28C0762C\",\n    \"TransactionType\": \"XChainAccountCreateCommit\",\n    \"TxnSignature\": \"304502210083718A57DDBFAAA3D58C6ADB116B418521FB157A794FA21BA47DC675318693550220774C412491186E55925803E177969921E7706196A1647CCA06168D448446C7BF\",\n    \"XChainBridge\": {\n      \"IssuingChainDoor\": \"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh\",\n      \"IssuingChainIssue\": { \"currency\": \"XRP\" },\n      \"LockingChainDoor\": \"rGQLcxzT3Po9PsCk5Lj9uK7S1juThii9cR\",\n      \"LockingChainIssue\": { \"currency\": \"XRP\" }\n    },\n    \"date\": \"2022-08-18T17:18:11Z\"\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"raFcdz1g8LWJDJWJE2ZKLRGdmUmsTyxaym\",\n            \"Balance\": \"989999980\",\n            \"Flags\": 0,\n            \"OwnerCount\": 0,\n            \"Sequence\": 8\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"1823595D6E1D18A9B18DF8C027F0FAA37283CA1EA7765FFB1BDC0445314EC412\",\n          \"PreviousFields\": {\n            \"Balance\": \"989999990\",\n            \"Sequence\": 7\n          },\n          \"PreviousTxnID\": \"A1BC2B8CF264364013083CA8E7B57C28A4E8C8FA5F4EC7E7459805283AB86CE8\",\n          \"PreviousTxnLgrSeq\": 7\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tecINSUFFICIENT_FUNDS\"\n  },\n  \"hash\": \"1CBB9CAF7642E69C901BE990123AC4FC7309A3A2682E158F9D1A7046BDA8D787\",\n  \"ledger_index\": 8,\n  \"date\": \"2022-08-18T17:18:11Z\"\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/XChainAddAccountCreateAttestation/Simple.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { TransactionSimpleComponent, TransactionSimpleProps } from '../types'\nimport { XChainBridge } from '../XChainBridge'\nimport { SimpleRow } from '../SimpleRow'\nimport { Amount } from '../../Amount'\nimport { Account } from '../../Account'\n\nexport const Simple: TransactionSimpleComponent = (\n  props: TransactionSimpleProps,\n) => {\n  const { t } = useTranslation()\n  const {\n    data: {\n      instructions: {\n        lockingDoor,\n        lockingIssue,\n        issuingDoor,\n        issuingIssue,\n        amount,\n        otherChainSource,\n        destination,\n      },\n    },\n  } = props\n\n  return (\n    <>\n      <XChainBridge\n        lockingDoor={lockingDoor}\n        lockingIssue={lockingIssue}\n        issuingDoor={issuingDoor}\n        issuingIssue={issuingIssue}\n        bridgeOwner=\"\"\n      />\n      <SimpleRow label={t('send')} data-testid=\"send\">\n        <Amount value={amount} />\n      </SimpleRow>\n      <SimpleRow\n        label={t('other_chain_source')}\n        data-testid=\"other_chain_source\"\n      >\n        <Account account={otherChainSource} link={false} />\n      </SimpleRow>\n      <SimpleRow label={t('destination')} data-testid=\"destination\">\n        <Account account={destination} />\n      </SimpleRow>\n    </>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/XChainAddAccountCreateAttestation/index.ts",
    "content": "import {\n  TransactionAction,\n  TransactionCategory,\n  TransactionMapping,\n} from '../types'\n\nimport { Simple } from './Simple'\nimport { parser } from './parser'\n\nexport const XChainAddAccountCreateAttestationTransaction: TransactionMapping =\n  {\n    Simple,\n    action: TransactionAction.CREATE,\n    category: TransactionCategory.XCHAIN,\n    parser,\n  }\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/XChainAddAccountCreateAttestation/parser.ts",
    "content": "import type { XChainAddAccountCreateAttestation } from 'xrpl'\nimport { formatAmount } from '../../../../../rippled/lib/txSummary/formatAmount'\nimport { TransactionParser } from '../types'\nimport { XChainAddAccountCreateAttestationInstructions } from './types'\n\nexport const parser: TransactionParser<\n  XChainAddAccountCreateAttestation,\n  XChainAddAccountCreateAttestationInstructions\n> = (tx) =>\n  // TODO: get bridge owner somehow\n  // it's not necessarily in the metadata\n  ({\n    lockingDoor: tx.XChainBridge.LockingChainDoor,\n    lockingIssue: tx.XChainBridge.LockingChainIssue,\n    issuingDoor: tx.XChainBridge.IssuingChainDoor,\n    issuingIssue: tx.XChainBridge.IssuingChainIssue,\n    amount: formatAmount(tx.Amount),\n    otherChainSource: tx.OtherChainSource,\n    destination: tx.Destination,\n  })\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/XChainAddAccountCreateAttestation/test/XChainAddAccountCreateAttestationSimple.test.tsx",
    "content": "import { createSimpleRenderFactory } from '../../test/createWrapperFactory'\nimport { Simple } from '../Simple'\nimport mockXChainAddAccountCreateAttestation from './mock_data/XChainAddAccountCreateAttestation.json'\nimport mockXChainAddAccountCreateAttestationFailed from './mock_data/XChainAddAccountCreateAttestationFailed.json'\nimport { expectSimpleRowText } from '../../test/expectations'\n\nconst renderComponent = createSimpleRenderFactory(Simple)\n\ndescribe('XChainAddAccountCreateAttestationSimple', () => {\n  it('renders', () => {\n    const { container } = renderComponent(mockXChainAddAccountCreateAttestation)\n\n    // check XChainBridge parts\n    expectSimpleRowText(\n      container,\n      'locking-chain-door',\n      'rDPwN6dz3shffxodeUC9Qf5y1mEHYySKLJ',\n    )\n    expect(\n      container.querySelector('[data-testid=\"locking-chain-door\"] a'),\n    ).not.toBeInTheDocument()\n    expectSimpleRowText(container, 'locking-chain-issue', '\\uE900 XRP')\n    expectSimpleRowText(\n      container,\n      'issuing-chain-door',\n      'rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh',\n    )\n    expect(\n      container.querySelector('[data-testid=\"issuing-chain-door\"] a'),\n    ).not.toBeInTheDocument()\n    expectSimpleRowText(container, 'issuing-chain-issue', '\\uE900 XRP')\n\n    expectSimpleRowText(container, 'send', '\\uE90010.00 XRP')\n    expectSimpleRowText(\n      container,\n      'other_chain_source',\n      'raFcdz1g8LWJDJWJE2ZKLRGdmUmsTyxaym',\n    )\n    expectSimpleRowText(\n      container,\n      'destination',\n      'rLbKhMNskUBYRShdbbQcFm9YhumEeUJfPK',\n    )\n    expect(\n      container.querySelector('[data-testid=\"destination\"] a'),\n    ).toBeInTheDocument()\n  })\n\n  it('renders failed transaction', () => {\n    const { container } = renderComponent(\n      mockXChainAddAccountCreateAttestationFailed,\n    )\n\n    // check XChainBridge parts\n    expectSimpleRowText(\n      container,\n      'locking-chain-door',\n      'rNFrsx478pH42Vy5w4KN9Hcyh8SDrVmCfd',\n    )\n    expect(\n      container.querySelector('[data-testid=\"locking-chain-door\"] a'),\n    ).not.toBeInTheDocument()\n    expectSimpleRowText(container, 'locking-chain-issue', '\\uE900 XRP')\n    expectSimpleRowText(\n      container,\n      'issuing-chain-door',\n      'rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh',\n    )\n    expect(\n      container.querySelector('[data-testid=\"issuing-chain-door\"] a'),\n    ).not.toBeInTheDocument()\n    expectSimpleRowText(container, 'issuing-chain-issue', '\\uE900 XRP')\n\n    expectSimpleRowText(container, 'send', '\\uE90010.00 XRP')\n    expectSimpleRowText(\n      container,\n      'other_chain_source',\n      'rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh',\n    )\n    expectSimpleRowText(\n      container,\n      'destination',\n      'rPy1F9bQ7dNn2T3QAFRM6dFz6ygHa3MDDi',\n    )\n    expect(\n      container.querySelector('[data-testid=\"destination\"] a'),\n    ).toBeInTheDocument()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/XChainAddAccountCreateAttestation/test/mock_data/XChainAddAccountCreateAttestation.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh\",\n    \"Amount\": \"10000000\",\n    \"AttestationRewardAccount\": \"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh\",\n    \"AttestationSignerAccount\": \"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh\",\n    \"Destination\": \"rLbKhMNskUBYRShdbbQcFm9YhumEeUJfPK\",\n    \"Fee\": \"10\",\n    \"Flags\": 0,\n    \"LastLedgerSequence\": 27,\n    \"OtherChainSource\": \"raFcdz1g8LWJDJWJE2ZKLRGdmUmsTyxaym\",\n    \"PublicKey\": \"0330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD020\",\n    \"Sequence\": 6,\n    \"Signature\": \"30450221009C9B043FA870E15966BA7C8C482F7B5978C1FBB22BD5299842C71EFCD6DE5CAE022021C15E2E556EC19C7237BAD4C98B906867163C09E64683DC9EB38598302B675B\",\n    \"SignatureReward\": \"100\",\n    \"SigningPubKey\": \"0330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD020\",\n    \"TransactionType\": \"XChainAddAccountCreateAttestation\",\n    \"TxnSignature\": \"304402206A034337FF08097F86F169A0A27039B175CD382886C56DCD33CBD9F15281BAE80220180A589CF0633A8D32CF8D9757B3CC76A68DF32265DA56C15D7BDB76FFB5BEBA\",\n    \"WasLockingChainSend\": 1,\n    \"XChainAccountCreateCount\": \"5\",\n    \"XChainBridge\": {\n      \"IssuingChainDoor\": \"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh\",\n      \"IssuingChainIssue\": {\n        \"currency\": \"XRP\"\n      },\n      \"LockingChainDoor\": \"rDPwN6dz3shffxodeUC9Qf5y1mEHYySKLJ\",\n      \"LockingChainIssue\": {\n        \"currency\": \"XRP\"\n      }\n    },\n    \"date\": 1676500505000\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh\",\n            \"Balance\": \"99999999949999940\",\n            \"Flags\": 0,\n            \"OwnerCount\": 1,\n            \"Sequence\": 7\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"2B6AC232AA4C4BE41BF49D2459FA4A0347E1B543A4C92FCEE0821C0201E2E9A8\",\n          \"PreviousFields\": {\n            \"Balance\": \"99999999959999950\",\n            \"Sequence\": 6\n          },\n          \"PreviousTxnID\": \"7A0127C0BFCC3127878F79B1AD6CB077A960EEC68C5BD2A2C6F9465202801C4F\",\n          \"PreviousTxnLgrSeq\": 7\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh\",\n            \"Flags\": 0,\n            \"MinAccountCreateAmount\": \"5000000\",\n            \"OwnerNode\": \"0\",\n            \"SignatureReward\": \"100\",\n            \"XChainAccountClaimCount\": \"5\",\n            \"XChainAccountCreateCount\": \"0\",\n            \"XChainBridge\": {\n              \"IssuingChainDoor\": \"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh\",\n              \"IssuingChainIssue\": {\n                \"currency\": \"XRP\"\n              },\n              \"LockingChainDoor\": \"rDPwN6dz3shffxodeUC9Qf5y1mEHYySKLJ\",\n              \"LockingChainIssue\": {\n                \"currency\": \"XRP\"\n              }\n            },\n            \"XChainClaimID\": \"0\"\n          },\n          \"LedgerEntryType\": \"Bridge\",\n          \"LedgerIndex\": \"469372BEE8814EC52CA2AECB5374AB57A47B53627E3C0E2ACBE3FDC78DBFEC7B\",\n          \"PreviousFields\": {\n            \"XChainAccountClaimCount\": \"4\"\n          },\n          \"PreviousTxnID\": \"7A0127C0BFCC3127878F79B1AD6CB077A960EEC68C5BD2A2C6F9465202801C4F\",\n          \"PreviousTxnLgrSeq\": 7\n        }\n      },\n      {\n        \"CreatedNode\": {\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"FB9D15C252CC8375FAC86AC64D0EC2DF03B86886DAB91B0229E6E93706B0E992\",\n          \"NewFields\": {\n            \"Account\": \"rLbKhMNskUBYRShdbbQcFm9YhumEeUJfPK\",\n            \"Balance\": \"10000000\",\n            \"Sequence\": 8\n          }\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tesSUCCESS\"\n  },\n  \"hash\": \"4CD0749D2821CC88F77A626A7023F4EDB0419882AF6487128909122983E21EF7\",\n  \"ledger_index\": 8,\n  \"date\": 1676500505000\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/XChainAddAccountCreateAttestation/test/mock_data/XChainAddAccountCreateAttestationFailed.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rPy1F9bQ7dNn2T3QAFRM6dFz6ygHa3MDDi\",\n    \"Amount\": \"10000000\",\n    \"AttestationRewardAccount\": \"rPy1F9bQ7dNn2T3QAFRM6dFz6ygHa3MDDi\",\n    \"AttestationSignerAccount\": \"rUvV7YmtbvWyNiapRbZsj4K6Awg9Yxh1Ya\",\n    \"Destination\": \"rPy1F9bQ7dNn2T3QAFRM6dFz6ygHa3MDDi\",\n    \"Fee\": \"20\",\n    \"LastLedgerSequence\": 25,\n    \"OtherChainSource\": \"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh\",\n    \"PublicKey\": \"EDF6CEB8B9AD595A4FC86C9D83EF821B44E47DB7562B384C5692B4D8C901A22430\",\n    \"Sequence\": 13,\n    \"Signature\": \"5DF8ECA9C9D4B398E58DB2E205D2873BB484B4C8FE8835272392F1A5110B9AAF28E58AE58072E41643F83A619081CDE50AAB122B192E21708D232CA673BB8E01\",\n    \"SignatureReward\": \"100\",\n    \"SigningPubKey\": \"EDA24CE8D77442FBA0AF7FE196073C23E987976FD147085D41B08C4C0BCBF56541\",\n    \"TransactionType\": \"XChainAddAccountCreateAttestation\",\n    \"TxnSignature\": \"8670FE67798C7D6A4CEAA99F42A42D099536D52C6DBA529961CB02BD36D0605E56A032237F47A4C597CA75224112810A8AB55E770E4BD3834E99A4040BE93709\",\n    \"WasLockingChainSend\": 1,\n    \"XChainAccountCreateCount\": \"c\",\n    \"XChainBridge\": {\n      \"IssuingChainDoor\": \"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh\",\n      \"IssuingChainIssue\": {\n        \"currency\": \"XRP\"\n      },\n      \"LockingChainDoor\": \"rNFrsx478pH42Vy5w4KN9Hcyh8SDrVmCfd\",\n      \"LockingChainIssue\": {\n        \"currency\": \"XRP\"\n      }\n    },\n    \"date\": 1679597991000\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rPy1F9bQ7dNn2T3QAFRM6dFz6ygHa3MDDi\",\n            \"Balance\": \"30000015\",\n            \"Flags\": 0,\n            \"OwnerCount\": 0,\n            \"Sequence\": 14\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"FD8115CC13EF89062204867FAAD75826DD41DBEFEACF4A55DBFE0166294FF182\",\n          \"PreviousFields\": {\n            \"Balance\": \"30000035\",\n            \"Sequence\": 13\n          },\n          \"PreviousTxnID\": \"A5348D1A3C551811EDCDBC9F98586D7FD33834EDD5FC39FFBCA326F6B894D110\",\n          \"PreviousTxnLgrSeq\": 22\n        }\n      }\n    ],\n    \"TransactionIndex\": 20,\n    \"TransactionResult\": \"tecXCHAIN_ACCOUNT_CREATE_PAST\"\n  },\n  \"hash\": \"4D696F9BC6802A2AAADAE7ECBB814BDD99CD0E47FEF3C86249F710C5A8B7273F\",\n  \"ledger_index\": 22,\n  \"date\": 1679597991000\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/XChainAddAccountCreateAttestation/types.ts",
    "content": "import type { Currency } from 'xrpl'\nimport { ExplorerAmount } from '../../../types'\n\nexport interface XChainAddAccountCreateAttestationInstructions {\n  lockingDoor: string\n  lockingIssue: Currency\n  issuingDoor: string\n  issuingIssue: Currency\n  amount: ExplorerAmount\n  otherChainSource: string\n  destination: string\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/XChainAddClaimAttestation/Simple.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { TransactionSimpleComponent, TransactionSimpleProps } from '../types'\nimport { XChainBridge } from '../XChainBridge'\nimport { Account } from '../../Account'\nimport { Amount } from '../../Amount'\nimport { SimpleRow } from '../SimpleRow'\n\nexport const Simple: TransactionSimpleComponent = (\n  props: TransactionSimpleProps,\n) => {\n  const { t } = useTranslation()\n  const {\n    data: {\n      instructions: {\n        lockingDoor,\n        lockingIssue,\n        issuingDoor,\n        issuingIssue,\n        amount,\n        otherChainSource,\n        destination,\n        claimId,\n      },\n    },\n  } = props\n\n  return (\n    <>\n      <XChainBridge\n        lockingDoor={lockingDoor}\n        lockingIssue={lockingIssue}\n        issuingDoor={issuingDoor}\n        issuingIssue={issuingIssue}\n        bridgeOwner=\"\"\n      />\n      <SimpleRow label={t('send')} data-testid=\"send\">\n        <Amount value={amount} />\n      </SimpleRow>\n      <SimpleRow\n        label={t('other_chain_source')}\n        data-testid=\"other_chain_source\"\n      >\n        <Account account={otherChainSource} link={false} />\n      </SimpleRow>\n      {destination && (\n        <SimpleRow label={t('destination')} data-testid=\"destination\">\n          <Account account={destination} />\n        </SimpleRow>\n      )}\n      <SimpleRow label={t('xchain_claim_id')} data-testid=\"xchain-claim-id\">\n        {claimId}\n      </SimpleRow>\n    </>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/XChainAddClaimAttestation/index.ts",
    "content": "import {\n  TransactionAction,\n  TransactionCategory,\n  TransactionMapping,\n} from '../types'\n\nimport { Simple } from './Simple'\nimport { parser } from './parser'\n\nexport const XChainAddClaimAttestationTransaction: TransactionMapping = {\n  Simple,\n  action: TransactionAction.CREATE,\n  category: TransactionCategory.XCHAIN,\n  parser,\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/XChainAddClaimAttestation/parser.ts",
    "content": "import type { XChainAddClaimAttestation } from 'xrpl'\nimport { formatAmount } from '../../../../../rippled/lib/txSummary/formatAmount'\nimport { TransactionParser } from '../types'\nimport { XChainAddClaimAttestationInstructions } from './types'\n\nexport const parser: TransactionParser<\n  XChainAddClaimAttestation,\n  XChainAddClaimAttestationInstructions\n> = (tx) =>\n  // TODO: get bridge owner somehow\n  // it's not necessarily in the metadata\n  ({\n    lockingDoor: tx.XChainBridge.LockingChainDoor,\n    lockingIssue: tx.XChainBridge.LockingChainIssue,\n    issuingDoor: tx.XChainBridge.IssuingChainDoor,\n    issuingIssue: tx.XChainBridge.IssuingChainIssue,\n    amount: formatAmount(tx.Amount),\n    otherChainSource: tx.OtherChainSource,\n    destination: tx.Destination,\n    claimId: tx.XChainClaimID,\n  })\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/XChainAddClaimAttestation/test/XChainAddClaimAttestationSimple.test.tsx",
    "content": "import { createSimpleRenderFactory } from '../../test/createWrapperFactory'\nimport { Simple } from '../Simple'\nimport mockXChainAddClaimAttestation from './mock_data/XChainAddClaimAttestation.json'\nimport mockXChainAddClaimAttestationFailed from './mock_data/XChainAddClaimAttestationFailed.json'\nimport { expectSimpleRowText } from '../../test/expectations'\n\nconst renderComponent = createSimpleRenderFactory(Simple)\n\ndescribe('XChainAddClaimAttestationSimple', () => {\n  it('renders', () => {\n    const { container } = renderComponent(mockXChainAddClaimAttestation)\n\n    // check XChainBridge parts\n    expectSimpleRowText(\n      container,\n      'locking-chain-door',\n      'r3ZsJYkBao2qiwUCvmjfgEUquKueLAwPxQ',\n    )\n    expect(\n      container.querySelector('[data-testid=\"locking-chain-door\"] a'),\n    ).not.toBeInTheDocument()\n    expectSimpleRowText(container, 'locking-chain-issue', '\\uE900 XRP')\n    expectSimpleRowText(\n      container,\n      'issuing-chain-door',\n      'rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh',\n    )\n    expect(\n      container.querySelector('[data-testid=\"issuing-chain-door\"] a'),\n    ).not.toBeInTheDocument()\n    expectSimpleRowText(container, 'issuing-chain-issue', '\\uE900 XRP')\n\n    expectSimpleRowText(container, 'send', '\\uE90010.00 XRP')\n    expectSimpleRowText(\n      container,\n      'other_chain_source',\n      'raFcdz1g8LWJDJWJE2ZKLRGdmUmsTyxaym',\n    )\n    expectSimpleRowText(\n      container,\n      'destination',\n      'rJdTJRJZ6GXCCRaamHJgEqVzB7Zy4557Pi',\n    )\n    expect(\n      container.querySelector('[data-testid=\"destination\"] a'),\n    ).toBeInTheDocument()\n    expectSimpleRowText(container, 'xchain-claim-id', '1')\n  })\n\n  it('renders failed transaction', () => {\n    const { container } = renderComponent(mockXChainAddClaimAttestationFailed)\n\n    // check XChainBridge parts\n    expectSimpleRowText(\n      container,\n      'locking-chain-door',\n      'rNFrsx478pH42Vy5w4KN9Hcyh8SDrVmCfd',\n    )\n    expect(\n      container.querySelector('[data-testid=\"locking-chain-door\"] a'),\n    ).not.toBeInTheDocument()\n    expectSimpleRowText(container, 'locking-chain-issue', '\\uE900 XRP')\n    expectSimpleRowText(\n      container,\n      'issuing-chain-door',\n      'rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh',\n    )\n    expect(\n      container.querySelector('[data-testid=\"issuing-chain-door\"] a'),\n    ).not.toBeInTheDocument()\n    expectSimpleRowText(container, 'issuing-chain-issue', '\\uE900 XRP')\n\n    expectSimpleRowText(container, 'send', '\\uE90010.00 XRP')\n    expectSimpleRowText(\n      container,\n      'other_chain_source',\n      'raFcdz1g8LWJDJWJE2ZKLRGdmUmsTyxaym',\n    )\n    expectSimpleRowText(\n      container,\n      'destination',\n      'rJdTJRJZ6GXCCRaamHJgEqVzB7Zy4557Pi',\n    )\n    expect(\n      container.querySelector('[data-testid=\"destination\"] a'),\n    ).toBeInTheDocument()\n    expectSimpleRowText(container, 'xchain-claim-id', '3')\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/XChainAddClaimAttestation/test/mock_data/XChainAddClaimAttestation.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rPV2mFffxz6Lm8Acx1P8qT26oq2JzwxuHg\",\n    \"Amount\": \"10000000\",\n    \"AttestationRewardAccount\": \"rPV2mFffxz6Lm8Acx1P8qT26oq2JzwxuHg\",\n    \"AttestationSignerAccount\": \"rpapTCHENsVvY73EBjK8TC91bkEWgeGEma\",\n    \"Destination\": \"rJdTJRJZ6GXCCRaamHJgEqVzB7Zy4557Pi\",\n    \"Fee\": \"20\",\n    \"LastLedgerSequence\": 16,\n    \"OtherChainSource\": \"raFcdz1g8LWJDJWJE2ZKLRGdmUmsTyxaym\",\n    \"PublicKey\": \"ED0363D86ED103CF3EE768CC40A459A3684C46CB2D6C2F265EB29C483ECF62044C\",\n    \"Sequence\": 7,\n    \"Signature\": \"DDD0D3705359D751D63B37C00B9C83F31B0C0E5EF93F948D65C1DEDE184E87D73F70F406C8FB02B1B25564003263F544D8D9F7164057699CFDD6936236A9AF04\",\n    \"SigningPubKey\": \"EDE023B2C4049FB44B86C5F734801161C1969B33051A25A5DEF242673D55A6D169\",\n    \"TransactionType\": \"XChainAddClaimAttestation\",\n    \"TxnSignature\": \"DF43CEF994849AC597FD5F73EAB7A2B6EA302B15B91C8E6CCBFC3AE1A5299C3C6241CAD0BA8C3341DB2B6488ADCE69E3FF0C5A40DA2B4A90FD9977363B87570C\",\n    \"WasLockingChainSend\": 1,\n    \"XChainBridge\": {\n      \"IssuingChainDoor\": \"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh\",\n      \"IssuingChainIssue\": {\n        \"currency\": \"XRP\"\n      },\n      \"LockingChainDoor\": \"r3ZsJYkBao2qiwUCvmjfgEUquKueLAwPxQ\",\n      \"LockingChainIssue\": {\n        \"currency\": \"XRP\"\n      }\n    },\n    \"XChainClaimID\": \"1\",\n    \"date\": 1676580613000\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rJdTJRJZ6GXCCRaamHJgEqVzB7Zy4557Pi\",\n            \"Flags\": 0,\n            \"OtherChainSource\": \"raFcdz1g8LWJDJWJE2ZKLRGdmUmsTyxaym\",\n            \"OwnerNode\": \"0\",\n            \"SignatureReward\": \"100\",\n            \"XChainBridge\": {\n              \"IssuingChainDoor\": \"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh\",\n              \"IssuingChainIssue\": {\n                \"currency\": \"XRP\"\n              },\n              \"LockingChainDoor\": \"r3ZsJYkBao2qiwUCvmjfgEUquKueLAwPxQ\",\n              \"LockingChainIssue\": {\n                \"currency\": \"XRP\"\n              }\n            },\n            \"XChainClaimAttestations\": [\n              {\n                \"XChainClaimProofSig\": {\n                  \"Amount\": \"10000000\",\n                  \"AttestationRewardAccount\": \"rBXad827GoQSdKM59v4RYehKPq3MmfRBiw\",\n                  \"AttestationSignerAccount\": \"rDu8rXLv4j7Fv5dRHUWM5mWnH43BkVkvr3\",\n                  \"Destination\": \"rJdTJRJZ6GXCCRaamHJgEqVzB7Zy4557Pi\",\n                  \"PublicKey\": \"ED01B4A7A25F226101B9A81C39765E5EC23DCE26B95020AF69561742A7CF686E40\",\n                  \"WasLockingChainSend\": 1\n                }\n              },\n              {\n                \"XChainClaimProofSig\": {\n                  \"Amount\": \"10000000\",\n                  \"AttestationRewardAccount\": \"rESLaELJZzxkDaHtVfymwnK8v4WtpYpu9a\",\n                  \"AttestationSignerAccount\": \"rpkELuziXCWP5pmgkgwWyviq1wFHJnc5DY\",\n                  \"Destination\": \"rJdTJRJZ6GXCCRaamHJgEqVzB7Zy4557Pi\",\n                  \"PublicKey\": \"ED18F1E49CE9F8F79FAD5D171A10B74A6D0BE3F79191FFF8D3190C362E4262CDDD\",\n                  \"WasLockingChainSend\": 1\n                }\n              },\n              {\n                \"XChainClaimProofSig\": {\n                  \"Amount\": \"10000000\",\n                  \"AttestationRewardAccount\": \"rPV2mFffxz6Lm8Acx1P8qT26oq2JzwxuHg\",\n                  \"AttestationSignerAccount\": \"rpapTCHENsVvY73EBjK8TC91bkEWgeGEma\",\n                  \"Destination\": \"rJdTJRJZ6GXCCRaamHJgEqVzB7Zy4557Pi\",\n                  \"PublicKey\": \"ED0363D86ED103CF3EE768CC40A459A3684C46CB2D6C2F265EB29C483ECF62044C\",\n                  \"WasLockingChainSend\": 1\n                }\n              }\n            ],\n            \"XChainClaimID\": \"1\"\n          },\n          \"LedgerEntryType\": \"XChainOwnedClaimID\",\n          \"LedgerIndex\": \"1B07AEFC5B2D612D4B0675A19A00424BD2544BB574E068483581FC67DDCEAAC5\",\n          \"PreviousFields\": {\n            \"XChainClaimAttestations\": [\n              {\n                \"XChainClaimProofSig\": {\n                  \"Amount\": \"10000000\",\n                  \"AttestationRewardAccount\": \"rBXad827GoQSdKM59v4RYehKPq3MmfRBiw\",\n                  \"AttestationSignerAccount\": \"rDu8rXLv4j7Fv5dRHUWM5mWnH43BkVkvr3\",\n                  \"Destination\": \"rJdTJRJZ6GXCCRaamHJgEqVzB7Zy4557Pi\",\n                  \"PublicKey\": \"ED01B4A7A25F226101B9A81C39765E5EC23DCE26B95020AF69561742A7CF686E40\",\n                  \"WasLockingChainSend\": 1\n                }\n              },\n              {\n                \"XChainClaimProofSig\": {\n                  \"Amount\": \"10000000\",\n                  \"AttestationRewardAccount\": \"rESLaELJZzxkDaHtVfymwnK8v4WtpYpu9a\",\n                  \"AttestationSignerAccount\": \"rpkELuziXCWP5pmgkgwWyviq1wFHJnc5DY\",\n                  \"Destination\": \"rJdTJRJZ6GXCCRaamHJgEqVzB7Zy4557Pi\",\n                  \"PublicKey\": \"ED18F1E49CE9F8F79FAD5D171A10B74A6D0BE3F79191FFF8D3190C362E4262CDDD\",\n                  \"WasLockingChainSend\": 1\n                }\n              }\n            ]\n          },\n          \"PreviousTxnID\": \"C1421E3F95B63CCBE72C5C6E89C64EDD908F3E224D81AB3F3A65DD34023C99D5\",\n          \"PreviousTxnLgrSeq\": 13\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rPV2mFffxz6Lm8Acx1P8qT26oq2JzwxuHg\",\n            \"Balance\": \"9999985\",\n            \"Flags\": 0,\n            \"OwnerCount\": 0,\n            \"Sequence\": 8\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"2FFAF7F72F36BA553C7555F12A82BF2B0EF13345DF37F1F11B2D91B5DD1E29E4\",\n          \"PreviousFields\": {\n            \"Balance\": \"10000005\",\n            \"Sequence\": 7\n          },\n          \"PreviousTxnID\": \"9569ED0B01279B441AD3D507EA2FCB564D6C0CAB4DAB8240C2D0428E1A5FEB2E\",\n          \"PreviousTxnLgrSeq\": 11\n        }\n      }\n    ],\n    \"TransactionIndex\": 2,\n    \"TransactionResult\": \"tesSUCCESS\"\n  },\n  \"hash\": \"2FC69A726F4FB4141222BD0B73C7D19DC8BBCB8ACA0487BBBC8B055243360363\",\n  \"ledger_index\": 13,\n  \"date\": 1676580613000\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/XChainAddClaimAttestation/test/mock_data/XChainAddClaimAttestationFailed.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rPy1F9bQ7dNn2T3QAFRM6dFz6ygHa3MDDi\",\n    \"Amount\": \"10000000\",\n    \"AttestationRewardAccount\": \"rPy1F9bQ7dNn2T3QAFRM6dFz6ygHa3MDDi\",\n    \"AttestationSignerAccount\": \"rUvV7YmtbvWyNiapRbZsj4K6Awg9Yxh1Ya\",\n    \"Destination\": \"rJdTJRJZ6GXCCRaamHJgEqVzB7Zy4557Pi\",\n    \"Fee\": \"20\",\n    \"LastLedgerSequence\": 54,\n    \"OtherChainSource\": \"raFcdz1g8LWJDJWJE2ZKLRGdmUmsTyxaym\",\n    \"PublicKey\": \"EDF6CEB8B9AD595A4FC86C9D83EF821B44E47DB7562B384C5692B4D8C901A22430\",\n    \"Sequence\": 18,\n    \"Signature\": \"917C77A7354920AA456DCE9144A99F2AC485B03081BB2011553131E1A594C9D145990B03E1BF00413EA3E7F093BA059BB458286174F33C3E58D2881D751B7A05\",\n    \"SigningPubKey\": \"EDA24CE8D77442FBA0AF7FE196073C23E987976FD147085D41B08C4C0BCBF56541\",\n    \"TransactionType\": \"XChainAddClaimAttestation\",\n    \"TxnSignature\": \"72A59AB11BE0271F68E710D2618BB1AA311727C1EB727424FCB83ADD8FA6FC6512644F2D8F0865815283005BBD55E6BD79EE8B77AC50A162DE067F6DC98D8103\",\n    \"WasLockingChainSend\": 1,\n    \"XChainBridge\": {\n      \"IssuingChainDoor\": \"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh\",\n      \"IssuingChainIssue\": {\n        \"currency\": \"XRP\"\n      },\n      \"LockingChainDoor\": \"rNFrsx478pH42Vy5w4KN9Hcyh8SDrVmCfd\",\n      \"LockingChainIssue\": {\n        \"currency\": \"XRP\"\n      }\n    },\n    \"XChainClaimID\": \"3\",\n    \"date\": 1679603821000\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rPy1F9bQ7dNn2T3QAFRM6dFz6ygHa3MDDi\",\n            \"Balance\": \"29999915\",\n            \"Flags\": 0,\n            \"OwnerCount\": 0,\n            \"Sequence\": 19\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"FD8115CC13EF89062204867FAAD75826DD41DBEFEACF4A55DBFE0166294FF182\",\n          \"PreviousFields\": {\n            \"Balance\": \"29999935\",\n            \"Sequence\": 18\n          },\n          \"PreviousTxnID\": \"23CDA6C9589B7DE88EBC55100FCF28C902F808604FA355767DF92239A559EDED\",\n          \"PreviousTxnLgrSeq\": 22\n        }\n      }\n    ],\n    \"TransactionIndex\": 4,\n    \"TransactionResult\": \"tecXCHAIN_NO_CLAIM_ID\"\n  },\n  \"hash\": \"F8AFD12029ED438AEC29C3621F38C06DEC2A5195DE596D9EFC8B08B3191050F8\",\n  \"ledger_index\": 51,\n  \"date\": 1679603821000\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/XChainAddClaimAttestation/types.ts",
    "content": "import type { Currency } from 'xrpl'\nimport { ExplorerAmount } from '../../../types'\n\nexport interface XChainAddClaimAttestationInstructions {\n  lockingDoor: string\n  lockingIssue: Currency\n  issuingDoor: string\n  issuingIssue: Currency\n  amount: ExplorerAmount\n  otherChainSource: string\n  destination?: string\n  claimId: string | number\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/XChainBridge.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport type { IssuedCurrency } from 'xrpl'\nimport { Account } from '../Account'\nimport { Amount } from '../Amount'\nimport Currency from '../Currency'\nimport { SimpleGroup } from './SimpleGroup'\nimport { SimpleRow } from './SimpleRow'\n\nexport interface XChainBridgeProps {\n  lockingDoor: string\n  lockingIssue: IssuedCurrency\n  issuingDoor: string\n  issuingIssue: IssuedCurrency\n  signatureReward?: string\n  bridgeOwner: string\n}\n\nexport const XChainBridge = (props: XChainBridgeProps) => {\n  const { t } = useTranslation()\n  const {\n    lockingDoor,\n    lockingIssue,\n    issuingDoor,\n    issuingIssue,\n    signatureReward,\n    bridgeOwner,\n  } = props\n\n  return (\n    <SimpleGroup title={t('xchainbridge')}>\n      <SimpleRow\n        label={t('locking_chain_door')}\n        data-testid=\"locking-chain-door\"\n      >\n        <Account account={lockingDoor} link={lockingDoor === bridgeOwner} />\n      </SimpleRow>\n      <SimpleRow\n        label={t('locking_chain_issue')}\n        data-testid=\"locking-chain-issue\"\n      >\n        <Currency\n          issuer={lockingIssue.issuer}\n          currency={lockingIssue.currency}\n          link={lockingDoor === bridgeOwner}\n        />\n      </SimpleRow>\n      <SimpleRow\n        label={t('issuing_chain_door')}\n        data-testid=\"issuing-chain-door\"\n      >\n        <Account account={issuingDoor} link={issuingDoor === bridgeOwner} />\n      </SimpleRow>\n      <SimpleRow\n        label={t('issuing_chain_issue')}\n        data-testid=\"issuing-chain-issue\"\n      >\n        <Currency\n          issuer={issuingIssue.issuer}\n          currency={issuingIssue.currency}\n          link={issuingDoor === bridgeOwner}\n        />\n      </SimpleRow>\n      {signatureReward && (\n        <SimpleRow label={t('signature_reward')} data-testid=\"signature-reward\">\n          <Amount value={signatureReward} />\n        </SimpleRow>\n      )}\n    </SimpleGroup>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/XChainClaim/Simple.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { Account } from '../../Account'\nimport { Amount } from '../../Amount'\nimport { SimpleRow } from '../SimpleRow'\nimport { TransactionSimpleComponent, TransactionSimpleProps } from '../types'\nimport { XChainBridge } from '../XChainBridge'\n\nexport const Simple: TransactionSimpleComponent = (\n  props: TransactionSimpleProps,\n) => {\n  const { t } = useTranslation()\n  const { data } = props\n  const {\n    lockingDoor,\n    lockingIssue,\n    issuingDoor,\n    issuingIssue,\n    bridgeOwner,\n    claimId,\n    destination,\n    amount,\n  } = data.instructions\n\n  return (\n    <>\n      <XChainBridge\n        lockingDoor={lockingDoor}\n        lockingIssue={lockingIssue}\n        issuingDoor={issuingDoor}\n        issuingIssue={issuingIssue}\n        bridgeOwner={bridgeOwner}\n      />\n      <SimpleRow label={t('xchain_claim_id')} data-testid=\"claim-id\">\n        {claimId}\n      </SimpleRow>\n      <SimpleRow label={t('destination')} data-testid=\"destination\">\n        <Account account={destination} />\n      </SimpleRow>\n      <SimpleRow label={t('amount')} data-testid=\"amount\">\n        <Amount value={amount} />\n      </SimpleRow>\n    </>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/XChainClaim/index.ts",
    "content": "import {\n  TransactionAction,\n  TransactionCategory,\n  TransactionMapping,\n} from '../types'\n\nimport { Simple } from './Simple'\nimport { parser } from './parser'\n\nexport const XChainClaimTransaction: TransactionMapping = {\n  Simple,\n  action: TransactionAction.FINISH,\n  category: TransactionCategory.XCHAIN,\n  parser,\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/XChainClaim/parser.ts",
    "content": "import { formatAmount } from '../../../../../rippled/lib/txSummary/formatAmount'\n\nexport function parser(tx: any, meta: any) {\n  const affectedNodes = meta.AffectedNodes\n  const modifiedAccountRoots = affectedNodes.filter(\n    (node: any) =>\n      node.ModifiedNode && node.ModifiedNode.LedgerEntryType === 'AccountRoot',\n  )\n  const doorNode = modifiedAccountRoots.filter(\n    (node: any) =>\n      node.ModifiedNode.FinalFields.Balance <\n        node.ModifiedNode.PreviousFields.Balance &&\n      node.ModifiedNode.FinalFields.Account !== tx.Account,\n  )[0]\n  return {\n    lockingDoor: tx.XChainBridge.LockingChainDoor,\n    lockingIssue: tx.XChainBridge.LockingChainIssue,\n    issuingDoor: tx.XChainBridge.IssuingChainDoor,\n    issuingIssue: tx.XChainBridge.IssuingChainIssue,\n    bridgeOwner: doorNode?.ModifiedNode?.FinalFields?.Account,\n    claimId: tx.XChainClaimID,\n    destination: tx.Destination,\n    amount: formatAmount(tx.Amount),\n  }\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/XChainClaim/test/XChainClaimSimple.test.tsx",
    "content": "import { createSimpleRenderFactory, expectSimpleRowText } from '../../test'\nimport { Simple } from '../Simple'\nimport mockXChainClaim from './mock_data/XChainClaim.json'\nimport mockXChainClaimNoQuorum from './mock_data/XChainClaimNoQuorum.json'\n\nconst renderComponent = createSimpleRenderFactory(Simple)\n\ndescribe('XChainClaimSimple', () => {\n  it('renders', () => {\n    const { container } = renderComponent(mockXChainClaim)\n\n    // check XChainBridge parts\n    expectSimpleRowText(\n      container,\n      'locking-chain-door',\n      'rGQLcxzT3Po9PsCk5Lj9uK7S1juThii9cR',\n    )\n    expect(\n      container.querySelector('[data-testid=\"locking-chain-door\"] a'),\n    ).not.toBeInTheDocument()\n    expectSimpleRowText(container, 'locking-chain-issue', '\\uE900 XRP')\n    expectSimpleRowText(\n      container,\n      'issuing-chain-door',\n      'rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh',\n    )\n    expect(\n      container.querySelector('[data-testid=\"issuing-chain-door\"] a'),\n    ).toBeInTheDocument()\n    expectSimpleRowText(container, 'issuing-chain-issue', '\\uE900 XRP')\n\n    expectSimpleRowText(container, 'amount', '\\uE90010.00 XRP')\n    expectSimpleRowText(\n      container,\n      'destination',\n      'rJdTJRJZ6GXCCRaamHJgEqVzB7Zy4557Pi',\n    )\n    expectSimpleRowText(container, 'claim-id', '5')\n  })\n\n  it('renders failed tx', () => {\n    const { container } = renderComponent(mockXChainClaimNoQuorum)\n\n    // check XChainBridge parts\n    expectSimpleRowText(\n      container,\n      'locking-chain-door',\n      'rMAXACCrp3Y8PpswXcg3bKggHX76V3F8M4',\n    )\n    expect(\n      container.querySelector('[data-testid=\"locking-chain-door\"] a'),\n    ).not.toBeInTheDocument()\n    expectSimpleRowText(container, 'locking-chain-issue', '\\uE900 XRP')\n    expectSimpleRowText(\n      container,\n      'issuing-chain-door',\n      'rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh',\n    )\n    expect(\n      container.querySelector('[data-testid=\"issuing-chain-door\"] a'),\n    ).not.toBeInTheDocument()\n    expectSimpleRowText(container, 'issuing-chain-issue', '\\uE900 XRP')\n\n    expectSimpleRowText(container, 'amount', '\\uE9000.01 XRP')\n    expectSimpleRowText(\n      container,\n      'destination',\n      'rpwoKyUQn5uGDKeF6LhxK8HWS25ZMhFpaB',\n    )\n    expectSimpleRowText(container, 'claim-id', '492')\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/XChainClaim/test/mock_data/XChainClaim.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rJdTJRJZ6GXCCRaamHJgEqVzB7Zy4557Pi\",\n    \"Amount\": \"10000000\",\n    \"Destination\": \"rJdTJRJZ6GXCCRaamHJgEqVzB7Zy4557Pi\",\n    \"Fee\": \"10\",\n    \"Flags\": 0,\n    \"Sequence\": 13,\n    \"SigningPubKey\": \"03E2494BAB52A1D9C8A7BC67773AD7893B33DBF0F836A634D8B28DD6007B1537E3\",\n    \"TransactionType\": \"XChainClaim\",\n    \"TxnSignature\": \"3045022100E70D47DCBD4B4961C7D452E26983BB1B453D36A74F95419BAF717A82D475353502203B068A4B6EA042DCAFFD9948E3EA73E924169F2B0CAFC0ACAEF2322A0655B02E\",\n    \"XChainBridge\": {\n      \"IssuingChainDoor\": \"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh\",\n      \"IssuingChainIssue\": { \"currency\": \"XRP\" },\n      \"LockingChainDoor\": \"rGQLcxzT3Po9PsCk5Lj9uK7S1juThii9cR\",\n      \"LockingChainIssue\": { \"currency\": \"XRP\" }\n    },\n    \"XChainClaimID\": \"5\",\n    \"date\": \"2022-08-16T19:25:12Z\"\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh\",\n            \"Balance\": \"99999997979999960\",\n            \"Flags\": 0,\n            \"OwnerCount\": 2,\n            \"Sequence\": 5\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"2B6AC232AA4C4BE41BF49D2459FA4A0347E1B543A4C92FCEE0821C0201E2E9A8\",\n          \"PreviousFields\": {\n            \"Balance\": \"99999997989999960\"\n          },\n          \"PreviousTxnID\": \"AB54F26CF04CC273B675C32306DEE3F3AD87C4486166F1A4FCE6874AF9CCE486\",\n          \"PreviousTxnLgrSeq\": 14\n        }\n      },\n      {\n        \"DeletedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rJdTJRJZ6GXCCRaamHJgEqVzB7Zy4557Pi\",\n            \"Flags\": 0,\n            \"OtherChainSource\": \"raFcdz1g8LWJDJWJE2ZKLRGdmUmsTyxaym\",\n            \"OwnerNode\": \"0\",\n            \"PreviousTxnID\": \"B0479E9F3586B35D8F4233ED8D99073D9787B1DD59CC354541E4A11683904CBA\",\n            \"PreviousTxnLgrSeq\": 16,\n            \"SignatureReward\": \"100\",\n            \"XChainBridge\": {\n              \"IssuingChainDoor\": \"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh\",\n              \"IssuingChainIssue\": { \"currency\": \"XRP\" },\n              \"LockingChainDoor\": \"rGQLcxzT3Po9PsCk5Lj9uK7S1juThii9cR\",\n              \"LockingChainIssue\": { \"currency\": \"XRP\" }\n            },\n            \"XChainClaimAttestations\": [\n              {\n                \"XChainClaimProofSig\": {\n                  \"Amount\": \"10000000\",\n                  \"AttestationRewardAccount\": \"rGcwshLFWRu3vXxGQagvKZDCSEH9rKcdZC\",\n                  \"AttestationSignerAccount\": \"rNiotmSbcp7ZvR63u18zBqGZGzCfcyEQbm\",\n                  \"WasLockingChainSend\": 1\n                }\n              },\n              {\n                \"XChainClaimProofSig\": {\n                  \"Amount\": \"10000000\",\n                  \"AttestationRewardAccount\": \"rGcwshLFWRu3vXxGQagvKZDCSEH9rKcdZC\",\n                  \"AttestationSignerAccount\": \"rKMx7C1KULTnX7weCKwpq4rw6SmHqf5mv3\",\n                  \"WasLockingChainSend\": 1\n                }\n              },\n              {\n                \"XChainClaimProofSig\": {\n                  \"Amount\": \"10000000\",\n                  \"AttestationRewardAccount\": \"rGcwshLFWRu3vXxGQagvKZDCSEH9rKcdZC\",\n                  \"AttestationSignerAccount\": \"rMbN6bHDzLEsbB8bqXqvnDu4YJmDJrvD3R\",\n                  \"WasLockingChainSend\": 1\n                }\n              },\n              {\n                \"XChainClaimProofSig\": {\n                  \"Amount\": \"10000000\",\n                  \"AttestationRewardAccount\": \"rGcwshLFWRu3vXxGQagvKZDCSEH9rKcdZC\",\n                  \"AttestationSignerAccount\": \"rHtcoxJTxVQxuSgoTdfu6WvHsgkyxTgBnG\",\n                  \"WasLockingChainSend\": 1\n                }\n              },\n              {\n                \"XChainClaimProofSig\": {\n                  \"Amount\": \"10000000\",\n                  \"AttestationRewardAccount\": \"rGcwshLFWRu3vXxGQagvKZDCSEH9rKcdZC\",\n                  \"AttestationSignerAccount\": \"rLt7bZfaBipZ1HB8QZwviqnP2GZTruY9W5\",\n                  \"WasLockingChainSend\": 1\n                }\n              }\n            ],\n            \"XChainClaimID\": \"5\"\n          },\n          \"LedgerEntryType\": \"XChainClaimID\",\n          \"LedgerIndex\": \"430067D905AAF69711BF28AF1023CADA982686854CC234ED6C9F47F1F1811FE0\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rGcwshLFWRu3vXxGQagvKZDCSEH9rKcdZC\",\n            \"Balance\": \"1000000200\",\n            \"Flags\": 0,\n            \"OwnerCount\": 0,\n            \"Sequence\": 6\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"680C8B6EEE25014D885D057A272F7405B63A7872243A9B627021FB4136730E1F\",\n          \"PreviousFields\": {\n            \"Balance\": \"1000000100\"\n          },\n          \"PreviousTxnID\": \"AB54F26CF04CC273B675C32306DEE3F3AD87C4486166F1A4FCE6874AF9CCE486\",\n          \"PreviousTxnLgrSeq\": 14\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rJdTJRJZ6GXCCRaamHJgEqVzB7Zy4557Pi\",\n            \"RootIndex\": \"86213CF4452A2D17362C65C24C3EE190F0A9E60EBBE5BD5DFBF039696784E2BE\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"86213CF4452A2D17362C65C24C3EE190F0A9E60EBBE5BD5DFBF039696784E2BE\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rJdTJRJZ6GXCCRaamHJgEqVzB7Zy4557Pi\",\n            \"Balance\": \"1019999710\",\n            \"Flags\": 0,\n            \"OwnerCount\": 3,\n            \"Sequence\": 14\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"B6AE0B6E0F7A38BDCA21F08466A85036DA3DA7558F44CC26FE457C3D2E8F2F87\",\n          \"PreviousFields\": {\n            \"Balance\": \"1009999820\",\n            \"OwnerCount\": 4,\n            \"Sequence\": 13\n          },\n          \"PreviousTxnID\": \"B0479E9F3586B35D8F4233ED8D99073D9787B1DD59CC354541E4A11683904CBA\",\n          \"PreviousTxnLgrSeq\": 16\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tesSUCCESS\"\n  },\n  \"hash\": \"CC2D24F25E3D21B14B13DCFE8D8124915E0A912108F6E99F8B283A3661602C4D\",\n  \"ledger_index\": 17,\n  \"date\": \"2022-08-16T19:25:12Z\"\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/XChainClaim/test/mock_data/XChainClaimNoQuorum.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rpwoKyUQn5uGDKeF6LhxK8HWS25ZMhFpaB\",\n    \"Amount\": \"10000\",\n    \"Destination\": \"rpwoKyUQn5uGDKeF6LhxK8HWS25ZMhFpaB\",\n    \"Fee\": \"20\",\n    \"Flags\": 2147483648,\n    \"Sequence\": 454709,\n    \"SigningPubKey\": \"0203811EDCB57C1B6F34640DD494F04F347A45C58709ED8FFC176D5C9B6E9DF5E5\",\n    \"TransactionType\": \"XChainClaim\",\n    \"TxnSignature\": \"304402205FEC71E444ABE6F613ABA7052AD40106D3B694A2316AC2B020BB78C7110BE4E40220325189A44F5F7EDA7E622FEDAD1207973B7FB6E9CDE03E7EEEE6A971CDC858A1\",\n    \"XChainBridge\": {\n      \"IssuingChainDoor\": \"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh\",\n      \"IssuingChainIssue\": {\n        \"currency\": \"XRP\"\n      },\n      \"LockingChainDoor\": \"rMAXACCrp3Y8PpswXcg3bKggHX76V3F8M4\",\n      \"LockingChainIssue\": {\n        \"currency\": \"XRP\"\n      }\n    },\n    \"XChainClaimID\": \"492\",\n    \"date\": 1681400481000\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rpwoKyUQn5uGDKeF6LhxK8HWS25ZMhFpaB\",\n            \"Balance\": \"39999960\",\n            \"Flags\": 0,\n            \"OwnerCount\": 1,\n            \"Sequence\": 454710\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"5334EC2845E583BBEC4C75EF27498BD47D643BD572DE91DF00A0AF532FEDA6B1\",\n          \"PreviousFields\": {\n            \"Balance\": \"39999980\",\n            \"Sequence\": 454709\n          },\n          \"PreviousTxnID\": \"850F18C0BC4B7BFDF1F48902E9D9D4D6AFA4B0D88AA0186CAB9A2D95F6B4862F\",\n          \"PreviousTxnLgrSeq\": 454709\n        }\n      }\n    ],\n    \"TransactionIndex\": 1,\n    \"TransactionResult\": \"tecXCHAIN_CLAIM_NO_QUORUM\"\n  },\n  \"hash\": \"14DB8385E209E38D83F209EF6C90571B958DC711DB7741A3329F21130AB1A394\",\n  \"ledger_index\": 454720,\n  \"date\": 1681400481000\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/XChainCommit/Simple.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { Amount } from '../../Amount'\nimport { TransactionSimpleComponent, TransactionSimpleProps } from '../types'\nimport { SimpleRow } from '../SimpleRow'\nimport { XChainBridge } from '../XChainBridge'\nimport { Account } from '../../Account'\n\nexport const Simple: TransactionSimpleComponent = (\n  props: TransactionSimpleProps,\n) => {\n  const { t } = useTranslation()\n  const {\n    data: {\n      instructions: {\n        lockingDoor,\n        lockingIssue,\n        issuingDoor,\n        issuingIssue,\n        amount,\n        xchainClaimId,\n        bridgeOwner,\n        otherChainDestination,\n      },\n    },\n  } = props\n\n  return (\n    <>\n      <SimpleRow label={t('send')} data-testid=\"send\">\n        <Amount value={amount} />\n      </SimpleRow>\n      <XChainBridge\n        lockingDoor={lockingDoor}\n        lockingIssue={lockingIssue}\n        issuingDoor={issuingDoor}\n        issuingIssue={issuingIssue}\n        bridgeOwner={bridgeOwner}\n      />\n      <SimpleRow label={t('xchain_claim_id')} data-testid=\"claim-id\">\n        {xchainClaimId}\n      </SimpleRow>\n      {otherChainDestination && (\n        <SimpleRow\n          label={t('other_chain_destination')}\n          data-testid=\"destination\"\n        >\n          <Account account={otherChainDestination} link={false} />\n        </SimpleRow>\n      )}\n    </>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/XChainCommit/index.ts",
    "content": "import {\n  TransactionAction,\n  TransactionCategory,\n  TransactionMapping,\n} from '../types'\n\nimport { Simple } from './Simple'\nimport { parser } from './parser'\n\nexport const XChainCommitTransaction: TransactionMapping = {\n  Simple,\n  action: TransactionAction.SEND,\n  category: TransactionCategory.XCHAIN,\n  parser,\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/XChainCommit/parser.ts",
    "content": "import { formatAmount } from '../../../../../rippled/lib/txSummary/formatAmount'\n\nexport function parser(tx: any, meta: any) {\n  const affectedNodes = meta.AffectedNodes\n  const modifiedAccountRoots = affectedNodes.filter(\n    (node: any) =>\n      node.ModifiedNode && node.ModifiedNode.LedgerEntryType === 'AccountRoot',\n  )\n  const bridgeOwnerNode = modifiedAccountRoots.filter(\n    (node: any) => node.ModifiedNode.FinalFields.Account !== tx.Account,\n  )[0]\n  // TODO: somehow get the bridge owner via ledger_entry\n  // AffectedNodes won't contain the bridge owner if the transaction fails\n  return {\n    lockingDoor: tx.XChainBridge.LockingChainDoor,\n    lockingIssue: tx.XChainBridge.LockingChainIssue,\n    issuingDoor: tx.XChainBridge.IssuingChainDoor,\n    issuingIssue: tx.XChainBridge.IssuingChainIssue,\n    bridgeOwner: bridgeOwnerNode?.ModifiedNode?.FinalFields?.Account,\n    amount: formatAmount(tx.Amount),\n    xchainClaimId: tx.XChainClaimID,\n    otherChainDestination: tx.OtherChainAccount,\n  }\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/XChainCommit/test/XChainCommitSimple.test.tsx",
    "content": "import { Simple } from '../Simple'\nimport mockXChainCommit from './mock_data/XChainCommit.json'\nimport mockXChainCommitInsufficientFunds from './mock_data/XChainCommitInsufficientFunds.json'\n\nimport { createSimpleRenderFactory, expectSimpleRowText } from '../../test'\n\nconst renderComponent = createSimpleRenderFactory(Simple)\n\ndescribe('XChainCommitSimple', () => {\n  it('renders', () => {\n    const { container } = renderComponent(mockXChainCommit)\n\n    // check XChainBridge parts\n    expectSimpleRowText(\n      container,\n      'locking-chain-door',\n      'rGQLcxzT3Po9PsCk5Lj9uK7S1juThii9cR',\n    )\n    expect(\n      container.querySelector('[data-testid=\"locking-chain-door\"] a'),\n    ).toBeInTheDocument()\n    expectSimpleRowText(container, 'locking-chain-issue', '\\uE900 XRP')\n    expectSimpleRowText(\n      container,\n      'issuing-chain-door',\n      'rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh',\n    )\n    expect(\n      container.querySelector('[data-testid=\"issuing-chain-door\"] a'),\n    ).not.toBeInTheDocument()\n    expectSimpleRowText(container, 'issuing-chain-issue', '\\uE900 XRP')\n\n    expectSimpleRowText(container, 'send', '\\uE90010.00 XRP')\n    expectSimpleRowText(container, 'claim-id', '4')\n    expect(\n      container.querySelector('[data-testid=\"destination\"]'),\n    ).not.toBeInTheDocument()\n  })\n\n  it('renders failed tx', () => {\n    const { container } = renderComponent(mockXChainCommitInsufficientFunds)\n\n    // check XChainBridge parts\n    expectSimpleRowText(\n      container,\n      'locking-chain-door',\n      'rGQLcxzT3Po9PsCk5Lj9uK7S1juThii9cR',\n    )\n    expect(\n      container.querySelector('[data-testid=\"locking-chain-door\"] a'),\n    ).not.toBeInTheDocument()\n    expectSimpleRowText(container, 'locking-chain-issue', '\\uE900 XRP')\n    expectSimpleRowText(\n      container,\n      'issuing-chain-door',\n      'rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh',\n    )\n    expect(\n      container.querySelector('[data-testid=\"issuing-chain-door\"] a'),\n    ).not.toBeInTheDocument()\n    expectSimpleRowText(container, 'issuing-chain-issue', '\\uE900 XRP')\n\n    expectSimpleRowText(container, 'send', '\\uE90010,000.00 XRP')\n    expectSimpleRowText(container, 'claim-id', '3')\n    expectSimpleRowText(\n      container,\n      'destination',\n      'rJdTJRJZ6GXCCRaamHJgEqVzB7Zy4557Pi',\n    )\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/XChainCommit/test/mock_data/XChainCommit.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"raFcdz1g8LWJDJWJE2ZKLRGdmUmsTyxaym\",\n    \"Amount\": \"10000000\",\n    \"Fee\": \"10\",\n    \"Flags\": 0,\n    \"Sequence\": 9,\n    \"SigningPubKey\": \"026BB09608B42B5CB03F142B1325F52CF3DF5EBC4B2D3DE656F105701C28C0762C\",\n    \"TransactionType\": \"XChainCommit\",\n    \"TxnSignature\": \"3045022100C2FC2624BB363D58579A69DE945F93CF0AFB0A9204B3E0C188F024D2309C9D1E0220749FC80CEB3A87928A05DF0B7F3D0565E16A728B69873F055B23BD68DEC159EB\",\n    \"XChainBridge\": {\n      \"IssuingChainDoor\": \"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh\",\n      \"IssuingChainIssue\": { \"currency\": \"XRP\" },\n      \"LockingChainDoor\": \"rGQLcxzT3Po9PsCk5Lj9uK7S1juThii9cR\",\n      \"LockingChainIssue\": { \"currency\": \"XRP\" }\n    },\n    \"XChainClaimID\": \"4\",\n    \"date\": \"2022-08-16T19:24:50Z\"\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"raFcdz1g8LWJDJWJE2ZKLRGdmUmsTyxaym\",\n            \"Balance\": \"959999960\",\n            \"Flags\": 0,\n            \"OwnerCount\": 0,\n            \"Sequence\": 10\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"1823595D6E1D18A9B18DF8C027F0FAA37283CA1EA7765FFB1BDC0445314EC412\",\n          \"PreviousFields\": {\n            \"Balance\": \"969999970\",\n            \"Sequence\": 9\n          },\n          \"PreviousTxnID\": \"4E0A1DBC0CBE847CDF191AC590B87D3BA98CFEE2223CA7C081C31562BE3FC832\",\n          \"PreviousTxnLgrSeq\": 9\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rGQLcxzT3Po9PsCk5Lj9uK7S1juThii9cR\",\n            \"Balance\": \"1039999980\",\n            \"Flags\": 0,\n            \"OwnerCount\": 2,\n            \"Sequence\": 5\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"E70AB073C5D41F35709E1A493F013D106443EA1FDEF9053312C5CEF131B776C6\",\n          \"PreviousFields\": {\n            \"Balance\": \"1029999980\"\n          },\n          \"PreviousTxnID\": \"4E0A1DBC0CBE847CDF191AC590B87D3BA98CFEE2223CA7C081C31562BE3FC832\",\n          \"PreviousTxnLgrSeq\": 9\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tesSUCCESS\"\n  },\n  \"hash\": \"81E23574F358D7F2E50BD6451F426383040D296C8DDD96C65B895067C64CB8CF\",\n  \"ledger_index\": 10,\n  \"date\": \"2022-08-16T19:24:50Z\"\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/XChainCommit/test/mock_data/XChainCommitInsufficientFunds.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"raFcdz1g8LWJDJWJE2ZKLRGdmUmsTyxaym\",\n    \"Amount\": \"10000000000\",\n    \"Fee\": \"10\",\n    \"Flags\": 0,\n    \"OtherChainAccount\": \"rJdTJRJZ6GXCCRaamHJgEqVzB7Zy4557Pi\",\n    \"Sequence\": 9,\n    \"SigningPubKey\": \"026BB09608B42B5CB03F142B1325F52CF3DF5EBC4B2D3DE656F105701C28C0762C\",\n    \"TransactionType\": \"XChainCommit\",\n    \"TxnSignature\": \"3045022100B1BE73208EF76E2946D40A37AE0F8C04C8E632A64B643209E727B0183830919F022040210E9AA82723DCE6359F2AB27437567B2111FBB092C0C4E3E295ED49BACADB\",\n    \"XChainBridge\": {\n      \"IssuingChainDoor\": \"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh\",\n      \"IssuingChainIssue\": { \"currency\": \"XRP\" },\n      \"LockingChainDoor\": \"rGQLcxzT3Po9PsCk5Lj9uK7S1juThii9cR\",\n      \"LockingChainIssue\": { \"currency\": \"XRP\" }\n    },\n    \"XChainClaimID\": \"3\",\n    \"date\": \"2022-08-18T20:59:40Z\"\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"raFcdz1g8LWJDJWJE2ZKLRGdmUmsTyxaym\",\n            \"Balance\": \"969999860\",\n            \"Flags\": 0,\n            \"OwnerCount\": 0,\n            \"Sequence\": 10\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"1823595D6E1D18A9B18DF8C027F0FAA37283CA1EA7765FFB1BDC0445314EC412\",\n          \"PreviousFields\": {\n            \"Balance\": \"969999870\",\n            \"Sequence\": 9\n          },\n          \"PreviousTxnID\": \"C7B048D4619600A79E2080B3474303350E8C0552DBC82B72045F72A2428A96D3\",\n          \"PreviousTxnLgrSeq\": 9\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tecINSUFFICIENT_FUNDS\"\n  },\n  \"hash\": \"3C83AB57D10C9C8BC53B940ADE64DE6D2756411B2DDFBDAAA73381FE65051D54\",\n  \"ledger_index\": 10,\n  \"date\": \"2022-08-18T20:59:40Z\"\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/XChainCreateBridge/Simple.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { Amount } from '../../Amount'\nimport { TransactionSimpleComponent, TransactionSimpleProps } from '../types'\nimport { SimpleRow } from '../SimpleRow'\nimport { XChainBridge } from '../XChainBridge'\n\nexport const Simple: TransactionSimpleComponent = (\n  props: TransactionSimpleProps,\n) => {\n  const { t } = useTranslation()\n  const {\n    data: {\n      instructions: {\n        lockingDoor,\n        lockingIssue,\n        issuingDoor,\n        issuingIssue,\n        signatureReward,\n        minAccountCreateAmount,\n        bridgeOwner,\n      },\n    },\n  } = props\n\n  return (\n    <>\n      <XChainBridge\n        lockingDoor={lockingDoor}\n        lockingIssue={lockingIssue}\n        issuingDoor={issuingDoor}\n        issuingIssue={issuingIssue}\n        signatureReward={signatureReward}\n        bridgeOwner={bridgeOwner}\n      />\n      {minAccountCreateAmount && (\n        <SimpleRow\n          label={t('min_account_create_amount')}\n          data-testid=\"min-account-create-amount\"\n        >\n          <Amount value={minAccountCreateAmount} />\n        </SimpleRow>\n      )}\n    </>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/XChainCreateBridge/index.ts",
    "content": "import {\n  TransactionAction,\n  TransactionCategory,\n  TransactionMapping,\n} from '../types'\n\nimport { Simple } from './Simple'\nimport { parser } from './parser'\n\nexport const XChainCreateBridgeTransaction: TransactionMapping = {\n  Simple,\n  action: TransactionAction.CREATE,\n  category: TransactionCategory.XCHAIN,\n  parser,\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/XChainCreateBridge/parser.ts",
    "content": "import { formatAmount } from '../../../../../rippled/lib/txSummary/formatAmount'\n\nexport function parser(tx: any) {\n  return {\n    lockingDoor: tx.XChainBridge.LockingChainDoor,\n    lockingIssue: tx.XChainBridge.LockingChainIssue,\n    issuingDoor: tx.XChainBridge.IssuingChainDoor,\n    issuingIssue: tx.XChainBridge.IssuingChainIssue,\n    signatureReward: formatAmount(tx.SignatureReward),\n    minAccountCreateAmount: formatAmount(tx.MinAccountCreateAmount),\n    bridgeOwner: tx.Account,\n  }\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/XChainCreateBridge/test/XChainCreateBridgeSimple.test.tsx",
    "content": "import { Simple } from '../Simple'\nimport mockXChainCreateBridge from './mock_data/XChainCreateBridge.json'\nimport mockXChainCreateBridgeFailed from './mock_data/XChainCreateBridgeFailed.json'\nimport mockXChainCreateBridgeIOU from './mock_data/XChainCreateBridgeIOU.json'\nimport { createSimpleRenderFactory, expectSimpleRowText } from '../../test'\n\nconst renderComponent = createSimpleRenderFactory(Simple)\n\ndescribe('XChainCreateBridgeSimple', () => {\n  it('renders', () => {\n    const { container, unmount } = renderComponent(mockXChainCreateBridge)\n\n    // check XChainBridge parts\n    expectSimpleRowText(\n      container,\n      'locking-chain-door',\n      'rGQLcxzT3Po9PsCk5Lj9uK7S1juThii9cR',\n    )\n    expect(\n      container.querySelector('[data-testid=\"locking-chain-door\"] a'),\n    ).not.toBeInTheDocument()\n    expectSimpleRowText(container, 'locking-chain-issue', '\\uE900 XRP')\n    expectSimpleRowText(\n      container,\n      'issuing-chain-door',\n      'rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh',\n    )\n    expect(\n      container.querySelector('[data-testid=\"issuing-chain-door\"] a'),\n    ).toBeInTheDocument()\n    expectSimpleRowText(container, 'issuing-chain-issue', '\\uE900 XRP')\n\n    expectSimpleRowText(container, 'signature-reward', '\\uE9000.0001 XRP')\n    expect(\n      container.querySelector('[data-testid=\"min-create-account-amount\"]'),\n    ).not.toBeInTheDocument()\n    unmount()\n  })\n\n  it('renders IOU bridge', () => {\n    const { container } = renderComponent(mockXChainCreateBridgeIOU)\n\n    // check XChainBridge parts\n    expectSimpleRowText(\n      container,\n      'locking-chain-door',\n      'ratAutb3katzezbXX3LsX4sk4vmvhNucac',\n    )\n    expect(\n      container.querySelector('[data-testid=\"locking-chain-door\"] a'),\n    ).not.toBeInTheDocument()\n    expectSimpleRowText(\n      container,\n      'locking-chain-issue',\n      'USD.rNhm2aTLEnSdcWQ7d6PZ5F7TX5skM7wkAS',\n    )\n    expectSimpleRowText(\n      container,\n      'issuing-chain-door',\n      'rBkRN2VHVWJVKqfnh1TovLkXo7vLP7oBcq',\n    )\n    expect(\n      container.querySelector('[data-testid=\"issuing-chain-door\"] a'),\n    ).toBeInTheDocument()\n    expectSimpleRowText(\n      container,\n      'issuing-chain-issue',\n      'USD.rBkRN2VHVWJVKqfnh1TovLkXo7vLP7oBcq',\n    )\n\n    expectSimpleRowText(container, 'signature-reward', '\\uE9000.0001 XRP')\n    expectSimpleRowText(\n      container,\n      'min-account-create-amount',\n      '\\uE9005.00 XRP',\n    )\n  })\n\n  it('renders failed tx', () => {\n    const { container } = renderComponent(mockXChainCreateBridgeFailed)\n\n    // check XChainBridge parts\n    expectSimpleRowText(\n      container,\n      'locking-chain-door',\n      'rNFrsx478pH42Vy5w4KN9Hcyh8SDrVmCfd',\n    )\n    expect(\n      container.querySelector('[data-testid=\"locking-chain-door\"] a'),\n    ).toBeInTheDocument()\n    expectSimpleRowText(container, 'locking-chain-issue', '\\uE900 XRP')\n    expectSimpleRowText(\n      container,\n      'issuing-chain-door',\n      'rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh',\n    )\n    expect(\n      container.querySelector('[data-testid=\"issuing-chain-door\"] a'),\n    ).not.toBeInTheDocument()\n    expectSimpleRowText(container, 'issuing-chain-issue', '\\uE900 XRP')\n\n    expectSimpleRowText(container, 'signature-reward', '\\uE9000.0001 XRP')\n    expectSimpleRowText(\n      container,\n      'min-account-create-amount',\n      '\\uE9005.00 XRP',\n    )\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/XChainCreateBridge/test/mock_data/XChainCreateBridge.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh\",\n    \"Fee\": \"10\",\n    \"Flags\": 0,\n    \"Sequence\": 1,\n    \"SignatureReward\": \"100\",\n    \"SigningPubKey\": \"0330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD020\",\n    \"TransactionType\": \"XChainCreateBridge\",\n    \"TxnSignature\": \"3045022100E5B31CD70C9563521BA0F6EE3D039E9ECB76E01A11D293EF72CD521687D346DE02205815E290D062F4C0B94482D50F2EB9B512C20301854C2D1DE8C568AA2E5B2402\",\n    \"XChainBridge\": {\n      \"IssuingChainDoor\": \"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh\",\n      \"IssuingChainIssue\": { \"currency\": \"XRP\" },\n      \"LockingChainDoor\": \"rGQLcxzT3Po9PsCk5Lj9uK7S1juThii9cR\",\n      \"LockingChainIssue\": { \"currency\": \"XRP\" }\n    },\n    \"date\": \"2022-08-16T19:23:00Z\"\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh\",\n            \"Balance\": \"99999999999999990\",\n            \"Flags\": 0,\n            \"OwnerCount\": 1,\n            \"Sequence\": 2\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"2B6AC232AA4C4BE41BF49D2459FA4A0347E1B543A4C92FCEE0821C0201E2E9A8\",\n          \"PreviousFields\": {\n            \"Balance\": \"100000000000000000\",\n            \"OwnerCount\": 0,\n            \"Sequence\": 1\n          }\n        }\n      },\n      {\n        \"CreatedNode\": {\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"D8120FC732737A2CF2E9968FDF3797A43B457F2A81AA06D2653171A1EA635204\",\n          \"NewFields\": {\n            \"Owner\": \"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh\",\n            \"RootIndex\": \"D8120FC732737A2CF2E9968FDF3797A43B457F2A81AA06D2653171A1EA635204\"\n          }\n        }\n      },\n      {\n        \"CreatedNode\": {\n          \"LedgerEntryType\": \"Bridge\",\n          \"LedgerIndex\": \"EFFC3B47E68E9F74206D9C2F0E14279379E483A40A435AF7C7F729FCAD663DB1\",\n          \"NewFields\": {\n            \"Account\": \"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh\",\n            \"SignatureReward\": \"100\",\n            \"XChainBridge\": {\n              \"IssuingChainDoor\": \"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh\",\n              \"IssuingChainIssue\": { \"currency\": \"XRP\" },\n              \"LockingChainDoor\": \"rGQLcxzT3Po9PsCk5Lj9uK7S1juThii9cR\",\n              \"LockingChainIssue\": { \"currency\": \"XRP\" }\n            }\n          }\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tesSUCCESS\"\n  },\n  \"hash\": \"31BD5F2C0982752A20BB6A4205F7B6ED6576D08AB7927978BF282E8ABEF44467\",\n  \"ledger_index\": 3,\n  \"date\": \"2022-08-16T19:23:00Z\"\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/XChainCreateBridge/test/mock_data/XChainCreateBridgeFailed.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rNFrsx478pH42Vy5w4KN9Hcyh8SDrVmCfd\",\n    \"Fee\": \"10\",\n    \"Flags\": 0,\n    \"LastLedgerSequence\": 30,\n    \"MinAccountCreateAmount\": \"5000000\",\n    \"Sequence\": 5,\n    \"SignatureReward\": \"100\",\n    \"SigningPubKey\": \"039EEAC2921FED0BE867F5C6BC6206A21A7ECF720982C44A3D503B40CB1374DD6F\",\n    \"TransactionType\": \"XChainCreateBridge\",\n    \"TxnSignature\": \"3045022100B3127F3D6FE09CEC8DB14A262F1FEA82EB0F24D3882BB875072B82398FECD50602201F802C94B322EA90E51116A5910F8F3EA4BF951AB96EA2256A03E46B087169BD\",\n    \"XChainBridge\": {\n      \"IssuingChainDoor\": \"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh\",\n      \"IssuingChainIssue\": {\n        \"currency\": \"XRP\"\n      },\n      \"LockingChainDoor\": \"rNFrsx478pH42Vy5w4KN9Hcyh8SDrVmCfd\",\n      \"LockingChainIssue\": {\n        \"currency\": \"XRP\"\n      }\n    },\n    \"date\": 1679597660000\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rNFrsx478pH42Vy5w4KN9Hcyh8SDrVmCfd\",\n            \"Balance\": \"1070000570\",\n            \"Flags\": 0,\n            \"OwnerCount\": 2,\n            \"Sequence\": 6\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"41F98EB375A0FA10B571528507E9BE0BFF807316EB0F8E64656E82DA7F755B6E\",\n          \"PreviousFields\": {\n            \"Balance\": \"1070000580\",\n            \"Sequence\": 5\n          },\n          \"PreviousTxnID\": \"3DB9DF9C3412C4ABFC578E16E37EF3F25C80105F5E8BC5C99A3EF66DD62E11BA\",\n          \"PreviousTxnLgrSeq\": 10\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tecDUPLICATE\"\n  },\n  \"hash\": \"22BF0818FA3C1E1CE203BD0012FE83454D73B11A8EC06524EEAEA98D8137A6D6\",\n  \"ledger_index\": 11,\n  \"date\": 1679597660000\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/XChainCreateBridge/test/mock_data/XChainCreateBridgeIOU.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rBkRN2VHVWJVKqfnh1TovLkXo7vLP7oBcq\",\n    \"Fee\": \"10\",\n    \"Flags\": 0,\n    \"LastLedgerSequence\": 44,\n    \"MinAccountCreateAmount\": \"5000000\",\n    \"Sequence\": 10,\n    \"SignatureReward\": \"100\",\n    \"SigningPubKey\": \"ED04ACCCE0980432CAD6AE4C98E29E3227E763F716D273EC6C7002308ADF1CBF24\",\n    \"TransactionType\": \"XChainCreateBridge\",\n    \"TxnSignature\": \"081EE14993C48F6F5351E44EE738244516F75510266C806FC48DDBA138064B8F6CFA26D4B8D2847C763BA00437D1F3B04045911289D3D56A8A04C55ECA53D303\",\n    \"XChainBridge\": {\n      \"IssuingChainDoor\": \"rBkRN2VHVWJVKqfnh1TovLkXo7vLP7oBcq\",\n      \"IssuingChainIssue\": {\n        \"currency\": \"USD\",\n        \"issuer\": \"rBkRN2VHVWJVKqfnh1TovLkXo7vLP7oBcq\"\n      },\n      \"LockingChainDoor\": \"ratAutb3katzezbXX3LsX4sk4vmvhNucac\",\n      \"LockingChainIssue\": {\n        \"currency\": \"USD\",\n        \"issuer\": \"rNhm2aTLEnSdcWQ7d6PZ5F7TX5skM7wkAS\"\n      }\n    },\n    \"date\": \"2022-11-15T22:08:50Z\"\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"CreatedNode\": {\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"7821DED04B3BCB56A2DA2A974BB4D273C16CDD872F327145E8AD5FF23FD46EB9\",\n          \"NewFields\": {\n            \"Owner\": \"rBkRN2VHVWJVKqfnh1TovLkXo7vLP7oBcq\",\n            \"RootIndex\": \"7821DED04B3BCB56A2DA2A974BB4D273C16CDD872F327145E8AD5FF23FD46EB9\"\n          }\n        }\n      },\n      {\n        \"CreatedNode\": {\n          \"LedgerEntryType\": \"Bridge\",\n          \"LedgerIndex\": \"B0B9C012173875D83723A22BE530E227E7923A6272CD1ABCEE62644C444DA542\",\n          \"NewFields\": {\n            \"Account\": \"rBkRN2VHVWJVKqfnh1TovLkXo7vLP7oBcq\",\n            \"MinAccountCreateAmount\": \"5000000\",\n            \"SignatureReward\": \"100\",\n            \"XChainBridge\": {\n              \"IssuingChainDoor\": \"rBkRN2VHVWJVKqfnh1TovLkXo7vLP7oBcq\",\n              \"IssuingChainIssue\": {\n                \"currency\": \"USD\",\n                \"issuer\": \"rBkRN2VHVWJVKqfnh1TovLkXo7vLP7oBcq\"\n              },\n              \"LockingChainDoor\": \"ratAutb3katzezbXX3LsX4sk4vmvhNucac\",\n              \"LockingChainIssue\": {\n                \"currency\": \"USD\",\n                \"issuer\": \"rNhm2aTLEnSdcWQ7d6PZ5F7TX5skM7wkAS\"\n              }\n            }\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rBkRN2VHVWJVKqfnh1TovLkXo7vLP7oBcq\",\n            \"Balance\": \"49999990\",\n            \"Flags\": 0,\n            \"OwnerCount\": 1,\n            \"Sequence\": 11\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"CB0BD9623A9B2E3337D108FB089262D9AD0B58F5FF1D1D52CEC4FEC412862588\",\n          \"PreviousFields\": {\n            \"Balance\": \"50000000\",\n            \"OwnerCount\": 0,\n            \"Sequence\": 10\n          },\n          \"PreviousTxnID\": \"17624BFD6A71CDA94210887BA3B4F38B3630A6B416D9F81780058A12704E0C7E\",\n          \"PreviousTxnLgrSeq\": 10\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tesSUCCESS\"\n  },\n  \"hash\": \"81738C64A5E30F50C3A46EFC22AC677DCEFC1D0FC0BDFC896E747594EC4874DE\",\n  \"ledger_index\": 25,\n  \"date\": \"2022-11-15T22:08:50Z\"\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/XChainCreateClaimID/Simple.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { Account } from '../../Account'\nimport { TransactionSimpleComponent, TransactionSimpleProps } from '../types'\nimport { SimpleRow } from '../SimpleRow'\nimport { XChainBridge } from '../XChainBridge'\n\nexport const Simple: TransactionSimpleComponent = (\n  props: TransactionSimpleProps,\n) => {\n  const { t } = useTranslation()\n  const {\n    data: {\n      instructions: {\n        lockingDoor,\n        lockingIssue,\n        issuingDoor,\n        issuingIssue,\n        signatureReward,\n        otherChainSource,\n        bridgeOwner,\n        claimID,\n      },\n    },\n  } = props\n\n  return (\n    <>\n      <XChainBridge\n        lockingDoor={lockingDoor}\n        lockingIssue={lockingIssue}\n        issuingDoor={issuingDoor}\n        issuingIssue={issuingIssue}\n        signatureReward={signatureReward}\n        bridgeOwner={bridgeOwner}\n      />\n      <SimpleRow\n        label={t('other_chain_source')}\n        data-testid=\"other-chain-source\"\n      >\n        <Account account={otherChainSource} link={false} />\n      </SimpleRow>\n      {claimID && (\n        <SimpleRow label={t('xchain_claim_id')} data-testid=\"claim-id\">\n          {claimID}\n        </SimpleRow>\n      )}\n    </>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/XChainCreateClaimID/index.ts",
    "content": "import {\n  TransactionAction,\n  TransactionCategory,\n  TransactionMapping,\n} from '../types'\n\nimport { Simple } from './Simple'\nimport { parser } from './parser'\n\nexport const XChainCreateClaimIDTransaction: TransactionMapping = {\n  Simple,\n  action: TransactionAction.CREATE,\n  category: TransactionCategory.XCHAIN,\n  parser,\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/XChainCreateClaimID/parser.ts",
    "content": "import { formatAmount } from '../../../../../rippled/lib/txSummary/formatAmount'\n\nexport function parser(tx: any, meta: any) {\n  const affectedNodes = meta.AffectedNodes\n  const bridgeMeta = affectedNodes.filter(\n    (node: any) =>\n      node.ModifiedNode && node.ModifiedNode.LedgerEntryType === 'Bridge',\n  )[0]\n  const claimIDMeta = affectedNodes.filter(\n    (node: any) =>\n      node.CreatedNode &&\n      node.CreatedNode.LedgerEntryType === 'XChainOwnedClaimID',\n  )[0]\n  return {\n    lockingDoor: tx.XChainBridge.LockingChainDoor,\n    lockingIssue: tx.XChainBridge.LockingChainIssue,\n    issuingDoor: tx.XChainBridge.IssuingChainDoor,\n    issuingIssue: tx.XChainBridge.IssuingChainIssue,\n    signatureReward: formatAmount(tx.SignatureReward),\n    otherChainSource: tx.OtherChainSource,\n    bridgeOwner: bridgeMeta?.ModifiedNode?.FinalFields?.Account,\n    claimID: claimIDMeta?.CreatedNode?.NewFields?.XChainClaimID,\n  }\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/XChainCreateClaimID/test/XChainCreateClaimIDSimple.test.tsx",
    "content": "import { createSimpleRenderFactory, expectSimpleRowText } from '../../test'\nimport { Simple } from '../Simple'\nimport mockXChainCreateClaimID from './mock_data/XChainCreateClaimID.json'\nimport mockXChainCreateClaimIDFailed from './mock_data/XChainCreateClaimIDFailed.json'\n\nconst renderComponent = createSimpleRenderFactory(Simple)\n\ndescribe('XChainCreateClaimIDSimple', () => {\n  it('renders', () => {\n    const { container } = renderComponent(mockXChainCreateClaimID)\n\n    // check XChainBridge parts\n    expectSimpleRowText(\n      container,\n      'locking-chain-door',\n      'rNe5NbD1hqCSZPz9KM5PHm5Bf8jjHfezPE',\n    )\n    expect(\n      container.querySelector('[data-testid=\"locking-chain-door\"] a'),\n    ).not.toBeInTheDocument()\n    expectSimpleRowText(container, 'locking-chain-issue', '\\uE900 XRP')\n    expectSimpleRowText(\n      container,\n      'issuing-chain-door',\n      'rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh',\n    )\n    expect(\n      container.querySelector('[data-testid=\"issuing-chain-door\"] a'),\n    ).toBeInTheDocument()\n    expectSimpleRowText(container, 'issuing-chain-issue', '\\uE900 XRP')\n\n    expectSimpleRowText(container, 'signature-reward', '\\uE9000.0001 XRP')\n    expectSimpleRowText(\n      container,\n      'other-chain-source',\n      'raFcdz1g8LWJDJWJE2ZKLRGdmUmsTyxaym',\n    )\n    expectSimpleRowText(container, 'claim-id', '1')\n  })\n\n  it('renders failed transaction', () => {\n    const { container } = renderComponent(mockXChainCreateClaimIDFailed)\n\n    // check XChainBridge parts\n    expectSimpleRowText(\n      container,\n      'locking-chain-door',\n      'r3rhWeE31Jt5sWmi4QiGLMZnY3ENgqw96W',\n    )\n    expect(\n      container.querySelector('[data-testid=\"locking-chain-door\"] a'),\n    ).not.toBeInTheDocument()\n    expectSimpleRowText(container, 'locking-chain-issue', '\\uE900 XRP')\n    expectSimpleRowText(\n      container,\n      'issuing-chain-door',\n      'rhub8VRN55s94qWKDv6jmDy1pUykJzF3wq',\n    )\n    expect(\n      container.querySelector('[data-testid=\"issuing-chain-door\"] a'),\n    ).not.toBeInTheDocument()\n    expectSimpleRowText(container, 'issuing-chain-issue', '\\uE900 XRP')\n\n    expectSimpleRowText(container, 'signature-reward', '\\uE9000.0001 XRP')\n    expectSimpleRowText(\n      container,\n      'other-chain-source',\n      'r3rhWeE31Jt5sWmi4QiGLMZnY3ENgqw96W',\n    )\n    expect(\n      container.querySelector('[data-testid=\"claim-id\"]'),\n    ).not.toBeInTheDocument()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/XChainCreateClaimID/test/mock_data/XChainCreateClaimID.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rJdTJRJZ6GXCCRaamHJgEqVzB7Zy4557Pi\",\n    \"Fee\": \"10\",\n    \"Flags\": 0,\n    \"LastLedgerSequence\": 31,\n    \"OtherChainSource\": \"raFcdz1g8LWJDJWJE2ZKLRGdmUmsTyxaym\",\n    \"Sequence\": 11,\n    \"SignatureReward\": \"100\",\n    \"SigningPubKey\": \"03E2494BAB52A1D9C8A7BC67773AD7893B33DBF0F836A634D8B28DD6007B1537E3\",\n    \"TransactionType\": \"XChainCreateClaimID\",\n    \"TxnSignature\": \"3045022100A29E14930BF0BEBFB679D11594F1264302DDCEDB44C6E29FD0AB40E41604D82E022076317D6E6DA58DA5F27ECAB2809A0985560408BEA733F2A30B2B128EA6C79FDB\",\n    \"XChainBridge\": {\n      \"IssuingChainDoor\": \"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh\",\n      \"IssuingChainIssue\": {\n        \"currency\": \"XRP\"\n      },\n      \"LockingChainDoor\": \"rNe5NbD1hqCSZPz9KM5PHm5Bf8jjHfezPE\",\n      \"LockingChainIssue\": {\n        \"currency\": \"XRP\"\n      }\n    },\n    \"date\": 1676584689000\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh\",\n            \"Flags\": 0,\n            \"MinAccountCreateAmount\": \"5000000\",\n            \"OwnerNode\": \"0\",\n            \"SignatureReward\": \"100\",\n            \"XChainAccountClaimCount\": \"6\",\n            \"XChainAccountCreateCount\": \"0\",\n            \"XChainBridge\": {\n              \"IssuingChainDoor\": \"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh\",\n              \"IssuingChainIssue\": {\n                \"currency\": \"XRP\"\n              },\n              \"LockingChainDoor\": \"rNe5NbD1hqCSZPz9KM5PHm5Bf8jjHfezPE\",\n              \"LockingChainIssue\": {\n                \"currency\": \"XRP\"\n              }\n            },\n            \"XChainClaimID\": \"1\"\n          },\n          \"LedgerEntryType\": \"Bridge\",\n          \"LedgerIndex\": \"469372BEE8814EC52CA2AECB5374AB57A47B53627E3C0E2ACBE3FDC78DBFEC7B\",\n          \"PreviousFields\": {\n            \"XChainClaimID\": \"0\"\n          },\n          \"PreviousTxnID\": \"39C8FD7CE5392C4CAF5B062453C291EE9CB321AC61F1A8CF4823171D1E2371DF\",\n          \"PreviousTxnLgrSeq\": 11\n        }\n      },\n      {\n        \"CreatedNode\": {\n          \"LedgerEntryType\": \"XChainOwnedClaimID\",\n          \"LedgerIndex\": \"69DFF2EBBBEEA0E047FCB4FC2912014E12557AB3C84E2A874E442AC7AA25313B\",\n          \"NewFields\": {\n            \"Account\": \"rJdTJRJZ6GXCCRaamHJgEqVzB7Zy4557Pi\",\n            \"OtherChainSource\": \"raFcdz1g8LWJDJWJE2ZKLRGdmUmsTyxaym\",\n            \"SignatureReward\": \"100\",\n            \"XChainBridge\": {\n              \"IssuingChainDoor\": \"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh\",\n              \"IssuingChainIssue\": {\n                \"currency\": \"XRP\"\n              },\n              \"LockingChainDoor\": \"rNe5NbD1hqCSZPz9KM5PHm5Bf8jjHfezPE\",\n              \"LockingChainIssue\": {\n                \"currency\": \"XRP\"\n              }\n            },\n            \"XChainClaimID\": \"1\"\n          }\n        }\n      },\n      {\n        \"CreatedNode\": {\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"86213CF4452A2D17362C65C24C3EE190F0A9E60EBBE5BD5DFBF039696784E2BE\",\n          \"NewFields\": {\n            \"Owner\": \"rJdTJRJZ6GXCCRaamHJgEqVzB7Zy4557Pi\",\n            \"RootIndex\": \"86213CF4452A2D17362C65C24C3EE190F0A9E60EBBE5BD5DFBF039696784E2BE\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rJdTJRJZ6GXCCRaamHJgEqVzB7Zy4557Pi\",\n            \"Balance\": \"9999990\",\n            \"Flags\": 0,\n            \"OwnerCount\": 1,\n            \"Sequence\": 12\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"B6AE0B6E0F7A38BDCA21F08466A85036DA3DA7558F44CC26FE457C3D2E8F2F87\",\n          \"PreviousFields\": {\n            \"Balance\": \"10000000\",\n            \"OwnerCount\": 0,\n            \"Sequence\": 11\n          },\n          \"PreviousTxnID\": \"39C8FD7CE5392C4CAF5B062453C291EE9CB321AC61F1A8CF4823171D1E2371DF\",\n          \"PreviousTxnLgrSeq\": 11\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tesSUCCESS\"\n  },\n  \"hash\": \"A968A7E7875F496781FCAB06B9894252A49A8A83E4004A37512E3366654CD5DB\",\n  \"ledger_index\": 12,\n  \"date\": 1676584689000\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/XChainCreateClaimID/test/mock_data/XChainCreateClaimIDFailed.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh\",\n    \"Fee\": \"10\",\n    \"Flags\": 0,\n    \"LastLedgerSequence\": 35,\n    \"OtherChainSource\": \"r3rhWeE31Jt5sWmi4QiGLMZnY3ENgqw96W\",\n    \"Sequence\": 28,\n    \"SignatureReward\": \"100\",\n    \"SigningPubKey\": \"0330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD020\",\n    \"TransactionType\": \"XChainCreateClaimID\",\n    \"TxnSignature\": \"3044022055EDB73DDD26044AD04B606541D03E009D290E7DA4BFD58C47999FC83EA8901C022022F63B2959B860E11E01723664534FDC4FA8FE4EFB8C624C600755A9004F82EA\",\n    \"XChainBridge\": {\n      \"IssuingChainDoor\": \"rhub8VRN55s94qWKDv6jmDy1pUykJzF3wq\",\n      \"IssuingChainIssue\": {\n        \"currency\": \"XRP\"\n      },\n      \"LockingChainDoor\": \"r3rhWeE31Jt5sWmi4QiGLMZnY3ENgqw96W\",\n      \"LockingChainIssue\": {\n        \"currency\": \"XRP\"\n      }\n    },\n    \"date\": 1679603200000\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh\",\n            \"Balance\": \"99999987849998220\",\n            \"Flags\": 0,\n            \"OwnerCount\": 0,\n            \"Sequence\": 29\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"2B6AC232AA4C4BE41BF49D2459FA4A0347E1B543A4C92FCEE0821C0201E2E9A8\",\n          \"PreviousFields\": {\n            \"Balance\": \"99999987849998230\",\n            \"Sequence\": 28\n          },\n          \"PreviousTxnID\": \"4B1C32DFDB68219E30FD74781C167C4E2BB73847AE46EE7A443129E24D69181A\",\n          \"PreviousTxnLgrSeq\": 14\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tecNO_ENTRY\"\n  },\n  \"hash\": \"EE77C65171B9C57254605F5F61605D31273CF78209093EEA142A553CD4A19656\",\n  \"ledger_index\": 16,\n  \"date\": 1679603200000\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/XChainModifyBridge/Simple.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport { Amount } from '../../Amount'\nimport { TransactionSimpleComponent, TransactionSimpleProps } from '../types'\nimport { SimpleRow } from '../SimpleRow'\nimport { XChainBridge } from '../XChainBridge'\n\nexport const Simple: TransactionSimpleComponent = (\n  props: TransactionSimpleProps,\n) => {\n  const { t } = useTranslation()\n  const {\n    data: {\n      instructions: {\n        lockingDoor,\n        lockingIssue,\n        issuingDoor,\n        issuingIssue,\n        signatureReward,\n        minAccountCreateAmount,\n        bridgeOwner,\n      },\n    },\n  } = props\n\n  return (\n    <>\n      <XChainBridge\n        lockingDoor={lockingDoor}\n        lockingIssue={lockingIssue}\n        issuingDoor={issuingDoor}\n        issuingIssue={issuingIssue}\n        signatureReward={signatureReward}\n        bridgeOwner={bridgeOwner}\n      />\n      {minAccountCreateAmount && (\n        <SimpleRow\n          label={t('min_account_create_amount')}\n          data-testid=\"min-account-create-amount\"\n        >\n          <Amount value={minAccountCreateAmount} />\n        </SimpleRow>\n      )}\n    </>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/XChainModifyBridge/index.ts",
    "content": "import {\n  TransactionAction,\n  TransactionCategory,\n  TransactionMapping,\n} from '../types'\n\nimport { Simple } from './Simple'\nimport { parser } from './parser'\n\nexport const XChainModifyBridgeTransaction: TransactionMapping = {\n  Simple,\n  action: TransactionAction.MODIFY,\n  category: TransactionCategory.XCHAIN,\n  parser,\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/XChainModifyBridge/parser.ts",
    "content": "import { formatAmount } from '../../../../../rippled/lib/txSummary/formatAmount'\n\nexport function parser(tx: any) {\n  return {\n    lockingDoor: tx.XChainBridge.LockingChainDoor,\n    lockingIssue: tx.XChainBridge.LockingChainIssue,\n    issuingDoor: tx.XChainBridge.IssuingChainDoor,\n    issuingIssue: tx.XChainBridge.IssuingChainIssue,\n    signatureReward: formatAmount(tx.SignatureReward),\n    minAccountCreateAmount: formatAmount(tx.MinAccountCreateAmount),\n    bridgeOwner: tx.Account,\n  }\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/XChainModifyBridge/test/XChainModifyBridgeSimple.test.tsx",
    "content": "import { createSimpleRenderFactory, expectSimpleRowText } from '../../test'\nimport { Simple } from '../Simple'\nimport mockXChainModifyBridge from './mock_data/XChainModifyBridge.json'\nimport mockXChainModifyBridgeMinAccountCreateAmount from './mock_data/XChainModifyBridgeMinAccountCreateAmount.json'\nimport mockXChainModifyBridgeNoEntry from './mock_data/XChainModifyBridgeNoEntry.json'\n\nconst renderComponent = createSimpleRenderFactory(Simple)\n\ndescribe('XChainModifyBridgeSimple', () => {\n  it('renders', () => {\n    const { container } = renderComponent(mockXChainModifyBridge)\n\n    // check XChainBridge parts\n    expectSimpleRowText(\n      container,\n      'locking-chain-door',\n      'rGQLcxzT3Po9PsCk5Lj9uK7S1juThii9cR',\n    )\n    expect(\n      container.querySelector('[data-testid=\"locking-chain-door\"] a'),\n    ).not.toBeInTheDocument()\n    expectSimpleRowText(container, 'locking-chain-issue', '\\uE900 XRP')\n    expectSimpleRowText(\n      container,\n      'issuing-chain-door',\n      'rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh',\n    )\n    expect(\n      container.querySelector('[data-testid=\"issuing-chain-door\"] a'),\n    ).toBeInTheDocument()\n    expectSimpleRowText(container, 'issuing-chain-issue', '\\uE900 XRP')\n\n    expectSimpleRowText(container, 'signature-reward', '\\uE9000.01 XRP')\n  })\n\n  it('renders MinAccountCreateAmount', () => {\n    const { container } = renderComponent(\n      mockXChainModifyBridgeMinAccountCreateAmount,\n    )\n\n    // check XChainBridge parts\n    expectSimpleRowText(\n      container,\n      'locking-chain-door',\n      'rnBnyot2gCJywLxLzfHQX2dUJqZ6oghUFp',\n    )\n    expect(\n      container.querySelector('[data-testid=\"locking-chain-door\"] a'),\n    ).toBeInTheDocument()\n    expectSimpleRowText(container, 'locking-chain-issue', '\\uE900 XRP')\n    expectSimpleRowText(\n      container,\n      'issuing-chain-door',\n      'rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh',\n    )\n    expect(\n      container.querySelector('[data-testid=\"issuing-chain-door\"] a'),\n    ).not.toBeInTheDocument()\n    expectSimpleRowText(container, 'issuing-chain-issue', '\\uE900 XRP')\n\n    expectSimpleRowText(\n      container,\n      'min-account-create-amount',\n      '\\uE900100.00 XRP',\n    )\n  })\n\n  it('renders failed transaction', () => {\n    const { container } = renderComponent(mockXChainModifyBridgeNoEntry)\n\n    // check XChainBridge parts\n    expectSimpleRowText(\n      container,\n      'locking-chain-door',\n      'r3rhWeE31Jt5sWmi4QiGLMZnY3ENgqw96W',\n    )\n    expect(\n      container.querySelector('[data-testid=\"locking-chain-door\"] a'),\n    ).not.toBeInTheDocument()\n    expectSimpleRowText(container, 'locking-chain-issue', '\\uE900 XRP')\n    expectSimpleRowText(\n      container,\n      'issuing-chain-door',\n      'rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh',\n    )\n    expect(\n      container.querySelector('[data-testid=\"issuing-chain-door\"] a'),\n    ).toBeInTheDocument()\n    expectSimpleRowText(container, 'issuing-chain-issue', '\\uE900 XRP')\n\n    expectSimpleRowText(container, 'signature-reward', '\\uE9000.0001 XRP')\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/XChainModifyBridge/test/mock_data/XChainModifyBridge.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh\",\n    \"Fee\": \"10\",\n    \"Flags\": 0,\n    \"LastLedgerSequence\": 23,\n    \"Sequence\": 2,\n    \"SignatureReward\": \"10000\",\n    \"SigningPubKey\": \"0330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD020\",\n    \"TransactionType\": \"XChainModifyBridge\",\n    \"TxnSignature\": \"3045022100A63798DB1B2CD62D01E04C503623E5DFC601C1FEB94D57F080B94358F2F8FAEE022050E04955B6774B107374C556A60B6661D47C926F24B7B92D84D93546659DE29B\",\n    \"XChainBridge\": {\n      \"IssuingChainDoor\": \"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh\",\n      \"IssuingChainIssue\": { \"currency\": \"XRP\" },\n      \"LockingChainDoor\": \"rGQLcxzT3Po9PsCk5Lj9uK7S1juThii9cR\",\n      \"LockingChainIssue\": { \"currency\": \"XRP\" }\n    },\n    \"date\": \"2022-08-18T09:11:30Z\"\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh\",\n            \"Balance\": \"99999999999999980\",\n            \"Flags\": 0,\n            \"OwnerCount\": 1,\n            \"Sequence\": 3\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"2B6AC232AA4C4BE41BF49D2459FA4A0347E1B543A4C92FCEE0821C0201E2E9A8\",\n          \"PreviousFields\": {\n            \"Balance\": \"99999999999999990\",\n            \"Sequence\": 2\n          },\n          \"PreviousTxnID\": \"31BD5F2C0982752A20BB6A4205F7B6ED6576D08AB7927978BF282E8ABEF44467\",\n          \"PreviousTxnLgrSeq\": 3\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh\",\n            \"Balance\": \"0\",\n            \"Flags\": 0,\n            \"OwnerNode\": \"0\",\n            \"SignatureReward\": \"10000\",\n            \"XChainAccountClaimCount\": \"0\",\n            \"XChainAccountCreateCount\": \"0\",\n            \"XChainBridge\": {\n              \"IssuingChainDoor\": \"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh\",\n              \"IssuingChainIssue\": { \"currency\": \"XRP\" },\n              \"LockingChainDoor\": \"rGQLcxzT3Po9PsCk5Lj9uK7S1juThii9cR\",\n              \"LockingChainIssue\": { \"currency\": \"XRP\" }\n            },\n            \"XChainClaimID\": \"0\"\n          },\n          \"LedgerEntryType\": \"Bridge\",\n          \"LedgerIndex\": \"EFFC3B47E68E9F74206D9C2F0E14279379E483A40A435AF7C7F729FCAD663DB1\",\n          \"PreviousFields\": {\n            \"SignatureReward\": \"100\"\n          },\n          \"PreviousTxnID\": \"31BD5F2C0982752A20BB6A4205F7B6ED6576D08AB7927978BF282E8ABEF44467\",\n          \"PreviousTxnLgrSeq\": 3\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tesSUCCESS\"\n  },\n  \"hash\": \"ADBA23ED812B231559A1DFC76C9BCE566BB7BAEF7A737C3515911AE23050CDDA\",\n  \"ledger_index\": 4,\n  \"date\": \"2022-08-18T09:11:30Z\"\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/XChainModifyBridge/test/mock_data/XChainModifyBridgeMinAccountCreateAmount.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rnBnyot2gCJywLxLzfHQX2dUJqZ6oghUFp\",\n    \"Fee\": \"10\",\n    \"Flags\": 0,\n    \"LastLedgerSequence\": 38,\n    \"MinAccountCreateAmount\": \"100000000\",\n    \"Sequence\": 5,\n    \"SigningPubKey\": \"032389AD44BF4CCE332D3A2333AFBA03CD2EA8EAB31A63F7EF5A608107BDFBFCD7\",\n    \"TransactionType\": \"XChainModifyBridge\",\n    \"TxnSignature\": \"3044022067C35109504B30AEA17D369DBFB681675E289F1D2CC1DCA1E7F117BB80DD84B002204F206366690DAF7C17CCC8957C3A20816410A5A148FE371C2369E0C0B407AAD1\",\n    \"XChainBridge\": {\n      \"IssuingChainDoor\": \"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh\",\n      \"IssuingChainIssue\": { \"currency\": \"XRP\" },\n      \"LockingChainDoor\": \"rnBnyot2gCJywLxLzfHQX2dUJqZ6oghUFp\",\n      \"LockingChainIssue\": { \"currency\": \"XRP\" }\n    },\n    \"date\": \"2022-09-09T20:19:00Z\"\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rnBnyot2gCJywLxLzfHQX2dUJqZ6oghUFp\",\n            \"Balance\": \"0\",\n            \"Flags\": 0,\n            \"MinAccountCreateAmount\": \"100000000\",\n            \"OwnerNode\": \"0\",\n            \"SignatureReward\": \"100\",\n            \"XChainAccountClaimCount\": \"0\",\n            \"XChainAccountCreateCount\": \"1\",\n            \"XChainBridge\": {\n              \"IssuingChainDoor\": \"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh\",\n              \"IssuingChainIssue\": { \"currency\": \"XRP\" },\n              \"LockingChainDoor\": \"rnBnyot2gCJywLxLzfHQX2dUJqZ6oghUFp\",\n              \"LockingChainIssue\": { \"currency\": \"XRP\" }\n            },\n            \"XChainClaimID\": \"0\"\n          },\n          \"LedgerEntryType\": \"Bridge\",\n          \"LedgerIndex\": \"063F76476DC55CD4FC8A2B1FDD4D3AF2CAB72EB5A19C62DCB2F0CC08953B4093\",\n          \"PreviousFields\": {\n            \"MinAccountCreateAmount\": \"5000000\"\n          },\n          \"PreviousTxnID\": \"CB4C23D2CD36DFF66F10B38F29B7CDCE5C44622D470CC438EEEE223832B50717\",\n          \"PreviousTxnLgrSeq\": 18\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rnBnyot2gCJywLxLzfHQX2dUJqZ6oghUFp\",\n            \"Balance\": \"1015000070\",\n            \"Flags\": 0,\n            \"OwnerCount\": 2,\n            \"Sequence\": 6\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"8A4453D12949BE96BE6B1B63E77B165F61CDE7AE852237791F6A2D3726936E1E\",\n          \"PreviousFields\": {\n            \"Balance\": \"1015000080\",\n            \"Sequence\": 5\n          },\n          \"PreviousTxnID\": \"CB4C23D2CD36DFF66F10B38F29B7CDCE5C44622D470CC438EEEE223832B50717\",\n          \"PreviousTxnLgrSeq\": 18\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tesSUCCESS\"\n  },\n  \"hash\": \"625C6B9481E449AEB1ED454E3643FA123B1573658187A067302F903A65911038\",\n  \"ledger_index\": 19,\n  \"date\": \"2022-09-09T20:19:00Z\"\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/XChainModifyBridge/test/mock_data/XChainModifyBridgeNoEntry.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh\",\n    \"Fee\": \"10\",\n    \"Flags\": 0,\n    \"LastLedgerSequence\": 38,\n    \"Sequence\": 30,\n    \"SignatureReward\": \"100\",\n    \"SigningPubKey\": \"0330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD020\",\n    \"TransactionType\": \"XChainModifyBridge\",\n    \"TxnSignature\": \"304402200F7ECEBC9DF4AD8B651F2DD215299B9F96BE40A6CDBB9A5ABA540CADCD66D88702200C854619DCE57AAE6536C03F6B76D3CF1F382D72DD39BEE13BDC304EFB6ED500\",\n    \"XChainBridge\": {\n      \"IssuingChainDoor\": \"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh\",\n      \"IssuingChainIssue\": {\n        \"currency\": \"XRP\"\n      },\n      \"LockingChainDoor\": \"r3rhWeE31Jt5sWmi4QiGLMZnY3ENgqw96W\",\n      \"LockingChainIssue\": {\n        \"currency\": \"XRP\"\n      }\n    },\n    \"date\": 1679604320000\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh\",\n            \"Balance\": \"99999987849998200\",\n            \"Flags\": 0,\n            \"OwnerCount\": 0,\n            \"Sequence\": 31\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"2B6AC232AA4C4BE41BF49D2459FA4A0347E1B543A4C92FCEE0821C0201E2E9A8\",\n          \"PreviousFields\": {\n            \"Balance\": \"99999987849998210\",\n            \"Sequence\": 30\n          },\n          \"PreviousTxnID\": \"30B1D2AE3E64B377B9D0B036F2736CE2A88AD5FD99130DFADCDC534EFAB75D2A\",\n          \"PreviousTxnLgrSeq\": 18\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tecNO_ENTRY\"\n  },\n  \"hash\": \"72B6CC170F492FF87825A8F288B7F05EBEE321974C2D7A8E39D5034167C6DCA9\",\n  \"ledger_index\": 19,\n  \"date\": 1679604320000\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/defaultParser.ts",
    "content": "export const defaultParser = (tx: any): any => tx\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/index.ts",
    "content": "import { AMMClawback } from './AMMClawback'\nimport { AMMCreate } from './AMMCreate'\nimport { AMMDeposit } from './AMMDeposit'\nimport { AMMDeleteTransaction as AMMDelete } from './AMMDelete'\nimport { AMMWithdraw } from './AMMWithdraw'\nimport { AMMBid } from './AMMBid'\nimport { AMMVote } from './AMMVote'\nimport { AccountDeleteTransaction as AccountDelete } from './AccountDelete'\nimport { AccountSetTransaction as AccountSet } from './AccountSet'\nimport { BatchTransaction as Batch } from './Batch'\nimport { CredentialAcceptTransaction as CredentialAccept } from './CredentialAccept'\nimport { CredentialCreateTransaction as CredentialCreate } from './CredentialCreate'\nimport { CredentialDeleteTransaction as CredentialDelete } from './CredentialDelete'\nimport { DelegateSetTransaction as DelegateSet } from './DelegateSet'\nimport { DIDSetTransaction as DIDSet } from './DIDSet'\nimport { DepositPreauthTransaction as DepositPreauth } from './DepositPreauth'\nimport { EnableAmendmentTransaction as EnableAmendment } from './EnableAmendment'\nimport { MPTokenAuthorizeTransaction as MPTokenAuthorize } from './MPTokenAuthorize'\nimport { MPTokenIssuanceCreateTransaction as MPTokenIssuanceCreate } from './MPTokenIssuanceCreate'\nimport { MPTokenIssuanceDestroyTransaction as MPTokenIssuanceDestroy } from './MPTokenIssuanceDestroy'\nimport { MPTokenIssuanceSetTransaction as MPTokenIssuanceSet } from './MPTokenIssuanceSet'\nimport { NFTokenMintTransaction as NFTokenMint } from './NFTokenMint'\nimport { NFTokenCancelOfferTransaction as NFTokenCancelOffer } from './NFTokenCancelOffer'\nimport { NFTokenBurnTransaction as NFTokenBurn } from './NFTokenBurn'\nimport { NFTokenCreateOfferTransaction as NFTokenCreateOffer } from './NFTokenCreateOffer'\nimport { NFTokenAcceptOfferTransaction as NFTokenAcceptOffer } from './NFTokenAcceptOffer'\nimport { OfferCancelTransaction as OfferCancel } from './OfferCancel'\nimport { OfferCreateTransaction as OfferCreate } from './OfferCreate'\nimport { OracleDeleteTransaction as OracleDelete } from './OracleDelete'\nimport { OracleSetTransaction as OracleSet } from './OracleSet'\nimport { PaymentTransaction as Payment } from './Payment'\nimport { PaymentChannelClaimTransaction as PaymentChannelClaim } from './PaymentChannelClaim'\nimport { PaymentChannelCreateTransaction as PaymentChannelCreate } from './PaymentChannelCreate'\nimport { PaymentChannelFundTransaction as PaymentChannelFund } from './PaymentChannelFund'\nimport { PermissionedDomainDeleteTransaction as PermissionedDomainDelete } from './PermissionedDomainDelete'\nimport { PermissionedDomainSetTransaction as PermissionedDomainSet } from './PermissionedDomainSet'\nimport { SetFeeTransaction as SetFee } from './SetFee'\nimport { SetHookTransaction as SetHook } from './SetHook'\nimport { SetRegularKeyTransaction as SetRegularKey } from './SetRegularKey'\nimport { SignerListSetTransaction as SignerListSet } from './SignerListSet'\nimport { XChainAccountCreateCommitTransaction as XChainAccountCreateCommit } from './XChainAccountCreateCommit'\nimport { XChainAddAccountCreateAttestationTransaction as XChainAddAccountCreateAttestation } from './XChainAddAccountCreateAttestation'\nimport { XChainAddClaimAttestationTransaction as XChainAddClaimAttestation } from './XChainAddClaimAttestation'\nimport { XChainClaimTransaction as XChainClaim } from './XChainClaim'\nimport { XChainCommitTransaction as XChainCommit } from './XChainCommit'\nimport { XChainCreateBridgeTransaction as XChainCreateBridge } from './XChainCreateBridge'\nimport { XChainCreateClaimIDTransaction as XChainCreateClaimID } from './XChainCreateClaimID'\nimport { XChainModifyBridgeTransaction as XChainModifyBridge } from './XChainModifyBridge'\nimport { EscrowCreateTransaction as EscrowCreate } from './EscrowCreate'\nimport { EscrowFinishTransaction as EscrowFinish } from './EscrowFinish'\nimport { EscrowCancelTransaction as EscrowCancel } from './EscrowCancel'\nimport { TicketCreateTransaction as TicketCreate } from './TicketCreate'\nimport { TrustSetTransaction as TrustSet } from './TrustSet'\nimport { UNLModifyTransaction as UNLModify } from './UNLModify'\nimport { ClawbackTransaction as Clawback } from './Clawback'\nimport { VaultCreateTransaction as VaultCreate } from './VaultCreate'\nimport { VaultSetTransaction as VaultSet } from './VaultSet'\nimport { VaultDepositTransaction as VaultDeposit } from './VaultDeposit'\nimport { VaultWithdrawTransaction as VaultWithdraw } from './VaultWithdraw'\nimport { VaultClawbackTransaction as VaultClawback } from './VaultClawback'\nimport { VaultDeleteTransaction as VaultDelete } from './VaultDelete'\nimport { LoanBrokerSetTransaction as LoanBrokerSet } from './LoanBrokerSet'\nimport { LoanBrokerDeleteTransaction as LoanBrokerDelete } from './LoanBrokerDelete'\nimport { LoanBrokerCoverDepositTransaction as LoanBrokerCoverDeposit } from './LoanBrokerCoverDeposit'\nimport { LoanBrokerCoverWithdrawTransaction as LoanBrokerCoverWithdraw } from './LoanBrokerCoverWithdraw'\nimport { LoanBrokerCoverClawbackTransaction as LoanBrokerCoverClawback } from './LoanBrokerCoverClawback'\nimport { LoanSetTransaction as LoanSet } from './LoanSet'\nimport { LoanDeleteTransaction as LoanDelete } from './LoanDelete'\nimport { LoanManageTransaction as LoanManage } from './LoanManage'\nimport { LoanPayTransaction as LoanPay } from './LoanPay'\n\nimport {\n  TransactionAction,\n  TransactionCategory,\n  TransactionMapping,\n} from './types'\n\nexport const transactionTypes: { [key: string]: TransactionMapping } = {\n  AccountDelete,\n  AccountSet,\n  Batch,\n  Clawback,\n  CredentialAccept,\n  CredentialCreate,\n  CredentialDelete,\n  DelegateSet,\n  DIDSet,\n  DepositPreauth,\n  EnableAmendment,\n  MPTokenAuthorize,\n  MPTokenIssuanceCreate,\n  MPTokenIssuanceDestroy,\n  MPTokenIssuanceSet,\n  NFTokenMint,\n  NFTokenCancelOffer,\n  NFTokenBurn,\n  NFTokenCreateOffer,\n  NFTokenAcceptOffer,\n  OfferCancel,\n  OfferCreate,\n  OracleDelete,\n  OracleSet,\n  Payment,\n  PaymentChannelCreate,\n  PaymentChannelClaim,\n  PaymentChannelFund,\n  PermissionedDomainDelete,\n  PermissionedDomainSet,\n  SetFee,\n  SetHook,\n  SetRegularKey,\n  SignerListSet,\n  XChainAccountCreateCommit,\n  XChainAddAccountCreateAttestation,\n  XChainAddClaimAttestation,\n  XChainClaim,\n  XChainCommit,\n  XChainCreateBridge,\n  XChainCreateClaimID,\n  XChainModifyBridge,\n  EscrowCreate,\n  EscrowFinish,\n  EscrowCancel,\n  TicketCreate,\n  AMMCreate,\n  AMMWithdraw,\n  AMMDeposit,\n  AMMBid,\n  AMMVote,\n  AMMDelete,\n  AMMClawback,\n  TrustSet,\n  UNLModify,\n  VaultCreate,\n  VaultSet,\n  VaultDeposit,\n  VaultWithdraw,\n  VaultClawback,\n  VaultDelete,\n  LoanBrokerSet,\n  LoanBrokerDelete,\n  LoanBrokerCoverDeposit,\n  LoanBrokerCoverWithdraw,\n  LoanBrokerCoverClawback,\n  LoanSet,\n  LoanDelete,\n  LoanManage,\n  LoanPay,\n}\n\nexport const getAction = (type: string): TransactionAction =>\n  transactionTypes[type]?.action || TransactionAction.UNKNOWN\n\nexport const getCategory = (type: string): TransactionCategory =>\n  transactionTypes[type]?.category || TransactionCategory.OTHER\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/test/DefaultSimple.test.tsx",
    "content": "import NewEscrowCreate from './mock_data/NewEscrowCreate.json'\nimport SetHook from './mock_data/SetHook.json'\nimport SetHook2 from './mock_data/SetHook2.json'\nimport TokenSwapPropose from './mock_data/TokenSwapPropose.json'\nimport { DefaultSimple } from '../DefaultSimple'\nimport { renderWithProviders } from './createWrapperFactory'\nimport { expectSimpleRowText } from './expectations'\nimport summarizeTransaction from '../../../../../rippled/lib/txSummary'\n\nfunction renderComponent(tx: { tx: any; meta: any }) {\n  // eslint-disable-next-line no-param-reassign -- needed so parsers aren't triggered\n  tx.tx.TransactionType = 'DummyTx'\n  const data = summarizeTransaction(tx, true)\n  return renderWithProviders(<DefaultSimple data={data.details!} />)\n}\n\ndescribe('DefaultSimple', () => {\n  it('renders Simple for basic transaction', () => {\n    const { container } = renderComponent(NewEscrowCreate)\n    expectSimpleRowText(\n      container,\n      'Destination',\n      'rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh',\n    )\n    expect(\n      container.querySelector(`[data-testid=\"Destination\"] a`),\n    ).toBeInTheDocument()\n    expectSimpleRowText(container, 'Amount', '\\uE9001.00 XRP')\n    expectSimpleRowText(container, 'FinishAfter', '736447590')\n  })\n\n  it('renders Simple for more complex transaction', () => {\n    const { container } = renderComponent(SetHook)\n    expect(container.querySelectorAll(`[data-testid=\"group\"]`)).toHaveLength(10)\n    expect(\n      container.querySelectorAll(`[data-testid=\"CreateCode\"]`),\n    ).toHaveLength(10)\n    expect(container.querySelectorAll(`[data-testid=\"Flags\"]`)).toHaveLength(10)\n    expect(\n      container.querySelectorAll(`[data-testid=\"HookApiVersion\"]`),\n    ).toHaveLength(2)\n    expect(\n      container.querySelectorAll(`[data-testid=\"HookNamespace\"]`),\n    ).toHaveLength(2)\n    expect(container.querySelectorAll(`[data-testid=\"HookOn\"]`)).toHaveLength(2)\n\n    expect(\n      container.querySelectorAll(`[data-testid=\"CreateCode\"] .value`)[0],\n    ).toHaveTextContent(\n      '0061736D0100000001420960027F7F017F60037F7F7F017E60037F7F7E017E60027F7F017E60047F' +\n        '7F7F7F017E60017F017E6000017E60057F7F7F7F7F017E60097F7F7F7F7F7F7F7F7F017E02BC02' +\n        '1403656E76025F67000003656E760A6F74786E5F6669656C64000103656E760661636365707400' +\n        '0203656E7608726F6C6C6261636B000203656E760C686F6F6B5F6163636F756E...',\n    )\n    expect(\n      container.querySelectorAll(`[data-testid=\"Flags\"] .value`)[0],\n    ).toHaveTextContent('1')\n    expect(\n      container.querySelectorAll(`[data-testid=\"HookApiVersion\"] .value`)[0],\n    ).toHaveTextContent('0')\n    expect(\n      container.querySelectorAll(`[data-testid=\"HookNamespace\"] .value`)[0],\n    ).toHaveTextContent(\n      '0000000000000000000000000000000000000000000000000000000000000000',\n    )\n    expect(\n      container.querySelectorAll(`[data-testid=\"HookOn\"] .value`)[0],\n    ).toHaveTextContent(\n      'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFFFFFBFFFFF',\n    )\n  })\n\n  it('renders Simple for more complex transaction', () => {\n    const { container } = renderComponent(SetHook2)\n    expect(container.querySelectorAll(`[data-testid=\"group\"]`)).toHaveLength(1)\n    expect(\n      container.querySelectorAll(`[data-testid=\"CreateCode\"]`),\n    ).toHaveLength(1)\n    expect(container.querySelectorAll(`[data-testid=\"Flags\"]`)).toHaveLength(1)\n    expect(\n      container.querySelectorAll(`[data-testid=\"HookApiVersion\"]`),\n    ).toHaveLength(1)\n    expect(\n      container.querySelectorAll(`[data-testid=\"HookNamespace\"]`),\n    ).toHaveLength(1)\n    expect(container.querySelectorAll(`[data-testid=\"HookOn\"]`)).toHaveLength(1)\n    expect(\n      container.querySelectorAll(`[data-testid=\"HookParameters\"]`),\n    ).toHaveLength(1)\n\n    expect(\n      container.querySelectorAll(`[data-testid=\"CreateCode\"] .value`)[0],\n    ).toHaveTextContent(\n      '0061736D01000000011C0460057F7F7F7F7F017E60037F7F7E017E60027F7F017F60017F017E0223' +\n        '0303656E76057472616365000003656E7606616363657074000103656E76025F6700020302010305' +\n        '030100020621057F0141B088040B7F0041A6080B7F004180080B7F0041B088040B7F004180080B07' +\n        '080104686F6F6B00030AC6800001C2800002017F017E230041106B220124...',\n    )\n    expect(\n      container.querySelectorAll(`[data-testid=\"Flags\"] .value`)[0],\n    ).toHaveTextContent('1')\n    expect(\n      container.querySelectorAll(`[data-testid=\"HookApiVersion\"] .value`)[0],\n    ).toHaveTextContent('0')\n    expect(\n      container.querySelectorAll(`[data-testid=\"HookNamespace\"] .value`)[0],\n    ).toHaveTextContent(\n      '4FF9961269BF7630D32E15276569C94470174A5DA79FA567C0F62251AA9A36B9',\n    )\n    expect(\n      container.querySelectorAll(`[data-testid=\"HookOn\"] .value`)[0],\n    ).toHaveTextContent(\n      'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFFFFFBFFFFF',\n    )\n    expect(\n      container.querySelector(\n        `[data-testid=\"HookParameters\"] .subgroup [data-testid=\"HookParameterName\"]`,\n      ),\n    ).toHaveTextContent('HookParameterName: 6E616D6531')\n    expect(\n      container.querySelector(\n        `[data-testid=\"HookParameters\"] .subgroup [data-testid=\"HookParameterValue\"]`,\n      ),\n    ).toHaveTextContent('HookParameterValue: 76616C756531')\n  })\n\n  it('renders Simple for amount', () => {\n    const { container } = renderComponent(TokenSwapPropose)\n    expectSimpleRowText(\n      container,\n      'AccountOther',\n      'rPTScb8m3wq6r3Ys93Ec5at7LYDmWrtndi',\n    )\n    expect(\n      container.querySelector(`[data-testid=\"AccountOther\"] a`),\n    ).toBeInTheDocument()\n    expectSimpleRowText(\n      container,\n      'Amount',\n      '€12.00 EUR.rnz5f1MFcgbVxzYhU5hUKbKquEJHJady5K',\n    )\n    expectSimpleRowText(\n      container,\n      'AmountOther',\n      '$33.00 USD.rnz5f1MFcgbVxzYhU5hUKbKquEJHJady5K',\n    )\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/test/createWrapperFactory.tsx",
    "content": "import { render, RenderResult } from '@testing-library/react'\nimport { ReactElement } from 'react'\nimport { I18nextProvider } from 'react-i18next'\nimport { BrowserRouter } from 'react-router'\nimport { i18n } from 'i18next'\nimport { QueryClientProvider } from 'react-query'\nimport defaultI18nConfig from '../../../../../i18n/testConfig'\nimport summarizeTransaction from '../../../../../rippled/lib/txSummary'\nimport {\n  TransactionDescriptionComponent,\n  TransactionSimpleComponent,\n  TransactionTableDetailComponent,\n} from '../types'\nimport { testQueryClient } from '../../../../test/QueryClient'\nimport SocketContext from '../../../SocketContext'\nimport MockWsClient from '../../../../test/mockWsClient'\n\n/**\n * Renders a component with all necessary providers for testing\n * @param TestComponent - react component to test\n * @param i18nConfig - i18next configuration to use instead of the default which outputs the key as the value\n */\nexport function renderWithProviders(\n  TestComponent: ReactElement,\n  i18nConfig?: i18n,\n  socketMock?: any,\n): RenderResult {\n  const mockSocket = socketMock || new MockWsClient()\n\n  return render(\n    <QueryClientProvider client={testQueryClient}>\n      <I18nextProvider i18n={i18nConfig || defaultI18nConfig}>\n        <BrowserRouter>\n          <SocketContext.Provider value={mockSocket}>\n            {TestComponent}\n          </SocketContext.Provider>\n        </BrowserRouter>\n      </I18nextProvider>\n    </QueryClientProvider>,\n  )\n}\n\nexport function createDescriptionRenderFactory(\n  Description: TransactionDescriptionComponent,\n  i18nConfig?: i18n,\n): (tx: any) => RenderResult {\n  return function renderDescription(tx: any) {\n    return renderWithProviders(<Description data={tx} />, i18nConfig)\n  }\n}\n\nexport function createSimpleRenderFactory(\n  Simple: TransactionSimpleComponent,\n  i18nConfig?: i18n,\n  socketMock?: any,\n): (tx: any) => RenderResult {\n  return function renderSimple(tx: any) {\n    const data = summarizeTransaction(tx, true)\n    const mockSocket = socketMock || new MockWsClient()\n\n    return renderWithProviders(\n      <Simple data={data.details!} />,\n      i18nConfig,\n      mockSocket,\n    )\n  }\n}\n\nexport function createTableDetailRenderFactory(\n  TableDetail: TransactionTableDetailComponent,\n  i18nConfig?: i18n,\n  socketMock?: any,\n): (tx: any) => RenderResult {\n  return function renderTableDetail(tx: any) {\n    const data = summarizeTransaction(tx, true)\n    const mockSocket = socketMock || new MockWsClient()\n\n    return renderWithProviders(\n      <TableDetail instructions={data.details!.instructions} />,\n      i18nConfig,\n      mockSocket,\n    )\n  }\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/test/expectations.ts",
    "content": "import { RenderResult } from '@testing-library/react'\n\n// Helper to extract container from RenderResult or use directly if already an HTMLElement/Element\nconst getContainer = (input: HTMLElement | Element | RenderResult): Element => {\n  // Check for RenderResult\n  if (\n    'container' in input &&\n    (input as RenderResult).container instanceof HTMLElement\n  ) {\n    return (input as RenderResult).container\n  }\n  return input as Element\n}\n\n// For class-based selectors (e.g., '.channel'), the class is on .value element\n// For data-testid selectors, the testid is on the .row element\nconst isClassSelector = (selector: string) => selector.indexOf('.') === 0\n\n// Find value element by class - handles cases where .value has multiple classes\nconst findValueByClass = (\n  container: Element,\n  className: string,\n): Element | null => {\n  // className is like '.channel' - we look for .value elements that also have that class\n  const classWithoutDot = className.slice(1)\n  const valueElements = container.querySelectorAll('.value')\n  for (const el of Array.from(valueElements)) {\n    if (el.classList.contains(classWithoutDot)) {\n      return el\n    }\n  }\n  return null\n}\n\nexport const expectSimpleRowLabel = (\n  input: HTMLElement | Element | RenderResult,\n  key: string,\n  text: string,\n) => {\n  const container = getContainer(input)\n  if (isClassSelector(key)) {\n    // Class is on .value, find the parent .row and then .label\n    const valueElement = findValueByClass(container, key)\n    const rowElement = valueElement?.closest('.row')\n    expect(rowElement?.querySelector('.label')).toHaveTextContent(text)\n  } else {\n    expect(\n      container.querySelector(`[data-testid=\"${key}\"] .label`),\n    ).toHaveTextContent(text)\n  }\n}\n\nexport const expectSimpleRowText = (\n  input: HTMLElement | Element | RenderResult,\n  key: string,\n  text: string,\n) => {\n  const container = getContainer(input)\n  if (isClassSelector(key)) {\n    // Class is on .value element itself\n    expect(findValueByClass(container, key)).toHaveTextContent(text)\n  } else {\n    expect(\n      container.querySelector(`[data-testid=\"${key}\"] .value`),\n    ).toHaveTextContent(text)\n  }\n}\n\nexport const expectSimpleRowNotToExist = (\n  input: HTMLElement | Element | RenderResult,\n  key: string,\n) => {\n  const container = getContainer(input)\n  if (isClassSelector(key)) {\n    expect(findValueByClass(container, key)).not.toBeInTheDocument()\n  } else {\n    expect(\n      container.querySelector(`[data-testid=\"${key}\"]`),\n    ).not.toBeInTheDocument()\n  }\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/test/index.ts",
    "content": "export * from './createWrapperFactory'\nexport * from './expectations'\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/test/mock_data/NewEscrowCreate.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh\",\n    \"Amount\": \"1000000\",\n    \"Destination\": \"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh\",\n    \"Fee\": \"10\",\n    \"FinishAfter\": 736447590,\n    \"Flags\": 2147483648,\n    \"Sequence\": 4,\n    \"SigningPubKey\": \"0330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD020\",\n    \"TransactionType\": \"NewEscrowCreate\",\n    \"TxnSignature\": \"30440220273DAAA2F1E9C24649D26A0833F452B9D408AF86565113B878711A4F99ED62250220472CF6BE6A43AB694856A92022F8949F7CD0527E0531C3CEFBA8134059E536FA\",\n    \"date\": 1683122920000\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh\",\n            \"Balance\": \"99999999995999960\",\n            \"Flags\": 0,\n            \"OwnerCount\": 4,\n            \"Sequence\": 5\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"2B6AC232AA4C4BE41BF49D2459FA4A0347E1B543A4C92FCEE0821C0201E2E9A8\",\n          \"PreviousFields\": {\n            \"Balance\": \"99999999996999970\",\n            \"OwnerCount\": 3,\n            \"Sequence\": 4\n          },\n          \"PreviousTxnID\": \"AA6740AAC85C442653E80FE637B3F27EFEF8CE626014109C7502033D8C6AE25A\",\n          \"PreviousTxnLgrSeq\": 3\n        }\n      },\n      {\n        \"CreatedNode\": {\n          \"LedgerEntryType\": \"Escrow\",\n          \"LedgerIndex\": \"D052EAF42C8EDCC23CE0EF4A08C5164ED17ECFA1E66C623674553EFAD94B5E63\",\n          \"NewFields\": {\n            \"Account\": \"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh\",\n            \"Amount\": \"1000000\",\n            \"Destination\": \"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh\"\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh\",\n            \"RootIndex\": \"D8120FC732737A2CF2E9968FDF3797A43B457F2A81AA06D2653171A1EA635204\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"D8120FC732737A2CF2E9968FDF3797A43B457F2A81AA06D2653171A1EA635204\"\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tesSUCCESS\"\n  },\n  \"hash\": \"FE6A9F2D5949A913BA7DD8C69EA5CDF5D2B6A28976B4DC9982D1515CCFCC57C3\",\n  \"ledger_index\": 4,\n  \"date\": 1683122920000\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/test/mock_data/SetHook.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh\",\n    \"Fee\": \"7644020\",\n    \"Flags\": 0,\n    \"Hooks\": [\n      {\n        \"Hook\": {\n          \"CreateCode\": \"0061736D0100000001420960027F7F017F60037F7F7F017E60037F7F7E017E60027F7F017E60047F7F7F7F017E60017F017E6000017E60057F7F7F7F7F017E60097F7F7F7F7F7F7F7F7F017E02BC021403656E76025F67000003656E760A6F74786E5F6669656C64000103656E7606616363657074000203656E7608726F6C6C6261636B000203656E760C686F6F6B5F6163636F756E74000303656E76057374617465000403656E760974726163655F6E756D000203656E760C6574786E5F72657365727665000503656E760973746174655F736574000403656E760A6C65646765725F736571000603656E760C6574786E5F64657461696C73000303656E760D6574786E5F6665655F62617365000303656E7604656D6974000403656E76096F74786E5F736C6F74000503656E760D736C6F745F7375626669656C64000103656E760D736C6F745F7375626172726179000103656E7604736C6F74000103656E76057472616365000703656E760B7574696C5F6B65796C6574000803656E7608736C6F745F7365740001030201050503010002063F0A7F0141F08A040B7F0041EC0A0B7F004180080B7F0041F08A040B7F004180080B7F0041B0090B7F0041D0090B7F0041A0090B7F004180080B7F0041F0090B07080104686F6F6B00140AB6D20001B2D20002047F017E230041B0186B22012400200120003602A41841012200200010001A2001200141A2186A410241828004100137039818200120012D00A31820012D00A2184110746A3602941820012802941841E30047044041002200200042CC0010021A0B41BC094114418180201001421452044041002200200042CF0010031A0B20014180186A411410041A200141002200200041D009412010053703F81741900A410C20012903F81710061A20012903F817427B510440410510071A200141053A00F717200141F7176A410141D009412010085004404100200042E20010031A0B41D00941FF013A000041A009410841D009412010085004404100200042E60010031A0B41D00941003A0000200141003602F017034041E980808078410610001A024020012802F01741054F0D0041EF0920012802F01741016A3A000020012802F017410574418C086A411441D00941201008421452044041002200200042F00010031A0B41EF09410120012802F0174105744180086A41201008420152044041002200200042F40010031A0B2001200141F0156A22003602EC1520014280C0F4C198AF0B3703C8152001410022023602C415200120023602C015200110093E02BC15200141D0156A411410041A200141003A00BB1520012802EC1541123A000020012802EC1520012D00BB154108763A000120012802EC1520012D00BB153A0002200120012802EC1541036A3602EC1520014180808080783602B415200141023A00B31520012802EC1520012D00B315410F7141206A3A000020012802EC1520012802B4154118763A000120012802EC1520012802B4154110763A000220012802EC1520012802B4154108763A000320012802EC1520012802B4153A0004200120012802EC1541056A3602EC15200120012802C0153602AC152001410322033A00AB1520012802EC1520012D00AB15410F7141206A3A000020012802EC1520012802AC154118763A000120012802EC1520012802AC154110763A000220012802EC1520012802AC154108763A000320012802EC1520012802AC153A0004200120012802EC1541056A3602EC15200120023602A415200141043A00A31520012802EC1520012D00A315410F7141206A3A000020012802EC1520012802A4154118763A000120012802EC1520012802A4154110763A000220012802EC1520012802A4154108763A000320012802EC1520012802A4153A0004200120012802EC1541056A3602EC15200120012802C41536029C152001410E3A009B1520012802EC1520012D009B15410F7141206A3A000020012802EC15200128029C154118763A000120012802EC15200128029C154110763A000220012802EC15200128029C154108763A000320012802EC15200128029C153A0004200120012802EC1541056A3602EC15200120012802BC1541016A360294152001411A3A00931520012802EC15412022023A000020012802EC1520012D0093153A000120012802EC152001280294154118763A000220012802EC152001280294154110763A000320012802EC152001280294154108763A000420012802EC152001280294153A0005200120012802EC1541066A3602EC15200120012802BC1541056A36028C152001411B3A008B1520012802EC1520023A000020012802EC1520012D008B153A000120012802EC15200128028C154118763A000220012802EC15200128028C154110763A000320012802EC15200128028C154108763A000420012802EC15200128028C153A0005200120012802EC1541066A3602EC152001410122023A008A15200120012903C8153703801520012802EC1520012D008A15410F7141E0006A3A000020012802EC15200129038015423888423F8342407D3C000120012802EC1520012903801542308842FF01833C000220012802EC1520012903801542288842FF01833C000320012802EC1520012903801542208842FF01833C000420012802EC1520012903801542188842FF01833C000520012802EC1520012903801542108842FF01833C000620012802EC1520012903801542088842FF01833C000720012802EC1520012903801542FF01833C0008200120012802EC1541096A3602EC15200120012802EC153602FC142001410822043A00FB14200142003703F01420012802EC1520012D00FB14410F7141E0006A3A000020012802EC1520012903F014423888423F8342407D3C000120012802EC1520012903F01442308842FF01833C000220012802EC1520012903F01442288842FF01833C000320012802EC1520012903F01442208842FF01833C000420012802EC1520012903F01442188842FF01833C000520012802EC1520012903F01442108842FF01833C000620012802EC1520012903F01442088842FF01833C000720012802EC1520012903F01442FF01833C0008200120012802EC1541096A3602EC1520012802EC1541F3003A000020012802EC1541213A000120012802EC15200537030220012802EC15200537030A20012802EC15200537031220012802EC152005370319200120012802EC1541236A3602EC15200120023A00EF1420012802EC1520012D00EF144180016A3A000020012802EC15411422023A000120012802EC1520012903D01537030220012802EC1520012903D81537030A20012802EC1520012802E015360212200120012802EC1541166A3602EC15200120033A00EE1420012802EC1520012D00EE144180016A3A000020012802EC1520023A000120012802EC1520012802F01741057429038C0837030220012802EC1520012802F0174105742903940837030A20012802EC1520012802F01741057428029C08360212200120012802EC1541166A3602EC15200120012802EC1541F8012202100A3703E014200120002002100B3703D814200120043A00D714200120012903D8143703C81420012802FC1420012D00D714410F7141E0006A3A000020012802FC1420012903C814423888423F8342407D3C000120012802FC1420012903C81442308842FF01833C000220012802FC1420012903C81442288842FF01833C000320012802FC1420012903C81442208842FF01833C000420012802FC1420012903C81442188842FF01833C000520012802FC1420012903C81442108842FF01833C000620012802FC1420012903C81442088842FF01833C000720012802FC1420012903C81442FF01833C0008200120012802FC1441096A3602FC142001200141A0146A412020002002100C37039814200520012903981459044041002200200042FD0010031A0B419D0A410B20012903981410061A200120012802F01741016A3602F0170C010B0B41002200200042820110021A0B024020012903801841BC09290300520D0020012903881841C409290300520D0020012802901841CC09280200470D004100200042890110021A0B20014100200041B009412010053703901420012903901442005304404100200042920110031A0B4101100D42015204404100200042960110031A0B41014193803C4102100E42025204404100200042970110031A0B4102220041002000100F420252044041002200200042990110031A0B41024198801C4103100E4203520440410022002000429A0110031A0B41024199801C4104100E4204520440410022002000429B0110031A0B2001200141900C6A2200418008410410103703880C41A90A41052202200020012903880CA7410110111A20014100220020004103101042FF01833703800C41AE0A200220012903800C10061A024020012903800C420159044020012903800C4219570D010B4100200042A40110031A0B2001200141DC0B6A3602CC0B2001027F410820012903800C4201510D001A4120411420012903800C420259047F20012903800C4205570520000B4101711B0B3A00CB0B41B00920012903800C3C000020012802CC0B41016B20012D00CB0B41016A4104101020012D00CB0B41016AAC5204404100200042B10110031A0B20012802CC0B41016B41003A00002001200141A00B6A20012D00CB0B41B00922004120220210053703980B20012802CC0B20012D00CB0B20002002100820012D00CB0BAD52044041002200200042BA0110031A0B024020012903980B20012D00CB0BAD520D0020012903A00B20012802CC0B290300520D0020012903A80B20012802CC0B290308520D0020012903B00B20012802CC0B290310520D0020012903B80B20012802CC0B290318520D0020012903C00B20012802CC0B290320520D0020012903C80B20012802CC0B290328520D0020012903D00B20012802CC0B290330520D0020012903D80B20012802CC0B290338520D0041002200200042BF0110021A0B20012903980B4200550440200141003A00970B200120012903800C3C00BF0B0240200141970B6A4101200141A00B6A41201005500D0020012D00970B450D00200120012D00970B41016B3A00970B200141970B6A4101200141A00B6A4120100850044041002200200042CF0110031A0B0B0B200141003A00960B200120012802CC0B2D001F3A00950B20012802CC0B20012903800C3C001F200141960B6A4101220020012802CC0B412010051A200120012D00960B20006A3A00960B200141960B6A410120012802CC0B4120100850044041002200200042DB0110031A0B20012802CC0B20012D00950B3A001F2001027F410020012802CC0B29030041F009290300520D001A410020012802CC0B29030841F809290300520D001A410020012802CC0B29031041800A290300520D001A410020012802CC0B29031841880A290300520D001A410020012802CC0B29032041900A290300520D001A410020012802CC0B29032841980A290300520D001A410020012802CC0B29033041A00A290300520D001A20012802CC0B29033841A80A290300510B4101713602900B41B40A410F20012802900BAC10061A41C40A4105220020012D00960BAD10061A41900A410C20012903F81710061A41AE0A200020012903800C10061A024020012903F81720012D00960BAD52044020012903800C4205570D0120012D00960BB720012903F817B9449A9999999999E93FA266450D010B41CA0A411141DC0A4110410010111A024020012903800C420151044041D00941FF013A000020012802CC0B410841D0094120100850044041002200200042F40110031A0B0C010B024020012903800C4205570440200120012903800C42027D3C008F0B200141E00A6A4122410120014180186A411441002200200020002000101242225204404100200042FD0110031A0B200141E00A6A41224105101342055204404100200042FE0110031A0B4105418B803C4106100E42065204404100200042810210031A0B410620012D008F0B4107100F42075104404107419F80144108100E42085204404100200042890210031A0B200141C00A6A412041081010422052044041002000428A0210031A0B024020012903C00A20012802CC0B290300520D0020012903C80A20012802CC0B290308520D0020012903D00A20012802CC0B290310520D0020012903D80A20012802CC0B290318520D0020012903E00A20012802CC0B290320520D0020012903E80A20012802CC0B290328520D0020012903F00A20012802CC0B290330520D0020012903F80A20012802CC0B290338520D0041002000428E0210021A0B0B200141E00A6A4122411820012802CC0B41204100200020002000101242225204404100200042920210031A0B200141E00A6A41224109101342095204404100200042950210031A0B410110071A200141A00A6A21022001027F417F20012802900B0D001A20012802CC0B0B3602BC0A2002027F20012D008F0B45044020012802BC0A0C010B41000B360200200241046A2200027F20012D008F0B410146044020012802BC0A0C010B41000B360200200041046A2200027F20012D008F0B410246044020012802BC0A0C010B41000B360200200041046A027F20012D008F0B410346044020012802BC0A0C010B41000B36020020014100220036029C022001200141A0026A220236029802200110093E02FC0120014180026A411410041A200141163A00FB0120012802980241123A000020012802980220012D00FB014108763A000120012802980220012D00FB013A0002200120012802980241036A3602980220014180808080783602F401200141023A00F30120012802980220012D00F301410F7141206A3A000020012802980220012802F4014118763A000120012802980220012802F4014110763A000220012802980220012802F4014108763A000320012802980220012802F4013A0004200120012802980241056A36029802200120003602EC01200141043A00EB0120012802980220012D00EB01410F7141206A3A000020012802980220012802EC014118763A000120012802980220012802EC014110763A000220012802980220012802EC014108763A000320012802980220012802EC013A0004200120012802980241056A36029802200120012802FC0141016A3602E4012001411A3A00E301200128029802412022033A000020012802980220012D00E3013A000120012802980220012802E4014118763A000220012802980220012802E4014110763A000320012802980220012802E4014108763A000420012802980220012802E4013A0005200120012802980241066A36029802200120012802FC0141056A3602DC012001411B3A00DB0120012802980220033A000020012802980220012D00DB013A000120012802980220012802DC014118763A000220012802980220012802DC014110763A000320012802980220012802DC014108763A000420012802980220012802DC013A0005200120012802980241066A3602980220012001280298023602D401200141083A00D301200142003703C80120012802980220012D00D301410F7141E0006A3A000020012802980220012903C801423888423F8342407D3C000120012802980220012903C80142308842FF01833C000220012802980220012903C80142288842FF01833C000320012802980220012903C80142208842FF01833C000420012802980220012903C80142188842FF01833C000520012802980220012903C80142108842FF01833C000620012802980220012903C80142088842FF01833C000720012802980220012903C80142FF01833C0008200120012802980241096A3602980220012802980241F3003A000020012802980241213A00012001280298022005370302200128029802200537030A20012802980220053703122001280298022005370319200120012802980241236A36029802200141013A00C70120012802980220012D00C7014180016A3A000020012802980241143A000120012802980220012903800237030220012802980220012903880237030A200128029802200128029002360212200120012802980241166A36029802200141800820012802980220026B6B3602C001200120012802980220012802C001100A3703B801200120012802980220012903B801A76A360298022001200128029802220241016A36029802200241FB013A0000200120012802A00A3602B4012001200128029802220241016A36029802200241EE013A0000200020012802B4014704402001200128029802220041016A36029802200041223A00002001200128029802220041016A360298022000410022003A00002001200128029802220241016A36029802200220003A00002001200128029802220241016A36029802200220003A00002001200128029802220041016A36029802200041013A0000024020012802B401417F4604402001200128029802220041016A36029802200041FB003A00002001200128029802220041016A36029802200041003A00000C010B2001200128029802220041016A360298022000411F3A0000200120012802B401220041016A3602B40120002D000021002001200128029802220241016A36029802200220003A0000200120012802B401220041016A3602B40120002D000021002001200128029802220241016A36029802200220003A0000200120012802B401220041016A3602B40120002D000021002001200128029802220241016A36029802200220003A0000200120012802B401220041016A3602B40120002D000021002001200128029802220241016A36029802200220003A0000200120012802B401220041016A3602B40120002D000021002001200128029802220241016A36029802200220003A0000200120012802B401220041016A3602B40120002D000021002001200128029802220241016A36029802200220003A0000200120012802B401220041016A3602B40120002D000021002001200128029802220241016A36029802200220003A0000200120012802B401220041016A3602B40120002D000021002001200128029802220241016A36029802200220003A0000200120012802B401220041016A3602B40120002D000021002001200128029802220241016A36029802200220003A0000200120012802B401220041016A3602B40120002D000021002001200128029802220241016A36029802200220003A0000200120012802B401220041016A3602B40120002D000021002001200128029802220241016A36029802200220003A0000200120012802B401220041016A3602B40120002D000021002001200128029802220241016A36029802200220003A0000200120012802B401220041016A3602B40120002D000021002001200128029802220241016A36029802200220003A0000200120012802B401220041016A3602B40120002D000021002001200128029802220241016A36029802200220003A0000200120012802B401220041016A3602B40120002D000021002001200128029802220241016A36029802200220003A0000200120012802B401220041016A3602B40120002D000021002001200128029802220241016A36029802200220003A00000B0B2001200128029802220041016A36029802200041E1013A0000200120012802A40A3602B0012001200128029802220041016A36029802200041EE013A000020012802B00104402001200128029802220041016A36029802200041223A00002001200128029802220041016A360298022000410022003A00002001200128029802220241016A36029802200220003A00002001200128029802220241016A36029802200220003A00002001200128029802220041016A36029802200041013A0000024020012802B001417F4604402001200128029802220041016A36029802200041FB003A00002001200128029802220041016A36029802200041003A00000C010B2001200128029802220041016A360298022000411F3A0000200120012802B001220041016A3602B00120002D000021002001200128029802220241016A36029802200220003A0000200120012802B001220041016A3602B00120002D000021002001200128029802220241016A36029802200220003A0000200120012802B001220041016A3602B00120002D000021002001200128029802220241016A36029802200220003A0000200120012802B001220041016A3602B00120002D000021002001200128029802220241016A36029802200220003A0000200120012802B001220041016A3602B00120002D000021002001200128029802220241016A36029802200220003A0000200120012802B001220041016A3602B00120002D000021002001200128029802220241016A36029802200220003A0000200120012802B001220041016A3602B00120002D000021002001200128029802220241016A36029802200220003A0000200120012802B001220041016A3602B00120002D000021002001200128029802220241016A36029802200220003A0000200120012802B001220041016A3602B00120002D000021002001200128029802220241016A36029802200220003A0000200120012802B001220041016A3602B00120002D000021002001200128029802220241016A36029802200220003A0000200120012802B001220041016A3602B00120002D000021002001200128029802220241016A36029802200220003A0000200120012802B001220041016A3602B00120002D000021002001200128029802220241016A36029802200220003A0000200120012802B001220041016A3602B00120002D000021002001200128029802220241016A36029802200220003A0000200120012802B001220041016A3602B00120002D000021002001200128029802220241016A36029802200220003A0000200120012802B001220041016A3602B00120002D000021002001200128029802220241016A36029802200220003A0000200120012802B001220041016A3602B00120002D000021002001200128029802220241016A36029802200220003A00000B0B2001200128029802220041016A36029802200041E1013A0000200120012802A80A3602AC012001200128029802220041016A36029802200041EE013A000020012802AC0104402001200128029802220041016A36029802200041223A00002001200128029802220041016A360298022000410022003A00002001200128029802220241016A36029802200220003A00002001200128029802220241016A36029802200220003A00002001200128029802220041016A36029802200041013A0000024020012802AC01417F4604402001200128029802220041016A36029802200041FB003A00002001200128029802220041016A36029802200041003A00000C010B2001200128029802220041016A360298022000411F3A0000200120012802AC01220041016A3602AC0120002D000021002001200128029802220241016A36029802200220003A0000200120012802AC01220041016A3602AC0120002D000021002001200128029802220241016A36029802200220003A0000200120012802AC01220041016A3602AC0120002D000021002001200128029802220241016A36029802200220003A0000200120012802AC01220041016A3602AC0120002D000021002001200128029802220241016A36029802200220003A0000200120012802AC01220041016A3602AC0120002D000021002001200128029802220241016A36029802200220003A0000200120012802AC01220041016A3602AC0120002D000021002001200128029802220241016A36029802200220003A0000200120012802AC01220041016A3602AC0120002D000021002001200128029802220241016A36029802200220003A0000200120012802AC01220041016A3602AC0120002D000021002001200128029802220241016A36029802200220003A0000200120012802AC01220041016A3602AC0120002D000021002001200128029802220241016A36029802200220003A0000200120012802AC01220041016A3602AC0120002D000021002001200128029802220241016A36029802200220003A0000200120012802AC01220041016A3602AC0120002D000021002001200128029802220241016A36029802200220003A0000200120012802AC01220041016A3602AC0120002D000021002001200128029802220241016A36029802200220003A0000200120012802AC01220041016A3602AC0120002D000021002001200128029802220241016A36029802200220003A0000200120012802AC01220041016A3602AC0120002D000021002001200128029802220241016A36029802200220003A0000200120012802AC01220041016A3602AC0120002D000021002001200128029802220241016A36029802200220003A0000200120012802AC01220041016A3602AC0120002D000021002001200128029802220241016A36029802200220003A00000B0B2001200128029802220041016A36029802200041E1013A0000200120012802AC0A3602A8012001200128029802220041016A36029802200041EE013A000020012802A80104402001200128029802220041016A36029802200041223A00002001200128029802220041016A360298022000410022003A00002001200128029802220241016A36029802200220003A00002001200128029802220241016A36029802200220003A00002001200128029802220041016A36029802200041013A0000024020012802A801417F4604402001200128029802220041016A36029802200041FB003A00002001200128029802220041016A36029802200041003A00000C010B2001200128029802220041016A360298022000411F3A0000200120012802A801220041016A3602A80120002D000021002001200128029802220241016A36029802200220003A0000200120012802A801220041016A3602A80120002D000021002001200128029802220241016A36029802200220003A0000200120012802A801220041016A3602A80120002D000021002001200128029802220241016A36029802200220003A0000200120012802A801220041016A3602A80120002D000021002001200128029802220241016A36029802200220003A0000200120012802A801220041016A3602A80120002D000021002001200128029802220241016A36029802200220003A0000200120012802A801220041016A3602A80120002D000021002001200128029802220241016A36029802200220003A0000200120012802A801220041016A3602A80120002D000021002001200128029802220241016A36029802200220003A0000200120012802A801220041016A3602A80120002D000021002001200128029802220241016A36029802200220003A0000200120012802A801220041016A3602A80120002D000021002001200128029802220241016A36029802200220003A0000200120012802A801220041016A3602A80120002D000021002001200128029802220241016A36029802200220003A0000200120012802A801220041016A3602A80120002D000021002001200128029802220241016A36029802200220003A0000200120012802A801220041016A3602A80120002D000021002001200128029802220241016A36029802200220003A0000200120012802A801220041016A3602A80120002D000021002001200128029802220241016A36029802200220003A0000200120012802A801220041016A3602A80120002D000021002001200128029802220241016A36029802200220003A0000200120012802A801220041016A3602A80120002D000021002001200128029802220241016A36029802200220003A0000200120012802A801220041016A3602A80120002D000021002001200128029802220241016A36029802200220003A00000B0B2001200128029802220041016A36029802200041E1013A00002001200128029802220041016A36029802200041F1013A00002001200128029802200141A0026A22006B36029C0220012000200128029C02100B3703A001200141083A009F01200120012903A0013703900120012802D40120012D009F01410F7141E0006A3A000020012802D401200129039001423888423F8342407D3C000120012802D40120012903900142308842FF01833C000220012802D40120012903900142288842FF01833C000320012802D40120012903900142208842FF01833C000420012802D40120012903900142188842FF01833C000520012802D40120012903900142108842FF01833C000620012802D40120012903900142088842FF01833C000720012802D40120012903900142FF01833C0008200120012802D40141096A3602D4012001200141F0006A41202000200128029C02100C370368419D0A410B200129036810061A0C010B41EF0920012903800C42067D3C00002001200141CC006A411441D0094120100542145136023C02400240200128023C450D0020012802900B0D000C010B20012903F817420057044041002200200042C20210031A0B0240200128023C0440200120012903F81742017D3703F8170C010B200120012903F81742017C3703F8170B200141F8176A410141F00941201008420152044041002200200042C90210031A0B0B200128023C044020014101360238034041CF82808078411A10001A0240200128023841194A0D00200120012802383A0040200141106A41202200200141406B200010054220510440200141003A000F2001410F6A4101200141106A412010054201510440024020012D000F41014D0440410022002000200141106A41201008504504404100200042DA0210031A0B0C010B200120012D000F41016B3A000F2001410F6A4101200141106A41201008420152044041002200200042DF0210031A0B0B0B410022002000200141406B41201008504504404100200042E40210031A0B0B2001200128023841016A3602380C010B0B0B20012802900B45044041EF0920012903800C42067D3C000020012802CC0B411441D00941201008421452044041002200200042EE0210031A0B41EF094101200141D00B6A41201008421452044041002200200042F10210031A0B0B0B0B0B41002200200042F80210021A20012903A8182105200141B0186A240020050B0BEC010600418C080B14C2F107E6E864D3906D0A088446FDDF8A7B2F569C0041AC080B149EEA73F5F0627E69397EC72E9A3C7804C0F2BF690041CC080B14C3E8E29AB62847275CED36EBF4E928DC25A07F240041EC080B14B7DA762DB9902E85199666B2E6C3009C5E27576900418C090B1CD70EF4D5021C7C646A98E84F60FED364A004453253CBD7A6250D78800041900A0B5B6D656D6265725F636F756E7400656D69745F726573756C740064756D7000746F70696300746F7069635F646174615F7A65726F00766F7465730022416374696F6E696E6720766F7465732200416374696F6E696E6720766F746573\",\n          \"Flags\": 1,\n          \"HookApiVersion\": 0,\n          \"HookNamespace\": \"0000000000000000000000000000000000000000000000000000000000000000\",\n          \"HookOn\": \"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFFFFFBFFFFF\"\n        }\n      },\n      {\n        \"Hook\": {\n          \"CreateCode\": \"0061736D0100000001530C60017F017E60027F7F017F60037F7F7F017E60037F7F7E017E60027F7F017E60097F7F7F7F7F7F7F7F7F017E6000017E60047F7F7F7F017E60037E7E7F017E60027F7E017E60027E7E017E60037E7F7F017E02FF021703656E760C6574786E5F72657365727665000003656E76025F67000103656E760A6F74786E5F6669656C64000203656E7606616363657074000303656E760C686F6F6B5F6163636F756E74000403656E760B7574696C5F6B65796C6574000503656E7608736C6F745F736574000203656E760D736C6F745F7375626669656C64000203656E7604736C6F74000203656E76106C65646765725F6C6173745F74696D65000603656E7608726F6C6C6261636B000303656E760974726163655F6E756D000303656E760A6C65646765725F736571000603656E76057374617465000703656E760D666C6F61745F636F6D70617265000803656E7609666C6F61745F6F6E65000603656E7609666C6F61745F736574000903656E760C666C6F61745F646976696465000A03656E760E666C6F61745F6D756C7469706C79000A03656E7609666C6F61745F696E74000B03656E760C6574786E5F64657461696C73000403656E760D6574786E5F6665655F62617365000403656E7604656D697400070302010005030100020621057F0141A08A040B7F00419D0A0B7F004180080B7F0041A08A040B7F004180080B07080104686F6F6B00170AF0980001EC980002047F017E230041A0066B2201240020012000360294064101220010001A2000200010011A200120014180066A41104182800410023703F805200120012D00810620012D0080064110746A3602F40520012802F40541E200470440418008411E421810031A0B200141E0056A411422004181802010021A200141C0056A200010041A024020012903C00520012903E005520D0020012903C80520012903E805520D0020012802D00520012802F005470D00419E08411D422210031A0B20014190056A2202412222034103200141E0056A41144100220020002000200010051A200220034101220010061A200041E4800C41021007420252044041BB084121422D10031A0B410141E38008410310071A200041E48008410410071A200041828018410510071A200041E280084106220010071A20014100220220022000100837038805200110092001290388057D37038005200129038005423C530440200141E0046A220041166A41002901F608370100200041106A20022903F008370300200041086A20022903E808370300200020022903E0083703002001423C2001290380057D37038005200120012D00EE04AD20012903800542C0843D7F420A817C3C00EE04200120012D00EF04AD20012903800542A08D067F420A817C3C00EF04200120012D00F004AD2001290380054290CE007F420A817C3C00F004200120012D00F104AD20012903800542E8077F420A817C3C00F104200120012D00F204AD20012903800542E4007F420A817C3C00F204200120012D00F304AD200129038005420A7F420A817C3C00F304200120012D00F404AD200129038005420A817C3C00F4042000411E42C600100A1A0B2001410022002000410210083703D804200120002000410310083703D0042001200020004104220210083703C8042001200020004105220010083703C00441FE08410B20012903D804100B1A418A09200020012903D004100B1A419009200220012903C804100B1A024020012903D004420055044020012903C8044200550D010B419509411B42D500100A1A0B2001100C3703B804200120012903B80420012903D0047D3703B00420012903B0044200570440419509411B42DD00100A1A0B2001100C20012903C8047D3703A804200120012903C00442FFFFFFFFFFFFFFFF1F833703C004200120012903C00442C0843D7F3703C00441B009410320012903C004100B1A41FE08410B20012903D804100B1A024020012903C0044200570D0020012903A8044200570D00200120012903D80420012903C00420012903A8047E7C3703D8040B41FE08410B20012903D804100B1A200141FF013A008004200141002200200020014180046A4120100D3703F8030240024020012903F8034200570D0020012903F80342004102100E2005520D0020012903F803100F4104100E500D010B200142D5AA81AAE2F4F5E5D3003703F8030B20012903F8034200570440419509411B42FB00100A1A0B2001410020012903D80410103703F00320012903F0034200570440419509411B42FF00100A1A0B2001410020012903B00410103703E80320012903E8034200570440419509411B428201100A1A0B200120012903F00320012903E80310113703E003200120012903F80320012903E00310123703E00341B409410A20012903E003100B1A200120012903E0034106410010133703D80341BF09410C20012903D803100B1A2001200141E0016A22023602DC01200120012903D8033703B801200120003602B401200120003602B0012001100C3E02AC01200141C0016A411410041A200141003A00AB0120012802DC0141123A000020012802DC0120012D00AB014108763A000120012802DC0120012D00AB013A0002200120012802DC0141036A3602DC0120014180808080783602A401200141023A00A30120012802DC0120012D00A301410F7141206A3A000020012802DC0120012802A4014118763A000120012802DC0120012802A4014110763A000220012802DC0120012802A4014108763A000320012802DC0120012802A4013A0004200120012802DC0141056A3602DC01200120012802B00136029C012001410322033A009B0120012802DC0120012D009B01410F7141206A3A000020012802DC01200128029C014118763A000120012802DC01200128029C014110763A000220012802DC01200128029C014108763A000320012802DC01200128029C013A0004200120012802DC0141056A3602DC012001200036029401200141043A00930120012802DC0120012D009301410F7141206A3A000020012802DC012001280294014118763A000120012802DC012001280294014110763A000220012802DC012001280294014108763A000320012802DC012001280294013A0004200120012802DC0141056A3602DC01200120012802B40136028C012001410E3A008B0120012802DC0120012D008B01410F7141206A3A000020012802DC01200128028C014118763A000120012802DC01200128028C014110763A000220012802DC01200128028C014108763A000320012802DC01200128028C013A0004200120012802DC0141056A3602DC01200120012802AC0141016A360284012001411A3A00830120012802DC01412022003A000020012802DC0120012D0083013A000120012802DC012001280284014118763A000220012802DC012001280284014110763A000320012802DC012001280284014108763A000420012802DC012001280284013A0005200120012802DC0141066A3602DC01200120012802AC0141056A36027C2001411B3A007B20012802DC0120003A000020012802DC0120012D007B3A000120012802DC01200128027C4118763A000220012802DC01200128027C4110763A000320012802DC01200128027C4108763A000420012802DC01200128027C3A0005200120012802DC0141066A3602DC012001410122003A007A200120012903B80137037020012802DC0120012D007A410F7141E0006A3A000020012802DC012001290370423888423F8342407D3C000120012802DC01200129037042308842FF01833C000220012802DC01200129037042288842FF01833C000320012802DC01200129037042208842FF01833C000420012802DC01200129037042188842FF01833C000520012802DC01200129037042108842FF01833C000620012802DC01200129037042088842FF01833C000720012802DC01200129037042FF01833C0008200120012802DC0141096A3602DC01200120012802DC0136026C2001410822043A006B2001420037036020012802DC0120012D006B410F7141E0006A3A000020012802DC012001290360423888423F8342407D3C000120012802DC01200129036042308842FF01833C000220012802DC01200129036042288842FF01833C000320012802DC01200129036042208842FF01833C000420012802DC01200129036042188842FF01833C000520012802DC01200129036042108842FF01833C000620012802DC01200129036042088842FF01833C000720012802DC01200129036042FF01833C0008200120012802DC0141096A3602DC0120012802DC0141F3003A000020012802DC0141213A000120012802DC01200537030220012802DC01200537030A20012802DC01200537031220012802DC012005370319200120012802DC0141236A3602DC01200120003A005F20012802DC0120012D005F4180016A3A000020012802DC01411422003A000120012802DC0120012903C00137030220012802DC0120012903C80137030A20012802DC0120012802D001360212200120012802DC0141166A3602DC01200120033A005E20012802DC0120012D005E4180016A3A000020012802DC0120003A000120012802DC0120012903E00537030220012802DC0120012903E80537030A20012802DC0120012802F005360212200120012802DC0141166A3602DC01200120012802DC0141F801220010143703502001200220001015370348200120043A004720012001290348370338200128026C20012D0047410F7141E0006A3A0000200128026C2001290338423888423F8342407D3C0001200128026C200129033842308842FF01833C0002200128026C200129033842288842FF01833C0003200128026C200129033842208842FF01833C0004200128026C200129033842188842FF01833C0005200128026C200129033842108842FF01833C0006200128026C200129033842088842FF01833C0007200128026C200129033842FF01833C00082001200128026C41096A36026C2001200141106A412020022000101637030841CC09410B2001290308100B1A2001290308200555044041D8094129429A0110031A0B41810A411C429E01100A1A2001290398062105200141A0066A240020050B0BA40201004180080B9C025265776172643A2050617373696E67206E6F6E2D636C61696D2074786E005265776172643A2050617373696E67206F7574676F696E672074786E005265776172643A2050617373696E67207265776172642073657475702074786E0000000000596F75206D75737420776169742030303030303030207365636F6E647300616363756D756C61746F72006669727374006C617374005265776172643A20417373657274696F6E206661696C7572652E0062616C0078666C5F726577617264007265776172645F64726F707300656D69745F726573756C74005265776172643A20456D6974746564207265776172642074786E207375636365737366756C6C792E005265776172643A20456D697420726577617264206661696C65642E\",\n          \"Flags\": 1,\n          \"HookApiVersion\": 0,\n          \"HookNamespace\": \"0000000000000000000000000000000000000000000000000000000000000000\",\n          \"HookOn\": \"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFFFFFFBFFFFF\"\n        }\n      },\n      {\n        \"Hook\": {\n          \"CreateCode\": \"\",\n          \"Flags\": 1\n        }\n      },\n      {\n        \"Hook\": {\n          \"CreateCode\": \"\",\n          \"Flags\": 1\n        }\n      },\n      {\n        \"Hook\": {\n          \"CreateCode\": \"\",\n          \"Flags\": 1\n        }\n      },\n      {\n        \"Hook\": {\n          \"CreateCode\": \"\",\n          \"Flags\": 1\n        }\n      },\n      {\n        \"Hook\": {\n          \"CreateCode\": \"\",\n          \"Flags\": 1\n        }\n      },\n      {\n        \"Hook\": {\n          \"CreateCode\": \"\",\n          \"Flags\": 1\n        }\n      },\n      {\n        \"Hook\": {\n          \"CreateCode\": \"\",\n          \"Flags\": 1\n        }\n      },\n      {\n        \"Hook\": {\n          \"CreateCode\": \"\",\n          \"Flags\": 1\n        }\n      }\n    ],\n    \"LastLedgerSequence\": 1955551,\n    \"NetworkID\": 21338,\n    \"Sequence\": 52,\n    \"SigningPubKey\": \"03799CADC441958EF655C7CF893638E8DF9F157925C0AD98981DFC55BC323FCBCE\",\n    \"TransactionType\": \"SetHook\",\n    \"TxnSignature\": \"3045022100FD1802C00CBEBB5CEF19C30A0023EFE12C807413D946B8194583CC100F1D12D9022079D049CE87CBCA8D157F6D5E8C077BD14B8DEBFA7B40EC37E53D758A6906CC3D\",\n    \"ctid\": \"C01DD6CD0000535A\",\n    \"date\": 1680778612000\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh\",\n            \"Balance\": \"1008078901610\",\n            \"Flags\": 1114112,\n            \"OwnerCount\": 2,\n            \"RegularKey\": \"rDADDYfnLvVY9FBnS8zFXhwYFHPuU5q2Sk\",\n            \"Sequence\": 53\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"2B6AC232AA4C4BE41BF49D2459FA4A0347E1B543A4C92FCEE0821C0201E2E9A8\",\n          \"PreviousFields\": {\n            \"Balance\": \"1008086545630\",\n            \"Sequence\": 52\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh\",\n            \"Flags\": 0,\n            \"Hooks\": [\n              {\n                \"Hook\": {\n                  \"Flags\": 0,\n                  \"HookHash\": \"4E57C7FE7A84ABFA53CFE411DE9BA3420B94F55038BF238EBE1EB89095ABA4DE\",\n                  \"HookOn\": \"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFFFFFBFFFFF\"\n                }\n              },\n              {\n                \"Hook\": {\n                  \"Flags\": 0,\n                  \"HookHash\": \"C04E2043B656B578CB30E9FF465304AF402B7AFE38B6CE2D8CEFECDD669E3424\",\n                  \"HookOn\": \"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFFFFFFBFFFFF\"\n                }\n              },\n              {\n                \"Hook\": {}\n              },\n              {\n                \"Hook\": {}\n              },\n              {\n                \"Hook\": {}\n              },\n              {\n                \"Hook\": {}\n              },\n              {\n                \"Hook\": {}\n              },\n              {\n                \"Hook\": {}\n              },\n              {\n                \"Hook\": {}\n              },\n              {\n                \"Hook\": {}\n              }\n            ],\n            \"OwnerNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"Hook\",\n          \"LedgerIndex\": \"469372BEE8814EC52CA2AECB5374AB57A47B53627E3C0E2ACBE3FDC78DBFEC7B\",\n          \"PreviousFields\": {\n            \"Hooks\": [\n              {\n                \"Hook\": {\n                  \"HookHash\": \"4E57C7FE7A84ABFA53CFE411DE9BA3420B94F55038BF238EBE1EB89095ABA4DE\"\n                }\n              },\n              {\n                \"Hook\": {\n                  \"HookHash\": \"C04E2043B656B578CB30E9FF465304AF402B7AFE38B6CE2D8CEFECDD669E3424\"\n                }\n              },\n              {\n                \"Hook\": {}\n              },\n              {\n                \"Hook\": {}\n              },\n              {\n                \"Hook\": {}\n              },\n              {\n                \"Hook\": {}\n              },\n              {\n                \"Hook\": {}\n              },\n              {\n                \"Hook\": {}\n              },\n              {\n                \"Hook\": {}\n              },\n              {\n                \"Hook\": {}\n              }\n            ]\n          }\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tesSUCCESS\"\n  },\n  \"hash\": \"12E9523791E48ABF1F8FF24771EF641F7E4BBE9D77BFA03AB1036517C041E569\",\n  \"ledger_index\": 1955533,\n  \"date\": 1680778612000\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/test/mock_data/SetHook2.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh\",\n    \"Fee\": \"124531\",\n    \"Flags\": 0,\n    \"Hooks\": [\n      {\n        \"Hook\": {\n          \"CreateCode\": \"0061736D01000000011C0460057F7F7F7F7F017E60037F7F7E017E60027F7F017F60017F017E02230303656E76057472616365000003656E7606616363657074000103656E76025F6700020302010305030100020621057F0141B088040B7F0041A6080B7F004180080B7F0041B088040B7F004180080B07080104686F6F6B00030AC6800001C2800002017F017E230041106B220124002001200036020C418008411341940841124100220010001A20002000420010011A41012200200010021A200141106A240020020B0B2C01004180080B25224163636570742E633A2043616C6C65642E22004163636570742E633A2043616C6C65642E\",\n          \"Flags\": 1,\n          \"HookApiVersion\": 0,\n          \"HookNamespace\": \"4FF9961269BF7630D32E15276569C94470174A5DA79FA567C0F62251AA9A36B9\",\n          \"HookOn\": \"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFFFFFBFFFFF\",\n          \"HookParameters\": [\n            {\n              \"HookParameter\": {\n                \"HookParameterName\": \"6E616D6531\",\n                \"HookParameterValue\": \"76616C756531\"\n              }\n            }\n          ]\n        }\n      }\n    ],\n    \"LastLedgerSequence\": 1716655,\n    \"NetworkID\": 21338,\n    \"Sequence\": 35,\n    \"SigningPubKey\": \"0330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD020\",\n    \"TransactionType\": \"SetHook\",\n    \"TxnSignature\": \"30450221009F547779E181441978A2E4F2C75774A07D6B654A40AC71E4D9FED65C342138390220710BD22DCB10FA609E0E85F8EC60355081921F7BC5001E826FC42A69FD3D8219\",\n    \"ctid\": \"C01A319D0000535A\",\n    \"date\": 1680058650000\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh\",\n            \"Balance\": \"8095809079\",\n            \"Flags\": 0,\n            \"OwnerCount\": 11,\n            \"Sequence\": 36\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"2B6AC232AA4C4BE41BF49D2459FA4A0347E1B543A4C92FCEE0821C0201E2E9A8\",\n          \"PreviousFields\": {\n            \"Balance\": \"8095933610\",\n            \"Sequence\": 35\n          }\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh\",\n            \"Flags\": 0,\n            \"Hooks\": [\n              {\n                \"Hook\": {\n                  \"Flags\": 0,\n                  \"HookHash\": \"7FCD62CCB03D525CA18AA59714CA22EDB008E93BEB3ED963442EB873E5915AE0\",\n                  \"HookOn\": \"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFFFFFBFFFFF\",\n                  \"HookParameters\": [\n                    {\n                      \"HookParameter\": {\n                        \"HookParameterName\": \"6E616D6531\",\n                        \"HookParameterValue\": \"76616C756531\"\n                      }\n                    }\n                  ]\n                }\n              },\n              {\n                \"Hook\": {\n                  \"Flags\": 0,\n                  \"HookHash\": \"AF43D543F9D8EB03CF1A0A3C28D3264A691D9BFC23CFD40E639F3D20DD5167C5\"\n                }\n              },\n              {\n                \"Hook\": {\n                  \"Flags\": 0,\n                  \"HookHash\": \"AF43D543F9D8EB03CF1A0A3C28D3264A691D9BFC23CFD40E639F3D20DD5167C5\"\n                }\n              },\n              {\n                \"Hook\": {\n                  \"Flags\": 0,\n                  \"HookHash\": \"AF43D543F9D8EB03CF1A0A3C28D3264A691D9BFC23CFD40E639F3D20DD5167C5\"\n                }\n              },\n              {\n                \"Hook\": {\n                  \"Flags\": 0,\n                  \"HookHash\": \"AF43D543F9D8EB03CF1A0A3C28D3264A691D9BFC23CFD40E639F3D20DD5167C5\"\n                }\n              },\n              {\n                \"Hook\": {\n                  \"Flags\": 0,\n                  \"HookHash\": \"AF43D543F9D8EB03CF1A0A3C28D3264A691D9BFC23CFD40E639F3D20DD5167C5\"\n                }\n              },\n              {\n                \"Hook\": {\n                  \"Flags\": 0,\n                  \"HookHash\": \"AF43D543F9D8EB03CF1A0A3C28D3264A691D9BFC23CFD40E639F3D20DD5167C5\"\n                }\n              },\n              {\n                \"Hook\": {\n                  \"Flags\": 0,\n                  \"HookHash\": \"AF43D543F9D8EB03CF1A0A3C28D3264A691D9BFC23CFD40E639F3D20DD5167C5\"\n                }\n              },\n              {\n                \"Hook\": {\n                  \"Flags\": 0,\n                  \"HookHash\": \"AF43D543F9D8EB03CF1A0A3C28D3264A691D9BFC23CFD40E639F3D20DD5167C5\"\n                }\n              },\n              {\n                \"Hook\": {\n                  \"Flags\": 0,\n                  \"HookHash\": \"AF43D543F9D8EB03CF1A0A3C28D3264A691D9BFC23CFD40E639F3D20DD5167C5\"\n                }\n              }\n            ],\n            \"OwnerNode\": \"0\"\n          },\n          \"LedgerEntryType\": \"Hook\",\n          \"LedgerIndex\": \"469372BEE8814EC52CA2AECB5374AB57A47B53627E3C0E2ACBE3FDC78DBFEC7B\"\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tesSUCCESS\"\n  },\n  \"hash\": \"044F061D19F2D24EC7CBEB84770910C72A972D2212BDF8E04FE5F47258B7F79E\",\n  \"ledger_index\": 1716637,\n  \"date\": 1680058650000\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/test/mock_data/TokenSwapPropose.json",
    "content": "{\n  \"tx\": {\n    \"Account\": \"ratB3Rp7pcid4hzwSYTWiqWXYXFmWUFDv1\",\n    \"AccountOther\": \"rPTScb8m3wq6r3Ys93Ec5at7LYDmWrtndi\",\n    \"Amount\": {\n      \"currency\": \"EUR\",\n      \"issuer\": \"rnz5f1MFcgbVxzYhU5hUKbKquEJHJady5K\",\n      \"value\": \"12\"\n    },\n    \"AmountOther\": {\n      \"currency\": \"USD\",\n      \"issuer\": \"rnz5f1MFcgbVxzYhU5hUKbKquEJHJady5K\",\n      \"value\": \"33\"\n    },\n    \"Fee\": \"10\",\n    \"Flags\": 2147483648,\n    \"Sequence\": 5,\n    \"SigningPubKey\": \"ED2D7565F8E1432940E5B3BEB4562DE99DB880323B5C8A178376D5B481A7DB6E1C\",\n    \"TransactionType\": \"TokenSwapPropose\",\n    \"TxnSignature\": \"153E5473EB70B6E073F22A8281AE1E5593C96369CACDC1E2DB9FA54C5B3EC7C07F458061858DD7AE061198E7CB8BF56A7034F102016DFDB5F38EF4C28466B308\",\n    \"ctid\": \"C000005800000000\",\n    \"date\": 749136066\n  },\n  \"meta\": {\n    \"AffectedNodes\": [\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Flags\": 0,\n            \"Owner\": \"ratB3Rp7pcid4hzwSYTWiqWXYXFmWUFDv1\",\n            \"RootIndex\": \"547794AC3EA3084040EF8EF8BB8927E1D9BC52A6EC0F03E31B32C11260FD7D51\"\n          },\n          \"LedgerEntryType\": \"DirectoryNode\",\n          \"LedgerIndex\": \"547794AC3EA3084040EF8EF8BB8927E1D9BC52A6EC0F03E31B32C11260FD7D51\"\n        }\n      },\n      {\n        \"ModifiedNode\": {\n          \"FinalFields\": {\n            \"Account\": \"ratB3Rp7pcid4hzwSYTWiqWXYXFmWUFDv1\",\n            \"Balance\": \"49999966\",\n            \"Flags\": 0,\n            \"OwnerCount\": 3,\n            \"Sequence\": 6\n          },\n          \"LedgerEntryType\": \"AccountRoot\",\n          \"LedgerIndex\": \"605F4818F631C60C34A29650C2783B604CDB7D00663B0C68F1A6A7775680FDF2\",\n          \"PreviousFields\": {\n            \"Balance\": \"49999976\",\n            \"OwnerCount\": 2,\n            \"Sequence\": 5\n          },\n          \"PreviousTxnID\": \"B25FA4890F5BFFE3A2DB62050A2ABE4792D717DF9131C7BEAF917F70CD94283A\",\n          \"PreviousTxnLgrSeq\": 15\n        }\n      },\n      {\n        \"CreatedNode\": {\n          \"LedgerEntryType\": \"TokenSwap\",\n          \"LedgerIndex\": \"BBEA4CB206489C14E428B8CDF8CBC931E380DC66450036BD4D6C926C2CC23811\",\n          \"NewFields\": {\n            \"Account\": \"ratB3Rp7pcid4hzwSYTWiqWXYXFmWUFDv1\",\n            \"AccountOther\": \"rPTScb8m3wq6r3Ys93Ec5at7LYDmWrtndi\",\n            \"Amount\": {\n              \"currency\": \"EUR\",\n              \"issuer\": \"rnz5f1MFcgbVxzYhU5hUKbKquEJHJady5K\",\n              \"value\": \"12\"\n            },\n            \"AmountOther\": {\n              \"currency\": \"USD\",\n              \"issuer\": \"rnz5f1MFcgbVxzYhU5hUKbKquEJHJady5K\",\n              \"value\": \"33\"\n            },\n            \"TokenSwapId\": \"5\"\n          }\n        }\n      }\n    ],\n    \"TransactionIndex\": 0,\n    \"TransactionResult\": \"tesSUCCESS\"\n  },\n  \"hash\": \"F84CCA4C6948B0D068A2D97A8CA92F557CE3615D98F6E90540369D4A4F122D0E\",\n  \"inLedger\": 88,\n  \"ledger_index\": 88\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/types.ts",
    "content": "import { FC } from 'react'\nimport type { Memo } from 'xrpl/dist/npm/models/common'\nimport type { TransactionMetadata } from 'xrpl'\n\nexport enum TransactionCategory {\n  DEX = 'DEX',\n  ACCOUNT = 'ACCOUNT',\n  PAYMENT = 'PAYMENT',\n  NFT = 'NFT',\n  XCHAIN = 'XCHAIN',\n  MPT = 'MPT',\n  PSEUDO = 'PSEUDO',\n  OTHER = 'OTHER',\n}\n\nexport enum TransactionAction {\n  CREATE = 'CREATE',\n  CANCEL = 'CANCEL',\n  FINISH = 'FINISH',\n  MODIFY = 'MODIFY',\n  SEND = 'SEND',\n  UNKNOWN = 'UNKNOWN',\n}\n\nexport interface TransactionTableDetailProps<I = any> {\n  instructions: I\n}\nexport type TransactionTableDetailComponent = FC<TransactionTableDetailProps>\n\nexport interface TransactionDescriptionProps<T = any, M = TransactionMetadata> {\n  data: {\n    tx: T\n    meta: M\n  }\n}\nexport type TransactionDescriptionComponent = FC<TransactionDescriptionProps>\n\nexport interface TransactionSimpleProps<I = any> {\n  data: {\n    instructions: I & {\n      date: string\n    }\n  }\n}\nexport type TransactionSimpleComponent = FC<TransactionSimpleProps>\nexport type TransactionParser<T = any, I = any> = (tx: T, meta: any) => I\n\nexport interface TransactionMapping {\n  Description?: TransactionDescriptionComponent\n  Simple: TransactionSimpleComponent\n  TableDetail?: TransactionTableDetailComponent\n  parser?: TransactionParser\n  action: TransactionAction\n  category: TransactionCategory\n}\n\nexport interface TransactionCommonFields {\n  date: string\n  Account: string\n  TransactionType: string\n  Fee: string\n  Sequence: number\n  AccountTxnID?: string\n  Flags?: number\n  LastLedgerSequence?: number\n  Memos?: Memo[]\n  Signers?: object[]\n  SourceTag?: number\n  SignerPubKey?: string\n  TicketSequence?: number\n  TxnSignature?: string\n}\n"
  },
  {
    "path": "src/containers/shared/components/Transaction/utils/vaultUtils.ts",
    "content": "import { getVault, getLoanBroker } from '../../../../../rippled/lib/rippled'\nimport { formatAsset } from '../../../../../rippled/lib/txSummary/formatAmount'\n\n/**\n * Fetches Vault information and returns the Asset field\n * @param rippledSocket - The rippled WebSocket connection\n * @param vaultId - The VaultID to fetch\n * @returns Promise<Asset> - The Asset field from the Vault object\n */\nexport async function getVaultAsset(rippledSocket: any, vaultId: string) {\n  try {\n    const vault = await getVault(rippledSocket, vaultId)\n    return formatAsset(vault.Asset)\n  } catch (error) {\n    // Return XRP as fallback to maintain backward compatibility\n    return { currency: 'XRP' }\n  }\n}\n\n/**\n * Fetches LoanBroker information, then Vault information, and returns the Asset field\n * @param rippledSocket - The rippled WebSocket connection\n * @param loanBrokerId - The LoanBrokerID to fetch\n * @returns Promise<Asset> - The Asset field from the associated Vault object\n */\nexport async function getVaultAssetFromLoanBroker(\n  rippledSocket: any,\n  loanBrokerId: string,\n) {\n  try {\n    const loanBroker = await getLoanBroker(rippledSocket, loanBrokerId)\n    const vaultId = loanBroker.VaultID\n\n    if (!vaultId) {\n      throw new Error('LoanBroker does not have a VaultID')\n    }\n\n    return await getVaultAsset(rippledSocket, vaultId)\n  } catch (error) {\n    // Return XRP as fallback to maintain backward compatibility\n    return { currency: 'XRP' }\n  }\n}\n"
  },
  {
    "path": "src/containers/shared/components/TransactionActionIcon/TransactionActionIcon.tsx",
    "content": "import { ReactElement } from 'react'\nimport { TransactionAction } from '../Transaction/types'\nimport { getAction } from '../Transaction'\nimport TransactionCancelIcon from './TransactionCancelIcon.svg'\nimport TransactionCreateIcon from './TransactionCreateIcon.svg'\nimport TransactionFinishIcon from './TransactionFinishIcon.svg'\nimport TransactionModifyIcon from './TransactionModifyIcon.svg'\nimport TransactionSendIcon from './TransactionSendIcon.svg'\nimport TransactionUnknownIcon from './TransactionUnknownIcon.svg'\n\nexport type TransactionActionIconProps =\n  | { action: TransactionAction; type?: never }\n  | { action?: never; type: string }\n\nexport const TransactionActionIcon = ({\n  action,\n  type,\n}: TransactionActionIconProps) => {\n  const icons: Record<TransactionAction, ReactElement> = {\n    [TransactionAction.CANCEL]: <TransactionCancelIcon />,\n    [TransactionAction.CREATE]: <TransactionCreateIcon />,\n    [TransactionAction.FINISH]: <TransactionFinishIcon />,\n    [TransactionAction.MODIFY]: <TransactionModifyIcon />,\n    [TransactionAction.SEND]: <TransactionSendIcon />,\n    [TransactionAction.UNKNOWN]: <TransactionUnknownIcon />,\n  }\n\n  let icon = type && icons[getAction(type)]\n\n  if (action) {\n    icon = icons[action]\n  }\n\n  return icon || icons[TransactionAction.UNKNOWN]\n}\n"
  },
  {
    "path": "src/containers/shared/components/TransactionActionIcon/test/TransactionActionIcon.test.tsx",
    "content": "import { render } from '@testing-library/react'\nimport { TransactionActionIcon } from '../TransactionActionIcon'\nimport { TransactionAction } from '../../Transaction/types'\n\ndescribe('TransactionActionIcon', () => {\n  it('renders with an action specified ', () => {\n    const { container } = render(\n      <TransactionActionIcon action={TransactionAction.CREATE} />,\n    )\n    // SVG should be rendered\n    expect(container.querySelector('svg')).toBeInTheDocument()\n  })\n\n  it('renders with type specified ', () => {\n    const { container } = render(<TransactionActionIcon type=\"Payment\" />)\n    expect(container.querySelector('svg')).toBeInTheDocument()\n  })\n\n  it('renders with type specified that is not defined', () => {\n    const { container } = render(<TransactionActionIcon type=\"Wooo\" />)\n    expect(container.querySelector('svg')).toBeInTheDocument()\n  })\n\n  it('renders with no action or type', () => {\n    // @ts-expect-error\n    const { container } = render(<TransactionActionIcon />)\n    expect(container.querySelector('svg')).toBeInTheDocument()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/TransactionTable/TransactionTable.tsx",
    "content": "import { FunctionComponent, HTMLAttributes, MouseEventHandler } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { TransactionTableRow } from './TransactionTableRow'\nimport { Loader } from '../Loader'\nimport { LoadMoreButton } from '../../LoadMoreButton'\nimport './styles.scss'\n\nexport type TransactionTableProps = HTMLAttributes<HTMLElement> & {\n  transactions?: any[]\n  emptyMessage?: string\n  loading: boolean\n  onLoadMore?: MouseEventHandler\n  hasAdditionalResults?: boolean\n  hasTokensColumn?: boolean\n  hasHashColumn?: boolean\n}\n\ntype TransactionTableComponent = FunctionComponent<TransactionTableProps> & {}\n\nexport const TransactionTable: TransactionTableComponent = ({\n  hasAdditionalResults = false,\n  emptyMessage,\n  loading = false,\n  onLoadMore = () => {},\n  transactions = [],\n  hasTokensColumn,\n  hasHashColumn,\n}: TransactionTableProps) => {\n  const { t } = useTranslation()\n\n  const renderListItem = (tx: any) => (\n    <TransactionTableRow\n      tx={tx}\n      hasTokensColumn={hasTokensColumn}\n      hasHashColumn={hasHashColumn}\n      key={tx.hash}\n    />\n  )\n\n  const renderLoadMore = () =>\n    hasAdditionalResults && <LoadMoreButton onClick={onLoadMore} />\n\n  return (\n    <>\n      <ol className=\"transaction-table\">\n        <li className=\"transaction-li transaction-li-header\">\n          {hasHashColumn && <div className=\"col col-hash\">{t('tx_hash')}</div>}\n          {hasTokensColumn && (\n            <div className=\"col col-token\"> {t('token')} </div>\n          )}\n          <div className=\"col col-account\">{t('account')}</div>\n          <div className=\"col col-type\">{t('transaction_type')}</div>\n          <div className=\"col col-status\">{t('status')}</div>\n          <div className=\"col col-date\">{t('transactions.date_header')}</div>\n        </li>\n        {!transactions || (!loading && transactions.length === 0) ? (\n          <div className=\"empty-transactions-message\">\n            {emptyMessage || t('no_transactions_message')}\n          </div>\n        ) : (\n          transactions.map(renderListItem)\n        )}\n      </ol>\n      {loading ? <Loader /> : renderLoadMore()}\n    </>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/TransactionTable/TransactionTableRow.tsx",
    "content": "import { TxLabel } from '../TxLabel'\nimport { TxStatus } from '../TxStatus'\nimport { TxDetails } from '../TxDetails'\nimport { localizeDate, shortenTxHash, DATE_OPTIONS_NUMERIC } from '../../utils'\nimport './styles.scss'\nimport { useLanguage } from '../../hooks'\nimport TxToken from '../TxToken'\nimport { RouteLink } from '../../routing'\nimport { TRANSACTION_ROUTE } from '../../../App/routes'\n\nexport interface Props {\n  tx: any\n  hasTokensColumn?: boolean\n  hasHashColumn?: boolean\n}\n\nexport const TransactionTableRow = ({\n  tx,\n  hasTokensColumn,\n  hasHashColumn,\n}: Props) => {\n  const language = useLanguage()\n  const success = tx.result === 'tesSUCCESS'\n  const date = localizeDate(new Date(tx.date), language, DATE_OPTIONS_NUMERIC)\n\n  return (\n    <li\n      className={`transaction-li anchor-mask tx-type ${tx.type} ${\n        success ? 'success' : 'fail'\n      }`}\n    >\n      <RouteLink\n        to={TRANSACTION_ROUTE}\n        params={{ identifier: tx.hash }}\n        className=\"mask-overlay\"\n      />\n      <div className=\"upper\">\n        {hasHashColumn && (\n          <div className=\"col col-hash\" title={tx.hash}>\n            {shortenTxHash(tx.hash)}\n          </div>\n        )}\n        {hasTokensColumn && (\n          <div className=\"col col-token\">\n            <TxToken tx={tx} />\n          </div>\n        )}\n        <div className=\"col col-account\" title={tx.account}>\n          {tx.account}\n        </div>\n        <div className={`col col-type tx-type ${tx.type}`}>\n          <TxLabel type={tx.type} />\n        </div>\n        <div className=\"col col-status\">\n          <TxStatus status={tx.result} />\n        </div>\n        <div className=\"col col-date\">{date}</div>\n      </div>\n      {tx.details && (\n        <div className=\"details\">\n          <TxDetails type={tx.type} instructions={tx.details.instructions} />\n        </div>\n      )}\n    </li>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/TransactionTable/styles.scss",
    "content": "@use 'sass:color';\n@use '../../../shared/css/variables' as *;\n\n.transaction-table {\n  width: 100%;\n  padding: 0;\n  margin: 0;\n  font-size: 12px;\n  line-height: 24px;\n  list-style: none;\n  table-layout: fixed;\n\n  @include for-size(desktop-up) {\n    font-size: 14px;\n  }\n\n  .upper {\n    display: flex;\n    align-items: stretch;\n    padding: 12px 16px;\n    color: $white;\n    font-size: 14px;\n    gap: 0 12px;\n\n    @include for-size(tablet-landscape-up) {\n      padding: 12px 32px;\n    }\n  }\n\n  .col {\n    display: flex;\n    flex: 1;\n    align-items: center;\n    letter-spacing: 0;\n    @extend %truncate;\n  }\n\n  .col-type {\n    flex: 2;\n\n    @include semibold;\n    @include for-size(desktop-up) {\n      width: 230px;\n    }\n  }\n\n  .col-amount {\n    flex: 2;\n    @include medium;\n  }\n\n  .col-token {\n    width: 40px;\n  }\n\n  .col-status {\n    width: 50px;\n    @include regular;\n\n    .status {\n      display: none;\n    }\n\n    @include for-size(tablet-landscape-up) {\n      .status {\n        display: initial;\n      }\n    }\n\n    @include for-size(desktop-up) {\n      width: auto;\n      flex: 2 2;\n    }\n  }\n\n  .col-hash {\n    flex: 2;\n    color: $green;\n    @include medium;\n  }\n\n  .col-account {\n    display: none;\n    flex: 3;\n\n    .upper & {\n      color: $black-70;\n      @include medium;\n    }\n\n    @include for-size(tablet-landscape-up) {\n      display: inline-block;\n    }\n  }\n\n  .col-date {\n    overflow: visible;\n    flex: 0 0 auto;\n    justify-content: right;\n    text-overflow: clip;\n    white-space: normal;\n    @include medium;\n\n    @include for-size(desktop-up) {\n      width: 185px; // We know the width because dates can only be so big\n      flex: none;\n    }\n  }\n\n  .details {\n    min-height: 30px;\n    padding: 32px;\n    background: rgba($black-70, 0.5);\n    color: $black-40;\n    font-size: 10px;\n    line-height: 12px;\n    text-transform: uppercase;\n    @include regular;\n\n    @include for-size(tablet-landscape-up) {\n      font-size: 12px;\n    }\n\n    &:empty {\n      min-height: 0;\n      padding: 0;\n      margin-bottom: 0;\n    }\n\n    .tx-status {\n      margin-bottom: 5px;\n    }\n\n    .currency,\n    .account,\n    .case-sensitive {\n      text-transform: none;\n    }\n\n    span {\n      display: inline-block;\n      margin-right: 5px;\n\n      &.no-space {\n        margin-right: 0;\n      }\n\n      span {\n        margin: 0;\n      }\n    }\n\n    .label {\n      @include bold;\n    }\n\n    small {\n      margin-left: 5px;\n    }\n\n    .partial-payment,\n    .closed,\n    .flag,\n    .unsetregularkey {\n      font-style: italic;\n      text-transform: none;\n    }\n\n    .key,\n    .domain,\n    .account,\n    .email-hash,\n    .message-key {\n      text-transform: none;\n    }\n\n    .partial-payment,\n    .closed {\n      color: $red-dark;\n    }\n\n    .flag {\n      color: $blue-purple-30;\n    }\n\n    .condition,\n    .fulfillment {\n      word-break: break-all;\n    }\n  }\n\n  .transaction-li {\n    position: relative;\n    display: block;\n    border-bottom: solid 1px $black-70;\n    line-height: 20px;\n\n    .transaction-address {\n      overflow: hidden;\n      color: $white;\n      text-overflow: ellipsis;\n    }\n\n    @include for-size(tablet-landscape-up) {\n      flex-direction: row;\n      padding: 0;\n    }\n\n    &.fail {\n      opacity: 0.8;\n    }\n\n    &:hover {\n      .upper {\n        background-color: rgba($black-70, 0.7);\n      }\n    }\n  }\n\n  .transaction-li.transaction-li-header {\n    display: flex;\n    padding: 0 16px 18px;\n    font-size: 10px;\n    gap: 0 12px;\n    text-transform: uppercase;\n\n    @include for-size(tablet-landscape-up) {\n      padding: 12px 32px;\n    }\n\n    &:hover {\n      background-color: inherit;\n    }\n\n    .col {\n      color: $black-50;\n      @include bold;\n    }\n  }\n}\n\n.empty-transactions-message {\n  padding: 16px;\n  color: $black-40;\n  font-size: 16px;\n  text-align: center;\n}\n\n.load-more-btn {\n  display: block;\n  margin: 10px auto;\n  outline: inherit;\n  @include bold;\n}\n"
  },
  {
    "path": "src/containers/shared/components/TransactionTable/test/TransactionTable.test.js",
    "content": "import { render } from '@testing-library/react'\nimport { I18nextProvider } from 'react-i18next'\nimport { BrowserRouter } from 'react-router'\nimport { QueryClientProvider } from 'react-query'\nimport { TransactionTable } from '../TransactionTable'\nimport i18n from '../../../../../i18n/testConfig'\nimport mockTx from './mockTransactions.json'\nimport { queryClient } from '../../../QueryClient'\n\nconst loadMore = jest.fn()\n\ndescribe('Transaction Table container', () => {\n  const renderTransactionTable = (\n    transactions = [],\n    emptyMessage = undefined,\n    loading = false,\n    onLoadMore = loadMore,\n    hasAdditionalResults = false,\n  ) =>\n    render(\n      <QueryClientProvider client={queryClient}>\n        <I18nextProvider i18n={i18n}>\n          <BrowserRouter>\n            <TransactionTable\n              transactions={transactions}\n              emptyMessage={emptyMessage}\n              loading={loading}\n              onLoadMore={onLoadMore}\n              hasAdditionalResults={hasAdditionalResults}\n            />\n          </BrowserRouter>\n        </I18nextProvider>\n      </QueryClientProvider>,\n    )\n\n  it('renders without crashing', () => {\n    renderTransactionTable()\n  })\n\n  it('renders multi-page content', () => {\n    const { container } = renderTransactionTable(\n      mockTx.transactions,\n      undefined,\n      false,\n      loadMore,\n      false,\n    )\n\n    expect(container.querySelectorAll('.transaction-table').length).toBe(1)\n    expect(container.querySelectorAll('.upper').length).toBe(3)\n    expect(container.querySelectorAll('.details').length).toBe(2)\n    expect(container.querySelectorAll('.load-more-btn').length).toEqual(0)\n  })\n\n  it('renders single-page content', () => {\n    const { container } = renderTransactionTable(\n      mockTx.transactions,\n      undefined,\n      false,\n      loadMore,\n      true,\n    )\n    expect(container.querySelectorAll('.transaction-table').length).toBe(1)\n    expect(container.querySelectorAll('.upper').length).toBe(3)\n    expect(container.querySelectorAll('.details').length).toBe(2)\n    expect(container.querySelectorAll('.load-more-btn').length).toEqual(1)\n  })\n\n  it('renders without details', () => {\n    const { container } = renderTransactionTable(\n      mockTx.transactions,\n      undefined,\n      false,\n      loadMore,\n      true,\n    )\n    expect(container.querySelectorAll('.transaction-table').length).toBe(1)\n    expect(container.querySelectorAll('.upper').length).toBe(3)\n    expect(container.querySelectorAll('.details').length).toBe(2)\n  })\n\n  it('renders loader', () => {\n    const { container } = renderTransactionTable(\n      mockTx.transactions,\n      undefined,\n      true,\n      loadMore,\n      false,\n    )\n    expect(container.querySelectorAll('.loader').length).toBe(1)\n  })\n\n  it('renders empty message', () => {\n    const { container } = renderTransactionTable(\n      [],\n      undefined,\n      false,\n      loadMore,\n      false,\n    )\n    expect(\n      container.querySelectorAll('.empty-transactions-message').length,\n    ).toBe(1)\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/TransactionTable/test/mockTransactions.json",
    "content": "{\n  \"transactions\": [\n    {\n      \"hash\": \"3247F0D70D9F241E58AA354B18B58175A466D16937CB3FE30FCD8D4027FAD850\",\n      \"type\": \"OfferCreate\",\n      \"result\": \"tesSUCCESS\",\n      \"account\": \"rENDnFwR3CPvrsPjD9XXeqVoXeVt2CpPWX\",\n      \"index\": 11,\n      \"fee\": 0.0105,\n      \"sequence\": 23906569,\n      \"date\": \"2019-02-08T15:42:11Z\",\n      \"details\": {\n        \"instructions\": {\n          \"gets\": {\n            \"currency\": \"USD\",\n            \"issuer\": \"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B\",\n            \"amount\": 3865.40088\n          },\n          \"pays\": {\n            \"currency\": \"XRP\",\n            \"amount\": 13450\n          },\n          \"price\": \"0.287390\",\n          \"firstCurrency\": {\n            \"currency\": \"XRP\"\n          },\n          \"secondCurrency\": {\n            \"currency\": \"USD\",\n            \"issuer\": \"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B\"\n          }\n        }\n      }\n    },\n    {\n      \"hash\": \"3A23B3813BC69287085E2E617AD7647FE2ECD21D1965DFE559E286EAFD946F5F\",\n      \"type\": \"OfferCreate\",\n      \"result\": \"tesSUCCESS\",\n      \"account\": \"rHj9CUz5Nkz57dzBiymKyxCY8UjppjwPAZ\",\n      \"index\": 4,\n      \"fee\": 0.000012,\n      \"sequence\": 2068714,\n      \"date\": \"2019-02-05T21:37:12Z\",\n      \"details\": {\n        \"instructions\": {\n          \"gets\": {\n            \"currency\": \"XRP\",\n            \"amount\": 6262.878992\n          },\n          \"pays\": {\n            \"currency\": \"USD\",\n            \"issuer\": \"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B\",\n            \"amount\": 1878.6976023515\n          },\n          \"price\": \"0.299973\",\n          \"firstCurrency\": {\n            \"currency\": \"XRP\"\n          },\n          \"secondCurrency\": {\n            \"currency\": \"USD\",\n            \"issuer\": \"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B\"\n          },\n          \"cancel\": 2068713\n        }\n      }\n    },\n    {\n      \"hash\": \"14B9395AEEE9E852643F594CB2A2EBEFEB8AA30F6BBC56BA5032F25E493A16F4\",\n      \"type\": \"OfferCreate\",\n      \"result\": \"tesSUCCESS\",\n      \"account\": \"rHj9CUz5Nkz57dzBiymKyxCY8UjppjwPAZ\",\n      \"index\": 4,\n      \"fee\": 0.000012,\n      \"sequence\": 2068713,\n      \"date\": \"2019-02-05T21:36:50Z\"\n    }\n  ]\n}\n"
  },
  {
    "path": "src/containers/shared/components/TxDetails.tsx",
    "content": "import { transactionTypes } from './Transaction'\n\ninterface Props {\n  instructions: any\n  type: string\n}\n\nexport const TxDetails = ({ type = '', instructions }: Props) => {\n  // Locate the component for detail row that is unique per TransactionType.\n  const TableDetail = transactionTypes[type]?.TableDetail\n  if (TableDetail) {\n    return <TableDetail instructions={instructions} />\n  }\n\n  return null\n}\n"
  },
  {
    "path": "src/containers/shared/components/TxLabel.tsx",
    "content": "import { useTranslation } from 'react-i18next'\nimport '../css/txlabel.scss'\nimport { TransactionActionIcon } from './TransactionActionIcon/TransactionActionIcon'\nimport { getCategory } from './Transaction'\n\ninterface Props {\n  type: string\n}\n\nexport const TxLabel = (props: Props) => {\n  const { t } = useTranslation()\n  const { type } = props\n  return (\n    <div className={`tx-label tx-type tx-category-${getCategory(type)}`}>\n      <TransactionActionIcon type={type} />\n      <span className=\"tx-type-name\">\n        {t(`transaction_type_name`, { context: type, defaultValue: type })}\n      </span>\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/TxStatus.tsx",
    "content": "/* eslint-disable react/no-unstable-nested-components */\n// TODO: fix the linter issues\nimport { useTranslation } from 'react-i18next'\nimport SuccessIcon from '../images/success.svg'\nimport FailIcon from '../images/ic_fail.svg'\nimport { SUCCESSFUL_TRANSACTION } from '../transactionUtils'\n\nimport '../css/txstatus.scss'\n\nexport interface TxStatusProps {\n  shorthand?: boolean\n  status: string\n}\n\nexport const TxStatus = ({ shorthand = false, status }: TxStatusProps) => {\n  const { t } = useTranslation()\n  const success = status === SUCCESSFUL_TRANSACTION\n  const className = success ? 'success' : 'fail'\n  const wrapperClassName = `tx-status tx-result ${className}`\n\n  const Plain = ({ title, children }: any) => (\n    <span title={title} className={wrapperClassName}>\n      {children}\n    </span>\n  )\n\n  const Success = () => (\n    <Plain title={t('success')}>\n      <span className=\"status-icon\">\n        <SuccessIcon className={`logo ${className}`} title={t('success')} />\n      </span>\n      <span className=\"status\">\n        {!shorthand && <span className=\"status-message\">{t('success')}</span>}\n      </span>\n    </Plain>\n  )\n\n  const Fail = () => {\n    const content = (\n      <>\n        <span className=\"status-icon\">\n          <FailIcon className={`logo ${className}`} />\n        </span>\n        <span className=\"status\">\n          {!shorthand && <span className=\"status-message\">{t('fail')}</span>}\n          <span className=\"status-code\">{status}</span>\n        </span>\n      </>\n    )\n    return shorthand ? (\n      <Plain title={t('fail')}>{content}</Plain>\n    ) : (\n      <a\n        href={`https://xrpl.org/tec-codes.html#${status}`}\n        title={`${t('fail')} - ${status}`}\n        className={wrapperClassName}\n      >\n        {content}\n      </a>\n    )\n  }\n\n  return success ? <Success /> : <Fail />\n}\n"
  },
  {
    "path": "src/containers/shared/components/TxToken.tsx",
    "content": "import { Trans } from 'react-i18next'\nimport Currency from './Currency'\n\nimport '../css/txlabel.scss'\n\ninterface Props {\n  tx: any\n}\n\n// TODO: We should consider moving this logic to each individual parser. This would give us more customizability.\nfunction getTokenPair(\n  type: string,\n  fee: number,\n  amount: { currency: string; amount: number },\n  amount2: { currency: string; amount: number },\n) {\n  if (\n    type === 'AMMWithdraw' ||\n    type === 'AMMDeposit' ||\n    type === 'AMMCreate' ||\n    type === 'Payment'\n  ) {\n    const first =\n      amount?.amount && amount.amount !== fee ? (\n        <Currency currency={amount.currency} />\n      ) : undefined\n    const second =\n      amount2?.amount && amount2.amount !== fee ? (\n        <Currency currency={amount2.currency} />\n      ) : undefined\n\n    if (first && second) {\n      return (\n        <Trans\n          i18nKey={\n            type === 'Payment'\n              ? 'transaction_tokens_swapped'\n              : 'transaction_tokens_involved'\n          }\n          components={{\n            Currency: first,\n            Currency2: second,\n          }}\n        />\n      )\n    }\n\n    return first || second\n  }\n\n  return 'LP'\n}\n\nconst TxToken = (props: Props) => {\n  const { tx } = props\n  return (\n    <div>\n      {getTokenPair(\n        tx.type,\n        tx.fee,\n        tx.details?.instructions?.amount,\n        tx.details?.instructions?.amount2,\n      )}\n    </div>\n  )\n}\n\nexport default TxToken\n"
  },
  {
    "path": "src/containers/shared/components/VHSValidators/VHSValidatorsContext.tsx",
    "content": "import { contextFactory } from '../../helpers/contextFactory'\nimport { VHSValidatorsHookResult } from './types'\n\nconst [VHSValidatorsContext, useVHSValidators] =\n  contextFactory<VHSValidatorsHookResult>({\n    hook: 'useVHSValidators',\n    provider: 'VHSValidatorsProvider',\n  })\n\nexport { VHSValidatorsContext, useVHSValidators }\n"
  },
  {
    "path": "src/containers/shared/components/VHSValidators/VHSValidatorsProvider.tsx",
    "content": "import { FC, PropsWithChildren, useContext } from 'react'\nimport { useQuery } from 'react-query'\nimport axios from 'axios'\nimport { VHSValidatorsContext } from './VHSValidatorsContext'\nimport { ValidatorResponse } from '../../vhsTypes'\nimport Log from '../../log'\nimport NetworkContext from '../../NetworkContext'\nimport { VHSValidatorsHookResult } from './types'\nimport { FETCH_INTERVAL_ERROR_MILLIS, FETCH_INTERVAL_MILLIS } from '../../utils'\n\nexport const VHSValidatorsProvider: FC<PropsWithChildren> = ({ children }) => {\n  const network = useContext(NetworkContext)\n\n  const { data: value } = useQuery<VHSValidatorsHookResult>(\n    ['fetchValidatorsData'],\n    () => fetchVHSData(),\n    {\n      refetchInterval: (returnedData, _) =>\n        returnedData == null\n          ? FETCH_INTERVAL_ERROR_MILLIS\n          : FETCH_INTERVAL_MILLIS,\n      refetchOnMount: true,\n      enabled: process.env.VITE_ENVIRONMENT !== 'custom' || !!network,\n      initialData: {\n        unl: undefined,\n        validators: undefined,\n      },\n    },\n  )\n\n  function fetchVHSData(): Promise<VHSValidatorsHookResult> {\n    const url = `${process.env.VITE_DATA_URL}/validators/${network}`\n\n    return axios\n      .get(url)\n      .then((resp) => resp.data.validators)\n      .then((validators) => {\n        const newValidatorList: Record<string, ValidatorResponse> = {}\n        validators.forEach((v: ValidatorResponse) => {\n          newValidatorList[v.signing_key] = v\n        })\n\n        return {\n          validators: newValidatorList,\n          unl: validators\n            .filter((d: ValidatorResponse) => Boolean(d.unl))\n            .map((d: ValidatorResponse) => d.signing_key),\n        }\n      })\n      .catch((e) => {\n        Log.error(e)\n\n        return {\n          unl: undefined,\n          validators: undefined,\n        }\n      })\n  }\n\n  return (\n    <VHSValidatorsContext.Provider value={value}>\n      {children}\n    </VHSValidatorsContext.Provider>\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/components/VHSValidators/index.ts",
    "content": "export * from './types'\nexport * from './VHSValidatorsContext'\nexport * from './VHSValidatorsProvider'\n"
  },
  {
    "path": "src/containers/shared/components/VHSValidators/types.ts",
    "content": "import { ValidatorResponse } from '../../vhsTypes'\n\nexport interface VHSValidatorsHookResult {\n  validators?: Record<string, ValidatorResponse>\n  unl?: string[]\n}\n"
  },
  {
    "path": "src/containers/shared/components/test/Account.test.tsx",
    "content": "import { I18nextProvider } from 'react-i18next'\nimport { BrowserRouter } from 'react-router'\nimport { cleanup, render, screen } from '@testing-library/react'\nimport i18n from '../../../../i18n/testConfig'\nimport { Account } from '../Account'\n\nconst renderComponent = (component: JSX.Element) =>\n  render(\n    <I18nextProvider i18n={i18n}>\n      <BrowserRouter>{component}</BrowserRouter>\n    </I18nextProvider>,\n  )\n\nconst ACCOUNT = 'rHWcuuZoFvDS6gNbmHSdpb7u1hZzxvCoMt'\nconst ACCOUNT_PLUS_DT = `${ACCOUNT}:381702`\n\ndescribe('Account', () => {\n  afterEach(cleanup)\n  it('should render with a link', () => {\n    renderComponent(<Account account={ACCOUNT} />)\n    const element = screen.getByTestId('account')\n    expect(element).toHaveClass('account')\n    expect(element).toHaveTextContent(ACCOUNT)\n    expect(element).toHaveAttribute('href', `/accounts/${ACCOUNT}`)\n    expect(element).toHaveAttribute('title', ACCOUNT)\n    expect(screen.queryByTestId('dt')).toBeNull()\n  })\n  it('should render without a link', () => {\n    renderComponent(<Account account={ACCOUNT} link={false} />)\n    const element = screen.getByTestId('account')\n    expect(element).toHaveTextContent(ACCOUNT)\n    expect(element).not.toHaveAttribute('href')\n    expect(element).toHaveAttribute('title', ACCOUNT)\n    expect(screen.queryByTestId('dt')).toBeNull()\n  })\n\n  it('should render with a destination tag', () => {\n    renderComponent(<Account account={ACCOUNT_PLUS_DT} />)\n    const element = screen.getByTestId('account')\n    expect(element).toHaveClass('account')\n    expect(element).toHaveTextContent(ACCOUNT)\n    expect(element).toHaveAttribute('href', `/accounts/${ACCOUNT}`)\n    expect(element).toHaveAttribute('title', ACCOUNT)\n    expect(screen.queryByTestId('dt')).toHaveTextContent(':381702')\n  })\n\n  it('should render with a destination tag and no link', () => {\n    renderComponent(<Account account={ACCOUNT_PLUS_DT} link={false} />)\n    const element = screen.getByTestId('account')\n    expect(element).toHaveClass('account')\n    expect(element).toHaveTextContent(ACCOUNT)\n    expect(element).not.toHaveAttribute('href')\n    expect(element).toHaveAttribute('title', ACCOUNT)\n    expect(screen.queryByTestId('dt')).toHaveTextContent(':381702')\n  })\n\n  it('should render with a destination tag supplied separately', () => {\n    renderComponent(<Account account={ACCOUNT} tag={123} />)\n    const element = screen.getByTestId('account')\n    expect(element).toHaveClass('account')\n    expect(element).toHaveTextContent(ACCOUNT)\n    expect(element).toHaveAttribute('href', `/accounts/${ACCOUNT}`)\n    expect(element).toHaveAttribute('title', ACCOUNT)\n    expect(screen.queryByTestId('dt')).toHaveTextContent(':123')\n  })\n\n  it('should render with a destination tag supplied separately and no link', () => {\n    renderComponent(<Account account={ACCOUNT} tag={123} link={false} />)\n    const element = screen.getByTestId('account')\n    expect(element).toHaveTextContent(ACCOUNT)\n    expect(element).not.toHaveAttribute('href')\n    expect(element).toHaveAttribute('title', ACCOUNT)\n    expect(screen.queryByTestId('dt')).toHaveTextContent(':123')\n  })\n\n  it('should render with displayText', () => {\n    renderComponent(\n      <Account account={ACCOUNT} displayText=\"Custom Display Name\" />,\n    )\n    const element = screen.getByTestId('account')\n    expect(element).toHaveClass('account')\n    expect(element).toHaveTextContent('Custom Display Name')\n    expect(element).toHaveAttribute('href', `/accounts/${ACCOUNT}`)\n    expect(element).toHaveAttribute('title', ACCOUNT)\n  })\n\n  it('should render with displayText and no link', () => {\n    renderComponent(\n      <Account\n        account={ACCOUNT}\n        displayText=\"Custom Display Name\"\n        link={false}\n      />,\n    )\n    const element = screen.getByTestId('account')\n    expect(element).toHaveTextContent('Custom Display Name')\n    expect(element).not.toHaveAttribute('href')\n    expect(element).toHaveAttribute('title', ACCOUNT)\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/test/Amount.test.tsx",
    "content": "import { I18nextProvider } from 'react-i18next'\nimport { BrowserRouter } from 'react-router'\nimport { cleanup, render, screen } from '@testing-library/react'\nimport { useQuery } from 'react-query'\nimport { Amount } from '../Amount'\nimport i18n from '../../../../i18n/testConfig'\n\njest.mock('react-query', () => ({\n  ...jest.requireActual('react-query'),\n  useQuery: jest.fn(),\n}))\n\ndescribe('Amount', () => {\n  afterEach(cleanup)\n  const renderComponent = (component: JSX.Element) =>\n    render(\n      <I18nextProvider i18n={i18n}>\n        <BrowserRouter>{component}</BrowserRouter>\n      </I18nextProvider>,\n    )\n\n  it('handles currency codes that are 3 characters ', () => {\n    const value = {\n      amount: 95.13258522535791,\n      currency: 'DYM',\n      issuer: 'rGwUWgN5BEg3QGNY3RX2HfYowjUTZdid3E',\n    }\n\n    renderComponent(<Amount value={value} />)\n    expect(screen.getByTestId('currency')).toHaveTextContent(\n      'DYM.rGwUWgN5BEg3QGNY3RX2HfYowjUTZdid3E',\n    )\n    expect(screen.getByTestId('amount-localized')).toHaveTextContent(\n      '95.13258523',\n    )\n  })\n\n  it('handles currency codes with standard symbols', () => {\n    const value = {\n      amount: 4986.30908732758,\n      currency: 'JPY',\n      issuer: 'rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B',\n    }\n\n    renderComponent(<Amount value={value} />)\n    expect(screen.getByTestId('currency')).toHaveTextContent(\n      'JPY.rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B',\n    )\n    expect(screen.getByTestId('amount-localized')).toHaveTextContent(\n      '¥4,986.30908733',\n    )\n  })\n\n  it('handles currency codes with standard symbols', () => {\n    const value2 = {\n      amount: 78.5098894970562,\n      currency: 'GBP',\n      issuer: 'rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B',\n    }\n\n    renderComponent(<Amount value={value2} />)\n    expect(screen.getByTestId('currency')).toHaveTextContent(\n      'GBP.rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B',\n    )\n    expect(screen.getByTestId('amount-localized')).toHaveTextContent(\n      '£78.5098895',\n    )\n  })\n\n  it('handles currency codes that are 4 characters ', () => {\n    const value = {\n      amount: 95.13258522535791,\n      currency: 'WOOT',\n      issuer: 'rGwUWgN5BEg3QGNY3RX2HfYowjUTZdid3E',\n    }\n\n    renderComponent(<Amount value={value} />)\n    expect(screen.getByTestId('currency')).toHaveTextContent(\n      'WOOT.rGwUWgN5BEg3QGNY3RX2HfYowjUTZdid3E',\n    )\n    expect(screen.getByTestId('amount-localized')).toHaveTextContent(\n      '95.13258523',\n    )\n  })\n\n  it('handles currency codes that are 40 characters ', () => {\n    const value = {\n      amount: 3.692385398244198,\n      currency: '0158415500000000C1F76FF6ECB0BAC600000000',\n      issuer: 'rrh7rf1gV2pXAoqA8oYbpHd8TKv5ZQeo67',\n    }\n    renderComponent(<Amount value={value} />)\n    expect(screen.getByTestId('currency')).toHaveTextContent(\n      '\u0001XAUÁ÷oöì°ºÆ.rrh7rf1gV2pXAoqA8oYbpHd8TKv5ZQeo67',\n    )\n    expect(screen.getByTestId('amount-localized')).toHaveTextContent(\n      '3.6923854',\n    )\n  })\n\n  it('handles currency codes that are 40 characters and hidden issuer', () => {\n    const value = {\n      amount: 3.692385398244198,\n      currency: '0158415500000000C1F76FF6ECB0BAC600000000',\n      issuer: 'rrh7rf1gV2pXAoqA8oYbpHd8TKv5ZQeo67',\n    }\n    renderComponent(<Amount value={value} displayIssuer={false} />)\n    expect(screen.getByTestId('currency')).toHaveTextContent('\u0001XAUÁ÷oöì°ºÆ')\n    expect(screen.getByTestId('amount-localized')).toHaveTextContent(\n      '3.6923854',\n    )\n  })\n\n  it('handles XRP-style amounts', () => {\n    const value = '1000'\n    renderComponent(<Amount value={value} displayIssuer={false} />)\n    expect(screen.getByTestId('currency')).toHaveTextContent('XRP')\n    expect(screen.getByTestId('amount-localized')).toHaveTextContent(\n      '\\uE9000.001',\n    )\n  })\n\n  it('handles modifier', () => {\n    const value = '9000'\n    renderComponent(<Amount value={value} displayIssuer={false} modifier=\"+\" />)\n    expect(screen.getByTestId('currency')).toHaveTextContent('XRP')\n    expect(screen.getByTestId('amount-localized')).toHaveTextContent(\n      '+\\uE9000.009',\n    )\n  })\n\n  it('handles MPT amount', async () => {\n    const data = {\n      issuer: 'rL2LzUhsBJMqsaVCXVvzedPjePbjVzBCC',\n      assetScale: 3,\n      maxAmt: '100000000',\n      outstandingAmt: '1043001',\n      sequence: 2447,\n      metadata:\n        '{\"name\":\"US Treasury Bill Token\",\"symbol\":\"USTBT\",\"decimals\":2,\"totalSupply\":1000000,\"issuer\":\"US Treasury\",\"issueDate\":\"2024-03-25\",\"maturityDate\":\"2025-03-25\",\"faceValue\":\"1000\",\"interestRate\":\"2.5\",\"interestFrequency\":\"Quarterly\",\"collateral\":\"US Government\",\"jurisdiction\":\"United States\",\"regulatoryCompliance\":\"SEC Regulations\",\"securityType\":\"Treasury Bill\",\"external_url\":\"https://example.com/t-bill-token-metadata.json\"}',\n      flags: [],\n    }\n\n    // @ts-ignore\n    useQuery.mockImplementation(() => ({\n      data,\n    }))\n\n    const value = {\n      amount: '1043001',\n      currency: '0000098F03B3BCE934EE8CAA1DF25A42032388361B9E5A65',\n      isMPT: true,\n    }\n    renderComponent(<Amount value={value} displayIssuer={false} />)\n    screen.debug()\n\n    expect(screen.getByTestId('amount-localized')).toHaveTextContent(\n      '1,043.001',\n    )\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/test/Currency.test.tsx",
    "content": "import { BrowserRouter } from 'react-router'\nimport { cleanup, render, screen } from '@testing-library/react'\nimport Currency from '../Currency'\n\ndescribe('Currency', () => {\n  afterEach(cleanup)\n  it('handles currency codes that are 3 characters ', () => {\n    render(<Currency currency=\"BTC\" />)\n    const element = screen.getByTestId('currency')\n    expect(element).toHaveClass('currency')\n    expect(element).toHaveTextContent('BTC')\n  })\n\n  it('handles currency codes that are 4 characters ', () => {\n    render(<Currency currency=\"WOOT\" />)\n    const element = screen.getByTestId('currency')\n    expect(element).toHaveClass('currency')\n    expect(element).toHaveTextContent('WOOT')\n  })\n\n  it('handles currency codes that are 4 characters and include issuer ', () => {\n    render(\n      <Currency currency=\"USD\" issuer=\"david\" link={false} shortenIssuer />,\n    )\n    const element = screen.getByTestId('currency')\n    expect(element).toHaveClass('currency')\n    expect(element).toHaveTextContent('USD.davi')\n  })\n\n  it('handles currency codes that are 40 characters ', () => {\n    render(<Currency currency=\"584D455441000000000000000000000000000000\" />)\n    const element = screen.getByTestId('currency')\n    expect(element).toHaveClass('currency')\n    expect(element).toHaveTextContent('XMETA')\n  })\n\n  it('handles currency codes that are 40 characters and issuer ', () => {\n    render(\n      <BrowserRouter>\n        <Currency\n          currency=\"584D455441000000000000000000000000000000\"\n          issuer=\"r3XwJ1hr1PtbRvbhuUkybV6tmYzzA11WcB\"\n        />\n        <Currency currency=\"USD\" issuer=\"rhub8VRN55s94qWKDv6jmDy1pUykJzF3wq\" />\n      </BrowserRouter>,\n    )\n    const elements = screen.getAllByTestId('currency')\n    expect(elements).toHaveLength(2)\n    expect(elements[0]).toHaveClass('currency')\n    expect(elements[1]).toHaveClass('currency')\n\n    const meta = elements[0]\n    const usd = elements[1]\n\n    expect(meta).toHaveTextContent('XMETA.r3XwJ1hr1PtbRvbhuUkybV6tmYzzA11WcB')\n    expect(meta).toHaveAttribute(\n      'href',\n      '/token/584D455441000000000000000000000000000000.r3XwJ1hr1PtbRvbhuUkybV6tmYzzA11WcB',\n    )\n\n    expect(usd).toHaveTextContent('USD.rhub8VRN55s94qWKDv6jmDy1pUykJzF3wq')\n    expect(usd).toHaveAttribute(\n      'href',\n      '/token/USD.rhub8VRN55s94qWKDv6jmDy1pUykJzF3wq',\n    )\n  })\n\n  it('handle non-standard currency decoded to equal or fewer than 3 characters', () => {\n    render(<Currency currency=\"5852500000000000000000000000000000000000\" />)\n    const element = screen.getByTestId('currency')\n    expect(element).toHaveClass('currency')\n    expect(element).toHaveTextContent('FakeXRP')\n  })\n\n  it('displays the XRP symbol when rendering XRP', () => {\n    render(<Currency currency=\"XRP\" />)\n    const element = screen.getByTestId('currency')\n    expect(element).toHaveClass('currency')\n    expect(element).toHaveTextContent('\\uE900 XRP')\n  })\n\n  it('handles MPT ID ', () => {\n    render(\n      <BrowserRouter>\n        <Currency\n          currency=\"00000BDE5B4F868ECE457207E2C1750065987730B8839E0D\"\n          issuer=\"r9Kokzc4FC1BW81pDarodghf3n8w2vufhW\"\n          isMPT\n        />\n      </BrowserRouter>,\n    )\n    const mpt = screen.getByTestId('currency')\n\n    expect(mpt).toHaveTextContent(\n      '00000BDE5B4F868ECE457207E2C1750065987730B8839E0D',\n    )\n    expect(mpt).toHaveAttribute(\n      'href',\n      '/mpt/00000BDE5B4F868ECE457207E2C1750065987730B8839E0D',\n    )\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/test/DomainLink.test.tsx",
    "content": "import { render, screen } from '@testing-library/react'\nimport DomainLink from '../DomainLink'\n\ndescribe('DomainLink', () => {\n  it('handles domain link with only domain parameter', () => {\n    render(<DomainLink domain=\"bithomp.com\" />)\n    const link = screen.getByRole('link')\n    expect(link).toHaveClass('domain')\n    expect(link).toHaveTextContent('bithomp.com')\n    expect(link).toHaveAttribute('href', 'https://bithomp.com')\n  })\n\n  it('handles domain link with decoded domain parameter', () => {\n    render(<DomainLink decode domain=\"736F6C6F67656E69632E636F6D\" />)\n    const link = screen.getByRole('link')\n    expect(link).toHaveClass('domain')\n    expect(link).toHaveTextContent('sologenic.com')\n    expect(link).toHaveAttribute('href', 'https://sologenic.com')\n  })\n\n  it('handles domain link with domain parameter and classname', () => {\n    render(<DomainLink className=\"test\" domain=\"bithomp.com\" />)\n    const link = screen.getByRole('link')\n    expect(link).toHaveClass('domain test')\n    expect(link).toHaveTextContent('bithomp.com')\n    expect(link).toHaveAttribute('href', 'https://bithomp.com')\n  })\n\n  it('handles domain link with decoded domain parameter and classname', () => {\n    render(\n      <DomainLink\n        className=\"test\"\n        decode\n        domain=\"736F6C6F67656E69632E636F6D\"\n      />,\n    )\n    const link = screen.getByRole('link')\n    expect(link).toHaveClass('domain test')\n    expect(link).toHaveTextContent('sologenic.com')\n    expect(link).toHaveAttribute('href', 'https://sologenic.com')\n  })\n\n  it('handles domain link with domain provided in HEX-encoded format', () => {\n    const url = 'https://example.com'\n    const urlInHex = '68747470733A2F2F6578616D706C652E636F6D'\n    render(<DomainLink decode domain={urlInHex} />)\n    const link = screen.getByRole('link')\n    expect(link).toHaveClass('domain')\n    expect(link).toHaveTextContent(url)\n    expect(link).toHaveAttribute('href', url)\n  })\n\n  it('handles IPFS domain link', () => {\n    render(<DomainLink domain=\"ipfs://random/metadata.json\" />)\n    const link = screen.getByRole('link')\n    expect(link).toHaveClass('domain')\n    expect(link).toHaveTextContent('ipfs://random/metadata.json')\n    expect(link).toHaveAttribute(\n      'href',\n      'https://ipfs.io/ipfs/random/metadata.json',\n    )\n  })\n\n  it('handles domain link with protocol removal', () => {\n    const url = 'https://example.com/'\n    render(<DomainLink domain={url} keepProtocol={false} />)\n    const link = screen.getByRole('link')\n    expect(link).toHaveClass('domain')\n    expect(link).toHaveTextContent('example.com')\n    expect(link).toHaveAttribute('href', 'https://example.com/')\n  })\n\n  it('handles domain link with displayDomain', () => {\n    render(\n      <DomainLink domain=\"bithomp.com\" displayDomain=\"Custom Display Text\" />,\n    )\n    const link = screen.getByRole('link')\n    expect(link).toHaveClass('domain')\n    expect(link).toHaveTextContent('Custom Display Text')\n    expect(link).toHaveAttribute('href', 'https://bithomp.com')\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/test/Loader.test.tsx",
    "content": "import { render } from '@testing-library/react'\nimport { I18nextProvider } from 'react-i18next'\nimport i18n from '../../../../i18n/testConfig'\nimport { Loader } from '../Loader'\n\ndescribe('Loader', () => {\n  it('renders correctly ', () => {\n    const { container } = render(\n      <I18nextProvider i18n={i18n}>\n        <Loader />\n      </I18nextProvider>,\n    )\n    expect(container.querySelectorAll('.loader')).toHaveLength(1)\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/test/NFTokenLink.test.tsx",
    "content": "import { render, screen } from '@testing-library/react'\nimport { BrowserRouter } from 'react-router'\nimport { NFTokenLink } from '../NFTokenLink'\n\nconst renderComponent = (component: JSX.Element) =>\n  render(<BrowserRouter>{component}</BrowserRouter>)\n\nconst TOKEN_ID =\n  '000827103B94ECBB7BF0A0A6ED62B3607801A27B65F4B11F5E1D5E8A3F3D8E9A'\n\ndescribe('NFTokenLink', () => {\n  it('should render with full tokenID', () => {\n    renderComponent(<NFTokenLink tokenID={TOKEN_ID} />)\n    const link = screen.getByRole('link')\n    expect(link).toHaveTextContent(TOKEN_ID)\n    expect(link).toHaveAttribute('href', `/nft/${TOKEN_ID}`)\n    expect(link).toHaveAttribute('title', TOKEN_ID)\n  })\n\n  it('should render with shortTokenID when provided', () => {\n    const shortID = '000827...3D8E9A'\n    renderComponent(<NFTokenLink tokenID={TOKEN_ID} shortTokenID={shortID} />)\n    const link = screen.getByRole('link')\n    expect(link).toHaveTextContent(shortID)\n    expect(link).toHaveAttribute('href', `/nft/${TOKEN_ID}`)\n    expect(link).toHaveAttribute('title', TOKEN_ID)\n  })\n\n  it('should use full tokenID when shortTokenID is empty string', () => {\n    renderComponent(<NFTokenLink tokenID={TOKEN_ID} shortTokenID=\"\" />)\n    const link = screen.getByRole('link')\n    expect(link).toHaveTextContent(TOKEN_ID)\n    expect(link).toHaveAttribute('href', `/nft/${TOKEN_ID}`)\n    expect(link).toHaveAttribute('title', TOKEN_ID)\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/test/TxLabel.test.tsx",
    "content": "import { render, screen } from '@testing-library/react'\nimport { I18nextProvider } from 'react-i18next'\nimport { TxLabel } from '../TxLabel'\nimport i18n from '../../../../i18n/testConfigEnglish'\n\ndescribe('TxLabel', () => {\n  const renderTxLabel = (type: string) =>\n    render(\n      <I18nextProvider i18n={i18n}>\n        <TxLabel type={type} />\n      </I18nextProvider>,\n    )\n\n  it('renders with an action specified ', () => {\n    const { container, unmount } = renderTxLabel('Payment')\n    expect(container.querySelector('.tx-category-PAYMENT')).toBeInTheDocument()\n    expect(container.querySelector('svg')).toBeInTheDocument()\n    expect(screen.getByText('Payment')).toBeInTheDocument()\n    unmount()\n\n    const { container: container2 } = renderTxLabel('OfferCancel')\n    expect(container2.querySelector('.tx-category-DEX')).toBeInTheDocument()\n    expect(container2.querySelector('svg')).toBeInTheDocument()\n    expect(screen.getByText('Offer Cancel')).toBeInTheDocument()\n  })\n\n  it('renders with type that is not defined', () => {\n    const { container } = renderTxLabel('WooCreate')\n    expect(container.querySelector('.tx-category-OTHER')).toBeInTheDocument()\n    expect(container.querySelector('svg')).toBeInTheDocument()\n    expect(screen.getByText('WooCreate')).toBeInTheDocument()\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/test/TxStatus.test.tsx",
    "content": "import { render, screen } from '@testing-library/react'\nimport { I18nextProvider } from 'react-i18next'\nimport { MemoryRouter } from 'react-router'\nimport i18n from '../../../../i18n/testConfigEnglish'\nimport { TxStatus } from '../TxStatus'\n\ndescribe('TxStatus', () => {\n  const renderTxStatus = (status: string, shorthand = false) =>\n    render(\n      <I18nextProvider i18n={i18n}>\n        <MemoryRouter>\n          <TxStatus status={status} shorthand={shorthand} />\n        </MemoryRouter>\n      </I18nextProvider>,\n    )\n\n  it('renders success correctly ', () => {\n    const { container } = renderTxStatus('tesSUCCESS')\n    expect(screen.getByText('Success')).toBeInTheDocument()\n    expect(container.querySelector('svg.success')).toBeInTheDocument()\n  })\n\n  it('renders success correctly without message in shorthand mode', () => {\n    const { container } = renderTxStatus('tesSUCCESS', true)\n    expect(screen.queryByText('Success')).not.toBeInTheDocument()\n    expect(container.querySelector('svg.success')).toBeInTheDocument()\n  })\n\n  it('renders failure correctly ', () => {\n    const { container } = renderTxStatus('tecPATH_DRY')\n    expect(screen.getByText('Fail')).toBeInTheDocument()\n    expect(screen.getByText('tecPATH_DRY')).toBeInTheDocument()\n    expect(container.querySelector('svg.fail')).toBeInTheDocument()\n    expect(screen.getByRole('link')).toHaveAttribute(\n      'href',\n      'https://xrpl.org/tec-codes.html#tecPATH_DRY',\n    )\n  })\n\n  it('renders failure correctly without message in shorthand mode ', () => {\n    const { container } = renderTxStatus('tecPATH_DRY', true)\n    expect(container.querySelector('.status-message')).not.toBeInTheDocument()\n    expect(screen.getByText('tecPATH_DRY')).toBeInTheDocument()\n    expect(container.querySelector('svg.fail')).toBeInTheDocument()\n    expect(screen.queryByRole('link')).not.toBeInTheDocument() // Not a link in shorthand\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/components/test/TxToken.test.tsx",
    "content": "import { render } from '@testing-library/react'\nimport { I18nextProvider } from 'react-i18next'\nimport i18n from '../../../../i18n/testConfigEnglish'\nimport TxToken from '../TxToken'\n\nimport withdrawUSDMock from '../Transaction/AMMWithdraw/test/mock_data/withdraw_usd.json'\nimport withdrawXRPMock from '../Transaction/AMMWithdraw/test/mock_data/withdraw_xrp.json'\nimport withdrawMock from '../Transaction/AMMWithdraw/test/mock_data/withdraw.json'\nimport paymentMock from '../Transaction/Payment/test/mock_data/Payment.json'\n\nimport summarizeTransaction from '../../../../rippled/lib/txSummary'\n\ndescribe('TxToken', () => {\n  const renderTxToken = (transaction: any) =>\n    render(\n      <I18nextProvider i18n={i18n}>\n        <TxToken tx={summarizeTransaction(transaction, true)} />\n      </I18nextProvider>,\n    )\n\n  it('to render for a Payment transaction', () => {\n    const { container } = renderTxToken(paymentMock)\n\n    expect(container).toHaveTextContent('\\uE900 XRP')\n  })\n\n  it('to render for a NON Payment transaction with only issued currency', () => {\n    const { container } = renderTxToken(withdrawUSDMock)\n\n    expect(container).toHaveTextContent('USD')\n  })\n\n  it('to render for a NON Payment transaction with only XRP', () => {\n    const { container } = renderTxToken(withdrawXRPMock)\n\n    expect(container).toHaveTextContent('\\uE900 XRP')\n  })\n\n  it('to render for a NON Payment transaction with multiple amounts', () => {\n    const { container } = renderTxToken(withdrawMock)\n\n    expect(container).toHaveTextContent('\\uE900 XRP and USD')\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/css/box.scss",
    "content": "@use 'variables' as *;\n\n.box {\n  border-radius: 4px;\n  box-shadow: 0px 0px 5px 0px rgb(59 65 71 / 25%);\n}\n\n.box-header,\n.box-content {\n  padding: 16px;\n\n  @include for-size(desktop-up) {\n    padding: 24px;\n  }\n}\n\n.box-header {\n  border-bottom: 1px solid $black-20;\n}\n\n.box-header > .icon {\n  width: 24px;\n  height: 24px;\n  margin-right: 16px;\n  float: left;\n}\n\n.box-header > h1 {\n  padding: 0px;\n  margin: 0px;\n  font-size: 12px;\n  line-height: 22px;\n\n  @include for-size(desktop-up) {\n    font-size: 20px;\n  }\n}\n"
  },
  {
    "path": "src/containers/shared/css/data-tables-mobile.scss",
    "content": "@use 'variables' as *;\n\n// Mobile-responsive styles for data tables (DexTradeTable, HoldersTable, TransfersTable)\n\n// Base table styles\ntable.basic {\n  width: 100%;\n  font-size: 14px;\n\n  @include for-size(phone-only) {\n    font-size: 12px;\n  }\n\n  th,\n  td {\n    padding: 8px 12px;\n\n    @include for-size(phone-only) {\n      padding: 6px 8px;\n    }\n\n    @include for-size(tablet-portrait-up) {\n      padding: 10px 16px;\n    }\n  }\n\n  // Mobile-specific column adjustments\n  @include for-size(phone-only) {\n    .count {\n      width: 50px;\n      min-width: 50px;\n    }\n\n    .name-col {\n      min-width: 120px;\n    }\n\n    .tx-account {\n      min-width: 140px;\n    }\n\n    .tx-ledger {\n      min-width: 100px;\n    }\n\n    .tx-percent-supply {\n      min-width: 80px;\n    }\n\n    .tx-value {\n      min-width: 100px;\n    }\n\n    .tx-amount {\n      min-width: 100px;\n    }\n\n    .tx-hash {\n      min-width: 120px;\n    }\n\n    .tx-timestamp {\n      min-width: 140px;\n    }\n\n    .tx-from,\n    .tx-to {\n      min-width: 120px;\n    }\n\n    .tx-rate {\n      min-width: 100px;\n    }\n  }\n}\n\n// Specific styles for each table type\n.holders-table,\n.transfers-table,\n.dex-trades-table {\n  width: 100%;\n  -webkit-overflow-scrolling: touch;\n  overflow-x: auto;\n\n  // Custom scrollbar styling\n  &::-webkit-scrollbar {\n    height: 4px;\n  }\n\n  &::-webkit-scrollbar-track {\n    background: transparent;\n  }\n\n  &::-webkit-scrollbar-thumb {\n    border-radius: 2px;\n    background: $black-60;\n  }\n\n  &::-webkit-scrollbar-thumb:hover {\n    background: $black-50;\n  }\n\n  // Hide scrollbar on mobile for cleaner look\n  @include for-size(phone-only) {\n    padding: 0 16px;\n    margin: 0 -16px;\n    -ms-overflow-style: none; // IE/Edge\n    scrollbar-width: none; // Firefox\n\n    &::-webkit-scrollbar {\n      display: none; // Chrome/Safari\n    }\n  }\n\n  .table-wrap {\n    min-width: 100%;\n\n    @include for-size(phone-only) {\n      min-width: 600px; // Force horizontal scroll on mobile for better UX\n    }\n  }\n}\n\n// Token transaction table container\n.token-transaction-table-container {\n  width: 100%;\n\n  @include for-size(phone-only) {\n    padding: 0 16px;\n    margin: 0 -16px;\n  }\n}\n\n// Mobile card-style layout alternative (optional)\n@include for-size(phone-only) {\n  .mobile-card-view {\n    display: none; // Hidden by default, can be toggled\n\n    .card-item {\n      padding: 16px;\n      border: 1px solid $black-70;\n      border-radius: 8px;\n      margin-bottom: 12px;\n      background: $black-90;\n\n      .card-row {\n        display: flex;\n        align-items: center;\n        justify-content: space-between;\n        margin-bottom: 8px;\n\n        &:last-child {\n          margin-bottom: 0;\n        }\n\n        .label {\n          color: $black-40;\n          font-size: 12px;\n          text-transform: uppercase;\n          @include semibold;\n        }\n\n        .value {\n          color: $white;\n          font-size: 14px;\n          @include regular;\n\n          text-align: right;\n        }\n      }\n    }\n  }\n}\n\n// Pagination mobile styles\n.pagination-container {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  margin-top: 24px;\n  gap: 16px;\n\n  @include for-size(tablet-portrait-up) {\n    flex-direction: row;\n    justify-content: space-between;\n  }\n\n  .pagination-info {\n    color: $black-40;\n    font-size: 14px;\n\n    @include for-size(phone-only) {\n      font-size: 12px;\n      text-align: center;\n    }\n  }\n\n  .pagination-controls {\n    display: flex;\n    align-items: center;\n    gap: 8px;\n\n    button {\n      padding: 8px 12px;\n      border: 1px solid $black-70;\n      border-radius: 4px;\n      background: $black-90;\n      color: $white;\n      cursor: pointer;\n      font-size: 14px;\n      transition: all 0.2s ease;\n\n      @include for-size(phone-only) {\n        padding: 6px 10px;\n        font-size: 12px;\n      }\n\n      &:disabled {\n        cursor: not-allowed;\n        opacity: 0.5;\n      }\n\n      &:hover:not(:disabled) {\n        border-color: $green-30;\n        background: rgba($green-30, 0.1);\n      }\n\n      &.active {\n        border-color: $green-30;\n        background: $green-30;\n        color: $black-100;\n      }\n    }\n  }\n}\n\n// Loading states for mobile\n.mobile-loading {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  padding: 40px 20px;\n\n  @include for-size(phone-only) {\n    padding: 30px 16px;\n  }\n}\n\n// Empty states for mobile\n.mobile-empty-state {\n  padding: 40px 20px;\n  color: $black-40;\n  text-align: center;\n\n  @include for-size(phone-only) {\n    padding: 30px 16px;\n    font-size: 14px;\n  }\n\n  .empty-icon {\n    margin-bottom: 16px;\n    font-size: 48px;\n    opacity: 0.5;\n\n    @include for-size(phone-only) {\n      margin-bottom: 12px;\n      font-size: 36px;\n    }\n  }\n\n  .empty-title {\n    margin-bottom: 8px;\n    color: $white;\n    font-size: 18px;\n    @include semibold;\n\n    @include for-size(phone-only) {\n      font-size: 16px;\n    }\n  }\n\n  .empty-description {\n    font-size: 14px;\n    line-height: 1.5;\n\n    @include for-size(phone-only) {\n      font-size: 12px;\n    }\n  }\n}\n"
  },
  {
    "path": "src/containers/shared/css/data-tables-notice.scss",
    "content": "@use 'variables' as *;\n\n.notice-with-controls {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  margin-bottom: 16px;\n  gap: 12px;\n\n  .data-notice {\n    width: fit-content;\n    padding: 12px 16px;\n    border-radius: 2px;\n    border-left: 4px solid $yellow;\n    margin: 0;\n    background-color: rgb(255 193 7 / 15%);\n    color: $black-30;\n    font-size: 13px;\n    line-height: 16px;\n  }\n\n  .refresh-button {\n    flex-shrink: 0;\n    padding: 6px 12px;\n    border: 1px solid $green-60;\n    border-radius: 4px;\n    background-color: transparent;\n    color: $green-60;\n    cursor: pointer;\n    font-size: 16px;\n    line-height: 1;\n    transition: all 0.2s ease;\n\n    &:hover {\n      border-color: $green-60;\n      background-color: $green-70;\n      color: $white;\n    }\n\n    &:active {\n      background-color: $green-60;\n    }\n  }\n}\n"
  },
  {
    "path": "src/containers/shared/css/form.scss",
    "content": "@use 'variables' as *;\n\nlabel {\n  color: $black-40;\n\n  &.selected {\n    color: $white;\n    font-weight: bold;\n  }\n}\n\n.radio-group {\n  label + label {\n    margin-left: 10px;\n  }\n}\n\ninput {\n  border-radius: $border-radius;\n\n  &[type='text'] {\n    &:hover,\n    &:focus {\n      background-color: $black-80;\n    }\n\n    &:focus {\n      outline: solid 1px $blue-purple-40 !important;\n    }\n  }\n\n  &[type='radio'] {\n    height: 16px;\n    accent-color: $green;\n  }\n}\n"
  },
  {
    "path": "src/containers/shared/css/global.scss",
    "content": "// ONLY GLOBAL CSS, KEEP IT TO MINIMAL\n// CSS SHOULD BE SCOPPED TO COMPONENT\n@use 'variables' as *;\n@use 'form';\n\n/**\n * `current_symbols` is used for currency codes missing from other fonts, currently `u+e900` (XRP) and `u+e901` (BTC).\n *\n * By using unicode-range we specify which character points this font-family can be used for. When used in a style (and\n * assuming this font family is first/takes precedent), only these characters will use this font-face. Anything else\n * will fall through to the subsequent font-family.\n */\n@font-face {\n  font-family: 'currency_symbols';\n  font-style: normal;\n  font-weight: normal;\n  src:\n    url('../fonts/currency_symbols.ttf') format('truetype'),\n    url('../fonts/currency_symbols.woff') format('woff');\n  unicode-range: u+e900-e901;\n}\n\nhtml {\n  height: 100%;\n}\n\nbody {\n  height: 100%;\n  color: $white;\n}\n\n.xrpl-explorer {\n  height: 100%;\n}\n\n.app-wrapper {\n  display: flex;\n  min-height: 100%;\n  flex-direction: column;\n}\n\nbody,\ninput {\n  padding: 0px;\n  margin: 0px;\n  background-color: $black-100;\n  font-size: 16px;\n  -webkit-font-smoothing: antialiased;\n  font-style: normal;\n  letter-spacing: 0.5px;\n}\n\nbody,\ninput,\nbutton {\n  font-family:\n    'currency_symbols', 'Work Sans', system-ui, 'Segoe UI', Roboto, Oxygen-Sans,\n    Ubuntu, Cantarell, 'Helvetica Neue', sans-serif;\n}\n\n.clear {\n  clear: both;\n}\n\n* {\n  box-sizing: border-box;\n  outline: none !important; // remove blue outline in click and focus\n}\n\nh2 {\n  padding-bottom: 18px;\n  border-bottom: 1px $black-70 solid;\n  margin-top: 0;\n  color: $white;\n  font-size: 24px;\n\n  @include bold;\n}\n\nsvg.react-stockchart {\n  z-index: auto !important;\n  left: 0px;\n}\n\ndiv.react-stockchart div {\n  z-index: auto !important;\n}\n\n.async-component-error {\n  margin: 0px auto;\n  color: $black-40;\n  font-size: 16px;\n  line-height: 24px;\n  text-align: center;\n  @include bold;\n}\n\n@mixin transaction-category($category, $color, $hover, $background) {\n  .tx-category-#{$category} {\n    color: $color;\n\n    // Only have a hover color on anchors\n    @at-root a#{&}:hover {\n      color: $hover;\n    }\n\n    &.tx-label {\n      background: $background;\n    }\n  }\n}\n\n@include transaction-category(ACCOUNT, $magenta, $magenta-30, $magenta-90);\n@include transaction-category(DEX, $blue, $blue-30, $blue-90);\n@include transaction-category(PAYMENT, $green, $green-30, $green-90);\n@include transaction-category(\n  NFT,\n  $blue-purple,\n  $blue-purple-30,\n  $blue-purple-90\n);\n@include transaction-category(XCHAIN, $yellow, $yellow-30, $yellow-90);\n@include transaction-category(PSEUDO, $white, $white, $black-80);\n@include transaction-category(OTHER, $black-50, $black-30, $black-90);\n@include transaction-category(MPT, $blue, $blue-30, $blue-90);\n\n.tx-result {\n  &.success {\n    color: $green;\n  }\n\n  &.fail {\n    color: $orange-40;\n  }\n}\n\n.label {\n  margin-bottom: 8px;\n}\n\n.hidden {\n  display: none;\n}\n\n.flex-table {\n  display: flex;\n  flex-direction: column;\n\n  .row {\n    display: flex;\n    justify-content: space-between;\n    margin-left: 5px;\n\n    .value {\n      font-size: 14px;\n    }\n  }\n\n  .spacer {\n    margin-bottom: 15px;\n  }\n}\n\n.btn {\n  padding: 12px 16px;\n  border: solid 1px $white;\n  border-radius: $border-radius;\n  background: $black;\n  color: $white;\n  cursor: pointer;\n  font-size: 14px;\n  line-height: 21px;\n\n  &:hover {\n    background: $black-80;\n  }\n}\n\na,\n.btn-link {\n  border: none;\n  background: transparent;\n  color: $green-30;\n  text-decoration: none;\n\n  &:hover {\n    background: transparent;\n    color: $green-50;\n  }\n\n  &.external, // Force the external icon. Useful for when the protocol is unknown like with NFTs.\n  &[href^=\"http://\"],\n  &[href^=\"https://\"]\n  {\n    &::after {\n      display: inline-block;\n      width: 1em;\n      min-width: 1em;\n      height: 1em;\n      margin-left: 4px;\n      background-color: currentcolor;\n      content: '';\n      mask-image: url('../images/external_link.svg');\n      mask-position: center;\n      mask-repeat: no-repeat;\n      mask-size: contain;\n      vertical-align: text-top;\n    }\n\n    &[data-title^='GitHub'] {\n      &::before {\n        display: inline-block;\n        width: 1em;\n        height: 1em;\n        margin-right: 4px;\n        background-color: currentcolor;\n        content: '';\n        mask-image: url('../images/github.svg');\n        mask-position: center;\n        mask-repeat: no-repeat;\n        mask-size: contain;\n        vertical-align: text-top;\n      }\n    }\n  }\n}\n\n/**\nWorkaround to have the effect nested anchor tags (invalid html).\n\n1. Add the class `anchor-mask` to the container you would normally wrap in an <a> tag.\n2. Add the class `mask-overlay` to to the anchor.\n\nThis makes the `mask-overlay` sit on top of the `anchor-mask` and then places any other \"nested\" anchors on top of the overlay\n*/\n\n.anchor-mask {\n  position: relative;\n\n  a {\n    position: relative;\n    z-index: 10;\n  }\n\n  a.mask-overlay {\n    position: absolute;\n    z-index: 5;\n    inset: 0;\n  }\n}\n\n.badge {\n  padding: 2px 12px;\n  border-radius: 30px;\n  margin-left: 12px;\n  font-size: 14px;\n  @include bold;\n}\n\n.section {\n  margin: 0 8px;\n\n  @include for-size(tablet-landscape-up) {\n    width: calc(100% - 15px);\n    margin: 0 auto;\n  }\n\n  @include for-size(big-desktop-up) {\n    max-width: $desktop-upper-boundary;\n  }\n}\n\n.warning {\n  display: flex;\n  align-items: center;\n  color: $orange;\n  font-size: 12px;\n  line-height: 20px;\n  text-transform: uppercase;\n  @include bold;\n\n  img {\n    transform: scale(0.5);\n  }\n}\n\n// A transactions destination tag.  Used like rafdasdfas:424242\n.dt {\n  @include medium;\n\n  color: $black-40;\n  font-size: 0.9em;\n}\n"
  },
  {
    "path": "src/containers/shared/css/info-card.scss",
    "content": "@use './variables' as *;\n\n/*\n * Shared styles for info cards that display a title with an icon and a list\n * of label/value rows separated by horizontal dividers.\n *\n * Usage:\n *   @use '../shared/css/info-card';\n *\n *   <div class=\"info-card\">\n *     <h3 class=\"info-card-title\">\n *       <Icon class=\"info-card-icon\" />\n *       Title\n *     </h3>\n *     <div class=\"info-card-rows\">\n *       <div class=\"info-card-row\">\n *         <span class=\"info-card-label\">Label</span>\n *         <span class=\"info-card-value\">Value</span>\n *       </div>\n *       ...more rows\n *     </div>\n *   </div>\n *\n * Dividers between rows are added automatically via CSS — do not include\n * separator elements.\n *\n * Modifier classes for values:\n *   info-card-value-green   — success/active state\n *   info-card-value-orange  — warning/attention state\n *   info-card-value-link    — clickable link appearance\n *\n * Use info-card-subtitle for secondary text within a value cell.\n */\n\n.info-card {\n  padding: 24px;\n  border: 1px solid $black-60;\n  border-radius: 8px;\n  background: $black-80;\n\n  .info-card-title {\n    display: flex;\n    align-items: center;\n    margin: 0 0 16px;\n    color: $white;\n    font-size: 20px;\n    gap: 8px;\n    @include bold;\n  }\n\n  .info-card-icon {\n    width: 24px;\n    height: 24px;\n    flex-shrink: 0;\n  }\n\n  .info-card-rows {\n    display: flex;\n    flex-direction: column;\n  }\n\n  .info-card-row {\n    display: flex;\n    align-items: flex-start;\n    justify-content: space-between;\n    padding: 10px 0;\n    gap: 4px;\n\n    &:not(:last-child) {\n      border-bottom: 1px solid $black-60;\n    }\n\n    &:first-child {\n      padding-top: 0;\n    }\n\n    &:last-child {\n      padding-bottom: 0;\n    }\n  }\n\n  .info-card-label {\n    display: flex;\n    align-items: center;\n    color: $black-40;\n    font-size: 14px;\n    line-height: 1.5;\n    text-transform: uppercase;\n    @include semibold;\n\n    .hover {\n      width: 14px;\n      height: 14px;\n      margin-left: 4px;\n      cursor: default;\n    }\n  }\n\n  .info-card-value {\n    color: $white;\n    font-size: 14px;\n    line-height: 1.5;\n    text-align: right;\n    word-break: break-all;\n    @include regular;\n\n    &-green {\n      color: $green;\n    }\n\n    &-orange {\n      color: $orange;\n    }\n\n    &-link {\n      color: $green-30;\n\n      a {\n        color: $green-30;\n      }\n    }\n  }\n\n  .info-card-subtitle {\n    margin-top: 4px;\n    color: $black-40;\n    font-size: 12px;\n    line-height: 1.5;\n    @include regular;\n  }\n}\n"
  },
  {
    "path": "src/containers/shared/css/loader.scss",
    "content": ".loader {\n  position: relative;\n  width: 100%;\n  height: 100%;\n  min-height: 40px;\n  opacity: 0.8;\n  pointer-events: none;\n  text-align: center;\n  transition: opacity 0.3s ease;\n\n  img {\n    position: absolute;\n    top: 50%;\n    left: 50%;\n    width: 40px;\n    transform: translate(-50%, -50%);\n  }\n}\n"
  },
  {
    "path": "src/containers/shared/css/simpleTab.scss",
    "content": "@use 'variables' as *;\n\n$index-width: 324px;\n\n.simple-body {\n  display: flex;\n\n  .index {\n    width: $index-width;\n    padding: 16px;\n    border-left: 1px solid $black-70;\n    margin-bottom: 60px;\n    margin-left: -1px;\n\n    .row {\n      margin-bottom: 32px;\n\n      &:last-child {\n        margin-bottom: 0px;\n      }\n\n      .label {\n        margin-bottom: 0;\n        color: $black-40;\n        font-size: 10px;\n        line-height: 14px;\n        text-transform: uppercase;\n      }\n\n      .value {\n        overflow: hidden;\n        color: $white;\n        font-size: 14px;\n        line-height: 16px;\n        text-overflow: ellipsis;\n        white-space: nowrap;\n        @include medium;\n\n        &.account {\n          font-size: 12px;\n        }\n      }\n    }\n  }\n\n  .rows {\n    width: 100%;\n    padding: 40px 16px 0;\n    font-size: 14px;\n    line-height: 21px;\n\n    @include for-size(desktop-up) {\n      width: calc(100% - $index-width);\n      padding-right: 0;\n      border-right: 1px solid $black-70;\n      margin-bottom: 60px;\n    }\n\n    /* stylelint-disable-next-line no-descending-specificity -- more confusing to satisfy it */\n    .row {\n      &:first-child {\n        padding-top: 0;\n      }\n\n      &:not(:only-child):last-child {\n        border-bottom: none;\n      }\n\n      display: flex;\n      overflow: hidden;\n      flex-wrap: wrap;\n      justify-content: space-between;\n      padding: 15px 0;\n      border-bottom: 1px solid $black-70;\n      gap: 0 5px;\n\n      @include for-size(tablet-portrait-up) {\n        padding: 15px 15px 15px 0;\n      }\n\n      .label {\n        color: $white;\n        text-transform: capitalize;\n\n        &.unauthorize {\n          color: $red-dark;\n        }\n      }\n\n      .account {\n        display: inline-block;\n        overflow: hidden;\n        text-overflow: ellipsis;\n        vertical-align: middle;\n        white-space: nowrap;\n      }\n\n      .value {\n        @include medium;\n\n        color: $white;\n        overflow-wrap: break-word;\n        vertical-align: middle;\n\n        &.text-truncate {\n          @extend %truncate;\n        }\n\n        &.date {\n          color: $black-60;\n          @include regular;\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "src/containers/shared/css/sort.scss",
    "content": "@use 'variables' as *;\n\n.sort-header {\n  display: inline-flex;\n  align-items: center;\n  gap: 6px;\n  vertical-align: middle;\n\n  .arrow {\n    width: 16px;\n    height: 16px;\n\n    &.asc {\n      transform: rotate(180deg);\n    }\n  }\n}\n"
  },
  {
    "path": "src/containers/shared/css/table.scss",
    "content": "@use 'variables' as *;\n\ntable.basic {\n  overflow: hidden;\n  width: 100%;\n  border-top: none;\n  margin: auto;\n  border-collapse: collapse;\n  color: $white;\n  font-size: 12px;\n  letter-spacing: 0px;\n  text-align: left;\n\n  tr {\n    border-bottom: 1px solid $black-70;\n  }\n\n  td,\n  th {\n    &.right {\n      text-align: right;\n    }\n\n    &.center {\n      text-align: center;\n    }\n\n    &.text-truncate {\n      @extend %truncate;\n    }\n  }\n\n  th {\n    padding: 22px 5px;\n    color: $black-40;\n    text-align: left;\n    text-transform: uppercase;\n  }\n\n  td {\n    padding: 15px 5px;\n\n    @include for-size(tablet-portrait-up) {\n      td {\n        padding: 15px 10px;\n        color: $black-40;\n      }\n    }\n  }\n\n  .empty-message {\n    padding: 16px;\n    color: $black-40;\n    font-size: 16px;\n    text-align: center;\n  }\n}\n\ntable.token-table {\n  margin-top: 24px;\n  font-size: 14px;\n\n  .col1 {\n    width: 180px;\n    padding-bottom: 8px;\n    color: $black-40;\n    text-transform: uppercase;\n    @include semibold;\n  }\n\n  .col2 {\n    display: inline-block;\n    width: 230px;\n    padding-bottom: 8px;\n    color: $white;\n    overflow-wrap: break-word;\n  }\n}\n"
  },
  {
    "path": "src/containers/shared/css/tabs.scss",
    "content": "@use 'variables' as *;\n\n.tabs {\n  border-top: 1px solid $black-70;\n  margin: 8px auto 40px;\n  font-size: 14px;\n\n  a {\n    color: inherit;\n  }\n\n  .tab {\n    display: inline-block;\n    padding: 24px 24px 0;\n    border-top: 2px solid transparent;\n    color: $black-40;\n    cursor: pointer;\n    text-align: center;\n    text-transform: capitalize;\n\n    &:hover,\n    &:focus {\n      color: $white;\n      @include bold;\n    }\n\n    &.selected {\n      border-top: 2px solid $white;\n      color: $white;\n      @include bold;\n    }\n  }\n}\n"
  },
  {
    "path": "src/containers/shared/css/tooltip.scss",
    "content": "@use 'variables' as *;\n\n.tooltip {\n  position: absolute;\n  z-index: 1000;\n  padding: 8px 12px;\n  border-radius: 2px;\n  background: rgb(0 0 0 / 90%);\n  color: white;\n  font-size: 13px;\n  line-height: 16px;\n  @include medium;\n\n  img {\n    height: 16px;\n    margin: 0 5px;\n    vertical-align: middle;\n  }\n\n  .label {\n    text-transform: uppercase;\n  }\n\n  .pubkey {\n    overflow: hidden;\n    max-width: 100px;\n    color: $black-10;\n    font-size: 10px;\n    letter-spacing: 0;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n  }\n\n  .time {\n    color: $black-40;\n    letter-spacing: 0;\n  }\n\n  .unl {\n    color: $green;\n  }\n\n  .tx-status::before {\n    content: '\\00a0';\n  }\n\n  .account {\n    color: $black-50;\n    font-size: 10px;\n  }\n\n  &.tooltip-missing {\n    background: rgb(120 0 0 / 90%);\n  }\n\n  &.tooltip-text {\n    position: fixed;\n    max-width: 300px;\n    border: 1px solid $black-80;\n    border-radius: 4px;\n    background: $black-60;\n    filter: drop-shadow(0px 1px 2px $black-70);\n    pointer-events: none;\n  }\n}\n"
  },
  {
    "path": "src/containers/shared/css/txlabel.scss",
    "content": "@use 'variables' as *;\n\n.tx-label {\n  display: inline-flex;\n  max-width: 100%;\n  align-items: center;\n  padding: 2px 8px;\n  border: 1px solid currentcolor;\n  border-radius: 100px;\n  font-size: 14px;\n  line-height: 1;\n  @include semibold;\n\n  .tx-type-name {\n    color: $white;\n    letter-spacing: 0;\n    text-transform: uppercase;\n    @extend %truncate;\n\n    &::before {\n      content: '\\00a0';\n    }\n  }\n}\n"
  },
  {
    "path": "src/containers/shared/css/txstatus.scss",
    "content": "@use 'variables' as *;\n\n.tx-status {\n  display: inline-flex;\n  max-width: 100%;\n  align-items: center;\n\n  svg {\n    width: auto;\n    height: 1em;\n  }\n\n  .status-icon {\n    display: flex;\n    align-items: center;\n  }\n\n  .status {\n    @extend %truncate;\n\n    display: inline-block;\n    text-transform: capitalize;\n\n    &::before {\n      content: '\\00a0';\n    }\n  }\n\n  .status-message {\n    + .status-code::before {\n      content: '\\00a0-\\00a0';\n    }\n  }\n\n  .status-code {\n    color: inherit;\n  }\n\n  &.success {\n    .status-code {\n      display: none;\n    }\n  }\n\n  // Because of an optical illusion caused by white space the link icon looks to be too lower\n  &::after {\n    position: relative;\n    top: -1px;\n  }\n}\n"
  },
  {
    "path": "src/containers/shared/css/variables.scss",
    "content": "// ONLY RE-USABLE VARIABLES AND MIXINS\n\n// View breakpoints\n$phone-upper-boundary: 415px;\n$tablet-portrait-upper-boundary: 600px;\n$tablet-landscape-upper-boundary: 900px;\n$desktop-upper-boundary: 1200px;\n\n// Minimum height and width\n$min-height: 500px;\n$min-width: 375px;\n\n$border-radius: 8px;\n\n// Colors\n$black-0: #fff;\n$black-10: #f5f5f7;\n$black-20: #e0e0e1;\n$black-30: #c1c1c2;\n$black-40: #a2a2a4;\n$black-50: #838386;\n$black-60: #454549;\n$black-70: #343437;\n$black-80: #232325;\n$black-90: #111112;\n$black-100: #000;\n$black: $black-100;\n\n$green-10: #d6fae7;\n$green-20: #adf5ce;\n$green-30: #84f0b6;\n$green-40: #5beb9d;\n$green-50: #32e685;\n$green-60: #2dcf78;\n$green-70: #28b86a;\n$green-80: #1e8a50;\n$green-90: #145c35;\n$green-100: #0a2e1b;\n$green: $green-50;\n\n$blue-10: #e5f5ff;\n$blue-20: #b2e0ff;\n$blue-30: #80ccff;\n$blue-40: #4bb7ff;\n$blue-50: #19a3ff;\n$blue-60: #008ae5;\n$blue-70: #006bb2;\n$blue-80: #004d80;\n$blue-90: #002e4c;\n$blue: $blue-50;\n\n$blue-purple-10: #f0e5ff;\n$blue-purple-20: #d2b2ff;\n$blue-purple-30: #b480ff;\n$blue-purple-40: #9a52ff;\n$blue-purple-50: #7919ff;\n$blue-purple-60: #5f00e5;\n$blue-purple-70: #4a00b2;\n$blue-purple-80: #350080;\n$blue-purple-90: #20004c;\n$blue-purple: $blue-purple-40;\n\n$red-purple-10: #fbe5ff;\n$red-purple-20: #f2b2ff;\n$red-purple-30: #ea80ff;\n$red-purple-40: #e24cff;\n$red-purple-50: #d919ff;\n$red-purple-60: #c000e5;\n$red-purple-70: #9500b2;\n$red-purple-80: #6b0080;\n$red-purple-90: #40004c;\n$red-purple: $red-purple-50;\n\n$magenta-10: #ffe5f2;\n$magenta-20: #ffb2d8;\n$magenta-30: #ff80bf;\n$magenta-40: #ff4ba4;\n$magenta-50: #ff198b;\n$magenta-60: #e50071;\n$magenta-70: #b20058;\n$magenta-80: #80003f;\n$magenta-90: #4c0026;\n$magenta: $magenta-50;\n\n$orange-10: #ffeee5;\n$orange-20: #ffccb2;\n$orange-30: #ffaa80;\n$orange-40: #ff884b;\n$orange-50: #ff6719;\n$orange-60: #e54d00;\n$orange-70: #b23c00;\n$orange-80: #802b00;\n$orange-90: #4c1a00;\n$orange: $orange-50;\n\n$yellow-10: #feffe5;\n$yellow-20: #fdffb2;\n$yellow-30: #fcff80;\n$yellow-40: #fbff4c;\n$yellow-50: #faff19;\n$yellow-60: #e0e500;\n$yellow-70: #aeb200;\n$yellow-80: #7d8000;\n$yellow-90: #4b4c00;\n$yellow: $yellow-50;\n\n$red: #ff668b;\n$red-dark: #940443;\n$shadows: #23292f;\n$white: #fff;\n$white-transparent: rgb(255 255 255 / 75%);\n\n// Networks\n$testnet: $orange;\n$devnet: $blue-purple-30;\n$xahau-mainnet: $green-40;\n$xahau-testnet: $magenta-30;\n$custom: $yellow-50;\n\n// Feature Sets\n$amm: $blue;\n$nft: $blue-purple;\n$mpt: $blue;\n\n// Currency colors\n$CURRENCY_DEFAULT: #aedbf7;\n$XRP_KRW: #0f72e5;\n$XRP_USD: #2bcb96;\n$XRP_BTC: #f90;\n$XRP_ETH: #53585d;\n$XRP_USDT: #91ffdb;\n$XRP_INR: #ff8000;\n$XRP_JPY: #691fdd;\n$XRP_AUD: #ffcd00;\n$XRP_MXN: #c74444;\n$XRP_THB: #ed1c24;\n$XRP_CNY: #f23548;\n$XRP_IDR: #ce1126;\n$XRP_RUB: #0039a6;\n$XRP_BITCNY: #f88064;\n$XRP_ZAR: #000;\n$XRP_XLM: #04b5e5;\n$XRP_LTC: #b8b8b8;\n$XRP_ADA: #2d71d0;\n$XRP_BRL: #009b3a;\n$XRP_BCH: #c8e6ad;\n$XRP_ETC: #42967b;\n$XRP_REP: #551a8b;\n$XRP_GBP: #00247d;\n$XRP_QAU: #0f73c3;\n$XRP_UAH: #ffd700;\n$XRP_CND: #00aae4;\n$XRP_EUR: #ffd600;\n$XRP_XRP: #0a93eb;\n$XRP_CAD: #ca3103;\n$XRP_OTHERS: #f52a79;\n\n// Font weights\n@mixin regular {\n  font-weight: 400;\n}\n\n@mixin medium {\n  font-weight: 500;\n}\n\n@mixin semibold {\n  font-weight: 600;\n}\n\n@mixin bold {\n  font-weight: 700;\n}\n\n%truncate {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n\n// View bucket sizes\n@mixin for-size($range) {\n  @if $range == phone-only {\n    @media (max-width: $phone-upper-boundary) {\n      @content;\n    }\n  } @else if $range == tablet-portrait-up {\n    @media (min-width: $phone-upper-boundary) {\n      @content;\n    }\n  } @else if $range == tablet-landscape-up {\n    @media (min-width: $tablet-portrait-upper-boundary) {\n      @content;\n    }\n  } @else if $range == desktop-up {\n    @media (min-width: $tablet-landscape-upper-boundary) {\n      @content;\n    }\n  } @else if $range == big-desktop-up {\n    @media (min-width: $desktop-upper-boundary) {\n      @content;\n    }\n  }\n}\n\n@mixin footnote {\n  padding: 24px 0;\n  color: $black-40;\n  font-size: 12px;\n  font-weight: 400;\n\n  @include for-size(desktop-up) {\n    font-size: 16px;\n  }\n}\n"
  },
  {
    "path": "src/containers/shared/helpers/contextFactory.ts",
    "content": "import { createContext, useContext } from 'react'\n\ntype NameProps = {\n  hook: string\n  provider: string\n}\n\nexport const contextFactory = <T>(\n  { hook, provider }: NameProps,\n  initialState?: T,\n) => {\n  const Context = createContext<T | undefined>(initialState)\n\n  const useContextFactory = (): T => {\n    const context = useContext(Context)\n\n    if (context === undefined) {\n      throw new Error(`${hook} must be used in a child of ${provider}`)\n    }\n    return context\n  }\n\n  return [Context, useContextFactory] as const\n}\n"
  },
  {
    "path": "src/containers/shared/helpers/index.ts",
    "content": "export * from './contextFactory'\n"
  },
  {
    "path": "src/containers/shared/hooks/index.ts",
    "content": "import { useTranslation } from 'react-i18next'\nimport { useLocalStorage } from './useLocalStorage'\n\nexport * from './useLocalStorage'\n\nexport const useLanguage = () =>\n  useTranslation().i18n.resolvedLanguage || 'en-US'\n\nexport const CUSTOM_NETWORKS_STORAGE_KEY = 'explorer-custom-networks'\n\nexport const useCustomNetworks = () =>\n  useLocalStorage<string[]>(CUSTOM_NETWORKS_STORAGE_KEY, [])\n"
  },
  {
    "path": "src/containers/shared/hooks/test/useCursorPaginatedQuery.test.tsx",
    "content": "import { renderHook, act, waitFor } from '@testing-library/react'\nimport { CursorPaginationService } from '../../services/CursorPaginationService'\nimport { useCursorPaginatedQuery } from '../useCursorPaginatedQuery'\n\ndescribe('useCursorPaginatedQuery', () => {\n  let mockService: CursorPaginationService<any>\n  let mockGetPage: jest.Mock\n  let mockClearCache: jest.Mock\n\n  beforeEach(() => {\n    jest.clearAllMocks()\n    mockGetPage = jest.fn().mockResolvedValue({\n      items: [{ id: 1 }, { id: 2 }],\n      totalItems: 20,\n      hasMore: true,\n      isLoading: false,\n    })\n    mockClearCache = jest.fn()\n    mockService = {\n      getPage: mockGetPage,\n      clearCache: mockClearCache,\n    } as any\n  })\n\n  it('fetches page 1 on initial render', async () => {\n    const { result } = renderHook(() =>\n      useCursorPaginatedQuery({\n        service: mockService,\n        id: 'testId',\n        pageSize: 10,\n      }),\n    )\n\n    await waitFor(() => {\n      expect(result.current.data).toBeDefined()\n    })\n\n    expect(mockGetPage).toHaveBeenCalledWith(\n      'testId',\n      1,\n      10,\n      'timestamp',\n      'desc',\n    )\n    expect(result.current.page).toBe(1)\n    expect(result.current.sortField).toBe('timestamp')\n    expect(result.current.sortOrder).toBe('desc')\n  })\n\n  it('uses custom initial sort field and order', async () => {\n    const { result } = renderHook(() =>\n      useCursorPaginatedQuery({\n        service: mockService,\n        id: 'testId',\n        pageSize: 10,\n        initialSortField: 'amount',\n        initialSortOrder: 'asc',\n      }),\n    )\n\n    await waitFor(() => {\n      expect(result.current.data).toBeDefined()\n    })\n\n    expect(mockGetPage).toHaveBeenCalledWith('testId', 1, 10, 'amount', 'asc')\n    expect(result.current.sortField).toBe('amount')\n    expect(result.current.sortOrder).toBe('asc')\n  })\n\n  it('does not fetch when disabled', () => {\n    renderHook(() =>\n      useCursorPaginatedQuery({\n        service: mockService,\n        id: 'testId',\n        pageSize: 10,\n        enabled: false,\n      }),\n    )\n\n    expect(mockGetPage).not.toHaveBeenCalled()\n  })\n\n  it('resets page to 1 and clears cache when sort field changes', async () => {\n    const { result } = renderHook(() =>\n      useCursorPaginatedQuery({\n        service: mockService,\n        id: 'testId',\n        pageSize: 10,\n      }),\n    )\n\n    await waitFor(() => {\n      expect(result.current.data).toBeDefined()\n    })\n\n    act(() => {\n      result.current.setPage(2)\n    })\n    expect(result.current.page).toBe(2)\n\n    act(() => {\n      result.current.setSortField('amount')\n    })\n\n    expect(result.current.page).toBe(1)\n    expect(result.current.sortField).toBe('amount')\n    expect(mockClearCache).toHaveBeenCalled()\n  })\n\n  it('resets page to 1 and clears cache when sort order changes', async () => {\n    const { result } = renderHook(() =>\n      useCursorPaginatedQuery({\n        service: mockService,\n        id: 'testId',\n        pageSize: 10,\n      }),\n    )\n\n    await waitFor(() => {\n      expect(result.current.data).toBeDefined()\n    })\n\n    act(() => {\n      result.current.setPage(3)\n    })\n\n    act(() => {\n      result.current.setSortOrder('asc')\n    })\n\n    expect(result.current.page).toBe(1)\n    expect(result.current.sortOrder).toBe('asc')\n    expect(mockClearCache).toHaveBeenCalled()\n  })\n\n  it('clears cache and resets page on refresh', async () => {\n    const { result } = renderHook(() =>\n      useCursorPaginatedQuery({\n        service: mockService,\n        id: 'testId',\n        pageSize: 10,\n      }),\n    )\n\n    await waitFor(() => {\n      expect(result.current.data).toBeDefined()\n    })\n\n    act(() => {\n      result.current.setPage(5)\n    })\n\n    act(() => {\n      result.current.refresh()\n    })\n\n    expect(result.current.page).toBe(1)\n    expect(mockClearCache).toHaveBeenCalled()\n  })\n\n  it('shows loading on sort change', async () => {\n    const { result } = renderHook(() =>\n      useCursorPaginatedQuery({\n        service: mockService,\n        id: 'testId',\n        pageSize: 10,\n      }),\n    )\n\n    await waitFor(() => {\n      expect(result.current.isLoading).toBe(false)\n    })\n\n    act(() => {\n      result.current.setSortField('amount')\n    })\n\n    expect(result.current.isLoading).toBe(true)\n  })\n\n  it('shows loading on refresh', async () => {\n    const { result } = renderHook(() =>\n      useCursorPaginatedQuery({\n        service: mockService,\n        id: 'testId',\n        pageSize: 10,\n      }),\n    )\n\n    await waitFor(() => {\n      expect(result.current.isLoading).toBe(false)\n    })\n\n    act(() => {\n      result.current.refresh()\n    })\n\n    expect(result.current.isLoading).toBe(true)\n  })\n\n  it('does not show loading on page change (no flash)', async () => {\n    const { result } = renderHook(() =>\n      useCursorPaginatedQuery({\n        service: mockService,\n        id: 'testId',\n        pageSize: 10,\n      }),\n    )\n\n    await waitFor(() => {\n      expect(result.current.isLoading).toBe(false)\n    })\n\n    act(() => {\n      result.current.setPage(2)\n    })\n\n    // isLoading stays false — previous data remains visible\n    expect(result.current.isLoading).toBe(false)\n  })\n\n  it('fetches new data when page changes', async () => {\n    const { result } = renderHook(() =>\n      useCursorPaginatedQuery({\n        service: mockService,\n        id: 'testId',\n        pageSize: 10,\n      }),\n    )\n\n    await waitFor(() => {\n      expect(result.current.data).toBeDefined()\n    })\n\n    mockGetPage.mockClear()\n\n    act(() => {\n      result.current.setPage(2)\n    })\n\n    await waitFor(() => {\n      expect(mockGetPage).toHaveBeenCalledWith(\n        'testId',\n        2,\n        10,\n        'timestamp',\n        'desc',\n      )\n    })\n  })\n\n  it('sets data to undefined on fetch error', async () => {\n    mockGetPage.mockRejectedValueOnce(new Error('fetch failed'))\n\n    const { result } = renderHook(() =>\n      useCursorPaginatedQuery({\n        service: mockService,\n        id: 'testId',\n        pageSize: 10,\n      }),\n    )\n\n    await waitFor(() => {\n      expect(result.current.isLoading).toBe(false)\n    })\n\n    expect(result.current.data).toBeUndefined()\n  })\n\n  it('ignores stale response after unmount', async () => {\n    let resolveGetPage: (value: any) => void\n    mockGetPage.mockImplementation(\n      () =>\n        new Promise((resolve) => {\n          resolveGetPage = resolve\n        }),\n    )\n\n    const { result, unmount } = renderHook(() =>\n      useCursorPaginatedQuery({\n        service: mockService,\n        id: 'testId',\n        pageSize: 10,\n      }),\n    )\n\n    expect(result.current.isLoading).toBe(true)\n\n    unmount()\n\n    // Resolve after unmount — should not throw or update state\n    act(() => {\n      resolveGetPage!({\n        items: [{ id: 99 }],\n        totalItems: 1,\n        hasMore: false,\n        isLoading: false,\n      })\n    })\n\n    // No error thrown — stale response was ignored\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/hooks/test/useTokenToUSDRate.test.tsx",
    "content": "import { renderHook, waitFor } from '@testing-library/react'\nimport { QueryClient, QueryClientProvider } from 'react-query'\nimport { useTokenToUSDRate } from '../useTokenToUSDRate'\nimport * as useXRPToUSDRateModule from '../useXRPToUSDRate'\n\njest.mock('../useXRPToUSDRate')\nconst mockUseXRPToUSDRate = useXRPToUSDRateModule.useXRPToUSDRate as jest.Mock\n\n// Mock global fetch\nconst mockFetch = jest.fn()\nglobal.fetch = mockFetch\n\nconst createWrapper =\n  (\n    queryClient = new QueryClient({\n      defaultOptions: { queries: { retry: 0 } },\n    }),\n  ) =>\n  ({ children }: { children: React.ReactNode }) => (\n    <QueryClientProvider client={queryClient}>{children}</QueryClientProvider>\n  )\n\ndescribe('useTokenToUSDRate', () => {\n  beforeEach(() => {\n    jest.clearAllMocks()\n    mockUseXRPToUSDRate.mockReturnValue(2.5) // XRP = $2.50\n    process.env.VITE_ENVIRONMENT = 'mainnet'\n  })\n\n  describe('Special Currencies', () => {\n    it('returns XRP/USD rate directly for XRP', () => {\n      const { result } = renderHook(\n        () => useTokenToUSDRate({ currency: 'XRP' }),\n        {\n          wrapper: createWrapper(),\n        },\n      )\n      expect(result.current).toEqual({\n        rate: 2.5,\n        isAvailable: true,\n        isLoading: false,\n      })\n    })\n\n    it('returns 1:1 rate for RLUSD stablecoin', () => {\n      const { result } = renderHook(\n        () => useTokenToUSDRate({ currency: 'RLUSD', issuer: 'rSomeIssuer' }),\n        { wrapper: createWrapper() },\n      )\n      expect(result.current).toEqual({\n        rate: 1,\n        isAvailable: true,\n        isLoading: false,\n      })\n    })\n  })\n\n  describe('LOS API - Positive Cases', () => {\n    it('fetches token price and converts to USD', async () => {\n      mockFetch.mockResolvedValueOnce({\n        ok: true,\n        json: () => Promise.resolve({ price: '0.5' }), // 0.5 XRP per token\n      })\n\n      const { result } = renderHook(\n        () => useTokenToUSDRate({ currency: 'USD', issuer: 'rIssuer123' }),\n        { wrapper: createWrapper() },\n      )\n\n      await waitFor(() => expect(result.current.isLoading).toBe(false))\n      // 0.5 XRP * $2.50/XRP = $1.25\n      expect(result.current).toEqual({\n        rate: 1.25,\n        isAvailable: true,\n        isLoading: false,\n      })\n    })\n  })\n\n  describe('LOS API - Negative Cases', () => {\n    it('returns unavailable when API returns no price', async () => {\n      mockFetch.mockResolvedValueOnce({\n        ok: true,\n        json: () => Promise.resolve({}), // No price field\n      })\n\n      const { result } = renderHook(\n        () => useTokenToUSDRate({ currency: 'RARE', issuer: 'rIssuer456' }),\n        { wrapper: createWrapper() },\n      )\n\n      await waitFor(() => expect(result.current.isLoading).toBe(false))\n      expect(result.current).toEqual({\n        rate: 0,\n        isAvailable: false,\n        isLoading: false,\n      })\n    })\n\n    it('returns unavailable when API request fails', async () => {\n      mockFetch.mockResolvedValueOnce({\n        ok: false,\n        statusText: 'Not Found',\n      })\n\n      const { result } = renderHook(\n        () => useTokenToUSDRate({ currency: 'UNKNOWN', issuer: 'rIssuer789' }),\n        { wrapper: createWrapper() },\n      )\n\n      await waitFor(() => expect(result.current.isLoading).toBe(false))\n      expect(result.current).toEqual({\n        rate: 0,\n        isAvailable: false,\n        isLoading: false,\n      })\n    })\n\n    it('returns unavailable for token without issuer', () => {\n      const { result } = renderHook(\n        () => useTokenToUSDRate({ currency: 'FOO' }), // No issuer\n        { wrapper: createWrapper() },\n      )\n      expect(result.current).toEqual({\n        rate: 0,\n        isAvailable: false,\n        isLoading: false,\n      })\n      expect(mockFetch).not.toHaveBeenCalled()\n    })\n  })\n\n  describe('Non-Mainnet Environment', () => {\n    it('returns mock rate for tokens on non-mainnet', () => {\n      process.env.VITE_ENVIRONMENT = 'testnet'\n\n      const { result } = renderHook(\n        () => useTokenToUSDRate({ currency: 'TEST', issuer: 'rTestIssuer' }),\n        { wrapper: createWrapper() },\n      )\n\n      expect(result.current).toEqual({\n        rate: 1.5,\n        isAvailable: true,\n        isLoading: false,\n      })\n      expect(mockFetch).not.toHaveBeenCalled()\n    })\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/hooks/test/useXRPToUSDRate.test.tsx",
    "content": "import { renderHook, waitFor } from '@testing-library/react'\nimport { QueryClient, QueryClientProvider } from 'react-query'\nimport { useXRPToUSDRate } from '../useXRPToUSDRate'\nimport SocketContext from '../../SocketContext'\nimport * as rippled from '../../../../rippled/lib/rippled'\nimport Log from '../../log'\n\njest.mock('../../../../rippled/lib/rippled')\njest.mock('../../log')\n\nconst mockedGetAccountLines = rippled.getAccountLines as jest.Mock\n\nconst createWrapper =\n  (socket: any = {}, queryClient = new QueryClient()) =>\n  ({ children }: { children: React.ReactNode }) => (\n    <SocketContext.Provider value={socket}>\n      <QueryClientProvider client={queryClient}>{children}</QueryClientProvider>\n    </SocketContext.Provider>\n  )\n\ndescribe('useXRPToUSDRate', () => {\n  beforeEach(() => {\n    jest.clearAllMocks()\n    process.env.VITE_ENVIRONMENT = 'mainnet'\n  })\n\n  it('returns 0.0 if no lines available', async () => {\n    mockedGetAccountLines.mockResolvedValue({ lines: [] })\n    const { result } = renderHook(() => useXRPToUSDRate(), {\n      wrapper: createWrapper(),\n    })\n    await waitFor(() => expect(result.current).toBe(0.0))\n  })\n\n  it('returns 1.5 if not mainnet', () => {\n    process.env.VITE_ENVIRONMENT = 'dev'\n    const { result } = renderHook(() => useXRPToUSDRate(), {\n      wrapper: createWrapper(),\n    })\n    expect(result.current).toBe(1.5)\n  })\n\n  it('fetches XRP/USD rate if mainnet', async () => {\n    mockedGetAccountLines.mockResolvedValue({ lines: [{ limit: 2.3 }] })\n    const { result } = renderHook(() => useXRPToUSDRate(), {\n      wrapper: createWrapper({}),\n    })\n    await waitFor(() => expect(result.current).toBe(2.3))\n  })\n\n  it('falls back to last successful rate on error', async () => {\n    mockedGetAccountLines\n      .mockResolvedValueOnce({ lines: [{ limit: 2.1 }] })\n      .mockRejectedValueOnce(new Error('network error'))\n\n    const queryClient = new QueryClient({\n      defaultOptions: { queries: { retry: 0 } },\n    })\n    const { result } = renderHook(() => useXRPToUSDRate(), {\n      wrapper: createWrapper({}, queryClient),\n    })\n\n    // First fetch succeeds\n    await waitFor(() => expect(result.current).toBe(2.1))\n\n    // Force useQuery to refetch\n    queryClient.invalidateQueries('XRPToUSDRate')\n\n    await waitFor(() => {\n      expect(result.current).toBe(2.1)\n      expect(Log.error).toHaveBeenCalledTimes(1)\n    })\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/hooks/useCursorPaginatedQuery.ts",
    "content": "import { useState, useEffect, useCallback } from 'react'\nimport {\n  CursorPaginationService,\n  PaginationResult,\n} from '../services/CursorPaginationService'\n\ninterface UseCursorPaginatedQueryOptions<T> {\n  /** The pagination service instance */\n  service: CursorPaginationService<T>\n  /** Identifier passed to the service (e.g., token ID, AMM account ID) */\n  id: string\n  /** Items per page */\n  pageSize: number\n  /** Whether fetching is enabled */\n  enabled?: boolean\n  /** Initial sort field */\n  initialSortField?: string\n  /** Initial sort order */\n  initialSortOrder?: 'asc' | 'desc'\n}\n\ninterface UseCursorPaginatedQueryResult<T> {\n  data: PaginationResult<T> | undefined\n  isLoading: boolean\n  page: number\n  setPage: (page: number) => void\n  sortField: string\n  setSortField: (field: string) => void\n  sortOrder: 'asc' | 'desc'\n  setSortOrder: (order: 'asc' | 'desc') => void\n  refresh: () => void\n}\n\n/**\n * React bridge for CursorPaginationService. Manages page/sort/refresh state\n * and data fetching so each consumer doesn't duplicate ~70 lines of\n * useState/useEffect/useCallback boilerplate.\n *\n * Used by IOU (2), MPT (1), and AMM Pool (3) pages.\n *\n * Page changes keep previous data visible (no loading flash).\n * Sort changes and refresh show a loader because the cache is cleared.\n */\nexport function useCursorPaginatedQuery<T>({\n  service,\n  id,\n  pageSize,\n  enabled = true,\n  initialSortField = 'timestamp',\n  initialSortOrder = 'desc',\n}: UseCursorPaginatedQueryOptions<T>): UseCursorPaginatedQueryResult<T> {\n  const [page, setPage] = useState(1)\n  const [sortField, setSortFieldState] = useState(initialSortField)\n  const [sortOrder, setSortOrderState] = useState<'asc' | 'desc'>(\n    initialSortOrder,\n  )\n  const [refreshCount, setRefreshCount] = useState(0)\n  const [data, setData] = useState<PaginationResult<T>>()\n  const [isLoading, setIsLoading] = useState(true)\n\n  const setSortField = useCallback(\n    (field: string) => {\n      setSortFieldState(field)\n      setPage(1)\n      setIsLoading(true)\n      service.clearCache()\n    },\n    [service],\n  )\n\n  const setSortOrder = useCallback(\n    (order: 'asc' | 'desc') => {\n      setSortOrderState(order)\n      setPage(1)\n      setIsLoading(true)\n      service.clearCache()\n    },\n    [service],\n  )\n\n  const refresh = useCallback(() => {\n    service.clearCache()\n    setPage(1)\n    setIsLoading(true)\n    setRefreshCount((c) => c + 1)\n  }, [service])\n\n  useEffect(() => {\n    if (!enabled) {\n      return undefined\n    }\n\n    let cancelled = false\n\n    service\n      .getPage(id, page, pageSize, sortField, sortOrder)\n      .then((result) => {\n        if (!cancelled) {\n          setData(result)\n          setIsLoading(false)\n        }\n      })\n      .catch(() => {\n        if (!cancelled) {\n          setData(undefined)\n          setIsLoading(false)\n        }\n      })\n\n    return () => {\n      cancelled = true\n    }\n  }, [enabled, service, id, page, pageSize, sortField, sortOrder, refreshCount])\n\n  return {\n    data,\n    isLoading,\n    page,\n    setPage,\n    sortField,\n    setSortField,\n    sortOrder,\n    setSortOrder,\n    refresh,\n  }\n}\n"
  },
  {
    "path": "src/containers/shared/hooks/useLocalStorage.ts",
    "content": "import { useState, useEffect } from 'react'\n\nfunction getStorageValue<T>(key: string, defaultValue: T): T | undefined {\n  // getting stored value\n  const saved = localStorage.getItem(key)\n  const initial = saved && JSON.parse(saved)\n  return initial || defaultValue\n}\n\nexport const useLocalStorage = <T>(\n  key: string,\n  defaultValue: T,\n): [T | undefined, Function] => {\n  const [value, setValue] = useState<T | undefined>(() =>\n    getStorageValue(key, defaultValue),\n  )\n\n  useEffect(() => {\n    // storing input name\n    localStorage.setItem(key, JSON.stringify(value))\n  }, [key, value])\n\n  return [value, setValue]\n}\n"
  },
  {
    "path": "src/containers/shared/hooks/usePreviousWithPausing.tsx",
    "content": "import { useLayoutEffect, useState } from 'react'\n\n/**\n * A hook that prevents a value from being updated until it is unpaused.\n * @param value - The value that is applied when paused is false\n * @param paused - Should the value be updated\n */\nexport function usePreviousWithPausing<T = any[]>(\n  value: T,\n  paused: boolean,\n): T | undefined {\n  const [val, setVal] = useState<T>()\n\n  useLayoutEffect(() => {\n    if (!paused) {\n      setVal(value)\n    }\n  }, [paused, value]) // this code will run when the value of 'value' changes\n\n  return val // in the end, return the current ref value.\n}\n"
  },
  {
    "path": "src/containers/shared/hooks/useTokenToUSDRate.ts",
    "content": "import { useQuery } from 'react-query'\nimport { useXRPToUSDRate } from './useXRPToUSDRate'\nimport Log from '../log'\n\nconst FETCH_INTERVAL_MILLIS = 60 * 1000 // 1 minute\n\n/**\n * Fetches token price from LOS API\n * The API returns the price of the token in XRP\n */\nconst fetchTokenPriceInXRP = async (\n  currency: string,\n  issuer: string,\n): Promise<number> => {\n  const response = await fetch(\n    `${process.env.VITE_LOS_URL}/tokens/${currency}.${issuer}`,\n  )\n\n  if (!response.ok) {\n    throw new Error(`Failed to fetch token price: ${response.statusText}`)\n  }\n\n  const data = await response.json()\n  return Number(data?.price) || 0\n}\n\ninterface TokenInfo {\n  currency: string\n  issuer?: string\n}\n\ninterface TokenToUSDRateResult {\n  rate: number\n  isAvailable: boolean\n  isLoading: boolean\n}\n\n/**\n * Returns the current exchange rate for a token to USD.\n * First fetches the token price in XRP from LOS API,\n * then converts to USD using the XRP to USD rate.\n *\n * @param token - The token info containing currency and optional issuer\n * @returns Object containing the USD rate, availability status, and loading state\n */\nexport function useTokenToUSDRate(\n  token: TokenInfo | undefined,\n): TokenToUSDRateResult {\n  const xrpToUsdRate = useXRPToUSDRate()\n  const isMainnet = process.env.VITE_ENVIRONMENT === 'mainnet'\n\n  const currency = token?.currency\n  const issuer = token?.issuer\n\n  // Only fetch for non-XRP, non-RLUSD tokens with an issuer on mainnet\n  const shouldFetch =\n    isMainnet &&\n    !!currency &&\n    currency !== 'XRP' &&\n    currency !== 'RLUSD' &&\n    !!issuer\n\n  const {\n    data: priceInXRP,\n    isLoading,\n    isFetched,\n  } = useQuery(\n    ['tokenPriceInXRP', currency, issuer],\n    () => fetchTokenPriceInXRP(currency!, issuer!),\n    {\n      enabled: shouldFetch,\n      refetchInterval: FETCH_INTERVAL_MILLIS,\n      staleTime: FETCH_INTERVAL_MILLIS,\n      onError: (error) => Log.error(error),\n    },\n  )\n\n  // XRP: use direct XRP to USD rate\n  if (currency === 'XRP') {\n    return { rate: xrpToUsdRate, isAvailable: true, isLoading: false }\n  }\n\n  // RLUSD: stablecoin pegged 1:1 with USD\n  if (currency === 'RLUSD') {\n    return { rate: 1, isAvailable: true, isLoading: false }\n  }\n\n  // For non-mainnet, return a mock rate for testing\n  if (!isMainnet && currency && issuer) {\n    return { rate: 1.5, isAvailable: true, isLoading: false }\n  }\n\n  // For tokens that need API fetch\n  if (shouldFetch) {\n    // Still loading\n    if (isLoading || !isFetched) {\n      return { rate: 0, isAvailable: false, isLoading: true }\n    }\n\n    // Fetched successfully with a valid price\n    if (priceInXRP && priceInXRP > 0) {\n      return {\n        rate: priceInXRP * xrpToUsdRate,\n        isAvailable: true,\n        isLoading: false,\n      }\n    }\n\n    // Fetched but no price available\n    return { rate: 0, isAvailable: false, isLoading: false }\n  }\n\n  // No conversion available (e.g., token without issuer on mainnet)\n  return { rate: 0, isAvailable: false, isLoading: false }\n}\n"
  },
  {
    "path": "src/containers/shared/hooks/useXRPToUSDRate.ts",
    "content": "import { useContext, useState } from 'react'\nimport { useQuery } from 'react-query'\nimport SocketContext from '../SocketContext'\nimport { getAccountLines } from '../../../rippled/lib/rippled'\nimport Log from '../log'\n\nconst FETCH_INTERVAL_MILLIS = 5 * 1000 // 1 minute\nconst XRP_USD_ORACLE_ACCOUNT = 'rXUMMaPpZqPutoRszR29jtC8amWq3APkx'\n\nconst fetchXRPToUSDRate = async (rippledSocket: any) => {\n  const accountLines = await getAccountLines(\n    rippledSocket,\n    XRP_USD_ORACLE_ACCOUNT,\n    1,\n  )\n\n  return accountLines.lines[0]?.limit ?? 0.0\n}\n\n/**\n * Returns the current exchange rate for XRP to USD.\n * Retries {@link FETCH_RETRY_COUNT} times on failure and falls back to the last successful value if fetching fails.\n */\nexport function useXRPToUSDRate(): number {\n  const isMainnet = process.env.VITE_ENVIRONMENT === 'mainnet'\n\n  const rippledSocket = useContext(SocketContext)\n  const [lastRate, setLastRate] = useState<number>(0.0)\n\n  const { data } = useQuery(\n    ['XRPToUSDRate'],\n    () => fetchXRPToUSDRate(rippledSocket),\n    {\n      enabled: isMainnet,\n      refetchInterval: FETCH_INTERVAL_MILLIS,\n      onSuccess: (rate: number) => setLastRate(rate), // store the last successfully fetched rate\n      onError: (error) => Log.error(error), // do nothing, last rate stays\n    },\n  )\n\n  if (!isMainnet) {\n    return 1.5 // This is chosen randomly for non-mainnet environments\n  }\n\n  return data ?? lastRate\n}\n"
  },
  {
    "path": "src/containers/shared/log.ts",
    "content": "import debug from 'debug'\n\nconst BASE = 'xrpl-debug'\nconst COLOURS = {\n  trace: 'lightblue',\n  info: 'blue',\n  warn: 'orange',\n  error: 'red',\n}\n\nclass Log {\n  debuggers = {}\n\n  getDebugger(level) {\n    if (!this.debuggers[level]) {\n      this.debuggers[level] = debug(`${BASE}:${level}`)\n      this.debuggers[level].color = COLOURS[level]\n    }\n\n    return this.debuggers[level]\n  }\n\n  generateMessage(level, message, source?) {\n    const log = this.getDebugger(level)\n    return source ? log(source, message) : log(message)\n  }\n\n  trace(message, source?) {\n    return this.generateMessage('trace', message, source)\n  }\n\n  info(message, source?) {\n    return this.generateMessage('info', message, source)\n  }\n\n  warn(message, source?) {\n    return this.generateMessage('warn', message, source)\n  }\n\n  error(message, source?) {\n    return this.generateMessage('error', message, source)\n  }\n}\n\nconst logger = new Log()\n\nexport default logger\n"
  },
  {
    "path": "src/containers/shared/losTypes.ts",
    "content": "interface SocialLink {\n  type: string\n  url: string\n}\nexport interface LOSToken {\n  currency: string\n  issuer_account: string\n  name?: string\n  asset_class?: string\n  asset_subclass?: string\n  price_change?: number\n  daily_trades?: string\n  icon?: string\n  ttl?: number\n  social_links?: SocialLink[]\n  trustlines: number\n  transfer_fee?: number\n  issuer_domain?: string\n  issuer_name?: string\n  tvl_xrp?: number\n  tvl_usd?: string\n  market_cap?: string\n  market_cap_usd?: string\n  holders?: number\n  circ_supply?: string\n  daily_volume?: string\n  daily_volume_usd?: string\n  supply?: string\n  trust_level?: number\n  price?: string\n  price_usd?: string\n  index: number\n}\n"
  },
  {
    "path": "src/containers/shared/metaParser.tsx",
    "content": "import type { BaseTransaction } from 'xrpl'\nimport { XRP_BASE } from './transactionUtils'\nimport { ExplorerAmount } from './types'\n\nexport const LedgerEntryTypes = {\n  AccountRoot: 'AccountRoot',\n  RippledState: 'RippleState',\n  AMM: 'AMM',\n}\n// TODO: fix fee logic - filter out the fee only nodes - make sure fee isnt included in xrp deposits/withdraws\n\nexport function getAuthAccounts(tx: any) {\n  return tx.AuthAccounts?.map((acc: any) => acc?.AuthAccount?.Account)\n}\n\n/*\nGets the AMM account ID\n */\nexport function getAMMAccountID(meta: any) {\n  const account = findNodes(meta, LedgerEntryTypes.AMM)[0]\n\n  if (account) return account.FinalFields?.Account || account.NewFields?.Account\n\n  return undefined\n}\n\nexport function getLPTokenAmount(meta: any) {\n  const lpNode = findNodes(meta, LedgerEntryTypes.AMM)[0]\n  if (!lpNode) {\n    return undefined\n  }\n\n  const {\n    NewFields: newFields,\n    FinalFields: finalFields,\n    PreviousFields: previousFields,\n  } = lpNode\n\n  const fields = newFields ?? finalFields\n  const amount = newFields\n    ? Number(newFields.LPTokenBalance.value)\n    : Math.abs(\n        Number(finalFields.LPTokenBalance.value) -\n          Number(previousFields?.LPTokenBalance.value ?? 0),\n      )\n\n  return {\n    issuer: fields.issuer,\n    currency: fields.currency,\n    amount,\n  }\n}\n\n/*\nGet the amount deposited from the metadata of the transaction\n\nXRP changes to accounts exist in the AccountRoot leger objects while other asset changes can be found in RippleState\nchanges.\n */\nexport function findAssetAmount(\n  meta: any,\n  asset: { currency: string; issuer?: string },\n  tx: BaseTransaction,\n): ExplorerAmount | undefined {\n  if (asset.currency === 'XRP') return findXRPAmount(meta, tx)\n\n  const assetNode = findNodeWithAsset(\n    meta,\n    LedgerEntryTypes.RippledState,\n    asset,\n  )\n\n  const amount = assetNode?.FinalFields?.Balance\n    ? Math.abs(\n        Number(assetNode.FinalFields.Balance.value) -\n          Number(assetNode.PreviousFields.Balance.value),\n      )\n    : Number(assetNode?.NewFields?.Balance)\n\n  return amount\n    ? { currency: asset.currency, issuer: asset.issuer, amount }\n    : undefined\n}\n\n/*\n  All affected rippled state entries will either have their absolute asset amounts increase or decrease by the same\n  number so we can use any returned ripple state node.\n\n  i.e. if we deposit into the amm, the amm balance will go up by the same amount that the account balance decreases,\n  therefore it doesnt matter which node we use.\n*/\nfunction findXRPAmount(\n  meta: any,\n  tx: BaseTransaction,\n): ExplorerAmount | undefined {\n  const xrp = findNodes(meta, LedgerEntryTypes.AccountRoot).filter(\n    (n: any) =>\n      n.FinalFields?.Account === tx.Account ||\n      n.NewFields?.Account === tx.Account,\n  )[0]\n\n  let balance = Math.abs(\n    xrp?.FinalFields?.Balance\n      ? Number(xrp.FinalFields.Balance) - Number(xrp.PreviousFields.Balance)\n      : Number(xrp?.NewFields?.Balance),\n  )\n  balance = Math.abs(balance - Number(tx.Fee))\n\n  return balance && balance !== 0\n    ? {\n        currency: 'XRP',\n        amount: balance / XRP_BASE,\n      }\n    : undefined\n}\n\nexport function findNodeWithAsset(\n  meta: any,\n  entryType: string,\n  asset: { currency: string; issuer?: string; amount?: number },\n) {\n  return findNodes(meta, entryType)?.filter(\n    (n: any) =>\n      n.FinalFields?.Balance.currency === asset.currency ||\n      n.NewFields?.Balance.currency === asset.currency,\n  )[0]\n}\n\nexport function findNodes(meta: any, entryType: string) {\n  return meta.AffectedNodes.filter(\n    (node: any) =>\n      node.CreatedNode?.LedgerEntryType === entryType ||\n      node.ModifiedNode?.LedgerEntryType === entryType ||\n      node.DeletedNode?.LedgerEntryType === entryType,\n  ).map(\n    (node: any) => node.CreatedNode || node.ModifiedNode || node.DeletedNode,\n  )\n}\n"
  },
  {
    "path": "src/containers/shared/mptUtils.ts",
    "content": "/**\n * MPT Metadata utilities for XLS-0089 standard validation and decoding\n * Based on xrpl.js implementation:\n * https://github.com/XRPLF/xrpl.js/blob/main/packages/xrpl/src/models/utils/mptokenMetadata.ts\n */\n\nimport { hexToString } from '@xrplf/isomorphic/utils'\n\nconst MAX_MPT_META_BYTE_LENGTH = 1024\n\nconst MPT_META_URI_FIELDS = [\n  { long: 'uri', compact: 'u' },\n  { long: 'category', compact: 'c' },\n  { long: 'title', compact: 't' },\n]\n\nconst isString = (value: unknown): value is string => typeof value === 'string'\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n  typeof value === 'object' && value !== null && !Array.isArray(value)\nconst isHex = (value: unknown): boolean =>\n  isString(value) && /^[0-9A-Fa-f]*$/u.test(value)\n\nconst MPT_META_ALL_FIELDS = [\n  {\n    long: 'ticker',\n    compact: 't',\n    validate(obj: Record<string, unknown>): string[] {\n      if (obj[this.long] != null && obj[this.compact] != null) {\n        return [\n          `${this.long}/${this.compact}: both long and compact forms present. expected only one.`,\n        ]\n      }\n\n      const value = obj[this.long] ?? obj[this.compact]\n      if (!isString(value) || !/^[A-Z0-9]{1,6}$/u.test(value)) {\n        return [\n          `${this.long}/${this.compact}: should have uppercase letters (A-Z) and digits (0-9) only. Max 6 characters recommended.`,\n        ]\n      }\n\n      return []\n    },\n  },\n  {\n    long: 'name',\n    compact: 'n',\n    validate(obj: Record<string, unknown>): string[] {\n      if (obj[this.long] != null && obj[this.compact] != null) {\n        return [\n          `${this.long}/${this.compact}: both long and compact forms present. expected only one.`,\n        ]\n      }\n\n      const value = obj[this.long] ?? obj[this.compact]\n      if (!isString(value) || value.length === 0) {\n        return [`${this.long}/${this.compact}: should be a non-empty string.`]\n      }\n\n      return []\n    },\n  },\n  {\n    long: 'icon',\n    compact: 'i',\n    validate(obj: Record<string, unknown>): string[] {\n      if (obj[this.long] != null && obj[this.compact] != null) {\n        return [\n          `${this.long}/${this.compact}: both long and compact forms present. expected only one.`,\n        ]\n      }\n\n      const value = obj[this.long] ?? obj[this.compact]\n      if (!isString(value) || value.length === 0) {\n        return [`${this.long}/${this.compact}: should be a non-empty string.`]\n      }\n\n      return []\n    },\n  },\n  {\n    long: 'asset_class',\n    compact: 'ac',\n    validate(obj: Record<string, unknown>): string[] {\n      if (obj[this.long] != null && obj[this.compact] != null) {\n        return [\n          `${this.long}/${this.compact}: both long and compact forms present. expected only one.`,\n        ]\n      }\n\n      const value = obj[this.long] ?? obj[this.compact]\n      const MPT_META_ASSET_CLASSES = [\n        'rwa',\n        'memes',\n        'wrapped',\n        'gaming',\n        'defi',\n        'other',\n      ]\n\n      if (!isString(value) || !MPT_META_ASSET_CLASSES.includes(value)) {\n        return [\n          `${this.long}/${this.compact}: should be one of ${MPT_META_ASSET_CLASSES.join(', ')}.`,\n        ]\n      }\n      return []\n    },\n  },\n  {\n    long: 'issuer_name',\n    compact: 'in',\n    validate(obj: Record<string, unknown>): string[] {\n      if (obj[this.long] != null && obj[this.compact] != null) {\n        return [\n          `${this.long}/${this.compact}: both long and compact forms present. expected only one.`,\n        ]\n      }\n\n      const value = obj[this.long] ?? obj[this.compact]\n      if (!isString(value) || value.length === 0) {\n        return [`${this.long}/${this.compact}: should be a non-empty string.`]\n      }\n\n      return []\n    },\n  },\n  {\n    long: 'desc',\n    compact: 'd',\n    validate(obj: Record<string, unknown>): string[] {\n      if (obj[this.long] != null && obj[this.compact] != null) {\n        return [\n          `${this.long}/${this.compact}: both long and compact forms present. expected only one.`,\n        ]\n      }\n\n      if (obj[this.long] === undefined && obj[this.compact] === undefined) {\n        return []\n      }\n      const value = obj[this.long] ?? obj[this.compact]\n      if (!isString(value) || value.length === 0) {\n        return [`${this.long}/${this.compact}: should be a non-empty string.`]\n      }\n\n      return []\n    },\n  },\n  {\n    long: 'asset_subclass',\n    compact: 'as',\n    required: false,\n    validate(obj: Record<string, unknown>): string[] {\n      if (obj[this.long] != null && obj[this.compact] != null) {\n        return [\n          `${this.long}/${this.compact}: both long and compact forms present. expected only one.`,\n        ]\n      }\n\n      const value = obj[this.long] ?? obj[this.compact]\n      if (\n        (obj.asset_class === 'rwa' || obj.ac === 'rwa') &&\n        value === undefined\n      ) {\n        return [\n          `${this.long}/${this.compact}: required when asset_class is rwa.`,\n        ]\n      }\n\n      if (obj[this.long] === undefined && obj[this.compact] === undefined) {\n        return []\n      }\n\n      const MPT_META_ASSET_SUB_CLASSES = [\n        'stablecoin',\n        'commodity',\n        'real_estate',\n        'private_credit',\n        'equity',\n        'treasury',\n        'other',\n      ]\n      if (!isString(value) || !MPT_META_ASSET_SUB_CLASSES.includes(value)) {\n        return [\n          `${this.long}/${this.compact}: should be one of ${MPT_META_ASSET_SUB_CLASSES.join(', ')}.`,\n        ]\n      }\n      return []\n    },\n  },\n  {\n    long: 'uris',\n    compact: 'us',\n    required: false,\n    validate(obj: Record<string, unknown>): string[] {\n      if (obj[this.long] != null && obj[this.compact] != null) {\n        return [\n          `${this.long}/${this.compact}: both long and compact forms present. expected only one.`,\n        ]\n      }\n\n      if (obj[this.long] === undefined && obj[this.compact] === undefined) {\n        return []\n      }\n      const value = obj[this.long] ?? obj[this.compact]\n      if (!Array.isArray(value) || value.length === 0) {\n        return [`${this.long}/${this.compact}: should be a non-empty array.`]\n      }\n\n      const messages: string[] = []\n      for (const uriObj of value) {\n        if (\n          !isRecord(uriObj) ||\n          Object.keys(uriObj).length !== MPT_META_URI_FIELDS.length\n        ) {\n          messages.push(\n            `${this.long}/${this.compact}: should be an array of objects each with uri/u, category/c, and title/t properties.`,\n          )\n        } else {\n          // Check for both long and compact forms in the same URI object\n          for (const uriField of MPT_META_URI_FIELDS) {\n            if (\n              uriObj[uriField.long] != null &&\n              uriObj[uriField.compact] != null\n            ) {\n              messages.push(\n                `${this.long}/${this.compact}: should not have both ${uriField.long} and ${uriField.compact} fields.`,\n              )\n              break\n            }\n          }\n\n          const uri = uriObj.uri ?? uriObj.u\n          const category = uriObj.category ?? uriObj.c\n          const title = uriObj.title ?? uriObj.t\n          if (!isString(uri) || !isString(category) || !isString(title)) {\n            messages.push(\n              `${this.long}/${this.compact}: should be an array of objects each with uri/u, category/c, and title/t properties.`,\n            )\n          }\n        }\n      }\n      return messages\n    },\n  },\n  {\n    long: 'additional_info',\n    compact: 'ai',\n    required: false,\n    validate(obj: Record<string, unknown>): string[] {\n      if (obj[this.long] != null && obj[this.compact] != null) {\n        return [\n          `${this.long}/${this.compact}: both long and compact forms present. expected only one.`,\n        ]\n      }\n\n      if (obj[this.long] === undefined && obj[this.compact] === undefined) {\n        return []\n      }\n      const value = obj[this.long] ?? obj[this.compact]\n      if (!isString(value) && !isRecord(value)) {\n        return [\n          `${this.long}/${this.compact}: should be a string or JSON object.`,\n        ]\n      }\n\n      return []\n    },\n  },\n]\n\n/**\n * Expands compact field names to their long form equivalents.\n * Reverse operation of shortenKeys in xrpl.js.\n *\n * @param input - Object with potentially compact field names.\n * @param mappings - Array of field mappings with long and compact names.\n * @returns Object with expanded long field names.\n */\nfunction expandKeys(\n  input: Record<string, unknown>,\n  mappings: Array<{ long: string; compact: string }>,\n): Record<string, unknown> {\n  const output: Record<string, unknown> = {}\n\n  for (const [key, value] of Object.entries(input)) {\n    const mapping = mappings.find(\n      ({ long, compact }) => long === key || compact === key,\n    )\n    // Extra keys stays there\n    if (mapping === undefined) {\n      output[key] = value\n      // eslint-disable-next-line no-continue\n      continue\n    }\n\n    // Both long and compact forms are present\n    if (\n      input[mapping.long] !== undefined &&\n      input[mapping.compact] !== undefined\n    ) {\n      output[key] = value\n      // eslint-disable-next-line no-continue\n      continue\n    }\n\n    output[mapping.long] = value\n  }\n\n  return output\n}\n\n/**\n * Decodes and parses hex-encoded MPTokenMetadata into an object.\n * Converts compact field names to their corresponding long-form equivalents.\n *\n * @param input - Hex encoded MPTokenMetadata.\n * @returns Parsed MPTokenMetadata object with long field names, or undefined if invalid.\n */\nexport function parseMPTokenMetadata(\n  input: string | undefined,\n): Record<string, unknown> | undefined {\n  if (!input) {\n    return undefined\n  }\n\n  if (!isHex(input)) {\n    return undefined\n  }\n\n  let jsonMetaData: unknown\n  try {\n    jsonMetaData = JSON.parse(hexToString(input) || '')\n  } catch {\n    return undefined\n  }\n\n  if (!isRecord(jsonMetaData)) {\n    return undefined\n  }\n\n  let output = jsonMetaData\n\n  output = expandKeys(output, MPT_META_ALL_FIELDS)\n\n  if (Array.isArray(output.uris)) {\n    output.uris = output.uris.map(\n      (uri: Record<string, unknown>): Record<string, unknown> => {\n        if (isRecord(uri)) {\n          return expandKeys(uri, MPT_META_URI_FIELDS)\n        }\n        return uri\n      },\n    )\n  }\n\n  if (Array.isArray(output.us)) {\n    output.us = output.us.map(\n      (uri: Record<string, unknown>): Record<string, unknown> => {\n        if (isRecord(uri)) {\n          return expandKeys(uri, MPT_META_URI_FIELDS)\n        }\n        return uri\n      },\n    )\n  }\n\n  return output\n}\n\n/**\n * Validates MPTokenMetadata adheres to XLS-89 standard.\n * Takes a hex-encoded metadata string as input, returns true if compliant.\n *\n * @param input - Hex encoded MPTokenMetadata.\n * @returns true if MPTokenMetadata adheres to XLS-89 standard, false otherwise.\n */\nexport function isMPTokenMetadataCompliant(input: string | undefined): boolean {\n  // Validate input exists\n  if (!input) {\n    return false\n  }\n\n  // Validate hex format\n  if (!isHex(input)) {\n    return false\n  }\n\n  // Validate byte length\n  if (input.length / 2 > MAX_MPT_META_BYTE_LENGTH) {\n    return false\n  }\n\n  // Parse JSON\n  let jsonMetaData: unknown\n  try {\n    jsonMetaData = JSON.parse(hexToString(input) || '')\n  } catch {\n    return false\n  }\n\n  // Validate JSON structure\n  if (!isRecord(jsonMetaData)) {\n    return false\n  }\n\n  if (Object.keys(jsonMetaData).length > MPT_META_ALL_FIELDS.length) {\n    return false\n  }\n\n  const obj = jsonMetaData\n\n  for (const property of MPT_META_ALL_FIELDS) {\n    if (property.validate(obj).length > 0) {\n      return false\n    }\n  }\n\n  return true\n}\n"
  },
  {
    "path": "src/containers/shared/navigate.ts",
    "content": "/**\n * Thin wrapper around window.location.assign so that it can be\n * mocked in tests (jsdom 26+ freezes Location properties).\n */\nexport function locationAssign(url: string): void {\n  window.location.assign(url)\n}\n"
  },
  {
    "path": "src/containers/shared/routing.tsx",
    "content": "import { ReactNode, Ref } from 'react'\nimport {\n  generatePath,\n  NavLink as RouterLink,\n  useParams as useRouterParams,\n} from 'react-router'\n\n/**\n * A definition for a react-router route that allows for typed routes\n *\n * @example\n * export const ACCOUNT_ROUTE: RouteDefinition<{\n *   id?: string\n *   tab?: 'assets' | 'transactions'\n *   assetType?: 'issued' | 'nfts'\n * }> = {\n *   path: '/accounts/:id?/:tab?/:assetType?',\n * }\n */\nexport interface RouteDefinition<T = {}> {\n  path: string // react-router style path with replacements ex. \"/ledgers/:identifier\"\n  sampleParams?: T // A phantom field used for typing the parameters on `NavigationLink` and `buildPath`.\n}\n\n/**\n * Produce a link path. In `custom` network mode it will prepend the rippled entrypoint\n * @param route\n * @param params\n */\nexport function buildPath<T>(route: RouteDefinition<T>, params: T) {\n  const path =\n    (process.env.VITE_ENVIRONMENT === 'custom'\n      ? `/${window.location.pathname.split('/')[1]}`\n      : '') + route.path\n  return generatePath(\n    path,\n    params && Object.fromEntries(Object.entries(params)),\n  )\n}\n\n/**\n * A wrapper for `useRouterParams` that returns a typed object of the routes params\n * @param route\n */\nexport function useRouteParams<T extends RouteDefinition>(route: T) {\n  return useRouterParams<NonNullable<(typeof route)['sampleParams']>>()\n}\n\nexport interface LinkProps<\n  T extends RouteDefinition,\n  K extends T['sampleParams'] = T['sampleParams'],\n> {\n  children?: ReactNode\n  to: T\n  params?: K\n  innerRef?: Ref<HTMLAnchorElement>\n  [key: string]: any\n}\n\n/**\n * A wrapper for `Link` that provides a typed interface for params and uses `buildPath` to build the url/\n * @param to\n * @param children\n * @param params\n * @param rest All other parameters pass through\n */\nexport function ExplorerLink<T extends {} = {}>({\n  to,\n  children,\n  params,\n  ...rest\n}: LinkProps<RouteDefinition<T>>) {\n  const path = buildPath(to, params || {})\n\n  return (\n    // eslint-disable-next-line react/jsx-props-no-spreading\n    <RouterLink to={path} {...rest}>\n      {children}\n    </RouterLink>\n  )\n}\n\nexport { ExplorerLink as RouteLink }\n"
  },
  {
    "path": "src/containers/shared/services/CursorPaginationService.ts",
    "content": "/**\n * Generic cursor-based pagination service with client-side caching and prefetching.\n *\n * Fetches data in large batches from an API, caches the results, and serves\n * smaller pages to the UI. When the user approaches the end of cached data,\n * it prefetches the next batch in the background for a seamless experience.\n *\n * Usage:\n *   const service = new CursorPaginationService<MyItem>({\n *     fetchFn: myApiFetchFunction,\n *     formatFn: (raw) => transformToMyItem(raw),\n *     batchSize: 200,  // items per API call\n *     pageSize: 10,    // items per UI page\n *   })\n *\n *   const page = await service.getPage('someId', 1)\n *\n * Currently used by:\n *   - DexTradesPaginationService (Token IOU page)\n *   - TransfersPaginationService (Token IOU/MPT pages)\n */\n\n/**\n * Fetch function signature matching LOS cursor-based API endpoints.\n * The `id` parameter is typically a token ID or account ID.\n */\nexport type PaginationFetchFn = (\n  id: string,\n  size: number,\n  cursor?: any,\n  direction?: string,\n  sortField?: string,\n  sortOrder?: string,\n) => Promise<{\n  results: any[]\n  next_cursor?: any\n  prev_cursor?: any\n}>\n\n/** Transforms a raw API result into the desired output type. */\nexport type PaginationFormatFn<T> = (raw: any) => T\n\nexport interface PaginationResult<T> {\n  items: T[]\n  totalItems: number\n  hasMore: boolean\n  isLoading: boolean\n}\n\ninterface CursorPaginationServiceOptions<T> {\n  fetchFn: PaginationFetchFn\n  formatFn: PaginationFormatFn<T>\n  /** Number of items to fetch per API call (default: 200) */\n  batchSize?: number\n  /** Number of items to display per UI page (default: 10) */\n  pageSize?: number\n  /** Trigger prefetch when user reaches this fraction of cached data (default: 0.7) */\n  prefetchThreshold?: number\n}\n\nexport class CursorPaginationService<T> {\n  /** Cached items keyed by \"{id}:{sortField}:{sortOrder}\" */\n  private cache: Map<string, T[]> = new Map()\n\n  /** Cursor for fetching the next batch (forward pagination) */\n  private nextCursorCache: Map<string, any> = new Map()\n\n  /** Cursor for fetching the previous batch (backward pagination) */\n  private prevCursorCache: Map<string, any> = new Map()\n\n  /** In-flight fetch promises to prevent duplicate requests */\n  private fetchingCache: Map<string, Promise<void>> = new Map()\n\n  /** True when the server has no more data in the forward direction */\n  private hasReachedEndCache: Map<string, boolean> = new Map()\n\n  /** True when the server has no more data in the backward direction */\n  private hasReachedStartCache: Map<string, boolean> = new Map()\n\n  private readonly fetchFn: PaginationFetchFn\n\n  private readonly formatFn: PaginationFormatFn<T>\n\n  private readonly BATCH_SIZE: number\n\n  private readonly PAGE_SIZE: number\n\n  private readonly PREFETCH_THRESHOLD: number\n\n  constructor(options: CursorPaginationServiceOptions<T>) {\n    this.fetchFn = options.fetchFn\n    this.formatFn = options.formatFn\n    this.BATCH_SIZE = options.batchSize ?? 200\n    this.PAGE_SIZE = options.pageSize ?? 10\n    this.PREFETCH_THRESHOLD = options.prefetchThreshold ?? 0.7\n  }\n\n  /** Builds a cache key from the id and sort configuration. */\n  // eslint-disable-next-line class-methods-use-this\n  private getCacheKey(\n    id: string,\n    sortField?: string,\n    sortOrder?: string,\n  ): string {\n    const sortPart = sortField ? `:${sortField}:${sortOrder}` : ''\n    return `${id}${sortPart}`\n  }\n\n  /**\n   * Fetches a batch of items from the API and appends/prepends to the cache.\n   * Updates cursors and end-of-data flags based on the response.\n   */\n  private async fetchMore(\n    id: string,\n    sortField?: string,\n    sortOrder?: string,\n    direction: string = 'next',\n  ): Promise<void> {\n    const cacheKey = this.getCacheKey(id, sortField, sortOrder)\n\n    const cursor =\n      direction === 'prev'\n        ? this.prevCursorCache.get(cacheKey)\n        : this.nextCursorCache.get(cacheKey)\n\n    const response = await this.fetchFn(\n      id,\n      this.BATCH_SIZE,\n      cursor,\n      direction,\n      sortField,\n      sortOrder,\n    )\n    const items: T[] = []\n\n    if (response && response.results) {\n      response.results.forEach((raw: any) => {\n        items.push(this.formatFn(raw))\n      })\n    }\n\n    // Prepend for backward pagination, append for forward\n    const existingItems = this.cache.get(cacheKey) || []\n    const updatedItems =\n      direction === 'prev'\n        ? [...items, ...existingItems]\n        : [...existingItems, ...items]\n    this.cache.set(cacheKey, updatedItems)\n\n    // Update cursors. No cursor in the response means we've reached the boundary.\n    if (direction === 'prev') {\n      if (response && response.prev_cursor) {\n        this.prevCursorCache.set(cacheKey, response.prev_cursor)\n      } else {\n        this.hasReachedStartCache.set(cacheKey, true)\n      }\n    } else if (response && response.next_cursor) {\n      this.nextCursorCache.set(cacheKey, response.next_cursor)\n    } else {\n      this.hasReachedEndCache.set(cacheKey, true)\n    }\n\n    // Empty results also signal we've reached the boundary\n    if (items.length === 0) {\n      if (direction === 'prev') {\n        this.hasReachedStartCache.set(cacheKey, true)\n      } else {\n        this.hasReachedEndCache.set(cacheKey, true)\n      }\n    }\n  }\n\n  /**\n   * Returns a page of items. Fetches the first batch on initial call,\n   * then serves from cache. Triggers a background prefetch when the user\n   * reaches PREFETCH_THRESHOLD (80%) of cached data.\n   */\n  async getPage(\n    id: string,\n    page: number,\n    pageSize?: number,\n    sortField?: string,\n    sortOrder?: string,\n  ): Promise<PaginationResult<T>> {\n    const cacheKey = this.getCacheKey(id, sortField, sortOrder)\n    const validPageSize = pageSize && pageSize > 0 ? pageSize : this.PAGE_SIZE\n    const startIndex = (page - 1) * validPageSize\n    const endIndex = startIndex + validPageSize\n\n    let allItems = this.cache.get(cacheKey) || []\n    let hasReachedEnd = this.hasReachedEndCache.get(cacheKey) || false\n\n    // Initial fetch if cache is empty\n    if (allItems.length === 0) {\n      await this.fetchMore(id, sortField, sortOrder)\n      allItems = this.cache.get(cacheKey) || []\n      hasReachedEnd = this.hasReachedEndCache.get(cacheKey) || false\n    }\n\n    // If the requested page is beyond the cache, await any in-flight prefetch\n    if (endIndex > allItems.length && !hasReachedEnd) {\n      const existingFetch = this.fetchingCache.get(cacheKey)\n      if (existingFetch) {\n        await existingFetch\n        allItems = this.cache.get(cacheKey) || []\n        hasReachedEnd = this.hasReachedEndCache.get(cacheKey) || false\n      }\n    }\n\n    // Snapshot cache size before any background prefetch\n    const cacheSizeBeforePrefetch = allItems.length\n\n    // Prefetch the next batch in the background when approaching cache boundary\n    const cacheThreshold = cacheSizeBeforePrefetch * this.PREFETCH_THRESHOLD\n    if (endIndex > cacheThreshold && !hasReachedEnd) {\n      const existingFetch = this.fetchingCache.get(cacheKey)\n      if (!existingFetch) {\n        const fetchPromise = this.fetchMore(id, sortField, sortOrder).finally(\n          () => {\n            this.fetchingCache.delete(cacheKey)\n          },\n        )\n        this.fetchingCache.set(cacheKey, fetchPromise)\n      }\n    }\n\n    const pageItems = allItems.slice(\n      startIndex,\n      Math.min(endIndex, cacheSizeBeforePrefetch),\n    )\n\n    const hasMore = endIndex < allItems.length\n\n    return {\n      items: pageItems,\n      totalItems: allItems.length,\n      hasMore,\n      isLoading: false,\n    }\n  }\n\n  /** Clears cached data. Pass an id to clear a specific entry, or omit to clear all. */\n  clearCache(id?: string, sortField?: string, sortOrder?: string): void {\n    if (id) {\n      const cacheKey = this.getCacheKey(id, sortField, sortOrder)\n      this.cache.delete(cacheKey)\n      this.nextCursorCache.delete(cacheKey)\n      this.prevCursorCache.delete(cacheKey)\n      this.fetchingCache.delete(cacheKey)\n      this.hasReachedEndCache.delete(cacheKey)\n      this.hasReachedStartCache.delete(cacheKey)\n    } else {\n      this.cache.clear()\n      this.nextCursorCache.clear()\n      this.prevCursorCache.clear()\n      this.fetchingCache.clear()\n      this.hasReachedEndCache.clear()\n      this.hasReachedStartCache.clear()\n    }\n  }\n\n  /** Returns the number of items currently cached for the given id. */\n  getCachedItemCount(\n    id: string,\n    sortField?: string,\n    sortOrder?: string,\n  ): number {\n    const cacheKey = this.getCacheKey(id, sortField, sortOrder)\n    return this.cache.get(cacheKey)?.length || 0\n  }\n}\n"
  },
  {
    "path": "src/containers/shared/test/NumberFormattingUtils.test.ts",
    "content": "import {\n  formatUsdValue,\n  formatTokenBalance,\n  calculateFormattedUsdBalance,\n  parseAmount,\n  parseCurrencyAmount,\n  parseIntegerAmount,\n  parsePrice,\n  parsePercent,\n} from '../NumberFormattingUtils'\n\ndescribe('NumberFormattingUtils', () => {\n  const lang = 'en-US'\n\n  describe('formatUsdValue', () => {\n    it('returns \"--\" for zero value', () => {\n      expect(formatUsdValue(0, lang)).toBe('--')\n    })\n\n    it('formats regular USD value (>= $1) with 2 decimals', () => {\n      expect(formatUsdValue(1, lang)).toBe('$1.00')\n      expect(formatUsdValue(100, lang)).toBe('$100.00')\n      expect(formatUsdValue(23.565, lang)).toBe('$23.57')\n      expect(formatUsdValue(5678.9, lang)).toBe('$5,678.90')\n    })\n\n    it('formats small USD value (>= $0.0001, < $1) with 4 decimals', () => {\n      expect(formatUsdValue(0.0001, lang)).toBe('$0.0001')\n      expect(formatUsdValue(0.00014, lang)).toBe('$0.0001')\n      expect(formatUsdValue(0.00015, lang)).toBe('$0.0002')\n      expect(formatUsdValue(0.25, lang)).toBe('$0.25')\n      expect(formatUsdValue(0.5, lang)).toBe('$0.50')\n      expect(formatUsdValue(0.9999, lang)).toBe('$0.9999')\n      expect(formatUsdValue(0.99995, lang)).toBe('$1.00')\n    })\n\n    it('formats extra small USD value (< $0.0001) with up to 10 decimals', () => {\n      expect(formatUsdValue(0.00000000051, lang)).toBe('$0.0000000005')\n      expect(formatUsdValue(0.000001, lang)).toBe('$0.000001')\n      expect(formatUsdValue(0.0000051, lang)).toBe('$0.0000051')\n      expect(formatUsdValue(0.000014, lang)).toBe('$0.000014')\n      expect(formatUsdValue(0.00005, lang)).toBe('$0.00005')\n    })\n\n    it('handles negative values', () => {\n      expect(formatUsdValue(-100, lang)).toBe('-$100.00')\n      expect(formatUsdValue(-0.0001, lang)).toBe('-$0.0001')\n      expect(formatUsdValue(-200, lang)).toBe('-$200.00')\n      expect(formatUsdValue(-0.0005, lang)).toBe('-$0.0005')\n    })\n  })\n\n  describe('formatTokenBalance', () => {\n    it('formats large token balance (> 999) with 2 decimals', () => {\n      expect(formatTokenBalance(1000, lang)).toBe('1,000')\n      expect(formatTokenBalance(5000, lang)).toBe('5,000')\n      expect(formatTokenBalance(1234567.891, lang)).toBe('1,234,567.89')\n    })\n\n    it('formats small token balance (<= 999) with 4 decimals', () => {\n      expect(formatTokenBalance(0, lang)).toBe('0')\n      expect(formatTokenBalance(1, lang)).toBe('1')\n      expect(formatTokenBalance(100, lang)).toBe('100')\n      expect(formatTokenBalance(999, lang)).toBe('999')\n      expect(formatTokenBalance(0.1234, lang)).toBe('0.1234')\n      expect(formatTokenBalance(500.56784, lang)).toBe('500.5678')\n      expect(formatTokenBalance(500.56785, lang)).toBe('500.5679')\n    })\n\n    it('handles negative token balances', () => {\n      expect(formatTokenBalance(-1000, lang)).toBe('-1,000')\n      expect(formatTokenBalance(-100, lang)).toBe('-100')\n    })\n  })\n\n  describe('calculateFormattedUsdBalance', () => {\n    it('returns all \"--\" when price is zero', () => {\n      const result = calculateFormattedUsdBalance(1000, 0, lang)\n      expect(result).toEqual({\n        formattedUsdPrice: '--',\n        formattedBalance: '1,000', // Balance is formatted even when price is zero\n        formattedBalanceUsd: '--',\n      })\n    })\n\n    it('calculates formatted USD balance correctly for regular values', () => {\n      const result = calculateFormattedUsdBalance(100, 50, lang)\n      expect(result).toEqual({\n        formattedUsdPrice: '$50.00',\n        formattedBalance: '100',\n        formattedBalanceUsd: '$5,000.00',\n      })\n    })\n\n    it('calculates formatted USD balance correctly for small token balance', () => {\n      const result = calculateFormattedUsdBalance(0.5, 100, lang)\n      expect(result).toEqual({\n        formattedUsdPrice: '$100.00',\n        formattedBalance: '0.5',\n        formattedBalanceUsd: '$50.00',\n      })\n    })\n\n    it('calculates formatted USD balance correctly for small price', () => {\n      const result = calculateFormattedUsdBalance(1000, 0.0005, lang)\n      expect(result).toEqual({\n        formattedUsdPrice: '$0.0005',\n        formattedBalance: '1,000',\n        formattedBalanceUsd: '$0.50',\n      })\n    })\n\n    it('calculates formatted USD balance correctly for extra small price', () => {\n      const result = calculateFormattedUsdBalance(10000, 0.00001, lang)\n      expect(result).toEqual({\n        formattedUsdPrice: '$0.00001',\n        formattedBalance: '10,000',\n        formattedBalanceUsd: '$0.10',\n      })\n    })\n\n    it('handles calculations resulting in small USD balances', () => {\n      const result = calculateFormattedUsdBalance(10, 0.05, lang)\n      expect(result).toEqual({\n        formattedUsdPrice: '$0.05',\n        formattedBalance: '10',\n        formattedBalanceUsd: '$0.50',\n      })\n    })\n\n    it('handles calculations with decimal token balances', () => {\n      const result = calculateFormattedUsdBalance(123.4561, 2.5, lang)\n      expect(result).toEqual({\n        formattedUsdPrice: '$2.50',\n        formattedBalance: '123.4561',\n        formattedBalanceUsd: '$308.64',\n      })\n    })\n\n    it('handles large token balances with regular prices', () => {\n      const result = calculateFormattedUsdBalance(5000, 1.25, lang)\n      expect(result).toEqual({\n        formattedUsdPrice: '$1.25',\n        formattedBalance: '5,000',\n        formattedBalanceUsd: '$6,250.00',\n      })\n    })\n\n    it('handles calculations that result in very small USD balances', () => {\n      const result = calculateFormattedUsdBalance(0.1, 0.0001, lang)\n      expect(result).toEqual({\n        formattedUsdPrice: '$0.0001',\n        formattedBalance: '0.1',\n        formattedBalanceUsd: '$0.00001',\n      })\n    })\n\n    it('handles zero token balance', () => {\n      const result = calculateFormattedUsdBalance(0, 100, lang)\n      expect(result).toEqual({\n        formattedUsdPrice: '$100.00',\n        formattedBalance: '0',\n        formattedBalanceUsd: '--',\n      })\n    })\n\n    it('correctly removes commas and dollar signs in calculation', () => {\n      // Large values that will have commas\n      const result = calculateFormattedUsdBalance(1234, 5.671, lang)\n      expect(result.formattedUsdPrice).toBe('$5.67')\n      expect(result.formattedBalance).toBe('1,234')\n      // 1234 * 5.67 = 6,996.78\n      expect(result.formattedBalanceUsd).toBe('$6,996.78')\n    })\n  })\n\n  describe('Edge Cases', () => {\n    it('handles very large numbers', () => {\n      expect(formatUsdValue(1000000, lang)).toBe('$1,000,000.00')\n      expect(formatTokenBalance(999999999, lang)).toBe('999,999,999')\n    })\n  })\n\n  describe('parseAmount', () => {\n    it('formats billions', () => {\n      expect(parseAmount(1500000000)).toBe('1.5B')\n      expect(parseAmount(12345678901)).toBe('12.3B')\n    })\n\n    it('formats millions', () => {\n      expect(parseAmount(1500000)).toBe('1.5M')\n      expect(parseAmount(12345678)).toBe('12.3M')\n    })\n\n    it('formats thousands (>= 10,000) with abbreviations', () => {\n      expect(parseAmount(15000)).toBe('15.0K')\n      expect(parseAmount(123456)).toBe('123.5K')\n      expect(parseAmount(10000)).toBe('10.0K')\n    })\n\n    it('formats medium numbers (1 to 9,999) with 2 decimal places and commas', () => {\n      expect(parseAmount(9999)).toBe('9,999.00')\n      expect(parseAmount(1234.5)).toBe('1,234.50')\n      expect(parseAmount(123.45)).toBe('123.45')\n      expect(parseAmount(1)).toBe('1.00')\n    })\n\n    it('handles zero', () => {\n      expect(parseAmount(0)).toBe('0.00')\n    })\n\n    it('handles very small numbers with < 0.0001 threshold', () => {\n      expect(parseAmount(0.000001)).toBe('< 0.0001')\n      expect(parseAmount(0.0000999)).toBe('< 0.0001')\n    })\n\n    it('handles scientific notation numbers', () => {\n      expect(parseAmount(1e-10)).toBe('< 0.0001')\n    })\n\n    it('formats small numbers (< 1) with 4 decimal places', () => {\n      expect(parseAmount(0.0004231)).toBe('0.0004')\n      expect(parseAmount(0.0001)).toBe('0.0001')\n      expect(parseAmount(0.999)).toBe('0.9990')\n    })\n\n    it('handles string inputs', () => {\n      expect(parseAmount('1500000')).toBe('1.5M')\n      expect(parseAmount('9999')).toBe('9,999.00')\n      expect(parseAmount('0.0004231')).toBe('0.0004')\n      expect(parseAmount('0.00005')).toBe('< 0.0001')\n    })\n  })\n\n  describe('parseCurrencyAmount', () => {\n    it('formats currency with dollar sign', () => {\n      expect(parseCurrencyAmount(1500000)).toBe('$1.5M')\n      expect(parseCurrencyAmount(9999)).toBe('$9,999.00')\n      expect(parseCurrencyAmount(123.45)).toBe('$123.45')\n      expect(parseCurrencyAmount(0)).toBe('$0.00')\n    })\n\n    it('handles very small currency amounts with non-breaking space', () => {\n      expect(parseCurrencyAmount(0.00005)).toBe('<\\u00A0$0.0001')\n      expect(parseCurrencyAmount(0.0004231)).toBe('$0.0004')\n    })\n\n    it('handles string inputs', () => {\n      expect(parseCurrencyAmount('1500000')).toBe('$1.5M')\n      expect(parseCurrencyAmount('9999')).toBe('$9,999.00')\n      expect(parseCurrencyAmount('0.0004231')).toBe('$0.0004')\n      expect(parseCurrencyAmount('0.00005')).toBe('<\\u00A0$0.0001')\n    })\n  })\n\n  describe('parseIntegerAmount', () => {\n    it('formats large integers (>= 10,000) with abbreviations', () => {\n      expect(parseIntegerAmount(1500000)).toBe('1.5M')\n      expect(parseIntegerAmount(150000)).toBe('150.0K')\n      expect(parseIntegerAmount(2300000000)).toBe('2.3B')\n      expect(parseIntegerAmount(12345)).toBe('12.3K')\n      expect(parseIntegerAmount(10000)).toBe('10.0K')\n    })\n\n    it('formats smaller integers (< 10,000) with commas', () => {\n      expect(parseIntegerAmount(9999)).toBe('9,999')\n      expect(parseIntegerAmount(1234)).toBe('1,234')\n      expect(parseIntegerAmount(123)).toBe('123')\n    })\n\n    it('handles zero', () => {\n      expect(parseIntegerAmount(0)).toBe('0')\n    })\n\n    it('rounds decimal values to integers', () => {\n      expect(parseIntegerAmount(123.7)).toBe('124')\n      expect(parseIntegerAmount(123.4)).toBe('123')\n    })\n\n    it('handles string inputs', () => {\n      expect(parseIntegerAmount('12345')).toBe('12.3K')\n      expect(parseIntegerAmount('1500000')).toBe('1.5M')\n      expect(parseIntegerAmount('9999')).toBe('9,999')\n    })\n  })\n\n  describe('parsePrice', () => {\n    it('formats very large prices (>= $1M) with abbreviations and 2 decimal places', () => {\n      expect(parsePrice(1500000)).toBe('$1.50M')\n      expect(parsePrice(2300000000)).toBe('$2.30B')\n    })\n\n    it('formats high prices (>= $10,000) with no decimal places', () => {\n      expect(parsePrice(99999)).toBe('$99,999')\n      expect(parsePrice(50000)).toBe('$50,000')\n    })\n\n    it('formats regular prices (1 to 9,999) with 2 decimal places and commas', () => {\n      expect(parsePrice(9999)).toBe('$9,999.00')\n      expect(parsePrice(1)).toBe('$1.00')\n    })\n\n    it('formats small prices (< 1) with 4 decimal places', () => {\n      expect(parsePrice(0.9999)).toBe('$0.9999')\n      expect(parsePrice(0.0001)).toBe('$0.0001')\n    })\n\n    it('handles very small prices with threshold', () => {\n      expect(parsePrice(0.00005)).toBe('<\\u00A0$0.0001')\n      expect(parsePrice(0.000001)).toBe('<\\u00A0$0.0001')\n    })\n\n    it('handles zero', () => {\n      expect(parsePrice(0)).toBe('$0.00')\n    })\n\n    it('handles string inputs', () => {\n      expect(parsePrice('1500000')).toBe('$1.50M')\n      expect(parsePrice('12345')).toBe('$12,345')\n      expect(parsePrice('0.1234')).toBe('$0.1234')\n    })\n  })\n\n  describe('parsePercent', () => {\n    it('formats percentages with % sign and 2 decimal places', () => {\n      expect(parsePercent(12.345)).toBe('12.35%')\n      expect(parsePercent(12.34)).toBe('12.34%')\n      expect(parsePercent(-5.67)).toBe('-5.67%')\n    })\n\n    it('handles very small percentages (< 0.01%) with default cutoff', () => {\n      expect(parsePercent(0.005)).toBe('0.00%')\n      expect(parsePercent(0.009)).toBe('0.00%')\n      expect(parsePercent(-0.005)).toBe('0.00%')\n    })\n\n    it('handles regular percentages', () => {\n      expect(parsePercent(0.01)).toBe('0.01%')\n      expect(parsePercent(0.1)).toBe('0.10%')\n      expect(parsePercent(12)).toBe('12.00%')\n    })\n\n    it('handles zero', () => {\n      expect(parsePercent(0)).toBe('0.00%')\n    })\n\n    it('handles custom cutoff for very small percentages', () => {\n      expect(parsePercent(0.0001, 4, 0.0001)).toBe('0.0001%')\n      expect(parsePercent(0.0005, 4, 0.0001)).toBe('0.0005%')\n      expect(parsePercent(0.001, 4, 0.0001)).toBe('0.0010%')\n      expect(parsePercent(0.005, 4, 0.0001)).toBe('0.0050%')\n      expect(parsePercent(0.00005, 4, 0.0001)).toBe('0.0000%')\n      expect(parsePercent(0.00009, 4, 0.0001)).toBe('0.0000%')\n    })\n\n    it('handles custom digits parameter', () => {\n      expect(parsePercent(12.3456, 4)).toBe('12.3456%')\n      expect(parsePercent(12.3456, 1)).toBe('12.3%')\n      expect(parsePercent(12.3456, 0)).toBe('12%')\n    })\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/test/SocketContext.test.ts",
    "content": "import { XrplClient } from 'xrpl-client'\nimport { getSocket } from '../SocketContext'\n\njest.mock('xrpl-client', () => ({\n  XrplClient: jest.fn(),\n}))\n\ndescribe('getSocket', () => {\n  const OLD_ENV = process.env\n\n  beforeEach(() => {\n    jest.resetModules() // Most important - it clears the cache\n    process.env = { ...OLD_ENV } // Make a copy\n  })\n\n  afterAll(() => {\n    process.env = OLD_ENV // Restore old environment\n  })\n\n  describe('server defined entrypoint', () => {\n    beforeEach(() => {\n      process.env.VITE_RIPPLED_HOST = 'somewhere.com'\n      process.env.VITE_P2P_RIPPLED_HOST = 'cli-somewhere.com'\n      process.env.VITE_RIPPLED_WS_PORT = '51233'\n      delete process.env.VITE_INSECURE_WS\n      delete process.env.VITE_ENVIRONMENT\n    })\n\n    it('should instantiate with environment variables', () => {\n      const client = getSocket()\n      expect(XrplClient).toHaveBeenNthCalledWith(\n        1,\n        ['wss://somewhere.com:51233'],\n        {\n          tryAllNodes: true,\n        },\n      )\n\n      expect(XrplClient).toHaveBeenNthCalledWith(2, [\n        'wss://cli-somewhere.com:51233',\n      ])\n\n      expect((client as any).p2pSocket).toBeDefined()\n    })\n\n    it('should instantiate with multiple hosts', () => {\n      process.env.VITE_RIPPLED_HOST = 'somewhere.com,elsewhere.com'\n\n      const client = getSocket()\n      expect(XrplClient).toHaveBeenNthCalledWith(\n        1,\n        ['wss://somewhere.com:51233', 'wss://elsewhere.com:51233'],\n        {\n          tryAllNodes: true,\n        },\n      )\n\n      expect(XrplClient).toHaveBeenNthCalledWith(2, [\n        'wss://cli-somewhere.com:51233',\n      ])\n\n      expect((client as any).p2pSocket).toBeDefined()\n    })\n\n    it('should use VITE_INSECURE_WS variable to use ws', () => {\n      process.env.VITE_INSECURE_WS = '1'\n\n      const client = getSocket()\n      expect(XrplClient).toHaveBeenNthCalledWith(\n        1,\n        ['ws://somewhere.com:51233'],\n        {\n          tryAllNodes: true,\n        },\n      )\n\n      expect(XrplClient).toHaveBeenNthCalledWith(2, [\n        'ws://cli-somewhere.com:51233',\n      ])\n\n      expect((client as any).p2pSocket).toBeDefined()\n    })\n\n    it('should not create p2pSocket when VITE_P2P_RIPPLED_HOST is not set', () => {\n      delete process.env.VITE_P2P_RIPPLED_HOST\n\n      const client = getSocket()\n      expect((client as any).p2pSocket).not.toBeDefined()\n    })\n  })\n\n  describe('user defined entrypoint', () => {\n    beforeEach(() => {\n      delete process.env.VITE_RIPPLED_HOST\n      delete process.env.VITE_P2P_RIPPLED_HOST\n      process.env.VITE_RIPPLED_WS_PORT = '51233'\n      delete process.env.VITE_INSECURE_WS\n      delete process.env.VITE_ENVIRONMENT\n    })\n\n    it('should use ignore VITE_RIPPLED_WS_PORT when supplied entry point has a port', () => {\n      const client = getSocket('hello.com:4444')\n      expect(XrplClient).toHaveBeenNthCalledWith(1, ['wss://hello.com:4444'], {\n        tryAllNodes: true,\n      })\n\n      expect((client as any).p2pSocket).not.toBeDefined()\n    })\n    it('should use ws VITE_INSECURE_WS variable is true', () => {\n      process.env.VITE_INSECURE_WS = '1'\n\n      const client = getSocket('hello.com:4444')\n      expect(XrplClient).toHaveBeenNthCalledWith(1, ['ws://hello.com:4444'], {\n        tryAllNodes: true,\n      })\n\n      expect((client as any).p2pSocket).not.toBeDefined()\n    })\n\n    it('should use ws when supplied entry is for a localhost', () => {\n      const client = getSocket('localhost')\n      expect(XrplClient).toHaveBeenNthCalledWith(1, ['ws://localhost:51233'], {\n        tryAllNodes: true,\n      })\n\n      expect((client as any).p2pSocket).not.toBeDefined()\n    })\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/test/amendmentUtils.test.ts",
    "content": "import { getRippledVersion } from '../amendmentUtils'\n\nconst versionTable = [\n  ['NonFungibleTokensV1_1', '1.9.2'],\n  ['fixAmendmentMajorityCalc', '1.6.0'],\n  ['HardenedValidations', '1.6.0'],\n  ['fix1781', '1.6.0'],\n  ['FlowCross', '0.70.0'],\n  ['fixQualityUpperBound', '1.5.0'],\n  ['RequireFullyCanonicalSig', '1.5.0'],\n  ['Checks', '0.90.0'],\n  ['DeletableAccounts', '1.4.0'],\n  ['fixCheckThreading', '1.4.0'],\n  ['fixPayChanRecipientOwnerDir', '1.4.0'],\n  ['fixMasterKeyAsRegularKey', '1.3.1'],\n  ['MultiSignReserve', '1.2.0'],\n  ['fixTakerDryOfferRemoval', '1.2.0'],\n  ['fix1578', '1.2.0'],\n  ['DepositPreauth', '1.1.0'],\n  ['fix1515', '1.1.0'],\n  ['fix1543', '1.0.0'],\n  ['fix1623', '1.0.0'],\n  ['fix1571', '1.0.0'],\n  ['DepositAuth', '0.90.0'],\n  ['fix1513', '0.90.0'],\n  ['fix1201', '0.80.0'],\n  ['fix1512', '0.80.0'],\n  ['fix1523', '0.80.0'],\n  ['fix1528', '0.80.0'],\n  ['SortedDirectories', '0.80.0'],\n  ['EnforceInvariants', '0.70.0'],\n  ['fix1373', '0.70.0'],\n  ['Escrow', '0.60.0'],\n  ['fix1368', '0.60.0'],\n  ['PayChan', '0.33.0'],\n  ['TickSize', '0.50.0'],\n  ['CryptoConditions', '0.50.0'],\n  ['Flow', '0.33.0'],\n  ['TrustSetAuth', '0.30.0'],\n  ['MultiSign', '0.31.0'],\n  ['FeeEscalation', '0.31.0'],\n]\n\ndescribe('getRippledVersion:', () => {\n  it.each(versionTable)(\n    `should for amendment \"%s\" return the version \"%s\"`,\n    async (name, expectedVersion) => {\n      const retrievedVersion = await getRippledVersion(name)\n      return expect(retrievedVersion).toEqual(expectedVersion)\n    },\n  )\n})\n"
  },
  {
    "path": "src/containers/shared/test/notification.test.tsx",
    "content": "import { render, waitFor } from '@testing-library/react'\nimport { Notification } from '../components/Notification'\n\ndescribe('Notification', () => {\n  it('renders without crashing', () => {\n    render(<Notification key=\"key\" usage=\"danger\" message=\"boo!\" />)\n  })\n\n  it('disappears', async () => {\n    const { container } = render(\n      <Notification\n        key=\"key\"\n        usage=\"danger\"\n        message=\"boo!\"\n        autoDismiss\n        delay={100}\n      />,\n    )\n    expect(container.querySelector('.notification')).toBeInTheDocument()\n    expect(container.querySelector('.notification')).toHaveClass('danger')\n    expect(container.querySelector('.notification span')).toHaveTextContent(\n      'boo!',\n    )\n\n    await waitFor(\n      () => {\n        expect(container.querySelector('.notification')).not.toBeInTheDocument()\n      },\n      { timeout: 300 },\n    )\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/test/txDetails.test.js",
    "content": "import { render } from '@testing-library/react'\nimport { I18nextProvider } from 'react-i18next'\nimport { BrowserRouter as Router } from 'react-router'\nimport i18n from '../../../i18n/testConfig'\nimport EnableAmendment from '../../Transactions/test/mock_data/EnableAmendment.json'\nimport { TxDetails } from '../components/TxDetails'\nimport summarize from '../../../rippled/lib/txSummary'\n\ndescribe('TxDetails', () => {\n  const renderTxDetails = (tx) =>\n    render(\n      <Router>\n        <I18nextProvider i18n={i18n}>\n          <TxDetails\n            t={(s) => s}\n            language=\"en-US\"\n            instructions={summarize(tx, true).details.instructions}\n            type={tx.tx.TransactionType}\n          />\n        </I18nextProvider>\n      </Router>,\n    )\n\n  it('renders EnableAmendment without crashing', () => {\n    renderTxDetails(EnableAmendment)\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/test/utils.test.ts",
    "content": "import {\n  isEarlierVersion,\n  formatLargeNumber,\n  localizeNumber,\n  formatPrice,\n  getLocalizedCurrencySymbol,\n  localizeDate,\n  durationToHuman,\n  formatDurationDetailed,\n  formatAsset,\n  shortenAccount,\n  shortenDomain,\n  shortenNFTTokenID,\n  shortenMPTID,\n  shortenLPToken,\n  stripHttpProtocol,\n  convertToHttpURL,\n} from '../utils'\n\ndescribe('utils', () => {\n  it('isEarlierVersion compare versions correctly', () => {\n    expect(isEarlierVersion('1.6.2', 'N/A')).toEqual(false)\n    expect(isEarlierVersion('N/A', '0.9.4')).toEqual(true)\n    expect(isEarlierVersion('N/A', 'N/A')).toEqual(false)\n    expect(isEarlierVersion('1.9.4', '1.9.4')).toEqual(false)\n    expect(isEarlierVersion('0.9.2', '1.8.4')).toEqual(true)\n    expect(isEarlierVersion('1.8.2', '1.9.4')).toEqual(true)\n    expect(isEarlierVersion('1.9.2', '1.9.4')).toEqual(true)\n    expect(isEarlierVersion('1.9.2', '1.9.2-b1')).toEqual(false)\n    expect(isEarlierVersion('1.9.2', '1.9.2-rc2')).toEqual(false)\n    expect(isEarlierVersion('1.9.4-b2', '1.9.4-rc1')).toEqual(true)\n    expect(isEarlierVersion('1.9.4-b1', '1.9.4-b2')).toEqual(true)\n    expect(isEarlierVersion('1.9.4-rc1', '1.9.4-rc2')).toEqual(true)\n    expect(isEarlierVersion('1.6.2', '0.9.4')).toEqual(false)\n    expect(isEarlierVersion('1.9.4', '1.8.6')).toEqual(false)\n    expect(isEarlierVersion('1.9.4', '1.9.2-rc5')).toEqual(false)\n    expect(isEarlierVersion('1.8.0-rc1', '1.8.0')).toEqual(true)\n    expect(isEarlierVersion('1.9.4-rc1', '1.9.4-b3')).toEqual(false)\n    expect(isEarlierVersion('1.9.4-b2', '1.9.4-b1')).toEqual(false)\n    expect(isEarlierVersion('1.9.4-rc2', '1.9.4-rc1')).toEqual(false)\n  })\n\n  it('formatLargeNumber format numbers correctly', () => {\n    expect(formatLargeNumber()).toEqual({ num: '0.0', unit: '' })\n    expect(formatLargeNumber(2000000000000)).toEqual({\n      num: '2.0',\n      unit: 'T',\n    })\n    expect(formatLargeNumber(3300000000)).toEqual({ num: '3.3', unit: 'B' })\n    expect(formatLargeNumber(44400000)).toEqual({ num: '44.4', unit: 'M' })\n    expect(formatLargeNumber(555500)).toEqual({ num: '555.5', unit: 'K' })\n    expect(formatLargeNumber(66.666, 2)).toEqual({ num: '66.67', unit: '' })\n  })\n\n  it('localizeNumber', () => {\n    expect(localizeNumber()).toEqual(null)\n    expect(\n      localizeNumber(12.2334, 'en-US', { maximumFractionDigits: 2 }),\n    ).toEqual('12.23')\n    expect(\n      localizeNumber(12.2334, 'en-US', {\n        style: 'currency',\n        currency: 'USD',\n        maximumFractionDigits: 2,\n      }),\n    ).toEqual('$12.23')\n    expect(\n      localizeNumber(12.2334, 'en-US', {\n        style: 'currency',\n        currency: 'xrp',\n        maximumFractionDigits: 2,\n      }),\n    ).toEqual('12.23')\n    expect(\n      localizeNumber(12.2334, 'en-US', {\n        style: 'currency',\n        currency: 'PRX',\n        maximumFractionDigits: 2,\n      }),\n    ).toEqual('12.23')\n    expect(\n      localizeNumber(12.2334, 'en-US', {\n        style: 'currency',\n        currency: 'XRp',\n        maximumFractionDigits: 2,\n      }),\n    ).toEqual('12.23')\n    expect(\n      localizeNumber(12.2334, 'en-US', {\n        style: 'currency',\n        currency: 'xrp',\n        minimumFractionDigits: 6,\n      }),\n    ).toEqual('12.233400')\n  })\n\n  it('formatPrice', () => {\n    expect(formatPrice(22.35)).toEqual('$22.35')\n    expect(\n      formatPrice(22.35, { lang: 'es-MX', currency: 'BTC', decimals: 3 }),\n    ).toEqual('₿22.4')\n    expect(\n      formatPrice(22.356, {\n        lang: 'en-US',\n        currency: 'XRP',\n        decimals: 4,\n        padding: 6,\n      }),\n    ).toEqual('\\uE90022.360000')\n    expect(\n      formatPrice(222.05, {\n        lang: 'en-US',\n        currency: 'XRP',\n        decimals: 4,\n        padding: 6,\n      }),\n    ).toEqual('\\uE900222.100000')\n    expect(\n      formatPrice(2222.05, {\n        lang: 'en-US',\n        currency: 'XRP',\n        decimals: 4,\n        padding: 6,\n      }),\n    ).toEqual('\\uE9002,222')\n    expect(\n      formatPrice(2222.3, {\n        lang: 'en-US',\n        currency: 'XRP',\n        decimals: 4,\n        padding: 6,\n      }),\n    ).toEqual('\\uE9002,222')\n    expect(\n      formatPrice(2222, {\n        lang: 'en-US',\n        currency: 'XRP',\n        decimals: 4,\n        padding: 6,\n      }),\n    ).toEqual('\\uE9002,222')\n  })\n\n  it('getLocalizedCurrencySymbol', () => {\n    expect(getLocalizedCurrencySymbol()).toEqual('$')\n    expect(getLocalizedCurrencySymbol('zh-Hans', 'CNY')).toEqual('¥')\n    expect(getLocalizedCurrencySymbol('ja-JP', 'EUR')).toEqual('€')\n    expect(getLocalizedCurrencySymbol('en-US', 'USDT')).toEqual('')\n    expect(getLocalizedCurrencySymbol('en-US', 'BTC')).toEqual('₿')\n    expect(getLocalizedCurrencySymbol('zh-Hans', 'XRP')).toEqual('\\uE900')\n    expect(getLocalizedCurrencySymbol('zh-Hans', 'ETH')).toEqual('\\uE902')\n  })\n\n  it('localizeDate', () => {\n    const d = new Date('Tue Mar 20 2018')\n    expect(localizeDate()).toEqual(null)\n    expect(localizeDate(d)).toEqual('3/20/2018')\n  })\n\n  test('duration to human', () => {\n    expect(durationToHuman(30)).toBe('30.00 sec.')\n    expect(durationToHuman(3000)).toBe('50.00 min.')\n    expect(durationToHuman(30000)).toBe('8.33 hr.')\n    expect(durationToHuman(300000)).toBe('3.47 d.')\n    expect(durationToHuman(30000000)).toBe('11.38 mo.')\n    expect(durationToHuman(300000000)).toBe('9.51 yr.')\n  })\n\n  test('format duration detailed', () => {\n    // Basic cases\n    expect(formatDurationDetailed(0)).toBe('0s')\n    expect(formatDurationDetailed(30)).toBe('30s')\n    expect(formatDurationDetailed(60)).toBe('1min')\n    expect(formatDurationDetailed(3600)).toBe('1hr')\n    expect(formatDurationDetailed(86400)).toBe('1d')\n    expect(formatDurationDetailed(3665)).toBe('1hr.1min.5s')\n    expect(formatDurationDetailed(90061)).toBe('1d.1hr.1min.1s')\n    expect(formatDurationDetailed(7200 + 180 + 5)).toBe('2hr.3min.5s')\n    expect(formatDurationDetailed(604800 + 14400 + 180 + 5)).toBe(\n      '7d.4hr.3min.5s',\n    )\n    expect(formatDurationDetailed(31536000 + 86400 + 3600)).toBe('1yr.1d.1hr')\n    expect(formatDurationDetailed(2629746)).toBe('30d.10hr.29min.6s')\n\n    // Test maxUnits parameter\n    expect(formatDurationDetailed(90061, 2)).toBe('1d.1hr')\n    expect(formatDurationDetailed(90061, 3)).toBe('1d.1hr.1min')\n\n    // Test negative values (should handle absolute value)\n    expect(formatDurationDetailed(-3665)).toBe('1hr.1min.5s')\n  })\n})\n\ndescribe('AMM utils format asset', () => {\n  it('formats XRP asset', () => {\n    const asset = '10000000000'\n    const formatted = formatAsset(asset)\n\n    expect(formatted).toEqual({ currency: 'XRP' })\n  })\n\n  it('formats non XRP asset', () => {\n    const asset = { currency: 'USD', amount: '100000', issuer: 'your mom' }\n    const formatted = formatAsset(asset)\n\n    expect(formatted).toEqual({ currency: 'USD', issuer: 'your mom' })\n  })\n})\n\ndescribe('Shorten utils', () => {\n  describe('shortenAccount', () => {\n    it('shortens long account addresses', () => {\n      const longAccount = 'rN7n7otQDd6FczFgLdlqtyMVrn5f4W01dn'\n      expect(shortenAccount(longAccount)).toBe('rN7n7ot...W01dn')\n    })\n\n    it('returns short account addresses unchanged', () => {\n      const shortAccount = 'rShortAddr'\n      expect(shortenAccount(shortAccount)).toBe(shortAccount)\n    })\n  })\n\n  describe('stripHttpProtocol', () => {\n    it('strips https:// protocol', () => {\n      expect(stripHttpProtocol('https://www.example.com')).toBe(\n        'www.example.com',\n      )\n    })\n\n    it('strips http:// protocol', () => {\n      expect(stripHttpProtocol('http://example.com')).toBe('example.com')\n    })\n\n    it('returns domain unchanged if no protocol', () => {\n      expect(stripHttpProtocol('example.com')).toBe('example.com')\n    })\n  })\n\n  describe('shortenDomain', () => {\n    it('shortens long domain names', () => {\n      const longDomain = 'verylongdomainnamethatexceedslimit.com'\n      expect(shortenDomain(longDomain)).toBe('verylongdomainn...dslimit.com')\n    })\n\n    it('returns short domain names unchanged', () => {\n      const shortDomain = 'example.com'\n      expect(shortenDomain(shortDomain)).toBe(shortDomain)\n    })\n  })\n\n  describe('shortenNFTTokenID', () => {\n    it('shortens long NFT token IDs', () => {\n      const longTokenID =\n        '000827103B94ECBB7BF0A0A6ED62B3607801A27B65F4B11F5E1D5E8A3F3D8E9A'\n      expect(shortenNFTTokenID(longTokenID)).toBe('000827103B...8A3F3D8E9A')\n    })\n\n    it('returns short NFT token IDs unchanged', () => {\n      const shortTokenID = '000827103B94ECBB7BF0'\n      expect(shortenNFTTokenID(shortTokenID)).toBe(shortTokenID)\n    })\n  })\n\n  describe('shortenMPTID', () => {\n    it('shortens long MPT token IDs', () => {\n      const longMPTID =\n        '00000000A8B71A79C3CE4E8A3F3D8E9A5BEB9D7C6F4B11F5E1D5E8A3F3D8E9A'\n      expect(shortenMPTID(longMPTID)).toBe('00000000A8...8A3F3D8E9A')\n    })\n\n    it('returns short MPT token IDs unchanged', () => {\n      const shortMPTID = '00000000A8B71A79C3CE'\n      expect(shortenMPTID(shortMPTID)).toBe(shortMPTID)\n    })\n  })\n\n  describe('convertToHttpUrl', () => {\n    it('converts IPFS URLs to HTTP URLs', () => {\n      expect(\n        convertToHttpURL(\n          'ipfs://QmXhvvWs3HaFkJvDuYvanj2pv31yFQGJewfEhfme1Sv47Y',\n        ),\n      ).toBe(\n        'https://ipfs.io/ipfs/QmXhvvWs3HaFkJvDuYvanj2pv31yFQGJewfEhfme1Sv47Y',\n      )\n    })\n\n    it('preserves https:// URLs as-is', () => {\n      expect(convertToHttpURL('https://example.com/logo.png')).toBe(\n        'https://example.com/logo.png',\n      )\n    })\n\n    it('adds https:// to plain domain URLs', () => {\n      expect(convertToHttpURL('logo.svgcdn.com/logos/openai-icon.png')).toBe(\n        'https://logo.svgcdn.com/logos/openai-icon.png',\n      )\n    })\n\n    it('handles empty strings', () => {\n      expect(convertToHttpURL('')).toBe('')\n    })\n\n    it('handles other protocols', () => {\n      expect(convertToHttpURL('ftp://example.com/file.txt')).toBe(\n        'ftp://example.com/file.txt',\n      )\n    })\n  })\n\n  describe('shortenLPToken', () => {\n    it('keeps first 10 and last 7 characters', () => {\n      const token = '03CE60C3DB22CF7F7157810936F27A5B485C8DB9'\n      const result = shortenLPToken(token)\n      expect(result).toBe('03CE60C3DB...85C8DB9')\n      expect(result.startsWith(token.substring(0, 10))).toBe(true)\n      expect(result.endsWith(token.substring(token.length - 7))).toBe(true)\n    })\n  })\n})\n"
  },
  {
    "path": "src/containers/shared/transactionUtils.ts",
    "content": "import type { TransactionMetadata, IssuedCurrencyAmount } from 'xrpl'\nimport type {\n  CreatedNode,\n  DeletedNode,\n  ModifiedNode,\n  Node,\n} from 'xrpl/dist/npm/models/transactions/metadata'\nimport { Transaction } from './types'\nimport { localizeNumber, CURRENCY_OPTIONS } from './utils'\n\nexport const SUCCESSFUL_TRANSACTION = 'tesSUCCESS'\nexport const XRP_BASE = 1000000\nexport const hexMatch = /^(0x)?[0-9A-Fa-f]+$/\nexport const ACCOUNT_ZERO = 'rrrrrrrrrrrrrrrrrrrrrhoLvTp'\n\nexport const TX_FLAGS: Record<string, Record<number, string>> = {\n  all: {\n    0x80000000: 'tfFullyCanonicalSig',\n  },\n  AccountSet: {\n    0x00010000: 'tfRequireDestTag',\n    0x00020000: 'tfOptionalDestTag',\n    0x00040000: 'tfRequireAuth',\n    0x00080000: 'tfOptionalAuth',\n    0x00100000: 'tfDisallowXRP',\n    0x00200000: 'tfAllowXRP',\n  },\n  AMMDeposit: {\n    0x00010000: 'tfLPToken',\n    0x00080000: 'tfSingleAsset',\n    0x00100000: 'tfTwoAsset',\n    0x00200000: 'tfOneAssetLPToken',\n    0x00400000: 'tfLimitLPToken',\n  },\n  AMMWithdraw: {\n    0x00010000: 'tfLPToken',\n    0x00020000: 'tfWithdrawAll',\n    0x00040000: 'tfOneAssetWithdrawAll',\n    0x00080000: 'tfSingleAsset',\n    0x00100000: 'tfTwoAsset',\n    0x00200000: 'tfOneAssetLPToken',\n    0x00400000: 'tfLimitLPToken',\n  },\n  Batch: {\n    0x00010000: 'tfAllOrNothing',\n    0x00020000: 'fOnlyOne',\n    0x00040000: 'tfUntilFailure',\n    0x00080000: 'tfIndependent',\n  },\n  LoanSet: {\n    0x00010000: 'tfLoanOverpayment',\n  },\n  LoanManage: {\n    0x00010000: 'tfLoanDefault',\n    0x00020000: 'tfLoanImpair',\n    0x00040000: 'tfLoanUnimpair',\n  },\n  LoanPay: {\n    0x00010000: 'tfLoanOverpayment',\n    0x00020000: 'tfLoanFullPayment',\n  },\n  MPTokenAuthorize: {\n    0x00000001: 'tfMPTUnauthorize',\n  },\n  MPTokenIssuanceCreate: {\n    0x00000002: 'tfMPTCanLock',\n    0x00000004: 'tfMPTRequireAuth',\n    0x00000008: 'tfMPTCanEscrow',\n    0x00000010: 'tfMPTCanTrade',\n    0x00000020: 'tfMPTCanTransfer',\n    0x00000040: 'tfMPTCanClawback',\n  },\n  MPTokenIssuanceSet: {\n    0x00000001: 'tfMPTLock',\n    0x00000002: 'tfMPTUnlock',\n  },\n  NFTokenMint: {\n    0x00000001: 'tfBurnable',\n    0x00000002: 'tfOnlyXRP',\n    0x00000004: 'tfTrustLine',\n    0x00000008: 'tfTransferable',\n  },\n  NFTokenOfferCreate: {\n    0x00000001: 'tfSellNFToken',\n  },\n  OfferCreate: {\n    0x00010000: 'tfPassive',\n    0x00020000: 'tfImmediateOrCancel',\n    0x00040000: 'tfFillOrKill',\n    0x00080000: 'tfSell',\n    0x00100000: 'tfHybrid',\n  },\n  Payment: {\n    0x00010000: 'tfNoDirectRipple',\n    0x00020000: 'tfPartialPayment',\n    0x00040000: 'tfLimitQuality',\n  },\n  PaymentChannelClaim: {\n    0x00010000: 'tfRenew',\n    0x00020000: 'tfClose',\n  },\n  TrustSet: {\n    0x00010000: 'tfSetAuth',\n    0x00020000: 'tfSetNoRipple',\n    0x00040000: 'tfClearNoRipple',\n    0x00100000: 'tfSetFreeze',\n    0x00200000: 'tfClearFreeze',\n    0x00400000: 'tfSetDeepFreeze',\n    0x00800000: 'tfClearDeepFreeze',\n  },\n  VaultCreate: {\n    1: 'vaultStrategyFirstComeFirstServe',\n  },\n  XChainModifyBridge: {\n    0x00010000: 'tfClearAccountCreateAmount',\n  },\n}\n\nexport const ACCOUNT_FLAGS: Record<number, string> = {\n  17: 'asfAllowTrustLineLocking',\n  16: 'asfAllowTrustLineClawback',\n  15: 'asfDisallowIncomingTrustline',\n  14: 'asfDisallowIncomingPayChan',\n  13: 'asfDisallowIncomingCheck',\n  12: 'asfDisallowIncomingNFTokenOffer',\n  10: 'asfAuthorizedNFTokenMinter',\n  9: 'asfDepositAuth',\n  8: 'asfDefaultRipple',\n  7: 'asfGlobalFreeze',\n  6: 'asfNoFreeze',\n  5: 'asfAccountTxnID',\n  4: 'asfDisableMaster',\n  3: 'asfDisallowXRP',\n  2: 'asfRequireAuth',\n  1: 'asfRequireDest',\n}\n\nexport const HOOK_FLAGS: Record<number, string> = {\n  0x00000001: 'hsfOverride',\n  0x00000010: 'hsfNSDelete',\n  0x00000100: 'hsfCollect',\n}\n\nexport const CURRENCY_ORDER = [\n  'CNY',\n  'JPY',\n  'CHF',\n  'CAD',\n  'NZD',\n  'AUD',\n  'GBP',\n  'USD',\n  'EUR',\n  'LTC',\n  'ETH',\n  'BTC',\n  'XAG',\n  'XAU',\n  'XRP',\n]\n\nexport { CURRENCY_OPTIONS }\n\nexport const DATE_OPTIONS = {\n  hour: 'numeric',\n  minute: 'numeric',\n  second: 'numeric',\n  year: 'numeric',\n  month: 'long',\n  day: 'numeric',\n  hour12: true,\n  timeZone: 'UTC',\n}\n\nexport function groupAffectedNodes(trans: Transaction) {\n  const group: {\n    created: CreatedNode['CreatedNode'][]\n    deleted: DeletedNode['DeletedNode'][]\n    modified: ModifiedNode['ModifiedNode'][]\n  } = {\n    created: [],\n    modified: [],\n    deleted: [],\n  }\n  ;(trans.meta.AffectedNodes || []).forEach((node) => {\n    if ('DeletedNode' in node && node.DeletedNode) {\n      group.deleted.push(node.DeletedNode)\n    } else if ('ModifiedNode' in node && node.ModifiedNode) {\n      group.modified.push(node.ModifiedNode)\n    } else if ('CreatedNode' in node && node.CreatedNode) {\n      group.created.push(node.CreatedNode)\n    }\n  })\n  group.modified.sort((a, b) =>\n    a.LedgerEntryType.localeCompare(b.LedgerEntryType),\n  )\n  return group\n}\n\nexport function decodeHex(hex: string): string {\n  let str = ''\n  for (let i = 0; i < hex.length; i += 2) {\n    const v = parseInt(hex.substring(i, i + 2), 16)\n    str += v ? String.fromCharCode(v) : ''\n  }\n  return str\n}\n\nexport function buildMemos(trans: Transaction) {\n  const { Memos = [] } = trans.tx\n  const memoList: string[] = []\n  Memos.forEach((data) => {\n    if (data.Memo.MemoType && hexMatch.test(data.Memo.MemoType)) {\n      memoList.push(decodeHex(data.Memo.MemoType))\n    }\n\n    if (data.Memo.MemoData && hexMatch.test(data.Memo.MemoData)) {\n      memoList.push(decodeHex(data.Memo.MemoData))\n    }\n\n    if (data.Memo.MemoFormat && hexMatch.test(data.Memo.MemoFormat)) {\n      memoList.push(decodeHex(data.Memo.MemoFormat))\n    }\n  })\n  return memoList\n}\n\nexport function buildFlags(trans: Transaction): string[] {\n  const flags = TX_FLAGS[trans.tx.TransactionType] || {}\n  const bits = zeroPad((trans.tx.Flags || 0).toString(2), 32).split('')\n\n  return bits\n    .map((value, i) => {\n      const bin = zeroPad(1, 32 - i, true)\n      const int = parseInt(bin, 2)\n      // const type = i < 8 ? 'universal' : (i < 16 ? 'type_specific' : 'reserved');\n      return value === '1'\n        ? TX_FLAGS.all[int] || flags[int] || hex32(int)\n        : undefined\n    })\n    .filter((d) => Boolean(d)) as string[]\n}\n\nexport function buildHookFlags(flags: number): string[] {\n  const bits = zeroPad((flags || 0).toString(2), 32).split('')\n\n  return bits\n    .map((value, i) => {\n      const bin = zeroPad(1, 32 - i, true)\n      const int = parseInt(bin, 2)\n      // const type = i < 8 ? 'universal' : (i < 16 ? 'type_specific' : 'reserved');\n      return value === '1' ? HOOK_FLAGS[int] || hex32(int) : undefined\n    })\n    .filter((d) => Boolean(d)) as string[]\n}\n\nfunction hex32(d: number): string {\n  const int = d & 0xffffffff\n  const hex = int.toString(16).toUpperCase()\n  return `0x${`00000000${hex}`.slice(-8)}`\n}\n\nexport function zeroPad(\n  num: string | number,\n  size: number,\n  back = false,\n): string {\n  let s = String(num)\n  while (s.length < (size || 2)) {\n    s = back ? `${s}0` : `0${s}`\n  }\n\n  return s\n}\n\nexport function normalizeAmount(\n  amount: IssuedCurrencyAmount | number | string,\n  language = 'en-US',\n): string | null {\n  const currency = typeof amount === 'object' ? amount.currency : 'XRP'\n  const value =\n    typeof amount === 'object' ? amount.value : Number(amount) / XRP_BASE\n  const numberOption = { ...CURRENCY_OPTIONS, currency }\n  return localizeNumber(value, language, numberOption)\n}\n\nexport function findNode(\n  meta: TransactionMetadata,\n  nodeType: 'DeletedNode' | 'CreatedNode' | 'ModifiedNode',\n  entryType: string,\n): any {\n  const metaNode = meta.AffectedNodes.find(\n    (node: Node) =>\n      node[nodeType] && node[nodeType].LedgerEntryType === entryType,\n  )\n  return metaNode ? metaNode[nodeType] : null\n}\n"
  },
  {
    "path": "src/containers/shared/types.ts",
    "content": "import type {\n  TransactionMetadata,\n  Memo,\n  IssuedCurrencyAmount,\n  MPTAmount,\n} from 'xrpl'\n\nexport type Amount = IssuedCurrencyAmount | MPTAmount | string\n\nexport type ExplorerAmount = {\n  issuer?: string\n  currency: string\n  amount: number | string\n  isMPT?: boolean\n}\n\nexport interface Tx {\n  Memos?: Memo[]\n  TransactionType: string\n  Flags?: number\n}\n\nexport interface Transaction {\n  meta: TransactionMetadata\n  tx: Tx\n}\n\n// A summary of a Transaction created by summarizeTransaction\nexport interface TransactionSummary {\n  hash: string\n  ctid: string\n  type: string\n  result: string\n  account: string\n  sequence: number\n}\n\nexport interface AccountNFToken {\n  Flags: number\n  Issuer: string\n  NFTokenID: string\n  NFTokenTaxon: number\n  URI?: string\n  // eslint-disable-next-line camelcase\n  nft_serial: number\n}\n"
  },
  {
    "path": "src/containers/shared/utils.js",
    "content": "const THOUSAND = 1000\nconst MILLION = THOUSAND * THOUSAND\nconst BILLION = MILLION * THOUSAND\nconst TRILLION = BILLION * THOUSAND\nconst QUADRILLION = TRILLION * THOUSAND\n\n// Divisor to convert AMM trading fee integer to a percentage (e.g. 1000 → 1%)\nconst TRADING_FEE_TO_PERCENT = 1000\n\n// Divisor to convert AMM trading fee integer to a decimal (e.g. 1000 → 0.01)\nexport const TRADING_FEE_BASE = TRADING_FEE_TO_PERCENT * 100\n\nexport const EXOTIC_SYMBOLS = {\n  BTC: '\\u20BF',\n  XRP: '\\uE900',\n  ETH: '\\uE902',\n}\n\nexport const isCurrencyExoticSymbol = (currency) =>\n  currency !== undefined &&\n  typeof currency === 'string' &&\n  Object.keys(EXOTIC_SYMBOLS).includes(currency)\n\nexport const getCurrencySymbol = (currency) =>\n  EXOTIC_SYMBOLS[currency] || currency\n\nexport const TITLE_LENGTH = 77\nexport const NOT_FOUND = 404\nexport const SERVER_ERROR = 500\nexport const BAD_REQUEST = 400\n\nexport const FETCH_INTERVAL_MILLIS = 5000\nexport const FETCH_INTERVAL_VHS_MILLIS = 60 * 1000 // 1 minute\nexport const FETCH_INTERVAL_NODES_MILLIS = 60000\nexport const FETCH_INTERVAL_ERROR_MILLIS = 300\nexport const FETCH_INTERVAL_XRP_USD_ORACLE_MILLIS = 60 * 1000 // 1 minute\nexport const FETCH_INTERVAL_FEE_SETTINGS_MILLIS = 10 * 60 * 1000 // 10 minutes\n\nexport const DECIMAL_REGEX = /^\\d+$/\nexport const HASH256_REGEX = /[0-9A-Fa-f]{64}/i\nexport const HASH192_REGEX = /[0-9A-Fa-f]{48}/i\nexport const CURRENCY_REGEX =\n  /^[a-zA-Z0-9]{3,}[.:+-]r[rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz]{27,35}$/\nexport const FULL_CURRENCY_REGEX =\n  /^[0-9A-Fa-f]{40}[.:+-]r[rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz]{27,35}$/\nexport const VALIDATORS_REGEX = /^n[9H][0-9A-Za-z]{50}$/\nexport const CTID_REGEX = /^[cC][0-9A-Za-z]{15}$/\n\nexport const PURPLE = '#8884d8'\nexport const GREEN_400 = '#5BEB9D'\nexport const GREEN_500 = '#32E685'\nexport const GREEN_800 = '#1E8A50'\nexport const PURPLE_500 = '#7919FF'\nexport const PURPLE_700 = '#4A00B2'\nexport const GREY_0 = '#FFFFFF'\nexport const GREY_400 = '#A2A2A4'\nexport const GREY_600 = '#656E81'\nexport const GREY_800 = '#383D47'\nexport const BLACK_600 = '#454549'\nexport const MAGENTA_700 = '#B20058'\n\nexport const DROPS_TO_XRP_FACTOR = 1000000.0\n\nexport const ONE_TENTH_BASIS_POINT = 1000\nexport const ONE_TENTH_BASIS_POINT_DIGITS = 3\nexport const ONE_TENTH_BASIS_POINT_CUTOFF = 0.001\n\nexport const BREAKPOINTS = {\n  desktop: 1200,\n  landscape: 900,\n  portrait: 600,\n  phone: 415,\n}\n\nexport const CURRENCY_OPTIONS = {\n  style: 'currency',\n  currency: '',\n  minimumFractionDigits: 2,\n  maximumFractionDigits: 8,\n}\n\nconst NUMBER_DEFAULT_OPTIONS = {\n  style: 'decimal',\n  minimumFractionDigits: 0,\n  maximumFractionDigits: 20,\n  useGrouping: true,\n}\n\nconst FORMAT_PRICE_DEFAULT_OPTIONS = {\n  lang: 'en-US',\n  currency: 'USD',\n  decimals: 4,\n  padding: 0,\n}\n\nexport const ORACLE_ACCOUNT = 'rXUMMaPpZqPutoRszR29jtC8amWq3APkx'\n\nexport const isEarlierVersion = (source, target) => {\n  if (source === target) return false\n  if (source === 'N/A') return true\n  if (target === 'N/A') return false\n  const sourceDecomp = source.split('.')\n  const targetDecomp = target.split('.')\n  const sourceMajor = parseInt(sourceDecomp[0], 10)\n  const sourceMinor = parseInt(sourceDecomp[1], 10)\n  const targetMajor = parseInt(targetDecomp[0], 10)\n  const targetMinor = parseInt(targetDecomp[1], 10)\n  // Compare major version\n  if (sourceMajor !== targetMajor) {\n    return sourceMajor < targetMajor\n  }\n  // Compare minor version\n  if (sourceMinor !== targetMinor) {\n    return sourceMinor < targetMinor\n  }\n  const sourcePatch = sourceDecomp[2].split('-')\n  const targetPatch = targetDecomp[2].split('-')\n\n  const sourcePatchVersion = parseInt(sourcePatch[0], 10)\n  const targetPatchVersion = parseInt(targetPatch[0], 10)\n\n  // Compare patch version\n  if (sourcePatchVersion !== targetPatchVersion) {\n    return sourcePatchVersion < targetPatchVersion\n  }\n\n  // Compare release version\n  if (sourcePatch.length !== targetPatch.length) {\n    return sourcePatch.length > targetPatch.length\n  }\n\n  if (sourcePatch.length === 2) {\n    // Compare different release types\n    if (sourcePatch[1][0] !== targetPatch[1][0]) {\n      return sourcePatch[1] < targetPatch[1]\n    }\n    // Compare beta version\n    if (sourcePatch[1][0] === 'b') {\n      return (\n        parseInt(sourcePatch[1].slice(1), 10) <\n        parseInt(targetPatch[1].slice(1), 10)\n      )\n    }\n    // Compare rc version\n    return (\n      parseInt(sourcePatch[1].slice(2), 10) <\n      parseInt(targetPatch[1].slice(2), 10)\n    )\n  }\n\n  return false\n}\n\nexport const isValidJsonString = (str) => {\n  try {\n    JSON.parse(str)\n    return true\n  } catch (e) {\n    return false\n  }\n}\n\n// Document: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/NumberFormat\nexport const localizeNumber = (\n  num,\n  lang = 'en-US',\n  options = {},\n  isMPT = false,\n) => {\n  const number = Number.parseFloat(num)\n  const config = { ...NUMBER_DEFAULT_OPTIONS, ...options }\n\n  if (Number.isNaN(number)) {\n    return null\n  }\n  if (config.style === 'currency' && !isMPT) {\n    try {\n      const neg = number < 0 ? '-' : ''\n      const d = new Intl.NumberFormat(lang, config).format(number)\n      const index = d.search(/\\d/)\n      const symbol = d.slice(0, index).replace(/-/, '').trim()\n      const newSymbol =\n        EXOTIC_SYMBOLS[config.currency] ||\n        (symbol.toUpperCase() === config.currency.toUpperCase() ? '' : symbol)\n      return `${neg}${newSymbol}${d.slice(index)}`\n    } catch (error) {\n      config.style = 'decimal'\n      delete config.currency\n      return Intl.NumberFormat(lang, config).format(number)\n    }\n  }\n\n  return new Intl.NumberFormat(lang, config).format(number)\n}\n\nexport function formatPrice(number, options = {}) {\n  const { lang, currency, decimals, padding } = {\n    ...FORMAT_PRICE_DEFAULT_OPTIONS,\n    ...options,\n  }\n  return number\n    ? localizeNumber(number.toPrecision(decimals), lang, {\n        style: 'currency',\n        currency,\n        minimumFractionDigits: number.toPrecision(decimals).includes('.')\n          ? padding\n          : 0,\n      })\n    : undefined\n}\n\n// Document: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat\nexport const localizeDate = (date, lang = 'en-US', options = {}) => {\n  // TODO: default config\n  if (!date) {\n    return null\n  }\n  return new Intl.DateTimeFormat(lang, options).format(date)\n}\n\nexport const DATE_OPTIONS_NUMERIC = {\n  hour: 'numeric',\n  minute: 'numeric',\n  second: 'numeric',\n  year: 'numeric',\n  month: 'numeric',\n  day: 'numeric',\n  hour12: true,\n  timeZone: 'UTC',\n}\n\nexport const getLocalizedCurrencySymbol = (\n  lang = 'en-US',\n  currency = 'USD',\n) => {\n  const options = {\n    style: 'currency',\n    minimumFractionDigits: 0,\n    maximumFractionDigits: 0,\n    currency,\n  }\n\n  const formatted = localizeNumber(1, lang, options)\n  return formatted.split('1')[0].trim()\n}\n\n/**\n * Formats small numbers (< 1) with 4 decimal places, showing trailing zeros\n * @param value - The numeric value to format (should be < 1)\n * @param lang - Language for localization\n * @returns Formatted string with 4 decimal places\n */\nexport const formatSmallNumber = (value, lang = 'en-US', digits = 4) => {\n  if (value === 0)\n    return localizeNumber(0, lang, {\n      minimumFractionDigits: digits,\n      maximumFractionDigits: digits,\n    })\n  if (value < 0.0001) return '< 0.0001'\n  return localizeNumber(value, lang, {\n    minimumFractionDigits: digits,\n    maximumFractionDigits: digits,\n  })\n}\n\nexport const formatLargeNumber = (d = 0, digits = 1, lang = 'en-US') => {\n  // For numbers >= 10,000 (5 digits), use abbreviations with 1 decimal place\n  if (d >= 10000) {\n    if (d >= QUADRILLION) {\n      return {\n        num: localizeNumber(d / QUADRILLION, lang, {\n          minimumFractionDigits: digits,\n          maximumFractionDigits: digits,\n        }),\n        unit: 'Q',\n      }\n    }\n\n    if (d >= TRILLION) {\n      return {\n        num: localizeNumber(d / TRILLION, lang, {\n          minimumFractionDigits: digits,\n          maximumFractionDigits: digits,\n        }),\n        unit: 'T',\n      }\n    }\n\n    if (d >= BILLION) {\n      return {\n        num: localizeNumber(d / BILLION, lang, {\n          minimumFractionDigits: digits,\n          maximumFractionDigits: digits,\n        }),\n        unit: 'B',\n      }\n    }\n\n    if (d >= MILLION) {\n      return {\n        num: localizeNumber(d / MILLION, lang, {\n          minimumFractionDigits: digits,\n          maximumFractionDigits: digits,\n        }),\n        unit: 'M',\n      }\n    }\n\n    if (d >= THOUSAND) {\n      return {\n        num: localizeNumber(d / THOUSAND, lang, {\n          minimumFractionDigits: digits,\n          maximumFractionDigits: digits,\n        }),\n        unit: 'K',\n      }\n    }\n  }\n\n  // For numbers < 10,000 (less than 5 digits), show full number with 2 decimal places and commas\n  if (d >= 1) {\n    return {\n      num: localizeNumber(d, lang, {\n        minimumFractionDigits: 2,\n        maximumFractionDigits: 2,\n      }),\n      unit: '',\n    }\n  }\n\n  // For numbers < 1, this should not be used (use formatSmallNumber instead)\n  // But keeping legacy behavior for compatibility\n  let variableDigits = digits\n  let numberOfZeros = 0\n  let numberCopy = d\n\n  while (numberCopy < 1 && variableDigits < 20) {\n    numberCopy *= 10\n    numberOfZeros += 1\n    variableDigits =\n      numberOfZeros > variableDigits - 1 ? variableDigits + 1 : variableDigits\n  }\n\n  // handle zeros\n  variableDigits = Math.trunc(d.toFixed(20)) === 0 ? digits : variableDigits\n\n  if (digits < variableDigits) {\n    variableDigits = digits\n  }\n\n  return {\n    num: d.toFixed(variableDigits),\n    unit: '',\n  }\n}\n\nexport const convertHexToBigInt = (s) => BigInt(`0x${s}`)\n\nexport const durationToHuman = (s, decimal = 2) => {\n  const d = {}\n  const seconds = Math.abs(s)\n\n  if (seconds < 60) {\n    d.num = seconds\n    d.unit = 'sec.'\n  } else if (seconds < 60 * 60) {\n    d.num = seconds / 60\n    d.unit = 'min.'\n  } else if (seconds < 60 * 60 * 24) {\n    d.num = seconds / (60 * 60)\n    d.unit = 'hr.'\n  } else if (seconds < 60 * 60 * 24 * 180) {\n    d.num = seconds / (60 * 60 * 24)\n    d.unit = 'd.'\n  } else if (seconds < 60 * 60 * 24 * 365 * 2) {\n    d.num = seconds / (60 * 60 * 24 * 30.5)\n    d.unit = 'mo.'\n  } else {\n    d.num = seconds / (60 * 60 * 24 * 365)\n    d.unit = 'yr.'\n  }\n\n  return `${d.num.toFixed(decimal)} ${d.unit}`\n}\n\n/**\n * Converts a duration in seconds to a human-readable format with multiple time units.\n *\n * This function breaks down a duration into its constituent time units (years, months, days,\n * hours, minutes, seconds) and formats them in a compact, dot-separated format.\n *\n * @param {number} totalSeconds - The duration in seconds to convert\n * @param {number} maxUnits - Maximum number of time units to include in the output (default: 4)\n * @returns {string} A formatted duration string (e.g., \"1d.2hr.30min.15s\")\n *\n * @example\n * formatDurationDetailed(3665) // Returns \"1hr.1min.5s\"\n * formatDurationDetailed(90061) // Returns \"1d.1hr.1min.1s\"\n * formatDurationDetailed(90061, 2) // Returns \"1d.1hr\" (limited to 2 units)\n * formatDurationDetailed(0) // Returns \"0s\"\n */\nexport const formatDurationDetailed = (totalSeconds, maxUnits = 4) => {\n  const seconds = Math.abs(totalSeconds)\n  const units = []\n\n  // Define time units in descending order\n  const timeUnits = [\n    { name: 'yr', value: 365 * 24 * 60 * 60 },\n    { name: 'mo', value: 30.44 * 24 * 60 * 60 }, // Average month length\n    { name: 'd', value: 24 * 60 * 60 },\n    { name: 'hr', value: 60 * 60 },\n    { name: 'min', value: 60 },\n    { name: 's', value: 1 },\n  ]\n\n  let remaining = Math.floor(seconds)\n\n  for (const unit of timeUnits) {\n    if (remaining >= unit.value && units.length < maxUnits) {\n      const count = Math.floor(remaining / unit.value)\n      if (count > 0) {\n        units.push(`${count}${unit.name}`)\n        remaining -= count * unit.value\n      }\n    }\n  }\n\n  // If no units were added (e.g., 0 seconds), return \"0s\"\n  if (units.length === 0) {\n    return '0s'\n  }\n\n  return units.join('.')\n}\n\nexport const removeRoutes = (routes, ...routesToRemove) =>\n  routes.filter((route) => !routesToRemove.includes(route.title))\n\nexport const formatAsset = (asset) =>\n  typeof asset === 'string'\n    ? { currency: 'XRP' }\n    : {\n        currency: asset.currency,\n        issuer: asset.issuer,\n      }\n\n// For AMM, the trading fee is in units of 1/100,000; a value of 1 is equivalent to a 0.001% fee.\nexport const formatTradingFee = (tradingFee) =>\n  tradingFee !== undefined\n    ? localizeNumber(tradingFee / TRADING_FEE_TO_PERCENT, 'en-US', {\n        minimumFractionDigits: 0,\n        maximumFractionDigits: 3,\n      })\n    : undefined\n\nexport const computeRippleStateBalanceChange = (node) => {\n  const fields = node.FinalFields || node.NewFields\n  const prev = node.PreviousFields\n  const { currency } = fields.Balance\n  const numberOption = { ...CURRENCY_OPTIONS, currency }\n  let finalBalance = fields.Balance.value\n  let previousBalance = prev && prev.Balance ? prev.Balance.value : 0\n  let account\n  let counterAccount\n\n  if (finalBalance < 0) {\n    account = fields.HighLimit.issuer\n    counterAccount = fields.LowLimit.issuer\n    finalBalance = 0 - finalBalance\n    previousBalance = 0 - previousBalance\n  } else {\n    account = fields.LowLimit.issuer\n    counterAccount = fields.HighLimit.issuer\n  }\n\n  const change = finalBalance - previousBalance\n  return {\n    change,\n    numberOption,\n    previousBalance,\n    finalBalance,\n    currency,\n    account,\n    counterAccount,\n  }\n}\n\nexport const computeMPTokenBalanceChange = (node) => {\n  const final = node.FinalFields || node.NewFields\n  const prev = node.PreviousFields\n  const prevAmount = prev && prev.MPTAmount ? prev.MPTAmount : '0'\n  const finalAmount = final.MPTAmount ?? '0'\n\n  return {\n    previousBalance: BigInt(prevAmount),\n    finalBalance: BigInt(finalAmount),\n    account: final.Account,\n    change: BigInt(finalAmount) - BigInt(prevAmount),\n  }\n}\n\nexport const computeMPTIssuanceBalanceChange = (node) => {\n  const final = node.FinalFields || node.NewFields\n  const prev = node.PreviousFields\n  const prevAmount =\n    prev && prev.OutstandingAmount ? prev.OutstandingAmount : '0'\n  const finalAmount = final.OutstandingAmount ?? '0'\n\n  return {\n    previousBalance: BigInt(prevAmount),\n    finalBalance: BigInt(finalAmount),\n    account: final.Issuer,\n    change: BigInt(finalAmount) - BigInt(prevAmount),\n  }\n}\n\nexport const renderXRP = (d, language) => {\n  const options = { ...CURRENCY_OPTIONS, currency: 'XRP' }\n  return localizeNumber(d, language, options)\n}\n\n/**\n * Converts a scaled integer to a its original value and return it as a string.\n * Formula: originalPrice = assetPrice / 10^scale\n *\n * @param {string | number | bigint} assetPrice - The scaled value.\n *   - string: interpreted as hex (for Price Oracles - XLS-0047)\n *   - number: interpreted as decimal\n *   - bigint: interpreted as decimal (for MPT amounts, which can be > Number.MAX_SAFE_INTEGER)\n * @param {number} scale - The number of decimal places.\n * @returns {string} The formatted decimal string.\n *\n * @example\n * convertScaledPrice(\"5f5e100\", 6)  // \"100\" (hex string from Oracle)\n * convertScaledPrice(1000000, 6)    // \"1\" (number from MPT)\n *\n * @see https://github.com/XRPLF/XRPL-Standards/tree/master/XLS-0047-PriceOracles\n */\nexport function convertScaledPrice(assetPrice, scale) {\n  const scaledPriceInBigInt =\n    typeof assetPrice === 'string'\n      ? BigInt(`0x${assetPrice}`)\n      : BigInt(assetPrice)\n\n  const divisor = BigInt(10 ** scale)\n  const integerPart = scaledPriceInBigInt / divisor\n  const remainder = scaledPriceInBigInt % divisor\n  const fractionalPart = (remainder * BigInt(10 ** scale)) / divisor\n  return fractionalPart > 0\n    ? `${integerPart}.${fractionalPart.toString().padStart(scale, '0')}`\n    : `${integerPart}`\n}\n\nexport const shortenAccount = (addr = '') =>\n  addr.length > 12 ? `${addr.slice(0, 7)}...${addr.slice(-5)}` : addr\n\nexport const stripHttpProtocol = (url = '') => url.replace(/^https?:\\/\\//, '')\n\nexport const shortenDomain = (\n  domain = '',\n  prefixLength = 15,\n  suffixLength = 11,\n) =>\n  domain.length > prefixLength + suffixLength\n    ? `${domain.slice(0, prefixLength)}...${domain.slice(-suffixLength)}`\n    : domain\n\nexport const shortenNFTTokenID = (nftTokenID = '') =>\n  nftTokenID.length > 20\n    ? `${nftTokenID.slice(0, 10)}...${nftTokenID.slice(-10)}`\n    : nftTokenID\n\nexport const shortenMPTID = (\n  mptTokenID = '',\n  prefixLength = 10,\n  suffixLength = 10,\n) =>\n  mptTokenID.length > prefixLength + suffixLength\n    ? `${mptTokenID.slice(0, prefixLength)}...${mptTokenID.slice(-suffixLength)}`\n    : mptTokenID\n\nexport const shortenTxHash = (txHash = '') =>\n  txHash.length > 12 ? `${txHash.slice(0, 6)}...${txHash.slice(-6)}` : txHash\n\nexport const shortenLoanBrokerID = (loanBrokerID = '') =>\n  loanBrokerID.length > 12\n    ? `${loanBrokerID.slice(0, 6)}...${loanBrokerID.slice(-6)}`\n    : loanBrokerID\n\nexport const shortenLoanID = (loanID = '') =>\n  loanID.length > 12 ? `${loanID.slice(0, 6)}...${loanID.slice(-6)}` : loanID\n\n/**\n * Converts URLs to HTTP/HTTPS format, handling IPFS URLs and plain domains\n * @param {string} url - The URL to convert (can be ipfs://, https://, http://, or plain domain)\n * @returns {string} The converted HTTP/HTTPS URL\n */\nexport const convertToHttpURL = (url) => {\n  if (!url) {\n    return url\n  }\n\n  // Handle IPFS URLs - convert to HTTP\n  if (url.startsWith('ipfs://')) {\n    return url.replace('ipfs://', 'https://ipfs.io/ipfs/')\n  }\n\n  // Matches a protocol (e.g. 'http://' or 'https://') at the start of a string\n  const PROTOCOL_REGEX = /^([a-z][a-z0-9+\\-.]*):\\/\\//\n\n  // If URL already has a protocol, return as is\n  if (PROTOCOL_REGEX.test(url)) {\n    return url\n  }\n\n  // Otherwise, assume it's a plain domain and add https://\n  return `https://${url}`\n}\n\n/**\n * Truncates the vaultID to ensure better readability\n * @param {string} vaultID - The complete VaultID obtained from XRPL on-chain data\n * @returns {string} The truncated VaultID\n */\nexport const shortenVaultID = (vaultID) =>\n  `${vaultID.substring(0, 8)}...${vaultID.substring(vaultID.length - 6)}`\n\nexport const shortenLPToken = (lpToken) =>\n  `${lpToken.substring(0, 10)}...${lpToken.substring(lpToken.length - 7)}`\n"
  },
  {
    "path": "src/containers/shared/vhsTypes.ts",
    "content": "export interface NodeResponse {\n  // eslint-disable-next-line camelcase -- from VHS\n  node_public_key: string\n  networks?: string\n  lat?: number\n  long?: number\n  // eslint-disable-next-line camelcase -- from VHS\n  complete_ledgers?: string\n  // eslint-disable-next-line camelcase -- from VHS\n  complete_shards?: string\n  version?: string\n  ip?: string\n  port?: number\n  uptime?: number\n  // eslint-disable-next-line camelcase -- from VHS\n  country_code?: number\n  country?: string\n  region?: string\n  // eslint-disable-next-line camelcase -- from VHS\n  region_code?: number\n  city?: string\n  // eslint-disable-next-line camelcase -- from VHS\n  postal_code?: number\n  timezone?: string\n  // eslint-disable-next-line camelcase -- from VHS\n  server_state?: string\n  // eslint-disable-next-line camelcase -- from VHS\n  io_latency_ms?: number\n  // eslint-disable-next-line camelcase -- from VHS\n  load_factor_server?: number\n}\n\nexport interface NodeData extends NodeResponse {\n  // eslint-disable-next-line camelcase -- mimicking rippled\n  validated_ledger: {\n    // eslint-disable-next-line camelcase -- mimicking rippled\n    ledger_index: number\n  }\n  // eslint-disable-next-line camelcase -- mimicking rippled\n  load_factor: number | null\n}\n\nexport interface ValidatorScore {\n  missed: number\n  total: number\n  score: string\n  incomplete: boolean\n}\n\nexport interface ValidatorReport {\n  missed: string\n  total: string\n  score: string\n  incomplete: boolean\n  chain: string\n  date: string\n  // eslint-disable-next-line camelcase -- mimicking rippled\n  validation_public_key: string\n}\n\nexport interface ValidatorResponse {\n  // eslint-disable-next-line camelcase -- from VHS\n  validation_public_key: string\n  // eslint-disable-next-line camelcase -- from VHS\n  signing_key: string\n  // eslint-disable-next-line camelcase -- from VHS\n  master_key?: string\n  revoked?: boolean\n  domain: string\n  chain: string\n  networks?: string\n  // eslint-disable-next-line camelcase -- from VHS\n  current_index: number\n  // eslint-disable-next-line camelcase -- from VHS\n  server_version?: string\n  // eslint-disable-next-line camelcase -- from VHS\n  agreement_1h: ValidatorScore | null\n  // eslint-disable-next-line camelcase -- from VHS\n  agreement_24h: ValidatorScore | null\n  // eslint-disable-next-line camelcase -- from VHS\n  agreement_30day: ValidatorScore | null\n  partial: boolean\n  unl: string\n}\n\nexport interface ValidatorSupplemented extends ValidatorResponse {\n  // eslint-disable-next-line camelcase -- mimicking rippled\n  ledger_hash: string\n  // eslint-disable-next-line camelcase -- mimicking rippled\n  last_ledger_time: string\n  amendments: Array<{ id: string; name: string }>\n  base_fee: number\n  reserve_base: number\n  reserve_inc: number\n}\n\nexport interface StreamValidator extends ValidatorResponse {\n  // eslint-disable-next-line camelcase -- mimicking rippled\n  ledger_index?: number\n  // eslint-disable-next-line camelcase -- mimicking rippled\n  ledger_hash?: string\n  pubkey?: string\n  time?: string\n  base_fee?: number\n  reserve_base?: number\n  reserve_inc?: number\n}\n\nexport interface FeeSettings {\n  base_fee: number\n  reserve_base: number\n  reserve_inc: number\n}\n\nexport interface AmendmentData {\n  rippled_version: string\n  id: string\n  name: string\n  threshold?: string\n  consensus?: string\n  deprecated: boolean\n  date: string | null\n  tx_hash?: string\n  ledger_index?: number\n  eta?: string\n  voted?: Voter\n}\n\nexport interface Voter {\n  count: number\n  validators: Array<{\n    signing_key: string\n    ledger_index: string\n    unl: string | false\n  }>\n}\n"
  },
  {
    "path": "src/containers/test/QueryClient.ts",
    "content": "import { queryClient } from '../shared/QueryClient'\n\nqueryClient.setDefaultOptions({\n  queries: {\n    ...queryClient.defaultQueryOptions(),\n    cacheTime: 0,\n  },\n})\n\nexport { queryClient as testQueryClient }\n"
  },
  {
    "path": "src/containers/test/mockWsClient.js",
    "content": "import EventEmitter from 'events'\n\nfunction wsEventToType(event) {\n  if (event === 'ledgerClosed') {\n    return 'ledger'\n  }\n  if (event === 'validationReceived') {\n    return 'validation'\n  }\n  return null\n}\n/**\n * This is a mock WS client for testing purposes.\n */\nclass MockWsClient extends EventEmitter {\n  /**\n   * Construct the MockWsClient object.\n   * @param wsUrl The URL for a WebSocket connection. If null, there is no\n   * stream support (you can't test anything stream-related). The default is\n   * null.\n   */\n  constructor(wsUrl = null) {\n    super()\n    this.handlesStreams = wsUrl != null\n    this.handlers = {}\n    this.responses = {}\n    this.returnError = false\n    this.endpoint = 'wss://fakenode.ripple.com:51233'\n    this.p2pSocket = this\n    this.debug = false\n\n    // set up the message handler for streams\n    if (this.handlesStreams) {\n      this.ws = new WebSocket(wsUrl)\n      this.ws.onmessage = (message) => {\n        const streamResult = JSON.parse(message.data)\n        const type = wsEventToType(streamResult?.type)\n        if (type) {\n          this.emit(type, streamResult)\n        }\n      }\n    }\n  }\n\n  setDebug(debug = true) {\n    this.debug = debug\n  }\n\n  /**\n   * Close the WS connection (if needed).\n   */\n  close() {\n    if (this.ws) {\n      this.ws.close()\n    }\n  }\n\n  /**\n   * Set whether the `send` method should return an error.\n   * @param returnError Whether the send method should return an error.\n   */\n  setReturnError(returnError = true) {\n    this.returnError = returnError\n  }\n\n  /**\n   * Add a new response to the mocks.\n   * @param command The rippled command that the message will contain.\n   * @param response The mock response object.\n   */\n  addResponse(command, response) {\n    this.responses[command] = response\n  }\n\n  /**\n   * Add several new responses to the mocks.\n   *\n   * The object should be in the shape of {command: response} where `command`\n   * is the rippled command that the message will contain, and `response` is\n   * the mock response object.\n   * @param responseObj The responses to add to the mocks.\n   */\n  addResponses(responseObj) {\n    this.responses = Object.assign(this.responses, responseObj)\n  }\n\n  /**\n   * Mocks the `send` method on XrplClient.\n   * @param message The message to rippled.\n   * @returns a Promise result. If `this.returnError` has been set to `true`,\n   * the promise will be rejected with an empty shape.\n   */\n  send(message) {\n    if (this.debug) {\n      // eslint-disable-next-line no-console -- For testing purposes\n      console.log(message)\n    }\n    if (this.returnError) {\n      return Promise.reject(new Error({}))\n    }\n    const { command } = message\n    return Promise.resolve(\n      // When an error (no result) return the whole response like xrpl-client does.\n      this.responses[command]?.result || this.responses[command],\n    )\n  }\n\n  /**\n   * Mocks the `getState` method on XrplClient.\n   * @returns a dictionary indicating that the client is connected.\n   */\n  // eslint-disable-next-line class-methods-use-this -- not needed for a mock\n  getState() {\n    return {\n      online: true,\n      server: {\n        version: '1.9.4',\n      },\n    }\n  }\n\n  /**\n   * Mocks the `ready` method on XrplClient.\n   * @returns a Promise that resolves with `true`.\n   */\n  // eslint-disable-next-line class-methods-use-this -- not needed for a mock\n  ready() {\n    return Promise.resolve(true)\n  }\n}\n\nexport default MockWsClient\n"
  },
  {
    "path": "src/containers/test/utils.tsx",
    "content": "import { isValidElement, FC, PropsWithChildren } from 'react'\nimport { Helmet, HelmetProvider } from 'react-helmet-async'\nimport { I18nextProvider } from 'react-i18next'\nimport { QueryClientProvider } from 'react-query'\nimport { MemoryRouter, Routes, Route } from 'react-router'\nimport type i18n from '../../i18n/testConfig'\nimport { testQueryClient } from './QueryClient'\nimport { AnalyticsSetPath } from '../shared/analytics'\nimport { TooltipProvider } from '../shared/components/Tooltip'\n\nexport function flushPromises() {\n  return new Promise((resolve) => setTimeout(resolve))\n}\n\n// @ts-ignore\nHelmet.defaultProps.defer = false\n\nexport const QuickHarness: FC<\n  PropsWithChildren<{\n    i18n: typeof i18n\n    initialEntries?: string[] | undefined\n  }>\n> = ({ i18n: i18nConfig, children, initialEntries }) => (\n  <QueryClientProvider client={testQueryClient}>\n    <I18nextProvider i18n={i18nConfig}>\n      <HelmetProvider>\n        <TooltipProvider>\n          <MemoryRouter initialEntries={initialEntries}>\n            <AnalyticsSetPath />\n            {isValidElement(children) && children?.type === Route ? (\n              <Routes>{children}</Routes>\n            ) : (\n              children\n            )}\n          </MemoryRouter>\n        </TooltipProvider>\n      </HelmetProvider>\n    </I18nextProvider>\n  </QueryClientProvider>\n)\n"
  },
  {
    "path": "src/i18n/baseConfig.ts",
    "content": "import { InitOptions } from 'i18next'\n\nexport const supportedLanguages = {\n  'en-US': 'English',\n  'ja-JP': '日本語',\n  'ko-KR': '한국어',\n  'es-ES': 'Español',\n  'fr-FR': 'Français',\n  'ca-CA': 'Catalan',\n  'my-MM': 'မြန်မာ',\n}\n\nexport const options: InitOptions = {\n  returnNull: false,\n  debug: process.env.NODE_ENV === 'development',\n  fallbackLng: 'en-US',\n  ns: ['translations'], // have a common namespace used around the full app\n  defaultNS: 'translations',\n  keySeparator: false, // we use content as keys\n  interpolation: {\n    escapeValue: false, // not needed for react!!\n    formatSeparator: ',',\n  },\n  supportedLngs: Object.keys(supportedLanguages),\n  react: {\n    useSuspense: true,\n  },\n  backend: {\n    loadPath: '/locales/{{lng}}/{{ns}}.json',\n  },\n  load: 'currentOnly',\n}\n"
  },
  {
    "path": "src/i18n/formatters.ts",
    "content": "import type i18n from 'i18next'\n\n/**\n *\n * @param value text to truncate\n * @param _lng\n * @param truncateOptions.length how many characters to show\n *\n * @example\n * Value property in translations.json: `Hello {{value, truncate(length: 3)}}`\n */\nconst truncate = (\n  value: string,\n  _lng: string | undefined,\n  truncateOptions: { length: number },\n) =>\n  value.substring(0, truncateOptions.length) +\n  (value.length > truncateOptions.length ? '\\u2026' : '')\n\nexport const configureFormatters = (instance: typeof i18n) => {\n  instance.services.formatter?.add('truncate', truncate)\n}\n"
  },
  {
    "path": "src/i18n/index.ts",
    "content": "import i18n from 'i18next'\nimport Backend from 'i18next-http-backend'\nimport LanguageDetector from 'i18next-browser-languagedetector'\nimport { configureFormatters } from './formatters'\nimport { options } from './baseConfig'\n\ni18n\n  .use(Backend)\n  .use(LanguageDetector)\n  .init({ ...options, detector: { excludeCacheFor: [] } } as any)\nconfigureFormatters(i18n)\n\nexport default i18n\n"
  },
  {
    "path": "src/i18n/test/formatters.test.ts",
    "content": "import i18n from '../testConfigEnglish'\n\ndescribe('i18n formatters', () => {\n  describe('truncate', () => {\n    it('should truncate the value to the supplied length', () => {\n      i18n.addResource(\n        'en-US',\n        'test',\n        'woo',\n        `Hello {{value, truncate(length: 3)}}`,\n      )\n      expect(\n        i18n.t('test:woo', { value: 'World', defaultValue: 'Default' }),\n      ).toEqual('Hello Wor\\u2026')\n    })\n  })\n})\n"
  },
  {
    "path": "src/i18n/testConfig.ts",
    "content": "import i18n from 'i18next'\nimport { options } from './baseConfig'\nimport { configureFormatters } from './formatters'\n\ni18n.init({\n  ...options,\n  fallbackLng: 'cimode',\n  debug: false,\n  react: {\n    useSuspense: false,\n  },\n})\n\nconfigureFormatters(i18n)\n\nexport default i18n\n"
  },
  {
    "path": "src/i18n/testConfigEnglish.ts",
    "content": "import i18n from './testConfig'\nimport translations from '../../public/locales/en-US/translations.json'\n\n// Configuration which hardcodes translation to english which helps with complex interpolations\n// This is in a separate file until all tests can be switched over\ni18n.init({\n  lng: 'en-US',\n  resources: {\n    'en-US': {\n      translations,\n    },\n  },\n})\n\nexport default i18n\n"
  },
  {
    "path": "src/index.html",
    "content": "<!doctype html>\n<html>\n  <head>\n    <meta charset=\"utf-8\" />\n    <meta\n      name=\"viewport\"\n      content=\"width=device-width, initial-scale=1, shrink-to-fit=no\"\n    />\n    <meta name=\"theme-color\" content=\"#ffffff\" />\n    <meta name=\"apple-mobile-web-app-capable\" content=\"yes\" />\n    <meta name=\"mobile-web-app-capable\" content=\"yes\" />\n    <meta\n      name=\"google-site-verification\"\n      content=\"k8jb6KQfitguHqeR97svoRnnsgzvs3a0FliHbESVDk4\"\n    />\n    <meta\n      name=\"description\"\n      content=\"Discover the XRP Ledger with this open source explorer. Check account balances, transactions, validators, nodes and analyze blockchain activity.\"\n    />\n    <!--\n      manifest.json provides metadata used when your web app is added to the\n      homescreen on Android. See https://developers.google.com/web/fundamentals/engage-and-retain/web-app-manifest/\n    -->\n    <link rel=\"manifest\" href=\"/manifest.json\" />\n    <link rel=\"shortcut icon\" href=\"/favicon.ico\" type=\"image/x-icon\" />\n    <link href=\"../public/apple-touch-icon.png\" rel=\"apple-touch-icon\" />\n    <link href=\"../public/android-icon.png\" rel=\"icon\" sizes=\"192×192\" />\n    <link\n      href=\"../public/favicon.ico\"\n      type=\"image/x-icon\"\n      rel=\"icon\"\n      sizes=\"64x64 32x32 24x24 16x16\"\n    />\n    <link rel=\"preconnect\" href=\"https://fonts.googleapis.com\" />\n    <link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin />\n    <link\n      href=\"https://fonts.googleapis.com/css2?family=Work+Sans:ital,wght@0,400;0,500;0,600;0,700;1,400;1,700&display=swap\"\n      rel=\"stylesheet\"\n    />\n\n    <title>XRPL Explorer</title>\n    <!-- Google Tag Manager -->\n    <script>\n      window.dataLayer = window.dataLayer || []\n    </script>\n    <% if(VITE_OSANO_ID) { %>\n    <script src=\"https://cmp.osano.com/<%- VITE_OSANO_ID -%>/osano.js\"></script>\n    <% } %> <% if (VITE_GTM_ID) { %>\n    <script>\n      ;(function (w, d, s, l, i) {\n        w[l] = w[l] || []\n        w[l].push({ 'gtm.start': new Date().getTime(), event: 'gtm.js' })\n        var f = d.getElementsByTagName(s)[0],\n          j = d.createElement(s),\n          dl = l != 'dataLayer' ? '&l=' + l : ''\n        j.async = true\n        j.src = 'https://www.googletagmanager.com/gtm.js?id=' + i + dl\n        f.parentNode.insertBefore(j, f)\n      })(window, document, 'script', 'dataLayer', '<%- VITE_GTM_ID -%>')\n    </script>\n    <% } %>\n    <!-- End Google Tag Manager -->\n  </head>\n\n  <body>\n    <noscript> You need to enable JavaScript to run this app. </noscript>\n    <div class=\"xrpl-explorer\" id=\"xrpl-explorer\"></div>\n    <script type=\"module\" src=\"./index.tsx\"></script>\n    <!--\n      This HTML file is a template.\n      If you open it directly in the browser, you will see an empty page.\n\n      You can add webfonts, meta tags, or analytics to this file.\n      The build step will place the bundled scripts into the <body> tag.\n\n      To begin the development, run `npm start` or `yarn start`.\n      To create a production bundle, use `npm run build` or `yarn build`.\n    -->\n  </body>\n</html>\n"
  },
  {
    "path": "src/index.tsx",
    "content": "import { Suspense } from 'react'\nimport { createRoot } from 'react-dom/client'\nimport { BrowserRouter as Router } from 'react-router'\nimport { I18nextProvider } from 'react-i18next'\nimport { Buffer } from 'buffer'\nimport { unregister } from './registerServiceWorker'\nimport './containers/shared/css/global.scss'\nimport { AppWrapper } from './containers/App'\nimport i18n from './i18n'\n\nwindow.Buffer = Buffer\n\nconst root = createRoot(document.getElementById('xrpl-explorer')!)\n\nconst renderApp = () => {\n  root.render(\n    <Suspense fallback=\"Loading\">\n      <I18nextProvider i18n={i18n}>\n        <Router>\n          <AppWrapper />\n        </Router>\n      </I18nextProvider>\n    </Suspense>,\n  )\n}\n\nconst isDevelopment = process.env.NODE_ENV === 'development'\n\nif (isDevelopment) {\n  localStorage.setItem('debug', 'xrpl-debug:*')\n  renderApp()\n} else {\n  localStorage.removeItem('debug')\n  renderApp()\n}\n\nunregister()\n"
  },
  {
    "path": "src/registerServiceWorker.js",
    "content": "// In production, we register a service worker to serve assets from local cache.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on the \"N+1\" visit to a page, since previously\n// cached resources are updated in the background.\n\n// To learn more about the benefits of this model, read https://goo.gl/KwvDNy.\n// This link also includes instructions on opting out of this behavior.\n\nconst isLocalhost = Boolean(\n  window.location.hostname === 'localhost' ||\n    // [::1] is the IPv6 localhost address.\n    window.location.hostname === '[::1]' ||\n    // 127.0.0.1/8 is considered localhost for IPv4.\n    window.location.hostname.match(\n      /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/,\n    ),\n)\n\nexport default function register() {\n  if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n    // The URL constructor is available in all browsers that support SW.\n    const publicUrl = new URL(process.env.PUBLIC_URL, window.location)\n    if (publicUrl.origin !== window.location.origin) {\n      // Our service worker won't work if PUBLIC_URL is on a different origin\n      // from what our page is served on. This might happen if a CDN is used to\n      // serve assets; see https://github.com/facebookincubator/create-react-app/issues/2374\n      return\n    }\n\n    window.addEventListener('load', () => {\n      const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`\n\n      if (isLocalhost) {\n        // This is running on localhost. Lets check if a service worker still exists or not.\n        checkValidServiceWorker(swUrl)\n\n        // Add some additional logging to localhost, pointing developers to the\n        // service worker/PWA documentation.\n        navigator.serviceWorker.ready.then(() => {\n          console.log(\n            'This web app is being served cache-first by a service ' +\n              'worker. To learn more, visit https://goo.gl/SC7cgQ',\n          )\n        })\n      } else {\n        // Is not local host. Just register service worker\n        registerValidSW(swUrl)\n      }\n    })\n  }\n}\n\nfunction registerValidSW(swUrl) {\n  navigator.serviceWorker\n    .register(swUrl)\n    .then((registration) => {\n      registration.onupdatefound = () => {\n        const installingWorker = registration.installing\n        installingWorker.onstatechange = () => {\n          if (installingWorker.state === 'installed') {\n            if (navigator.serviceWorker.controller) {\n              // At this point, the old content will have been purged and\n              // the fresh content will have been added to the cache.\n              // It's the perfect time to display a \"New content is\n              // available; please refresh.\" message in your web app.\n              console.log('New content is available; please refresh.')\n            } else {\n              // At this point, everything has been precached.\n              // It's the perfect time to display a\n              // \"Content is cached for offline use.\" message.\n              console.log('Content is cached for offline use.')\n            }\n          }\n        }\n      }\n    })\n    .catch((error) => {\n      console.error('Error during service worker registration:', error)\n    })\n}\n\nfunction checkValidServiceWorker(swUrl) {\n  // Check if the service worker can be found. If it can't reload the page.\n  fetch(swUrl)\n    .then((response) => {\n      // Ensure service worker exists, and that we really are getting a JS file.\n      if (\n        response.status === 404 ||\n        response.headers.get('content-type').indexOf('javascript') === -1\n      ) {\n        // No service worker found. Probably a different app. Reload the page.\n        navigator.serviceWorker.ready.then((registration) => {\n          registration.unregister().then(() => {\n            window.location.reload()\n          })\n        })\n      } else {\n        // Service worker found. Proceed as normal.\n        registerValidSW(swUrl)\n      }\n    })\n    .catch(() => {\n      console.log(\n        'No internet connection found. App is running in offline mode.',\n      )\n    })\n}\n\nexport function unregister() {\n  if ('serviceWorker' in navigator) {\n    navigator.serviceWorker.ready.then((registration) => {\n      registration.unregister()\n    })\n  }\n}\n"
  },
  {
    "path": "src/rippled/NFTTransactions.ts",
    "content": "import { encodeAccountID } from 'ripple-address-codec'\nimport { hexToBytes } from '@xrplf/isomorphic/utils'\nimport { getNFTTransactions as getNFTTxs } from './lib/rippled'\nimport { formatTransaction } from './lib/utils'\nimport summarize from './lib/txSummary'\nimport logger from './lib/logger'\nimport type { ExplorerXrplClient } from '../containers/shared/SocketContext'\n\nconst log = logger({ name: 'NFT transactions' })\nexport const getNFTTransactions = (\n  rippledSocket: ExplorerXrplClient,\n  tokenId: string,\n  limit?: number,\n  marker?: string,\n) =>\n  getNFTTxs(rippledSocket, tokenId, limit, marker, undefined)\n    .then((data) => {\n      const transactions = data.transactions.map((tx) => {\n        const txn = formatTransaction(tx)\n        return summarize(txn, true)\n      })\n\n      return {\n        transactions,\n        marker: data.marker,\n      }\n    })\n    .catch((error) => {\n      log.error(error.toString())\n      throw error\n    })\n\n// Get the oldest NFT tx by having the 'forward' param set to true\nexport const getOldestNFTTransaction = (\n  rippledSocket: ExplorerXrplClient,\n  tokenId: string,\n) =>\n  getNFTTxs(rippledSocket, tokenId, 1, '', true)\n    .then((data) => {\n      const transactions = data.transactions.map((tx) => {\n        const txn = formatTransaction(tx)\n        return summarize(txn, true)\n      })\n      return {\n        transaction: transactions?.length > 0 ? transactions[0] : undefined,\n      }\n    })\n    .catch((error) => {\n      log.error(error.toString())\n      throw error\n    })\n\nexport const parseIssuerFromNFTokenID = (\n  nftokenID: string,\n): string | undefined => {\n  const issuerPortion = nftokenID.substring(8, 48)\n  if (issuerPortion.length < 20) {\n    return undefined\n  }\n  return encodeAccountID(hexToBytes(nftokenID.substring(8, 48)))\n}\n"
  },
  {
    "path": "src/rippled/accountState.ts",
    "content": "import {\n  isValidClassicAddress,\n  isValidXAddress,\n  xAddressToClassicAddress,\n} from 'ripple-address-codec'\nimport {\n  getAccountInfo,\n  getAccountPaychannels,\n  getServerInfo,\n  getAccountTransactions,\n} from './lib/rippled'\nimport logger from './lib/logger'\nimport { formatAccountInfo, formatSignerList } from './lib/utils'\nimport type { ExplorerXrplClient } from '../containers/shared/SocketContext'\n\ninterface XAddress {\n  classicAddress: string\n  tag: number | false\n  test: boolean\n}\n\nexport interface AccountState {\n  account: string\n  paychannels?: {\n    // eslint-disable-next-line camelcase\n    total_available: number\n    channels: any[]\n  }\n  signerList?: {\n    signers: {\n      account: string\n      weight: number\n    }[]\n    quorum: number\n    maxSigners: number\n  }\n  info: {\n    accountTransactionID?: string\n    reserve?: number\n    sequence?: number\n    ticketCount: number\n    domain?: string\n    emailHash?: string\n    flags: string[]\n    nftMinter?: string\n  }\n  xAddress?: {\n    classicAddress: string\n    tag: number | boolean\n    test: boolean\n  }\n  deleted: boolean\n}\n\nconst log = logger({ name: 'GetAccountState' })\n\nasync function getAccountState(\n  account: string,\n  rippledSocket: ExplorerXrplClient,\n): Promise<AccountState> {\n  let classicAddress: string\n  let decomposedAddress: XAddress | null = null\n  try {\n    if (!isValidClassicAddress(account) && !isValidXAddress(account)) {\n      throw new Error('Malformed address')\n    }\n\n    if (isValidXAddress(account)) {\n      decomposedAddress = xAddressToClassicAddress(account)\n      ;({ classicAddress } = decomposedAddress)\n      const isTestnet = decomposedAddress.test\n      if (\n        (isTestnet && process.env.VITE_ENVIRONMENT === 'mainnet') ||\n        (!isTestnet &&\n          (process.env.VITE_ENVIRONMENT === 'testnet' ||\n            process.env.VITE_ENVIRONMENT === 'devnet'))\n      ) {\n        throw Error('Address on wrong network.')\n      }\n    } else {\n      classicAddress = account\n    }\n  } catch (error: any) {\n    log.error(error.toString())\n    throw error\n  }\n\n  return getAccountInfo(rippledSocket, classicAddress)\n    .then((info) =>\n      Promise.all([\n        getAccountPaychannels(rippledSocket, classicAddress, info.ledger_index),\n        getServerInfo(rippledSocket),\n      ]).then((data) => ({\n        account: info.Account as string,\n        info: formatAccountInfo(info, data[1].info.validated_ledger),\n        signerList: info.signer_lists?.[0]\n          ? formatSignerList(info.signer_lists[0])\n          : undefined,\n        paychannels: data[1],\n        xAddress: decomposedAddress || undefined,\n        deleted: false,\n      })),\n    )\n    .catch((error) => {\n      // Check if it's a deleted account\n      if (error.code === 404) {\n        return getAccountTransactions(rippledSocket, classicAddress, 1).then(\n          (data) => {\n            if (data.transactions[0]?.tx.TransactionType === 'AccountDelete') {\n              return {\n                account: classicAddress,\n                deleted: true,\n                xAddress: decomposedAddress || undefined,\n                info: { reserve: 0, ticketCount: 0, flags: [] },\n              }\n            }\n            throw error\n          },\n        )\n      }\n      log.error(error.message.toString())\n      throw error\n    })\n}\n\nexport default getAccountState\n"
  },
  {
    "path": "src/rippled/accountTransactions.ts",
    "content": "import {\n  isValidClassicAddress,\n  isValidXAddress,\n  xAddressToClassicAddress,\n} from 'ripple-address-codec'\n\nimport { formatTransaction } from './lib/utils'\nimport { getAccountTransactions as getAccountTxs } from './lib/rippled'\nimport summarize from './lib/txSummary'\nimport logger from './lib/logger'\nimport type { ExplorerXrplClient } from '../containers/shared/SocketContext'\n\nconst log = logger({ name: 'account transactions' })\n\nexport interface AccountTransactionsResult {\n  transactions: any[]\n  marker?: any\n}\n\nconst getAccountTransactions = async (\n  account: string,\n  currency: string | undefined,\n  marker: any,\n  limit: number | undefined,\n  rippledSocket: ExplorerXrplClient,\n): Promise<AccountTransactionsResult> => {\n  // TODO: Retrieve txs for untagged X-address only?\n\n  let classicAddress: string\n  let decomposedAddress: {\n    classicAddress: string\n    tag: number | false\n    test: boolean\n  } | null = null\n\n  try {\n    if (!isValidClassicAddress(account) && !isValidXAddress(account)) {\n      throw new Error('Malformed address')\n    }\n\n    if (isValidXAddress(account)) {\n      decomposedAddress = xAddressToClassicAddress(account)\n      ;({ classicAddress } = decomposedAddress)\n      // TODO: Display tag, if present\n      const isTestnet = decomposedAddress.test\n\n      // TODO: Display tag, if present\n      if (\n        (isTestnet && process.env.VITE_ENVIRONMENT === 'mainnet') ||\n        (!isTestnet &&\n          (process.env.VITE_ENVIRONMENT === 'testnet' ||\n            process.env.VITE_ENVIRONMENT === 'devnet'))\n      ) {\n        throw Error('Address on wrong network')\n      }\n    } else {\n      classicAddress = account\n    }\n  } catch (error: any) {\n    log.error(error.toString())\n    throw error\n  }\n\n  log.info(`get transactions: ${account} -> ${classicAddress}`)\n  try {\n    const data = await getAccountTxs(\n      rippledSocket,\n      classicAddress,\n      limit,\n      marker,\n    )\n    const transactions = data.transactions\n      .map((tx: any) => {\n        const txn = formatTransaction(tx)\n        return summarize(txn, true)\n      })\n      .filter((tx: any) => {\n        // No filter - return all transactions\n        if (!currency) {\n          return true\n        }\n\n        // Filter by currency (IOU) or MPT issuance ID (passed as currency)\n        const txString = JSON.stringify(tx)\n        return (\n          txString.includes(`\"currency\":\"${currency.toUpperCase()}\"`) ||\n          txString.includes(`\"${currency}\"`)\n        )\n      })\n    return {\n      transactions,\n      marker: data.marker,\n    }\n  } catch (error: any) {\n    log.error(error.toString())\n    throw error\n  }\n}\n\nexport default getAccountTransactions\n"
  },
  {
    "path": "src/rippled/index.ts",
    "content": "export { default as getAccountState } from './accountState'\nexport { default as getAccountTransactions } from './accountTransactions'\nexport { default as getLedger } from './ledgers'\nexport { default as getTransaction } from './transactions'\nexport { default as getQuorum } from './quorum'\nexport { default as getNegativeUNL } from './nUNL'\nexport { default as getOffers } from './offers'\n\nexport { getAccountInfo, getAMMInfoByAssets } from './lib/rippled'\n"
  },
  {
    "path": "src/rippled/ledgers.ts",
    "content": "import { summarizeLedger } from './lib/summarizeLedger'\nimport { getLedger as getRippledLedger } from './lib/rippled'\nimport logger from './lib/logger'\nimport type { ExplorerXrplClient } from '../containers/shared/SocketContext'\n\nconst log = logger({ name: 'ledgers' })\n\nconst getLedger = async (\n  identifier: string | number,\n  rippledSocket: ExplorerXrplClient,\n): Promise<any> => {\n  const parameters: any = {}\n  if (!isNaN(Number(identifier))) {\n    parameters.ledger_index = Number(identifier)\n  } else if (['validated', 'closed', 'current'].includes(String(identifier))) {\n    // TODO: (this is not reachable as id is validated prior to reaching here)\n    parameters.ledger_index = identifier\n  } else if (!identifier) {\n    parameters.ledger_index = 'validated'\n  } else {\n    parameters.ledger_hash = String(identifier).toUpperCase()\n  }\n\n  log.info(`get ledger: ${JSON.stringify(parameters)}`)\n  try {\n    const ledger = await getRippledLedger(rippledSocket, parameters)\n    return summarizeLedger(ledger, true)\n  } catch (error: any) {\n    log.error(error.toString())\n    throw error\n  }\n}\n\nexport default getLedger\n"
  },
  {
    "path": "src/rippled/lib/convertRippleDate.ts",
    "content": "export const MILLIS_PER_SECOND = 1000\nconst EPOCH_OFFSET = 946684800000\nexport const convertRippleDate = (date: number) =>\n  date * MILLIS_PER_SECOND + EPOCH_OFFSET\n"
  },
  {
    "path": "src/rippled/lib/formatSignerList.ts",
    "content": "import type { SignerListSet } from 'xrpl'\n\nexport const formatSignerList = (data: SignerListSet) => ({\n  quorum: data.SignerQuorum,\n  maxSigners: data.SignerEntries\n    ? data.SignerEntries.reduce(\n        (total, d) => total + d.SignerEntry.SignerWeight,\n        0,\n      )\n    : 0,\n  signers: data.SignerEntries\n    ? data.SignerEntries.map((d) => ({\n        account: d.SignerEntry.Account,\n        weight: d.SignerEntry.SignerWeight,\n      }))\n    : [],\n})\n"
  },
  {
    "path": "src/rippled/lib/logger.ts",
    "content": "/* eslint-disable no-console -- logging file */\n// TODO: refactor this file to use the npm module `debug` which is already used elsewhere\n// and send logs in prod to the backend\nconst logMessage = (type, options, message: string) => {\n  console[type]({ ...options, message })\n}\n\nconst log = (options) => ({\n  info: (message) => logMessage('info', options, message),\n  warn: (message) => logMessage('warn', options, message),\n  error: (message) => logMessage('error', options, message),\n  debug: (message) => logMessage('debug', options, message),\n})\n\nexport default log\n"
  },
  {
    "path": "src/rippled/lib/rippled.ts",
    "content": "import type { XrplClient } from 'xrpl-client'\n\nimport type { ExplorerXrplClient } from '../../containers/shared/SocketContext'\nimport { CTID_REGEX, HASH256_REGEX } from '../../containers/shared/utils'\nimport { formatAmount } from './txSummary/formatAmount'\nimport { Error, XRP_BASE, convertRippleDate } from './utils'\n\nconst N_UNL_INDEX =\n  '2E8A59AA9D3B5B186B0B9E0F62E6C02587CA74A4D778938E957B6357D364B244'\n\nconst formatEscrow = (d: any) => ({\n  id: d.index,\n  account: d.Account,\n  destination: d.Destination,\n  amount: d.Amount / XRP_BASE,\n  condition: d.Condition,\n  cancelAfter: d.CancelAfter ? convertRippleDate(d.CancelAfter) : undefined,\n  finishAfter: d.FinishAfter ? convertRippleDate(d.FinishAfter) : undefined,\n})\n\nconst formatPaychannel = (d: any) => ({\n  id: d.index,\n  account: d.Account,\n  destination: d.Destination,\n  amount: d.Amount / XRP_BASE,\n  balance: d.Balance / XRP_BASE,\n  settleDelay: d.SettleDelay,\n})\n\nconst executeQuery = async (\n  rippledSocket: XrplClient,\n  params: any,\n): Promise<any> =>\n  rippledSocket.send(params).catch((error: any) => {\n    const message =\n      error.response && error.response.error_message\n        ? error.response.error_message\n        : error.toString()\n    const code =\n      error.response && error.response.status ? error.response.status : 500\n    throw new Error(message, code)\n  })\n\n// generic RPC query\nfunction query(rippledSocket: ExplorerXrplClient, options: any): Promise<any> {\n  return executeQuery(rippledSocket, options)\n}\n\n// If there is a separate peer to peer (not reporting mode) server for admin requests, use it.\n// Otherwise use the default rippledSocket for everything.\nfunction queryP2P(\n  rippledSocket: ExplorerXrplClient,\n  options: any,\n): Promise<any> {\n  return executeQuery(rippledSocket.p2pSocket ?? rippledSocket, options)\n}\n\n// get ledger\nconst getLedger = async (\n  rippledSocket: ExplorerXrplClient,\n  parameters: any,\n): Promise<any> => {\n  const request = {\n    command: 'ledger',\n    ...parameters,\n    transactions: true,\n    expand: true,\n  }\n\n  const resp = await query(rippledSocket, request)\n  if (!resp) {\n    throw new Error(`No response from rippled: ${JSON.stringify(resp)}`, 500)\n  }\n  if (resp.error_message === 'ledgerNotFound') {\n    throw new Error('ledger not found', 404)\n  }\n\n  if (resp.error_message === 'ledgerIndexMalformed') {\n    throw new Error('invalid ledger index/hash', 400)\n  }\n\n  if (resp.error_message) {\n    throw new Error(resp.error_message, 500)\n  }\n\n  if (!resp.validated) {\n    throw new Error('ledger not validated', 404)\n  }\n  return resp.ledger\n}\n\n// get ledger_entry\nconst getLedgerEntry = async (\n  rippledSocket: ExplorerXrplClient,\n  { index }: { index: string },\n  ledgerIndex?: number,\n): Promise<any> => {\n  const request = {\n    command: 'ledger_entry',\n    index,\n    ledger_index: ledgerIndex ?? 'validated',\n  }\n\n  const resp = await query(rippledSocket, request)\n  if (resp.error_message === 'entryNotFound') {\n    throw new Error('ledger entry not found', 404)\n  }\n\n  if (resp.error_message === 'invalidParams') {\n    throw new Error('invalidParams for ledger_entry', 404)\n  }\n\n  if (resp.error_message === 'lgrNotFound') {\n    throw new Error('invalid ledger index/hash', 400)\n  }\n\n  if (resp.error_message === 'malformedAddress') {\n    throw new Error(\n      'The ledger_entry request improperly specified an Address field.',\n      404,\n    )\n  }\n\n  if (resp.error_message === 'malformedCurrency') {\n    throw new Error(\n      'The ledger_entry request improperly specified a Currency Code field.',\n      404,\n    )\n  }\n\n  if (resp.error_message === 'malformedOwner') {\n    throw new Error(\n      'The ledger_entry request improperly specified the escrow.owner sub-field.',\n      404,\n    )\n  }\n\n  if (resp.error_message === 'malformedRequest') {\n    throw new Error(\n      'The ledger_entry request provided an invalid combination of fields, or provided the wrong type for one or more fields.',\n      404,\n    )\n  }\n\n  if (resp.error_message === 'unknownOption') {\n    throw new Error(\n      'The fields provided in the ledger_entry request did not match any of the expected request formats.',\n      404,\n    )\n  }\n\n  if (resp.error_message) {\n    throw new Error(resp.error_message, 500)\n  }\n\n  return resp\n}\n\n// get transaction\nconst getTransaction = async (\n  rippledSocket: ExplorerXrplClient,\n  txId: string,\n): Promise<any> => {\n  const params: any = {\n    command: 'tx',\n  }\n  if (HASH256_REGEX.test(txId)) {\n    params.transaction = txId\n  } else if (CTID_REGEX.test(txId)) {\n    params.ctid = txId\n  } else {\n    throw new Error(`${txId} not a ctid or hash`, 404)\n  }\n\n  const resp = await query(rippledSocket, params)\n  if (resp.error === 'txnNotFound') {\n    throw new Error('transaction not found', 404)\n  }\n\n  if (resp.error === 'notImpl') {\n    throw new Error('invalid transaction hash', 400)\n  }\n\n  // TODO: remove the `unknown` option when\n  // https://github.com/XRPLF/rippled/pull/4738 is in a release\n  if (resp.error === 'wrongNetwork' || resp.error === 'unknown') {\n    throw new Error('wrong network for CTID', 406)\n  }\n\n  if (resp.error_message) {\n    throw new Error(resp.error_message, 500)\n  }\n\n  if (!resp.validated) {\n    throw new Error('transaction not validated', 500)\n  }\n  return resp\n}\n\nconst getAccountInfo = async (\n  rippledSocket: ExplorerXrplClient,\n  account: string | unknown,\n  includeSignerLists: boolean = true,\n): Promise<any> => {\n  const resp = await query(rippledSocket, {\n    command: 'account_info',\n    api_version: 1,\n    account,\n    ledger_index: 'validated',\n    signer_lists: includeSignerLists,\n  })\n  if (resp.error === 'actNotFound') {\n    throw new Error('account not found', 404)\n  }\n\n  if (resp.error_message) {\n    throw new Error(resp.error_message, 500)\n  }\n\n  return Object.assign(resp.account_data, {\n    ledger_index: resp.ledger_index,\n  })\n}\n\n// get account escrows\nconst getAccountEscrows = async (\n  rippledSocket: ExplorerXrplClient,\n  account: string,\n  ledgerIndex: string | number = 'validated',\n): Promise<any> => {\n  const resp = await query(rippledSocket, {\n    command: 'account_objects',\n    account,\n    ledger_index: ledgerIndex,\n    type: 'escrow',\n    limit: 400,\n  })\n  if (resp.error === 'actNotFound') {\n    throw new Error('account not found', 404)\n  }\n\n  if (resp.error_message) {\n    throw new Error(resp.error_message, 500)\n  }\n\n  if (!resp.account_objects.length) {\n    return undefined\n  }\n\n  const escrows: any = { in: [], out: [], total: 0, totalIn: 0, totalOut: 0 }\n  resp.account_objects.forEach((d: any) => {\n    const amount = Number(d.Amount)\n    escrows.total += amount\n    if (account === d.Destination) {\n      escrows.in.push(formatEscrow(d))\n      escrows.totalIn += amount\n    } else {\n      escrows.out.push(formatEscrow(d))\n      escrows.totalOut += amount\n    }\n  })\n\n  escrows.total /= XRP_BASE\n  escrows.totalIn /= XRP_BASE\n  escrows.totalOut /= XRP_BASE\n  return escrows\n}\n\n// get account paychannels\nconst getAccountPaychannels = async (\n  rippledSocket: ExplorerXrplClient,\n  account: string,\n  ledgerIndex: string | number = 'validated',\n): Promise<any> => {\n  const list: any[] = []\n  let remaining = 0\n  const getChannels = async (marker?: any): Promise<any> => {\n    const resp = await query(rippledSocket, {\n      command: 'account_objects',\n      marker,\n      account,\n      ledger_index: ledgerIndex,\n      type: 'payment_channel',\n      limit: 400,\n    })\n    if (resp.error === 'actNotFound') {\n      throw new Error('account not found', 404)\n    }\n\n    if (resp.error_message) {\n      throw new Error(resp.error_message, 500)\n    }\n\n    // This isn't working, resp.marker isn't empty, but we don't enter this if block\n    if (!resp.account_objects.length) {\n      return undefined\n    }\n\n    list.push(...resp.account_objects)\n    if (resp.marker) {\n      return getChannels(resp.marker)\n    }\n\n    return undefined\n  }\n\n  await getChannels()\n\n  const channels = list.map((c) => {\n    remaining += c.Amount - c.Balance\n    return formatPaychannel(c)\n  })\n\n  return channels.length\n    ? {\n        channels,\n        total_available: remaining / XRP_BASE,\n      }\n    : undefined\n}\n\n// get account escrows\nconst getAccountBridges = async (\n  rippledSocket: ExplorerXrplClient,\n  account: string,\n  ledgerIndex: string | number = 'validated',\n): Promise<any> => {\n  const resp = await query(rippledSocket, {\n    command: 'account_objects',\n    account,\n    ledger_index: ledgerIndex,\n    type: 'bridge',\n    limit: 400,\n  })\n  if (resp.error === 'actNotFound') {\n    throw new Error('account not found', 404)\n  }\n  if (resp.error === 'invalidParams') {\n    // thrown when XChainBridge amendment is not activated\n    // TODO: remove this when XLS-38d is live in mainnet\n    return undefined\n  }\n\n  if (resp.error_message) {\n    throw new Error(resp.error_message, 500)\n  }\n\n  if (!resp.account_objects.length) {\n    return undefined\n  }\n\n  if (resp.account_objects.length >= 1) {\n    return resp.account_objects.map((bridge: any) => ({\n      lockingChainDoor: bridge.XChainBridge.LockingChainDoor,\n      lockingChainIssue: bridge.XChainBridge.LockingChainIssue,\n      issuingChainDoor: bridge.XChainBridge.IssuingChainDoor,\n      issuingChainIssue: bridge.XChainBridge.LockingChainIssue,\n      minAccountCreateAmount: formatAmount(bridge.MinAccountCreateAmount),\n      signatureReward: formatAmount(bridge.SignatureReward),\n      xchainAccountClaimCount: bridge.XChainAccountClaimCount,\n      xchainAccountCreateCount: bridge.XChainAccountCreateCount,\n      xchainClaimId: bridge.XChainClaimID,\n    }))\n  }\n\n  return undefined\n}\n\n// get Token balance summary\nconst getBalances = async (\n  rippledSocket: ExplorerXrplClient,\n  account: string,\n  ledgerIndex: string | number = 'validated',\n): Promise<any> => {\n  const resp = await queryP2P(rippledSocket, {\n    command: 'gateway_balances',\n    account,\n    ledger_index: ledgerIndex,\n  })\n  if (resp.error === 'actNotFound') {\n    throw new Error('account not found', 404)\n  }\n\n  if (resp.error_message) {\n    throw new Error(resp.error_message, 500)\n  }\n  return resp\n}\n\nconst getAccountTransactions = async (\n  rippledSocket: ExplorerXrplClient,\n  account: string,\n  limit: number = 20,\n  marker: string = '',\n): Promise<any> => {\n  const markerComponents = marker.split('.')\n  const ledger = parseInt(markerComponents[0], 10)\n  const seq = parseInt(markerComponents[1], 10)\n  const resp = await query(rippledSocket, {\n    command: 'account_tx',\n    account,\n    limit,\n    ledger_index_max: -1,\n    ledger_index_min: -1,\n    marker: marker\n      ? {\n          ledger,\n          seq,\n        }\n      : undefined,\n  })\n  if (resp.error === 'actNotFound') {\n    throw new Error('account not found', 404)\n  }\n\n  if (resp.error_message) {\n    throw new Error(resp.error_message, 500)\n  }\n  return {\n    transactions: resp.transactions,\n    marker: resp.marker\n      ? `${resp.marker.ledger}.${resp.marker.seq}`\n      : undefined,\n  }\n}\n\nconst getAccountNFTs = async (\n  rippledSocket: ExplorerXrplClient,\n  account: string,\n  marker: string = '',\n  limit: number = 20,\n): Promise<any> => {\n  const resp = await query(rippledSocket, {\n    command: 'account_nfts',\n    account,\n    marker: marker || undefined,\n    limit, // Not `limit` of NFTs, but `limit` pages of NFTs\n  })\n  if (resp.error === 'actNotFound') {\n    throw new Error('account not found', 404)\n  }\n\n  if (resp.error_message) {\n    throw new Error(resp.error_message, 500)\n  }\n\n  return resp\n}\n\nconst getNFTsIssuedByAccount = async (\n  rippledSocket: ExplorerXrplClient,\n  issuer: string,\n  marker: string = '',\n  limit: number = 20,\n): Promise<any> => {\n  const resp = await query(rippledSocket, {\n    command: 'nfts_by_issuer',\n    issuer,\n    marker: marker || undefined,\n    limit,\n  })\n  if (resp.error === 'actNotFound') {\n    throw new Error('account not found', 404)\n  }\n\n  if (resp.error_message) {\n    throw new Error(resp.error_message, 500)\n  }\n\n  return resp\n}\n\nconst getNFTInfo = async (\n  rippledSocket: ExplorerXrplClient,\n  tokenId: string,\n): Promise<any> => {\n  const resp = await queryP2P(rippledSocket, {\n    command: 'nft_info',\n    api_version: 2,\n    nft_id: tokenId,\n  })\n  if (resp.error === 'objectNotFound') {\n    throw new Error('NFT not found', 404)\n  }\n  if (resp.error_message) {\n    throw new Error(resp.error_message, 500)\n  }\n  return resp\n}\n\nconst getNFToffers = async (\n  offerCmd: string,\n  rippledSocket: ExplorerXrplClient,\n  tokenId: string,\n  limit: number = 50,\n  marker: string = '',\n): Promise<any> => {\n  const allOffers: any[] = []\n  let currentMarker: string | undefined = marker\n\n  do {\n    // eslint-disable-next-line no-await-in-loop\n    const resp = await query(rippledSocket, {\n      command: offerCmd,\n      nft_id: tokenId,\n      limit,\n      marker: currentMarker !== '' ? currentMarker : undefined,\n    })\n\n    // The NFT does not have any offers (note that object refers to the offer rather than the NFT itself).\n    if (resp.error === 'objectNotFound') {\n      throw new Error(resp.error_message, 404)\n    }\n\n    if (resp.error_message) {\n      throw new Error(resp.error_message, 500)\n    }\n\n    allOffers.push(...(resp.offers || []))\n    currentMarker = resp.marker\n  } while (currentMarker)\n\n  return { offers: allOffers }\n}\n\nconst getBuyNFToffers = (\n  rippledSocket: ExplorerXrplClient,\n  tokenId: string,\n  limit: number = 50,\n  marker: string = '',\n): Promise<any> =>\n  getNFToffers('nft_buy_offers', rippledSocket, tokenId, limit, marker)\n\nconst getSellNFToffers = (\n  rippledSocket: ExplorerXrplClient,\n  tokenId: string,\n  limit: number = 50,\n  marker: string = '',\n): Promise<any> =>\n  getNFToffers('nft_sell_offers', rippledSocket, tokenId, limit, marker)\n\nconst getNFTTransactions = async (\n  rippledSocket: ExplorerXrplClient,\n  tokenId: string,\n  limit: number = 20,\n  marker: string = '',\n  forward: boolean = false,\n): Promise<any> => {\n  const markerComponents = marker.split('.')\n  const ledger = parseInt(markerComponents[0], 10)\n  const seq = parseInt(markerComponents[1], 10)\n  const resp = await queryP2P(rippledSocket, {\n    command: 'nft_history',\n    api_version: 2,\n    nft_id: tokenId,\n    limit,\n    ledger_index_max: -1,\n    ledger_index_min: -1,\n    marker: marker\n      ? {\n          ledger,\n          seq,\n        }\n      : undefined,\n    forward,\n  })\n  if (resp.error_message) {\n    throw new Error(resp.error_message, 500)\n  }\n  return {\n    transactions: resp.transactions,\n    marker: resp.marker\n      ? `${resp.marker.ledger}.${resp.marker.seq}`\n      : undefined,\n  }\n}\n\nconst getNegativeUNL = async (\n  rippledSocket: ExplorerXrplClient,\n): Promise<any> => {\n  const resp = await query(rippledSocket, {\n    command: 'ledger_entry',\n    index: N_UNL_INDEX,\n  })\n  if (\n    resp.error === 'entryNotFound' ||\n    resp.error === 'lgrNotFound' ||\n    resp.error === 'objectNotFound'\n  ) {\n    return []\n  }\n\n  if (resp.error_message) {\n    throw new Error(resp.error_message, 500)\n  }\n\n  if (resp.node?.LedgerEntryType !== 'NegativeUNL') {\n    throw new Error('Not a NegativeUNL', 404)\n  }\n\n  return resp\n}\n\n// get server info\nconst getServerInfo = async (\n  rippledSocket: ExplorerXrplClient,\n): Promise<any> => {\n  const resp = await query(rippledSocket, {\n    command: 'server_info',\n  })\n  if (resp.error !== undefined || resp.error_message !== undefined) {\n    throw new Error(resp.error_message || resp.error, 500)\n  }\n\n  return resp\n}\n\n// gets server state\nconst getServerState = async (\n  rippledSocket: ExplorerXrplClient,\n): Promise<any> => {\n  const resp = await query(rippledSocket, {\n    command: 'server_state',\n  })\n  if (resp.error !== undefined || resp.error_message !== undefined) {\n    throw new Error(resp.error_message || resp.error, 500)\n  }\n\n  return resp\n}\n\nconst getOffers = async (\n  rippledSocket: ExplorerXrplClient,\n  currencyCode: string,\n  issuerAddress: string,\n  pairCurrencyCode: string,\n  pairIssuerAddress: string,\n): Promise<any> => {\n  const resp = await query(rippledSocket, {\n    command: 'book_offers',\n    taker_gets: {\n      currency: `${currencyCode.toUpperCase()}`,\n      issuer:\n        currencyCode.toUpperCase() === 'XRP' ? undefined : `${issuerAddress}`,\n    },\n    taker_pays: {\n      currency: `${pairCurrencyCode.toUpperCase()}`,\n      issuer:\n        pairCurrencyCode.toUpperCase() === 'XRP'\n          ? undefined\n          : `${pairIssuerAddress}`,\n    },\n  })\n  if (resp.error !== undefined || resp.error_message !== undefined) {\n    throw new Error(resp.error_message || resp.error, 500)\n  }\n\n  return resp\n}\n\nconst getAMMInfo = async (\n  rippledSocket: ExplorerXrplClient,\n  params: any,\n): Promise<any> => {\n  const request = {\n    command: 'amm_info',\n    ledger_index: 'validated',\n    ...params,\n  }\n\n  const resp = await query(rippledSocket, request)\n  if (resp.error_message) {\n    throw new Error(resp.error_message, 500)\n  }\n\n  if (!resp.validated) {\n    throw new Error(\n      'Ledger is not validated. The response data is pending and might change',\n      500,\n    )\n  }\n\n  return resp\n}\n\nconst getAMMInfoByAssets = (\n  rippledSocket: ExplorerXrplClient,\n  asset: any,\n  asset2: any,\n): Promise<any> => getAMMInfo(rippledSocket, { asset, asset2 })\n\nconst getAMMInfoByAMMAccount = (\n  rippledSocket: ExplorerXrplClient,\n  ammAccount: string,\n): Promise<any> => getAMMInfo(rippledSocket, { amm_account: ammAccount })\n\n// get feature\nconst getFeature = async (\n  rippledSocket: ExplorerXrplClient,\n  amendmentId: string,\n): Promise<any> => {\n  const request = {\n    command: 'feature',\n    feature: amendmentId,\n  }\n  const resp = await query(rippledSocket, request)\n  if (resp == null || resp.error_message) {\n    return null\n  }\n\n  return resp\n}\n\nconst getMPTIssuance = async (\n  rippledSocket: ExplorerXrplClient,\n  tokenId: string | null,\n): Promise<any> => {\n  const resp = await queryP2P(rippledSocket, {\n    command: 'ledger_entry',\n    mpt_issuance: tokenId,\n    ledger_index: 'validated',\n    include_deleted: true,\n  })\n  if (\n    resp.error === 'entryNotFound' ||\n    resp.error === 'lgrNotFound' ||\n    resp.error === 'objectNotFound'\n  ) {\n    throw new Error('MPT Issuance not found', 404)\n  }\n\n  if (resp.error_message) {\n    throw new Error(resp.error_message, 500)\n  }\n\n  if (resp.node?.LedgerEntryType !== 'MPTokenIssuance') {\n    throw new Error('Not an MPTokenIssuance', 404)\n  }\n\n  return resp\n}\n\nconst getAccountMPTs = async (\n  rippledSocket: ExplorerXrplClient,\n  account: string,\n  marker: string = '',\n  ledgerIndex: string | number = 'validated',\n  limit: number = 400,\n): Promise<any> => {\n  const resp = await query(rippledSocket, {\n    command: 'account_objects',\n    account,\n    ledger_index: ledgerIndex,\n    type: 'mptoken',\n    marker: marker || undefined,\n    limit,\n  })\n  if (resp.error === 'actNotFound') {\n    throw new Error('account not found', 404)\n  }\n\n  if (resp.error === 'invalidParams') {\n    // For example, \"error_message\": \"Required field 'account' missing\"\n    throw new Error(resp.error_message, 400)\n  }\n\n  if (resp.error_message) {\n    throw new Error(resp.error_message, 500)\n  }\n\n  return resp\n}\n\nconst getAccountObjects = async (\n  rippledSocket: ExplorerXrplClient,\n  account: string,\n  objectType: string,\n  marker: string = '',\n  ledgerIndex: string | number = 'validated',\n  limit: number = 400,\n): Promise<any> => {\n  const resp = await query(rippledSocket, {\n    command: 'account_objects',\n    account,\n    ledger_index: ledgerIndex,\n    type: objectType,\n    marker: marker || undefined,\n    limit,\n  })\n  if (resp.error === 'actNotFound') {\n    throw new Error('account not found', 404)\n  }\n\n  if (resp.error === 'invalidParams') {\n    // For example, \"error_message\": \"Required field 'account' missing\"\n    throw new Error(resp.error_message, 400)\n  }\n\n  if (resp.error_message) {\n    throw new Error(resp.error_message, 500)\n  }\n\n  return resp\n}\n\nconst getAccountLines = async (\n  rippledSocket: ExplorerXrplClient,\n  account: string,\n  limit: number,\n  marker: string = '',\n): Promise<any> => {\n  const resp = await query(rippledSocket, {\n    command: 'account_lines',\n    account,\n    limit,\n    marker: marker || undefined,\n  })\n  if (resp.error === 'actNotFound') {\n    throw new Error('account not found', 404)\n  }\n  if (resp.error === 'invalidParams') {\n    // For example, \"error_message\": \"Required field 'account' missing\"\n    throw new Error(resp.error_message, 400)\n  }\n\n  if (resp.error_message) {\n    throw new Error(resp.error_message, 500)\n  }\n\n  return resp\n}\n\n/**\n * Fetches MPT holders using the mpt_holders Clio method\n * @see https://xrpl.org/docs/references/http-websocket-apis/public-api-methods/clio-methods/mpt_holders\n */\nconst getMPTHolders = (rippledSocket, mptIssuanceId, limit = 20, marker = '') =>\n  queryP2P(rippledSocket, {\n    command: 'mpt_holders',\n    mpt_issuance_id: mptIssuanceId,\n    limit,\n    marker: marker || undefined,\n  }).then((resp) => {\n    if (resp.error === 'objectNotFound') {\n      throw new Error('MPT Issuance not found', 404)\n    }\n\n    if (resp.error === 'invalidParams') {\n      throw new Error(resp.error_message, 400)\n    }\n\n    if (resp.error_message) {\n      throw new Error(resp.error_message, 500)\n    }\n\n    return resp\n  })\n\n// get Vault object by VaultID\nconst getVault = (rippledSocket, vaultId) =>\n  query(rippledSocket, {\n    command: 'ledger_entry',\n    index: vaultId,\n    ledger_index: 'validated',\n  }).then((resp) => {\n    if (resp.error === 'entryNotFound') {\n      throw new Error('Vault not found', 404)\n    }\n\n    if (resp.error_message === 'invalidParams') {\n      throw new Error('invalidParams for ledger_entry', 404)\n    }\n\n    if (resp.error_message === 'lgrNotFound') {\n      throw new Error('invalid ledger index/hash', 400)\n    }\n\n    // Handle invalid vault ID format (e.g., non-hex string like \"1234\")\n    if (resp.error_message?.includes('not hex string')) {\n      throw new Error('Invalid vault ID format', 400)\n    }\n\n    if (resp.error_message) {\n      throw new Error(resp.error_message, 500)\n    }\n\n    if (resp.node?.LedgerEntryType !== 'Vault') {\n      throw new Error('Not a Vault', 404)\n    }\n\n    return resp.node\n  })\n\n// get LoanBroker object by LoanBrokerID\nconst getLoanBroker = (rippledSocket, loanBrokerId) =>\n  query(rippledSocket, {\n    command: 'ledger_entry',\n    index: loanBrokerId,\n    ledger_index: 'validated',\n  }).then((resp) => {\n    if (resp.error === 'entryNotFound') {\n      throw new Error('LoanBroker not found', 404)\n    }\n\n    if (resp.error_message === 'invalidParams') {\n      throw new Error('invalidParams for ledger_entry', 404)\n    }\n\n    if (resp.error_message === 'lgrNotFound') {\n      throw new Error('invalid ledger index/hash', 400)\n    }\n\n    if (resp.error_message) {\n      throw new Error(resp.error_message, 500)\n    }\n\n    if (resp.node?.LedgerEntryType !== 'LoanBroker') {\n      throw new Error('Not a LoanBroker', 404)\n    }\n\n    return resp.node\n  })\n\nexport {\n  getLedger,\n  getLedgerEntry,\n  getTransaction,\n  getAccountInfo,\n  getAccountEscrows,\n  getAccountPaychannels,\n  getAccountBridges,\n  getAccountNFTs,\n  getAccountObjects,\n  getNFTsIssuedByAccount,\n  getBalances,\n  getAccountTransactions,\n  getNegativeUNL,\n  getServerInfo,\n  getServerState,\n  getOffers,\n  getNFTInfo,\n  getBuyNFToffers,\n  getSellNFToffers,\n  getNFTTransactions,\n  getAMMInfoByAssets,\n  getAMMInfoByAMMAccount,\n  getFeature,\n  getMPTIssuance,\n  getMPTHolders,\n  getAccountMPTs,\n  getAccountLines,\n  getVault,\n  getLoanBroker,\n}\n"
  },
  {
    "path": "src/rippled/lib/summarizeLedger.ts",
    "content": "import summarizeTransaction from './txSummary'\nimport { convertRippleDate } from './convertRippleDate'\nimport { formatTransaction, XRP_BASE } from './utils'\n\ninterface LedgerSummary {\n  ledger_index: number\n  ledger_time: number\n  ledger_hash: string\n  parent_hash: string\n  close_time: number\n  total_xrp: number\n  total_fees: number\n  transactions: any[]\n}\n\nconst summarizeLedger = (ledger: any, txDetails: boolean = false) => {\n  const transactions = ledger.transactions.map((tx: any) => {\n    const d = formatTransaction(tx)\n    return summarizeTransaction(d, txDetails)\n  })\n\n  // eslint-disable-next-line camelcase -- TODO: fix later\n  const total_fees =\n    ledger.transactions.reduce(\n      (sum: number, tx: any) => sum + Number(tx.Fee),\n      0,\n    ) / XRP_BASE\n\n  const summary: LedgerSummary = {\n    ledger_index: Number(ledger.ledger_index),\n    ledger_time: ledger.close_time,\n    ledger_hash: ledger.ledger_hash,\n    parent_hash: ledger.parent_hash,\n    close_time: convertRippleDate(ledger.close_time),\n    total_xrp: ledger.total_coins / XRP_BASE,\n    // eslint-disable-next-line camelcase -- TODO: fix later\n    total_fees,\n    transactions: transactions.sort((a: any, b: any) => a.index - b.index),\n  }\n\n  return summary\n}\n\nexport { summarizeLedger }\n"
  },
  {
    "path": "src/rippled/lib/test/rippled.test.ts",
    "content": "import {\n  getVault,\n  getLoanBroker,\n  getMPTIssuance,\n  getNegativeUNL,\n} from '../rippled'\n\nconst VAULT_INDEX =\n  'EF98FDBA404CBEB4F746DA1026B859E260BBB459D111268F6A26BBC7C4811A04'\n\nconst makeSocket = (response: any) =>\n  ({ send: jest.fn().mockResolvedValue(response) }) as any\n\ndescribe('getVault', () => {\n  it('queries ledger_entry with the supplied vault id', async () => {\n    const socket = makeSocket({\n      node: { LedgerEntryType: 'Vault', index: VAULT_INDEX },\n    })\n\n    await getVault(socket, VAULT_INDEX)\n\n    expect(socket.send).toHaveBeenCalledWith({\n      command: 'ledger_entry',\n      index: VAULT_INDEX,\n      ledger_index: 'validated',\n    })\n  })\n\n  it('returns resp.node when the ledger entry is a Vault', async () => {\n    const node = {\n      LedgerEntryType: 'Vault',\n      Owner: 'rExampleVaultOwner',\n      index: VAULT_INDEX,\n    }\n    const socket = makeSocket({ index: VAULT_INDEX, node, validated: true })\n\n    await expect(getVault(socket, VAULT_INDEX)).resolves.toEqual(node)\n  })\n\n  it('throws when the ledger entry is not a Vault', async () => {\n    // Real devnet response captured 2026-04-27 — this index resolves to a\n    // PermissionedDomain, not a Vault.\n    const socket = makeSocket({\n      index: VAULT_INDEX,\n      node: {\n        LedgerEntryType: 'PermissionedDomain',\n        Owner: 'rKhgwxANWk65QtQziFGeh6AfYwchpnvzzk',\n        index: VAULT_INDEX,\n      },\n      validated: true,\n    })\n\n    await expect(getVault(socket, VAULT_INDEX)).rejects.toMatchObject({\n      message: 'Not a Vault',\n      code: 404,\n    })\n  })\n\n  it('throws \"Vault not found\" when rippled returns entryNotFound', async () => {\n    const socket = makeSocket({ error: 'entryNotFound' })\n\n    await expect(getVault(socket, VAULT_INDEX)).rejects.toMatchObject({\n      message: 'Vault not found',\n      code: 404,\n    })\n  })\n\n  it('throws on invalidParams', async () => {\n    const socket = makeSocket({ error_message: 'invalidParams' })\n\n    await expect(getVault(socket, VAULT_INDEX)).rejects.toMatchObject({\n      message: 'invalidParams for ledger_entry',\n      code: 404,\n    })\n  })\n\n  it('throws on lgrNotFound', async () => {\n    const socket = makeSocket({ error_message: 'lgrNotFound' })\n\n    await expect(getVault(socket, VAULT_INDEX)).rejects.toMatchObject({\n      message: 'invalid ledger index/hash',\n      code: 400,\n    })\n  })\n\n  it('throws \"Invalid vault ID format\" for non-hex ids', async () => {\n    const socket = makeSocket({\n      error_message: '\"1234\" is not hex string',\n    })\n\n    await expect(getVault(socket, '1234')).rejects.toMatchObject({\n      message: 'Invalid vault ID format',\n      code: 400,\n    })\n  })\n\n  it('throws a 500 for any other error_message', async () => {\n    const socket = makeSocket({ error_message: 'unexpected failure' })\n\n    await expect(getVault(socket, VAULT_INDEX)).rejects.toMatchObject({\n      message: 'unexpected failure',\n      code: 500,\n    })\n  })\n})\n\ndescribe('getLoanBroker', () => {\n  const LOAN_BROKER_INDEX =\n    '1111111111111111111111111111111111111111111111111111111111111111'\n\n  it('returns resp.node when the ledger entry is a LoanBroker', async () => {\n    const node = {\n      LedgerEntryType: 'LoanBroker',\n      Owner: 'rExampleLoanBrokerOwner',\n      index: LOAN_BROKER_INDEX,\n    }\n    const socket = makeSocket({ index: LOAN_BROKER_INDEX, node })\n\n    await expect(getLoanBroker(socket, LOAN_BROKER_INDEX)).resolves.toEqual(\n      node,\n    )\n  })\n\n  it('throws when the ledger entry is not a LoanBroker (e.g. Check)', async () => {\n    const socket = makeSocket({\n      index: LOAN_BROKER_INDEX,\n      node: {\n        LedgerEntryType: 'Check',\n        Account: 'rExampleCheckSender',\n        index: LOAN_BROKER_INDEX,\n      },\n    })\n\n    await expect(\n      getLoanBroker(socket, LOAN_BROKER_INDEX),\n    ).rejects.toMatchObject({\n      message: 'Not a LoanBroker',\n      code: 404,\n    })\n  })\n\n  it('throws \"LoanBroker not found\" when rippled returns entryNotFound', async () => {\n    const socket = makeSocket({ error: 'entryNotFound' })\n\n    await expect(\n      getLoanBroker(socket, LOAN_BROKER_INDEX),\n    ).rejects.toMatchObject({\n      message: 'LoanBroker not found',\n      code: 404,\n    })\n  })\n})\n\ndescribe('getMPTIssuance', () => {\n  const MPT_ID = '00002AF2588C244FE5F74BF48B5C5E2823235B243AA34634'\n\n  it('returns the full response when the ledger entry is an MPTokenIssuance', async () => {\n    const resp = {\n      node: {\n        LedgerEntryType: 'MPTokenIssuance',\n        Issuer: 'rExampleMPTIssuer',\n        Sequence: 1,\n      },\n      ledger_index: 100,\n      validated: true,\n    }\n    const socket = makeSocket(resp)\n\n    await expect(getMPTIssuance(socket, MPT_ID)).resolves.toEqual(resp)\n  })\n\n  it('throws when the ledger entry is not an MPTokenIssuance', async () => {\n    const socket = makeSocket({\n      node: {\n        LedgerEntryType: 'Vault',\n        Owner: 'rExampleVaultOwner',\n      },\n      validated: true,\n    })\n\n    await expect(getMPTIssuance(socket, MPT_ID)).rejects.toMatchObject({\n      message: 'Not an MPTokenIssuance',\n      code: 404,\n    })\n  })\n\n  it('throws \"MPT Issuance not found\" when rippled returns entryNotFound', async () => {\n    const socket = makeSocket({ error: 'entryNotFound' })\n\n    await expect(getMPTIssuance(socket, MPT_ID)).rejects.toMatchObject({\n      message: 'MPT Issuance not found',\n      code: 404,\n    })\n  })\n})\n\ndescribe('getNegativeUNL', () => {\n  it('returns the full response when the ledger entry is a NegativeUNL', async () => {\n    const resp = {\n      node: {\n        LedgerEntryType: 'NegativeUNL',\n        DisabledValidators: [],\n      },\n      validated: true,\n    }\n    const socket = makeSocket(resp)\n\n    await expect(getNegativeUNL(socket)).resolves.toEqual(resp)\n  })\n\n  it('throws when the ledger entry is not a NegativeUNL', async () => {\n    const socket = makeSocket({\n      node: { LedgerEntryType: 'AccountRoot' },\n      validated: true,\n    })\n\n    await expect(getNegativeUNL(socket)).rejects.toMatchObject({\n      message: 'Not a NegativeUNL',\n      code: 404,\n    })\n  })\n\n  it('returns [] when the entry is missing', async () => {\n    const socket = makeSocket({ error: 'entryNotFound' })\n\n    await expect(getNegativeUNL(socket)).resolves.toEqual([])\n  })\n})\n"
  },
  {
    "path": "src/rippled/lib/test/utils.test.ts",
    "content": "import {\n  formatAccountInfo,\n  formatNFTInfo,\n  formatTransferFee,\n  formatMPTIssuance,\n} from '../utils'\n\ndescribe('rippled utils:', () => {\n  describe('formatNFTInfo', () => {\n    const oldResponse: any = {\n      nft_id:\n        '0000000025CC40A6A240DB42512BA22826B903A785EE2FA512C5D5A70000000C',\n      ledger_index: 2436210,\n      owner: 'rhSigFwZ9UnbiKbpaco8aSQUsNFXJVz51W',\n      is_burned: true,\n      flags: 3,\n      transfer_fee: 10,\n      issuer: 'rhSigFwZ9UnbiKbpaco8aSQUsNFXJVz51W',\n      nft_taxon: 0,\n      nft_sequence: 12,\n      uri: 'ipfs://bafybeigdyrzt5sfp7udm7hu76uh7y26nf4dfuylqabf3oclgtqy55fbzdi',\n      validated: true,\n      status: 'success',\n      warnings: [\n        \"This is a clio server. clio only serves validated data. If you want to talk to rippled, include 'ledger_index':'current' in your request\",\n      ],\n      minted: undefined,\n      domain: '123456',\n    }\n\n    const newResponse = Object.assign(oldResponse, {\n      nft_serial: 12,\n      uri: '697066733A2F2F62616679626569676479727A74357366703775646D37687537367568377932366E6634646675796C71616266336F636C67747179353566627A6469',\n    })\n\n    delete newResponse.nft_sequence\n\n    it('should format uri and serial on clio <= 1.0.4', () => {\n      const result = formatNFTInfo(oldResponse)\n\n      expect(result.NFTId).toEqual(\n        '0000000025CC40A6A240DB42512BA22826B903A785EE2FA512C5D5A70000000C',\n      )\n      expect(result.isBurned).toEqual(true)\n      expect(result.transferFee).toEqual(10)\n      expect(result.flags).toEqual(['lsfOnlyXRP', 'lsfBurnable'])\n      expect(result.NFTSerial).toEqual(12)\n      expect(result.NFTTaxon).toEqual(0)\n      expect(result.uri).toEqual(\n        'ipfs://bafybeigdyrzt5sfp7udm7hu76uh7y26nf4dfuylqabf3oclgtqy55fbzdi',\n      )\n    })\n    it('should format uri and serial on clio > 1.0.4', () => {\n      const result = formatNFTInfo(newResponse)\n\n      expect(result.NFTSerial).toEqual(12)\n      expect(result.uri).toEqual(\n        'ipfs://bafybeigdyrzt5sfp7udm7hu76uh7y26nf4dfuylqabf3oclgtqy55fbzdi',\n      )\n    })\n  })\n\n  describe('formatAccountInfo', () => {\n    const accountInfoData: any = {\n      Account: 'rDb2kD2sibG5cxhz3VAoRFkmhPrca4JtL8',\n      Balance: '99999975',\n      Flags: 1082130432,\n      LedgerEntryType: 'AccountRoot',\n      OwnerCount: 0,\n      PreviousTxnID:\n        '6174EDD6109E08874F2B7D039084BB2612458D6E4EA26ADE55B10E2B013C2766',\n      PreviousTxnLgrSeq: 4469249,\n      Sequence: 4467999,\n      index: 'A24328E84D9B832F75195C5D100F4AFABB03BF2CD8BF2687354BD933BFBAE353',\n    }\n\n    const serverInfoValidatedLedger: any = {\n      age: 2,\n      base_fee_xrp: 1e-6,\n      hash: '5C68F56D909EF82D0D0BA59A783854ACEE390CF70630AF1B7E238FC448E48741',\n      reserve_base_xrp: 1,\n      reserve_inc_xrp: 0.2,\n      seq: 4545199,\n    }\n\n    it('validate flags', () => {\n      const result = formatAccountInfo(\n        accountInfoData,\n        serverInfoValidatedLedger,\n      )\n\n      expect(result.flags.sort()).toEqual(\n        ['lsfDefaultRipple', 'lsfAllowTrustLineLocking'].sort(),\n      )\n    })\n  })\n\n  describe('formatTransferFee', () => {\n    describe('when no transfer fee is provided', () => {\n      it('should return \"0\" for null', () => {\n        expect(formatTransferFee(null, 'IOU')).toBe('0')\n      })\n\n      it('should return \"0\" for 0', () => {\n        expect(formatTransferFee(0, 'IOU')).toBe('0')\n      })\n    })\n\n    describe('when tokenType is \"IOU\"', () => {\n      it('should calculate percentage for IOU tokens using billion-based formula', () => {\n        // 0.5% transfer fee: 1000000000 + (1000000000 * 0.005) = 1005000000\n        expect(formatTransferFee(1005000000, 'IOU')).toBe('0.5')\n\n        // 10% transfer fee: 1000000000 + (1000000000 * 0.1) = 1100000000\n        expect(formatTransferFee(1100000000, 'IOU')).toBe('10')\n      })\n\n      it('should handle high precision values for IOU tokens', () => {\n        // Test with a value that needs rounding to 7 decimal places\n        const transferFee = 1000000000 + 12345678 // should result in 1.2345678%\n        expect(formatTransferFee(transferFee, 'IOU')).toBe('1.2345678')\n      })\n\n      it('should handle very small transfer fees for IOU tokens', () => {\n        const billion = 1000000000\n        const transferFee = billion + 1 // 0.0000001%\n        expect(formatTransferFee(transferFee, 'IOU')).toBe('1e-7') // JavaScript converts very small numbers to scientific notation\n      })\n    })\n\n    describe('when tokenType is \"MPT\" or \"NFT\"', () => {\n      it('should calculate percentage for MPT tokens using thousand-based formula', () => {\n        // 0.5% transfer fee\n        expect(formatTransferFee(5, 'MPT')).toBe('0.005')\n\n        // 10% transfer fee\n        expect(formatTransferFee(100, 'MPT')).toBe('0.1')\n      })\n\n      it('should calculate percentage for NFT tokens using thousand-based formula', () => {\n        expect(formatTransferFee(5, 'NFT')).toBe('0.005')\n        expect(formatTransferFee(100, 'NFT')).toBe('0.1')\n      })\n\n      it('should handle high precision values for MPT/NFT tokens', () => {\n        // Test with a value that needs rounding to 3 decimal places\n        expect(formatTransferFee(1234, 'MPT')).toBe('1.234')\n        expect(formatTransferFee(1235, 'NFT')).toBe('1.235') // Test rounding\n      })\n\n      it('should handle very small transfer fees for MPT/NFT tokens', () => {\n        expect(formatTransferFee(1, 'MPT')).toBe('0.001')\n        expect(formatTransferFee(0.5, 'NFT')).toBe('0.001') // Should round to 3 decimal places\n      })\n    })\n\n    describe('edge cases', () => {\n      it('should throw error for unsupported token types', () => {\n        // @ts-expect-error - testing invalid token types\n        expect(() => formatTransferFee(100, 'XRP')).toThrow(\n          'Unsupported Token type: XRP',\n        )\n        // @ts-expect-error - testing invalid token types\n        expect(() => formatTransferFee(100, 'INVALID')).toThrow(\n          'Unsupported Token type: INVALID',\n        )\n        // @ts-expect-error - testing invalid token types\n        expect(() => formatTransferFee(100, '')).toThrow(\n          'Unsupported Token type: ',\n        )\n        // @ts-expect-error - testing invalid token types\n        expect(() => formatTransferFee(100, null)).toThrow(\n          'Unsupported Token type: null',\n        )\n      })\n    })\n  })\n\n  describe('formatMPTIssuance', () => {\n    it('should format all MPT issuance fields correctly', () => {\n      // Hex-encoded JSON: {\"t\":\"USD\",\"in\":\"Test Issuer\"}\n      const metadataHex =\n        '7b2274223a22555344222c22696e223a225465737420497373756572227d'\n      const mptIssuanceData: any = {\n        Issuer: 'rMPTTestAccount123456789',\n        AssetScale: 6,\n        MaximumAmount: '1000000000000',\n        OutstandingAmount: '500000000000',\n        TransferFee: 500,\n        Sequence: 1,\n        Flags: 0x7f, // All flags\n        MPTokenMetadata: metadataHex,\n      }\n\n      const result = formatMPTIssuance(mptIssuanceData)\n\n      expect(result.issuer).toBe('rMPTTestAccount123456789')\n      expect(result.assetScale).toBe(6)\n      expect(result.maxAmt).toBe('1000000000000')\n      expect(result.outstandingAmt).toBe('500000000000')\n      expect(result.transferFee).toBe(500)\n      expect(result.sequence).toBe(1)\n      expect(result.flags).toContain('lsfMPTLocked')\n      expect(result.flags).toContain('lsfMPTCanLock')\n      expect(result.flags).toContain('lsfMPTRequireAuth')\n      expect(result.flags).toContain('lsfMPTCanEscrow')\n      expect(result.flags).toContain('lsfMPTCanTrade')\n      expect(result.flags).toContain('lsfMPTCanTransfer')\n      expect(result.flags).toContain('lsfMPTCanClawback')\n      expect(result.rawMPTMetadata).toBe('{\"t\":\"USD\",\"in\":\"Test Issuer\"}')\n      expect(result.parsedMPTMetadata).toEqual({\n        ticker: 'USD',\n        issuer_name: 'Test Issuer',\n      })\n      // isMPTMetadataCompliant is false because the test metadata doesn't meet full XLS-89 requirements\n      expect(result.isMPTMetadataCompliant).toBe(false)\n    })\n  })\n})\n"
  },
  {
    "path": "src/rippled/lib/txSummary/formatAmount.ts",
    "content": "import type { MPTAmount } from 'xrpl'\nimport { Amount, ExplorerAmount } from '../../../containers/shared/types'\nimport { XRP_BASE } from '../utils'\n\n/**\n * Asset type definition for XRPL assets\n */\nexport interface Asset {\n  currency: string\n  issuer?: string\n  isMPT?: boolean\n  mpt_issuance_id?: string\n}\n\n/**\n * Format Asset field according to XRPL specifications\n * - XRP: { \"currency\": \"XRP\" } or \"XRP\" (string)\n * - IOU: { \"currency\": \"USD\", \"issuer\": \"rXXX...\" }\n * - MPT: { \"mpt_issuance_id\": \"000000...\" }\n */\nexport function formatAsset(asset: any): Asset {\n  if (typeof asset === 'string') {\n    return { currency: 'XRP' }\n  }\n\n  if (asset && typeof asset === 'object') {\n    if (asset.mpt_issuance_id) {\n      return {\n        currency: asset.mpt_issuance_id,\n        mpt_issuance_id: asset.mpt_issuance_id,\n        isMPT: true,\n      }\n    }\n    if (asset.currency) {\n      return {\n        currency: asset.currency,\n        issuer: asset.issuer,\n      }\n    }\n  }\n\n  // Fallback to XRP if asset format is unclear\n  return { currency: 'XRP' }\n}\n\nexport const isXRP = (amount: Amount): boolean => typeof amount === 'string'\n\nexport const isMPTAmount = (amount: Amount): amount is MPTAmount =>\n  (amount as MPTAmount).mpt_issuance_id !== undefined &&\n  (amount as MPTAmount).value !== undefined\n\nexport const formatAmount = (d: Amount | number): ExplorerAmount => {\n  if (d == null) {\n    return d\n  }\n\n  if (typeof d === 'string' || typeof d === 'number')\n    return {\n      currency: 'XRP',\n      amount: Number(d) / XRP_BASE,\n    }\n\n  return isMPTAmount(d)\n    ? {\n        currency: d.mpt_issuance_id,\n        amount: d.value,\n        isMPT: true,\n      }\n    : {\n        currency: d.currency,\n        issuer: d.issuer,\n        amount: Number(d.value),\n      }\n}\n\n/**\n * Formats a raw amount using the provided asset information\n * @param amount - The amount to format (string or number)\n * @param asset - The asset information containing currency and issuer\n * @returns ExplorerAmount - Formatted amount with correct currency\n */\nexport function formatAmountWithAsset(amount: string | number, asset: Asset) {\n  if (amount == null || amount === undefined) {\n    return undefined\n  }\n\n  const numericAmount = typeof amount === 'string' ? parseFloat(amount) : amount\n\n  if (asset.currency === 'XRP') {\n    return {\n      currency: 'XRP',\n      amount: numericAmount / XRP_BASE,\n    }\n  }\n\n  if (asset.isMPT) {\n    return {\n      currency: asset.currency,\n      amount: numericAmount,\n      isMPT: true,\n    }\n  }\n\n  return {\n    currency: asset.currency,\n    issuer: asset.issuer!,\n    amount: numericAmount,\n  }\n}\n\nexport default formatAmount\n"
  },
  {
    "path": "src/rippled/lib/txSummary/index.ts",
    "content": "import type { Transaction, TransactionMetadata } from 'xrpl'\nimport { transactionTypes } from '../../../containers/shared/components/Transaction'\nimport { defaultParser } from '../../../containers/shared/components/Transaction/defaultParser'\n\nexport interface TransactionSummary {\n  hash: string\n  ctid: string\n  type: string\n  result: string\n  account: string\n  index?: number\n  fee?: number\n  sequence?: number\n  ticketSequence?: number\n  isHook?: boolean\n  date?: string\n  details?: {\n    instructions: any\n  }\n}\n\nconst getInstructions = (tx: Transaction, meta: TransactionMetadata) => {\n  const type = tx.TransactionType\n  const parser = transactionTypes[type]?.parser || defaultParser\n  return parser(tx, meta)\n}\n\nconst summarizeTransaction = (d: any, details = false): TransactionSummary => {\n  const summary: TransactionSummary = {\n    hash: d.hash,\n    ctid: d.ctid,\n    type: d.tx.TransactionType,\n    result: d.meta.TransactionResult,\n    account: d.tx.Account,\n  }\n\n  if (!details) {\n    return summary\n  }\n\n  return {\n    ...summary,\n    index: Number(d.meta.TransactionIndex),\n    fee: d.tx.Fee / 1000000,\n    sequence: d.tx.Sequence,\n    ticketSequence: d.tx.TicketSequence,\n    isHook: !!d.tx.EmitDetails,\n    date: d.date,\n    details: {\n      instructions: getInstructions(d.tx, d.meta),\n    },\n  }\n}\n\nexport default summarizeTransaction\n"
  },
  {
    "path": "src/rippled/lib/utils.ts",
    "content": "import { hexToString, hexToBytes } from '@xrplf/isomorphic/utils'\nimport { encodeAccountID } from 'ripple-address-codec'\n\nimport { decodeHex } from '../../containers/shared/transactionUtils'\nimport { convertRippleDate } from './convertRippleDate'\nimport { formatSignerList } from './formatSignerList'\nimport {\n  isMPTokenMetadataCompliant as isMPTMetadataCompliant,\n  parseMPTokenMetadata as parseMPTMetadata,\n} from '../../containers/shared/mptUtils'\n\nconst XRP_BASE = 1000000\nconst THOUSAND = 1000\nconst BILLION = 1000000000\n\ntype FlagMap = Record<number, string>\n\nexport const ACCOUNT_FLAGS: FlagMap = {\n  0x00010000: 'lsfPasswordSpent',\n  0x00020000: 'lsfRequireDestTag',\n  0x00040000: 'lsfRequireAuth',\n  0x00080000: 'lsfDisallowXRP',\n  0x00100000: 'lsfDisableMaster',\n  0x00200000: 'lsfNoFreeze',\n  0x00400000: 'lsfGlobalFreeze',\n  0x00800000: 'lsfDefaultRipple',\n  0x01000000: 'lsfDepositAuth',\n  0x04000000: 'lsfDisallowIncomingNFTokenOffer',\n  0x08000000: 'lsfDisallowIncomingCheck',\n  0x10000000: 'lsfDisallowIncomingPayChan',\n  0x20000000: 'lsfDisallowIncomingTrustline',\n  0x80000000: 'lsfAllowTrustLineClawback',\n  0x40000000: 'lsfAllowTrustLineLocking',\n}\nconst NFT_FLAGS: FlagMap = {\n  0x00000001: 'lsfBurnable',\n  0x00000002: 'lsfOnlyXRP',\n  0x00000008: 'lsfTransferable',\n}\nconst MPT_ISSUANCE_FLAGS: FlagMap = {\n  0x00000001: 'lsfMPTLocked',\n  0x00000002: 'lsfMPTCanLock',\n  0x00000004: 'lsfMPTRequireAuth',\n  0x00000008: 'lsfMPTCanEscrow',\n  0x00000010: 'lsfMPTCanTrade',\n  0x00000020: 'lsfMPTCanTransfer',\n  0x00000040: 'lsfMPTCanClawback',\n}\nconst MPTOKEN_FLAGS: FlagMap = {\n  0x00000001: 'lsfMPTLocked',\n  0x00000002: 'lsfMPTAuthorized',\n}\nconst hex32 = (d: number): string => {\n  const int = d & 0xffffffff\n  const hex = int.toString(16).toUpperCase()\n  return `0x${`00000000${hex}`.slice(-8)}`\n}\n\nconst zeroPad = (\n  num: number | string,\n  size: number,\n  back: boolean = false,\n): string => {\n  let s = String(num)\n  while (s.length < (size || 2)) {\n    s = back ? `${s}0` : `0${s}`\n  }\n\n  return s\n}\n\nexport const buildFlags = (\n  flags: number | undefined,\n  flagMap: FlagMap,\n): string[] => {\n  const bits = zeroPad((flags || 0).toString(2), 32).split('')\n\n  return bits\n    .map((value, i) => {\n      const bin = zeroPad(1, 32 - i, true)\n      const int = parseInt(bin, 2)\n      return value === '1' ? flagMap[int] || hex32(int) : undefined\n    })\n    .filter((d): d is string => Boolean(d))\n}\n\ntype TokenType = 'IOU' | 'NFT' | 'MPT'\n\nconst formatTransferFee = (\n  transferFee: number | null | undefined,\n  tokenType: TokenType,\n): string => {\n  if (!transferFee) {\n    return '0'\n  }\n\n  // https://xrpl.org/docs/concepts/tokens/fungible-tokens/transfer-fees#technical-details\n  if (tokenType === 'IOU') {\n    const transferFeePercentage = (100 * (transferFee - BILLION)) / BILLION\n    return parseFloat(transferFeePercentage.toFixed(7)).toString()\n  }\n\n  // MTP: https://xrpl.org/docs/references/protocol/data-types/nftoken#transferfee\n  // NFT: https://xrpl.org/docs/concepts/tokens/fungible-tokens/multi-purpose-tokens#transfer-fees\n  if (tokenType === 'NFT' || tokenType === 'MPT') {\n    const transferFeePercentage = transferFee / THOUSAND\n    return parseFloat(transferFeePercentage.toFixed(3)).toString()\n  }\n\n  throw new Error(`Unsupported Token type: ${tokenType}`)\n}\n\ninterface AccountInfo {\n  AccountTxnID?: string\n  Sequence: number\n  TicketCount?: number\n  OwnerCount: number\n  TickSize?: number\n  TransferRate?: number\n  Domain?: string\n  EmailHash?: string\n  Flags: number\n  Balance: string\n  PreviousTxnID: string\n  PreviousTxnLgrSeq: number\n  NFTokenMinter?: string\n}\n\ninterface ServerInfoValidated {\n  reserve_base_xrp?: number\n  reserve_inc_xrp?: number\n}\n\ninterface FormattedAccountInfo {\n  accountTransactionID?: string\n  sequence: number\n  ticketCount: number\n  ownerCount: number\n  reserve?: number\n  tick?: number\n  rate: string\n  domain?: string\n  emailHash?: string\n  flags: string[]\n  balance: string\n  previousTxn: string\n  previousLedger: number\n  nftMinter?: string\n}\n\nconst formatAccountInfo = (\n  info: AccountInfo,\n  serverInfoValidated: ServerInfoValidated,\n): FormattedAccountInfo => ({\n  accountTransactionID: info.AccountTxnID,\n  sequence: info.Sequence,\n  ticketCount: info.TicketCount ?? 0,\n  ownerCount: info.OwnerCount,\n  reserve:\n    serverInfoValidated.reserve_base_xrp && serverInfoValidated.reserve_inc_xrp\n      ? serverInfoValidated.reserve_base_xrp +\n        info.OwnerCount * serverInfoValidated.reserve_inc_xrp\n      : undefined,\n  tick: info.TickSize,\n  rate: formatTransferFee(info.TransferRate, 'IOU'),\n  domain: info.Domain ? hexToString(info.Domain) : undefined,\n  emailHash: info.EmailHash,\n  flags: buildFlags(info.Flags, ACCOUNT_FLAGS),\n  balance: info.Balance,\n  previousTxn: info.PreviousTxnID,\n  previousLedger: info.PreviousTxnLgrSeq,\n  nftMinter: info.NFTokenMinter,\n})\n\nconst formatTransaction = (tx: any): any => {\n  // `tx` is the property for some v1 arrays of transactions such as account_tx and `tx_json` is used in v2 for all\n  const txn = tx.tx || tx.tx_json || tx\n  // `hash` is up a level on v2 responses objects\n  const hash = txn.hash || tx.hash\n  return {\n    tx: {\n      ...txn,\n      date: txn.date ? convertRippleDate(txn.date) : undefined,\n    },\n    meta: tx.meta || tx.metaData,\n    hash,\n    ledger_index: txn.ledger_index,\n    date: txn.date ? convertRippleDate(txn.date) : undefined,\n  }\n}\n\nclass RippledError extends Error {\n  code: number\n\n  constructor(message: string, code: number) {\n    super(message)\n    if (Error.captureStackTrace) {\n      Error.captureStackTrace(this, this.constructor)\n    }\n    this.name = this.constructor.name\n    this.code = code\n  }\n}\n\nfunction convertHexToString(hex: string | undefined): string | undefined {\n  return hex ? hexToString(hex) : undefined\n}\n\ninterface NFTInfo {\n  nft_id: string\n  ledger_index: number\n  owner: string\n  is_burned: boolean\n  flags: number\n  transfer_fee: number\n  issuer: string\n  nft_taxon: number\n  nft_serial?: number\n  nft_sequence?: number\n  uri: string\n  validated: boolean\n  status?: string\n  warnings?: any[]\n}\n\ninterface FormattedNFTInfo {\n  NFTId: string\n  ledgerIndex: number\n  owner: string\n  isBurned: boolean\n  flags: string[]\n  transferFee: number\n  issuer: string\n  NFTTaxon: number\n  NFTSerial: number\n  uri: string\n  validated: boolean\n  status?: string\n  warnings?: any[]\n}\n\nconst formatNFTInfo = (info: NFTInfo): FormattedNFTInfo => ({\n  NFTId: info.nft_id,\n  ledgerIndex: info.ledger_index,\n  owner: info.owner,\n  isBurned: info.is_burned,\n  flags: buildFlags(info.flags, NFT_FLAGS),\n  transferFee: info.transfer_fee,\n  issuer: info.issuer,\n  NFTTaxon: info.nft_taxon,\n  // TODO: remove `nft_sequence` support after clio update has been fully rolled out.\n  NFTSerial: info.nft_serial ?? info.nft_sequence ?? 0,\n  uri: info.nft_serial ? decodeHex(info.uri) : info.uri,\n  validated: info.validated,\n  status: info.status,\n  warnings: info.warnings,\n})\n\ninterface MPTIssuanceInfo {\n  Issuer: string\n  AssetScale: number\n  MaximumAmount?: string\n  OutstandingAmount?: string\n  TransferFee: number\n  Sequence: number\n  MPTokenMetadata?: string\n  Flags: number\n}\n\ninterface FormattedMPTIssuance {\n  issuer: string\n  assetScale: number\n  maxAmt?: string\n  outstandingAmt: string\n  transferFee: number\n  sequence: number\n  metadata?: any\n  flags: string[]\n  rawMPTMetadata?: string\n  parsedMPTMetadata?: Record<string, unknown>\n  isMPTMetadataCompliant: boolean\n}\n\nconst formatMPTIssuance = (info: MPTIssuanceInfo): FormattedMPTIssuance => {\n  const rawMPTMetadataHex = info.MPTokenMetadata\n  const rawMPTMetadata = rawMPTMetadataHex\n    ? hexToString(rawMPTMetadataHex)\n    : undefined\n\n  return {\n    issuer: info.Issuer,\n    assetScale: info.AssetScale,\n    maxAmt: info.MaximumAmount\n      ? BigInt(info.MaximumAmount).toString(10)\n      : undefined, // default is undefined because the default maxAmt is the largest 63-bit int\n    outstandingAmt: info.OutstandingAmount\n      ? BigInt(info.OutstandingAmount).toString(10)\n      : '0',\n    transferFee: info.TransferFee,\n    sequence: info.Sequence,\n    rawMPTMetadata,\n    parsedMPTMetadata: parseMPTMetadata(rawMPTMetadataHex),\n    isMPTMetadataCompliant: isMPTMetadataCompliant(rawMPTMetadataHex),\n    flags: buildFlags(info.Flags, MPT_ISSUANCE_FLAGS),\n  }\n}\n\ninterface MPTokenInfo {\n  Account: string\n  Flags: number\n  MPTokenIssuanceID: string\n  MPTAmount?: bigint\n}\n\ninterface FormattedMPToken {\n  account: string\n  flags: string[]\n  mptIssuanceID: string\n  mptIssuer: string\n  mptAmount: string\n}\n\nconst formatMPToken = (info: MPTokenInfo): FormattedMPToken => ({\n  account: info.Account,\n  flags: buildFlags(info.Flags, MPTOKEN_FLAGS),\n  mptIssuanceID: info.MPTokenIssuanceID,\n  mptIssuer: encodeAccountID(\n    hexToBytes(info.MPTokenIssuanceID.substring(8, 48)),\n  ),\n  mptAmount: info.MPTAmount ? info.MPTAmount.toString(10) : '0',\n})\n\nexport {\n  XRP_BASE,\n  RippledError as Error,\n  convertRippleDate,\n  formatTransaction,\n  formatSignerList,\n  formatAccountInfo,\n  convertHexToString,\n  formatNFTInfo,\n  formatMPTIssuance,\n  formatMPToken,\n  formatTransferFee,\n}\n"
  },
  {
    "path": "src/rippled/nUNL.ts",
    "content": "import { encodeNodePublic } from 'ripple-address-codec'\nimport { hexToBytes } from '@xrplf/isomorphic/utils'\n\nimport { getNegativeUNL as getRippledNegativeUNL } from './lib/rippled'\nimport logger from './lib/logger'\nimport type { ExplorerXrplClient } from '../containers/shared/SocketContext'\n\nconst log = logger({ name: 'nunl' })\n\nconst getNegativeUNL = async (\n  rippledSocket: ExplorerXrplClient,\n): Promise<string[]> => {\n  log.info(`getting nUNL from rippled`)\n\n  try {\n    const result = await getRippledNegativeUNL(rippledSocket)\n    if (result === undefined || result.length === 0) return []\n\n    if (result.node === undefined)\n      throw new Error('node is not a included in this ledger_entry')\n\n    const validators = result.node.DisabledValidators\n    if (validators !== undefined) {\n      return validators\n        .map((obj: any) => obj.DisabledValidator.PublicKey)\n        .map((key: string) => encodeNodePublic(hexToBytes(key)))\n    }\n\n    return []\n  } catch (error: any) {\n    log.error(error.toString())\n    throw error\n  }\n}\n\nexport default getNegativeUNL\n"
  },
  {
    "path": "src/rippled/offers.ts",
    "content": "import logger from './lib/logger'\nimport { getOffers } from './lib/rippled'\nimport type { ExplorerXrplClient } from '../containers/shared/SocketContext'\n\nconst log = logger({ name: 'offers' })\n\nexport interface OrderBook {\n  offers: any[]\n  averageExchangeRate?: number\n  highestExchangeRate?: number\n  lowestExchangeRate?: number\n}\n\nconst getBookOffers = async (\n  currencyCode: string,\n  issuerAddress: string,\n  pairCurrencyCode: string,\n  pairIssuerAddress: string,\n  rippledSocket: ExplorerXrplClient,\n): Promise<OrderBook> => {\n  try {\n    // log.info('fetching book offers from rippled')\n    let orderBook: any = await getOffers(\n      rippledSocket,\n      currencyCode,\n      issuerAddress,\n      pairCurrencyCode,\n      pairIssuerAddress,\n    )\n    const { offers } = orderBook\n    if (offers.length === 0) {\n      return orderBook\n    }\n    let rateSum = 0\n    let highestExchangeRate = 0\n    let lowestExchangeRate = Number.MAX_VALUE\n    for (const offer of offers) {\n      const takerPays = offer.TakerPays.value || offer.TakerPays\n      const takerGets = offer.TakerGets.value || offer.TakerGets\n      const rate = takerPays / takerGets\n      if (rate > highestExchangeRate) {\n        highestExchangeRate = rate\n      }\n      if (rate < lowestExchangeRate) {\n        lowestExchangeRate = rate\n      }\n      rateSum += rate\n    }\n    const averageExchangeRate = rateSum / offers.length\n\n    offers.sort(\n      (offerA: any, offerB: any) =>\n        offerA.PreviousTxnLgrSeq - offerB.PreviousTxnLgrSeq,\n    )\n\n    orderBook = {\n      ...orderBook,\n      averageExchangeRate,\n      highestExchangeRate,\n      lowestExchangeRate,\n      offers,\n    }\n\n    return orderBook\n  } catch (error: any) {\n    log.error(error.toString())\n    throw error\n  }\n}\n\nexport default getBookOffers\n"
  },
  {
    "path": "src/rippled/quorum.ts",
    "content": "import logger from './lib/logger'\nimport { Error } from './lib/utils'\nimport { getServerInfo } from './lib/rippled'\nimport type { ExplorerXrplClient } from '../containers/shared/SocketContext'\n\nconst log = logger({ name: 'quorum' })\n\nconst getQuorum = async (\n  rippledSocket: ExplorerXrplClient,\n): Promise<number> => {\n  log.info(`fetching server_info from rippled`)\n\n  try {\n    const result = await getServerInfo(rippledSocket)\n    if (result === undefined || result.info === undefined) {\n      throw new Error('Undefined result from getServerInfo()', 500)\n    }\n\n    const quorum = result.info.validation_quorum\n    if (quorum === undefined) {\n      throw new Error('Undefined validation_quorum', 500)\n    }\n\n    return quorum\n  } catch (error: any) {\n    log.error(error.toString())\n    throw error\n  }\n}\n\nexport default getQuorum\n"
  },
  {
    "path": "src/rippled/test/accountTransactions.test.ts",
    "content": "import getAccountTransactions from '../accountTransactions'\n\n// Mock dependencies\njest.mock('../lib/rippled', () => ({\n  getAccountTransactions: jest.fn(),\n}))\n\njest.mock('../lib/utils', () => ({\n  formatTransaction: (tx: any) => tx,\n}))\n\njest.mock('../lib/txSummary', () => (tx: any) => tx)\n\njest.mock('../lib/logger', () => () => ({\n  info: jest.fn(),\n  error: jest.fn(),\n}))\n\n// eslint-disable-next-line @typescript-eslint/no-require-imports\nconst mockGetAccountTxs = require('../lib/rippled').getAccountTransactions\n\ndescribe('accountTransactions', () => {\n  const mockSocket = {} as any\n  const validAccount = 'rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh'\n\n  beforeEach(() => {\n    jest.clearAllMocks()\n  })\n\n  it('should return all transactions when no currency filter is applied', async () => {\n    const mockTxs = {\n      transactions: [\n        { hash: 'tx1', type: 'Payment', currency: 'XRP' },\n        { hash: 'tx2', type: 'Payment', currency: 'USD', issuer: 'rIssuer1' },\n        {\n          hash: 'tx3',\n          type: 'MPTokenAuthorize',\n          mpt_issuance_id: '00000001ABC123',\n        },\n      ],\n      marker: '12345.1',\n    }\n    mockGetAccountTxs.mockResolvedValue(mockTxs)\n\n    const result = await getAccountTransactions(\n      validAccount,\n      undefined, // no currency filter\n      undefined,\n      20,\n      mockSocket,\n    )\n\n    expect(result.transactions).toHaveLength(3)\n    expect(result.transactions[0].hash).toBe('tx1')\n    expect(result.transactions[1].hash).toBe('tx2')\n    expect(result.transactions[2].hash).toBe('tx3')\n    expect(result.marker).toBe('12345.1')\n  })\n\n  it('should filter transactions by IOU currency', async () => {\n    const mockTxs = {\n      transactions: [\n        { hash: 'tx1', type: 'Payment', currency: 'XRP' },\n        { hash: 'tx2', type: 'Payment', currency: 'USD', issuer: 'rIssuer1' },\n        { hash: 'tx3', type: 'Payment', currency: 'EUR', issuer: 'rIssuer2' },\n      ],\n      marker: undefined,\n    }\n    mockGetAccountTxs.mockResolvedValue(mockTxs)\n\n    const result = await getAccountTransactions(\n      validAccount,\n      'usd', // filter by USD (lowercase to test case conversion)\n      undefined,\n      20,\n      mockSocket,\n    )\n\n    expect(result.transactions).toHaveLength(1)\n    expect(result.transactions[0].hash).toBe('tx2')\n    expect(result.transactions[0].currency).toBe('USD')\n  })\n\n  it('should filter transactions by MPT issuance ID', async () => {\n    const mptIssuanceId = '00000001ABC123DEF456'\n    const mockTxs = {\n      transactions: [\n        { hash: 'tx1', type: 'Payment', currency: 'XRP' },\n        { hash: 'tx2', type: 'Payment', currency: 'USD', issuer: 'rIssuer1' },\n        {\n          hash: 'tx3',\n          type: 'MPTokenAuthorize',\n          mpt_issuance_id: mptIssuanceId,\n        },\n        {\n          hash: 'tx4',\n          type: 'MPTokenIssuanceCreate',\n          mpt_issuance_id: mptIssuanceId,\n        },\n      ],\n      marker: undefined,\n    }\n    mockGetAccountTxs.mockResolvedValue(mockTxs)\n\n    const result = await getAccountTransactions(\n      validAccount,\n      mptIssuanceId,\n      undefined,\n      20,\n      mockSocket,\n    )\n\n    expect(result.transactions).toHaveLength(2)\n    expect(result.transactions[0].hash).toBe('tx3')\n    expect(result.transactions[1].hash).toBe('tx4')\n  })\n})\n"
  },
  {
    "path": "src/rippled/token.ts",
    "content": "import logger from './lib/logger'\nimport { formatAccountInfo } from './lib/utils'\nimport { getBalances, getAccountInfo, getServerInfo } from './lib/rippled'\nimport type { ExplorerXrplClient } from '../containers/shared/SocketContext'\n\nconst log = logger({ name: 'iou' })\n\nexport interface TokenData {\n  balance: string\n  reserve?: number\n  sequence: number\n  rate?: string\n  obligations?: string\n  domain?: string\n  emailHash?: string\n  previousLedger: number\n  previousTxn: string\n  flags: string[]\n}\n\nasync function getToken(\n  currencyCode: string,\n  issuer: string,\n  rippledSocket: ExplorerXrplClient,\n): Promise<TokenData> {\n  try {\n    log.info('fetching account info from rippled')\n    const accountInfo = await getAccountInfo(rippledSocket, issuer)\n    const serverInfo = await getServerInfo(rippledSocket)\n\n    log.info('fetching gateway_balances from rippled')\n    const balances = await getBalances(rippledSocket, issuer)\n    const obligations =\n      balances?.obligations && balances.obligations[currencyCode.toUpperCase()]\n    if (!obligations) {\n      throw new Error('Currency not issued by account')\n    }\n\n    const {\n      reserve,\n      sequence,\n      rate,\n      domain,\n      emailHash,\n      balance,\n      flags,\n      previousTxn,\n      previousLedger,\n    } = formatAccountInfo(accountInfo, serverInfo.info.validated_ledger)\n\n    return {\n      reserve,\n      sequence,\n      rate,\n      domain,\n      emailHash,\n      balance,\n      flags,\n      obligations,\n      previousTxn,\n      previousLedger,\n    }\n  } catch (error) {\n    if (error) {\n      log.error(error.toString())\n    }\n    throw error\n  }\n}\n\nexport default getToken\n"
  },
  {
    "path": "src/rippled/transactions.ts",
    "content": "import logger from './lib/logger'\nimport { formatTransaction } from './lib/utils'\nimport { getTransaction as getRippledTransaction } from './lib/rippled'\nimport summarizeTransaction from './lib/txSummary'\nimport type { ExplorerXrplClient } from '../containers/shared/SocketContext'\n\nconst log = logger({ name: 'transactions' })\n\nexport interface TransactionData {\n  summary: any\n  processed: any\n  raw: any\n}\n\nconst getTransaction = async (\n  transactionId: string,\n  rippledSocket: ExplorerXrplClient,\n): Promise<TransactionData> => {\n  log.info(`get tx: ${transactionId}`)\n  try {\n    const data = await getRippledTransaction(rippledSocket, transactionId)\n    const formattedTransaction = formatTransaction(data)\n    return {\n      summary: summarizeTransaction(formattedTransaction, true).details,\n      processed: formattedTransaction,\n      raw: data,\n    }\n  } catch (error: any) {\n    log.error(error.toString())\n    throw error\n  }\n}\n\nexport default getTransaction\n"
  },
  {
    "path": "src/setupTests.ts",
    "content": "import 'dotenv/config'\nimport '@testing-library/jest-dom'\n\nimport { TextEncoder, TextDecoder } from 'util'\n\n// ResizeObserver is not available in jsdom, needed by recharts and other libs\n/* eslint-disable class-methods-use-this */\nglobal.ResizeObserver = class ResizeObserver {\n  observe() {}\n\n  unobserve() {}\n\n  disconnect() {}\n}\n/* eslint-enable class-methods-use-this */\n\nconst mockStorage = {}\n\nwindow.dataLayer = window.dataLayer || []\nwindow.localStorage = window.localStorage || {\n  getItem: (key) => mockStorage[key],\n  setItem: (key, value) => {\n    mockStorage[key] = value\n  },\n  removeItem: (key) => delete mockStorage[key],\n}\n\njest.spyOn(console, 'error')\n// @ts-expect-error\n// eslint-disable-next-line no-console -- only for tests\nconsole.error.mockImplementation(() => {})\nwindow.TextEncoder = TextEncoder\n// @ts-expect-error -- TextDecoder needs to be defined for jest\nwindow.TextDecoder = TextDecoder\n\nafterEach(() => {\n  window.dataLayer = []\n})\n"
  },
  {
    "path": "testUtils/cssTransform.js",
    "content": "module.exports = {\n  process() {\n    return {\n      code: 'module.exports = {};',\n    }\n  },\n  getCacheKey() {\n    // The output is always the same.\n    return 'cssTransform'\n  },\n}\n"
  },
  {
    "path": "testUtils/imageTransform.js",
    "content": "module.exports = {\n  process() {\n    return {\n      code: 'module.exports = {};',\n    }\n  },\n  getCacheKey() {\n    // The output is always the same.\n    return 'imageTransform'\n  },\n}\n"
  },
  {
    "path": "testUtils/svgTransform.js",
    "content": "const path = require('path')\n\n// This is a custom Jest transformer turning file imports into filenames.\n// http://facebook.github.io/jest/docs/en/webpack.html\n\nmodule.exports = {\n  process(_src, filename) {\n    const assetFilename = JSON.stringify(path.basename(filename))\n\n    return {\n      code: `const React = require('react');\n      module.exports = React.forwardRef((props, ref) => {\n        return {\n          $$typeof: Symbol.for('react.element'),\n          type: 'svg',\n          ref: ref,\n          key: null,\n          props: Object.assign({}, props, {\n            children: ${assetFilename}\n          })\n        };\n      });`,\n    }\n  },\n}\n"
  },
  {
    "path": "testUtils/svgUrlTransform.js",
    "content": "// Mock module for SVG imports with ?url suffix\n// Returns a mock URL path for testing\nmodule.exports = '/mock-svg-url.svg'\n"
  },
  {
    "path": "tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"baseUrl\": \"src\",\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"declaration\": true,\n    \"sourceMap\": true,\n    \"outDir\": \"build\",\n    \"strict\": true,\n    \"noUnusedLocals\": true,\n    \"noUnusedParameters\": true,\n    \"noImplicitReturns\": true,\n    \"noImplicitAny\": false,\n    \"noFallthroughCasesInSwitch\": true,\n    \"moduleResolution\": \"node\",\n    \"allowJs\": true,\n    \"checkJs\": false,\n    \"forceConsistentCasingInFileNames\": true,\n    \"esModuleInterop\": true,\n    \"jsx\": \"react-jsx\",\n    \"lib\": [\"dom\", \"dom.iterable\", \"esnext\"],\n    \"types\": [\"jest\"],\n    \"typeRoots\": [\"./node_modules/@types\", \"./@types\"],\n    \"skipLibCheck\": true,\n    \"allowSyntheticDefaultImports\": true,\n    \"resolveJsonModule\": true,\n    \"isolatedModules\": true,\n    \"noEmit\": true\n  },\n  \"include\": [\"src\", \"server\", \"@types\"]\n}\n"
  },
  {
    "path": "vite.config.js",
    "content": "import { defineConfig } from 'vite'\n\nimport react from '@vitejs/plugin-react'\nimport viteTsconfigPaths from 'vite-tsconfig-paths'\nimport svgrPlugin from 'vite-plugin-svgr'\nimport { createHtmlPlugin } from 'vite-plugin-html'\nimport EnvironmentPlugin from 'vite-plugin-environment'\nimport autoprefixer from 'autoprefixer'\n\nimport 'dotenv/config'\n\n// Populate with `version` field of package.json\nprocess.env.VITE_APP_VERSION = process.env.npm_package_version\n\n// https://vitejs.dev/config/\nexport default defineConfig({\n  // source code location\n  root: './src',\n  // where env vars are stored\n  envDir: '..',\n  build: {\n    // where build files should be stored\n    outDir: '../build',\n    // empty the build directory on each build\n    emptyOutDir: true,\n    sourcemap: true,\n    commonjsOptions: {\n      transformMixedEsModules: true,\n    },\n    rollupOptions: {\n      // improve CPU usage\n      cache: false,\n    },\n  },\n  // relative to the root\n  publicDir: '../public',\n  server: {\n    // backend settings\n    open: true,\n    port: 3000,\n    proxy: {\n      '/api': 'http://localhost:5001',\n    },\n  },\n  resolve: {\n    // polyfills\n    alias: {\n      events: 'events',\n    },\n  },\n  optimizeDeps: {\n    esbuildOptions: {\n      define: {\n        // Node.js global to browser globalThis\n        global: 'globalThis',\n      },\n    },\n  },\n  plugins: [\n    // export SVGs as React components by default\n    svgrPlugin({\n      svgrOptions: {\n        ref: true,\n      },\n      include: '**/*.svg',\n    }),\n    react({\n      // Use React plugin in all *.jsx and *.tsx files\n      include: '**/*.{jsx,tsx}',\n    }),\n    createHtmlPlugin({\n      inject: {\n        data: {\n          VITE_GTM_ID: process.env.VITE_GTM_ID,\n          VITE_OSANO_ID: process.env.VITE_OSANO_ID,\n        },\n      },\n    }),\n    // use env vars\n    EnvironmentPlugin('all'),\n    // use TS paths\n    viteTsconfigPaths(),\n  ],\n  css: {\n    postcss: {\n      plugins: [\n        autoprefixer({}), // add options if needed\n      ],\n    },\n    preprocessorOptions: {\n      scss: {\n        api: 'modern-compiler',\n        silenceDeprecations: ['mixed-decls'],\n      },\n    },\n  },\n})\n"
  }
]